{
  "generatedAt": "2026-09-14",
  "scope": "Source package and declaration inventory; no runtime or registry publication certification.",
  "packages": [
    {
      "name": "forge-core",
      "language": "rust",
      "version": "0.2.0",
      "description": "Core types, provider traits, telemetry, and configuration for the Forge SDK",
      "manifest": "forge-rs/crates/forge-core/Cargo.toml",
      "manifestSha256": "1a901659b6abd2d1a28d4e102f7d82268b5f53952cd611e64ad6d90d8998489a",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-core",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-core/src/brew.rs",
          "sha256": "b415caae9da8515cb2ba204ae56c83e70e9987dca79986f81bde4018be81cd31",
          "artifactSha256": "d95c30a2eb1e005c62b015f259fa1d8f4f54562f9ae1b954dfd2872be94eb0c3",
          "url": "/reference/source/forge-rs/crates/forge-core/src/brew.rs.txt",
          "declarations": [
            {
              "name": "::BrewId",
              "line": 54,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\npub struct BrewId(String);",
              "documentation": "Opaque identifier for a brew definition.\n\nBrew IDs are freeform strings chosen by the author. They are used to\nreference brews in sub-brew composition and the brew registry.\n\n# Examples\n\n```\nuse forge_core::brew::BrewId;\n\nlet id = BrewId::new(\"research-pipeline\");\nassert_eq!(id.as_str(), \"research-pipeline\");\n```"
            },
            {
              "name": "::BrewId::new",
              "line": 58,
              "signature": "pub fn new(id: impl Into<String>) -> Self;",
              "documentation": "Creates a new `BrewId` from the given string."
            },
            {
              "name": "::BrewId::as_str",
              "line": 63,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the inner string slice."
            },
            {
              "name": "::NodeId",
              "line": 88,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\npub struct NodeId(String);",
              "documentation": "Opaque identifier for a node within a brew graph.\n\nNode IDs are unique within a single brew. They are freeform strings\nchosen by the brew author.\n\n# Examples\n\n```\nuse forge_core::brew::NodeId;\n\nlet id = NodeId::new(\"fetch-data\");\nassert_eq!(id.as_str(), \"fetch-data\");\n```"
            },
            {
              "name": "::NodeId::new",
              "line": 92,
              "signature": "pub fn new(id: impl Into<String>) -> Self;",
              "documentation": "Creates a new `NodeId` from the given string."
            },
            {
              "name": "::NodeId::as_str",
              "line": 97,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the inner string slice."
            },
            {
              "name": "::BrewVersion",
              "line": 121,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\npub struct BrewVersion(String);",
              "documentation": "Semantic version string for a brew definition.\n\nVersion strings are freeform (no semver parsing is enforced at this layer).\n\n# Examples\n\n```\nuse forge_core::brew::BrewVersion;\n\nlet v = BrewVersion::new(\"1.0.0\");\nassert_eq!(v.as_str(), \"1.0.0\");\n```"
            },
            {
              "name": "::BrewVersion::new",
              "line": 125,
              "signature": "pub fn new(version: impl Into<String>) -> Self;",
              "documentation": "Creates a new `BrewVersion` from the given string."
            },
            {
              "name": "::BrewVersion::as_str",
              "line": 130,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the inner string slice."
            },
            {
              "name": "::JoinMode",
              "line": 159,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum JoinMode {\n    /// Wait for all branches to complete. Fail if any branch fails.\n    AwaitAll,\n    /// Return as soon as one branch completes successfully.\n    FirstSuccess,\n    /// Return as soon as N branches complete successfully.\n    FirstN(u32),\n}",
              "documentation": "Strategy for joining results from parallel fork branches.\n\nDetermines when a `ParallelFork` node is considered complete.\n\n# Examples\n\n```\nuse forge_core::brew::JoinMode;\n\nlet mode = JoinMode::AwaitAll;\nassert_eq!(format!(\"{mode:?}\"), \"AwaitAll\");\n```"
            },
            {
              "name": "::BrewNodeKind",
              "line": 185,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum BrewNodeKind {\n    /// An agent step: send a prompt to a model, optionally with tools.\n    ///\n    /// Maps to a single invocation of the Forge agent execution loop.\n    AgentStep {\n        /// Provider reference (e.g., `openai:gpt-4o`). Symbolic -- resolved\n        /// during the freeze step.\n        provider: ProviderRef,\n        /// Optional system prompt for this step.\n        #[serde(default, skip_serializing_if = \"Option::is_none\")]\n        system_prompt: Option<String>,\n        /// Maximum tool-loop steps for this agent invocation.\n        max_steps: u32,\n    },\n\n    /// A direct tool invocation without an LLM in the loop.\n    ToolInvocation {\n        /// Tool identifier. Must resolve to a registered tool at freeze time.\n        tool_id: String,\n        /// Tool tier classification.\n        tier: ToolTier,\n    },\n\n    /// An MCP tool call routed through a connected MCP server.\n    McpCall {\n        /// MCP server identifier (URI or alias).\n        server_id: String,\n        /// MCP tool name on the remote server.\n        tool_name: String,\n    },\n\n    /// A web operation (HTTP request, browser action, etc.).\n    WebOperation {\n        /// The operation kind identifier.\n        operation: String,\n    },\n\n    /// A conditional branch that routes to one of two targets based on a\n    /// condition expression.\n    ConditionalBranch {\n        /// JSONPath or simple expression evaluated against incoming data.\n        condition_expr: String,\n        /// The node to route to when the condition is true.\n        true_target: NodeId,\n        /// The node to route to when the condition is false.\n        false_target: NodeId,\n    },\n\n    /// A parallel fork that spawns concurrent execution of multiple\n    /// downstream paths, then joins their results.\n    ParallelFork {\n        /// The set of branch targets to execute concurrently.\n        branches: Vec<NodeId>,\n        /// Strategy for joining parallel results.\n        join_mode: JoinMode,\n    },\n\n    /// A reference to another brew, enabling composition. The referenced\n    /// brew is resolved and inlined at freeze time.\n    SubBrewRef {\n        /// The referenced brew's identifier.\n        brew_id: BrewId,\n    },\n\n    /// A human-in-the-loop checkpoint that suspends execution until a\n    /// human provides approval or input.\n    HumanCheckpoint {\n        /// The prompt displayed to the human reviewer.\n        prompt: String,\n        /// Maximum wait time in milliseconds before timeout. `None` means\n        /// wait indefinitely.\n        #[serde(default, skip_serializing_if = \"Option::is_none\")]\n        timeout_ms: Option<u64>,\n    },\n}",
              "documentation": "The execution semantics of a node in the brew graph.\n\nEach variant describes what kind of work a node performs. The node kind\ncarries symbolic references (provider strings, tool names, MCP server IDs)\nthat are validated during resolution.\n\n# ANVIL Spec Reference\n\nNode kinds map to the execution primitives defined in ANVIL Spec SS7.1-7.2:\nagent steps, tool invocations, MCP calls, web operations, branching,\nparallel execution, sub-workflow composition, and human checkpoints."
            },
            {
              "name": "::BrewNode",
              "line": 285,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct BrewNode {\n/// Stable identifier within this brew.\n\npub id: NodeId,\n/// The node's execution semantics.\n\npub kind: BrewNodeKind,\n/// Arbitrary key-value metadata for tooling and visualization.\n\n#[serde(default, skip_serializing_if = \"BTreeMap::is_empty\")]\npub metadata: BTreeMap<String, String>\n}",
              "documentation": "A single node in the brew execution graph.\n\nCombines a unique [`NodeId`], an execution [`BrewNodeKind`], and\narbitrary string metadata for tooling and visualization.\n\n# Examples\n\n```\nuse forge_core::brew::{BrewNode, BrewNodeKind, NodeId};\nuse forge_core::provider::ProviderRef;\nuse std::collections::BTreeMap;\n\nlet node = BrewNode {\n    id: NodeId::new(\"step-1\"),\n    kind: BrewNodeKind::AgentStep {\n        provider: ProviderRef::parse(\"openai:gpt-4o\").unwrap(),\n        system_prompt: Some(\"You are helpful.\".into()),\n        max_steps: 10,\n    },\n    metadata: BTreeMap::new(),\n};\nassert_eq!(node.id.as_str(), \"step-1\");\n```"
            },
            {
              "name": "::BrewEdgeKind",
              "line": 319,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum BrewEdgeKind {\n    /// Data flow: output of source is fed as input to target.\n    DataFlow,\n    /// Control flow: target executes after source completes.\n    ControlFlow,\n    /// Error flow: target executes when source fails.\n    ErrorFlow,\n}",
              "documentation": "The semantics of a directed edge in the brew graph.\n\nThree edge kinds model the three relationships between nodes:\n\n| Kind | Semantics |\n|------|-----------|\n| `DataFlow` | Output of source feeds as input to target |\n| `ControlFlow` | Target executes after source completes |\n| `ErrorFlow` | Target executes when source fails |\n\n# Examples\n\n```\nuse forge_core::brew::BrewEdgeKind;\n\nlet kind = BrewEdgeKind::DataFlow;\nassert_eq!(format!(\"{kind:?}\"), \"DataFlow\");\n```"
            },
            {
              "name": "::BrewEdge",
              "line": 348,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\npub struct BrewEdge {\n/// Source node.\n\npub from: NodeId,\n/// Target node.\n\npub to: NodeId,\n/// Edge semantics.\n\npub kind: BrewEdgeKind\n}",
              "documentation": "A directed edge in the brew graph connecting two nodes.\n\nEdges carry the source node, target node, and edge kind. They derive\n`Ord` for deterministic storage in `BTreeSet`, ordered by\n`(from, to, kind)`.\n\n# Examples\n\n```\nuse forge_core::brew::{BrewEdge, BrewEdgeKind, NodeId};\n\nlet edge = BrewEdge {\n    from: NodeId::new(\"a\"),\n    to: NodeId::new(\"b\"),\n    kind: BrewEdgeKind::DataFlow,\n};\nassert_eq!(edge.from.as_str(), \"a\");\nassert_eq!(edge.to.as_str(), \"b\");\n```"
            },
            {
              "name": "::Brew",
              "line": 397,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct Brew {\n/// Unique identifier for this brew definition.\n\npub id: BrewId,\n/// Semantic version of this brew definition.\n\npub version: BrewVersion,\n/// The graph's nodes, keyed by stable node ID.\n\n/// `BTreeMap` ensures deterministic serialization order.\n\npub nodes: BTreeMap<NodeId, BrewNode>,\n/// The graph's edges. `BTreeSet` ensures deterministic ordering\n\n/// by `(from, to, kind)`.\n\npub edges: BTreeSet<BrewEdge>,\n/// Designated entry nodes. Execution begins at these nodes.\n\npub entry_nodes: Vec<NodeId>,\n/// Designated exit nodes. When all exit nodes complete, the brew\n\n/// execution is complete.\n\npub exit_nodes: Vec<NodeId>,\n/// Optional model topology for this brew. When set, it provides\n\n/// the multi-model slot configuration for agent steps.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub topology: Option<ModelTopology>\n}",
              "documentation": "A composable execution graph of typed nodes and typed edges.\n\nA `Brew` is a mutable, dynamic structure carrying symbolic references\n(`ProviderRef` strings, tool names, MCP server IDs) that have not yet\nbeen validated against a live environment. To execute a Brew durably,\nit must first be frozen into a\n[`ResolvedBrewPlan`](crate::brew_resolver::ResolvedBrewPlan) via\n[`resolve`](crate::brew_resolver::resolve).\n\nAll maps are `BTreeMap` and all sets are `BTreeSet` for deterministic\nserialization. The same Brew always produces byte-identical JSON.\n\n# ANVIL Spec Reference\n\nANVIL Spec SS7.2 -- Workflows. Brews generalize the three workflow types\n(sequential, parallel, router) into a unified directed graph model.\n\n# Examples\n\n```\nuse forge_core::brew::{Brew, BrewId, BrewVersion, BrewNode, BrewNodeKind, BrewEdge, BrewEdgeKind, NodeId};\nuse forge_core::provider::ProviderRef;\nuse std::collections::{BTreeMap, BTreeSet};\n\nlet brew = Brew {\n    id: BrewId::new(\"my-brew\"),\n    version: BrewVersion::new(\"1.0.0\"),\n    nodes: BTreeMap::new(),\n    edges: BTreeSet::new(),\n    entry_nodes: vec![],\n    exit_nodes: vec![],\n    topology: None,\n};\nassert_eq!(brew.id.as_str(), \"my-brew\");\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/brew_builder.rs",
          "sha256": "4bb2af75ea6352f4d981df63726d3a7979818c2f68d8f2776333e32ba05762e4",
          "artifactSha256": "a406ca400214336e8155c916bbb3d6913e6d3c9eccec4a6c05ebd61dd6ef9978",
          "url": "/reference/source/forge-rs/crates/forge-core/src/brew_builder.rs.txt",
          "declarations": [
            {
              "name": "::BrewBuilder",
              "line": 80,
              "signature": "#[derive(Debug)]\npub struct BrewBuilder {\n\n}",
              "documentation": "Builder for constructing [`Brew`] instances with structural validation.\n\nThe builder accumulates nodes and edges, then validates the graph\nstructure at [`build()`](Self::build) time. It enforces:\n\n1. All edge endpoints reference existing nodes.\n2. Designated entry/exit nodes exist in the graph.\n3. The graph contains no cycles (topological sort).\n4. At least one entry and one exit node are present.\n\n# ANVIL Spec Reference\n\nANVIL Spec SS7.2 -- Workflows. The builder produces a valid Brew graph\nthat can be resolved against a runtime environment.\n\n# Examples\n\n```\nuse forge_core::brew_builder::BrewBuilder;\nuse forge_core::brew::{BrewNodeKind, BrewEdgeKind};\nuse forge_core::provider::ProviderRef;\n\nlet brew = BrewBuilder::new(\"my-brew\", \"1.0.0\")\n    .add_node(\"start\", BrewNodeKind::WebOperation {\n        operation: \"fetch\".into(),\n    })\n    .set_entry(\"start\")\n    .set_exit(\"start\")\n    .build()\n    .unwrap();\n```"
            },
            {
              "name": "::BrewBuilder::new",
              "line": 116,
              "signature": "pub fn new(id: impl Into<String>, version: impl Into<String>) -> Self;",
              "documentation": "Creates a new `BrewBuilder` with the given identifier and version.\n\n# Arguments\n\n* `id` - The brew identifier string.\n* `version` - The semantic version string.\n\n# Returns\n\nA new builder with no nodes, edges, or designated entry/exit nodes.\n\n# Examples\n\n```\nuse forge_core::brew_builder::BrewBuilder;\n\nlet builder = BrewBuilder::new(\"my-brew\", \"1.0.0\");\n```"
            },
            {
              "name": "::BrewBuilder::add_node",
              "line": 152,
              "signature": "pub fn add_node(&mut self, node_id: impl Into<String>, kind: BrewNodeKind) -> &mut Self;",
              "documentation": "Adds a node to the brew graph.\n\nIf a node with the same ID already exists, it is replaced.\n\n# Arguments\n\n* `node_id` - The unique node identifier within this brew.\n* `kind` - The execution semantics of the node.\n\n# Returns\n\n`&mut Self` for chaining.\n\n# Examples\n\n```\nuse forge_core::brew_builder::BrewBuilder;\nuse forge_core::brew::BrewNodeKind;\n\nlet mut builder = BrewBuilder::new(\"b\", \"1.0.0\");\nbuilder.add_node(\"step1\", BrewNodeKind::WebOperation {\n    operation: \"noop\".into(),\n});\n```"
            },
            {
              "name": "::BrewBuilder::add_edge",
              "line": 192,
              "signature": "pub fn add_edge(\n        &mut self,\n        from: impl Into<String>,\n        to: impl Into<String>,\n        edge_kind: BrewEdgeKind,\n    ) -> &mut Self;",
              "documentation": "Adds a directed edge between two nodes.\n\nEdge validity (endpoint existence) is checked at build time, not\nat insertion time. This allows edges to be added before their\nendpoint nodes.\n\n# Arguments\n\n* `from` - The source node identifier.\n* `to` - The target node identifier.\n* `edge_kind` - The edge semantics.\n\n# Returns\n\n`&mut Self` for chaining.\n\n# Examples\n\n```\nuse forge_core::brew_builder::BrewBuilder;\nuse forge_core::brew::{BrewNodeKind, BrewEdgeKind};\n\nlet mut builder = BrewBuilder::new(\"b\", \"1.0.0\");\nbuilder\n    .add_node(\"a\", BrewNodeKind::WebOperation { operation: \"x\".into() })\n    .add_node(\"b\", BrewNodeKind::WebOperation { operation: \"y\".into() })\n    .add_edge(\"a\", \"b\", BrewEdgeKind::DataFlow);\n```"
            },
            {
              "name": "::BrewBuilder::set_entry",
              "line": 218,
              "signature": "pub fn set_entry(&mut self, node_id: impl Into<String>) -> &mut Self;",
              "documentation": "Designates a node as an entry node.\n\nEntry nodes are where execution begins. Multiple entry nodes are\nallowed. Entry node existence is validated at build time.\n\n# Arguments\n\n* `node_id` - The node identifier to designate as an entry.\n\n# Returns\n\n`&mut Self` for chaining."
            },
            {
              "name": "::BrewBuilder::set_exit",
              "line": 236,
              "signature": "pub fn set_exit(&mut self, node_id: impl Into<String>) -> &mut Self;",
              "documentation": "Designates a node as an exit node.\n\nExit nodes mark where execution ends. When all exit nodes complete,\nthe brew execution is complete. Multiple exit nodes are allowed.\nExit node existence is validated at build time.\n\n# Arguments\n\n* `node_id` - The node identifier to designate as an exit.\n\n# Returns\n\n`&mut Self` for chaining."
            },
            {
              "name": "::BrewBuilder::with_topology",
              "line": 253,
              "signature": "pub fn with_topology(&mut self, topology: ModelTopology) -> &mut Self;",
              "documentation": "Sets the model topology for this brew.\n\nThe topology provides multi-model slot configuration for agent steps.\nThis is optional; agent steps can reference providers directly.\n\n# Arguments\n\n* `topology` - The model topology to associate with this brew.\n\n# Returns\n\n`&mut Self` for chaining."
            },
            {
              "name": "::BrewBuilder::with_metadata",
              "line": 273,
              "signature": "pub fn with_metadata(\n        &mut self,\n        node_id: impl AsRef<str>,\n        key: impl Into<String>,\n        value: impl Into<String>,\n    ) -> &mut Self;",
              "documentation": "Adds a metadata key-value pair to a specific node.\n\nIf the node does not exist, this method is a no-op. Metadata is\nused by tooling (e.g., Brew Studio) for layout, annotations, and\ncustom properties.\n\n# Arguments\n\n* `node_id` - The node to annotate.\n* `key` - The metadata key.\n* `value` - The metadata value.\n\n# Returns\n\n`&mut Self` for chaining."
            },
            {
              "name": "::BrewBuilder::build",
              "line": 319,
              "signature": "pub fn build(&mut self) -> ForgeResult<Brew>;",
              "documentation": "Builds the brew, validating all structural invariants.\n\n# Validation Rules\n\n1. At least one entry node must be designated.\n2. At least one exit node must be designated.\n3. All entry nodes must exist in the graph.\n4. All exit nodes must exist in the graph.\n5. All edge endpoints (source and target) must reference existing nodes.\n6. The graph must be acyclic (topological sort must succeed).\n\n# Returns\n\nA validated [`Brew`], or a [`ForgeError::SchemaValidation`] if any\ninvariant is violated.\n\n# Errors\n\nReturns `ForgeError::SchemaValidation` with a descriptive message\nindicating which invariant was violated.\n\n# Examples\n\n```\nuse forge_core::brew_builder::BrewBuilder;\nuse forge_core::brew::BrewNodeKind;\n\n// Missing entry/exit nodes fails\nlet result = BrewBuilder::new(\"b\", \"1.0.0\")\n    .add_node(\"n\", BrewNodeKind::WebOperation { operation: \"x\".into() })\n    .build();\nassert!(result.is_err());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/brew_resolver.rs",
          "sha256": "f204ded62f143874ad4cf5c5e517b183016d6ee3cf901be5f085687db9419112",
          "artifactSha256": "aa4ebca62fc1fc69ad1dd0854644c85684a808883026ab4c1d08281093dffd7a",
          "url": "/reference/source/forge-rs/crates/forge-core/src/brew_resolver.rs.txt",
          "declarations": [
            {
              "name": "::BrewEnvironment",
              "line": 95,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct BrewEnvironment {\n/// Registered model providers, keyed by their `namespace:model` string.\n\npub providers: BTreeMap<String, ProviderRef>,\n/// Registered tool names available in this environment.\n\npub tools: BTreeSet<String>,\n/// Connected MCP server identifiers (URIs or aliases).\n\npub mcp_servers: BTreeSet<String>,\n/// Web capabilities available in this environment.\n\npub web_capabilities: BTreeSet<String>,\n/// Brew definitions available for sub-brew composition.\n\npub sub_brews: BTreeSet<BrewId>\n}",
              "documentation": "The runtime environment against which a brew is resolved.\n\nCaptures the available providers, tools, MCP servers, and web capabilities\nat a specific point in time. The resolver validates every symbolic\nreference in the brew against this environment.\n\nAll collections use `BTreeMap`/`BTreeSet` for deterministic hashing.\n\n# Examples\n\n```\nuse forge_core::brew_resolver::BrewEnvironment;\nuse forge_core::provider::ProviderRef;\nuse std::collections::{BTreeMap, BTreeSet};\n\nlet env = BrewEnvironment {\n    providers: BTreeMap::from([\n        (\"openai:gpt-4o\".into(), ProviderRef::parse(\"openai:gpt-4o\").unwrap()),\n    ]),\n    tools: BTreeSet::from([\"http_get\".into()]),\n    mcp_servers: BTreeSet::from([\"mcp://local\".into()]),\n    web_capabilities: BTreeSet::from([\"http_request\".into()]),\n    sub_brews: BTreeSet::from([forge_core::brew::BrewId::new(\"research\")]),\n};\n```"
            },
            {
              "name": "::BrewResolutionErrorKind",
              "line": 118,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum BrewResolutionErrorKind {\n    /// A provider reference in an `AgentStep` node is not registered.\n    ProviderUnavailable,\n    /// A tool name in a `ToolInvocation` node is not registered.\n    ToolNotFound,\n    /// An MCP server in an `McpCall` node is not connected.\n    McpServerNotFound,\n    /// A web capability in a `WebOperation` node is not available.\n    WebCapabilityUnavailable,\n    /// A sub-brew reference in a `SubBrewRef` node is not in the registry.\n    SubBrewNotFound,\n}",
              "documentation": "The kind of resolution error encountered for a specific node.\n\nEach variant describes a specific reason why a node's symbolic reference\ncould not be resolved against the environment."
            },
            {
              "name": "::BrewResolutionError",
              "line": 149,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct BrewResolutionError {\n/// The node that failed resolution.\n\npub node_id: NodeId,\n/// What went wrong.\n\npub error_kind: BrewResolutionErrorKind\n}",
              "documentation": "A resolution error for a specific node in the brew graph.\n\nContains the failing node's ID and the specific reason the reference\ncould not be resolved.\n\n# Examples\n\n```\nuse forge_core::brew_resolver::{BrewResolutionError, BrewResolutionErrorKind};\nuse forge_core::brew::NodeId;\n\nlet err = BrewResolutionError {\n    node_id: NodeId::new(\"step-1\"),\n    error_kind: BrewResolutionErrorKind::ProviderUnavailable,\n};\nassert_eq!(err.node_id.as_str(), \"step-1\");\n```"
            },
            {
              "name": "::ResolvedNodeKind",
              "line": 178,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum ResolvedNodeKind {\n    /// Agent step with verified provider.\n    AgentStep {\n        /// Verified provider reference.\n        provider: ProviderRef,\n        /// Optional system prompt.\n        #[serde(default, skip_serializing_if = \"Option::is_none\")]\n        system_prompt: Option<String>,\n        /// Maximum tool-loop steps.\n        max_steps: u32,\n    },\n    /// Tool invocation with verified tool name.\n    ToolInvocation {\n        /// Verified tool identifier.\n        tool_id: String,\n        /// Tool tier classification.\n        tier: ToolTier,\n    },\n    /// MCP call with verified server and tool.\n    McpCall {\n        /// Verified MCP server identifier.\n        server_id: String,\n        /// Tool name on the remote server.\n        tool_name: String,\n    },\n    /// Web operation with verified capability.\n    WebOperation {\n        /// Verified operation kind.\n        operation: String,\n    },\n    /// Conditional branch with verified targets.\n    ConditionalBranch {\n        /// Condition expression.\n        condition_expr: String,\n        /// Verified true target.\n        true_target: NodeId,\n        /// Verified false target.\n        false_target: NodeId,\n    },\n    /// Parallel fork with verified branches.\n    ParallelFork {\n        /// Verified branch targets.\n        branches: Vec<NodeId>,\n        /// Join strategy.\n        join_mode: JoinMode,\n    },\n    /// Sub-brew reference (verified to exist).\n    SubBrewRef {\n        /// Verified brew identifier.\n        brew_id: BrewId,\n    },\n    /// Human checkpoint (no external references to verify).\n    HumanCheckpoint {\n        /// Prompt text.\n        prompt: String,\n        /// Optional timeout.\n        #[serde(default, skip_serializing_if = \"Option::is_none\")]\n        timeout_ms: Option<u64>,\n    },\n}",
              "documentation": "A resolved node kind -- mirrors [`BrewNodeKind`] but with all references\nverified to exist in the environment.\n\nThis is the frozen, validated variant of [`BrewNodeKind`]. Creating a\n`ResolvedNodeKind` certifies that all symbolic references have been\nchecked."
            },
            {
              "name": "::ResolvedNode",
              "line": 241,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ResolvedNode {\n/// The node identifier.\n\npub id: NodeId,\n/// The resolved (verified) node kind.\n\npub kind: ResolvedNodeKind\n}",
              "documentation": "A resolved node: verified node kind plus the original node ID."
            },
            {
              "name": "::ResolvedBrewPlan",
              "line": 298,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ResolvedBrewPlan {\n/// Deterministic plan identifier: `BLAKE3(brew_id || brew_version ||\n\n/// environment_hash)`. Does **not** include timestamps.\n\npub plan_id: String,\n/// The source brew's identifier.\n\npub brew_id: BrewId,\n/// The source brew's version.\n\npub brew_version: BrewVersion,\n/// ISO 8601 timestamp of when resolution occurred. Runtime metadata,\n\n/// **not** included in `plan_id`.\n\npub resolved_at: String,\n/// BLAKE3 hash of the serialized `BrewEnvironment`.\n\npub environment_hash: String,\n/// Resolved nodes keyed by node ID.\n\npub nodes: BTreeMap<NodeId, ResolvedNode>,\n/// Edges from the original brew (unchanged -- edges carry no symbolic\n\n/// references that need resolution).\n\npub edges: BTreeSet<BrewEdge>,\n/// Topologically sorted execution order.\n\npub execution_order: Vec<NodeId>,\n/// Entry nodes from the original brew.\n\npub entry_nodes: Vec<NodeId>,\n/// Exit nodes from the original brew.\n\npub exit_nodes: Vec<NodeId>\n}",
              "documentation": "A frozen, deterministic execution plan produced by resolving a [`Brew`]\nagainst a [`BrewEnvironment`].\n\nEvery symbolic reference in the original brew has been validated. The plan\ncarries a deterministic `plan_id` computed as\n`BLAKE3(brew_id || brew_version || environment_hash)`. The `resolved_at`\ntimestamp is runtime metadata and does **not** participate in the\n`plan_id` computation.\n\nFlowers executes `ResolvedBrewPlan`s. Never raw Brews.\n\n# Determinism\n\nThe same brew resolved against the same environment always produces\nidentical `plan_id` values, regardless of when the resolution occurs.\nThis enables content-addressed caching and replay verification.\n\n# Examples\n\n```\nuse forge_core::brew_resolver::{BrewEnvironment, resolve};\nuse forge_core::brew_builder::BrewBuilder;\nuse forge_core::brew::BrewNodeKind;\nuse std::collections::{BTreeMap, BTreeSet};\n\nlet brew = BrewBuilder::new(\"demo\", \"1.0.0\")\n    .add_node(\"step\", BrewNodeKind::WebOperation {\n        operation: \"http_get\".into(),\n    })\n    .set_entry(\"step\")\n    .set_exit(\"step\")\n    .build()\n    .unwrap();\n\nlet env = BrewEnvironment {\n    providers: BTreeMap::new(),\n    tools: BTreeSet::new(),\n    mcp_servers: BTreeSet::new(),\n    web_capabilities: BTreeSet::from([\"http_get\".into()]),\n    sub_brews: BTreeSet::new(),\n};\n\nlet plan = resolve(&brew, &env).unwrap();\nassert!(!plan.plan_id.is_empty());\n```"
            },
            {
              "name": "::resolve",
              "line": 404,
              "signature": "pub fn resolve(\n    brew: &Brew,\n    environment: &BrewEnvironment,\n) -> Result<ResolvedBrewPlan, Vec<BrewResolutionError>>;",
              "documentation": "Resolves a [`Brew`] against a [`BrewEnvironment`], producing a frozen\n[`ResolvedBrewPlan`].\n\nThe resolver validates **every** node's symbolic references against the\nenvironment. If any node fails validation, **all** errors are collected\nand returned. The resolver does not stop at the first error.\n\n# Arguments\n\n* `brew` - The brew to resolve.\n* `environment` - The runtime environment to validate against.\n\n# Returns\n\nA `ResolvedBrewPlan` on success, or a `Vec<BrewResolutionError>` containing\nall validation failures.\n\n# Examples\n\n```\nuse forge_core::brew_resolver::{BrewEnvironment, resolve};\nuse forge_core::brew_builder::BrewBuilder;\nuse forge_core::brew::BrewNodeKind;\nuse forge_core::provider::ProviderRef;\nuse std::collections::{BTreeMap, BTreeSet};\n\nlet brew = BrewBuilder::new(\"test\", \"1.0.0\")\n    .add_node(\"s\", BrewNodeKind::AgentStep {\n        provider: ProviderRef::parse(\"openai:gpt-4o\").unwrap(),\n        system_prompt: None,\n        max_steps: 5,\n    })\n    .set_entry(\"s\")\n    .set_exit(\"s\")\n    .build()\n    .unwrap();\n\nlet env = BrewEnvironment {\n    providers: BTreeMap::from([\n        (\"openai:gpt-4o\".into(), ProviderRef::parse(\"openai:gpt-4o\").unwrap()),\n    ]),\n    tools: BTreeSet::new(),\n    mcp_servers: BTreeSet::new(),\n    web_capabilities: BTreeSet::new(),\n    sub_brews: BTreeSet::new(),\n};\n\nlet plan = resolve(&brew, &env).unwrap();\nassert_eq!(plan.brew_id.as_str(), \"test\");\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/config.rs",
          "sha256": "6d275cf6291fa694f39c55c47ee6307b9f19d035bdc943fac42a44b31735fbc9",
          "artifactSha256": "12af76cc40536b8880ee8a129952b72705ec9d64846e298c694019fd7c17d4f9",
          "url": "/reference/source/forge-rs/crates/forge-core/src/config.rs.txt",
          "declarations": [
            {
              "name": "pub use crate::replay::{ReplayConfig, DEFAULT_CLOCK_SKEW, DEFAULT_NONCE_CACHE_SIZE};",
              "line": 18,
              "signature": "pub use crate::replay::{ReplayConfig, DEFAULT_CLOCK_SKEW, DEFAULT_NONCE_CACHE_SIZE};",
              "documentation": ""
            },
            {
              "name": "::GenerateOptions",
              "line": 39,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct GenerateOptions {\n/// Sampling temperature (0.0 = deterministic, 2.0 = maximum randomness).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub temperature: Option<f64>,\n/// Maximum tokens to generate.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub max_tokens: Option<u32>,\n/// Top-p (nucleus) sampling threshold.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub top_p: Option<f64>,\n/// Stop sequences \u2014 generation stops when any of these are produced.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub stop_sequences: Option<Vec<String>>,\n/// Frequency penalty (-2.0 to 2.0).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub frequency_penalty: Option<f64>,\n/// Presence penalty (-2.0 to 2.0).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub presence_penalty: Option<f64>,\n/// Seed for deterministic generation (if supported by provider).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub seed: Option<u64>,\n/// JSON schema for structured output enforcement.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub output_schema: Option<JsonSchema>\n}",
              "documentation": "Options for text generation calls.\n\nControls model behavior during inference. All fields are optional;\nproviders use sensible defaults when not specified.\n\n# ANVIL Spec \u00a76.1\n\nThe cognitive interface accepts inference options that map to these fields.\n\n# Examples\n\n```\nuse forge_core::config::GenerateOptions;\n\nlet opts = GenerateOptions::default()\n    .with_temperature(0.7)\n    .with_max_tokens(1024);\n```"
            },
            {
              "name": "::GenerateOptions::with_temperature",
              "line": 75,
              "signature": "pub fn with_temperature(mut self, temperature: f64) -> Self;",
              "documentation": "Sets the temperature."
            },
            {
              "name": "::GenerateOptions::with_max_tokens",
              "line": 81,
              "signature": "pub fn with_max_tokens(mut self, max_tokens: u32) -> Self;",
              "documentation": "Sets the maximum tokens."
            },
            {
              "name": "::GenerateOptions::with_top_p",
              "line": 87,
              "signature": "pub fn with_top_p(mut self, top_p: f64) -> Self;",
              "documentation": "Sets the top-p value."
            },
            {
              "name": "::GenerateOptions::with_stop_sequences",
              "line": 93,
              "signature": "pub fn with_stop_sequences(mut self, sequences: Vec<String>) -> Self;",
              "documentation": "Sets the stop sequences."
            },
            {
              "name": "::GenerateOptions::with_frequency_penalty",
              "line": 99,
              "signature": "pub fn with_frequency_penalty(mut self, penalty: f64) -> Self;",
              "documentation": "Sets the frequency penalty."
            },
            {
              "name": "::GenerateOptions::with_presence_penalty",
              "line": 105,
              "signature": "pub fn with_presence_penalty(mut self, penalty: f64) -> Self;",
              "documentation": "Sets the presence penalty."
            },
            {
              "name": "::GenerateOptions::with_seed",
              "line": 111,
              "signature": "pub fn with_seed(mut self, seed: u64) -> Self;",
              "documentation": "Sets the seed for deterministic generation."
            },
            {
              "name": "::GenerateOptions::with_output_schema",
              "line": 117,
              "signature": "pub fn with_output_schema(mut self, schema: JsonSchema) -> Self;",
              "documentation": "Sets the output schema for structured generation."
            },
            {
              "name": "::EmbedOptions",
              "line": 133,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct EmbedOptions {\n/// The embedding model to use (if different from default).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub model: Option<String>,\n/// Dimensionality of the output embeddings (if configurable).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub dimensions: Option<u32>\n}",
              "documentation": "Options for embedding calls.\n\n# Examples\n\n```\nuse forge_core::config::EmbedOptions;\n\nlet opts = EmbedOptions::default();\n```"
            },
            {
              "name": "::EmbedOptions::with_model",
              "line": 145,
              "signature": "pub fn with_model(mut self, model: impl Into<String>) -> Self;",
              "documentation": "Sets the embedding model."
            },
            {
              "name": "::EmbedOptions::with_dimensions",
              "line": 151,
              "signature": "pub fn with_dimensions(mut self, dimensions: u32) -> Self;",
              "documentation": "Sets the embedding dimensions."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/error.rs",
          "sha256": "4a2c5c2bf0ec528a071a0e3469d1888c4a7331ed32252c164b0cf711826b131f",
          "artifactSha256": "6da3822bb078576f96a67df80b8a5585b725d7d0716afca1217d352e9601cd85",
          "url": "/reference/source/forge-rs/crates/forge-core/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeError",
              "line": 23,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeError {\n    /// A provider was not found in the registry.\n    #[error(\"provider '{provider_ref}' not found in registry; register it with ProviderRegistry::register() before use\")]\n    ProviderNotFound {\n        /// The provider reference that was looked up (e.g., \"openai:gpt-4o\").\n        provider_ref: String,\n    },\n\n    /// A provider reference string is malformed.\n    #[error(\"invalid provider reference '{input}': expected format 'namespace:model' (e.g., 'openai:gpt-4o')\")]\n    InvalidProviderRef {\n        /// The malformed input string.\n        input: String,\n    },\n\n    /// JSON schema validation failed.\n    #[error(\"schema validation failed at path '{path}': {reason}\")]\n    SchemaValidation {\n        /// JSON pointer path to the failing field.\n        path: String,\n        /// Human-readable description of what was expected.\n        reason: String,\n    },\n\n    /// An invalid lifecycle state transition was attempted.\n    ///\n    /// See ANVIL Spec \u00a75.1 \u2014 Lifecycle State Machine for valid transitions.\n    #[error(\"invalid lifecycle transition from {from} to {to}: {reason} (see ANVIL Spec \u00a75.1)\")]\n    InvalidLifecycleTransition {\n        /// The current state.\n        from: String,\n        /// The attempted target state.\n        to: String,\n        /// Why this transition is invalid.\n        reason: String,\n    },\n\n    /// A tool invocation was denied due to insufficient capabilities.\n    #[error(\"tool '{tool_name}' invocation denied: agent {agent_did} lacks capability '{required_capability}' in Arsenal ACT {act_id}\")]\n    ToolInvocationDenied {\n        /// The tool that was being invoked.\n        tool_name: String,\n        /// The agent's DID.\n        agent_did: String,\n        /// The capability that was required but missing.\n        required_capability: String,\n        /// The ACT that was checked.\n        act_id: String,\n    },\n\n    /// A tool execution failed.\n    #[error(\"tool '{tool_name}' execution failed: {reason}\")]\n    ToolExecutionFailed {\n        /// The tool that failed.\n        tool_name: String,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// JSON serialization or deserialization failed.\n    #[error(\"JSON error: {0}\")]\n    Json(#[from] serde_json::Error),\n\n    /// A required configuration value is missing.\n    #[error(\"missing configuration: {field} is required ({hint})\")]\n    MissingConfig {\n        /// The configuration field name.\n        field: String,\n        /// A hint about where to set this value.\n        hint: String,\n    },\n\n    /// The stop condition limit was reached.\n    #[error(\"generation stopped: {reason} (steps={steps}, tokens={tokens})\")]\n    StopConditionReached {\n        /// Why generation was stopped.\n        reason: String,\n        /// Number of steps completed.\n        steps: u32,\n        /// Total tokens consumed.\n        tokens: u64,\n    },\n\n    /// A telemetry emission failed. Non-fatal but logged.\n    #[error(\"telemetry emission failed: {reason}\")]\n    TelemetryError {\n        /// What went wrong with telemetry.\n        reason: String,\n    },\n\n    /// The model does not support the requested operation.\n    #[error(\"model '{model}' does not support {operation}\")]\n    UnsupportedOperation {\n        /// The model identifier.\n        model: String,\n        /// The operation that was requested.\n        operation: String,\n    },\n\n    /// The provider exists but is not currently available.\n    #[error(\"provider '{provider_ref}' is unavailable: {reason}\")]\n    ProviderUnavailable {\n        /// The provider reference that could not be used.\n        provider_ref: String,\n        /// Human-readable unavailability reason.\n        reason: String,\n    },\n\n    /// Provider authentication failed.\n    #[error(\"provider '{provider_ref}' authentication failed: {reason}\")]\n    ProviderAuthenticationFailed {\n        /// The provider reference that failed authentication.\n        provider_ref: String,\n        /// Human-readable authentication failure reason.\n        reason: String,\n    },\n\n    /// The provider does not support a required runtime capability.\n    #[error(\"provider '{provider_ref}' does not support runtime capability '{capability}'\")]\n    CapabilityUnsupported {\n        /// The provider reference that was negotiated.\n        provider_ref: String,\n        /// The missing runtime capability.\n        capability: String,\n    },\n\n    /// Provider runtime negotiation failed.\n    #[error(\"provider '{provider_ref}' negotiation failed: {reason}\")]\n    ProviderNegotiationFailed {\n        /// The provider reference that was negotiated.\n        provider_ref: String,\n        /// Human-readable negotiation failure reason.\n        reason: String,\n    },\n\n    /// The provider session expired before the requested action could complete.\n    #[error(\"provider '{provider_ref}' session '{session_id}' expired before the requested action completed\")]\n    ProviderSessionExpired {\n        /// The provider reference for the expired session.\n        provider_ref: String,\n        /// The expired session identifier.\n        session_id: String,\n    },\n\n    /// The provider does not support interrupts.\n    #[error(\"provider '{provider_ref}' does not support session interrupts\")]\n    ProviderInterruptUnsupported {\n        /// The provider reference that lacks interrupt support.\n        provider_ref: String,\n    },\n\n    /// The provider does not support resuming sessions.\n    #[error(\"provider '{provider_ref}' does not support session resume\")]\n    ProviderResumeUnsupported {\n        /// The provider reference that lacks resume support.\n        provider_ref: String,\n    },\n\n    /// An internal error that should not occur in normal operation.\n    #[error(\"internal error: {0}\")]\n    Internal(String),\n}",
              "documentation": "Top-level error type for the Forge SDK core crate.\n\nEvery variant includes actionable context: what failed, why, and what the\ndeveloper should check. No generic \"something went wrong\" messages.\n\n# ANVIL Spec Reference\n\nError handling follows ANVIL Spec \u00a714.2 \u2014 all errors are typed, loggable,\nand carry enough context for audit trail entries."
            },
            {
              "name": "::ForgeResult",
              "line": 187,
              "signature": "pub type ForgeResult<T> = Result<T, ForgeError>;",
              "documentation": "A specialized `Result` type for Forge core operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/lib.rs",
          "sha256": "17c4eba253c5e60b1c9bfb71608092bb3d48a2e314a86b0822d6f9ebf6f5ef50",
          "artifactSha256": "f0cdc8fd9542d0f995d89dec04c1ee5f33395c4f7f11c83fa1d979e2328129c0",
          "url": "/reference/source/forge-rs/crates/forge-core/src/lib.rs.txt",
          "declarations": [
            {
              "name": "brew",
              "line": 50,
              "signature": "pub mod brew;",
              "documentation": "# forge-core\n\nCore types, provider traits, telemetry, and configuration for the Forge SDK.\n\nThis crate is the foundation of the Forge SDK. Every other Forge crate depends\non `forge-core` for shared types. It provides:\n\n- **Message types** \u2014 `ModelMessage`, `Role`, `MessagePart` for LLM communication\n- **Tool types** \u2014 `ToolDefinition`, `ToolCall`, `ToolResult`, `ToolTier` for the 3-tier tool system\n- **Schema validation** \u2014 Zero-dependency `JsonSchema` for parameter validation\n- **Provider abstraction** \u2014 `LanguageModel` trait and `ProviderRegistry`\n- **Configuration** \u2014 `GenerateOptions`, `EmbedOptions` for inference calls\n- **Output types** \u2014 `GenerateResult`, `StreamChunk`, `FinishReason`, `Usage`\n- **Telemetry** \u2014 `ForgeSpan`, `ForgeEvent`, `TelemetryEmitter` (OTel-compatible)\n- **Error handling** \u2014 `ForgeError` with actionable messages\n- **Topology** \u2014 `ModelTopology`, `ModelSlot` for multi-model agent assignment\n- **Routing** \u2014 `ModelRouter` trait, `DefaultModelRouter`, `RoutingContext` for model selection\n- **Common types** \u2014 `AgentDid`, `Timestamp`\n\n# ANVIL Spec Reference\n\nThis crate implements types from the following ANVIL specification sections:\n- \u00a75.1 \u2014 Lifecycle State Machine (state types)\n- \u00a76.1 \u2014 Cognitive Interface (model trait, message types)\n- \u00a76.2 \u2014 Provider Abstraction (provider registry)\n- \u00a78.1\u20138.4 \u2014 Tool Classification (tool tiers, definitions)\n- \u00a714.1 \u2014 Telemetry (span and event types)\n- \u00a714.2 \u2014 Error Handling (typed error enums)\n\n# Examples\n\n```\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\nuse forge_core::provider::ProviderRef;\n\n// Create a conversation\nlet messages = vec![\n    ModelMessage::text(Role::System, \"You are a helpful assistant.\"),\n    ModelMessage::text(Role::User, \"What is 2+2?\"),\n];\n\n// Parse a provider reference\nlet provider = ProviderRef::parse(\"openai:gpt-4o\").unwrap();\nassert_eq!(provider.namespace(), \"openai\");\n```"
            },
            {
              "name": "brew_builder",
              "line": 51,
              "signature": "pub mod brew_builder;",
              "documentation": ""
            },
            {
              "name": "brew_resolver",
              "line": 52,
              "signature": "pub mod brew_resolver;",
              "documentation": ""
            },
            {
              "name": "config",
              "line": 53,
              "signature": "pub mod config;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 54,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "message",
              "line": 55,
              "signature": "pub mod message;",
              "documentation": ""
            },
            {
              "name": "model",
              "line": 56,
              "signature": "pub mod model;",
              "documentation": ""
            },
            {
              "name": "output",
              "line": 57,
              "signature": "pub mod output;",
              "documentation": ""
            },
            {
              "name": "provider",
              "line": 58,
              "signature": "pub mod provider;",
              "documentation": ""
            },
            {
              "name": "provider_runtime",
              "line": 59,
              "signature": "pub mod provider_runtime;",
              "documentation": ""
            },
            {
              "name": "replay",
              "line": 60,
              "signature": "pub mod replay;",
              "documentation": ""
            },
            {
              "name": "routing",
              "line": 61,
              "signature": "pub mod routing;",
              "documentation": ""
            },
            {
              "name": "schema",
              "line": 62,
              "signature": "pub mod schema;",
              "documentation": ""
            },
            {
              "name": "telemetry",
              "line": 63,
              "signature": "pub mod telemetry;",
              "documentation": ""
            },
            {
              "name": "tool",
              "line": 64,
              "signature": "pub mod tool;",
              "documentation": ""
            },
            {
              "name": "topology",
              "line": 65,
              "signature": "pub mod topology;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 66,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 69,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::brew::{\n        Brew, BrewEdge, BrewEdgeKind, BrewId, BrewNode, BrewNodeKind, BrewVersion, JoinMode, NodeId,\n    };",
              "line": 70,
              "signature": "pub use crate::brew::{\n        Brew, BrewEdge, BrewEdgeKind, BrewId, BrewNode, BrewNodeKind, BrewVersion, JoinMode, NodeId,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::brew_builder::BrewBuilder;",
              "line": 73,
              "signature": "pub use crate::brew_builder::BrewBuilder;",
              "documentation": ""
            },
            {
              "name": "pub use crate::brew_resolver::{\n        BrewEnvironment, BrewResolutionError, BrewResolutionErrorKind, ResolvedBrewPlan,\n        ResolvedNode, ResolvedNodeKind,\n    };",
              "line": 74,
              "signature": "pub use crate::brew_resolver::{\n        BrewEnvironment, BrewResolutionError, BrewResolutionErrorKind, ResolvedBrewPlan,\n        ResolvedNode, ResolvedNodeKind,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::config::{EmbedOptions, GenerateOptions};",
              "line": 78,
              "signature": "pub use crate::config::{EmbedOptions, GenerateOptions};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{ForgeError, ForgeResult};",
              "line": 79,
              "signature": "pub use crate::error::{ForgeError, ForgeResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::message::{MessagePart, ModelMessage, Role};",
              "line": 80,
              "signature": "pub use crate::message::{MessagePart, ModelMessage, Role};",
              "documentation": ""
            },
            {
              "name": "pub use crate::model::LanguageModel;",
              "line": 81,
              "signature": "pub use crate::model::LanguageModel;",
              "documentation": ""
            },
            {
              "name": "pub use crate::output::{FinishReason, GenerateResult, StreamChunk, Usage};",
              "line": 82,
              "signature": "pub use crate::output::{FinishReason, GenerateResult, StreamChunk, Usage};",
              "documentation": ""
            },
            {
              "name": "pub use crate::provider::{ProviderRef, ProviderRegistry};",
              "line": 83,
              "signature": "pub use crate::provider::{ProviderRef, ProviderRegistry};",
              "documentation": ""
            },
            {
              "name": "pub use crate::provider_runtime::{\n        ProviderNegotiationRequest, ProviderNegotiationResult, ProviderRuntimeCapabilities,\n        ProviderSessionEvent, ProviderSessionState, ProviderUsageSummary, RuntimeCapability,\n    };",
              "line": 84,
              "signature": "pub use crate::provider_runtime::{\n        ProviderNegotiationRequest, ProviderNegotiationResult, ProviderRuntimeCapabilities,\n        ProviderSessionEvent, ProviderSessionState, ProviderUsageSummary, RuntimeCapability,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::replay::{\n        legacy_accept_from_env, ReplayConfig, ReplayError, ReplayValidator, DEFAULT_CLOCK_SKEW,\n        DEFAULT_NONCE_CACHE_SIZE,\n    };",
              "line": 88,
              "signature": "pub use crate::replay::{\n        legacy_accept_from_env, ReplayConfig, ReplayError, ReplayValidator, DEFAULT_CLOCK_SKEW,\n        DEFAULT_NONCE_CACHE_SIZE,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::routing::{\n        DefaultModelRouter, ExecutionTopology, ModelRouter, ResolvedRoute, RoutingContext, TaskMode,\n    };",
              "line": 92,
              "signature": "pub use crate::routing::{\n        DefaultModelRouter, ExecutionTopology, ModelRouter, ResolvedRoute, RoutingContext, TaskMode,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::schema::JsonSchema;",
              "line": 95,
              "signature": "pub use crate::schema::JsonSchema;",
              "documentation": ""
            },
            {
              "name": "pub use crate::telemetry::{ForgeEvent, ForgeSpan, TelemetryEmitter};",
              "line": 96,
              "signature": "pub use crate::telemetry::{ForgeEvent, ForgeSpan, TelemetryEmitter};",
              "documentation": ""
            },
            {
              "name": "pub use crate::tool::{ToolApproval, ToolCall, ToolDefinition, ToolResult, ToolTier};",
              "line": 97,
              "signature": "pub use crate::tool::{ToolApproval, ToolCall, ToolDefinition, ToolResult, ToolTier};",
              "documentation": ""
            },
            {
              "name": "pub use crate::topology::{\n        CostPreference, LatencyPreference, ModelSlot, ModelTopology, TopologyBuilder,\n    };",
              "line": 98,
              "signature": "pub use crate::topology::{\n        CostPreference, LatencyPreference, ModelSlot, ModelTopology, TopologyBuilder,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::types::{AgentDid, Timestamp};",
              "line": 101,
              "signature": "pub use crate::types::{AgentDid, Timestamp};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/message.rs",
          "sha256": "dada14769180f58bebe5e4fe0436c2f09b3002b0e6637161984651a18f18b290",
          "artifactSha256": "a18b65e4c55a9ee79eb9ac4f6470d55ab1932f13a072a87a54306eb4405cff67",
          "url": "/reference/source/forge-rs/crates/forge-core/src/message.rs.txt",
          "declarations": [
            {
              "name": "::Role",
              "line": 21,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum Role {\n    /// System instructions that configure agent behavior.\n    System,\n    /// User-provided input.\n    User,\n    /// Model-generated output.\n    Assistant,\n    /// Tool execution results.\n    Tool,\n}",
              "documentation": "The role of a message participant.\n\n# ANVIL Spec \u00a76.1\n\nFour roles are defined: System (runtime instructions), User (human input),\nAssistant (model output), and Tool (tool execution results)."
            },
            {
              "name": "::Role::as_str",
              "line": 34,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the role as a lowercase string slice."
            },
            {
              "name": "::MessagePart",
              "line": 65,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum MessagePart {\n    /// Plain text content.\n    Text {\n        /// The text content.\n        text: String,\n    },\n\n    /// An image (base64 or URL).\n    Image {\n        /// Base64-encoded image data, or a URL.\n        data: String,\n        /// MIME type (e.g., \"image/png\").\n        media_type: String,\n    },\n\n    /// A tool call request from the model.\n    ToolCall {\n        /// Unique identifier for this tool call.\n        id: String,\n        /// The tool name.\n        name: String,\n        /// JSON arguments for the tool.\n        arguments: serde_json::Value,\n    },\n\n    /// A result from a tool execution.\n    ToolResult {\n        /// The tool call ID this result corresponds to.\n        tool_call_id: String,\n        /// The tool name.\n        name: String,\n        /// The result content (typically stringified).\n        content: String,\n        /// Whether the tool execution resulted in an error.\n        is_error: bool,\n    },\n}",
              "documentation": "A single part of a message, supporting multi-modal content.\n\nMessages can contain text, images, tool calls, and tool results.\nThis allows a single assistant message to contain both text and tool calls.\n\n# Examples\n\n```\nuse forge_core::message::MessagePart;\n\nlet text = MessagePart::text(\"Hello, world!\");\nassert!(matches!(text, MessagePart::Text { .. }));\n```"
            },
            {
              "name": "::MessagePart::text",
              "line": 117,
              "signature": "pub fn text(text: impl Into<String>) -> Self;",
              "documentation": "Creates a text message part.\n\n# Arguments\n\n* `text` - The text content.\n\n# Examples\n\n```\nuse forge_core::message::MessagePart;\n\nlet part = MessagePart::text(\"Hello\");\n```"
            },
            {
              "name": "::MessagePart::image",
              "line": 127,
              "signature": "pub fn image(data: impl Into<String>, media_type: impl Into<String>) -> Self;",
              "documentation": "Creates an image message part.\n\n# Arguments\n\n* `data` - Base64-encoded image data or a URL.\n* `media_type` - The MIME type (e.g., \"image/png\")."
            },
            {
              "name": "::MessagePart::tool_call",
              "line": 141,
              "signature": "pub fn tool_call(\n        id: impl Into<String>,\n        name: impl Into<String>,\n        arguments: serde_json::Value,\n    ) -> Self;",
              "documentation": "Creates a tool call message part.\n\n# Arguments\n\n* `id` - Unique call identifier.\n* `name` - Tool name.\n* `arguments` - JSON arguments."
            },
            {
              "name": "::MessagePart::tool_result",
              "line": 161,
              "signature": "pub fn tool_result(\n        tool_call_id: impl Into<String>,\n        name: impl Into<String>,\n        content: impl Into<String>,\n        is_error: bool,\n    ) -> Self;",
              "documentation": "Creates a tool result message part.\n\n# Arguments\n\n* `tool_call_id` - The ID of the tool call this responds to.\n* `name` - Tool name.\n* `content` - The result content.\n* `is_error` - Whether the tool execution failed."
            },
            {
              "name": "::MessagePart::is_tool_call",
              "line": 176,
              "signature": "pub fn is_tool_call(&self) -> bool;",
              "documentation": "Returns `true` if this part is a tool call."
            },
            {
              "name": "::MessagePart::is_tool_result",
              "line": 181,
              "signature": "pub fn is_tool_result(&self) -> bool;",
              "documentation": "Returns `true` if this part is a tool result."
            },
            {
              "name": "::ModelMessage",
              "line": 198,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ModelMessage {\n\n}",
              "documentation": "A message in a conversation, consisting of a role and content parts.\n\n# Examples\n\n```\nuse forge_core::message::{ModelMessage, Role, MessagePart};\n\nlet msg = ModelMessage::new(Role::User, vec![MessagePart::text(\"What is 2+2?\")]);\nassert_eq!(msg.role(), Role::User);\nassert_eq!(msg.parts().len(), 1);\n```"
            },
            {
              "name": "::ModelMessage::new",
              "line": 210,
              "signature": "pub fn new(role: Role, parts: Vec<MessagePart>) -> Self;",
              "documentation": "Creates a new message with the given role and content parts.\n\n# Arguments\n\n* `role` - The message participant role.\n* `parts` - One or more content parts."
            },
            {
              "name": "::ModelMessage::text",
              "line": 228,
              "signature": "pub fn text(role: Role, text: impl Into<String>) -> Self;",
              "documentation": "Creates a simple text message.\n\n# Arguments\n\n* `role` - The message participant role.\n* `text` - The text content.\n\n# Examples\n\n```\nuse forge_core::message::{ModelMessage, Role};\n\nlet msg = ModelMessage::text(Role::System, \"You are a helpful assistant.\");\n```"
            },
            {
              "name": "::ModelMessage::role",
              "line": 236,
              "signature": "pub fn role(&self) -> Role;",
              "documentation": "Returns the message role."
            },
            {
              "name": "::ModelMessage::parts",
              "line": 241,
              "signature": "pub fn parts(&self) -> &[MessagePart];",
              "documentation": "Returns the message content parts."
            },
            {
              "name": "::ModelMessage::parts_mut",
              "line": 246,
              "signature": "pub fn parts_mut(&mut self) -> &mut Vec<MessagePart>;",
              "documentation": "Returns a mutable reference to the message content parts."
            },
            {
              "name": "::ModelMessage::tool_calls",
              "line": 251,
              "signature": "pub fn tool_calls(&self) -> Vec<&MessagePart>;",
              "documentation": "Extracts all tool calls from this message."
            },
            {
              "name": "::ModelMessage::text_content",
              "line": 256,
              "signature": "pub fn text_content(&self) -> String;",
              "documentation": "Returns the concatenated text content of all text parts."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/model.rs",
          "sha256": "5c15069351107b972aac87130e3d8199c6ef6a30cd9da9113269a417f53d9d8e",
          "artifactSha256": "50c38794ed5dae544a31aadd740a0b0bb23f9fe54cac9663b12f5c06ef3eb4b3",
          "url": "/reference/source/forge-rs/crates/forge-core/src/model.rs.txt",
          "declarations": [
            {
              "name": "::StreamChunkResult",
              "line": 30,
              "signature": "pub type StreamChunkResult = ForgeResult<StreamChunk>;",
              "documentation": "One stream item produced by [`LanguageModel::stream_chunks`].\n\nStream items wrap their own `Result` so mid-stream errors (transient socket\nloss, malformed SSE event mid-response, content moderation refusal) can be\nsurfaced without aborting the whole stream. Connect-time failures (DNS,\nTLS, auth, malformed request) surface as the outer\n`ForgeResult<ChunkStream<'_>>` from `stream_chunks` itself."
            },
            {
              "name": "::ChunkStream",
              "line": 39,
              "signature": "pub type ChunkStream<'a> = Pin<Box<dyn Stream<Item = StreamChunkResult> + Send + 'a>>;",
              "documentation": "A pinned, boxed, `Send` stream of [`StreamChunkResult`] items.\n\nType-erased so the `LanguageModel` trait stays object-safe (`dyn LanguageModel`).\nUse `'static` unless you have a specific reason to borrow from `&self`.\n\nSee RFC 0001 (`rfcs/0001-stream-chunks.md`) for the rationale behind the\nerased shape."
            },
            {
              "name": "::buffered_into_chunks",
              "line": 79,
              "signature": "pub fn buffered_into_chunks(chunks: Vec<StreamChunk>) -> ChunkStream<'static>;",
              "documentation": "Adapter for providers that cannot yet stream natively.\n\nWraps an already-buffered `Vec<StreamChunk>` (typically the return value of\nthe legacy [`LanguageModel::stream`] method) into a one-shot stream.\nYields each chunk as `Ok` in order; useful as a transitional shim while a\nprovider is being upgraded to native per-token streaming.\n\n**Caveat**: this is a buffered shim. The future driving the stream\nresolves all at once after the underlying buffered call completes; per-item\ndelivery is synthetic. Native streaming providers should never use this\nhelper -- it exists so consumers can write `stream_chunks` impls that\nsatisfy the trait while their wire-level streaming is being built.\n\n# Examples\n\n```\nuse forge_core::model::buffered_into_chunks;\nuse forge_core::output::{StreamChunk, FinishReason, Usage};\nuse futures_util::StreamExt;\n\n# async fn example() {\nlet chunks = vec![\n    StreamChunk::text_delta(\"hello \"),\n    StreamChunk::text_delta(\"world\"),\n    StreamChunk::done(FinishReason::Stop, Usage::zero()),\n];\nlet mut stream = buffered_into_chunks(chunks);\nlet mut text = String::new();\nwhile let Some(item) = stream.next().await {\n    if let Ok(chunk) = item {\n        if let Some(t) = chunk.as_text() {\n            text.push_str(t);\n        }\n    }\n}\nassert_eq!(text, \"hello world\");\n# }\n```"
            },
            {
              "name": "::ModelCapabilities",
              "line": 109,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ModelCapabilities {\n/// Whether the model supports text generation.\n\npub text_generation: bool,\n/// Whether the model supports structured output (JSON mode).\n\npub structured_output: bool,\n/// Whether the model supports tool calling.\n\npub tool_calling: bool,\n/// Whether the model supports vision (image input).\n\npub vision: bool,\n/// Whether the model supports audio input/output.\n\npub audio: bool,\n/// Whether the model supports embedding generation.\n\npub embedding: bool,\n/// Maximum number of tokens in the context window.\n\npub max_context_tokens: u32,\n/// Maximum number of tokens the model can generate in a single response.\n\npub max_output_tokens: u32\n}",
              "documentation": "Describes the capabilities of a language model provider.\n\nEach model has different capabilities -- some support vision, some support\ntool calling, and they all have different context window sizes. This struct\ncaptures those capabilities in a machine-readable format.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 6.2 -- Model Capabilities.\n\n# Examples\n\n```\nuse forge_core::model::ModelCapabilities;\n\nlet caps = ModelCapabilities::default();\nassert!(caps.text_generation);\nassert!(caps.structured_output);\nassert!(caps.tool_calling);\nassert!(!caps.vision);\nassert!(!caps.audio);\nassert!(!caps.embedding);\nassert_eq!(caps.max_context_tokens, 128_000);\nassert_eq!(caps.max_output_tokens, 4_096);\n```"
            },
            {
              "name": "::LanguageModel",
              "line": 169,
              "signature": "#[async_trait]\npub trait LanguageModel: Send + Sync {\n    /// Returns the model identifier (e.g., \"gpt-4o\", \"claude-sonnet-4-5-20250929\").\n    fn model_id(&self) -> &str;\n\n    /// Returns the provider namespace (e.g., \"openai\", \"anthropic\").\n    fn provider(&self) -> &str;\n\n    /// Generates a complete response from the model.\n    ///\n    /// # Arguments\n    ///\n    /// * `messages` - The conversation history.\n    /// * `tools` - Available tool definitions for this inference call.\n    /// * `options` - Generation options (temperature, max_tokens, etc.).\n    ///\n    /// # Returns\n    ///\n    /// A `GenerateResult` containing the model's response, usage statistics,\n    /// and finish reason.\n    ///\n    /// # Errors\n    ///\n    /// Returns `ForgeError` if the provider call fails, times out, or returns\n    /// an invalid response.\n    async fn generate(\n        &self,\n        messages: &[ModelMessage],\n        tools: &[ToolDefinition],\n        options: &GenerateOptions,\n    ) -> ForgeResult<GenerateResult>;\n\n    /// Streams a response from the model as chunks.\n    ///\n    /// **Deprecated.** Returns the full `Vec<StreamChunk>` after the upstream\n    /// provider has yielded its terminal `Done`. Despite the name, this\n    /// method does not deliver chunks incrementally \u2014 use\n    /// [`stream_chunks`](Self::stream_chunks) for real per-token streaming.\n    ///\n    /// Will be removed in v0.3.0 once every in-tree provider has a native\n    /// [`stream_chunks`] implementation.\n    ///\n    /// # Errors\n    ///\n    /// Returns `ForgeError` if the provider call fails.\n    #[deprecated(\n        since = \"0.2.0\",\n        note = \"use `stream_chunks` for real per-token streaming; this method buffers the entire response before returning. Will be removed in 0.3.0.\"\n    )]\n    async fn stream(\n        &self,\n        messages: &[ModelMessage],\n        tools: &[ToolDefinition],\n        options: &GenerateOptions,\n    ) -> ForgeResult<Vec<StreamChunk>>;\n\n    /// **Real per-token streaming.** Returns a stream that yields each chunk\n    /// as soon as the upstream provider produces it on the wire.\n    ///\n    /// Per RFC 0001 (`rfcs/0001-stream-chunks.md`): each item is itself a\n    /// `Result` so mid-stream errors don't lose already-received chunks. The\n    /// outer `Result` covers connect-time failures (DNS, TLS, auth, malformed\n    /// request); per-item `Err` covers mid-stream failures.\n    ///\n    /// # Default implementation (TRANSITIONAL)\n    ///\n    /// The default impl calls the (deprecated) [`stream`](Self::stream) method\n    /// and wraps the resulting `Vec<StreamChunk>` via [`buffered_into_chunks`].\n    /// **This is a transitional shim \u2014 it is NOT real streaming.** It exists\n    /// only so existing providers compile against the new trait method while\n    /// they are being rewritten one at a time for native streaming.\n    ///\n    /// **Providers MUST override this method with a native streaming\n    /// implementation before 0.3.0.** Once every in-tree provider has a\n    /// native `stream_chunks`, the default will be removed (the trait method\n    /// becomes required) and `stream` will be deleted entirely.\n    ///\n    /// To find providers that still rely on the default impl, grep for\n    /// `buffered_into_chunks` in their `stream_chunks` method body \u2014 that's\n    /// the native-streaming migration checklist.\n    ///\n    /// # Arguments\n    ///\n    /// * `messages` - The conversation history.\n    /// * `tools` - Available tool definitions for this inference call.\n    /// * `options` - Generation options.\n    ///\n    /// # Returns\n    ///\n    /// A [`ChunkStream`] that yields [`StreamChunkResult`] items.\n    ///\n    /// # Errors\n    ///\n    /// - Outer `ForgeResult<...>` returns `Err` for connect-time failures.\n    /// - Per-item `Err` for mid-stream failures (caller decides whether to\n    ///   abort the stream).\n    async fn stream_chunks(\n        &self,\n        messages: &[ModelMessage],\n        tools: &[ToolDefinition],\n        options: &GenerateOptions,\n    ) -> ForgeResult<ChunkStream<'static>> ;\n\n    /// Returns `true` if this model supports tool calling.\n    fn supports_tool_calling(&self) -> bool ;\n\n    /// Returns `true` if this model supports structured output (JSON mode).\n    fn supports_structured_output(&self) -> bool ;\n\n    /// Returns `true` if this model supports image input.\n    fn supports_image_input(&self) -> bool ;\n\n    /// Returns `true` if this model supports streaming.\n    fn supports_streaming(&self) -> bool ;\n\n    /// Returns the model's capabilities.\n    ///\n    /// The default implementation constructs a [`ModelCapabilities`] from the\n    /// individual `supports_*` methods. Override this to provide accurate values\n    /// for `max_context_tokens` and `max_output_tokens`.\n    ///\n    /// # ANVIL Spec Reference\n    ///\n    /// ANVIL Spec section 6.2 -- Model Capabilities.\n    ///\n    /// # Returns\n    ///\n    /// A [`ModelCapabilities`] describing what this model can do.\n    fn capabilities(&self) -> ModelCapabilities ;\n}",
              "documentation": "The core language model interface.\n\nEvery LLM provider implements this trait. The trait is intentionally minimal:\n`generate` for synchronous (buffered) inference and `stream` for streaming.\n\n# ANVIL Spec \u00a76.1\n\nThe cognitive interface defines:\n- `infer()` \u2192 full response (maps to `generate`)\n- `infer_stream()` \u2192 streaming response (maps to `stream`)\n- `model_info()` \u2192 capabilities metadata (maps to `model_id`, `supports_*`)\n\n# Examples\n\n```no_run\nuse forge_core::model::LanguageModel;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![ModelMessage::text(Role::User, \"Hello!\")];\n    let options = GenerateOptions::default();\n    let result = model.generate(&messages, &[], &options).await;\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/output.rs",
          "sha256": "210229767995931afb9ca7c2ef32e38174f274750260eadec1ce3b7b3f8946e3",
          "artifactSha256": "30d09c2cd83dc27dd34b8903cce954b78c8043eb636c600cdcb005fb4af94b71",
          "url": "/reference/source/forge-rs/crates/forge-core/src/output.rs.txt",
          "declarations": [
            {
              "name": "::GenerateResult",
              "line": 28,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct GenerateResult {\n/// The model's response message.\n\npub message: ModelMessage,\n/// Why generation stopped.\n\npub finish_reason: FinishReason,\n/// Token usage statistics.\n\npub usage: Usage\n}",
              "documentation": "The result of a text generation call.\n\nContains the model's response message, the reason generation stopped,\nand token usage statistics.\n\n# Examples\n\n```\nuse forge_core::output::{GenerateResult, FinishReason, Usage};\nuse forge_core::message::{ModelMessage, Role};\n\nlet result = GenerateResult {\n    message: ModelMessage::text(Role::Assistant, \"The answer is 4.\"),\n    finish_reason: FinishReason::Stop,\n    usage: Usage { prompt_tokens: 10, completion_tokens: 5, total_tokens: 15 },\n};\nassert_eq!(result.finish_reason, FinishReason::Stop);\n```"
            },
            {
              "name": "::GenerateResult::text",
              "line": 39,
              "signature": "pub fn text(&self) -> String;",
              "documentation": "Returns the text content of the response message."
            },
            {
              "name": "::GenerateResult::has_tool_calls",
              "line": 44,
              "signature": "pub fn has_tool_calls(&self) -> bool;",
              "documentation": "Returns `true` if the response contains tool calls."
            },
            {
              "name": "::FinishReason",
              "line": 52,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum FinishReason {\n    /// The model produced a natural stop.\n    Stop,\n    /// The maximum token limit was reached.\n    MaxTokens,\n    /// The model requested tool calls.\n    ToolCalls,\n    /// A stop sequence was matched.\n    StopSequence,\n    /// A content filter blocked the output.\n    ContentFilter,\n    /// An error occurred during generation.\n    Error,\n}",
              "documentation": "The reason generation stopped."
            },
            {
              "name": "::FinishReason::is_complete",
              "line": 69,
              "signature": "pub fn is_complete(&self) -> bool;",
              "documentation": "Returns `true` if generation completed normally (Stop or StopSequence)."
            },
            {
              "name": "::FinishReason::is_tool_call",
              "line": 74,
              "signature": "pub fn is_tool_call(&self) -> bool;",
              "documentation": "Returns `true` if the model wants to call tools."
            },
            {
              "name": "::Usage",
              "line": 95,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub struct Usage {\n/// Tokens consumed by the input prompt.\n\npub prompt_tokens: u64,\n/// Tokens generated in the response.\n\npub completion_tokens: u64,\n/// Total tokens (prompt + completion).\n\npub total_tokens: u64\n}",
              "documentation": "Token usage statistics from an inference call."
            },
            {
              "name": "::Usage::zero",
              "line": 106,
              "signature": "pub fn zero() -> Self;",
              "documentation": "Creates a zero-usage instance."
            },
            {
              "name": "::Usage::add",
              "line": 115,
              "signature": "pub fn add(&self, other: &Usage) -> Usage;",
              "documentation": "Adds two usage statistics together."
            },
            {
              "name": "::StreamChunk",
              "line": 138,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum StreamChunk {\n    /// A text content delta.\n    TextDelta {\n        /// The text fragment.\n        text: String,\n    },\n\n    /// A tool call delta (streaming tool arguments).\n    ToolCallDelta {\n        /// The tool call index (for parallel tool calls).\n        index: u32,\n        /// The tool call ID (may be empty until fully received).\n        id: String,\n        /// The tool name (may be empty until fully received).\n        name: String,\n        /// Partial JSON arguments.\n        arguments_delta: String,\n    },\n\n    /// Signals the start of a tool call.\n    ///\n    /// Emitted when the model begins a tool invocation. The `id` uniquely\n    /// identifies the tool call, and `name` is the tool being invoked.\n    ToolCallStart {\n        /// The tool call ID.\n        id: String,\n        /// The tool name being called.\n        name: String,\n    },\n\n    /// Signals the end of a tool call.\n    ///\n    /// Emitted when a tool invocation completes. The `id` matches the\n    /// corresponding `ToolCallStart`.\n    ToolCallEnd {\n        /// The tool call ID.\n        id: String,\n    },\n\n    /// Metadata chunk with usage information.\n    ///\n    /// Emitted at any point during streaming to provide intermediate or\n    /// final token usage statistics.\n    Metadata {\n        /// Token usage statistics.\n        usage: Usage,\n    },\n\n    /// An error occurred during streaming.\n    ///\n    /// The stream may continue after an error or terminate, depending on\n    /// the provider implementation.\n    Error {\n        /// The error message.\n        message: String,\n    },\n\n    /// The stream has finished.\n    Done {\n        /// Why generation stopped.\n        finish_reason: FinishReason,\n        /// Final usage statistics.\n        usage: Usage,\n    },\n}",
              "documentation": "A chunk from a streaming response.\n\nDuring streaming, the model produces a series of chunks that together\nform the complete response."
            },
            {
              "name": "::StreamChunk::text_delta",
              "line": 206,
              "signature": "pub fn text_delta(text: impl Into<String>) -> Self;",
              "documentation": "Creates a text delta chunk."
            },
            {
              "name": "::StreamChunk::done",
              "line": 211,
              "signature": "pub fn done(finish_reason: FinishReason, usage: Usage) -> Self;",
              "documentation": "Creates a done chunk."
            },
            {
              "name": "::StreamChunk::tool_call_start",
              "line": 219,
              "signature": "pub fn tool_call_start(id: impl Into<String>, name: impl Into<String>) -> Self;",
              "documentation": "Creates a tool call start chunk."
            },
            {
              "name": "::StreamChunk::tool_call_end",
              "line": 227,
              "signature": "pub fn tool_call_end(id: impl Into<String>) -> Self;",
              "documentation": "Creates a tool call end chunk."
            },
            {
              "name": "::StreamChunk::metadata",
              "line": 232,
              "signature": "pub fn metadata(usage: Usage) -> Self;",
              "documentation": "Creates a metadata chunk with usage statistics."
            },
            {
              "name": "::StreamChunk::error",
              "line": 237,
              "signature": "pub fn error(message: impl Into<String>) -> Self;",
              "documentation": "Creates an error chunk."
            },
            {
              "name": "::StreamChunk::is_text_delta",
              "line": 244,
              "signature": "pub fn is_text_delta(&self) -> bool;",
              "documentation": "Returns `true` if this is a text delta."
            },
            {
              "name": "::StreamChunk::is_done",
              "line": 249,
              "signature": "pub fn is_done(&self) -> bool;",
              "documentation": "Returns `true` if this is the final chunk."
            },
            {
              "name": "::StreamChunk::is_tool_call_start",
              "line": 254,
              "signature": "pub fn is_tool_call_start(&self) -> bool;",
              "documentation": "Returns `true` if this is a tool call start chunk."
            },
            {
              "name": "::StreamChunk::is_tool_call_end",
              "line": 259,
              "signature": "pub fn is_tool_call_end(&self) -> bool;",
              "documentation": "Returns `true` if this is a tool call end chunk."
            },
            {
              "name": "::StreamChunk::is_metadata",
              "line": 264,
              "signature": "pub fn is_metadata(&self) -> bool;",
              "documentation": "Returns `true` if this is a metadata chunk."
            },
            {
              "name": "::StreamChunk::is_error",
              "line": 269,
              "signature": "pub fn is_error(&self) -> bool;",
              "documentation": "Returns `true` if this is an error chunk."
            },
            {
              "name": "::StreamChunk::as_text",
              "line": 274,
              "signature": "pub fn as_text(&self) -> Option<&str>;",
              "documentation": "Extracts the text from a text delta, if applicable."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/provider.rs",
          "sha256": "cb895348b59a4acade87871e7f9fe4869344c1c4a278055e9255c0e629185be4",
          "artifactSha256": "9618bc31b023da296ac7ce5bc29ff688fd0c6ced554d07d5948b7374e0d81a26",
          "url": "/reference/source/forge-rs/crates/forge-core/src/provider.rs.txt",
          "declarations": [
            {
              "name": "::ProviderRef",
              "line": 34,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct ProviderRef {\n\n}",
              "documentation": "A parsed provider reference in `namespace:model` format.\n\n# Examples\n\n```\nuse forge_core::provider::ProviderRef;\n\nlet pref = ProviderRef::parse(\"openai:gpt-4o\").unwrap();\nassert_eq!(pref.namespace(), \"openai\");\nassert_eq!(pref.model(), \"gpt-4o\");\nassert_eq!(pref.as_str(), \"openai:gpt-4o\");\n```"
            },
            {
              "name": "::ProviderRef::parse",
              "line": 55,
              "signature": "pub fn parse(input: &str) -> ForgeResult<Self>;",
              "documentation": "Parses a provider reference string.\n\n# Arguments\n\n* `input` - A string in `namespace:model` format.\n\n# Returns\n\nThe parsed `ProviderRef`, or an error if the format is invalid.\n\n# Errors\n\nReturns `ForgeError::InvalidProviderRef` if the input does not contain\nexactly one colon separator, or if either part is empty."
            },
            {
              "name": "::ProviderRef::namespace",
              "line": 70,
              "signature": "pub fn namespace(&self) -> &str;",
              "documentation": "Returns the provider namespace (e.g., \"openai\")."
            },
            {
              "name": "::ProviderRef::model",
              "line": 75,
              "signature": "pub fn model(&self) -> &str;",
              "documentation": "Returns the model name (e.g., \"gpt-4o\")."
            },
            {
              "name": "::ProviderRef::as_str",
              "line": 80,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the full reference string (e.g., \"openai:gpt-4o\")."
            },
            {
              "name": "::ProviderMetadata",
              "line": 93,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ProviderMetadata {\n/// Human-readable name.\n\npub name: String,\n/// Provider namespace (e.g., \"openai\").\n\npub namespace: String,\n/// Whether the provider supports tool calling.\n\npub supports_tool_calling: bool,\n/// Whether the provider supports structured output.\n\npub supports_structured_output: bool,\n/// Whether the provider supports streaming.\n\npub supports_streaming: bool,\n/// Whether the provider supports image input.\n\npub supports_image_input: bool,\n/// Runtime capabilities advertised by the provider (coding-provider negotiation).\n\n#[serde(default)]\npub runtime_capabilities: ProviderRuntimeCapabilities\n}",
              "documentation": "Metadata about a registered provider."
            },
            {
              "name": "::ProviderRegistry",
              "line": 125,
              "signature": "pub struct ProviderRegistry {\n\n}",
              "documentation": "Registry of language model providers.\n\nMaps `ProviderRef` strings to concrete `LanguageModel` implementations.\nAgents look up models through this registry rather than constructing\nprovider instances directly.\n\n# Examples\n\n```\nuse forge_core::provider::ProviderRegistry;\n\nlet registry = ProviderRegistry::new();\nassert!(registry.get(\"openai:gpt-4o\").is_none());\n```"
            },
            {
              "name": "::ProviderRegistry::new",
              "line": 132,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates an empty provider registry."
            },
            {
              "name": "::ProviderRegistry::register",
              "line": 159,
              "signature": "pub fn register(\n        &mut self,\n        provider_ref: &str,\n        model: Arc<dyn LanguageModel>,\n    ) -> ForgeResult<()>;",
              "documentation": "Registers a language model with its provider reference.\n\n# Arguments\n\n* `provider_ref` - The `namespace:model` reference string.\n* `model` - The `LanguageModel` implementation.\n\n# Errors\n\nReturns `ForgeError::InvalidProviderRef` if the reference is malformed.\n\n# Examples\n\n```no_run\nuse forge_core::provider::ProviderRegistry;\nuse std::sync::Arc;\n\nlet mut registry = ProviderRegistry::new();\n// registry.register(\"openai:gpt-4o\", Arc::new(my_openai_model)).unwrap();\n```"
            },
            {
              "name": "::ProviderRegistry::register_with_runtime",
              "line": 181,
              "signature": "pub fn register_with_runtime(\n        &mut self,\n        provider_ref: &str,\n        model: Arc<dyn LanguageModel>,\n        runtime: ProviderRuntimeCapabilities,\n    ) -> ForgeResult<()>;",
              "documentation": "Registers a language model with explicit runtime capabilities.\n\nThis is the full-fidelity registration used by coding-provider adapters\nthat advertise advanced runtime capabilities (delegation, terminal sessions, etc.).\n\n# Arguments\n\n* `provider_ref` - The `namespace:model` reference string.\n* `model` - The `LanguageModel` implementation.\n* `runtime` - The runtime capabilities this provider advertises.\n\n# Errors\n\nReturns `ForgeError::InvalidProviderRef` if the reference is malformed."
            },
            {
              "name": "::ProviderRegistry::negotiate",
              "line": 212,
              "signature": "pub fn negotiate(\n        &self,\n        request: &ProviderNegotiationRequest,\n    ) -> ForgeResult<ProviderNegotiationResult>;",
              "documentation": "Negotiates provider-session capabilities against a request.\n\nVerifies the provider is registered, optionally checks baseline contract\ncompliance, and confirms all required capabilities are advertised.\n\n# Errors\n\nReturns `ForgeError::ProviderNotFound` if unregistered,\n`ForgeError::ProviderNegotiationFailed` if baseline contract is required but missing,\n`ForgeError::CapabilityUnsupported` if a required capability is not advertised."
            },
            {
              "name": "::ProviderRegistry::get",
              "line": 260,
              "signature": "pub fn get(&self, provider_ref: &str) -> Option<Arc<dyn LanguageModel>>;",
              "documentation": "Retrieves a registered language model.\n\n# Arguments\n\n* `provider_ref` - The `namespace:model` reference string.\n\n# Returns\n\nThe registered model, or `None` if not found."
            },
            {
              "name": "::ProviderRegistry::require",
              "line": 269,
              "signature": "pub fn require(&self, provider_ref: &str) -> ForgeResult<Arc<dyn LanguageModel>>;",
              "documentation": "Retrieves a registered language model, returning an error if not found.\n\n# Errors\n\nReturns `ForgeError::ProviderNotFound` if the provider reference is not registered."
            },
            {
              "name": "::ProviderRegistry::metadata",
              "line": 277,
              "signature": "pub fn metadata(&self, provider_ref: &str) -> Option<&ProviderMetadata>;",
              "documentation": "Returns metadata for a registered provider."
            },
            {
              "name": "::ProviderRegistry::list",
              "line": 282,
              "signature": "pub fn list(&self) -> Vec<&str>;",
              "documentation": "Lists all registered provider reference strings."
            },
            {
              "name": "::ProviderRegistry::len",
              "line": 287,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the number of registered providers."
            },
            {
              "name": "::ProviderRegistry::is_empty",
              "line": 292,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if no providers are registered."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/provider_runtime.rs",
          "sha256": "c62baa6d82141343e1057a6f925c5f4e77c45c1d95157f5cdff4a71dfd315f47",
          "artifactSha256": "a53318924d5082ce2bcda25de8ef842b17a4d8b139b56290d08ea7c3ffc60fcb",
          "url": "/reference/source/forge-rs/crates/forge-core/src/provider_runtime.rs.txt",
          "declarations": [
            {
              "name": "::RuntimeCapability",
              "line": 12,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]\npub enum RuntimeCapability {\n    ToolCalls,\n    DelegatedAgents,\n    TerminalSession,\n    StructuredPatch,\n    Attachments,\n    Interrupts,\n    ResumeSession,\n    ApprovalCheckpoints,\n    UsageStreaming,\n    TranscriptExport,\n}",
              "documentation": "Advanced provider runtime capabilities beyond the mandatory baseline."
            },
            {
              "name": "::ProviderRuntimeCapabilities",
              "line": 27,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]\npub struct ProviderRuntimeCapabilities {\n/// Whether the provider satisfies the mandatory Forge coding baseline.\n\npub baseline_contract: bool,\n/// Explicit advanced capabilities advertised by the provider.\n\npub capabilities: BTreeSet<RuntimeCapability>\n}",
              "documentation": "Runtime capability descriptor for a provider."
            },
            {
              "name": "::ProviderRuntimeCapabilities::baseline",
              "line": 36,
              "signature": "pub fn baseline() -> Self;",
              "documentation": "Returns baseline-capable runtime metadata with no advanced capabilities."
            },
            {
              "name": "::ProviderRuntimeCapabilities::with_capability",
              "line": 44,
              "signature": "pub fn with_capability(mut self, capability: RuntimeCapability) -> Self;",
              "documentation": "Adds an advanced runtime capability."
            },
            {
              "name": "::ProviderRuntimeCapabilities::supports",
              "line": 50,
              "signature": "pub fn supports(&self, capability: &RuntimeCapability) -> bool;",
              "documentation": "Returns true when the provider advertises the given advanced capability."
            },
            {
              "name": "::ProviderNegotiationRequest",
              "line": 57,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderNegotiationRequest {\npub provider_ref: String,\npub require_baseline_contract: bool,\npub required_capabilities: Vec<RuntimeCapability>\n}",
              "documentation": "Negotiation request for provider-session behavior."
            },
            {
              "name": "::ProviderNegotiationResult",
              "line": 65,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderNegotiationResult {\npub provider_ref: String,\npub baseline_contract: bool,\npub negotiated_capabilities: Vec<RuntimeCapability>\n}",
              "documentation": "Successful negotiation result."
            },
            {
              "name": "::ProviderSessionState",
              "line": 73,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub enum ProviderSessionState {\n    Created,\n    Ready,\n    Running,\n    Interrupted,\n    Completed,\n    Cancelled,\n    Failed,\n    Expired,\n    Closed,\n}",
              "documentation": "Normalized provider-session states."
            },
            {
              "name": "::ProviderUsageSummary",
              "line": 87,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]\npub struct ProviderUsageSummary {\npub input_tokens: u64,\npub output_tokens: u64,\npub total_tokens: u64\n}",
              "documentation": "Normalized provider usage summary."
            },
            {
              "name": "::ProviderSessionEvent",
              "line": 95,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderSessionEvent {\npub session_id: String,\npub state: ProviderSessionState,\npub message: Option<String>,\npub usage: Option<ProviderUsageSummary>\n}",
              "documentation": "Normalized provider session event envelope."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/replay.rs",
          "sha256": "4337670e29371fa1a58cfed5f3f40d372d7db9bbb3719b1d4a679dce518afc68",
          "artifactSha256": "ed4e2c4e8961d7a934a9dfcb5c3a1dd65777ff39adbb31dc125abfa5835b431b",
          "url": "/reference/source/forge-rs/crates/forge-core/src/replay.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_CLOCK_SKEW",
              "line": 59,
              "signature": "pub const DEFAULT_CLOCK_SKEW: Duration;",
              "documentation": "Default clock-skew tolerance: \u00b130 seconds.\n\nMessages with a timestamp older than `now - DEFAULT_CLOCK_SKEW` or newer\nthan `now + DEFAULT_CLOCK_SKEW` are rejected."
            },
            {
              "name": "::DEFAULT_NONCE_CACHE_SIZE",
              "line": 62,
              "signature": "pub const DEFAULT_NONCE_CACHE_SIZE: usize;",
              "documentation": "Default nonce cache capacity: 10,000 entries."
            },
            {
              "name": "::ReplayConfig",
              "line": 69,
              "signature": "#[derive(Debug, Clone)]\npub struct ReplayConfig {\n/// Maximum allowed clock skew between sender and receiver, applied in\n\n/// both directions. A timestamp that is more than this far in the past\n\n/// or future (relative to the receiver's wall clock) is rejected.\n\npub max_clock_skew: Duration,\n/// Maximum number of nonces to remember. When full, the least-recently-used\n\n/// nonce is evicted to make room for a new entry. Must be non-zero.\n\npub nonce_cache_size: usize,\n/// If `true`, messages lacking a nonce/timestamp (legacy wire format)\n\n/// are accepted with a `WARN` log line. If `false` (default), legacy\n\n/// messages are rejected with [`ReplayError::LegacyMessageFormat`].\n\n///\n\n/// This flag is also controllable via the `FORGE_ACCEPT_LEGACY_MESSAGES`\n\n/// environment variable; see [`legacy_accept_from_env`].\n\npub accept_legacy: bool\n}",
              "documentation": "Configuration for a [`ReplayValidator`].\n\nAll fields have production-sane defaults; override only when the operator\nunderstands the trade-offs."
            },
            {
              "name": "::ReplayConfig::with_max_clock_skew",
              "line": 100,
              "signature": "pub fn with_max_clock_skew(mut self, skew: Duration) -> Self;",
              "documentation": "Sets the clock-skew tolerance, consuming `self`."
            },
            {
              "name": "::ReplayConfig::with_nonce_cache_size",
              "line": 106,
              "signature": "pub fn with_nonce_cache_size(mut self, size: usize) -> Self;",
              "documentation": "Sets the nonce cache size, consuming `self`."
            },
            {
              "name": "::ReplayConfig::with_accept_legacy",
              "line": 112,
              "signature": "pub fn with_accept_legacy(mut self, accept: bool) -> Self;",
              "documentation": "Sets the legacy-acceptance policy, consuming `self`."
            },
            {
              "name": "::legacy_accept_from_env",
              "line": 125,
              "signature": "pub fn legacy_accept_from_env() -> bool;",
              "documentation": "Reads the `FORGE_ACCEPT_LEGACY_MESSAGES` environment variable.\n\nReturns `true` only when the variable is set to `\"true\"` (case-insensitive).\nAny other value, or absence of the variable, yields `false`.\n\nCall sites that honor the legacy-compat escape hatch should consult this\nhelper when building their [`ReplayConfig`]."
            },
            {
              "name": "::ReplayError",
              "line": 133,
              "signature": "#[derive(Debug, Error, PartialEq, Eq)]\npub enum ReplayError {\n    /// The envelope timestamp is outside the accepted clock-skew window.\n    #[error(\n        \"replay protection rejected message: timestamp {timestamp_ms}ms is outside the \\\n         \u00b1{max_skew_ms}ms clock-skew window (now={now_ms}ms)\"\n    )]\n    TimestampExpired {\n        /// The timestamp carried by the message, in milliseconds since epoch.\n        timestamp_ms: i64,\n        /// The receiver's current wall-clock time, in milliseconds since epoch.\n        now_ms: i64,\n        /// The configured maximum skew, in milliseconds.\n        max_skew_ms: i64,\n    },\n\n    /// The envelope's nonce was already seen within the validity window.\n    #[error(\n        \"replay protection rejected message: nonce {nonce_hex} has already been accepted \\\n         within the clock-skew window\"\n    )]\n    NonceReplay {\n        /// Hex-encoded nonce, included for operator diagnostics.\n        nonce_hex: String,\n    },\n\n    /// The envelope is missing nonce and/or timestamp and legacy acceptance\n    /// is disabled.\n    #[error(\n        \"replay protection rejected message: legacy wire format (no nonce/timestamp); \\\n         set FORGE_ACCEPT_LEGACY_MESSAGES=true to opt into legacy acceptance\"\n    )]\n    LegacyMessageFormat,\n\n    /// The validator's internal cache lock was poisoned. This indicates that\n    /// another thread panicked while holding the lock; callers should treat\n    /// this as an unrecoverable condition for that validator instance.\n    #[error(\"replay validator internal lock poisoned (a prior thread panicked)\")]\n    LockPoisoned,\n}",
              "documentation": "Errors produced by [`ReplayValidator::validate`]."
            },
            {
              "name": "::ReplayValidator",
              "line": 185,
              "signature": "pub struct ReplayValidator {\n\n}",
              "documentation": "A thread-safe replay validator.\n\nWrap a single instance in an `Arc<ReplayValidator>` and share it across\nall receive handlers for a given trust boundary. The validator is cheap\nto clone when wrapped in an `Arc`.\n\n# Concurrency\n\nThe nonce cache is guarded by `RwLock`; `validate` always takes the write\nlock because successful validation inserts into the cache. There is no\nread-only mode \u2014 a message that is not inserted is one that can be\naccepted twice."
            },
            {
              "name": "::ReplayValidator::new",
              "line": 196,
              "signature": "pub fn new(config: ReplayConfig) -> Self;",
              "documentation": "Creates a new validator with the provided configuration.\n\nIf `config.nonce_cache_size` is zero, it is clamped to\n[`DEFAULT_NONCE_CACHE_SIZE`] to preserve the invariant that\n`LruCache::new` requires a non-zero capacity."
            },
            {
              "name": "::ReplayValidator::config",
              "line": 208,
              "signature": "pub fn config(&self) -> &ReplayConfig;",
              "documentation": "Returns the active configuration."
            },
            {
              "name": "::ReplayValidator::validate",
              "line": 227,
              "signature": "pub fn validate(&self, timestamp_ms: i64, nonce: &[u8; 16]) -> Result<(), ReplayError>;",
              "documentation": "Validates that a message with the given `timestamp_ms` and `nonce` is\nneither stale nor a replay.\n\n# Behavior\n\n1. Rejects with [`ReplayError::TimestampExpired`] if\n   `|now - timestamp_ms| > max_clock_skew`.\n2. Rejects with [`ReplayError::NonceReplay`] if the nonce is already\n   present in the LRU cache.\n3. Otherwise records the nonce and returns `Ok(())`.\n\n# Errors\n\nReturns [`ReplayError::LockPoisoned`] if the internal nonce cache\nlock has been poisoned by a prior panic on another thread."
            },
            {
              "name": "::ReplayValidator::accept_legacy",
              "line": 263,
              "signature": "pub fn accept_legacy(&self, context: &str) -> Result<(), ReplayError>;",
              "documentation": "Handles a message that arrived without replay-protection fields.\n\nHonors [`ReplayConfig::accept_legacy`]:\n- `true` \u2014 logs a `WARN` and returns `Ok(())`.\n- `false` \u2014 returns [`ReplayError::LegacyMessageFormat`].\n\nThis helper centralizes the legacy-accept policy so transports do not\neach re-implement it."
            },
            {
              "name": "::ReplayValidator::nonce_cache_len",
              "line": 278,
              "signature": "#[doc(hidden)]\npub fn nonce_cache_len(&self) -> usize;",
              "documentation": "Returns the current number of tracked nonces. Test / diagnostic only."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/routing.rs",
          "sha256": "84b98a249edcdb6b5b15b3932b1fe9c49f3d9f982d4dc4ebcda98d9ecc647fd1",
          "artifactSha256": "7461fb23325ab30d19574460d17d0d7af29552f319319e770345bb8348765a5e",
          "url": "/reference/source/forge-rs/crates/forge-core/src/routing.rs.txt",
          "declarations": [
            {
              "name": "::TaskMode",
              "line": 78,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TaskMode {\n    /// Strategic reasoning, goal decomposition, plan generation.\n    Planning,\n    /// Direct task execution (code generation, content creation, data processing).\n    Execution,\n    /// Reviewing, grading, or verifying outputs from prior steps.\n    Evaluation,\n    /// Condensing, abstracting, or reformatting prior outputs.\n    Summarization,\n}",
              "documentation": "The phase of work a model call serves.\n\nTask modes represent the different phases of agent work. The model\nrouter uses the task mode to select an appropriate model slot --\nfor example, routing planning tasks to a more capable (and potentially\nmore expensive) model while routing summarization to a cheaper one.\n\n# Examples\n\n```\nuse forge_core::routing::TaskMode;\n\nlet mode = TaskMode::Planning;\nassert_eq!(mode.as_role_name(), \"planning\");\n```"
            },
            {
              "name": "::TaskMode::as_role_name",
              "line": 97,
              "signature": "pub fn as_role_name(&self) -> &'static str;",
              "documentation": "Returns the role name string corresponding to this task mode.\n\nThis is used by the router to match task modes to slot role names.\n\n# Returns\n\nA static string matching the lowercase variant name."
            },
            {
              "name": "::ExecutionTopology",
              "line": 124,
              "signature": "#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ExecutionTopology {\n    /// A single sequential call.\n    #[default]\n    Sequential,\n    /// One of N parallel calls that will be aggregated.\n    ParallelFanOut,\n    /// The aggregation call after a fan-out completes.\n    FanIn,\n    /// A call within a retry/fallback chain.\n    Retry,\n}",
              "documentation": "How the current model call fits into a larger execution pattern.\n\nExecution topology describes the concurrency pattern surrounding the\ncurrent inference call. This information can guide model selection --\nfor example, choosing a cheaper model for parallel fan-out branches\nor a more capable model for the aggregating fan-in step.\n\n# Examples\n\n```\nuse forge_core::routing::ExecutionTopology;\n\nlet topo = ExecutionTopology::Sequential;\nassert_eq!(format!(\"{topo:?}\"), \"Sequential\");\n```"
            },
            {
              "name": "::RoutingContext",
              "line": 162,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct RoutingContext {\n/// The domain classification for this call.\n\n///\n\n/// Examples: \"code\", \"math\", \"creative\", \"analysis\", \"general\".\n\n/// When `None`, the router does not attempt domain-based matching.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub domain: Option<String>,\n/// The task mode for this call.\n\n///\n\n/// When `None`, the router does not attempt task-mode-based matching.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub task_mode: Option<TaskMode>,\n/// The execution topology for this call.\n\n///\n\n/// Describes how this inference call relates to other concurrent calls.\n\n/// When `None`, defaults to `Sequential`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub execution_topology: Option<ExecutionTopology>,\n/// Tool capabilities required for the model selected by this route.\n\n///\n\n/// Specific tool names that must be callable. The router may use this\n\n/// information to select a model that supports the required tools.\n\n#[serde(default, skip_serializing_if = \"Vec::is_empty\")]\npub tool_requirements: Vec<String>,\n/// Explicit role override.\n\n///\n\n/// When set, the router returns the slot with this role name without\n\n/// applying strategy logic. Analogous to `tier_override` in the\n\n/// Aut0 Router.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub role_override: Option<String>\n}",
              "documentation": "The context supplied to a [`ModelRouter`] when requesting a routing decision.\n\nThe four routing dimensions are:\n- `domain`: what subject area the task concerns (e.g., \"code\", \"math\")\n- `task_mode`: the phase of work (planning, execution, evaluation, summarization)\n- `execution_topology`: whether the call is sequential, parallel, etc.\n- `tool_requirements`: what tool capabilities the selected model must support\n\nAll fields are optional. A caller that provides no context gets the\ndefault slot from the topology.\n\n# Examples\n\n```\nuse forge_core::routing::{RoutingContext, TaskMode, ExecutionTopology};\n\nlet ctx = RoutingContext {\n    domain: Some(\"code\".into()),\n    task_mode: Some(TaskMode::Execution),\n    execution_topology: Some(ExecutionTopology::Sequential),\n    tool_requirements: vec![\"file_read\".into(), \"file_write\".into()],\n    role_override: None,\n};\nassert_eq!(ctx.domain.as_deref(), Some(\"code\"));\n```"
            },
            {
              "name": "::ResolvedRoute",
              "line": 222,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ResolvedRoute {\n/// The role name of the selected slot.\n\npub slot_role: String,\n/// The specific `ProviderRef` to use (primary or one of the fallbacks).\n\npub provider: ProviderRef,\n/// The model capabilities of the selected provider.\n\npub model_capabilities: ModelCapabilities,\n/// Whether a fallback model was selected instead of the primary.\n\npub fallback_used: bool\n}",
              "documentation": "A routing decision: which slot was selected and why.\n\nThe `ResolvedRoute` is the output of a [`ModelRouter::route`] call.\nIt identifies the selected slot, the specific provider to use, and\nan explanation of why this route was chosen.\n\n# Examples\n\n```\nuse forge_core::routing::ResolvedRoute;\nuse forge_core::provider::ProviderRef;\nuse forge_core::model::ModelCapabilities;\n\nlet route = ResolvedRoute {\n    slot_role: \"planner\".into(),\n    provider: ProviderRef::parse(\"anthropic:claude-opus-4\").unwrap(),\n    model_capabilities: ModelCapabilities::default(),\n    fallback_used: false,\n};\nassert_eq!(route.slot_role, \"planner\");\nassert!(!route.fallback_used);\n```"
            },
            {
              "name": "::ModelRouter",
              "line": 268,
              "signature": "pub trait ModelRouter: Send + Sync {\n    /// Returns the name of this routing strategy (for telemetry and debugging).\n    fn name(&self) -> &str;\n\n    /// Selects a slot from the topology.\n    ///\n    /// The router must return a `ResolvedRoute` that references a slot present\n    /// in the topology. Returning a role name that does not exist in the\n    /// topology is a routing error.\n    ///\n    /// # Arguments\n    ///\n    /// * `context` - The routing context describing the current task.\n    /// * `topology` - The model topology to select from.\n    ///\n    /// # Returns\n    ///\n    /// A `ResolvedRoute` identifying the selected slot and provider.\n    ///\n    /// # Errors\n    ///\n    /// Returns `ForgeError` if routing fails (e.g., requested role not found).\n    fn route(\n        &self,\n        context: &RoutingContext,\n        topology: &ModelTopology,\n    ) -> ForgeResult<ResolvedRoute>;\n}",
              "documentation": "Selects a model slot from a topology given a routing context.\n\nImplementations range from trivial (always return default) to sophisticated\n(heuristic classification, budget-aware optimization, learned routing).\n\nThe trait is synchronous. Implementations that need async provider health\nchecks should cache health state and read it synchronously, or use an\nasync wrapper at the call site.\n\n# ANVIL Spec Reference\n\nANVIL Spec SS6.2 -- Provider Abstraction. The model router extends the\nprovider abstraction to support dynamic model selection.\n\n# Examples\n\n```\nuse forge_core::routing::{\n    DefaultModelRouter, ModelRouter, RoutingContext, ResolvedRoute,\n};\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\nlet topology = ModelTopology::single(\n    ProviderRef::parse(\"openai:gpt-4o\").unwrap(),\n);\nlet router = DefaultModelRouter;\nlet ctx = RoutingContext::default();\n\nlet route = router.route(&ctx, &topology).unwrap();\nassert_eq!(route.slot_role, \"default\");\n```"
            },
            {
              "name": "::DefaultModelRouter",
              "line": 343,
              "signature": "pub struct DefaultModelRouter;",
              "documentation": "The default model router shipped with Forge.\n\nImplements a cascading match strategy:\n\n1. If `context.role_override` is set, return that slot directly.\n2. If the topology has a slot whose role matches `context.domain`,\n   return it.\n3. If the topology has a slot whose role matches `context.task_mode`\n   (e.g., a slot named \"planning\" matches `TaskMode::Planning`),\n   return it.\n4. Otherwise, return the \"default\" slot.\n\nThis is intentionally simple. More sophisticated strategies (budget-aware,\nhealth-aware, adaptive) can be implemented via the [`ModelRouter`] trait\nor by bridging to the Aut0 Router's `RoutingStrategy`.\n\n# Examples\n\n```\nuse forge_core::routing::{\n    DefaultModelRouter, ModelRouter, RoutingContext, TaskMode,\n};\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\nlet topology = ModelTopology::builder()\n    .slot(\"default\", ProviderRef::parse(\"openai:gpt-4o\").unwrap())\n    .slot(\"planning\", ProviderRef::parse(\"anthropic:claude-opus-4\").unwrap())\n    .build()\n    .unwrap();\n\nlet router = DefaultModelRouter;\n\n// Task mode match\nlet ctx = RoutingContext {\n    task_mode: Some(TaskMode::Planning),\n    ..Default::default()\n};\nlet route = router.route(&ctx, &topology).unwrap();\nassert_eq!(route.slot_role, \"planning\");\n\n// Default fallback\nlet ctx = RoutingContext::default();\nlet route = router.route(&ctx, &topology).unwrap();\nassert_eq!(route.slot_role, \"default\");\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/schema.rs",
          "sha256": "ba11fc47be6db2f1ad0c9fe9ff828e076e54a411cfc093238e0a9b72174e4b57",
          "artifactSha256": "44e0744e10ad1f98188e37593770bfb09e981800e8ea50e4cd2279176383a269",
          "url": "/reference/source/forge-rs/crates/forge-core/src/schema.rs.txt",
          "declarations": [
            {
              "name": "::JsonSchema",
              "line": 37,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct JsonSchema {\n/// The schema type.\n\n#[serde(rename = \"type\")]\npub schema_type: SchemaType,\n/// Human-readable description of this schema element.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub description: Option<String>,\n/// Properties (for object type).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub properties: Option<BTreeMap<String, JsonSchema>>,\n/// Required property names (for object type).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\n#[serde(rename = \"required\")]\npub required_fields: Option<Vec<String>>,\n/// Whether additional properties are allowed (for object type).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\n#[serde(rename = \"additionalProperties\")]\npub additional_properties: Option<bool>,\n/// Items schema (for array type).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub items: Option<Box<JsonSchema>>,\n/// Allowed string values.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\n#[serde(rename = \"enum\")]\npub enum_values: Option<Vec<serde_json::Value>>,\n/// Minimum numeric value.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub minimum: Option<f64>,\n/// Maximum numeric value.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub maximum: Option<f64>,\n/// Minimum string length.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\n#[serde(rename = \"minLength\")]\npub min_length: Option<u64>,\n/// Maximum string length.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\n#[serde(rename = \"maxLength\")]\npub max_length: Option<u64>\n}",
              "documentation": "A JSON Schema definition for tool parameters and structured output.\n\n# Examples\n\n```\nuse forge_core::schema::JsonSchema;\n\nlet schema = JsonSchema::object()\n    .property(\"name\", JsonSchema::string().description(\"User's name\"))\n    .property(\"age\", JsonSchema::integer().minimum(0).maximum(150))\n    .property(\"active\", JsonSchema::boolean())\n    .required(\"name\");\n\nlet valid = serde_json::json!({\"name\": \"Alice\", \"age\": 30, \"active\": true});\nassert!(schema.validate(&valid).is_ok());\n```"
            },
            {
              "name": "::SchemaType",
              "line": 91,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum SchemaType {\n    /// A JSON string.\n    String,\n    /// A JSON number (floating point).\n    Number,\n    /// A JSON integer.\n    Integer,\n    /// A JSON boolean.\n    Boolean,\n    /// A JSON array.\n    Array,\n    /// A JSON object.\n    Object,\n    /// A JSON null.\n    Null,\n}",
              "documentation": "The primitive JSON Schema types."
            },
            {
              "name": "::JsonSchema::string",
              "line": 110,
              "signature": "pub fn string() -> Self;",
              "documentation": "Creates a string schema."
            },
            {
              "name": "::JsonSchema::number",
              "line": 115,
              "signature": "pub fn number() -> Self;",
              "documentation": "Creates a number schema."
            },
            {
              "name": "::JsonSchema::integer",
              "line": 120,
              "signature": "pub fn integer() -> Self;",
              "documentation": "Creates an integer schema."
            },
            {
              "name": "::JsonSchema::boolean",
              "line": 125,
              "signature": "pub fn boolean() -> Self;",
              "documentation": "Creates a boolean schema."
            },
            {
              "name": "::JsonSchema::array",
              "line": 130,
              "signature": "pub fn array() -> Self;",
              "documentation": "Creates an array schema."
            },
            {
              "name": "::JsonSchema::object",
              "line": 135,
              "signature": "pub fn object() -> Self;",
              "documentation": "Creates an object schema."
            },
            {
              "name": "::JsonSchema::null",
              "line": 140,
              "signature": "pub fn null() -> Self;",
              "documentation": "Creates a null schema."
            },
            {
              "name": "::JsonSchema::description",
              "line": 161,
              "signature": "pub fn description(mut self, desc: impl Into<String>) -> Self;",
              "documentation": "Sets the description."
            },
            {
              "name": "::JsonSchema::property",
              "line": 167,
              "signature": "pub fn property(mut self, name: impl Into<String>, schema: JsonSchema) -> Self;",
              "documentation": "Adds a property (for object schemas)."
            },
            {
              "name": "::JsonSchema::required",
              "line": 175,
              "signature": "pub fn required(mut self, name: impl Into<String>) -> Self;",
              "documentation": "Marks a property as required (for object schemas)."
            },
            {
              "name": "::JsonSchema::items_schema",
              "line": 183,
              "signature": "pub fn items_schema(mut self, schema: JsonSchema) -> Self;",
              "documentation": "Sets the items schema (for array schemas)."
            },
            {
              "name": "::JsonSchema::enum_values",
              "line": 189,
              "signature": "pub fn enum_values(mut self, values: Vec<serde_json::Value>) -> Self;",
              "documentation": "Sets allowed enum values."
            },
            {
              "name": "::JsonSchema::minimum",
              "line": 195,
              "signature": "pub fn minimum(mut self, min: impl Into<f64>) -> Self;",
              "documentation": "Sets the minimum numeric value."
            },
            {
              "name": "::JsonSchema::maximum",
              "line": 201,
              "signature": "pub fn maximum(mut self, max: impl Into<f64>) -> Self;",
              "documentation": "Sets the maximum numeric value."
            },
            {
              "name": "::JsonSchema::min_length",
              "line": 207,
              "signature": "pub fn min_length(mut self, len: u64) -> Self;",
              "documentation": "Sets the minimum string length."
            },
            {
              "name": "::JsonSchema::max_length",
              "line": 213,
              "signature": "pub fn max_length(mut self, len: u64) -> Self;",
              "documentation": "Sets the maximum string length."
            },
            {
              "name": "::JsonSchema::additional_properties",
              "line": 219,
              "signature": "pub fn additional_properties(mut self, allowed: bool) -> Self;",
              "documentation": "Sets whether additional properties are allowed (for object schemas)."
            },
            {
              "name": "::JsonSchema::validate",
              "line": 243,
              "signature": "pub fn validate(&self, value: &serde_json::Value) -> ForgeResult<()>;",
              "documentation": "Validates a JSON value against this schema.\n\n# Arguments\n\n* `value` - The JSON value to validate.\n\n# Returns\n\n`Ok(())` if valid, or `Err(ForgeError::SchemaValidation)` with details.\n\n# Examples\n\n```\nuse forge_core::schema::JsonSchema;\n\nlet schema = JsonSchema::string();\nassert!(schema.validate(&serde_json::json!(\"hello\")).is_ok());\nassert!(schema.validate(&serde_json::json!(42)).is_err());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/telemetry.rs",
          "sha256": "fed2e60efe62c7192511ef618f76c0e5cb1f7f9d3b2249e09c966f68656afd3f",
          "artifactSha256": "d6a0edf72164e3afb5bdb95c4409de1058a5c92ff42365fb3a6f41b9b335e51c",
          "url": "/reference/source/forge-rs/crates/forge-core/src/telemetry.rs.txt",
          "declarations": [
            {
              "name": "::SPAN_GENERATE",
              "line": 21,
              "signature": "pub const SPAN_GENERATE: &str;",
              "documentation": "Required ANVIL telemetry span names per ANVIL Spec section 14.2.\n\nAll ANVIL-compliant runtimes must emit spans with these names for the\ncorresponding operations. This enables consistent cross-language and\ncross-runtime observability."
            },
            {
              "name": "::SPAN_TOOL_INVOKE",
              "line": 24,
              "signature": "pub const SPAN_TOOL_INVOKE: &str;",
              "documentation": "Span name for tool invocation operations."
            },
            {
              "name": "::SPAN_TASK_DELEGATE",
              "line": 27,
              "signature": "pub const SPAN_TASK_DELEGATE: &str;",
              "documentation": "Span name for task delegation to sub-agents."
            },
            {
              "name": "::SPAN_TASK_EXECUTE",
              "line": 30,
              "signature": "pub const SPAN_TASK_EXECUTE: &str;",
              "documentation": "Span name for task execution within an agent."
            },
            {
              "name": "::SPAN_SESSION",
              "line": 33,
              "signature": "pub const SPAN_SESSION: &str;",
              "documentation": "Span name for agent session lifetime."
            },
            {
              "name": "::SPAN_LIFECYCLE",
              "line": 36,
              "signature": "pub const SPAN_LIFECYCLE: &str;",
              "documentation": "Span name for lifecycle state transitions."
            },
            {
              "name": "::SPAN_MESSAGE_SEND",
              "line": 39,
              "signature": "pub const SPAN_MESSAGE_SEND: &str;",
              "documentation": "Span name for inter-agent message sending."
            },
            {
              "name": "::AuditEventKind",
              "line": 68,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum AuditEventKind {\n    /// An agent was instantiated with identity and capabilities.\n    AgentInstantiated,\n    /// A capability check was performed against an Arsenal ACT.\n    CapabilityCheck,\n    /// A tool was invoked by the agent.\n    ToolInvocation,\n    /// A network access operation occurred (HTTP, WebSocket, etc.).\n    NetworkAccess,\n    /// An inter-agent message was sent or received.\n    InterAgentMessage,\n    /// A lifecycle state transition occurred.\n    LifecycleTransition,\n    /// A resource quota event was triggered (usage approaching or exceeding limits).\n    ResourceQuota,\n    /// An agent joined a session.\n    SessionJoin,\n    /// An agent left a session.\n    SessionLeave,\n    /// A task was delegated to a sub-agent.\n    TaskDelegation,\n    /// An interrupt signal was received and processed.\n    Interrupt,\n    /// A write to the agent's context or memory occurred.\n    ContextWrite,\n}",
              "documentation": "The kind of audit event recorded in the audit trail.\n\nEvery significant operation is logged as an audit event with a specific\nkind. This enum defines the complete set of audit event categories.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 14.3 -- Audit Events.\n\n# Serialization\n\nSerializes to snake_case: `\"agent_instantiated\"`, `\"tool_invocation\"`, etc.\n\n# Examples\n\n```\nuse forge_core::telemetry::AuditEventKind;\n\nlet kind = AuditEventKind::ToolInvocation;\nlet json = serde_json::to_string(&kind).unwrap();\nassert_eq!(json, \"\\\"tool_invocation\\\"\");\n\nlet parsed: AuditEventKind = serde_json::from_str(&json).unwrap();\nassert_eq!(parsed, AuditEventKind::ToolInvocation);\n```"
            },
            {
              "name": "::ForgeSpan",
              "line": 108,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ForgeSpan {\n/// The span name (e.g., \"forge.agent.generate\", \"forge.tool.execute\").\n\npub name: String,\n/// Span start time.\n\npub start_time: Timestamp,\n/// Span end time (set when span completes).\n\npub end_time: Option<Timestamp>,\n/// Key-value attributes.\n\npub attributes: HashMap<String, SpanAttribute>,\n/// Span status.\n\npub status: SpanStatus,\n/// Parent span ID for distributed tracing.\n\npub parent_id: Option<String>,\n/// This span's unique ID.\n\npub span_id: String\n}",
              "documentation": "A telemetry span representing a unit of work.\n\nSpans follow OpenTelemetry semantics: they have a name, start/end times,\nattributes, and optional parent span ID for distributed tracing.\n\n# Examples\n\n```\nuse forge_core::telemetry::ForgeSpan;\n\nlet span = ForgeSpan::new(\"forge.agent.tool_loop.step\");\n```"
            },
            {
              "name": "::ForgeSpan::new",
              "line": 131,
              "signature": "pub fn new(name: impl Into<String>) -> Self;",
              "documentation": "Creates a new span with the given name. Start time is set to now.\n\n# Arguments\n\n* `name` - The span name (use dotted notation: \"forge.agent.generate\")."
            },
            {
              "name": "::ForgeSpan::set_attribute",
              "line": 149,
              "signature": "pub fn set_attribute(&mut self, key: impl Into<String>, value: impl Into<SpanAttribute>);",
              "documentation": "Sets an attribute on this span.\n\n# Arguments\n\n* `key` - The attribute key.\n* `value` - The attribute value."
            },
            {
              "name": "::ForgeSpan::end",
              "line": 154,
              "signature": "pub fn end(&mut self);",
              "documentation": "Marks this span as completed. End time is set to now."
            },
            {
              "name": "::ForgeSpan::end_with_error",
              "line": 159,
              "signature": "pub fn end_with_error(&mut self, message: impl Into<String>);",
              "documentation": "Marks this span as completed with an error."
            },
            {
              "name": "::ForgeSpan::with_parent",
              "line": 167,
              "signature": "pub fn with_parent(mut self, parent_id: impl Into<String>) -> Self;",
              "documentation": "Sets the parent span ID."
            },
            {
              "name": "::ForgeEvent",
              "line": 178,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ForgeEvent {\n/// The event name.\n\npub name: String,\n/// When the event occurred.\n\npub timestamp: Timestamp,\n/// Key-value attributes.\n\npub attributes: HashMap<String, SpanAttribute>\n}",
              "documentation": "A telemetry event (a point-in-time annotation within a span).\n\nEvents record significant moments: tool invocations, lifecycle transitions,\nerror occurrences, etc."
            },
            {
              "name": "::ForgeEvent::new",
              "line": 189,
              "signature": "pub fn new(name: impl Into<String>) -> Self;",
              "documentation": "Creates a new event with the given name. Timestamp is set to now."
            },
            {
              "name": "::ForgeEvent::set_attribute",
              "line": 198,
              "signature": "pub fn set_attribute(&mut self, key: impl Into<String>, value: impl Into<SpanAttribute>);",
              "documentation": "Sets an attribute on this event."
            },
            {
              "name": "::SpanStatus",
              "line": 206,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"code\", rename_all = \"snake_case\")]\npub enum SpanStatus {\n    /// Status not set (default).\n    Unset,\n    /// Operation completed successfully.\n    Ok,\n    /// Operation failed with an error.\n    Error {\n        /// Error message.\n        message: String,\n    },\n}",
              "documentation": "Span status following OpenTelemetry conventions."
            },
            {
              "name": "::SpanAttribute",
              "line": 221,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(untagged)]\npub enum SpanAttribute {\n    /// A string value.\n    String(String),\n    /// An integer value.\n    Int(i64),\n    /// A floating-point value.\n    Float(f64),\n    /// A boolean value.\n    Bool(bool),\n}",
              "documentation": "An attribute value for spans and events."
            },
            {
              "name": "::TelemetryEmitter",
              "line": 279,
              "signature": "pub trait TelemetryEmitter: Send + Sync {\n    /// Emits a completed span.\n    fn emit_span(&self, span: &ForgeSpan);\n    /// Emits an event.\n    fn emit_event(&self, event: &ForgeEvent);\n}",
              "documentation": "Trait for emitting telemetry data.\n\nImplementations can send spans and events to OpenTelemetry collectors,\nlog files, or in-memory buffers for testing.\n\n# Examples\n\n```\nuse forge_core::telemetry::{TelemetryEmitter, ForgeSpan, ForgeEvent};\n\nstruct NoopEmitter;\n\nimpl TelemetryEmitter for NoopEmitter {\n    fn emit_span(&self, _span: &ForgeSpan) {}\n    fn emit_event(&self, _event: &ForgeEvent) {}\n}\n```"
            },
            {
              "name": "::NoopEmitter",
              "line": 287,
              "signature": "pub struct NoopEmitter;",
              "documentation": "A no-op telemetry emitter that discards all data."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/tool.rs",
          "sha256": "3f0b5dc4e3b4b5a7753480e90ed91dce4f9139d2a39de2fdec738d0b2184389d",
          "artifactSha256": "c2a91ed7b95f672a2b5710edbe6a0183f2dfd44df7dbc710d5369d0ab663cc6c",
          "url": "/reference/source/forge-rs/crates/forge-core/src/tool.rs.txt",
          "declarations": [
            {
              "name": "::ToolTier",
              "line": 26,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub enum ToolTier {\n    /// Tier 1 -- Platform tools provided by the runtime.\n    ///\n    /// Always available, no authorization needed. Examples: clock, crypto, logging.\n    #[serde(rename = \"platform\")]\n    Platform,\n\n    /// Tier 2 -- External tools that execute outside the sandbox.\n    ///\n    /// Require Arsenal ACT authorization. Examples: web browsing, database, APIs.\n    #[serde(rename = \"external\", alias = \"host\")]\n    External,\n\n    /// Tier 3 -- Embedded tools compiled into the agent WASM module.\n    ///\n    /// Scoped to the module. Examples: data parsing, computation, pure functions.\n    #[serde(rename = \"embedded\")]\n    Embedded,\n}",
              "documentation": "Tool tier classification per ANVIL Spec section 8.1.\n\nThe three tiers determine where a tool executes, how it's discovered,\nand what authorization is required.\n\n# Tiers\n\n| Tier | Name | Location | Auth |\n|------|------|----------|------|\n| 1 | Platform | Inside sandbox | Always available |\n| 2 | External | Outside sandbox | Arsenal ACT required |\n| 3 | Embedded | Inside WASM module | Module-scoped |"
            },
            {
              "name": "::ToolTier::requires_authorization",
              "line": 51,
              "signature": "pub fn requires_authorization(&self) -> bool;",
              "documentation": "Returns `true` if this tier requires Arsenal ACT authorization.\n\nOnly Tier 2 (External) tools require ACT checks. Platform tools are\nalways available, and embedded tools are sandbox-confined."
            },
            {
              "name": "::ToolTier::as_str",
              "line": 56,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the tier as a string."
            },
            {
              "name": "::ToolDefinition",
              "line": 93,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ToolDefinition {\n\n}",
              "documentation": "Definition of a tool that an agent can invoke.\n\n# ANVIL Spec \u00a78.2\n\nEvery tool has a unique name, human-readable description, a JSON Schema\nfor its parameters, and a tier classification.\n\n# Examples\n\n```\nuse forge_core::tool::{ToolDefinition, ToolTier};\nuse forge_core::schema::JsonSchema;\n\nlet tool = ToolDefinition::builder(\"get_weather\")\n    .description(\"Get current weather for a city\")\n    .tier(ToolTier::External)\n    .parameters(JsonSchema::object()\n        .property(\"city\", JsonSchema::string().description(\"City name\"))\n        .required(\"city\"))\n    .build();\n```"
            },
            {
              "name": "::ToolDefinition::builder",
              "line": 110,
              "signature": "pub fn builder(name: impl Into<String>) -> ToolDefinitionBuilder;",
              "documentation": "Creates a builder for constructing a `ToolDefinition`.\n\n# Arguments\n\n* `name` - The unique tool name."
            },
            {
              "name": "::ToolDefinition::name",
              "line": 120,
              "signature": "pub fn name(&self) -> &str;",
              "documentation": "Returns the tool name."
            },
            {
              "name": "::ToolDefinition::description",
              "line": 125,
              "signature": "pub fn description(&self) -> &str;",
              "documentation": "Returns the tool description."
            },
            {
              "name": "::ToolDefinition::parameters",
              "line": 130,
              "signature": "pub fn parameters(&self) -> &JsonSchema;",
              "documentation": "Returns the parameter schema."
            },
            {
              "name": "::ToolDefinition::tier",
              "line": 135,
              "signature": "pub fn tier(&self) -> ToolTier;",
              "documentation": "Returns the tool tier."
            },
            {
              "name": "::ToolDefinitionBuilder",
              "line": 141,
              "signature": "pub struct ToolDefinitionBuilder {\n\n}",
              "documentation": "Builder for `ToolDefinition`."
            },
            {
              "name": "::ToolDefinitionBuilder::description",
              "line": 150,
              "signature": "pub fn description(mut self, desc: impl Into<String>) -> Self;",
              "documentation": "Sets the tool description."
            },
            {
              "name": "::ToolDefinitionBuilder::parameters",
              "line": 156,
              "signature": "pub fn parameters(mut self, schema: JsonSchema) -> Self;",
              "documentation": "Sets the parameter schema."
            },
            {
              "name": "::ToolDefinitionBuilder::tier",
              "line": 162,
              "signature": "pub fn tier(mut self, tier: ToolTier) -> Self;",
              "documentation": "Sets the tool tier classification."
            },
            {
              "name": "::ToolDefinitionBuilder::build",
              "line": 168,
              "signature": "pub fn build(self) -> ToolDefinition;",
              "documentation": "Builds the `ToolDefinition`."
            },
            {
              "name": "::ToolCall",
              "line": 182,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ToolCall {\n/// Unique identifier for this call (used to match with results).\n\npub id: String,\n/// The tool name being invoked.\n\npub name: String,\n/// JSON arguments for the tool.\n\npub arguments: serde_json::Value\n}",
              "documentation": "A tool invocation request from the model.\n\nGenerated by the model during inference when it decides to call a tool."
            },
            {
              "name": "::ToolResult",
              "line": 195,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ToolResult {\n/// The tool call ID this result corresponds to.\n\npub tool_call_id: String,\n/// The tool name.\n\npub name: String,\n/// The result content (stringified).\n\npub content: String,\n/// Whether the tool execution resulted in an error.\n\npub is_error: bool\n}",
              "documentation": "The result of a tool execution.\n\nReturned to the model as context for the next inference step."
            },
            {
              "name": "::ToolApproval",
              "line": 215,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub enum ToolApproval {\n    /// The tool call is approved as-is.\n    Approve,\n    /// The tool call is denied with a reason.\n    Deny {\n        /// Why the tool call was denied.\n        reason: String,\n    },\n    /// The tool call is approved but with modified arguments.\n    Modify {\n        /// The modified arguments to use instead.\n        arguments: serde_json::Value,\n    },\n}",
              "documentation": "Tool approval decision.\n\nBefore executing a tool, the approval handler decides whether to proceed.\nThis enables human-in-the-loop and policy-based tool gating.\n\n# ANVIL Spec \u00a78.6\n\nThe approval step is mandatory in the tool execution lifecycle."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/topology.rs",
          "sha256": "a5bbd2942098277eadddf50734585f7c51d95aa10c8fb38300aff87cc0a97acd",
          "artifactSha256": "dac92be427831a09feaba90e8c63f50e0d549de540b97943a207077bf7dff041",
          "url": "/reference/source/forge-rs/crates/forge-core/src/topology.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_ROLE",
              "line": 67,
              "signature": "pub const DEFAULT_ROLE: &str;",
              "documentation": "The default role name that every topology must contain."
            },
            {
              "name": "::CostPreference",
              "line": 84,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum CostPreference {\n    /// Prefer the cheapest model that satisfies requirements.\n    Minimize,\n    /// Accept moderate cost for better quality.\n    Balanced,\n    /// Ignore cost; select the best model regardless of price.\n    Ignore,\n}",
              "documentation": "Cost preference for a model slot.\n\nGuides the router's cost-sensitivity when selecting among multiple\neligible slots or fallback candidates.\n\n# Examples\n\n```\nuse forge_core::topology::CostPreference;\n\nlet pref = CostPreference::Minimize;\nassert_eq!(format!(\"{pref:?}\"), \"Minimize\");\n```"
            },
            {
              "name": "::LatencyPreference",
              "line": 108,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum LatencyPreference {\n    /// Prefer the lowest-latency model.\n    Low,\n    /// Accept moderate latency for better quality.\n    Balanced,\n    /// Ignore latency; select the best model regardless of response time.\n    Tolerant,\n}",
              "documentation": "Latency preference for a model slot.\n\nGuides the router's latency-sensitivity when selecting among multiple\neligible slots or fallback candidates.\n\n# Examples\n\n```\nuse forge_core::topology::LatencyPreference;\n\nlet pref = LatencyPreference::Low;\nassert_eq!(format!(\"{pref:?}\"), \"Low\");\n```"
            },
            {
              "name": "::ModelSlot",
              "line": 147,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ModelSlot {\n/// The role name for this slot (e.g., \"planner\", \"coder\", \"default\").\n\n///\n\n/// Role names are freeform strings. The reserved name \"default\" designates\n\n/// the slot used when no routing decision applies. Every topology must\n\n/// have exactly one slot with role \"default\".\n\npub role: String,\n/// Primary model for this slot.\n\npub primary: ProviderRef,\n/// Ordered fallback models. Tried in sequence when the primary is\n\n/// unavailable or fails negotiation.\n\n#[serde(default)]\npub fallbacks: Vec<ProviderRef>,\n/// Runtime capabilities required for this slot. The router validates\n\n/// that the selected model satisfies these before returning a route.\n\n#[serde(default)]\npub required_capabilities: Vec<RuntimeCapability>,\n/// Optional cost preference for the router.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub cost_preference: Option<CostPreference>,\n/// Optional latency preference for the router.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub latency_preference: Option<LatencyPreference>,\n/// Optional Arsenal scope narrowing applied when this slot is selected.\n\n/// If set, the agent's ACT is intersected with these scopes before\n\n/// the model call. The intersection can only narrow, never widen.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub arsenal_scope_narrowing: Option<Vec<String>>\n}",
              "documentation": "A named model assignment within a topology.\n\nEach slot represents a role that a model fills (e.g., \"planner\",\n\"coder\", \"classifier\"). The slot carries the primary model reference,\nan ordered fallback list, capability requirements, and optional\nArsenal scope narrowing.\n\n# ANVIL Spec Reference\n\nANVIL Spec SS6.2 -- Provider Abstraction. Model slots extend the\nprovider model to support role-based assignment with constraints.\n\n# Examples\n\n```\nuse forge_core::topology::ModelSlot;\nuse forge_core::provider::ProviderRef;\n\nlet slot = ModelSlot {\n    role: \"default\".into(),\n    primary: ProviderRef::parse(\"openai:gpt-4o\").unwrap(),\n    fallbacks: vec![],\n    required_capabilities: vec![],\n    cost_preference: None,\n    latency_preference: None,\n    arsenal_scope_narrowing: None,\n};\nassert_eq!(slot.role, \"default\");\n```"
            },
            {
              "name": "::ModelTopology",
              "line": 219,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ModelTopology {\n\n}",
              "documentation": "The complete model assignment for an agent or Brew.\n\nA topology is a named collection of [`ModelSlot`] entries keyed by role.\nEvery topology must contain exactly one slot with `role == \"default\"`.\nThe topology is validated at construction time -- not at first use.\n\nInternally, slots are stored in a `BTreeMap<String, ModelSlot>` to\nguarantee deterministic serialization order across platforms and runs.\n\n# Construction from a single model\n\n[`ModelTopology::single`] creates a topology with one slot whose role\nis \"default\". This is the backward-compatible path.\n\n# Construction from multiple models\n\n[`ModelTopology::builder`] returns a [`TopologyBuilder`] with a fluent\nAPI for assembling multi-slot topologies.\n\n# ANVIL Spec Reference\n\nANVIL Spec SS6.1-6.2 -- Cognitive Interface and Provider Abstraction.\n\n# Examples\n\n```\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\nlet pref = ProviderRef::parse(\"openai:gpt-4o\").unwrap();\nlet topology = ModelTopology::single(pref);\nassert_eq!(topology.name(), \"single\");\nassert_eq!(topology.default_role(), \"default\");\nassert_eq!(topology.slots().len(), 1);\n```"
            },
            {
              "name": "::ModelTopology::single",
              "line": 257,
              "signature": "pub fn single(provider_ref: ProviderRef) -> Self;",
              "documentation": "Creates a single-model topology. The model fills the \"default\" role.\n\nThis is the backward-compatible constructor. Agents that use a single\nmodel for everything should use this path.\n\n# Arguments\n\n* `provider_ref` - The provider reference for the sole model.\n\n# Returns\n\nA `ModelTopology` with one slot whose role is \"default\".\n\n# Examples\n\n```\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\nlet pref = ProviderRef::parse(\"openai:gpt-4o\").unwrap();\nlet topology = ModelTopology::single(pref.clone());\n\nlet default = topology.default_slot();\nassert_eq!(default.role, \"default\");\nassert_eq!(default.primary, pref);\n```"
            },
            {
              "name": "::ModelTopology::builder",
              "line": 290,
              "signature": "pub fn builder() -> TopologyBuilder;",
              "documentation": "Returns a builder for multi-slot topologies.\n\n# Examples\n\n```\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\nlet topology = ModelTopology::builder()\n    .slot(\"default\", ProviderRef::parse(\"openai:gpt-4o\").unwrap())\n    .build()\n    .unwrap();\nassert_eq!(topology.slots().len(), 1);\n```"
            },
            {
              "name": "::ModelTopology::name",
              "line": 298,
              "signature": "pub fn name(&self) -> &str;",
              "documentation": "Returns the human-readable name of this topology."
            },
            {
              "name": "::ModelTopology::default_role",
              "line": 303,
              "signature": "pub fn default_role(&self) -> &str;",
              "documentation": "Returns the default role name. Always \"default\"."
            },
            {
              "name": "::ModelTopology::default_slot",
              "line": 313,
              "signature": "pub fn default_slot(&self) -> &ModelSlot;",
              "documentation": "Returns the default slot.\n\nThis method is guaranteed to return a valid slot because the topology\nis validated at construction time to ensure a \"default\" slot exists.\nIf the internal state is somehow corrupted (which cannot happen\nthrough the public API), the first slot in the topology is returned."
            },
            {
              "name": "::ModelTopology::slot_for_role",
              "line": 388,
              "signature": "pub fn slot_for_role(&self, role: &str) -> &ModelSlot;",
              "documentation": "Returns the slot for the given role, or the default slot if not found.\n\n# Arguments\n\n* `role` - The role name to look up.\n\n# Returns\n\nThe slot for the given role, or the default slot if no slot with\nthat role name exists.\n\n# Examples\n\n```\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\nlet topology = ModelTopology::builder()\n    .slot(\"default\", ProviderRef::parse(\"openai:gpt-4o\").unwrap())\n    .slot(\"planner\", ProviderRef::parse(\"anthropic:claude-opus-4\").unwrap())\n    .build()\n    .unwrap();\n\nlet planner = topology.slot_for_role(\"planner\");\nassert_eq!(planner.role, \"planner\");\n\n// Unknown role falls back to default\nlet unknown = topology.slot_for_role(\"nonexistent\");\nassert_eq!(unknown.role, \"default\");\n```"
            },
            {
              "name": "::ModelTopology::slots",
              "line": 395,
              "signature": "pub fn slots(&self) -> &BTreeMap<String, ModelSlot>;",
              "documentation": "Returns all slots as a reference to the underlying `BTreeMap`.\n\nThe map is keyed by role name and sorted lexicographically."
            },
            {
              "name": "::ModelTopology::all_provider_refs",
              "line": 404,
              "signature": "pub fn all_provider_refs(&self) -> Vec<&ProviderRef>;",
              "documentation": "Returns the set of all distinct `ProviderRef` values (primaries and\nfallbacks) referenced by this topology.\n\nThe returned vector is sorted by provider reference string and\ndeduplicated."
            },
            {
              "name": "::ModelTopology::has_role",
              "line": 418,
              "signature": "pub fn has_role(&self, role: &str) -> bool;",
              "documentation": "Returns `true` if a slot with the given role name exists."
            },
            {
              "name": "::ModelTopology::slot_count",
              "line": 423,
              "signature": "pub fn slot_count(&self) -> usize;",
              "documentation": "Returns the number of slots in this topology."
            },
            {
              "name": "::TopologyBuilder",
              "line": 452,
              "signature": "#[derive(Debug)]\npub struct TopologyBuilder {\n\n}",
              "documentation": "Builder for constructing [`ModelTopology`] instances with validation.\n\nThe builder enforces two invariants at build time:\n1. Exactly one slot must have the role \"default\".\n2. No two slots may share the same role name.\n\n# Examples\n\n```\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\nuse forge_core::provider_runtime::RuntimeCapability;\n\nlet topology = ModelTopology::builder()\n    .slot(\"default\", ProviderRef::parse(\"openai:gpt-4o\").unwrap())\n    .slot(\"planner\", ProviderRef::parse(\"anthropic:claude-opus-4\").unwrap())\n    .with_fallback(\"planner\", ProviderRef::parse(\"openai:o3\").unwrap())\n    .with_required_capability(\"planner\", RuntimeCapability::ToolCalls)\n    .build()\n    .unwrap();\n\nassert_eq!(topology.slots().len(), 2);\n```"
            },
            {
              "name": "::TopologyBuilder::name",
              "line": 469,
              "signature": "pub fn name(mut self, name: impl Into<String>) -> Self;",
              "documentation": "Sets the topology name.\n\n# Arguments\n\n* `name` - Human-readable name for this topology.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::TopologyBuilder::slot",
              "line": 496,
              "signature": "pub fn slot(mut self, role: impl Into<String>, primary: ProviderRef) -> Self;",
              "documentation": "Adds a slot with the given role and primary model.\n\nIf a slot with the same role already exists, it is replaced.\n\n# Arguments\n\n* `role` - The role name (e.g., \"default\", \"planner\", \"coder\").\n* `primary` - The primary model for this slot.\n\n# Returns\n\nThe builder for chaining.\n\n# Examples\n\n```\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\nlet builder = ModelTopology::builder()\n    .slot(\"default\", ProviderRef::parse(\"openai:gpt-4o\").unwrap());\n```"
            },
            {
              "name": "::TopologyBuilder::with_fallback",
              "line": 525,
              "signature": "pub fn with_fallback(mut self, role: impl AsRef<str>, fallback: ProviderRef) -> Self;",
              "documentation": "Adds a fallback model to an existing slot.\n\nFallbacks are tried in order when the primary model is unavailable\nor fails negotiation. If the specified role does not exist, this\nmethod is a no-op (the slot must be added first with [`slot`](Self::slot)).\n\n# Arguments\n\n* `role` - The role name of the slot to add the fallback to.\n* `fallback` - The fallback model to append.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::TopologyBuilder::with_required_capability",
              "line": 544,
              "signature": "pub fn with_required_capability(\n        mut self,\n        role: impl AsRef<str>,\n        cap: RuntimeCapability,\n    ) -> Self;",
              "documentation": "Adds a required runtime capability to an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\n# Arguments\n\n* `role` - The role name of the slot to add the capability to.\n* `cap` - The runtime capability to require.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::TopologyBuilder::with_cost_preference",
              "line": 567,
              "signature": "pub fn with_cost_preference(mut self, role: impl AsRef<str>, pref: CostPreference) -> Self;",
              "documentation": "Sets the cost preference for an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\n# Arguments\n\n* `role` - The role name of the slot.\n* `pref` - The cost preference to set.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::TopologyBuilder::with_latency_preference",
              "line": 586,
              "signature": "pub fn with_latency_preference(\n        mut self,\n        role: impl AsRef<str>,\n        pref: LatencyPreference,\n    ) -> Self;",
              "documentation": "Sets the latency preference for an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\n# Arguments\n\n* `role` - The role name of the slot.\n* `pref` - The latency preference to set.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::TopologyBuilder::with_scope_narrowing",
              "line": 609,
              "signature": "pub fn with_scope_narrowing(mut self, role: impl AsRef<str>, scopes: Vec<String>) -> Self;",
              "documentation": "Sets Arsenal scope narrowing for an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\n# Arguments\n\n* `role` - The role name of the slot.\n* `scopes` - The scope names to narrow to.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::TopologyBuilder::build",
              "line": 653,
              "signature": "pub fn build(self) -> ForgeResult<ModelTopology>;",
              "documentation": "Builds the topology, validating invariants.\n\n# Validation Rules\n\n1. Exactly one slot must have the role \"default\".\n2. At least one slot must exist.\n\nRole uniqueness is guaranteed by the `BTreeMap` key structure --\nduplicate roles overwrite previous entries during building.\n\n# Returns\n\nA validated `ModelTopology`, or a `ForgeError` if validation fails.\n\n# Errors\n\nReturns `ForgeError::SchemaValidation` if the topology has no\n\"default\" slot or is empty.\n\n# Examples\n\n```\nuse forge_core::topology::ModelTopology;\nuse forge_core::provider::ProviderRef;\n\n// Missing default slot fails\nlet result = ModelTopology::builder()\n    .slot(\"planner\", ProviderRef::parse(\"openai:gpt-4o\").unwrap())\n    .build();\nassert!(result.is_err());\n\n// With default slot succeeds\nlet result = ModelTopology::builder()\n    .slot(\"default\", ProviderRef::parse(\"openai:gpt-4o\").unwrap())\n    .build();\nassert!(result.is_ok());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-core/src/types.rs",
          "sha256": "1e01fc2331f3ba7b6571289f11b840ee5213b0265263b6be470db79dbf89c45a",
          "artifactSha256": "3df48cacdb74d84262f07739baf00de987c21623abfac17aa7c6482ba0da376a",
          "url": "/reference/source/forge-rs/crates/forge-core/src/types.rs.txt",
          "declarations": [
            {
              "name": "::AgentDid",
              "line": 22,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct AgentDid(String);",
              "documentation": "A DID (Decentralized Identifier) representing an agent's identity.\n\nFormat: `did:oas:<namespace>:<kind>:<identifier>`\n\n# Examples\n\n```\nuse forge_core::types::AgentDid;\n\nlet did = AgentDid::new(\"did:oas:l1fe:agent:data-analyzer\").unwrap();\nassert_eq!(did.as_str(), \"did:oas:l1fe:agent:data-analyzer\");\n```"
            },
            {
              "name": "::AgentDid::new",
              "line": 46,
              "signature": "pub fn new(did: &str) -> Option<Self>;",
              "documentation": "Creates a new `AgentDid` from a DID string.\n\n# Arguments\n\n* `did` - A DID string in the format `did:oas:<namespace>:<kind>:<identifier>`.\n\n# Returns\n\nThe validated `AgentDid`, or `None` if the format is invalid.\n\n# Examples\n\n```\nuse forge_core::types::AgentDid;\n\nlet valid = AgentDid::new(\"did:oas:l1fe:agent:bot-1\");\nassert!(valid.is_some());\n\nlet invalid = AgentDid::new(\"not-a-did\");\nassert!(invalid.is_none());\n```"
            },
            {
              "name": "::AgentDid::from_trusted",
              "line": 60,
              "signature": "pub fn from_trusted(did: String) -> Self;",
              "documentation": "Creates an `AgentDid` without validation.\n\n# Safety (logical)\n\nThe caller must ensure the string is a valid OAS DID. This is provided\nfor interop with the OAS SDK which already validates DIDs."
            },
            {
              "name": "::AgentDid::as_str",
              "line": 65,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the DID string."
            },
            {
              "name": "::AgentDid::into_string",
              "line": 70,
              "signature": "pub fn into_string(self) -> String;",
              "documentation": "Returns the inner string, consuming the wrapper."
            },
            {
              "name": "::Timestamp",
              "line": 101,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]\npub struct Timestamp(chrono::DateTime<chrono::Utc>);",
              "documentation": "A UTC timestamp used throughout the Forge SDK.\n\nWraps `chrono::DateTime<chrono::Utc>` with Forge-specific serialization.\n\n# Examples\n\n```\nuse forge_core::types::Timestamp;\n\nlet now = Timestamp::now();\nlet iso = now.to_iso8601();\nassert!(iso.contains(\"T\"));\n```"
            },
            {
              "name": "::Timestamp::now",
              "line": 105,
              "signature": "pub fn now() -> Self;",
              "documentation": "Creates a `Timestamp` for the current UTC time."
            },
            {
              "name": "::Timestamp::from_iso8601",
              "line": 130,
              "signature": "pub fn from_iso8601(s: &str) -> Option<Self>;",
              "documentation": "Creates a `Timestamp` from an ISO 8601 string.\n\n# Arguments\n\n* `s` - An ISO 8601 formatted date-time string.\n\n# Returns\n\nThe parsed `Timestamp`, or `None` if parsing fails.\n\n# Examples\n\n```\nuse forge_core::types::Timestamp;\n\nlet ts = Timestamp::from_iso8601(\"2026-01-15T00:00:00Z\");\nassert!(ts.is_some());\n\nlet bad = Timestamp::from_iso8601(\"not-a-date\");\nassert!(bad.is_none());\n```"
            },
            {
              "name": "::Timestamp::to_iso8601",
              "line": 135,
              "signature": "pub fn to_iso8601(self) -> String;",
              "documentation": "Formats this timestamp as an ISO 8601 string."
            },
            {
              "name": "::Timestamp::as_chrono",
              "line": 140,
              "signature": "pub fn as_chrono(&self) -> &chrono::DateTime<chrono::Utc>;",
              "documentation": "Returns the inner `chrono::DateTime<Utc>`."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-generate",
      "language": "rust",
      "version": "0.2.0",
      "description": "Text, stream, and structured output generation for the Forge SDK",
      "manifest": "forge-rs/crates/forge-generate/Cargo.toml",
      "manifestSha256": "bd1d2fdc4d0e5fc00553e7b809098dfabe722bd3dca4a985367c8d0562326226",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-generate",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-generate/src/error.rs",
          "sha256": "8e7abb146991d947e6df860feb7b8a11d14db181b016ccf85e7515c7c723bb97",
          "artifactSha256": "ad0957819cd43d2b1c51046c2f3f2b6e825dc01eb5b149aee6caf82a4ce7e86c",
          "url": "/reference/source/forge-rs/crates/forge-generate/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeGenerateError",
              "line": 33,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeGenerateError {\n    /// The language model returned an error during inference.\n    ///\n    /// This wraps errors from the underlying `LanguageModel::generate()` or\n    /// `LanguageModel::stream()` calls, including provider-side failures,\n    /// rate limits, and network errors.\n    #[error(\"model '{model}' returned an error during generation: {reason}\")]\n    ModelError {\n        /// The model identifier (e.g., \"gpt-4o\").\n        model: String,\n        /// The error message from the provider.\n        reason: String,\n    },\n\n    /// The model's output failed schema validation.\n    ///\n    /// Occurs during structured output generation ([`generate_object()`] /\n    /// [`stream_object()`]) when the model produces JSON that does not\n    /// conform to the provided schema.\n    ///\n    /// [`generate_object()`]: crate::generate_object\n    /// [`stream_object()`]: crate::stream_object\n    #[error(\"schema violation at path '{path}': {reason} (model={model})\")]\n    SchemaViolation {\n        /// The model identifier.\n        model: String,\n        /// JSON pointer path to the failing field.\n        path: String,\n        /// Human-readable description of the schema expectation.\n        reason: String,\n    },\n\n    /// The maximum step limit was reached during multi-step generation.\n    ///\n    /// Occurs when [`generate_steps()`] exhausts its stop condition without\n    /// the model producing a terminal response.\n    ///\n    /// [`generate_steps()`]: crate::generate_steps\n    #[error(\"step limit reached after {steps_completed} steps (limit={limit}, total_tokens={total_tokens})\")]\n    StepLimitReached {\n        /// The number of steps completed before the limit was hit.\n        steps_completed: u32,\n        /// The configured step limit.\n        limit: u32,\n        /// Total tokens consumed across all steps.\n        total_tokens: u64,\n    },\n\n    /// A streaming response was interrupted before completion.\n    ///\n    /// Occurs when `LanguageModel::stream()` returns chunks that do not\n    /// include a terminal `Done` chunk, indicating the stream was cut short.\n    #[error(\"stream interrupted for model '{model}' after {chunks_received} chunks: {reason}\")]\n    StreamInterrupted {\n        /// The model identifier.\n        model: String,\n        /// The number of chunks received before the interruption.\n        chunks_received: usize,\n        /// Explanation of what went wrong.\n        reason: String,\n    },\n\n    /// The model returned no response content.\n    ///\n    /// Occurs when the model's response message contains no text parts and\n    /// no tool calls, which is an unexpected provider behavior.\n    #[error(\"model '{model}' returned no response content for {messages_count} input messages\")]\n    NoResponse {\n        /// The model identifier.\n        model: String,\n        /// The number of input messages that were sent.\n        messages_count: usize,\n    },\n\n    /// JSON deserialization of the model output failed.\n    ///\n    /// Occurs during structured output generation when the model's text\n    /// output cannot be parsed as valid JSON or cannot be deserialized\n    /// into the target type.\n    #[error(\"failed to deserialize model output as {target_type}: {reason} (model={model})\")]\n    DeserializationFailed {\n        /// The model identifier.\n        model: String,\n        /// The name of the target type being deserialized to.\n        target_type: String,\n        /// The deserialization error message.\n        reason: String,\n    },\n\n    /// A `forge-core` error occurred during generation.\n    #[error(\"core error: {0}\")]\n    Core(#[from] forge_core::error::ForgeError),\n}",
              "documentation": "Error type for generation operations.\n\nCovers model call failures, schema violations, streaming interruptions,\nstep limit exhaustion, and missing responses.\n\n# Examples\n\n```\nuse forge_generate::ForgeGenerateError;\n\nlet err = ForgeGenerateError::NoResponse {\n    model: \"openai:gpt-4o\".to_string(),\n    messages_count: 5,\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"openai:gpt-4o\"));\nassert!(msg.contains(\"5\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-generate/src/lib.rs",
          "sha256": "3a98512850ebd57e25f815df526a87a285ce3edd41f7b82019fba310411b1b49",
          "artifactSha256": "63762cdf6b3ed9d7be44422ea97389c2d30dd513b320ad26d4421f7fdd364a07",
          "url": "/reference/source/forge-rs/crates/forge-generate/src/lib.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 45,
              "signature": "pub mod error;",
              "documentation": "# forge-generate\n\nText generation, streaming, and structured output generation for the Forge SDK.\n\nThis crate provides the primary inference functions that agent code uses to\ninteract with language models. It builds on `forge-core` types and the\n`LanguageModel` trait to deliver:\n\n- **Text generation** \u2014 [`generate_text()`] for complete, buffered responses.\n- **Streaming** \u2014 [`stream_text()`] for incremental, chunk-by-chunk responses.\n- **Structured output** \u2014 [`generate_object()`] and [`stream_object()`] for\n  schema-validated, deserialized responses.\n- **Multi-step generation** \u2014 [`generate_steps()`] for iterating through\n  multiple inference calls until a stop condition is met.\n\n# ANVIL Spec Reference\n\nThis crate implements ANVIL Spec \u00a76.1 \u2014 Cognitive Interface, which defines the\ninference operations that all ANVIL-compliant runtimes must support:\n\n- `infer()` maps to [`generate_text()`]\n- `infer_stream()` maps to [`stream_text()`]\n- Structured output maps to [`generate_object()`]\n- Multi-step loops map to [`generate_steps()`]\n\n# Examples\n\n```no_run\nuse forge_core::config::GenerateOptions;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::model::LanguageModel;\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![\n        ModelMessage::text(Role::System, \"You are a helpful assistant.\"),\n        ModelMessage::text(Role::User, \"What is 2+2?\"),\n    ];\n    let options = GenerateOptions::default();\n\n    let result = forge_generate::generate_text(model, &messages, &[], &options).await;\n}\n```"
            },
            {
              "name": "object",
              "line": 46,
              "signature": "pub mod object;",
              "documentation": ""
            },
            {
              "name": "step",
              "line": 47,
              "signature": "pub mod step;",
              "documentation": ""
            },
            {
              "name": "stream",
              "line": 48,
              "signature": "pub mod stream;",
              "documentation": ""
            },
            {
              "name": "text",
              "line": 49,
              "signature": "pub mod text;",
              "documentation": ""
            },
            {
              "name": "pub use error::ForgeGenerateError;",
              "line": 51,
              "signature": "pub use error::ForgeGenerateError;",
              "documentation": ""
            },
            {
              "name": "pub use object::{generate_object, stream_object, ObjectResult};",
              "line": 52,
              "signature": "pub use object::{generate_object, stream_object, ObjectResult};",
              "documentation": ""
            },
            {
              "name": "pub use step::{generate_steps, StepResult, StopCondition, StopReason};",
              "line": 53,
              "signature": "pub use step::{generate_steps, StepResult, StopCondition, StopReason};",
              "documentation": ""
            },
            {
              "name": "pub use stream::{stream_text, stream_text_chunks, TextStreamResult};",
              "line": 54,
              "signature": "pub use stream::{stream_text, stream_text_chunks, TextStreamResult};",
              "documentation": ""
            },
            {
              "name": "pub use text::{generate_text, GenerateTextResult};",
              "line": 55,
              "signature": "pub use text::{generate_text, GenerateTextResult};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-generate/src/object.rs",
          "sha256": "7de11089d17a005eee22201555ff89478cdb395aefa10a648c073dcdde18f390",
          "artifactSha256": "dfe5a88584cd3b7ecb556216c2196a0113319aecf8267ceea34f63ada85a9f0f",
          "url": "/reference/source/forge-rs/crates/forge-generate/src/object.rs.txt",
          "declarations": [
            {
              "name": "::ObjectResult",
              "line": 84,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ObjectResult<T> {\n/// The deserialized object.\n\npub object: T,\n/// The raw JSON string from the model output.\n\npub raw_json: String,\n/// Token usage statistics.\n\npub usage: Usage,\n/// Why generation stopped.\n\npub finish_reason: FinishReason\n}",
              "documentation": "The result of a [`generate_object()`] or [`stream_object()`] call.\n\nContains the deserialized object, the raw JSON string from the model,\nand token usage statistics.\n\n# Type Parameters\n\n* `T` - The target type to deserialize the model's JSON output into.\n\n# Examples\n\n```\nuse forge_core::output::Usage;\nuse forge_generate::ObjectResult;\n\nlet result: ObjectResult<Vec<String>> = ObjectResult {\n    object: vec![\"hello\".to_string()],\n    raw_json: r#\"[\"hello\"]\"#.to_string(),\n    usage: Usage { prompt_tokens: 5, completion_tokens: 3, total_tokens: 8 },\n    finish_reason: forge_core::output::FinishReason::Stop,\n};\nassert_eq!(result.object.len(), 1);\n```"
            },
            {
              "name": "::generate_object",
              "line": 157,
              "signature": "pub async fn generate_object<T: DeserializeOwned>(\n    model: &dyn LanguageModel,\n    messages: &[ModelMessage],\n    schema: &JsonSchema,\n    options: &GenerateOptions,\n) -> Result<ObjectResult<T>, ForgeGenerateError>;",
              "documentation": "Generates a structured object from a language model.\n\nSends the conversation history to the model with a JSON schema constraint,\nvalidates the response against the schema, and deserializes it into type `T`.\n\nThe schema is passed to the model via `GenerateOptions::output_schema`. If the\ncaller provides options that already have an `output_schema` set, this function\nuses the `schema` parameter instead (overriding the options schema).\n\n# ANVIL Spec \u00a76.1\n\nStructured output generation uses the cognitive interface `infer()` with a\nschema constraint.\n\n# Arguments\n\n* `model` - The language model to use for generation.\n* `messages` - The conversation history.\n* `schema` - The JSON schema that the model's output must conform to.\n* `options` - Generation options (temperature, max_tokens, etc.).\n\n# Returns\n\nAn [`ObjectResult<T>`] containing the deserialized object, raw JSON, usage,\nand finish reason.\n\n# Errors\n\n* [`ForgeGenerateError::ModelError`] \u2014 if the model call fails.\n* [`ForgeGenerateError::NoResponse`] \u2014 if the model returns empty content.\n* [`ForgeGenerateError::SchemaViolation`] \u2014 if the output fails schema validation.\n* [`ForgeGenerateError::DeserializationFailed`] \u2014 if JSON deserialization fails.\n\n# Examples\n\n```no_run\nuse forge_core::config::GenerateOptions;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::model::LanguageModel;\nuse forge_core::schema::JsonSchema;\nuse forge_generate::generate_object;\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Answer {\n    value: i32,\n    explanation: String,\n}\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![ModelMessage::text(Role::User, \"What is 2+2?\")];\n    let schema = JsonSchema::object()\n        .property(\"value\", JsonSchema::integer())\n        .property(\"explanation\", JsonSchema::string())\n        .required(\"value\")\n        .required(\"explanation\");\n\n    let result = generate_object::<Answer>(\n        model, &messages, &schema, &GenerateOptions::default(),\n    ).await;\n}\n```"
            },
            {
              "name": "::stream_object",
              "line": 293,
              "signature": "pub async fn stream_object<T: DeserializeOwned>(\n    model: &dyn LanguageModel,\n    messages: &[ModelMessage],\n    schema: &JsonSchema,\n    options: &GenerateOptions,\n) -> Result<ObjectResult<T>, ForgeGenerateError>;",
              "documentation": "Streams a structured object response from a language model.\n\nSimilar to [`generate_object()`], but uses the streaming API to receive the\nresponse incrementally. Once the full stream is collected, the assembled text\nis validated against the schema and deserialized into type `T`.\n\n# ANVIL Spec \u00a76.1\n\nStreaming structured output combines `infer_stream()` with schema validation.\n\n# Arguments\n\n* `model` - The language model to use for streaming generation.\n* `messages` - The conversation history.\n* `schema` - The JSON schema that the model's output must conform to.\n* `options` - Generation options (temperature, max_tokens, etc.).\n\n# Returns\n\nAn [`ObjectResult<T>`] containing the deserialized object, raw JSON, usage,\nand finish reason.\n\n# Errors\n\n* [`ForgeGenerateError::ModelError`] \u2014 if the model stream call fails.\n* [`ForgeGenerateError::StreamInterrupted`] \u2014 if the stream ends prematurely.\n* [`ForgeGenerateError::NoResponse`] \u2014 if the assembled text is empty.\n* [`ForgeGenerateError::SchemaViolation`] \u2014 if the output fails schema validation.\n* [`ForgeGenerateError::DeserializationFailed`] \u2014 if JSON deserialization fails.\n\n# Examples\n\n```no_run\nuse forge_core::config::GenerateOptions;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::model::LanguageModel;\nuse forge_core::schema::JsonSchema;\nuse forge_generate::stream_object;\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Summary {\n    title: String,\n    points: Vec<String>,\n}\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![ModelMessage::text(Role::User, \"Summarize this document.\")];\n    let schema = JsonSchema::object()\n        .property(\"title\", JsonSchema::string())\n        .property(\"points\", JsonSchema::array().items_schema(JsonSchema::string()))\n        .required(\"title\")\n        .required(\"points\");\n\n    let result = stream_object::<Summary>(\n        model, &messages, &schema, &GenerateOptions::default(),\n    ).await;\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-generate/src/step.rs",
          "sha256": "d15bc5689f67f7cc67c65f340c8f5b094c158ddd4f6ef2bafa0bbb62ea843d67",
          "artifactSha256": "704be9e6d43a0e4d06514674dc7dc11475154514946a1010683112aa394cba48",
          "url": "/reference/source/forge-rs/crates/forge-generate/src/step.rs.txt",
          "declarations": [
            {
              "name": "::StopCondition",
              "line": 70,
              "signature": "pub enum StopCondition {\n    /// Stop after a maximum number of generation steps.\n    MaxSteps(u32),\n\n    /// Stop when the cumulative token usage exceeds this threshold.\n    MaxTokens(u64),\n\n    /// Stop when the model's text output contains this substring.\n    TextMatch(String),\n\n    /// Stop based on a custom predicate applied to each step's result.\n    ///\n    /// The function receives the latest `GenerateResult` and returns `true`\n    /// if generation should stop.\n    Custom(Box<dyn Fn(&GenerateResult) -> bool + Send + Sync>),\n}",
              "documentation": "A condition that determines when multi-step generation stops.\n\n# ANVIL Spec \u00a76.1\n\nThe cognitive interface tool loop continues until a terminal condition:\nthe model stops requesting tools, a step limit is reached, or a token\nbudget is exhausted.\n\n# Variants\n\n* [`MaxSteps`](StopCondition::MaxSteps) \u2014 Stop after a fixed number of steps.\n* [`MaxTokens`](StopCondition::MaxTokens) \u2014 Stop when cumulative tokens exceed a budget.\n* [`TextMatch`](StopCondition::TextMatch) \u2014 Stop when the model's output contains a string.\n* [`Custom`](StopCondition::Custom) \u2014 Stop based on a user-defined predicate.\n\n# Examples\n\n```\nuse forge_generate::StopCondition;\n\nlet by_steps = StopCondition::MaxSteps(10);\nlet by_tokens = StopCondition::MaxTokens(4096);\nlet by_text = StopCondition::TextMatch(\"FINAL ANSWER\".to_string());\n```"
            },
            {
              "name": "::StopReason",
              "line": 113,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum StopReason {\n    /// The model produced a terminal response (no more tool calls).\n    ModelStopped,\n\n    /// The maximum step limit was reached.\n    StepLimitReached {\n        /// The number of steps completed.\n        steps: u32,\n        /// The configured step limit.\n        limit: u32,\n    },\n\n    /// The cumulative token budget was exceeded.\n    TokenLimitReached {\n        /// Total tokens consumed.\n        total_tokens: u64,\n        /// The configured token limit.\n        limit: u64,\n    },\n\n    /// The model's output matched the target text.\n    TextMatchFound {\n        /// The text pattern that was matched.\n        pattern: String,\n    },\n\n    /// A custom stop condition was triggered.\n    CustomCondition,\n}",
              "documentation": "The reason why multi-step generation stopped.\n\nIncluded in [`StepResult`] to let the caller determine whether\ngeneration completed naturally or was cut short by a limit.\n\n# Examples\n\n```\nuse forge_generate::StopReason;\n\nlet reason = StopReason::ModelStopped;\nlet msg = format!(\"{reason}\");\nassert!(msg.contains(\"stopped\"));\n```"
            },
            {
              "name": "::StepResult",
              "line": 181,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct StepResult {\n/// The ordered sequence of generation results, one per step.\n\npub steps: Vec<GenerateResult>,\n/// Cumulative token usage across all steps.\n\npub total_usage: Usage,\n/// Why multi-step generation stopped.\n\npub stop_reason: StopReason\n}",
              "documentation": "The result of a [`generate_steps()`] call.\n\nContains the sequence of generation results from each step, cumulative\ntoken usage, and the reason generation stopped.\n\n# Examples\n\n```\nuse forge_core::output::Usage;\nuse forge_generate::step::{StepResult, StopReason};\n\nlet result = StepResult {\n    steps: vec![],\n    total_usage: Usage::zero(),\n    stop_reason: StopReason::ModelStopped,\n};\nassert!(result.steps.is_empty());\n```"
            },
            {
              "name": "::StepResult::final_text",
              "line": 198,
              "signature": "pub fn final_text(&self) -> String;",
              "documentation": "Returns the text from the final step, or an empty string if no steps completed.\n\n# Returns\n\nThe text content of the last generation result."
            },
            {
              "name": "::StepResult::step_count",
              "line": 203,
              "signature": "pub fn step_count(&self) -> usize;",
              "documentation": "Returns the number of completed steps."
            },
            {
              "name": "::StepResult::completed_naturally",
              "line": 208,
              "signature": "pub fn completed_naturally(&self) -> bool;",
              "documentation": "Returns `true` if the model stopped naturally (no limits hit)."
            },
            {
              "name": "::generate_steps",
              "line": 261,
              "signature": "pub async fn generate_steps(\n    model: &dyn LanguageModel,\n    initial_messages: Vec<ModelMessage>,\n    tools: &[ToolDefinition],\n    options: &GenerateOptions,\n    stop: StopCondition,\n) -> Result<StepResult, ForgeGenerateError>;",
              "documentation": "Runs multi-step generation until a stop condition is met.\n\nEach step calls `LanguageModel::generate()`, appends the model's response\nto the conversation, and checks the stop condition. Generation continues\nuntil the stop condition fires or the model produces a response without\ntool calls (natural completion).\n\n# ANVIL Spec \u00a76.1\n\nImplements the tool loop pattern from the cognitive interface specification.\n\n# Arguments\n\n* `model` - The language model to use.\n* `initial_messages` - The starting conversation history. This is consumed and\n  extended with each step's response.\n* `tools` - Available tool definitions.\n* `options` - Generation options applied to each step.\n* `stop` - The stop condition that terminates generation.\n\n# Returns\n\nA [`StepResult`] containing all step results, cumulative usage, and stop reason.\n\n# Errors\n\n* [`ForgeGenerateError::ModelError`] \u2014 if any step's model call fails.\n* [`ForgeGenerateError::StepLimitReached`] \u2014 if the maximum step limit is reached\n  (only when using `StopCondition::MaxSteps`).\n\n# Examples\n\n```no_run\nuse forge_core::config::GenerateOptions;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::model::LanguageModel;\nuse forge_generate::step::{generate_steps, StopCondition};\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![\n        ModelMessage::text(Role::User, \"What is 2+2?\"),\n    ];\n    let result = generate_steps(\n        model, messages, &[], &GenerateOptions::default(),\n        StopCondition::MaxSteps(3),\n    ).await;\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-generate/src/stream.rs",
          "sha256": "41e588929ce3c918bdb009dfc7c9b89b452d1dbb93a1e8ff5ee501e52f8a7c11",
          "artifactSha256": "da7cfa4b333bfb83c6d0cb01fb49f137cb8907d33281a7ffb6420747bfcb014b",
          "url": "/reference/source/forge-rs/crates/forge-generate/src/stream.rs.txt",
          "declarations": [
            {
              "name": "::TextStreamResult",
              "line": 77,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TextStreamResult {\n\n}",
              "documentation": "The result of a [`stream_text()`] call.\n\nHolds all streamed chunks received from the model and provides accessors\nfor assembling the full text, inspecting individual chunks, and retrieving\nusage statistics from the terminal `Done` chunk.\n\n# ANVIL Spec \u00a76.1\n\nStreaming results must include the full set of chunks, final usage, and\nfinish reason.\n\n# Examples\n\n```\nuse forge_core::output::{StreamChunk, FinishReason, Usage};\nuse forge_generate::TextStreamResult;\n\nlet chunks = vec![\n    StreamChunk::text_delta(\"Hello\"),\n    StreamChunk::text_delta(\", world!\"),\n    StreamChunk::done(FinishReason::Stop, Usage { prompt_tokens: 5, completion_tokens: 3, total_tokens: 8 }),\n];\nlet result = TextStreamResult::new(chunks);\nassert_eq!(result.full_text(), \"Hello, world!\");\nassert_eq!(result.chunk_count(), 3);\n```"
            },
            {
              "name": "::TextStreamResult::new",
              "line": 88,
              "signature": "pub fn new(chunks: Vec<StreamChunk>) -> Self;",
              "documentation": "Creates a new `TextStreamResult` from received chunks.\n\n# Arguments\n\n* `chunks` - The complete set of stream chunks received from the model."
            },
            {
              "name": "::TextStreamResult::full_text",
              "line": 109,
              "signature": "pub fn full_text(&self) -> String;",
              "documentation": "Assembles and returns the full text from all text delta chunks.\n\nConcatenates the text content of every `TextDelta` chunk in order.\nNon-text chunks (tool call deltas, done markers) are skipped.\n\n# Examples\n\n```\nuse forge_core::output::{StreamChunk, FinishReason, Usage};\nuse forge_generate::TextStreamResult;\n\nlet result = TextStreamResult::new(vec![\n    StreamChunk::text_delta(\"Hello\"),\n    StreamChunk::text_delta(\" there\"),\n]);\nassert_eq!(result.full_text(), \"Hello there\");\n```"
            },
            {
              "name": "::TextStreamResult::chunks",
              "line": 124,
              "signature": "pub fn chunks(&self) -> &[StreamChunk];",
              "documentation": "Returns a reference to the received chunks.\n\n# Returns\n\nA slice of all [`StreamChunk`] values in the order they were received."
            },
            {
              "name": "::TextStreamResult::chunk_count",
              "line": 129,
              "signature": "pub fn chunk_count(&self) -> usize;",
              "documentation": "Returns the total number of received chunks."
            },
            {
              "name": "::TextStreamResult::usage",
              "line": 141,
              "signature": "pub fn usage(&self) -> Usage;",
              "documentation": "Returns the usage statistics from the terminal `Done` chunk.\n\nIf no `Done` chunk is present (e.g., the stream was interrupted),\nreturns [`Usage::zero()`].\n\n# Returns\n\nA [`Usage`] struct with prompt, completion, and total token counts."
            },
            {
              "name": "::TextStreamResult::finish_reason",
              "line": 157,
              "signature": "pub fn finish_reason(&self) -> Option<FinishReason>;",
              "documentation": "Returns the finish reason from the terminal `Done` chunk.\n\nIf no `Done` chunk is present, returns `None`.\n\n# Returns\n\nThe [`FinishReason`] from the terminal chunk, if present."
            },
            {
              "name": "::TextStreamResult::is_complete",
              "line": 167,
              "signature": "pub fn is_complete(&self) -> bool;",
              "documentation": "Returns `true` if the stream completed (a `Done` chunk was received)."
            },
            {
              "name": "::stream_text",
              "line": 232,
              "signature": "pub async fn stream_text(\n    model: &dyn LanguageModel,\n    messages: &[ModelMessage],\n    tools: &[ToolDefinition],\n    options: &GenerateOptions,\n) -> Result<TextStreamResult, ForgeGenerateError>;",
              "documentation": "Streams a text response from a language model.\n\nSends the conversation history and available tools to the model, receives\nthe streamed response as chunks, and wraps the result in a [`TextStreamResult`].\n\n# Buffering\n\nThis call drives the underlying [`stream_text_chunks()`] to completion\nand collects every `Ok` item into a `Vec<StreamChunk>` before returning.\nMid-stream errors are silently dropped \u2014 to observe them, use\n[`stream_text_chunks()`] directly.\n\nFor true per-token UX, prefer [`stream_text_chunks()`].\n\n# ANVIL Spec \u00a76.1\n\nImplements the `infer_stream()` operation defined by the ANVIL cognitive interface.\n\n# Arguments\n\n* `model` - The language model to use for streaming generation.\n* `messages` - The conversation history (system, user, assistant, tool messages).\n* `tools` - Available tool definitions the model may call. Pass an empty slice\n  if no tools are available.\n* `options` - Generation options (temperature, max_tokens, etc.).\n\n# Returns\n\nA [`TextStreamResult`] holding all received chunks, with accessors for the\nassembled text, individual chunks, usage, and finish reason.\n\n# Errors\n\n* [`ForgeGenerateError::ModelError`] \u2014 if the underlying model stream call fails.\n* [`ForgeGenerateError::StreamInterrupted`] \u2014 if the stream completes without\n  a terminal `Done` chunk.\n\n# Examples\n\n```no_run\nuse forge_core::config::GenerateOptions;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::model::LanguageModel;\nuse forge_generate::stream_text;\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![\n        ModelMessage::text(Role::User, \"Tell me a joke.\"),\n    ];\n    let result = stream_text(model, &messages, &[], &GenerateOptions::default()).await;\n    if let Ok(r) = result {\n        for chunk in r.chunks() {\n            if let Some(text) = chunk.as_text() {\n                print!(\"{text}\");\n            }\n        }\n        println!();\n    }\n}\n```"
            },
            {
              "name": "::stream_text_chunks",
              "line": 331,
              "signature": "pub async fn stream_text_chunks(\n    model: &dyn LanguageModel,\n    messages: &[ModelMessage],\n    tools: &[ToolDefinition],\n    options: &GenerateOptions,\n) -> Result<ChunkStream<'static>, ForgeGenerateError>;",
              "documentation": "Streams a text response and returns the underlying [`ChunkStream`] directly.\n\n**Per-token streaming.** Unlike [`stream_text`], this function does not\ncollect the response into a `Vec`. Each item resolves as soon as the\nupstream provider yields the corresponding chunk on the wire.\n\nUse this when you want to render text as it arrives \u2014 TUIs, live\ndashboards, the harness ecosystem. Use [`stream_text`] when you only\nneed the final assembled text and want a simple `TextStreamResult`.\n\n# Errors\n\n- Outer `Result` returns `Err` for connect-time failures (auth, malformed\n  request, non-2xx status).\n- Per-item `Err` for mid-stream failures (frame read, SSE decode, JSON\n  parse). Caller decides whether to break or recover.\n\n(RFC 0001 / F-6 / F-7.)\n\n# Examples\n\n```no_run\nuse forge_core::config::GenerateOptions;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::model::LanguageModel;\nuse forge_generate::stream_text_chunks;\nuse futures_util::StreamExt;\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![ModelMessage::text(Role::User, \"Tell me a joke.\")];\n    if let Ok(mut stream) = stream_text_chunks(model, &messages, &[], &GenerateOptions::default()).await {\n        while let Some(item) = stream.next().await {\n            if let Ok(chunk) = item {\n                if let Some(text) = chunk.as_text() {\n                    print!(\"{text}\");\n                }\n            }\n        }\n        println!();\n    }\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-generate/src/text.rs",
          "sha256": "0599fd394cf3140864002d8369ff409a85e365acf957c8e7b3186b6d8d2e8d28",
          "artifactSha256": "f6f6db2893c660e08837464a94e89e443310e0f79c8c8f5ef399fbd7b6a1896d",
          "url": "/reference/source/forge-rs/crates/forge-generate/src/text.rs.txt",
          "declarations": [
            {
              "name": "::GenerateTextResult",
              "line": 64,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct GenerateTextResult {\n\n}",
              "documentation": "The result of a [`generate_text()`] call.\n\nWraps the raw [`GenerateResult`] from the model with convenience accessors\nfor common fields (text content, usage statistics, finish reason).\n\n# ANVIL Spec \u00a76.1\n\nThe cognitive interface `infer()` result must include the generated content,\ntoken usage, and finish reason.\n\n# Examples\n\n```\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::output::{FinishReason, GenerateResult, Usage};\nuse forge_generate::GenerateTextResult;\n\nlet inner = GenerateResult {\n    message: ModelMessage::text(Role::Assistant, \"Paris is the capital.\"),\n    finish_reason: FinishReason::Stop,\n    usage: Usage { prompt_tokens: 12, completion_tokens: 6, total_tokens: 18 },\n};\nlet result = GenerateTextResult::new(inner);\nassert_eq!(result.text(), \"Paris is the capital.\");\nassert!(result.finish_reason().is_complete());\n```"
            },
            {
              "name": "::GenerateTextResult::new",
              "line": 75,
              "signature": "pub fn new(inner: GenerateResult) -> Self;",
              "documentation": "Creates a new `GenerateTextResult` wrapping a `GenerateResult`.\n\n# Arguments\n\n* `inner` - The raw result from `LanguageModel::generate()`."
            },
            {
              "name": "::GenerateTextResult::text",
              "line": 98,
              "signature": "pub fn text(&self) -> String;",
              "documentation": "Returns the generated text content.\n\nConcatenates all text parts from the response message. Returns an\nempty string if the response contains no text parts (e.g., only tool calls).\n\n# Examples\n\n```\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::output::{FinishReason, GenerateResult, Usage};\nuse forge_generate::GenerateTextResult;\n\nlet result = GenerateTextResult::new(GenerateResult {\n    message: ModelMessage::text(Role::Assistant, \"Hello!\"),\n    finish_reason: FinishReason::Stop,\n    usage: Usage::zero(),\n});\nassert_eq!(result.text(), \"Hello!\");\n```"
            },
            {
              "name": "::GenerateTextResult::usage",
              "line": 107,
              "signature": "pub fn usage(&self) -> &Usage;",
              "documentation": "Returns the token usage statistics.\n\n# Returns\n\nA [`Usage`] struct with prompt, completion, and total token counts."
            },
            {
              "name": "::GenerateTextResult::finish_reason",
              "line": 117,
              "signature": "pub fn finish_reason(&self) -> FinishReason;",
              "documentation": "Returns why generation stopped.\n\n# Returns\n\nA [`FinishReason`] indicating whether the model stopped naturally,\nhit a token limit, requested tool calls, etc."
            },
            {
              "name": "::GenerateTextResult::message",
              "line": 124,
              "signature": "pub fn message(&self) -> &ModelMessage;",
              "documentation": "Returns the full response message from the model.\n\nUse this when you need access to multi-part content (e.g., text + tool calls)."
            },
            {
              "name": "::GenerateTextResult::has_tool_calls",
              "line": 129,
              "signature": "pub fn has_tool_calls(&self) -> bool;",
              "documentation": "Returns `true` if the response contains tool call requests."
            },
            {
              "name": "::GenerateTextResult::into_inner",
              "line": 134,
              "signature": "pub fn into_inner(self) -> GenerateResult;",
              "documentation": "Consumes this result and returns the underlying [`GenerateResult`]."
            },
            {
              "name": "::generate_text",
              "line": 187,
              "signature": "pub async fn generate_text(\n    model: &dyn LanguageModel,\n    messages: &[ModelMessage],\n    tools: &[ToolDefinition],\n    options: &GenerateOptions,\n) -> Result<GenerateTextResult, ForgeGenerateError>;",
              "documentation": "Generates a complete text response from a language model.\n\nThis is the primary entry point for buffered (non-streaming) inference. It\nsends the conversation history and available tools to the model, waits for\nthe complete response, and returns it wrapped in a [`GenerateTextResult`].\n\n# ANVIL Spec \u00a76.1\n\nImplements the `infer()` operation defined by the ANVIL cognitive interface.\n\n# Arguments\n\n* `model` - The language model to use for generation.\n* `messages` - The conversation history (system, user, assistant, tool messages).\n* `tools` - Available tool definitions the model may call. Pass an empty slice\n  if no tools are available.\n* `options` - Generation options (temperature, max_tokens, etc.).\n\n# Returns\n\nA [`GenerateTextResult`] containing the model's response, usage statistics,\nand finish reason.\n\n# Errors\n\n* [`ForgeGenerateError::ModelError`] \u2014 if the underlying model call fails.\n* [`ForgeGenerateError::NoResponse`] \u2014 if the model returns empty content.\n\n# Examples\n\n```no_run\nuse forge_core::config::GenerateOptions;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::model::LanguageModel;\nuse forge_generate::generate_text;\n\nasync fn example(model: &dyn LanguageModel) {\n    let messages = vec![\n        ModelMessage::text(Role::System, \"You are a helpful assistant.\"),\n        ModelMessage::text(Role::User, \"What is 2+2?\"),\n    ];\n    let result = generate_text(model, &messages, &[], &GenerateOptions::default()).await;\n    match result {\n        Ok(r) => println!(\"Response: {}\", r.text()),\n        Err(e) => eprintln!(\"Generation failed: {e}\"),\n    }\n}\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-tool",
      "language": "rust",
      "version": "0.2.0",
      "description": "Tool definition, execution, approval, and registry for the Forge SDK",
      "manifest": "forge-rs/crates/forge-tool/Cargo.toml",
      "manifestSha256": "bb4691c4cdaa0e79c73825a4e85faafa7a282ed01096022ea9c99a9110d4b77f",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-tool",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-tool/src/approval.rs",
          "sha256": "7fdf558c438c98f1e0f367cc48bb461c71f0991c80a8cb5ef04edf31249ec513",
          "artifactSha256": "9866caa437da1d60534cdebaa890bd01cc75ff8fc056382cfa3aee75fd2b64e8",
          "url": "/reference/source/forge-rs/crates/forge-tool/src/approval.rs.txt",
          "declarations": [
            {
              "name": "::ApprovalHandler",
              "line": 87,
              "signature": "#[async_trait]\npub trait ApprovalHandler: Send + Sync {\n    /// Checks whether a tool call should be approved, denied, or modified.\n    ///\n    /// # Arguments\n    ///\n    /// * `call` - The tool call to evaluate.\n    /// * `tier` - The tool's tier classification, which may influence the decision.\n    ///\n    /// # Returns\n    ///\n    /// A [`ToolApproval`] indicating the decision:\n    /// - [`ToolApproval::Approve`] -- proceed with execution as-is.\n    /// - [`ToolApproval::Deny`] -- reject the call with a reason.\n    /// - [`ToolApproval::Modify`] -- approve but with modified arguments.\n    async fn check(&self, call: &ToolCall, tier: ToolTier) -> ToolApproval;\n}",
              "documentation": "Trait for tool approval handlers.\n\nImplementors decide whether a tool call should proceed, be denied, or be\nmodified before execution. The approval handler is invoked after schema\nvalidation but before execution.\n\n# ANVIL Spec SS8.6\n\nThe approval step is mandatory. Skipping it is forbidden (except in\nlegacy mode, handled at a higher layer in `forge-agent`).\n\n# Thread Safety\n\nApproval handlers must be `Send + Sync` because they are shared across\nasync tasks.\n\n# Examples\n\n```\nuse async_trait::async_trait;\nuse forge_tool::approval::ApprovalHandler;\nuse forge_core::tool::{ToolCall, ToolTier, ToolApproval};\n\nstruct AllowList {\n    allowed: Vec<String>,\n}\n\n#[async_trait]\nimpl ApprovalHandler for AllowList {\n    async fn check(&self, call: &ToolCall, _tier: ToolTier) -> ToolApproval {\n        if self.allowed.contains(&call.name) {\n            ToolApproval::Approve\n        } else {\n            ToolApproval::Deny {\n                reason: format!(\"tool '{}' not in allow list\", call.name),\n            }\n        }\n    }\n}\n```"
            },
            {
              "name": "::AutoApprove",
              "line": 133,
              "signature": "pub struct AutoApprove;",
              "documentation": "An approval handler that always approves tool calls.\n\nThis is the simplest approval handler. It approves every call regardless\nof tool name, tier, or arguments. Useful for development, testing, and\nscenarios where all tools are pre-authorized.\n\n# Security Consideration\n\nUsing `AutoApprove` in production means every tool call is permitted.\nFor production use with Host-tier tools, prefer [`TierBasedApproval`]\nor a custom handler that checks Arsenal ACTs.\n\n# Examples\n\n```\nuse forge_tool::approval::{ApprovalHandler, AutoApprove};\nuse forge_core::tool::{ToolCall, ToolTier, ToolApproval};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet call = ToolCall {\n    id: \"c1\".to_string(),\n    name: \"dangerous_tool\".to_string(),\n    arguments: serde_json::json!({}),\n};\n\nlet approval = AutoApprove.check(&call, ToolTier::External).await;\nassert_eq!(approval, ToolApproval::Approve);\n# });\n```"
            },
            {
              "name": "::DenyAll",
              "line": 181,
              "signature": "pub struct DenyAll {\n\n}",
              "documentation": "An approval handler that always denies tool calls with a configured reason.\n\nUseful for testing denial flows, maintenance mode, and as a fallback\nwhen no authorization context is available.\n\n# Examples\n\n```\nuse forge_tool::approval::{ApprovalHandler, DenyAll};\nuse forge_core::tool::{ToolCall, ToolTier, ToolApproval};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet deny = DenyAll::new(\"system under maintenance\");\n\nlet call = ToolCall {\n    id: \"c1\".to_string(),\n    name: \"any_tool\".to_string(),\n    arguments: serde_json::json!({}),\n};\n\nlet approval = deny.check(&call, ToolTier::Platform).await;\nmatch approval {\n    ToolApproval::Deny { reason } => {\n        assert!(reason.contains(\"maintenance\"));\n    }\n    _ => panic!(\"expected Deny\"),\n}\n# });\n```"
            },
            {
              "name": "::DenyAll::new",
              "line": 204,
              "signature": "pub fn new(reason: impl Into<String>) -> Self;",
              "documentation": "Creates a new `DenyAll` handler with the given denial reason.\n\n# Arguments\n\n* `reason` - The reason included in every [`ToolApproval::Deny`] response.\n\n# Returns\n\nA new `DenyAll` handler.\n\n# Examples\n\n```\nuse forge_tool::approval::DenyAll;\n\nlet deny = DenyAll::new(\"no tools allowed\");\n```"
            },
            {
              "name": "::TierBasedApproval",
              "line": 274,
              "signature": "pub struct TierBasedApproval;",
              "documentation": "A tier-based approval handler that auto-approves Platform and Embedded tools\nbut denies Host-tier tools.\n\nThis is the default ANVIL-compliant approval policy:\n\n| Tier | Decision | Rationale |\n|------|----------|-----------|\n| Platform (1) | Approve | Always available, sandbox-confined |\n| Host (2) | Deny | Requires Arsenal ACT authorization |\n| Embedded (3) | Approve | Module-scoped, sandbox-confined |\n\n# ANVIL Spec SS8.1\n\nHost-tier tools execute outside the sandbox and have access to external\nresources (network, databases, APIs). They MUST be authorized via Arsenal\nACTs. Without an ACT check integration (provided by `forge-auth`), this\nhandler conservatively denies all Host-tier calls.\n\n# Examples\n\n```\nuse forge_tool::approval::{ApprovalHandler, TierBasedApproval};\nuse forge_core::tool::{ToolCall, ToolTier, ToolApproval};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet call = ToolCall {\n    id: \"c1\".to_string(),\n    name: \"clock\".to_string(),\n    arguments: serde_json::json!({}),\n};\n\n// Platform tools are auto-approved\nlet approval = TierBasedApproval.check(&call, ToolTier::Platform).await;\nassert_eq!(approval, ToolApproval::Approve);\n\n// Host tools are denied (no ACT context available)\nlet approval = TierBasedApproval.check(&call, ToolTier::External).await;\nassert!(matches!(approval, ToolApproval::Deny { .. }));\n\n// Embedded tools are auto-approved\nlet approval = TierBasedApproval.check(&call, ToolTier::Embedded).await;\nassert_eq!(approval, ToolApproval::Approve);\n# });\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-tool/src/definition.rs",
          "sha256": "40b6baeaf79042a40cef1a02c8946cd6583bdd3cccd97ae83f93534bf003cebe",
          "artifactSha256": "382bf919c78ad5da34424b40249fef9259a98834f0cdcc76cdf69c328eea1031",
          "url": "/reference/source/forge-rs/crates/forge-tool/src/definition.rs.txt",
          "declarations": [
            {
              "name": "::ToolBuilder",
              "line": 69,
              "signature": "pub struct ToolBuilder {\n\n}",
              "documentation": "A fluent builder for constructing tool definitions with optional executors.\n\n`ToolBuilder` pairs a [`ToolDefinition`] with an optional [`ToolExecutor`],\nproducing both in a single build step. This ensures that tool metadata and\nimplementation stay in sync.\n\n# ANVIL Spec SS8.2\n\nEvery tool has a unique name, human-readable description, parameter schema,\nand tier classification. The builder enforces that at minimum a name is provided.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\nuse forge_core::tool::ToolTier;\nuse forge_core::schema::JsonSchema;\n\n// Build a tool definition without an executor\nlet (def, executor) = ToolBuilder::new(\"clock\")\n    .description(\"Returns the current UTC time\")\n    .tier(ToolTier::Platform)\n    .build();\n\nassert_eq!(def.name(), \"clock\");\nassert!(executor.is_none());\n```"
            },
            {
              "name": "::ToolBuilder::new",
              "line": 103,
              "signature": "pub fn new(name: impl Into<String>) -> Self;",
              "documentation": "Creates a new `ToolBuilder` with the given tool name.\n\nThe builder starts with sensible defaults:\n- Empty description\n- [`ToolTier::External`] (the most restrictive default)\n- An empty object parameter schema\n- No executor\n\n# Arguments\n\n* `name` - The unique tool name. Must be non-empty and unique within a registry.\n\n# Returns\n\nA new `ToolBuilder` ready for configuration.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\n\nlet builder = ToolBuilder::new(\"my_tool\");\nlet (def, _) = builder.build();\nassert_eq!(def.name(), \"my_tool\");\n```"
            },
            {
              "name": "::ToolBuilder::description",
              "line": 136,
              "signature": "pub fn description(mut self, description: impl Into<String>) -> Self;",
              "documentation": "Sets the human-readable description shown to the model.\n\nThe description helps LLMs understand when and how to use the tool.\nIt should be concise but informative.\n\n# Arguments\n\n* `description` - A human-readable description of the tool's purpose.\n\n# Returns\n\nThe builder for method chaining.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\n\nlet (def, _) = ToolBuilder::new(\"search\")\n    .description(\"Search the web for information\")\n    .build();\nassert_eq!(def.description(), \"Search the web for information\");\n```"
            },
            {
              "name": "::ToolBuilder::tier",
              "line": 170,
              "signature": "pub fn tier(mut self, tier: ToolTier) -> Self;",
              "documentation": "Sets the tool tier classification.\n\n# ANVIL Spec SS8.1\n\n| Tier | Name | Location | Auth |\n|------|------|----------|------|\n| 1 | Platform | Inside sandbox | Always available |\n| 2 | Host | Outside sandbox | Arsenal ACT required |\n| 3 | Embedded | Inside WASM module | Module-scoped |\n\n# Arguments\n\n* `tier` - The tier classification for this tool.\n\n# Returns\n\nThe builder for method chaining.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\nuse forge_core::tool::ToolTier;\n\nlet (def, _) = ToolBuilder::new(\"clock\")\n    .tier(ToolTier::Platform)\n    .build();\nassert_eq!(def.tier(), ToolTier::Platform);\n```"
            },
            {
              "name": "::ToolBuilder::parameters",
              "line": 203,
              "signature": "pub fn parameters(mut self, schema: JsonSchema) -> Self;",
              "documentation": "Sets the JSON Schema for the tool's parameters.\n\nThe schema defines what arguments the tool accepts. It is used for\nvalidation before execution and is passed to the LLM for structured\ntool calling.\n\n# Arguments\n\n* `schema` - A [`JsonSchema`] defining the tool's parameter shape.\n\n# Returns\n\nThe builder for method chaining.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\nuse forge_core::schema::JsonSchema;\n\nlet (def, _) = ToolBuilder::new(\"greet\")\n    .parameters(\n        JsonSchema::object()\n            .property(\"name\", JsonSchema::string())\n            .required(\"name\"),\n    )\n    .build();\n```"
            },
            {
              "name": "::ToolBuilder::executor",
              "line": 244,
              "signature": "pub fn executor(mut self, executor: Arc<dyn ToolExecutor>) -> Self;",
              "documentation": "Attaches a [`ToolExecutor`] implementation to this tool.\n\nThe executor is responsible for the actual tool logic when the tool\nis invoked by an agent.\n\n# Arguments\n\n* `executor` - An implementation of [`ToolExecutor`].\n\n# Returns\n\nThe builder for method chaining.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet executor = FnToolExecutor::new(\"echo\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: call.arguments.to_string(),\n        is_error: false,\n    })\n});\n\nlet (def, exec) = ToolBuilder::new(\"echo\")\n    .executor(Arc::new(executor))\n    .build();\nassert!(exec.is_some());\n```"
            },
            {
              "name": "::ToolBuilder::handler",
              "line": 282,
              "signature": "pub fn handler<F>(self, handler: F) -> Self\n    where\n        F: Fn(\n                &forge_core::tool::ToolCall,\n            ) -> Result<forge_core::tool::ToolResult, crate::error::ForgeToolError>\n            + Send\n            + Sync\n            + 'static,;",
              "documentation": "Attaches a synchronous closure as the tool executor.\n\nThis is a convenience method that wraps the closure in a [`FnToolExecutor`].\nFor async executors, use [`executor`](Self::executor) with a custom\n[`ToolExecutor`] implementation.\n\n# Arguments\n\n* `handler` - A closure that takes a `&ToolCall` and returns a `Result<ToolResult, ForgeToolError>`.\n\n# Returns\n\nThe builder for method chaining.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\nuse forge_core::tool::{ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\n\nlet (def, exec) = ToolBuilder::new(\"echo\")\n    .handler(|call: &ToolCall| {\n        Ok(ToolResult {\n            tool_call_id: call.id.clone(),\n            name: call.name.clone(),\n            content: call.arguments.to_string(),\n            is_error: false,\n        })\n    })\n    .build();\nassert!(exec.is_some());\n```"
            },
            {
              "name": "::ToolBuilder::build",
              "line": 323,
              "signature": "pub fn build(self) -> (ToolDefinition, Option<Arc<dyn ToolExecutor>>);",
              "documentation": "Builds the [`ToolDefinition`] and optional [`ToolExecutor`].\n\nConsumes the builder and returns a tuple of the definition and the\nexecutor (if one was attached). The definition uses `forge-core`'s\n[`ToolDefinition::builder`] internally to ensure type consistency.\n\n# Returns\n\nA tuple of `(ToolDefinition, Option<Arc<dyn ToolExecutor>>)`.\n\n# Examples\n\n```\nuse forge_tool::definition::ToolBuilder;\nuse forge_core::tool::ToolTier;\n\nlet (def, executor) = ToolBuilder::new(\"clock\")\n    .description(\"Get current UTC time\")\n    .tier(ToolTier::Platform)\n    .build();\n\nassert_eq!(def.name(), \"clock\");\nassert!(executor.is_none());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-tool/src/error.rs",
          "sha256": "d9e1be312229b153fe0d4b430038f70412fc469adaec34a7a227a245cd758e7b",
          "artifactSha256": "17eeda2aef5826e6a88739149a326c2054011ada1e07f8017a90d4317275f352",
          "url": "/reference/source/forge-rs/crates/forge-tool/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeToolError",
              "line": 31,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeToolError {\n    /// A tool was looked up by name but does not exist in the registry.\n    ///\n    /// # Remediation\n    ///\n    /// Register the tool with [`crate::registry::ToolRegistry::register`] before use.\n    #[error(\"tool '{name}' not found in registry; register it with ToolRegistry::register() before invoking\")]\n    ToolNotFound {\n        /// The tool name that was looked up.\n        name: String,\n    },\n\n    /// A tool execution failed at runtime.\n    ///\n    /// This wraps errors produced by [`crate::execution::ToolExecutor`] implementations.\n    #[error(\"tool '{name}' execution failed: {reason}\")]\n    ExecutionFailed {\n        /// The tool that failed.\n        name: String,\n        /// What went wrong during execution.\n        reason: String,\n    },\n\n    /// A tool invocation was denied by the approval handler.\n    ///\n    /// See ANVIL Spec SS8.6 -- the approval step is mandatory in the tool execution lifecycle.\n    #[error(\"tool '{name}' invocation denied by approval handler: {reason}\")]\n    ApprovalDenied {\n        /// The tool that was denied.\n        name: String,\n        /// Why the invocation was denied.\n        reason: String,\n    },\n\n    /// Schema validation failed for tool arguments.\n    ///\n    /// The arguments provided to a tool call did not conform to the tool's\n    /// declared parameter schema.\n    #[error(\"schema validation failed for tool '{name}' at path '{path}': {reason}\")]\n    SchemaValidation {\n        /// The tool whose schema was violated.\n        name: String,\n        /// JSON pointer path to the failing field.\n        path: String,\n        /// Human-readable description of what was expected.\n        reason: String,\n    },\n\n    /// A tool was registered or invoked with an incorrect tier classification.\n    ///\n    /// See ANVIL Spec SS8.1--8.4 -- tool tier classification is immutable.\n    #[error(\n        \"tool '{name}' has invalid tier: expected {expected}, got {actual} (see ANVIL Spec SS8.1)\"\n    )]\n    InvalidTier {\n        /// The tool whose tier is mismatched.\n        name: String,\n        /// The expected tier classification.\n        expected: String,\n        /// The actual tier classification provided.\n        actual: String,\n    },\n\n    /// A registry operation failed (e.g., duplicate registration, capacity exceeded).\n    #[error(\"tool registry error: {reason}\")]\n    RegistryError {\n        /// What went wrong with the registry operation.\n        reason: String,\n    },\n}",
              "documentation": "Errors that can occur during tool definition, execution, approval, and registry operations.\n\nEvery variant includes actionable context: what failed, why, and what the\ndeveloper should check.\n\n# Examples\n\n```\nuse forge_tool::error::ForgeToolError;\n\nlet err = ForgeToolError::ToolNotFound {\n    name: \"get_weather\".to_string(),\n};\nassert!(err.to_string().contains(\"get_weather\"));\nassert!(err.to_string().contains(\"not found\"));\n```"
            },
            {
              "name": "::ForgeToolResult",
              "line": 103,
              "signature": "pub type ForgeToolResult<T> = Result<T, ForgeToolError>;",
              "documentation": "A specialized `Result` type for `forge-tool` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-tool/src/execution.rs",
          "sha256": "a9ddfd4dfdc41b74c859fd7f2c5371354d47b000ed4c66017475e94ba72e5214",
          "artifactSha256": "55f126f5df90c1051a313fce8c1b1dbdcbd6281fb301069cc1ae6fdabb273d19",
          "url": "/reference/source/forge-rs/crates/forge-tool/src/execution.rs.txt",
          "declarations": [
            {
              "name": "::ToolExecutor",
              "line": 88,
              "signature": "#[async_trait]\npub trait ToolExecutor: Send + Sync {\n    /// Executes the tool with the given call arguments.\n    ///\n    /// # Arguments\n    ///\n    /// * `call` - The tool call containing the call ID, tool name, and JSON arguments.\n    ///\n    /// # Returns\n    ///\n    /// A [`ToolResult`] with the execution output on success, or a\n    /// [`ForgeToolError::ExecutionFailed`] on failure.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeToolError::ExecutionFailed`] if the tool logic fails for\n    /// any reason (network timeout, invalid state, computation error, etc.).\n    async fn execute(&self, call: &ToolCall) -> Result<ToolResult, ForgeToolError>;\n\n    /// Returns the name of the tool this executor handles.\n    ///\n    /// This must match the [`ToolDefinition::name`](forge_core::tool::ToolDefinition::name)\n    /// of the corresponding tool definition.\n    fn name(&self) -> &str;\n}",
              "documentation": "Trait for tool execution implementations.\n\nImplementors provide the actual logic that runs when an agent invokes a tool.\nEach executor is associated with a single tool by name.\n\n# ANVIL Spec SS8.5\n\nThe executor receives a validated, approved [`ToolCall`] and returns a\n[`ToolResult`]. The executor MUST NOT perform its own authorization checks --\nthat is the approval handler's responsibility.\n\n# Thread Safety\n\nExecutors must be `Send + Sync` because they may be shared across async\ntasks and stored in `Arc`.\n\n# Examples\n\n```\nuse async_trait::async_trait;\nuse forge_tool::execution::ToolExecutor;\nuse forge_core::tool::{ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\n\nstruct ClockExecutor;\n\n#[async_trait]\nimpl ToolExecutor for ClockExecutor {\n    async fn execute(&self, call: &ToolCall) -> Result<ToolResult, ForgeToolError> {\n        Ok(ToolResult {\n            tool_call_id: call.id.clone(),\n            name: call.name.clone(),\n            content: \"2026-02-18T12:00:00Z\".to_string(),\n            is_error: false,\n        })\n    }\n\n    fn name(&self) -> &str {\n        \"clock\"\n    }\n}\n```"
            },
            {
              "name": "::FnToolExecutor",
              "line": 142,
              "signature": "pub struct FnToolExecutor<F>\nwhere\n    F: Fn(&ToolCall) -> Result<ToolResult, ForgeToolError> + Send + Sync + 'static, {\n\n}",
              "documentation": "A tool executor that wraps a synchronous closure.\n\n`FnToolExecutor` allows defining simple tools as closures without\nimplementing the full [`ToolExecutor`] trait. The closure is called\nfrom within an async context but runs synchronously.\n\n# Thread Safety\n\nThe closure must be `Send + Sync + 'static` because the executor\nmay be shared across threads via `Arc`.\n\n# Examples\n\n```\nuse forge_tool::execution::{FnToolExecutor, ToolExecutor};\nuse forge_core::tool::{ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\n\nlet executor = FnToolExecutor::new(\"echo\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: call.arguments.to_string(),\n        is_error: false,\n    })\n});\n\nassert_eq!(executor.name(), \"echo\");\n```"
            },
            {
              "name": "::FnToolExecutor<F>::new",
              "line": 185,
              "signature": "pub fn new(name: impl Into<String>, handler: F) -> Self;",
              "documentation": "Creates a new `FnToolExecutor` wrapping the given closure.\n\n# Arguments\n\n* `name` - The tool name this executor handles. Must match the corresponding\n  [`ToolDefinition`](forge_core::tool::ToolDefinition) name.\n* `handler` - A synchronous closure that processes tool calls.\n\n# Returns\n\nA new `FnToolExecutor` ready to be registered in a [`ToolRegistry`](crate::registry::ToolRegistry).\n\n# Examples\n\n```\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\n\nlet executor = FnToolExecutor::new(\"add\", |call: &ToolCall| {\n    // Parse arguments, compute, return result\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: \"42\".to_string(),\n        is_error: false,\n    })\n});\n```"
            },
            {
              "name": "::execute_tool_call",
              "line": 302,
              "signature": "pub async fn execute_tool_call(\n    call: &ToolCall,\n    definition: &forge_core::tool::ToolDefinition,\n    executor: &dyn ToolExecutor,\n    approval_handler: &dyn crate::approval::ApprovalHandler,\n) -> Result<ToolResult, ForgeToolError>;",
              "documentation": "Executes a tool call through the full pipeline: schema validation, approval, execution.\n\nThis function implements the complete ANVIL tool execution lifecycle:\n\n1. **Schema validation** -- Validates `call.arguments` against the tool's parameter schema.\n2. **Approval gate** -- Checks with the approval handler whether the call is permitted.\n3. **Execution** -- Delegates to the tool executor.\n\n# ANVIL Spec SS8.5--8.6\n\nThe execution pipeline is mandatory. Skipping the approval step is forbidden\n(except in legacy mode, which is handled at a higher layer).\n\n# Arguments\n\n* `call` - The tool call to execute.\n* `definition` - The tool definition (for schema validation and tier info).\n* `executor` - The tool executor implementation.\n* `approval_handler` - The approval handler to check before execution.\n\n# Returns\n\nA [`ToolResult`] on success.\n\n# Errors\n\n- [`ForgeToolError::SchemaValidation`] if arguments fail schema validation.\n- [`ForgeToolError::ApprovalDenied`] if the approval handler denies the call.\n- [`ForgeToolError::ExecutionFailed`] if the executor fails.\n\n# Examples\n\n```\nuse forge_tool::execution::{execute_tool_call, FnToolExecutor};\nuse forge_tool::approval::AutoApprove;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_core::schema::JsonSchema;\nuse std::sync::Arc;\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet definition = ToolDefinition::builder(\"greet\")\n    .description(\"Greet someone\")\n    .tier(ToolTier::Platform)\n    .parameters(\n        JsonSchema::object()\n            .property(\"name\", JsonSchema::string())\n            .required(\"name\"),\n    )\n    .build();\n\nlet executor = Arc::new(FnToolExecutor::new(\"greet\", |call: &ToolCall| {\n    let name = call.arguments.get(\"name\")\n        .and_then(|v| v.as_str())\n        .unwrap_or(\"world\");\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: format!(\"Hello, {name}!\"),\n        is_error: false,\n    })\n}));\n\nlet call = ToolCall {\n    id: \"call-1\".to_string(),\n    name: \"greet\".to_string(),\n    arguments: serde_json::json!({\"name\": \"Alice\"}),\n};\n\nlet result = execute_tool_call(\n    &call,\n    &definition,\n    executor.as_ref(),\n    &AutoApprove,\n).await;\n\nassert!(result.is_ok());\n# });\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-tool/src/lib.rs",
          "sha256": "fbbc99f594d837c039a89e463d04725bbdc85f269e8487b6290c4d7cac9b6453",
          "artifactSha256": "64a662c3c324539366a527eefe3cdc6326ce9fd0ffa6a21a02629dd255678dc2",
          "url": "/reference/source/forge-rs/crates/forge-tool/src/lib.rs.txt",
          "declarations": [
            {
              "name": "approval",
              "line": 112,
              "signature": "pub mod approval;",
              "documentation": "# forge-tool\n\nTool definition, execution, approval, and registry for the Forge SDK.\n\nThis crate provides the complete tool subsystem for ANVIL-compliant agents.\nIt handles tool definition with fluent builders, a pluggable execution pipeline\nwith schema validation and approval gates, tier-based classification, and a\nruntime tool registry.\n\n# ANVIL Spec Reference\n\nThis crate implements the following ANVIL specification sections:\n- SS8.1 -- Tool Classification: three-tier system (Platform, Host, Embedded).\n- SS8.2 -- Tool Definition: name, description, schema, tier.\n- SS8.3 -- Tool Registration: immutable tool registration at initialization.\n- SS8.4 -- Tier Behavior: execution context and authorization requirements.\n- SS8.5 -- Tool Execution: validation -> approval -> execution pipeline.\n- SS8.6 -- Approval Gate: mandatory approval before execution.\n\n# Architecture\n\n```text\nToolBuilder -> ToolDefinition + ToolExecutor\n                      |               |\n                      v               v\n                 ToolRegistry (stores both)\n                      |\n                      v\n           execute_tool_call()\n             1. Schema validation\n             2. ApprovalHandler::check()\n             3. ToolExecutor::execute()\n                      |\n                      v\n                  ToolResult\n```\n\n# Modules\n\n- [`definition`] -- Fluent builder for constructing tool definitions.\n- [`execution`] -- Tool executor trait and the complete execution pipeline.\n- [`approval`] -- Approval handler trait and built-in implementations.\n- [`tiers`] -- Tier classification logic and execution context.\n- [`registry`] -- Runtime tool registry for managing registered tools.\n- [`error`] -- Typed error enum for all tool operations.\n\n# Examples\n\n## Registering and executing a tool\n\n```\nuse forge_tool::definition::ToolBuilder;\nuse forge_tool::execution::{execute_tool_call, FnToolExecutor};\nuse forge_tool::approval::AutoApprove;\nuse forge_tool::registry::ToolRegistry;\nuse forge_core::tool::{ToolTier, ToolCall, ToolResult};\nuse forge_core::schema::JsonSchema;\nuse std::sync::Arc;\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\n// 1. Define a tool\nlet (definition, executor) = ToolBuilder::new(\"get_time\")\n    .description(\"Get the current UTC time\")\n    .tier(ToolTier::Platform)\n    .handler(|call: &ToolCall| {\n        Ok(ToolResult {\n            tool_call_id: call.id.clone(),\n            name: call.name.clone(),\n            content: \"2026-02-18T00:00:00Z\".to_string(),\n            is_error: false,\n        })\n    })\n    .build();\n\n// 2. Register in the registry\nlet mut registry = ToolRegistry::new();\nregistry.register(definition, executor.unwrap()).unwrap();\n\n// 3. Look up and execute\nlet call = ToolCall {\n    id: \"call-1\".to_string(),\n    name: \"get_time\".to_string(),\n    arguments: serde_json::json!({}),\n};\n\nif let Some((def, exec)) = registry.get(\"get_time\") {\n    let result = execute_tool_call(&call, def, exec.as_ref(), &AutoApprove).await;\n    assert!(result.is_ok());\n}\n# });\n```\n\n## Tier-based approval\n\n```\nuse forge_tool::tiers::{classify_tier, ExecutionContext};\nuse forge_core::tool::ToolTier;\n\n// Platform tools run in-sandbox, no auth needed\nlet cls = classify_tier(\"clock\", ToolTier::Platform);\nassert!(!cls.requires_authorization);\nassert_eq!(cls.execution_context, ExecutionContext::InSandbox);\n\n// Host tools run out-of-sandbox, auth required\nlet cls = classify_tier(\"web_browse\", ToolTier::External);\nassert!(cls.requires_authorization);\nassert_eq!(cls.execution_context, ExecutionContext::OutOfSandbox);\n```"
            },
            {
              "name": "definition",
              "line": 113,
              "signature": "pub mod definition;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 114,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "execution",
              "line": 115,
              "signature": "pub mod execution;",
              "documentation": ""
            },
            {
              "name": "registry",
              "line": 116,
              "signature": "pub mod registry;",
              "documentation": ""
            },
            {
              "name": "tiers",
              "line": 117,
              "signature": "pub mod tiers;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 120,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::approval::{ApprovalHandler, AutoApprove, DenyAll, TierBasedApproval};",
              "line": 121,
              "signature": "pub use crate::approval::{ApprovalHandler, AutoApprove, DenyAll, TierBasedApproval};",
              "documentation": ""
            },
            {
              "name": "pub use crate::definition::ToolBuilder;",
              "line": 122,
              "signature": "pub use crate::definition::ToolBuilder;",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{ForgeToolError, ForgeToolResult};",
              "line": 123,
              "signature": "pub use crate::error::{ForgeToolError, ForgeToolResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::execution::{execute_tool_call, FnToolExecutor, ToolExecutor};",
              "line": 124,
              "signature": "pub use crate::execution::{execute_tool_call, FnToolExecutor, ToolExecutor};",
              "documentation": ""
            },
            {
              "name": "pub use crate::registry::ToolRegistry;",
              "line": 125,
              "signature": "pub use crate::registry::ToolRegistry;",
              "documentation": ""
            },
            {
              "name": "pub use crate::tiers::{\n        classify_tier, execution_context_for, requires_authorization, ExecutionContext,\n        TierClassification,\n    };",
              "line": 126,
              "signature": "pub use crate::tiers::{\n        classify_tier, execution_context_for, requires_authorization, ExecutionContext,\n        TierClassification,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-tool/src/registry.rs",
          "sha256": "d05270eb3dd4169101f2ffd197f9e81b42e1cb7282d2506bd738e13a2bcf5c35",
          "artifactSha256": "08c455c90f4a1c5164dddace43e886d3c916f8092b7ae3d0cd6b709e7fc44138",
          "url": "/reference/source/forge-rs/crates/forge-tool/src/registry.rs.txt",
          "declarations": [
            {
              "name": "::ToolRegistry",
              "line": 100,
              "signature": "#[derive(Clone)]\npub struct ToolRegistry {\n\n}",
              "documentation": "A registry that maps tool names to their definitions and executors.\n\nThe registry provides:\n- **Registration** -- adding tools with definitions and executors.\n- **Lookup** -- retrieving a tool by name in O(1) time.\n- **Listing** -- enumerating all registered tools.\n\n# ANVIL Spec SS8.3\n\nTools are registered during agent initialization. Duplicate registrations\nare rejected to prevent accidental overwrites.\n\n# Thread Safety\n\nThe registry itself is not thread-safe. For concurrent access, wrap it in\n`Arc<RwLock<ToolRegistry>>` or use a concurrent map. The individual executors\nstored within are `Arc<dyn ToolExecutor>` and are safe to share.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\nassert!(registry.is_empty());\n\nlet def = ToolDefinition::builder(\"echo\")\n    .description(\"Echo back the input\")\n    .tier(ToolTier::Embedded)\n    .build();\n\nlet exec = Arc::new(FnToolExecutor::new(\"echo\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: call.arguments.to_string(),\n        is_error: false,\n    })\n}));\n\nregistry.register(def, exec).unwrap();\nassert_eq!(registry.len(), 1);\nassert!(!registry.is_empty());\n```"
            },
            {
              "name": "::ToolRegistry::new",
              "line": 121,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new, empty `ToolRegistry`.\n\n# Returns\n\nAn empty registry with no tools registered.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\n\nlet registry = ToolRegistry::new();\nassert!(registry.is_empty());\nassert_eq!(registry.len(), 0);\n```"
            },
            {
              "name": "::ToolRegistry::register",
              "line": 178,
              "signature": "pub fn register(\n        &mut self,\n        definition: ToolDefinition,\n        executor: Arc<dyn ToolExecutor>,\n    ) -> Result<(), ForgeToolError>;",
              "documentation": "Registers a tool definition and executor pair.\n\nThe tool is indexed by its name. Duplicate names are rejected with a\n[`ForgeToolError::RegistryError`] to prevent accidental overwrites.\n\n# ANVIL Spec SS8.3\n\nTools are registered during initialization and remain immutable.\n\n# Arguments\n\n* `definition` - The tool definition containing name, description, schema, and tier.\n* `executor` - The executor that handles tool calls for this tool.\n\n# Returns\n\n`Ok(())` on successful registration.\n\n# Errors\n\nReturns [`ForgeToolError::RegistryError`] if a tool with the same name is\nalready registered.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\n\nlet def = ToolDefinition::builder(\"clock\")\n    .tier(ToolTier::Platform)\n    .build();\n\nlet exec = Arc::new(FnToolExecutor::new(\"clock\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: \"ok\".to_string(),\n        is_error: false,\n    })\n}));\n\nassert!(registry.register(def.clone(), exec.clone()).is_ok());\n// Duplicate registration fails\nassert!(registry.register(def, exec).is_err());\n```"
            },
            {
              "name": "::ToolRegistry::get",
              "line": 242,
              "signature": "pub fn get(&self, name: &str) -> Option<(&ToolDefinition, &Arc<dyn ToolExecutor>)>;",
              "documentation": "Looks up a tool by name.\n\nReturns a reference to the tool's definition and executor if found.\n\n# Arguments\n\n* `name` - The tool name to look up.\n\n# Returns\n\n`Some((&ToolDefinition, &Arc<dyn ToolExecutor>))` if the tool exists,\nor `None` if not found.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\n\n// Not found before registration\nassert!(registry.get(\"clock\").is_none());\n\nlet def = ToolDefinition::builder(\"clock\")\n    .tier(ToolTier::Platform)\n    .build();\nlet exec = Arc::new(FnToolExecutor::new(\"clock\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: \"ok\".to_string(),\n        is_error: false,\n    })\n}));\nregistry.register(def, exec).unwrap();\n\n// Found after registration\nlet result = registry.get(\"clock\");\nassert!(result.is_some());\n```"
            },
            {
              "name": "::ToolRegistry::list",
              "line": 279,
              "signature": "pub fn list(&self) -> Vec<&ToolDefinition>;",
              "documentation": "Returns a list of references to all registered tool definitions.\n\nThe order is not guaranteed (based on `HashMap` iteration order).\n\n# Returns\n\nA `Vec` of references to all [`ToolDefinition`] values in the registry.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\nassert!(registry.list().is_empty());\n\nlet def = ToolDefinition::builder(\"t1\").tier(ToolTier::Platform).build();\nlet exec = Arc::new(FnToolExecutor::new(\"t1\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: String::new(),\n        is_error: false,\n    })\n}));\nregistry.register(def, exec).unwrap();\n\nassert_eq!(registry.list().len(), 1);\n```"
            },
            {
              "name": "::ToolRegistry::definitions",
              "line": 318,
              "signature": "pub fn definitions(&self) -> Vec<ToolDefinition>;",
              "documentation": "Returns cloned copies of all registered tool definitions.\n\nThis is useful when the definitions need to be serialized (e.g., for\nsending to an LLM provider as available tools).\n\n# Returns\n\nA `Vec` of cloned [`ToolDefinition`] values.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\n\nlet def = ToolDefinition::builder(\"t1\").tier(ToolTier::Platform).build();\nlet exec = Arc::new(FnToolExecutor::new(\"t1\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: String::new(),\n        is_error: false,\n    })\n}));\nregistry.register(def, exec).unwrap();\n\nlet defs = registry.definitions();\nassert_eq!(defs.len(), 1);\nassert_eq!(defs[0].name(), \"t1\");\n```"
            },
            {
              "name": "::ToolRegistry::len",
              "line": 336,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the number of registered tools.\n\n# Returns\n\nThe count of tools in the registry.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\n\nlet registry = ToolRegistry::new();\nassert_eq!(registry.len(), 0);\n```"
            },
            {
              "name": "::ToolRegistry::is_empty",
              "line": 354,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if the registry contains no tools.\n\n# Returns\n\n`true` if empty, `false` otherwise.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\n\nlet registry = ToolRegistry::new();\nassert!(registry.is_empty());\n```"
            },
            {
              "name": "::ToolRegistry::remove",
              "line": 401,
              "signature": "pub fn remove(&mut self, name: &str) -> Option<(ToolDefinition, Arc<dyn ToolExecutor>)>;",
              "documentation": "Removes a tool from the registry by name.\n\nReturns the removed definition and executor if the tool existed.\n\n# Arguments\n\n* `name` - The name of the tool to remove.\n\n# Returns\n\n`Some((ToolDefinition, Arc<dyn ToolExecutor>))` if the tool was found\nand removed, or `None` if no tool with that name existed.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\n\nlet def = ToolDefinition::builder(\"t1\").tier(ToolTier::Platform).build();\nlet exec = Arc::new(FnToolExecutor::new(\"t1\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: String::new(),\n        is_error: false,\n    })\n}));\nregistry.register(def, exec).unwrap();\nassert_eq!(registry.len(), 1);\n\nlet removed = registry.remove(\"t1\");\nassert!(removed.is_some());\nassert!(registry.is_empty());\n\n// Removing again returns None\nassert!(registry.remove(\"t1\").is_none());\n```"
            },
            {
              "name": "::ToolRegistry::contains",
              "line": 441,
              "signature": "pub fn contains(&self, name: &str) -> bool;",
              "documentation": "Checks whether a tool with the given name is registered.\n\n# Arguments\n\n* `name` - The tool name to check.\n\n# Returns\n\n`true` if a tool with that name exists in the registry.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse forge_tool::error::ForgeToolError;\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\nassert!(!registry.contains(\"clock\"));\n\nlet def = ToolDefinition::builder(\"clock\").tier(ToolTier::Platform).build();\nlet exec = Arc::new(FnToolExecutor::new(\"clock\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: String::new(),\n        is_error: false,\n    })\n}));\nregistry.register(def, exec).unwrap();\n\nassert!(registry.contains(\"clock\"));\nassert!(!registry.contains(\"other\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-tool/src/tiers.rs",
          "sha256": "370f7dec0bd5265ae0c27532ee29a14831588ea4655ab36562ddc9be9c078bdc",
          "artifactSha256": "8f200691278eddba1a64274a75035017c85a81221d509f20f0c3ad29061ee3fb",
          "url": "/reference/source/forge-rs/crates/forge-tool/src/tiers.rs.txt",
          "declarations": [
            {
              "name": "::ExecutionContext",
              "line": 51,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub enum ExecutionContext {\n    /// The tool executes inside the WASM sandbox.\n    ///\n    /// Applies to Platform (Tier 1) and Embedded (Tier 3) tools. These tools\n    /// cannot access external resources without going through host functions.\n    InSandbox,\n\n    /// The tool executes outside the WASM sandbox via host functions.\n    ///\n    /// Applies to Host (Tier 2) tools. These tools have access to external\n    /// resources and MUST be authorized via Arsenal ACTs.\n    OutOfSandbox,\n}",
              "documentation": "The execution context for a tool based on its tier classification.\n\nDetermines whether the tool runs inside the WASM sandbox or outside it\nvia host function calls.\n\n# ANVIL Spec SS8.1\n\n- `InSandbox`: Platform (Tier 1) and Embedded (Tier 3) tools run inside\n  the sandbox. They cannot access external resources directly.\n- `OutOfSandbox`: Host (Tier 2) tools run outside the sandbox via host\n  functions. They can access network, filesystem, databases, etc."
            },
            {
              "name": "::TierClassification",
              "line": 92,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct TierClassification {\n/// The name of the tool that was classified.\n\npub tool_name: String,\n/// The tool's tier classification.\n\npub tier: ToolTier,\n/// Whether this tool requires Arsenal ACT authorization before execution.\n\n///\n\n/// Only `true` for Host (Tier 2) tools.\n\npub requires_authorization: bool,\n/// The execution context (sandbox or host) for this tool.\n\npub execution_context: ExecutionContext\n}",
              "documentation": "The result of classifying a tool by its tier.\n\nContains the tier, whether authorization is required, and the execution\ncontext (sandbox or host).\n\n# Examples\n\n```\nuse forge_tool::tiers::{classify_tier, ExecutionContext};\nuse forge_core::tool::ToolTier;\n\nlet cls = classify_tier(\"db_query\", ToolTier::External);\nassert_eq!(cls.tier, ToolTier::External);\nassert!(cls.requires_authorization);\nassert_eq!(cls.execution_context, ExecutionContext::OutOfSandbox);\nassert_eq!(cls.tool_name, \"db_query\");\n```"
            },
            {
              "name": "::classify_tier",
              "line": 156,
              "signature": "pub fn classify_tier(tool_name: &str, tier: ToolTier) -> TierClassification;",
              "documentation": "Classifies a tool by its tier, returning authorization requirements and execution context.\n\nThis is the central function for the ANVIL 3-tier tool classification system.\nGiven a tool name and its tier, it returns a [`TierClassification`] with all\nthe information needed to determine how the tool should be executed and\nwhat authorization is required.\n\n# ANVIL Spec SS8.1--8.4\n\nThe tier classification is immutable. There are exactly three tiers:\n- **Platform (1)**: sandbox-confined, always available, no authorization.\n- **Host (2)**: out-of-sandbox, requires Arsenal ACT authorization.\n- **Embedded (3)**: compiled into WASM module, sandbox-confined, no authorization.\n\nYou cannot create a Tier 4. You cannot merge tiers. You cannot bypass\nTier 2 ACT checks.\n\n# Arguments\n\n* `tool_name` - The name of the tool being classified.\n* `tier` - The tool's tier classification.\n\n# Returns\n\nA [`TierClassification`] with the tool's authorization requirements and\nexecution context.\n\n# Examples\n\n```\nuse forge_tool::tiers::{classify_tier, ExecutionContext};\nuse forge_core::tool::ToolTier;\n\n// Platform tools: no auth, in-sandbox\nlet cls = classify_tier(\"clock\", ToolTier::Platform);\nassert!(!cls.requires_authorization);\nassert_eq!(cls.execution_context, ExecutionContext::InSandbox);\n\n// Host tools: auth required, out-of-sandbox\nlet cls = classify_tier(\"web_browse\", ToolTier::External);\nassert!(cls.requires_authorization);\nassert_eq!(cls.execution_context, ExecutionContext::OutOfSandbox);\n\n// Embedded tools: no auth, in-sandbox\nlet cls = classify_tier(\"json_parse\", ToolTier::Embedded);\nassert!(!cls.requires_authorization);\nassert_eq!(cls.execution_context, ExecutionContext::InSandbox);\n```"
            },
            {
              "name": "::requires_authorization",
              "line": 202,
              "signature": "pub fn requires_authorization(tier: ToolTier) -> bool;",
              "documentation": "Returns `true` if the given tier requires Arsenal ACT authorization.\n\nThis is a convenience function equivalent to checking\n[`TierClassification::requires_authorization`] after calling [`classify_tier`].\n\n# Arguments\n\n* `tier` - The tool tier to check.\n\n# Returns\n\n`true` if the tier is Host (Tier 2), `false` otherwise.\n\n# Examples\n\n```\nuse forge_tool::tiers::requires_authorization;\nuse forge_core::tool::ToolTier;\n\nassert!(!requires_authorization(ToolTier::Platform));\nassert!(requires_authorization(ToolTier::External));\nassert!(!requires_authorization(ToolTier::Embedded));\n```"
            },
            {
              "name": "::execution_context_for",
              "line": 226,
              "signature": "pub fn execution_context_for(tier: ToolTier) -> ExecutionContext;",
              "documentation": "Returns the [`ExecutionContext`] for a given tier.\n\n# Arguments\n\n* `tier` - The tool tier to look up.\n\n# Returns\n\nThe execution context for the tier.\n\n# Examples\n\n```\nuse forge_tool::tiers::{execution_context_for, ExecutionContext};\nuse forge_core::tool::ToolTier;\n\nassert_eq!(execution_context_for(ToolTier::Platform), ExecutionContext::InSandbox);\nassert_eq!(execution_context_for(ToolTier::External), ExecutionContext::OutOfSandbox);\nassert_eq!(execution_context_for(ToolTier::Embedded), ExecutionContext::InSandbox);\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-health",
      "language": "rust",
      "version": "0.2.0",
      "description": "ANVIL health profiles, lifecycle state machine, and monitoring for the Forge SDK",
      "manifest": "forge-rs/crates/forge-health/Cargo.toml",
      "manifestSha256": "5944690894975bec5e9a9f1cf8789026364c8168dd5e45c80e06817980e80927",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-health",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-health/src/checkpoint.rs",
          "sha256": "4278aab15d1ba4e2d9ad52a050ddda63e433f77c2929b8c408d4e2cf8a91888c",
          "artifactSha256": "f60ad3ab009d96aaffb06fc3a8edc56876495612992dcfe6eb0efd679c608adc",
          "url": "/reference/source/forge-rs/crates/forge-health/src/checkpoint.rs.txt",
          "declarations": [
            {
              "name": "::Checkpoint",
              "line": 104,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct Checkpoint {\n/// Unique identifier for the operation being checkpointed.\n\n///\n\n/// This should be stable across restarts so that a resumed agent can\n\n/// find the checkpoint for its in-progress task.\n\npub operation_id: String,\n/// The step or phase identifier within the operation.\n\n///\n\n/// Agent-defined; examples: \"phase-2\", \"page-17\", \"batch-3-of-10\".\n\npub step: String,\n/// Arbitrary JSON state saved at this checkpoint.\n\n///\n\n/// The agent is responsible for interpreting this state on resume.\n\npub state: serde_json::Value,\n/// Monotonically increasing sequence number for this operation.\n\n///\n\n/// Each successive checkpoint for the same `operation_id` should use\n\n/// a higher sequence number.\n\npub sequence: u64,\n/// Timestamp when this checkpoint was created.\n\npub created_at: Timestamp\n}",
              "documentation": "A snapshot of in-progress work at a well-defined point.\n\nCheckpoints are the fundamental unit of resumable operations. They capture\nenough state to restart a task from the checkpointed step rather than\nfrom the beginning.\n\n# Ordering\n\nThe `sequence` field provides a monotonic ordering guarantee. Each\nsuccessive checkpoint for the same `operation_id` should have a higher\nsequence number. This allows detecting stale checkpoints during\nconcurrent operation.\n\n# Examples\n\n```\nuse forge_health::checkpoint::Checkpoint;\n\nlet cp = Checkpoint::new(\n    \"crawl-job-7\",\n    \"page-42\",\n    serde_json::json!({\"url\": \"https://example.com/42\", \"links_found\": 17}),\n);\nassert_eq!(cp.operation_id, \"crawl-job-7\");\nassert_eq!(cp.step, \"page-42\");\nassert_eq!(cp.sequence, 0);\n```"
            },
            {
              "name": "::Checkpoint::new",
              "line": 153,
              "signature": "pub fn new(operation_id: &str, step: &str, state: serde_json::Value) -> Self;",
              "documentation": "Creates a new checkpoint with sequence 0.\n\n# Arguments\n\n* `operation_id` - Unique identifier for the operation.\n* `step` - The current step or phase identifier.\n* `state` - Arbitrary JSON state to preserve.\n\n# Returns\n\nA new `Checkpoint` with `sequence` set to 0 and `created_at` set\nto the current time.\n\n# Examples\n\n```\nuse forge_health::checkpoint::Checkpoint;\n\nlet cp = Checkpoint::new(\"op-1\", \"init\", serde_json::json!({}));\nassert_eq!(cp.sequence, 0);\n```"
            },
            {
              "name": "::Checkpoint::with_sequence",
              "line": 187,
              "signature": "pub fn with_sequence(\n        operation_id: &str,\n        step: &str,\n        state: serde_json::Value,\n        sequence: u64,\n    ) -> Self;",
              "documentation": "Creates a new checkpoint with a specific sequence number.\n\nUse this when creating successive checkpoints for the same operation\nto maintain ordering.\n\n# Arguments\n\n* `operation_id` - Unique identifier for the operation.\n* `step` - The current step or phase identifier.\n* `state` - Arbitrary JSON state to preserve.\n* `sequence` - The monotonic sequence number.\n\n# Returns\n\nA new `Checkpoint` with the given sequence number.\n\n# Examples\n\n```\nuse forge_health::checkpoint::Checkpoint;\n\nlet cp = Checkpoint::with_sequence(\"op-1\", \"step-5\", serde_json::json!({}), 5);\nassert_eq!(cp.sequence, 5);\n```"
            },
            {
              "name": "::CheckpointStore",
              "line": 217,
              "signature": "pub trait CheckpointStore {\n    /// Saves a checkpoint, replacing any existing checkpoint for the same\n    /// `operation_id`.\n    ///\n    /// # Arguments\n    ///\n    /// * `checkpoint` - The [`Checkpoint`] to persist.\n    fn save(&mut self, checkpoint: &Checkpoint);\n\n    /// Loads the most recent checkpoint for the given operation.\n    ///\n    /// # Arguments\n    ///\n    /// * `operation_id` - The operation identifier to look up.\n    ///\n    /// # Returns\n    ///\n    /// `Some(Checkpoint)` if a checkpoint exists, `None` otherwise.\n    fn load(&self, operation_id: &str) -> Option<Checkpoint>;\n\n    /// Deletes all checkpoints for the given operation.\n    ///\n    /// # Arguments\n    ///\n    /// * `operation_id` - The operation identifier to delete.\n    ///\n    /// # Returns\n    ///\n    /// `true` if a checkpoint was found and deleted, `false` otherwise.\n    fn delete(&mut self, operation_id: &str) -> bool;\n\n    /// Lists all operation IDs that have stored checkpoints.\n    ///\n    /// # Returns\n    ///\n    /// A vector of operation ID strings.\n    fn list(&self) -> Vec<String>;\n}",
              "documentation": "Trait for checkpoint persistence backends.\n\nImplementations store and retrieve checkpoints for resumable operations.\nThe trait is intentionally synchronous to support both in-process\n(in-memory, file) and external (database, KV store) backends. Async\nbackends can use interior mutability and blocking wrappers.\n\n# Contract\n\n- `save()` must be idempotent for the same `operation_id` and `sequence`.\n- `load()` must return the most recent checkpoint for the given\n  `operation_id`.\n- `delete()` must remove all checkpoints for the given `operation_id`.\n- `list()` must return all currently stored operation IDs."
            },
            {
              "name": "::InMemoryCheckpointStore",
              "line": 277,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct InMemoryCheckpointStore {\n\n}",
              "documentation": "In-memory checkpoint store for testing and standalone agents.\n\nStores checkpoints in a `HashMap`. Not persisted across process restarts.\nFor production use, implement [`CheckpointStore`] over a durable backend\n(file, database, Akasha KV).\n\n# Examples\n\n```\nuse forge_health::checkpoint::{Checkpoint, InMemoryCheckpointStore, CheckpointStore};\n\nlet mut store = InMemoryCheckpointStore::new();\nassert!(store.list().is_empty());\n\nlet cp = Checkpoint::new(\"op-1\", \"step-1\", serde_json::json!({\"count\": 42}));\nstore.save(&cp);\n\nassert_eq!(store.list().len(), 1);\nassert!(store.load(\"op-1\").is_some());\n```"
            },
            {
              "name": "::InMemoryCheckpointStore::new",
              "line": 287,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new empty in-memory checkpoint store.\n\n# Returns\n\nA new `InMemoryCheckpointStore` with no stored checkpoints."
            },
            {
              "name": "::InMemoryCheckpointStore::len",
              "line": 294,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the number of stored checkpoints."
            },
            {
              "name": "::InMemoryCheckpointStore::is_empty",
              "line": 299,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if no checkpoints are stored."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/degradation.rs",
          "sha256": "936b5b1c0b14e7d0e90f397b66f00c4b308426f726de8a2e8291f4c4c7df6729",
          "artifactSha256": "775cd4e8899500448123f9cb956beae9296342a0dc9eea09139d1e15252ad3cf",
          "url": "/reference/source/forge-rs/crates/forge-health/src/degradation.rs.txt",
          "declarations": [
            {
              "name": "::DegradationThresholds",
              "line": 69,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DegradationThresholds {\n/// Maximum acceptable mean latency in microseconds.\n\n/// Exceeding this triggers a `LatencySpike` signal.\n\npub latency_spike_threshold_us: u64,\n/// Maximum acceptable P99 latency in microseconds.\n\n/// Exceeding this triggers a `TailLatencyBlowup` signal.\n\npub p99_threshold_us: u64,\n/// Minimum acceptable success rate as a fraction (0.0 to 1.0).\n\n/// Dropping below this triggers a `SuccessRateDrop` signal.\n\npub min_success_rate: f64,\n/// Maximum acceptable number of recent failures in the window.\n\n/// Exceeding this triggers an `ErrorBurst` signal.\n\npub max_recent_failures: u64\n}",
              "documentation": "Configurable thresholds for degradation detection.\n\nEach threshold corresponds to a specific degradation signal. When a\nmetric exceeds its threshold, the corresponding signal is emitted.\n\n# Defaults\n\n- `latency_spike_threshold_us`: 10,000,000 (10 seconds)\n- `p99_threshold_us`: 30,000,000 (30 seconds)\n- `min_success_rate`: 0.8 (80%)\n- `max_recent_failures`: 10\n\n# Examples\n\n```\nuse forge_health::degradation::DegradationThresholds;\n\nlet t = DegradationThresholds::default();\nassert_eq!(t.latency_spike_threshold_us, 10_000_000);\nassert!((t.min_success_rate - 0.8).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::DegradationSignal",
              "line": 115,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]\npub enum DegradationSignal {\n    /// Mean latency exceeds the configured threshold.\n    LatencySpike {\n        /// Observed mean latency in microseconds.\n        mean_latency_us: u64,\n        /// Configured threshold in microseconds.\n        threshold_us: u64,\n    },\n\n    /// P99 latency exceeds the configured threshold.\n    TailLatencyBlowup {\n        /// Observed P99 latency in microseconds.\n        p99_latency_us: u64,\n        /// Configured threshold in microseconds.\n        threshold_us: u64,\n    },\n\n    /// Success rate has dropped below the minimum threshold.\n    SuccessRateDrop {\n        /// Observed success rate (0.0 to 1.0).\n        success_rate: f64,\n        /// Configured minimum success rate.\n        min_threshold: f64,\n    },\n\n    /// Too many failures in the recent window.\n    ErrorBurst {\n        /// Number of failures in the current window.\n        failure_count: u64,\n        /// Configured maximum allowed failures.\n        max_allowed: u64,\n    },\n}",
              "documentation": "A specific degradation signal detected for an agent.\n\nEach variant describes a particular dimension of degradation, including\nthe observed value and the threshold that was exceeded.\n\n# Examples\n\n```\nuse forge_health::degradation::DegradationSignal;\n\nlet signal = DegradationSignal::LatencySpike {\n    mean_latency_us: 15_000_000,\n    threshold_us: 10_000_000,\n};\nassert!(signal.description().contains(\"latency spike\"));\n```"
            },
            {
              "name": "::DegradationSignal::description",
              "line": 169,
              "signature": "pub fn description(&self) -> String;",
              "documentation": "Returns a human-readable description of this degradation signal.\n\n# Returns\n\nA string describing the signal for logging and audit trail entries.\n\n# Examples\n\n```\nuse forge_health::degradation::DegradationSignal;\n\nlet signal = DegradationSignal::ErrorBurst {\n    failure_count: 15,\n    max_allowed: 10,\n};\nlet desc = signal.description();\nassert!(desc.contains(\"error burst\"));\nassert!(desc.contains(\"15\"));\n```"
            },
            {
              "name": "::DegradationDetector",
              "line": 229,
              "signature": "#[derive(Debug, Clone)]\npub struct DegradationDetector {\n\n}",
              "documentation": "Detects degradation signals from agent latency and success-rate metrics.\n\nThe detector is stateless -- it evaluates a [`LatencyStats`] snapshot\nagainst its configured thresholds and returns any signals found.\n\n# Examples\n\n```\nuse forge_health::degradation::{DegradationDetector, DegradationThresholds};\nuse forge_health::latency::LatencyStats;\n\nlet detector = DegradationDetector::new(DegradationThresholds::default());\nlet stats = LatencyStats::empty();\nlet signals = detector.detect(&stats);\nassert!(signals.is_empty());\n```"
            },
            {
              "name": "::DegradationDetector::new",
              "line": 243,
              "signature": "pub fn new(thresholds: DegradationThresholds) -> Self;",
              "documentation": "Creates a new `DegradationDetector` with the given thresholds.\n\n# Arguments\n\n* `thresholds` - The [`DegradationThresholds`] to evaluate against.\n\n# Returns\n\nA new `DegradationDetector`."
            },
            {
              "name": "::DegradationDetector::thresholds",
              "line": 248,
              "signature": "pub fn thresholds(&self) -> &DegradationThresholds;",
              "documentation": "Returns a reference to the configured thresholds."
            },
            {
              "name": "::DegradationDetector::detect",
              "line": 293,
              "signature": "pub fn detect(&self, stats: &LatencyStats) -> Vec<DegradationSignal>;",
              "documentation": "Evaluates the given stats against thresholds and returns any\ndegradation signals found.\n\n# Arguments\n\n* `stats` - A [`LatencyStats`] snapshot from the agent's\n  [`LatencyTracker`](crate::latency::LatencyTracker).\n\n# Returns\n\nA vector of [`DegradationSignal`] values. Empty if no degradation\nis detected.\n\n# Examples\n\n```\nuse forge_health::degradation::{DegradationDetector, DegradationThresholds, DegradationSignal};\nuse forge_health::latency::LatencyStats;\n\nlet detector = DegradationDetector::new(DegradationThresholds {\n    min_success_rate: 0.9,\n    ..DegradationThresholds::default()\n});\n\n// Simulate low success rate\nlet stats = LatencyStats {\n    total_count: 10,\n    success_count: 7,\n    failure_count: 3,\n    success_rate: 0.7,\n    mean_latency_us: 1000.0,\n    p50_latency_us: 1000,\n    p95_latency_us: 2000,\n    p99_latency_us: 3000,\n    max_latency_us: 3000,\n    min_latency_us: 500,\n};\n\nlet signals = detector.detect(&stats);\nassert!(!signals.is_empty());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/error.rs",
          "sha256": "42e102e2cf520679ef5000973df61705d4bc60e3106698c2d751989e2d1c7eb4",
          "artifactSha256": "e8afbe04f0e4cdc2f356194a2e737c1d49703a8c533dca3bfcffeaf9ca69b704",
          "url": "/reference/source/forge-rs/crates/forge-health/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeHealthError",
              "line": 37,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeHealthError {\n    /// An invalid lifecycle state transition was attempted.\n    ///\n    /// The ANVIL lifecycle state machine defines exactly which transitions are\n    /// valid from each state. This error is returned when a transition is\n    /// attempted that violates the state machine rules.\n    ///\n    /// See ANVIL Spec section 13.2 -- Lifecycle State Machine\n    /// for the complete transition table.\n    #[error(\"invalid lifecycle transition from {from} to {to}: {reason} (see ANVIL Spec section 5.1, Appendix B)\")]\n    InvalidTransition {\n        /// The current lifecycle state.\n        from: LifecycleState,\n        /// The target state that was attempted.\n        to: LifecycleState,\n        /// A human-readable explanation of why this transition is invalid.\n        reason: String,\n    },\n\n    /// A lifecycle operation was attempted on a state that does not support it.\n    ///\n    /// For example, attempting to resume an agent that is in the Terminated\n    /// state, or performing any operation on a terminal state.\n    #[error(\"invalid operation on lifecycle state {state}: {reason}\")]\n    InvalidState {\n        /// The current lifecycle state where the operation was attempted.\n        state: LifecycleState,\n        /// A human-readable explanation of why this operation is invalid.\n        reason: String,\n    },\n\n    /// A health monitoring operation failed.\n    ///\n    /// This covers failures in health check evaluation, threshold configuration,\n    /// or profile update operations.\n    #[error(\"health monitor error: {reason}\")]\n    MonitorError {\n        /// A human-readable explanation of what went wrong.\n        reason: String,\n    },\n}",
              "documentation": "Error type for lifecycle, health profile, and monitoring 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_health::error::ForgeHealthError;\nuse forge_health::lifecycle::LifecycleState;\n\nlet err = ForgeHealthError::InvalidTransition {\n    from: LifecycleState::Initializing,\n    to: LifecycleState::Running,\n    reason: \"must pass through Ready first\".to_string(),\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"Initializing\"));\nassert!(msg.contains(\"Running\"));\nassert!(msg.contains(\"ANVIL Spec\"));\n```"
            },
            {
              "name": "::ForgeHealthResult",
              "line": 80,
              "signature": "pub type ForgeHealthResult<T> = Result<T, ForgeHealthError>;",
              "documentation": "A specialized `Result` type for `forge-health` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/events.rs",
          "sha256": "85d7e10cdb3da329b41d50aa496e755e7434dfd3e5a8ec417b19cfb5141d1c42",
          "artifactSha256": "23b708fc35eab70512760ddccedae750c30bd6105122688e450735281fe6c197",
          "url": "/reference/source/forge-rs/crates/forge-health/src/events.rs.txt",
          "declarations": [
            {
              "name": "::LifecycleEvent",
              "line": 75,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct LifecycleEvent {\n/// The lifecycle transition that triggered this event.\n\npub transition: LifecycleTransition,\n/// The agent's DID, if identity is bound.\n\n///\n\n/// This is `None` for agents running in legacy mode (without OAS identity).\n\n/// When present, the DID is included in telemetry spans and audit trail\n\n/// entries.\n\npub agent_did: Option<String>,\n/// Optional metadata attached to this event.\n\n///\n\n/// Common uses:\n\n/// - Error details when transitioning to the Error state\n\n/// - Initialization parameters when transitioning to Initializing\n\n/// - Shutdown reason when transitioning to Terminated\n\npub metadata: Option<serde_json::Value>\n}",
              "documentation": "A lifecycle event emitted when an agent transitions between states.\n\nLifecycle events are the primary mechanism for tracking agent state changes.\nThey are:\n- Emitted via the telemetry system as structured events\n- Recorded in the agent's audit trail\n- Signed by the agent's Ed25519 key (when identity is available)\n\n# Audit Trail\n\nPer ANVIL Spec section 11.6, every lifecycle transition is recorded as an\naudit trail entry with the following data:\n- From state and to state\n- Timestamp\n- Agent DID\n- Optional metadata (e.g., error details for transitions to Error state)\n\n# Examples\n\n```\nuse forge_health::events::LifecycleEvent;\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\nlet transition = mgr.transition(LifecycleState::Ready).unwrap();\n\n// Simple event without identity\nlet event = LifecycleEvent::new(transition);\nassert!(event.agent_did.is_none());\n\n// Event with agent DID\nlet mut mgr2 = LifecycleManager::new();\nlet transition2 = mgr2.transition(LifecycleState::Ready).unwrap();\nlet transition3 = mgr2.transition(LifecycleState::Running).unwrap();\nlet event = LifecycleEvent::with_agent_did(\n    transition3,\n    \"did:oas:l1fe:agent:data-analyzer\".to_string(),\n);\nassert!(event.agent_did.is_some());\n```"
            },
            {
              "name": "::LifecycleEvent::new",
              "line": 120,
              "signature": "pub fn new(transition: LifecycleTransition) -> Self;",
              "documentation": "Creates a new lifecycle event from a transition.\n\nThe event has no agent DID and no metadata.\n\n# Arguments\n\n* `transition` - The [`LifecycleTransition`] that triggered this event.\n\n# Returns\n\nA new `LifecycleEvent` with `agent_did` and `metadata` set to `None`.\n\n# Examples\n\n```\nuse forge_health::events::LifecycleEvent;\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\nlet transition = mgr.transition(LifecycleState::Ready).unwrap();\nlet event = LifecycleEvent::new(transition);\nassert!(event.agent_did.is_none());\nassert!(event.metadata.is_none());\n```"
            },
            {
              "name": "::LifecycleEvent::with_agent_did",
              "line": 153,
              "signature": "pub fn with_agent_did(transition: LifecycleTransition, agent_did: String) -> Self;",
              "documentation": "Creates a new lifecycle event with an agent DID.\n\n# Arguments\n\n* `transition` - The [`LifecycleTransition`] that triggered this event.\n* `agent_did` - The agent's DID string.\n\n# Returns\n\nA new `LifecycleEvent` with `agent_did` set and `metadata` set to `None`.\n\n# Examples\n\n```\nuse forge_health::events::LifecycleEvent;\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\nlet transition = mgr.transition(LifecycleState::Ready).unwrap();\nlet event = LifecycleEvent::with_agent_did(\n    transition,\n    \"did:oas:l1fe:agent:bot-1\".to_string(),\n);\nassert_eq!(event.agent_did.as_deref(), Some(\"did:oas:l1fe:agent:bot-1\"));\n```"
            },
            {
              "name": "::LifecycleEvent::with_metadata",
              "line": 188,
              "signature": "pub fn with_metadata(mut self, metadata: serde_json::Value) -> Self;",
              "documentation": "Attaches metadata to this event.\n\nThis is a builder-style method that consumes and returns `self`.\n\n# Arguments\n\n* `metadata` - A JSON value containing event-specific metadata.\n\n# Returns\n\nThe modified `LifecycleEvent` with metadata attached.\n\n# Examples\n\n```\nuse forge_health::events::LifecycleEvent;\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\nlet transition = mgr.transition(LifecycleState::Ready).unwrap();\nlet event = LifecycleEvent::new(transition)\n    .with_metadata(serde_json::json!({\n        \"provider\": \"openai:gpt-4o\",\n        \"tools_loaded\": 5,\n    }));\nassert!(event.metadata.is_some());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/latency.rs",
          "sha256": "fe1d0e2f65667dda00a76de970eb7c2688ec3a2c21bd5828a624d587008ee16a",
          "artifactSha256": "25adbb92f5949cb6aa030ae53576093d5393f1eb7ecc12c97da8d7b1dc32787b",
          "url": "/reference/source/forge-rs/crates/forge-health/src/latency.rs.txt",
          "declarations": [
            {
              "name": "::LatencyStats",
              "line": 70,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct LatencyStats {\n/// Total number of operations in the window.\n\npub total_count: u64,\n/// Number of successful operations in the window.\n\npub success_count: u64,\n/// Number of failed operations in the window.\n\npub failure_count: u64,\n/// Success rate as a fraction (0.0 to 1.0). Zero if no operations recorded.\n\npub success_rate: f64,\n/// Mean latency in microseconds across all operations in the window.\n\n/// Zero if no operations recorded.\n\npub mean_latency_us: f64,\n/// P50 (median) latency in microseconds. Zero if no operations recorded.\n\npub p50_latency_us: u64,\n/// P95 latency in microseconds. Zero if no operations recorded.\n\npub p95_latency_us: u64,\n/// P99 latency in microseconds. Zero if no operations recorded.\n\npub p99_latency_us: u64,\n/// Maximum latency observed in the window in microseconds.\n\npub max_latency_us: u64,\n/// Minimum latency observed in the window in microseconds.\n\n/// Zero if no operations recorded.\n\npub min_latency_us: u64\n}",
              "documentation": "Rolling statistics computed from the sliding window.\n\nAll latency values are in microseconds. Success rate is a fraction\nin the range `[0.0, 1.0]`.\n\n# Examples\n\n```\nuse forge_health::latency::LatencyStats;\n\nlet stats = LatencyStats::empty();\nassert_eq!(stats.total_count, 0);\nassert!((stats.success_rate - 0.0).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::LatencyStats::empty",
              "line": 111,
              "signature": "pub fn empty() -> Self;",
              "documentation": "Returns an empty stats snapshot with all values at zero.\n\n# Returns\n\nA `LatencyStats` with all counters and averages at zero.\n\n# Examples\n\n```\nuse forge_health::latency::LatencyStats;\n\nlet stats = LatencyStats::empty();\nassert_eq!(stats.total_count, 0);\nassert_eq!(stats.max_latency_us, 0);\n```"
            },
            {
              "name": "::LatencyTracker",
              "line": 153,
              "signature": "#[derive(Debug, Clone)]\npub struct LatencyTracker {\n\n}",
              "documentation": "Sliding-window latency and success-rate tracker for a single agent.\n\nRecords operation outcomes (latency + success/failure) in a fixed-size\nring buffer and computes rolling statistics on demand. Old entries are\nevicted when the window is full.\n\n# Thread Safety\n\n`LatencyTracker` is not `Sync`. For concurrent access, wrap it in a\n`Mutex` or `RwLock`.\n\n# Examples\n\n```\nuse forge_health::latency::LatencyTracker;\n\nlet mut tracker = LatencyTracker::new(64);\ntracker.record_success(1000); // 1ms\ntracker.record_success(2000); // 2ms\ntracker.record_failure(8000); // 8ms, failed\n\nlet stats = tracker.stats();\nassert_eq!(stats.total_count, 3);\nassert_eq!(stats.failure_count, 1);\n```"
            },
            {
              "name": "::LatencyTracker::new",
              "line": 180,
              "signature": "pub fn new(window_size: usize) -> Self;",
              "documentation": "Creates a new `LatencyTracker` with the specified window size.\n\n# Arguments\n\n* `window_size` - Maximum number of operation records to retain.\n  If zero, defaults to 128.\n\n# Returns\n\nA new empty `LatencyTracker`.\n\n# Examples\n\n```\nuse forge_health::latency::LatencyTracker;\n\nlet tracker = LatencyTracker::new(256);\nassert_eq!(tracker.stats().total_count, 0);\n```"
            },
            {
              "name": "::LatencyTracker::record_success",
              "line": 207,
              "signature": "pub fn record_success(&mut self, latency_us: u64);",
              "documentation": "Records a successful operation with the given latency.\n\n# Arguments\n\n* `latency_us` - Duration of the operation in microseconds.\n\n# Examples\n\n```\nuse forge_health::latency::LatencyTracker;\n\nlet mut tracker = LatencyTracker::new(64);\ntracker.record_success(1500);\nassert_eq!(tracker.stats().success_count, 1);\n```"
            },
            {
              "name": "::LatencyTracker::record_failure",
              "line": 229,
              "signature": "pub fn record_failure(&mut self, latency_us: u64);",
              "documentation": "Records a failed operation with the given latency.\n\n# Arguments\n\n* `latency_us` - Duration of the operation in microseconds.\n\n# Examples\n\n```\nuse forge_health::latency::LatencyTracker;\n\nlet mut tracker = LatencyTracker::new(64);\ntracker.record_failure(5000);\nassert_eq!(tracker.stats().failure_count, 1);\n```"
            },
            {
              "name": "::LatencyTracker::stats",
              "line": 258,
              "signature": "pub fn stats(&self) -> LatencyStats;",
              "documentation": "Computes rolling statistics from the current window contents.\n\nStatistics are computed fresh on each call; there is no cached state.\nIf the window is empty, returns [`LatencyStats::empty()`].\n\n# Returns\n\nA [`LatencyStats`] snapshot.\n\n# Examples\n\n```\nuse forge_health::latency::LatencyTracker;\n\nlet mut tracker = LatencyTracker::new(64);\ntracker.record_success(1000);\ntracker.record_success(3000);\n\nlet stats = tracker.stats();\nassert_eq!(stats.total_count, 2);\nassert!((stats.mean_latency_us - 2000.0).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::LatencyTracker::len",
              "line": 307,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the number of entries currently in the window.\n\n# Returns\n\nThe current window occupancy."
            },
            {
              "name": "::LatencyTracker::is_empty",
              "line": 312,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if the window contains no entries."
            },
            {
              "name": "::LatencyTracker::capacity",
              "line": 317,
              "signature": "pub fn capacity(&self) -> usize;",
              "documentation": "Returns the configured maximum window size."
            },
            {
              "name": "::LatencyTracker::clear",
              "line": 322,
              "signature": "pub fn clear(&mut self);",
              "documentation": "Clears all entries from the window."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/lib.rs",
          "sha256": "2735a8cb870af0666bfee3ca7e4c994b282c9201a540f2b56d81acf63e1ed569",
          "artifactSha256": "ed956d9750a8b8cc7d6d941abc6e5558a9e0d78c53f1821b94cd421ba4453c41",
          "url": "/reference/source/forge-rs/crates/forge-health/src/lib.rs.txt",
          "declarations": [
            {
              "name": "checkpoint",
              "line": 65,
              "signature": "pub mod checkpoint;",
              "documentation": "# forge-health\n\nANVIL health profiles, lifecycle state machine, and monitoring for the Forge SDK.\n\nThis crate provides the runtime health infrastructure for ANVIL-compliant agents.\nIt implements the immutable 6-state lifecycle state machine defined in ANVIL Spec\nsection 13.2, health profile tracking, threshold-based monitoring, and structured\nhealth reporting.\n\n# Components\n\n- **Lifecycle state machine** -- The 6 states (Initializing, Ready, Running,\n  Paused, Error, Terminated) and their valid transitions are immutable per\n  ANVIL Spec section 13.2. No states may be added, removed, or have their\n  transition table modified.\n- **Health profiles** -- Runtime metrics: uptime, error counts, tool invocations,\n  inference calls/tokens, CPU/memory usage, task tracking, success rates.\n- **Health monitoring** -- Threshold-based health checks that produce Healthy,\n  Degraded, or Critical status assessments.\n- **Health reporting** -- Structured reports combining profile, lifecycle state,\n  and status for audit trail and telemetry consumption.\n- **Lifecycle events** -- Structured event emission for every lifecycle transition,\n  consumable by telemetry emitters and audit trail writers.\n- **Latency tracking** -- Sliding-window per-agent latency and success-rate\n  metrics with P50/P95/P99 percentile computation.\n- **Degradation signals** -- Detection of agents that are struggling:\n  latency spikes, success rate drops, error bursts, tail latency blowups.\n- **Checkpointed operations** -- Save and restore in-progress work for\n  resumable workflows and failure recovery.\n- **Runtime health summaries** -- Aggregate health view across multiple\n  agents for fleet-level monitoring.\n\n# ANVIL Spec References\n\n- ANVIL Spec section 13.2 -- Lifecycle State Machine\n- ANVIL Spec section 14.1 -- Telemetry (lifecycle events)\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\nuse forge_health::monitoring::{HealthMonitor, HealthThresholds};\nuse forge_health::reporting::HealthStatus;\n\n// Create and advance lifecycle\nlet mut lifecycle = LifecycleManager::new();\nassert_eq!(lifecycle.state(), LifecycleState::Initializing);\n\nlet transition = lifecycle.transition(LifecycleState::Ready).unwrap();\nassert_eq!(transition.to, LifecycleState::Ready);\n\nlifecycle.transition(LifecycleState::Running).unwrap();\nassert_eq!(lifecycle.state(), LifecycleState::Running);\n\n// Monitor health\nlet mut monitor = HealthMonitor::new(HealthThresholds::default());\nmonitor.profile_mut().record_tool_invocation();\nmonitor.profile_mut().record_inference(512);\n\nlet status = monitor.check_health();\nassert!(matches!(status, HealthStatus::Healthy));\n```"
            },
            {
              "name": "degradation",
              "line": 66,
              "signature": "pub mod degradation;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 67,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "events",
              "line": 68,
              "signature": "pub mod events;",
              "documentation": ""
            },
            {
              "name": "latency",
              "line": 69,
              "signature": "pub mod latency;",
              "documentation": ""
            },
            {
              "name": "lifecycle",
              "line": 70,
              "signature": "pub mod lifecycle;",
              "documentation": ""
            },
            {
              "name": "monitoring",
              "line": 71,
              "signature": "pub mod monitoring;",
              "documentation": ""
            },
            {
              "name": "profile",
              "line": 72,
              "signature": "pub mod profile;",
              "documentation": ""
            },
            {
              "name": "reporting",
              "line": 73,
              "signature": "pub mod reporting;",
              "documentation": ""
            },
            {
              "name": "summary",
              "line": 74,
              "signature": "pub mod summary;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 77,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::checkpoint::{Checkpoint, CheckpointStore, InMemoryCheckpointStore};",
              "line": 78,
              "signature": "pub use crate::checkpoint::{Checkpoint, CheckpointStore, InMemoryCheckpointStore};",
              "documentation": ""
            },
            {
              "name": "pub use crate::degradation::{DegradationDetector, DegradationSignal, DegradationThresholds};",
              "line": 79,
              "signature": "pub use crate::degradation::{DegradationDetector, DegradationSignal, DegradationThresholds};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{ForgeHealthError, ForgeHealthResult};",
              "line": 80,
              "signature": "pub use crate::error::{ForgeHealthError, ForgeHealthResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::events::LifecycleEvent;",
              "line": 81,
              "signature": "pub use crate::events::LifecycleEvent;",
              "documentation": ""
            },
            {
              "name": "pub use crate::latency::{LatencyStats, LatencyTracker};",
              "line": 82,
              "signature": "pub use crate::latency::{LatencyStats, LatencyTracker};",
              "documentation": ""
            },
            {
              "name": "pub use crate::lifecycle::{LifecycleManager, LifecycleState, LifecycleTransition};",
              "line": 83,
              "signature": "pub use crate::lifecycle::{LifecycleManager, LifecycleState, LifecycleTransition};",
              "documentation": ""
            },
            {
              "name": "pub use crate::monitoring::{HealthMonitor, HealthThresholds};",
              "line": 84,
              "signature": "pub use crate::monitoring::{HealthMonitor, HealthThresholds};",
              "documentation": ""
            },
            {
              "name": "pub use crate::profile::HealthProfile;",
              "line": 85,
              "signature": "pub use crate::profile::HealthProfile;",
              "documentation": ""
            },
            {
              "name": "pub use crate::reporting::{HealthReport, HealthStatus};",
              "line": 86,
              "signature": "pub use crate::reporting::{HealthReport, HealthStatus};",
              "documentation": ""
            },
            {
              "name": "pub use crate::summary::{AgentHealthSnapshot, RuntimeHealthSummary};",
              "line": 87,
              "signature": "pub use crate::summary::{AgentHealthSnapshot, RuntimeHealthSummary};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/lifecycle.rs",
          "sha256": "d4b432b04985d51868ce13773e9ae9c608da8dd1868c89824de0d3e2f3925039",
          "artifactSha256": "ddb03e8654c5aea5515654447fdd49c7b2eba81a6e97633cbc6831cdcbbab1c8",
          "url": "/reference/source/forge-rs/crates/forge-health/src/lifecycle.rs.txt",
          "declarations": [
            {
              "name": "::LifecycleState",
              "line": 77,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub enum LifecycleState {\n    /// Agent is loading configuration, identity, and capabilities.\n    ///\n    /// This is the initial state for all agents. During initialization, the\n    /// agent loads its OAS identity, Arsenal ACT, provider configuration, and\n    /// tool definitions. Valid transitions are to Ready (on success), Error\n    /// (on failure), or Terminated (abort).\n    Initializing,\n\n    /// Agent has completed initialization and is ready to accept work.\n    ///\n    /// The agent's identity, configuration, and tools have been loaded\n    /// successfully. Valid transitions are to Running (start processing)\n    /// or Terminated (shutdown before starting).\n    Ready,\n\n    /// Agent is actively processing requests.\n    ///\n    /// This is the primary operational state. The agent can process tool loops,\n    /// generate text, and handle messages. Valid transitions are to Ready\n    /// (return to idle), Paused (pause), Error (fatal failure), or Terminated\n    /// (graceful shutdown).\n    Running,\n\n    /// Agent is temporarily paused and not processing requests.\n    ///\n    /// A paused agent retains its state and can resume. Valid transitions\n    /// are to Running (resume) or Terminated (shutdown while paused).\n    Paused,\n\n    /// Agent encountered a fatal error.\n    ///\n    /// An agent in the Error state can attempt recovery by transitioning to\n    /// Ready (after re-initialization), or give up by transitioning to\n    /// Terminated.\n    Error,\n\n    /// Agent has completed shutdown. This is a **terminal state** with no\n    /// outgoing transitions.\n    ///\n    /// Once an agent reaches Terminated, it cannot be reused. A new agent\n    /// instance must be created.\n    Terminated,\n}",
              "documentation": "ANVIL lifecycle states.\n\nThese six states and their valid transitions are **immutable** per\nANVIL Spec section 13.2. No states may be added, removed,\nor have their transition rules changed without a formal specification amendment.\n\n# Serialization\n\nStates serialize to their PascalCase names: `\"Initializing\"`,\n`\"Ready\"`, `\"Running\"`, `\"Paused\"`, `\"Error\"`, `\"Terminated\"`.\n\n# Examples\n\n```\nuse forge_health::lifecycle::LifecycleState;\n\nlet state = LifecycleState::Running;\nassert_eq!(state.to_string(), \"Running\");\n\nlet json = serde_json::to_string(&state).unwrap();\nassert_eq!(json, \"\\\"Running\\\"\");\n```"
            },
            {
              "name": "::LifecycleState::valid_transitions",
              "line": 146,
              "signature": "pub fn valid_transitions(&self) -> &'static [LifecycleState];",
              "documentation": "Returns the set of valid target states from this state.\n\nThe transition table is defined by ANVIL Spec section 13.2\nand is immutable.\n\n# Returns\n\nA slice of `LifecycleState` values that are valid targets from the\ncurrent state. Returns an empty slice for the terminal state (Terminated).\n\n# Examples\n\n```\nuse forge_health::lifecycle::LifecycleState;\n\nlet targets = LifecycleState::Running.valid_transitions();\nassert!(targets.contains(&LifecycleState::Ready));\nassert!(targets.contains(&LifecycleState::Paused));\nassert!(targets.contains(&LifecycleState::Error));\nassert!(targets.contains(&LifecycleState::Terminated));\nassert!(!targets.contains(&LifecycleState::Initializing));\n```"
            },
            {
              "name": "::LifecycleState::is_terminal",
              "line": 179,
              "signature": "pub fn is_terminal(&self) -> bool;",
              "documentation": "Returns `true` if this is a terminal state (no outgoing transitions).\n\nCurrently, only `Terminated` is a terminal state.\n\n# Examples\n\n```\nuse forge_health::lifecycle::LifecycleState;\n\nassert!(LifecycleState::Terminated.is_terminal());\nassert!(!LifecycleState::Running.is_terminal());\nassert!(!LifecycleState::Error.is_terminal());\n```"
            },
            {
              "name": "::LifecycleState::is_operational",
              "line": 198,
              "signature": "pub fn is_operational(&self) -> bool;",
              "documentation": "Returns `true` if the agent can perform work in this state.\n\nBoth `Ready` and `Running` are operational states. `Ready` means the\nagent can accept new work; `Running` means it is actively processing.\n\n# Examples\n\n```\nuse forge_health::lifecycle::LifecycleState;\n\nassert!(LifecycleState::Ready.is_operational());\nassert!(LifecycleState::Running.is_operational());\nassert!(!LifecycleState::Paused.is_operational());\nassert!(!LifecycleState::Error.is_operational());\n```"
            },
            {
              "name": "::LifecycleTransition",
              "line": 233,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct LifecycleTransition {\n/// The state before the transition.\n\npub from: LifecycleState,\n/// The state after the transition.\n\npub to: LifecycleState,\n/// The UTC timestamp when the transition occurred.\n\npub timestamp: Timestamp\n}",
              "documentation": "A record of a single lifecycle state transition.\n\nEvery transition is timestamped and stored in the [`LifecycleManager`]'s\nhistory. Transitions are emitted as telemetry events and recorded in the\nagent's audit trail.\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\nlet transition = mgr.transition(LifecycleState::Ready).unwrap();\nassert_eq!(transition.from, LifecycleState::Initializing);\nassert_eq!(transition.to, LifecycleState::Ready);\n```"
            },
            {
              "name": "::LifecycleManager",
              "line": 289,
              "signature": "#[derive(Debug, Clone)]\npub struct LifecycleManager {\n\n}",
              "documentation": "Manages the ANVIL lifecycle state machine for a single agent.\n\nThe `LifecycleManager` enforces the immutable transition table from ANVIL Spec\nsection 13.2. It tracks the current state, validates all\ntransitions, and maintains a complete transition history.\n\n# Thread Safety\n\n`LifecycleManager` is not `Sync`. For concurrent access, wrap it in a\n`Mutex` or `RwLock`.\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\n\n// Happy path: Initializing -> Ready -> Running\nmgr.transition(LifecycleState::Ready).unwrap();\nmgr.transition(LifecycleState::Running).unwrap();\n\n// Pause and resume\nmgr.transition(LifecycleState::Paused).unwrap();\nmgr.transition(LifecycleState::Running).unwrap();\n\n// Graceful shutdown\nmgr.transition(LifecycleState::Terminated).unwrap();\nassert!(mgr.state().is_terminal());\n```\n\nError recovery:\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\n\n// Initialization fails\nmgr.transition(LifecycleState::Error).unwrap();\n\n// Recover to Ready\nmgr.transition(LifecycleState::Ready).unwrap();\nmgr.transition(LifecycleState::Running).unwrap();\nassert_eq!(mgr.state(), LifecycleState::Running);\n```"
            },
            {
              "name": "::LifecycleManager::new",
              "line": 315,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new `LifecycleManager` in the `Initializing` state.\n\nEvery agent starts in the `Initializing` state per ANVIL Spec section 13.2.\n\n# Returns\n\nA new `LifecycleManager` with an empty transition history and state\nset to `Initializing`.\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mgr = LifecycleManager::new();\nassert_eq!(mgr.state(), LifecycleState::Initializing);\nassert!(mgr.history().is_empty());\n```"
            },
            {
              "name": "::LifecycleManager::state",
              "line": 336,
              "signature": "pub fn state(&self) -> LifecycleState;",
              "documentation": "Returns the current lifecycle state.\n\n# Returns\n\nThe current [`LifecycleState`].\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mgr = LifecycleManager::new();\nassert_eq!(mgr.state(), LifecycleState::Initializing);\n```"
            },
            {
              "name": "::LifecycleManager::transition",
              "line": 380,
              "signature": "pub fn transition(\n        &mut self,\n        target: LifecycleState,\n    ) -> Result<LifecycleTransition, ForgeHealthError>;",
              "documentation": "Attempts to transition to the given target state.\n\nValidates the transition against the ANVIL Spec section 13.2\ntransition table. If valid, the state is updated, a [`LifecycleTransition`]\nis recorded in the history, and a copy is returned. If invalid, an error\nis returned and the state is unchanged.\n\n# Arguments\n\n* `target` - The desired target [`LifecycleState`].\n\n# Returns\n\nA [`LifecycleTransition`] record on success.\n\n# Errors\n\nReturns [`ForgeHealthError::InvalidTransition`] if the transition from\nthe current state to `target` is not in the ANVIL transition table.\n\nReturns [`ForgeHealthError::InvalidTransition`] if `target` equals the\ncurrent state (self-transitions are not permitted).\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\n\n// Valid transition\nlet t = mgr.transition(LifecycleState::Ready).unwrap();\nassert_eq!(t.from, LifecycleState::Initializing);\nassert_eq!(t.to, LifecycleState::Ready);\n\n// Invalid transition returns error\nlet err = mgr.transition(LifecycleState::Error);\nassert!(err.is_err());\n```"
            },
            {
              "name": "::LifecycleManager::can_transition_to",
              "line": 456,
              "signature": "pub fn can_transition_to(&self, target: LifecycleState) -> bool;",
              "documentation": "Returns `true` if the transition from the current state to `target` is valid.\n\n# Arguments\n\n* `target` - The candidate target [`LifecycleState`].\n\n# Returns\n\n`true` if the transition is permitted by the ANVIL transition table.\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mgr = LifecycleManager::new();\nassert!(mgr.can_transition_to(LifecycleState::Ready));\nassert!(!mgr.can_transition_to(LifecycleState::Running));\nassert!(!mgr.can_transition_to(LifecycleState::Paused));\n```"
            },
            {
              "name": "::LifecycleManager::valid_transitions",
              "line": 480,
              "signature": "pub fn valid_transitions(&self) -> Vec<LifecycleState>;",
              "documentation": "Returns the set of valid target states from the current state.\n\nThis is a convenience method that delegates to\n[`LifecycleState::valid_transitions`].\n\n# Returns\n\nA `Vec` of valid target states. Empty if the current state is terminal.\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mgr = LifecycleManager::new();\nlet valid = mgr.valid_transitions();\nassert!(valid.contains(&LifecycleState::Ready));\nassert!(valid.contains(&LifecycleState::Error));\nassert!(valid.contains(&LifecycleState::Terminated));\n```"
            },
            {
              "name": "::LifecycleManager::history",
              "line": 505,
              "signature": "pub fn history(&self) -> &[LifecycleTransition];",
              "documentation": "Returns the complete transition history.\n\nThe history is ordered chronologically -- the first entry is the first\ntransition that occurred.\n\n# Returns\n\nA slice of all [`LifecycleTransition`] records.\n\n# Examples\n\n```\nuse forge_health::lifecycle::{LifecycleManager, LifecycleState};\n\nlet mut mgr = LifecycleManager::new();\nassert!(mgr.history().is_empty());\n\nmgr.transition(LifecycleState::Ready).unwrap();\nassert_eq!(mgr.history().len(), 1);\nassert_eq!(mgr.history()[0].from, LifecycleState::Initializing);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/monitoring.rs",
          "sha256": "a26b0e13aa8ba93e40eee45b6da4ebcfc38765c7e21b8a7bc3358e9c1e083318",
          "artifactSha256": "7d65a5efa5b3c7124e23a8b8a820aa2f1c3984f9b37a7cdb66f9d001f238f42d",
          "url": "/reference/source/forge-rs/crates/forge-health/src/monitoring.rs.txt",
          "declarations": [
            {
              "name": "::HealthThresholds",
              "line": 81,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct HealthThresholds {\n/// Maximum acceptable error rate in errors per minute.\n\n///\n\n/// When the computed error rate exceeds this threshold, the agent's\n\n/// health status becomes `Degraded` or `Critical`.\n\npub max_error_rate: f64,\n/// Maximum acceptable CPU usage percentage (0.0 to 100.0).\n\n///\n\n/// When CPU usage exceeds this threshold, the agent's health status\n\n/// becomes `Degraded`.\n\npub max_cpu_percent: f64,\n/// Maximum acceptable memory usage in bytes.\n\n///\n\n/// When memory usage exceeds this threshold, the agent's health status\n\n/// becomes `Critical`.\n\npub max_memory_bytes: u64,\n/// Maximum acceptable inference latency in milliseconds.\n\n///\n\n/// This threshold is informational \u2014 it is reported in the health status\n\n/// reasons but does not directly cause status changes since latency is\n\n/// not tracked in the profile (it would require per-call timing).\n\npub max_inference_latency_ms: u64\n}",
              "documentation": "Configurable thresholds for health status evaluation.\n\nWhen a metric exceeds its threshold, the health status is degraded or\ncritical depending on the severity. All thresholds use the same units\nas their corresponding [`HealthProfile`] fields.\n\n# Defaults\n\nThe default thresholds are:\n- `max_error_rate`: 10.0 errors per minute\n- `max_cpu_percent`: 90.0%\n- `max_memory_bytes`: 4 GB (4,294,967,296 bytes)\n- `max_inference_latency_ms`: 5000 ms\n\n# Examples\n\n```\nuse forge_health::monitoring::HealthThresholds;\n\n// Use defaults\nlet thresholds = HealthThresholds::default();\nassert!((thresholds.max_error_rate - 10.0).abs() < f64::EPSILON);\n\n// Custom thresholds\nlet custom = HealthThresholds {\n    max_error_rate: 5.0,\n    max_cpu_percent: 80.0,\n    max_memory_bytes: 2 * 1024 * 1024 * 1024,\n    max_inference_latency_ms: 3000,\n};\n```"
            },
            {
              "name": "::HealthMonitor",
              "line": 147,
              "signature": "#[derive(Debug, Clone)]\npub struct HealthMonitor {\n\n}",
              "documentation": "Health monitor that evaluates an agent's profile against thresholds.\n\nThe `HealthMonitor` owns both the [`HealthProfile`] and the\n[`HealthThresholds`], providing a unified interface for recording metrics\nand evaluating health status.\n\n# Examples\n\n```\nuse forge_health::monitoring::{HealthMonitor, HealthThresholds};\nuse forge_health::reporting::HealthStatus;\n\nlet mut monitor = HealthMonitor::new(HealthThresholds::default());\n\n// Record some activity\nmonitor.profile_mut().record_tool_invocation();\nmonitor.profile_mut().record_inference(512);\n\n// Check health\nlet status = monitor.check_health();\nassert!(matches!(status, HealthStatus::Healthy));\n\n// Simulate high CPU\nmonitor.profile_mut().update_resources(95.0, 1024);\nlet status = monitor.check_health();\nassert!(!matches!(status, HealthStatus::Healthy));\n```"
            },
            {
              "name": "::HealthMonitor::new",
              "line": 175,
              "signature": "pub fn new(thresholds: HealthThresholds) -> Self;",
              "documentation": "Creates a new `HealthMonitor` with the given thresholds.\n\nThe profile is initialized with all counters at zero.\n\n# Arguments\n\n* `thresholds` - The [`HealthThresholds`] to evaluate against.\n\n# Returns\n\nA new `HealthMonitor` with a fresh `HealthProfile`.\n\n# Examples\n\n```\nuse forge_health::monitoring::{HealthMonitor, HealthThresholds};\n\nlet monitor = HealthMonitor::new(HealthThresholds::default());\nassert_eq!(monitor.profile().tool_invocations, 0);\n```"
            },
            {
              "name": "::HealthMonitor::profile",
              "line": 196,
              "signature": "pub fn profile(&self) -> &HealthProfile;",
              "documentation": "Returns a reference to the current health profile.\n\n# Returns\n\nA reference to the [`HealthProfile`].\n\n# Examples\n\n```\nuse forge_health::monitoring::{HealthMonitor, HealthThresholds};\n\nlet monitor = HealthMonitor::new(HealthThresholds::default());\nassert_eq!(monitor.profile().error_count, 0);\n```"
            },
            {
              "name": "::HealthMonitor::profile_mut",
              "line": 218,
              "signature": "pub fn profile_mut(&mut self) -> &mut HealthProfile;",
              "documentation": "Returns a mutable reference to the health profile.\n\nUse this to record tool invocations, inference calls, errors, and\nresource usage updates.\n\n# Returns\n\nA mutable reference to the [`HealthProfile`].\n\n# Examples\n\n```\nuse forge_health::monitoring::{HealthMonitor, HealthThresholds};\n\nlet mut monitor = HealthMonitor::new(HealthThresholds::default());\nmonitor.profile_mut().record_tool_invocation();\nassert_eq!(monitor.profile().tool_invocations, 1);\n```"
            },
            {
              "name": "::HealthMonitor::thresholds",
              "line": 236,
              "signature": "pub fn thresholds(&self) -> &HealthThresholds;",
              "documentation": "Returns a reference to the configured thresholds.\n\n# Returns\n\nA reference to the [`HealthThresholds`].\n\n# Examples\n\n```\nuse forge_health::monitoring::{HealthMonitor, HealthThresholds};\n\nlet monitor = HealthMonitor::new(HealthThresholds::default());\nassert!((monitor.thresholds().max_cpu_percent - 90.0).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::HealthMonitor::check_health",
              "line": 278,
              "signature": "pub fn check_health(&self) -> HealthStatus;",
              "documentation": "Evaluates the current health profile against the configured thresholds.\n\nThe evaluation checks (in priority order):\n\n1. **Memory** \u2014 If `memory_usage_bytes > max_memory_bytes`, adds a\n   critical reason.\n2. **CPU** \u2014 If `cpu_usage_percent > max_cpu_percent`, adds a degraded\n   reason.\n3. **Error rate** \u2014 If the computed error rate (errors per minute,\n   approximated from uptime) exceeds `max_error_rate`, adds a reason.\n   If the error rate exceeds 2x the threshold, it is critical.\n\nIf any critical reasons exist, the status is `Critical`. If only\ndegraded reasons exist, the status is `Degraded`. Otherwise, `Healthy`.\n\n# Returns\n\nA [`HealthStatus`] assessment.\n\n# Examples\n\n```\nuse forge_health::monitoring::{HealthMonitor, HealthThresholds};\nuse forge_health::reporting::HealthStatus;\n\nlet mut monitor = HealthMonitor::new(HealthThresholds::default());\n\n// Healthy by default\nassert!(matches!(monitor.check_health(), HealthStatus::Healthy));\n\n// High memory -> Critical\nmonitor.profile_mut().update_resources(\n    50.0,\n    5 * 1024 * 1024 * 1024, // 5 GB, exceeds 4 GB default\n);\nlet status = monitor.check_health();\nassert!(matches!(status, HealthStatus::Critical { .. }));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/profile.rs",
          "sha256": "449021c7907ed853d737e559b89ba9f95472b87c156b6864ad484d07fed3fd03",
          "artifactSha256": "134be529e3e50eef5448f14259ef168e59105a4f02d055c72e31fbf4b2151645",
          "url": "/reference/source/forge-rs/crates/forge-health/src/profile.rs.txt",
          "declarations": [
            {
              "name": "::HealthProfile",
              "line": 64,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct HealthProfile {\n/// Total uptime of the agent in seconds.\n\n///\n\n/// This is updated externally by the monitoring system based on the\n\n/// elapsed time since the agent entered the Active state.\n\npub uptime_seconds: u64,\n/// Total number of errors recorded during the agent's lifetime.\n\n///\n\n/// This counter is monotonically increasing.\n\npub error_count: u64,\n/// Total number of tool invocations executed by the agent.\n\n///\n\n/// Includes both successful and failed invocations.\n\npub tool_invocations: u64,\n/// Total number of inference calls (LLM generation requests) made.\n\npub inference_calls: u64,\n/// Total number of tokens consumed across all inference calls.\n\npub inference_tokens: u64,\n/// Current CPU usage as a percentage (0.0 to 100.0).\n\n///\n\n/// This is a point-in-time measurement updated by `update_resources`.\n\npub cpu_usage_percent: f64,\n/// Current memory usage in bytes.\n\n///\n\n/// This is a point-in-time measurement updated by `update_resources`.\n\npub memory_usage_bytes: u64,\n/// Number of currently active (in-flight) tasks.\n\n///\n\n/// Incremented by `record_task_started`, decremented by `record_task_completed`.\n\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\n\npub active_tasks: u32,\n/// Total number of tasks completed during the agent's lifetime.\n\n///\n\n/// This counter is monotonically increasing.\n\npub completed_tasks: u64,\n/// Current error rate as a fraction (0.0 to 1.0).\n\n///\n\n/// Computed as `errors / (errors + successes)` across all generation calls.\n\n/// Updated by `record_generation_success` and `record_generation_failure`.\n\npub error_rate: f64,\n/// Average latency of completed operations in milliseconds.\n\n///\n\n/// Updated externally by the monitoring system.\n\npub avg_latency_ms: f64,\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n\n///\n\n/// Computed as `successes / total` across all tool invocations.\n\npub tool_success_rate: f64,\n/// Generation success rate as a fraction (0.0 to 1.0).\n\n///\n\n/// Computed as `successes / total` across all generation calls.\n\n/// Updated by `record_generation_success` and `record_generation_failure`.\n\npub generation_success_rate: f64,\n/// Timestamp of the last profile update.\n\npub last_updated: Timestamp\n}",
              "documentation": "Runtime health metrics for an ANVIL-compliant agent.\n\nThe health profile tracks operational statistics that enable health\nmonitoring, capacity planning, and audit trail generation. All counters\nare monotonically increasing \u2014 they are never reset during an agent's\nlifetime.\n\n# Thread Safety\n\n`HealthProfile` is not `Sync`. For concurrent access, wrap it in a\n`Mutex` or `RwLock`.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_tool_invocation();\nprofile.record_inference(100);\nprofile.update_resources(45.0, 1024 * 1024 * 512);\n\nassert_eq!(profile.tool_invocations, 1);\nassert_eq!(profile.inference_tokens, 100);\n```"
            },
            {
              "name": "::HealthProfile::new",
              "line": 164,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new `HealthProfile` with all counters at zero.\n\n# Returns\n\nA fresh `HealthProfile` with `last_updated` set to the current time\nand all counters initialized to zero.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet profile = HealthProfile::new();\nassert_eq!(profile.error_count, 0);\nassert_eq!(profile.tool_invocations, 0);\nassert_eq!(profile.inference_calls, 0);\nassert_eq!(profile.inference_tokens, 0);\nassert_eq!(profile.active_tasks, 0);\nassert_eq!(profile.completed_tasks, 0);\nassert!((profile.error_rate - 0.0).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::HealthProfile::record_tool_invocation",
              "line": 200,
              "signature": "pub fn record_tool_invocation(&mut self);",
              "documentation": "Records a tool invocation.\n\nIncrements the `tool_invocations` counter by one and updates the\n`last_updated` timestamp.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_tool_invocation();\nprofile.record_tool_invocation();\nassert_eq!(profile.tool_invocations, 2);\n```"
            },
            {
              "name": "::HealthProfile::record_inference",
              "line": 225,
              "signature": "pub fn record_inference(&mut self, tokens: u64);",
              "documentation": "Records an inference call with the given token count.\n\nIncrements the `inference_calls` counter by one, adds `tokens` to\nthe `inference_tokens` total, and updates the `last_updated` timestamp.\n\n# Arguments\n\n* `tokens` - The number of tokens consumed by this inference call.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_inference(256);\nprofile.record_inference(512);\nassert_eq!(profile.inference_calls, 2);\nassert_eq!(profile.inference_tokens, 768);\n```"
            },
            {
              "name": "::HealthProfile::record_error",
              "line": 245,
              "signature": "pub fn record_error(&mut self);",
              "documentation": "Records an error occurrence.\n\nIncrements the `error_count` counter by one and updates the\n`last_updated` timestamp.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_error();\nassert_eq!(profile.error_count, 1);\n```"
            },
            {
              "name": "::HealthProfile::update_resources",
              "line": 270,
              "signature": "pub fn update_resources(&mut self, cpu: f64, memory: u64);",
              "documentation": "Updates the point-in-time resource usage metrics.\n\nCPU percentage is clamped to the range `[0.0, 100.0]`. Values outside\nthis range are clamped silently.\n\n# Arguments\n\n* `cpu` - Current CPU usage as a percentage (0.0 to 100.0).\n* `memory` - Current memory usage in bytes.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.update_resources(55.3, 1024 * 1024 * 256);\nassert!((profile.cpu_usage_percent - 55.3).abs() < f64::EPSILON);\nassert_eq!(profile.memory_usage_bytes, 1024 * 1024 * 256);\n```"
            },
            {
              "name": "::HealthProfile::update_uptime",
              "line": 291,
              "signature": "pub fn update_uptime(&mut self, seconds: u64);",
              "documentation": "Updates the uptime counter.\n\n# Arguments\n\n* `seconds` - The total uptime in seconds since the agent became Running.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.update_uptime(3600);\nassert_eq!(profile.uptime_seconds, 3600);\n```"
            },
            {
              "name": "::HealthProfile::record_task_started",
              "line": 312,
              "signature": "pub fn record_task_started(&mut self);",
              "documentation": "Records the start of a new task.\n\nIncrements the `active_tasks` gauge by one and updates the\n`last_updated` timestamp.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_task_started();\nassert_eq!(profile.active_tasks, 1);\nprofile.record_task_started();\nassert_eq!(profile.active_tasks, 2);\n```"
            },
            {
              "name": "::HealthProfile::record_task_completed",
              "line": 335,
              "signature": "pub fn record_task_completed(&mut self);",
              "documentation": "Records the completion of a task.\n\nDecrements the `active_tasks` gauge by one (saturating at zero) and\nincrements the `completed_tasks` counter by one. Updates the\n`last_updated` timestamp.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_task_started();\nprofile.record_task_started();\nprofile.record_task_completed();\nassert_eq!(profile.active_tasks, 1);\nassert_eq!(profile.completed_tasks, 1);\n```"
            },
            {
              "name": "::HealthProfile::record_generation_success",
              "line": 357,
              "signature": "pub fn record_generation_success(&mut self);",
              "documentation": "Records a successful generation call.\n\nUpdates `generation_success_rate` and `error_rate` based on the\nrunning totals of successes and failures. Updates the\n`last_updated` timestamp.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_generation_success();\nassert!((profile.generation_success_rate - 1.0).abs() < f64::EPSILON);\nassert!((profile.error_rate - 0.0).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::HealthProfile::record_generation_failure",
              "line": 379,
              "signature": "pub fn record_generation_failure(&mut self);",
              "documentation": "Records a failed generation call.\n\nUpdates `generation_success_rate` and `error_rate` based on the\nrunning totals of successes and failures. Also increments `error_count`.\nUpdates the `last_updated` timestamp.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\n\nlet mut profile = HealthProfile::new();\nprofile.record_generation_failure();\nassert!((profile.generation_success_rate - 0.0).abs() < f64::EPSILON);\nassert!((profile.error_rate - 1.0).abs() < f64::EPSILON);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/reporting.rs",
          "sha256": "276e226f17937aaf4371b91a8521761444372d7a7a6df4eaaea8531724489b8a",
          "artifactSha256": "79899e3af53b166b35bb37e368e4a60bebbe56c3f2d50741d39a0505681b8fd1",
          "url": "/reference/source/forge-rs/crates/forge-health/src/reporting.rs.txt",
          "declarations": [
            {
              "name": "::HealthStatus",
              "line": 68,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"status\", rename_all = \"snake_case\")]\npub enum HealthStatus {\n    /// All metrics are within acceptable thresholds.\n    Healthy,\n\n    /// One or more metrics are approaching thresholds.\n    ///\n    /// The agent is functional but may need attention. Each reason describes\n    /// a specific metric that is outside the normal range.\n    Degraded {\n        /// Human-readable descriptions of the metrics causing degradation.\n        reasons: Vec<String>,\n    },\n\n    /// One or more metrics have exceeded critical thresholds.\n    ///\n    /// The agent may be unable to perform work reliably. Each reason describes\n    /// a specific metric that has exceeded its critical threshold.\n    Critical {\n        /// Human-readable descriptions of the metrics causing critical status.\n        reasons: Vec<String>,\n    },\n}",
              "documentation": "The assessed health status of an agent.\n\nHealth status is determined by the [`crate::monitoring::HealthMonitor`]\nbased on configurable thresholds. The three levels are:\n\n- **Healthy** \u2014 All metrics within acceptable thresholds.\n- **Degraded** \u2014 One or more metrics approaching thresholds; the agent is\n  functional but may need attention.\n- **Critical** \u2014 One or more metrics exceeded critical thresholds; the agent\n  may be unable to perform work reliably.\n\n# Serialization\n\nSerializes as a tagged enum with a `\"status\"` discriminator:\n```json\n{ \"status\": \"healthy\" }\n{ \"status\": \"degraded\", \"reasons\": [\"CPU usage at 89.5%\"] }\n{ \"status\": \"critical\", \"reasons\": [\"memory usage 4.2GB exceeds 4.0GB limit\"] }\n```\n\n# Examples\n\n```\nuse forge_health::reporting::HealthStatus;\n\nlet status = HealthStatus::Degraded {\n    reasons: vec![\"CPU usage at 89.5%\".to_string()],\n};\nassert!(matches!(status, HealthStatus::Degraded { .. }));\n```"
            },
            {
              "name": "::HealthStatus::is_healthy",
              "line": 102,
              "signature": "pub fn is_healthy(&self) -> bool;",
              "documentation": "Returns `true` if the status is `Healthy`.\n\n# Examples\n\n```\nuse forge_health::reporting::HealthStatus;\n\nassert!(HealthStatus::Healthy.is_healthy());\nassert!(!HealthStatus::Degraded { reasons: vec![] }.is_healthy());\n```"
            },
            {
              "name": "::HealthStatus::is_critical",
              "line": 119,
              "signature": "pub fn is_critical(&self) -> bool;",
              "documentation": "Returns `true` if the status is `Critical`.\n\n# Examples\n\n```\nuse forge_health::reporting::HealthStatus;\n\nlet critical = HealthStatus::Critical {\n    reasons: vec![\"out of memory\".to_string()],\n};\nassert!(critical.is_critical());\nassert!(!HealthStatus::Healthy.is_critical());\n```"
            },
            {
              "name": "::HealthStatus::reasons",
              "line": 140,
              "signature": "pub fn reasons(&self) -> &[String];",
              "documentation": "Returns the list of reasons, or an empty slice if healthy.\n\n# Returns\n\nA slice of reason strings. Empty for `Healthy` status.\n\n# Examples\n\n```\nuse forge_health::reporting::HealthStatus;\n\nlet status = HealthStatus::Degraded {\n    reasons: vec![\"high latency\".to_string()],\n};\nassert_eq!(status.reasons().len(), 1);\nassert_eq!(HealthStatus::Healthy.reasons().len(), 0);\n```"
            },
            {
              "name": "::HealthReport",
              "line": 177,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct HealthReport {\n/// The assessed health status.\n\npub status: HealthStatus,\n/// The current health profile metrics.\n\npub profile: HealthProfile,\n/// The current lifecycle state of the agent.\n\npub lifecycle_state: LifecycleState,\n/// Timestamp when this report was generated.\n\npub generated_at: Timestamp\n}",
              "documentation": "A structured health report combining status, profile, and lifecycle state.\n\nHealth reports are the primary output of the health monitoring system.\nThey are used for:\n- Audit trail entries (signed by the agent's Ed25519 key)\n- Telemetry emission (health check spans)\n- External health check endpoints (e.g., HTTP `/health`)\n- Lifecycle decision-making (auto-suspend on critical status)\n\n# Examples\n\n```\nuse forge_health::lifecycle::LifecycleState;\nuse forge_health::profile::HealthProfile;\nuse forge_health::reporting::{HealthReport, HealthStatus};\n\nlet mut profile = HealthProfile::new();\nprofile.record_tool_invocation();\n\nlet report = HealthReport::new(\n    HealthStatus::Healthy,\n    profile,\n    LifecycleState::Running,\n);\n\nlet json = serde_json::to_string_pretty(&report).unwrap();\nassert!(json.contains(\"healthy\"));\n```"
            },
            {
              "name": "::HealthReport::new",
              "line": 218,
              "signature": "pub fn new(\n        status: HealthStatus,\n        profile: HealthProfile,\n        lifecycle_state: LifecycleState,\n    ) -> Self;",
              "documentation": "Creates a new health report.\n\n# Arguments\n\n* `status` - The assessed [`HealthStatus`].\n* `profile` - A snapshot of the current [`HealthProfile`].\n* `lifecycle_state` - The current [`LifecycleState`].\n\n# Returns\n\nA new `HealthReport` with `generated_at` set to the current time.\n\n# Examples\n\n```\nuse forge_health::lifecycle::LifecycleState;\nuse forge_health::profile::HealthProfile;\nuse forge_health::reporting::{HealthReport, HealthStatus};\n\nlet report = HealthReport::new(\n    HealthStatus::Healthy,\n    HealthProfile::new(),\n    LifecycleState::Running,\n);\nassert!(report.status.is_healthy());\n```"
            },
            {
              "name": "::derive_health_status",
              "line": 264,
              "signature": "pub fn derive_health_status(profile: &HealthProfile) -> HealthStatus;",
              "documentation": "Derives a [`HealthStatus`] from a health profile per ANVIL Spec section 12.2.\n\nThis function evaluates the profile's `error_rate` and `cpu_usage_percent` against\nthe thresholds defined in the ANVIL specification:\n\n- **Critical** if `error_rate > 0.5` OR `cpu_usage_percent > 95.0`\n- **Degraded** if `error_rate > 0.1` OR `cpu_usage_percent > 80.0`\n- **Healthy** otherwise\n\n# Arguments\n\n* `profile` - A reference to the [`HealthProfile`] to evaluate.\n\n# Returns\n\nA [`HealthStatus`] assessment based on the profile metrics.\n\n# Examples\n\n```\nuse forge_health::profile::HealthProfile;\nuse forge_health::reporting::{derive_health_status, HealthStatus};\n\nlet profile = HealthProfile::new();\nlet status = derive_health_status(&profile);\nassert!(matches!(status, HealthStatus::Healthy));\n\nlet mut high_error = HealthProfile::new();\nhigh_error.error_rate = 0.6;\nlet status = derive_health_status(&high_error);\nassert!(matches!(status, HealthStatus::Critical { .. }));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-health/src/summary.rs",
          "sha256": "2489e536c5bc7e4cdbe188f5dd8978cec8d3121f2829ccd749a0d21fb3ad0ffc",
          "artifactSha256": "da2f6a6cf8ccb03395fec0bb696e5579ca1eb7404259da2140b6115e8961e57c",
          "url": "/reference/source/forge-rs/crates/forge-health/src/summary.rs.txt",
          "declarations": [
            {
              "name": "::AgentHealthSnapshot",
              "line": 82,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AgentHealthSnapshot {\n/// The agent's identifier (OAS DID or human-readable name).\n\npub agent_id: String,\n/// The agent's current lifecycle state.\n\npub lifecycle_state: LifecycleState,\n/// The agent's current health status.\n\npub health_status: HealthStatus,\n/// Number of currently active tasks.\n\npub active_tasks: u32,\n/// Current success rate (0.0 to 1.0) from the agent's latency tracker.\n\npub success_rate: f64\n}",
              "documentation": "A point-in-time health snapshot for a single agent.\n\nThis is the input to [`RuntimeHealthSummary::from_snapshots`]. Each\nsnapshot captures the essential health dimensions of one agent at\nthe moment of collection.\n\n# Examples\n\n```\nuse forge_health::summary::AgentHealthSnapshot;\nuse forge_health::reporting::HealthStatus;\nuse forge_health::lifecycle::LifecycleState;\n\nlet snapshot = AgentHealthSnapshot {\n    agent_id: \"coder-1\".to_string(),\n    lifecycle_state: LifecycleState::Running,\n    health_status: HealthStatus::Healthy,\n    active_tasks: 3,\n    success_rate: 0.97,\n};\nassert_eq!(snapshot.agent_id, \"coder-1\");\n```"
            },
            {
              "name": "::RuntimeHealthSummary",
              "line": 111,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct RuntimeHealthSummary {\n/// Total number of agents included in this summary.\n\npub total_agents: u32,\n/// Number of agents with `HealthStatus::Healthy`.\n\npub healthy_count: u32,\n/// Number of agents with `HealthStatus::Degraded`.\n\npub degraded_count: u32,\n/// Number of agents with `HealthStatus::Critical`.\n\npub critical_count: u32,\n/// Count of agents per lifecycle state.\n\npub lifecycle_counts: LifecycleStateCounts,\n/// Total active tasks across all agents.\n\npub total_active_tasks: u64,\n/// Mean success rate across all agents (0.0 to 1.0).\n\n/// NaN-safe: returns 0.0 if no agents are included.\n\npub mean_success_rate: f64,\n/// Agent IDs currently in degraded state.\n\npub degraded_agents: Vec<String>,\n/// Agent IDs currently in critical state.\n\npub critical_agents: Vec<String>,\n/// Timestamp when this summary was generated.\n\npub generated_at: Timestamp\n}",
              "documentation": "Aggregate health view across multiple agents.\n\nProvides fleet-level statistics computed from individual agent snapshots.\nThis is the primary output consumed by dashboards, monitoring systems,\nand organizational health checks.\n\n# Examples\n\n```\nuse forge_health::summary::RuntimeHealthSummary;\n\nlet summary = RuntimeHealthSummary::empty();\nassert_eq!(summary.total_agents, 0);\nassert_eq!(summary.healthy_count, 0);\n```"
            },
            {
              "name": "::LifecycleStateCounts",
              "line": 156,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct LifecycleStateCounts {\n/// Agents in `Initializing` state.\n\npub initializing: u32,\n/// Agents in `Ready` state.\n\npub ready: u32,\n/// Agents in `Running` state.\n\npub running: u32,\n/// Agents in `Paused` state.\n\npub paused: u32,\n/// Agents in `Error` state.\n\npub error: u32,\n/// Agents in `Terminated` state.\n\npub terminated: u32\n}",
              "documentation": "Counts of agents per lifecycle state.\n\n# Examples\n\n```\nuse forge_health::summary::LifecycleStateCounts;\n\nlet counts = LifecycleStateCounts::empty();\nassert_eq!(counts.running, 0);\nassert_eq!(counts.paused, 0);\n```"
            },
            {
              "name": "::LifecycleStateCounts::empty",
              "line": 173,
              "signature": "pub fn empty() -> Self;",
              "documentation": "Returns counts with all values at zero."
            },
            {
              "name": "::RuntimeHealthSummary::empty",
              "line": 206,
              "signature": "pub fn empty() -> Self;",
              "documentation": "Returns an empty summary with all counters at zero.\n\n# Returns\n\nA `RuntimeHealthSummary` with zero agents and zero counters.\n\n# Examples\n\n```\nuse forge_health::summary::RuntimeHealthSummary;\n\nlet summary = RuntimeHealthSummary::empty();\nassert_eq!(summary.total_agents, 0);\nassert!(summary.degraded_agents.is_empty());\n```"
            },
            {
              "name": "::RuntimeHealthSummary::from_snapshots",
              "line": 253,
              "signature": "pub fn from_snapshots(snapshots: &[AgentHealthSnapshot]) -> Self;",
              "documentation": "Builds a summary from a slice of agent health snapshots.\n\nComputes aggregate statistics across all agents in the input.\n\n# Arguments\n\n* `snapshots` - A slice of [`AgentHealthSnapshot`] values, one per agent.\n\n# Returns\n\nA `RuntimeHealthSummary` aggregating all snapshot data.\n\n# Examples\n\n```\nuse forge_health::summary::{AgentHealthSnapshot, RuntimeHealthSummary};\nuse forge_health::reporting::HealthStatus;\nuse forge_health::lifecycle::LifecycleState;\n\nlet snapshots = vec![\n    AgentHealthSnapshot {\n        agent_id: \"a1\".to_string(),\n        lifecycle_state: LifecycleState::Running,\n        health_status: HealthStatus::Healthy,\n        active_tasks: 1,\n        success_rate: 0.95,\n    },\n];\nlet summary = RuntimeHealthSummary::from_snapshots(&snapshots);\nassert_eq!(summary.total_agents, 1);\nassert_eq!(summary.healthy_count, 1);\n```"
            },
            {
              "name": "::RuntimeHealthSummary::all_healthy",
              "line": 323,
              "signature": "pub fn all_healthy(&self) -> bool;",
              "documentation": "Returns `true` if all agents are healthy.\n\n# Examples\n\n```\nuse forge_health::summary::RuntimeHealthSummary;\n\nlet summary = RuntimeHealthSummary::empty();\nassert!(summary.all_healthy());\n```"
            },
            {
              "name": "::RuntimeHealthSummary::has_critical",
              "line": 337,
              "signature": "pub fn has_critical(&self) -> bool;",
              "documentation": "Returns `true` if any agent is in critical state.\n\n# Examples\n\n```\nuse forge_health::summary::RuntimeHealthSummary;\n\nlet summary = RuntimeHealthSummary::empty();\nassert!(!summary.has_critical());\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-agent",
      "language": "rust",
      "version": "0.2.0",
      "description": "ANVIL-compliant agent execution loop, workflows, and multi-agent orchestration for the Forge SDK",
      "manifest": "forge-rs/crates/forge-agent/Cargo.toml",
      "manifestSha256": "c88f2e967d0141dde0c1c61e04b364dc16f467f63421c5625c83b1fb7923aac3",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-agent",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-agent/src/agent.rs",
          "sha256": "8c7c889ebea73ce8d66dc6dea8423514b4491404b1b301fef701f21b44290503",
          "artifactSha256": "42875006811f206660b912ecc8ab556155731249acd328abacdab942c49e1b8d",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/agent.rs.txt",
          "declarations": [
            {
              "name": "::BoundaryContract",
              "line": 54,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]\npub struct BoundaryContract {\n\n}",
              "documentation": "The boundary contract enforced before any coding-provider session begins.\n\nThis is intentionally narrow for the first provider-security slice. It\ncovers the privilege checks the runtime must enforce before calling an\nexternal coding provider: network execution, delegated execution, and the\nlist of provider namespaces the agent may use."
            },
            {
              "name": "::BoundaryContract::new",
              "line": 62,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates an empty fail-closed boundary contract."
            },
            {
              "name": "::BoundaryContract::with_network_access",
              "line": 67,
              "signature": "pub fn with_network_access(mut self) -> Self;",
              "documentation": "Grants outbound network authority for coding-provider execution."
            },
            {
              "name": "::BoundaryContract::with_delegation_access",
              "line": 73,
              "signature": "pub fn with_delegation_access(mut self) -> Self;",
              "documentation": "Grants delegated execution authority for providers that may create sub-runs."
            },
            {
              "name": "::BoundaryContract::allow_provider_namespace",
              "line": 79,
              "signature": "pub fn allow_provider_namespace(mut self, namespace: impl Into<String>) -> Self;",
              "documentation": "Allows provider execution for a specific provider namespace."
            },
            {
              "name": "::ProviderIdentityVerification",
              "line": 99,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct ProviderIdentityVerification {\n/// The DID that was verified.\n\npub did: String,\n/// Whether the DID document's signature validated successfully.\n\npub signature_valid: bool,\n/// Whether the DID's lineage chain validated successfully.\n\npub lineage_valid: bool,\n/// Forge-owned conformance level derived from the upstream verification pipeline.\n\npub conformance_level: u8\n}",
              "documentation": "Result of verifying an agent DID through the execution authority backend."
            },
            {
              "name": "::ProviderAuthorityVerifier",
              "line": 112,
              "signature": "#[async_trait]\npub trait ProviderAuthorityVerifier: Send + Sync {\n    /// Verifies the given DID and returns the normalized authority result.\n    async fn verify_did(&self, did: &str) -> Result<ProviderIdentityVerification, ForgeAgentError>;\n}",
              "documentation": "Stable verification contract used by provider execution preflight."
            },
            {
              "name": "::CodingProviderPreflight",
              "line": 119,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct CodingProviderPreflight {\n/// The negotiated provider contract.\n\npub negotiation: ProviderNegotiationResult,\n/// The DID that passed execution-authority verification.\n\npub verified_did: String,\n/// The provider scopes that were validated against the active ACT.\n\npub required_scopes: Vec<String>\n}",
              "documentation": "Preflight result for an authorized coding-provider execution."
            },
            {
              "name": "::AegisProviderAuthorityVerifier",
              "line": 129,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub struct AegisProviderAuthorityVerifier {\n\n}",
              "documentation": ""
            },
            {
              "name": "::AegisProviderAuthorityVerifier::new",
              "line": 136,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn new(\n        registry: std::sync::Arc<aegis_core::PluginRegistry>,\n        config: aegis_core::VerificationConfig,\n    ) -> Self;",
              "documentation": "Creates a production verifier backed by the AEGIS verification pipeline."
            },
            {
              "name": "::AegisProviderAuthorityVerifier::from_pipeline",
              "line": 146,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn from_pipeline(pipeline: aegis_verify::VerificationPipeline) -> Self;",
              "documentation": "Wraps an existing AEGIS verification pipeline."
            },
            {
              "name": "::AgentConfig",
              "line": 206,
              "signature": "#[derive(Clone, Serialize, Deserialize)]\npub struct AgentConfig {\n\n}",
              "documentation": "Configuration for creating an agent.\n\n`AgentConfig` captures the immutable configuration that defines an agent's\nidentity, model, tools, behavior limits, and system prompt. Once an agent\nis created from a config, the config is not modified.\n\n# ANVIL Spec SS7.1\n\nThe agent execution loop is parameterized by a config that includes the\nmodel reference, available tools, maximum steps, and system prompt.\n\n# Examples\n\n```\nuse forge_agent::agent::AgentConfig;\nuse forge_core::tool::ToolDefinition;\nuse forge_core::tool::ToolTier;\n\nlet tool = ToolDefinition::builder(\"search\")\n    .description(\"Search the web\")\n    .tier(ToolTier::External)\n    .build();\n\nlet config = AgentConfig::new(\"researcher\", \"anthropic:claude-sonnet-4-5-20250929\")\n    .with_system_prompt(\"You are a research assistant.\")\n    .with_max_steps(15)\n    .with_tool(tool);\n\nassert_eq!(config.name(), \"researcher\");\nassert_eq!(config.tools().len(), 1);\n```"
            },
            {
              "name": "::AgentConfig::new",
              "line": 314,
              "signature": "pub fn new(name: impl Into<String>, model: impl Into<String>) -> Self;",
              "documentation": "Creates a new `AgentConfig` with the given name and model reference.\n\n# Arguments\n\n* `name` - A human-readable name for the agent (e.g., \"data-analyst\").\n* `model` - A provider reference string (e.g., \"openai:gpt-4o\").\n\n# Returns\n\nAn `AgentConfig` with default settings: no tools, max_steps=10, no system prompt.\n\n# Panics\n\nThis function does not panic. If the model reference is invalid, the error\nwill surface at agent creation time when the provider is resolved.\n\n# Examples\n\n```\nuse forge_agent::agent::AgentConfig;\n\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\");\nassert_eq!(config.name(), \"bot\");\nassert_eq!(config.max_steps(), 10);\nassert!(config.tools().is_empty());\nassert!(config.system_prompt().is_none());\n```"
            },
            {
              "name": "::AgentConfig::with_system_prompt",
              "line": 391,
              "signature": "pub fn with_system_prompt(mut self, prompt: impl Into<String>) -> Self;",
              "documentation": "Sets the system prompt for this agent.\n\nThe system prompt is prepended as a `System` role message to every\nLLM call made by the agent.\n\n# Arguments\n\n* `prompt` - The system prompt text.\n\n# Returns\n\nThe modified `AgentConfig` (builder pattern).\n\n# Examples\n\n```\nuse forge_agent::agent::AgentConfig;\n\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\")\n    .with_system_prompt(\"You are a helpful assistant.\");\nassert_eq!(config.system_prompt(), Some(\"You are a helpful assistant.\"));\n```"
            },
            {
              "name": "::AgentConfig::with_max_steps",
              "line": 415,
              "signature": "pub fn with_max_steps(mut self, max: u32) -> Self;",
              "documentation": "Sets the maximum number of tool loop steps.\n\n# Arguments\n\n* `max` - The maximum step count. Must be at least 1.\n\n# Returns\n\nThe modified `AgentConfig` (builder pattern).\n\n# Examples\n\n```\nuse forge_agent::agent::AgentConfig;\n\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\")\n    .with_max_steps(50);\nassert_eq!(config.max_steps(), 50);\n```"
            },
            {
              "name": "::AgentConfig::with_tool",
              "line": 441,
              "signature": "pub fn with_tool(mut self, tool: ToolDefinition) -> Self;",
              "documentation": "Adds a tool definition to this agent's available tools.\n\n# Arguments\n\n* `tool` - The tool definition to add.\n\n# Returns\n\nThe modified `AgentConfig` (builder pattern).\n\n# Examples\n\n```\nuse forge_agent::agent::AgentConfig;\nuse forge_core::tool::{ToolDefinition, ToolTier};\n\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\")\n    .with_tool(ToolDefinition::builder(\"clock\").tier(ToolTier::Platform).build())\n    .with_tool(ToolDefinition::builder(\"search\").tier(ToolTier::External).build());\nassert_eq!(config.tools().len(), 2);\n```"
            },
            {
              "name": "::AgentConfig::with_tools",
              "line": 455,
              "signature": "pub fn with_tools(mut self, tools: Vec<ToolDefinition>) -> Self;",
              "documentation": "Sets all tool definitions at once, replacing any previously added tools.\n\n# Arguments\n\n* `tools` - The complete list of tool definitions.\n\n# Returns\n\nThe modified `AgentConfig` (builder pattern)."
            },
            {
              "name": "::AgentConfig::with_tool_registry",
              "line": 501,
              "signature": "pub fn with_tool_registry(mut self, registry: &forge_tool::registry::ToolRegistry) -> Self;",
              "documentation": "Imports every tool definition from a [`ToolRegistry`] into this config.\n\nIn Forge's tool model, a tool needs to be present in two places to work\nend-to-end: the [`ToolRegistry`] (so the loop can EXECUTE the tool) and\n`AgentConfig.tools` (so the model SEES it in its system prompt). Forgetting\nthe second registration is a silent foot-gun -- the executor exists but\nthe model never knows the tool is available, so the tool just does\nnothing.\n\n`with_tool_registry` removes that hazard. Pass a built registry, get every\ndefinition appended to the agent config in one call:\n\n```\nuse forge_agent::agent::AgentConfig;\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::execution::FnToolExecutor;\nuse forge_core::tool::{ToolDefinition, ToolTier, ToolCall, ToolResult};\nuse std::sync::Arc;\n\nlet mut registry = ToolRegistry::new();\nlet def = ToolDefinition::builder(\"clock\").tier(ToolTier::Platform).build();\nlet exec = Arc::new(FnToolExecutor::new(\"clock\", |call: &ToolCall| {\n    Ok(ToolResult {\n        tool_call_id: call.id.clone(),\n        name: call.name.clone(),\n        content: \"2026-04-29T00:00:00Z\".to_string(),\n        is_error: false,\n    })\n}));\nregistry.register(def, exec).unwrap();\n\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\")\n    .with_tool_registry(&registry);\n\nassert_eq!(config.tools().len(), 1);\nassert_eq!(config.tools()[0].name(), \"clock\");\n```\n\nDefinitions already on the config are preserved -- this method *appends*.\nTo replace, call [`with_tools`](Self::with_tools) with an empty Vec first\nor build a fresh `AgentConfig`."
            },
            {
              "name": "::AgentConfig::with_boundary_contract",
              "line": 507,
              "signature": "pub fn with_boundary_contract(mut self, boundary_contract: BoundaryContract) -> Self;",
              "documentation": "Sets the provider execution boundary contract for coding-provider sessions."
            },
            {
              "name": "::AgentConfig::with_identity",
              "line": 544,
              "signature": "pub fn with_identity(mut self, identity: ForgeAgentIdentity) -> Self;",
              "documentation": "Sets the OAS identity for this agent.\n\nWhen an identity is configured, the agent carries a `did:oas` identifier\nwith an Ed25519 keypair and lineage proof chain. This enables:\n- Audit trail entries signed by the agent's key.\n- Identity-aware telemetry spans.\n- Arsenal ACT authorization checks for Tier 2 (Host) tools.\n\nSee ANVIL Spec SS11.1 -- OAS Identity Binding.\n\n# Arguments\n\n* `identity` - The agent's `ForgeAgentIdentity`.\n\n# Returns\n\nThe modified `AgentConfig` (builder pattern).\n\n# Examples\n\n```\nuse forge_agent::agent::AgentConfig;\nuse forge_identity::lineage::{create_hmr_identity, derive_agent_identity};\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet agent_id = derive_agent_identity(&hmr, \"bot\", \"test\").unwrap();\n\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\")\n    .with_identity(agent_id);\nassert!(config.identity().is_some());\nassert_eq!(config.agent_did(), Some(\"did:oas:test:agent:bot\"));\n```"
            },
            {
              "name": "::AgentConfig::with_act",
              "line": 577,
              "signature": "pub fn with_act(mut self, act: AgentCapabilityToken) -> Self;",
              "documentation": "Sets the Arsenal ACT (Agent Capability Token) for this agent.\n\nWhen an ACT is configured, Tier 2 (Host) tool invocations are checked\nagainst the ACT's scopes. Without an ACT, host tools execute in legacy\nmode (no authorization enforcement).\n\nSee ANVIL Spec SS8.7 -- Tool Authorization Gate.\n\n# Arguments\n\n* `act` - The agent's Arsenal capability token.\n\n# Returns\n\nThe modified `AgentConfig` (builder pattern).\n\n# Examples\n\n```no_run\nuse forge_agent::agent::AgentConfig;\n# use arsenal_core::token::AgentCapabilityToken;\n\n# fn example(act: AgentCapabilityToken) {\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\")\n    .with_act(act);\nassert!(config.act().is_some());\n# }\n```"
            },
            {
              "name": "::AgentConfig::name",
              "line": 583,
              "signature": "pub fn name(&self) -> &str;",
              "documentation": "Returns the agent's name."
            },
            {
              "name": "::AgentConfig::model",
              "line": 588,
              "signature": "pub fn model(&self) -> &ProviderRef;",
              "documentation": "Returns the provider reference for this agent's model."
            },
            {
              "name": "::AgentConfig::tools",
              "line": 593,
              "signature": "pub fn tools(&self) -> &[ToolDefinition];",
              "documentation": "Returns the tool definitions available to this agent."
            },
            {
              "name": "::AgentConfig::max_steps",
              "line": 598,
              "signature": "pub fn max_steps(&self) -> u32;",
              "documentation": "Returns the maximum number of tool loop steps."
            },
            {
              "name": "::AgentConfig::system_prompt",
              "line": 603,
              "signature": "pub fn system_prompt(&self) -> Option<&str>;",
              "documentation": "Returns the system prompt, if configured."
            },
            {
              "name": "::AgentConfig::boundary_contract",
              "line": 608,
              "signature": "pub fn boundary_contract(&self) -> Option<&BoundaryContract>;",
              "documentation": "Returns the configured provider execution boundary contract, if present."
            },
            {
              "name": "::AgentConfig::identity",
              "line": 619,
              "signature": "pub fn identity(&self) -> Option<&ForgeAgentIdentity>;",
              "documentation": "Returns the agent's OAS identity, if configured.\n\nWhen `Some`, the agent carries a cryptographic identity with an\nEd25519 keypair, signed OAS document, and lineage proof chain.\nWhen `None`, the agent is in legacy mode without identity binding.\n\nSee ANVIL Spec SS11.1 -- OAS Identity Binding."
            },
            {
              "name": "::AgentConfig::act",
              "line": 629,
              "signature": "pub fn act(&self) -> Option<&AgentCapabilityToken>;",
              "documentation": "Returns the agent's Arsenal ACT (Agent Capability Token), if configured.\n\nWhen `Some`, tool invocations for Tier 2 (Host) tools are checked\nagainst the ACT's scopes. When `None`, tools run in legacy mode.\n\nSee ANVIL Spec SS8.7 -- Tool Authorization Gate."
            },
            {
              "name": "::AgentConfig::agent_did",
              "line": 647,
              "signature": "pub fn agent_did(&self) -> Option<&str>;",
              "documentation": "Returns the agent's OAS DID string, if an identity is configured.\n\nThis is a convenience accessor equivalent to\n`config.identity().map(|id| id.did())`.\n\n# Examples\n\n```\nuse forge_agent::agent::AgentConfig;\n\n// No identity \u2014 returns None\nlet config = AgentConfig::new(\"bot\", \"openai:gpt-4o\");\nassert!(config.agent_did().is_none());\n```"
            },
            {
              "name": "::AgentConfig::preflight_coding_provider_execution",
              "line": 652,
              "signature": "pub async fn preflight_coding_provider_execution<V: ProviderAuthorityVerifier>(\n        &self,\n        registry: &ProviderRegistry,\n        request: &ProviderNegotiationRequest,\n        verifier: &V,\n    ) -> Result<CodingProviderPreflight, ForgeAgentError>;",
              "documentation": "Performs fail-closed provider security checks before coding-provider execution."
            },
            {
              "name": "::ToolInvocationRecord",
              "line": 815,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ToolInvocationRecord {\n/// The tool call id that the model assigned.\n\npub id: String,\n/// The tool's registered name.\n\npub name: String,\n/// Wall-clock timestamp at which the agent began executing the tool.\n\n///\n\n/// Serialized as RFC 3339. Set from `chrono::Utc::now()` immediately\n\n/// before the executor (or authorization gate / lookup) is invoked.\n\n#[serde(with = \"tool_invocation_started_at_serde\")]\npub started_at: chrono::DateTime<chrono::Utc>,\n/// Time elapsed between the start and the resolution of the invocation.\n\n///\n\n/// Captures the full latency: authorization check + executor + approval\n\n/// handler. Serialized as a struct (`{ \"secs\": u64, \"nanos\": u32 }`).\n\npub duration: std::time::Duration,\n/// Final status of the invocation.\n\npub status: ToolInvocationStatus\n}",
              "documentation": "Outcome of a single tool invocation captured during an agent's run.\n\nRecorded for every tool call the agent made, regardless of whether the\ninvocation succeeded, was denied by authorization, was rejected by the\napproval handler, or failed to find the tool. Pairs naturally with\n[`AgentOutput::tool_invocations`] for per-tool latency analysis,\nhistogram emission, or session telemetry.\n\nSee ANVIL Spec \u00a714.1 \u2014 Telemetry, \u00a78.5 \u2014 Tool Execution."
            },
            {
              "name": "::ModelInferenceRecord",
              "line": 842,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ModelInferenceRecord {\n/// Host or loop assigned id for this model call.\n\npub id: String,\n/// Model identifier selected for the call.\n\npub model: String,\n/// Provider identifier or namespace that served the call.\n\npub provider_id: String,\n/// Optional model-router or Foundry route id.\n\npub route_id: Option<String>,\n/// Governed artifact ref for the prompt payload.\n\npub prompt_ref: Option<String>,\n/// Governed artifact ref for the completion payload.\n\npub completion_ref: Option<String>,\n/// Prompt/input token count, when reported.\n\npub prompt_tokens: Option<u64>,\n/// Completion/output token count, when reported.\n\npub completion_tokens: Option<u64>,\n/// Wall-clock timestamp at which the model call began.\n\n#[serde(with = \"tool_invocation_started_at_serde\")]\npub started_at: chrono::DateTime<chrono::Utc>,\n/// Time elapsed between model call start and stream completion.\n\npub duration: std::time::Duration,\n/// Canonical Cambium outcome label, such as `success` or `failed`.\n\npub outcome: String\n}",
              "documentation": "Outcome of a single language-model inference captured during an agent run.\n\nThe record carries provider/model identifiers, governed prompt/completion\nrefs, token counts, and latency. It intentionally excludes raw prompt and\ncompletion text so telemetry sinks can project model activity without\nstoring sensitive payloads."
            },
            {
              "name": "::SubAgentDelegationRecord",
              "line": 873,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct SubAgentDelegationRecord {\n/// OAS/stable child agent id.\n\npub subagent_id: String,\n/// Host-assigned run id for the delegated sub-agent.\n\npub subagent_run_id: String,\n/// Optional summary of why the delegation happened.\n\npub delegation_reason: Option<String>,\n/// Governed artifact ref for the delegated instruction.\n\npub instruction_ref: Option<String>,\n/// Capability refs granted to the child.\n\npub capability_refs: Vec<String>,\n/// Governed artifact ref for handoff state.\n\npub handoff_ref: Option<String>,\n/// Wall-clock timestamp at which delegation started.\n\n#[serde(with = \"tool_invocation_started_at_serde\")]\npub started_at: chrono::DateTime<chrono::Utc>\n}",
              "documentation": "Semantic record for a parent agent delegating work to a sub-agent.\n\nRefs point to governed artifacts for instructions and handoff context.\nRaw instructions are intentionally not modeled here."
            },
            {
              "name": "::AgentEvent",
              "line": 900,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub enum AgentEvent {\n    /// A user message was added to the conversation.\n    UserMessage(String),\n    /// A system message was added to the conversation.\n    SystemMessage(String),\n    /// The assistant produced a text turn (no tool calls).\n    AssistantText(String),\n    /// The assistant called a tool. Pairs with a later [`AgentEvent::ToolResult`]\n    /// (matched on `id`) and, if the run captured timing,\n    /// [`AgentEvent::ToolInvocationCompleted`].\n    AssistantToolCall {\n        id: String,\n        name: String,\n        arguments: serde_json::Value,\n    },\n    /// The tool returned a result (already in the conversation as a `Role::Tool`\n    /// message). `is_error` reflects the tool result's own flag.\n    ToolResult {\n        id: String,\n        name: String,\n        content: String,\n        is_error: bool,\n    },\n    /// A timed tool invocation completed (lifted from\n    /// [`AgentOutput::tool_invocations`]). Carries the typed status, the\n    /// captured duration, and the wall-clock start.\n    ToolInvocationCompleted(ToolInvocationRecord),\n}",
              "documentation": "Typed agent execution event derived from a completed [`AgentOutput`].\n\nProvides a structured view over the messages and tool invocations of a\nrun so consumers can iterate semantic boundaries (assistant text, tool\ncalls, tool results) without walking `output.messages` and pattern\nmatching `MessagePart` themselves.\n\nBuild via [`AgentOutput::events`]."
            },
            {
              "name": "::ToolInvocationStatus",
              "line": 932,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ToolInvocationStatus {\n    /// The executor returned `Ok` and the tool result is not flagged as an error.\n    Succeeded,\n    /// The executor returned `Ok` but the tool result is flagged as an error.\n    /// Distinguished from `Failed` so callers can see \"the tool ran fine but\n    /// the model's request was wrong\" vs. \"the tool itself blew up.\"\n    SucceededWithToolError,\n    /// The tool name was not present in the registry.\n    NotFound,\n    /// Authorization (ACT scope check) denied the invocation.\n    AuthorizationDenied,\n    /// The executor returned `Err`.\n    Failed,\n}",
              "documentation": "Outcome status for a [`ToolInvocationRecord`]."
            },
            {
              "name": "tool_invocation_started_at_serde::serialize",
              "line": 951,
              "signature": "pub fn serialize<S>(value: &DateTime<Utc>, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: Serializer,;",
              "documentation": ""
            },
            {
              "name": "tool_invocation_started_at_serde::deserialize",
              "line": 958,
              "signature": "pub fn deserialize<'de, D>(deserializer: D) -> Result<DateTime<Utc>, D::Error>\n    where\n        D: Deserializer<'de>,;",
              "documentation": ""
            },
            {
              "name": "::AGENT_RUN_CHECKPOINT_SCHEMA",
              "line": 970,
              "signature": "pub const AGENT_RUN_CHECKPOINT_SCHEMA: &str;",
              "documentation": "Schema id for Forge agent run checkpoints."
            },
            {
              "name": "::AgentRunCheckpoint",
              "line": 979,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct AgentRunCheckpoint {\n/// Stable schema id. Must be [`AGENT_RUN_CHECKPOINT_SCHEMA`].\n\npub schema: String,\n/// Host-assigned run identifier.\n\npub run_id: String,\n/// Agent name from the originating [`AgentConfig`].\n\npub agent_name: String,\n/// Provider model reference from the originating [`AgentConfig`].\n\npub model: String,\n/// Number of tool-loop steps already consumed.\n\npub step_count: u32,\n/// Maximum steps allowed for the originating run.\n\npub max_steps: u32,\n/// Conversation state to pass back into [`Agent::run_with_messages`].\n\npub messages: Vec<ModelMessage>,\n/// Usage accumulated before the checkpoint was written.\n\npub usage: Usage,\n/// Final or latest assistant text available when the checkpoint was written.\n\npub final_text: String,\n/// Tool invocation audit records accumulated before the checkpoint was\n\n/// written.\n\n#[serde(default)]\npub tool_invocations: Vec<ToolInvocationRecord>\n}",
              "documentation": "Serializable checkpoint for resuming a Forge agent run.\n\nThis is a runtime checkpoint envelope, not a storage backend. Hosts such as\nKin, Flocks, or a custom scheduler can persist this value anywhere, validate\nit against the intended [`AgentConfig`], and resume with\n[`Agent::run_with_messages`] using [`Self::resume_messages`]."
            },
            {
              "name": "::AgentRunCheckpoint::validate_for",
              "line": 1014,
              "signature": "pub fn validate_for(&self, config: &AgentConfig) -> Result<(), AgentCheckpointValidationError>;",
              "documentation": "Validate this checkpoint against the config that will resume it.\n\nThis prevents a host from accidentally resuming a checkpoint under the\nwrong agent, model, or step budget.\n\n# Errors\n\nReturns [`AgentCheckpointValidationError`] when the schema, run id,\nagent name, model reference, or step budget does not match."
            },
            {
              "name": "::AgentRunCheckpoint::resume_messages",
              "line": 1054,
              "signature": "pub fn resume_messages(&self) -> &[ModelMessage];",
              "documentation": "Returns the conversation messages to resume with\n[`Agent::run_with_messages`]."
            },
            {
              "name": "::AgentRunCheckpoint::remaining_steps",
              "line": 1059,
              "signature": "pub fn remaining_steps(&self) -> u32;",
              "documentation": "Returns how many tool-loop steps remain before max-step exhaustion."
            },
            {
              "name": "::AgentRunCheckpoint::resume_config_for",
              "line": 1075,
              "signature": "pub fn resume_config_for(\n        &self,\n        config: &AgentConfig,\n    ) -> Result<AgentConfig, AgentCheckpointValidationError>;",
              "documentation": "Validate this checkpoint and build an [`AgentConfig`] for resume that\nuses only the remaining step budget.\n\nHosts that recreate agents for resumed runs should use this instead of\nreusing the original config unchanged; otherwise a resumed agent could\nreceive a fresh full step budget after already consuming part of the\noriginal run.\n\n# Errors\n\nReturns [`AgentCheckpointValidationError`] when the checkpoint does not\nmatch the supplied config or when no step budget remains."
            },
            {
              "name": "::AgentRunCheckpoint::digest_sha256",
              "line": 1099,
              "signature": "pub fn digest_sha256(&self) -> Result<String, serde_json::Error>;",
              "documentation": "Compute a stable SHA-256 digest over the serialized checkpoint envelope.\n\nHosts can persist this digest next to the checkpoint reference so another\nagent, scheduler, or launch gate can detect tampering after storage or\ntransfer without changing the checkpoint schema.\n\n# Errors\n\nReturns the underlying JSON serialization error if the checkpoint cannot\nbe serialized."
            },
            {
              "name": "::AgentRunCheckpoint::verify_digest_sha256",
              "line": 1115,
              "signature": "pub fn verify_digest_sha256(\n        &self,\n        expected: &str,\n    ) -> Result<(), AgentCheckpointValidationError>;",
              "documentation": "Verify this checkpoint against an expected SHA-256 digest.\n\nThis helper keeps host launch gates from hand-rolling digest-shape and\nmismatch checks differently across Kin, Flocks, AGX, or custom\nschedulers.\n\n# Errors\n\nReturns [`AgentCheckpointValidationError`] when the expected digest is\nmalformed, the checkpoint cannot be serialized for hashing, or the\ncomputed checkpoint digest does not match."
            },
            {
              "name": "::AgentCheckpointValidationError",
              "line": 1156,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub enum AgentCheckpointValidationError {\n    /// Checkpoint schema is not the supported Forge checkpoint schema.\n    SchemaMismatch {\n        /// Expected schema id.\n        expected: String,\n        /// Schema id found in the checkpoint.\n        found: String,\n    },\n    /// Checkpoint run id is empty.\n    EmptyRunId,\n    /// Checkpoint belongs to a different agent name.\n    AgentNameMismatch {\n        /// Expected agent name.\n        expected: String,\n        /// Agent name found in the checkpoint.\n        found: String,\n    },\n    /// Checkpoint belongs to a different model reference.\n    ModelMismatch {\n        /// Expected provider model reference.\n        expected: String,\n        /// Model reference found in the checkpoint.\n        found: String,\n    },\n    /// Checkpoint max-step budget differs from the resume config.\n    MaxStepsMismatch {\n        /// Expected max-step budget.\n        expected: u32,\n        /// Max-step budget found in the checkpoint.\n        found: u32,\n    },\n    /// Checkpoint has already consumed more steps than the budget allows.\n    StepCountExceedsMax {\n        /// Steps already consumed.\n        step_count: u32,\n        /// Maximum allowed steps.\n        max_steps: u32,\n    },\n    /// Checkpoint has no remaining steps for a resumed run.\n    StepBudgetExhausted {\n        /// Original maximum allowed steps.\n        max_steps: u32,\n    },\n    /// Expected checkpoint digest is not a SHA-256 hex string.\n    InvalidDigest {\n        /// Digest value that failed shape validation.\n        found: String,\n    },\n    /// Checkpoint could not be serialized for digest verification.\n    DigestSerializationFailed {\n        /// Serialization failure message.\n        message: String,\n    },\n    /// Checkpoint digest does not match expected evidence.\n    DigestMismatch {\n        /// Expected checkpoint digest.\n        expected: String,\n        /// Actual checkpoint digest.\n        found: String,\n    },\n}",
              "documentation": "Validation failure for a Forge agent run checkpoint."
            },
            {
              "name": "::AgentOutput",
              "line": 1303,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AgentOutput {\n/// The complete conversation history including all user, assistant,\n\n/// and tool messages exchanged during execution.\n\npub messages: Vec<ModelMessage>,\n/// Cumulative token usage across all LLM calls during execution.\n\npub usage: Usage,\n/// The number of tool loop steps taken (each LLM call counts as one step).\n\npub steps_taken: u32,\n/// The final text response produced by the agent.\n\n///\n\n/// This is the text content of the last assistant message that did not\n\n/// contain tool calls (i.e., the terminal response).\n\npub final_text: String,\n/// Per-tool invocation records collected during the run.\n\n///\n\n/// One entry per tool call attempted, in the order they were executed.\n\n/// Includes name, wall-clock start, duration, and final status (succeeded /\n\n/// failed / authorization-denied / not-found). Backfilled to an empty\n\n/// `Vec` when constructing `AgentOutput` from older code paths or when\n\n/// deserializing payloads that pre-date this field.\n\n#[serde(default)]\npub tool_invocations: Vec<ToolInvocationRecord>\n}",
              "documentation": "The output produced by an agent's execution.\n\nContains the complete conversation history, token usage statistics,\nthe number of steps taken, the final text response, and per-tool\ninvocation records.\n\n# ANVIL Spec SS7.1\n\nAgent output includes the final response text, accumulated usage\nstatistics, step count, and tool invocation history for observability\nand audit purposes.\n\n# Examples\n\n```\nuse forge_agent::agent::AgentOutput;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::output::Usage;\n\nlet output = AgentOutput {\n    messages: vec![\n        ModelMessage::text(Role::User, \"What is 2+2?\"),\n        ModelMessage::text(Role::Assistant, \"The answer is 4.\"),\n    ],\n    usage: Usage { prompt_tokens: 10, completion_tokens: 5, total_tokens: 15 },\n    steps_taken: 1,\n    final_text: \"The answer is 4.\".to_string(),\n    tool_invocations: Vec::new(),\n};\nassert_eq!(output.steps_taken, 1);\nassert_eq!(output.final_text, \"The answer is 4.\");\nassert!(output.tool_invocations.is_empty());\n```"
            },
            {
              "name": "::AgentOutput::to_checkpoint",
              "line": 1337,
              "signature": "pub fn to_checkpoint(\n        &self,\n        run_id: impl Into<String>,\n        config: &AgentConfig,\n    ) -> AgentRunCheckpoint;",
              "documentation": "Build a serializable checkpoint from this completed or partial output.\n\nHosts can persist the returned [`AgentRunCheckpoint`] and later validate\nit with [`AgentRunCheckpoint::validate_for`] before resuming with\n[`Agent::run_with_messages`]."
            },
            {
              "name": "::AgentOutput::events",
              "line": 1391,
              "signature": "pub fn events(&self) -> impl Iterator<Item = AgentEvent> + '_;",
              "documentation": "Returns a typed event stream derived from `messages` and `tool_invocations`.\n\nWalks the conversation in order and emits one [`AgentEvent`] per\nsemantic boundary -- user message, system message, assistant text turn,\nassistant tool call, tool result -- followed by every\n[`ToolInvocationRecord`] as a [`AgentEvent::ToolInvocationCompleted`]\nat the end. The trailing block lets observers do per-tool latency\nanalysis without walking `tool_invocations` separately.\n\nThis is a non-allocating projection: the iterator clones strings as\nit goes but never materializes the full event vector. Consumers that\nneed a `Vec` can call `.collect()`.\n\n# Examples\n\n```\nuse forge_agent::agent::{AgentEvent, AgentOutput};\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::output::Usage;\n\nlet output = AgentOutput {\n    messages: vec![\n        ModelMessage::text(Role::User, \"hi\"),\n        ModelMessage::text(Role::Assistant, \"hello\"),\n    ],\n    usage: Usage::zero(),\n    steps_taken: 1,\n    final_text: \"hello\".to_string(),\n    tool_invocations: Vec::new(),\n};\nlet events: Vec<_> = output.events().collect();\nassert_eq!(events.len(), 2);\nassert!(matches!(events[0], AgentEvent::UserMessage(_)));\nassert!(matches!(events[1], AgentEvent::AssistantText(_)));\n```"
            },
            {
              "name": "::Agent",
              "line": 1504,
              "signature": "#[async_trait]\npub trait Agent: Send + Sync {\n    /// Returns the agent's configuration.\n    ///\n    /// # Returns\n    ///\n    /// A reference to the [`AgentConfig`] used to create this agent.\n    fn config(&self) -> &AgentConfig;\n\n    /// Returns a snapshot of the agent's current health profile.\n    ///\n    /// The health profile contains runtime metrics: uptime, error counts,\n    /// tool invocations, inference statistics, and resource usage. Returns\n    /// a clone because the profile is mutated concurrently during execution\n    /// (behind interior mutability).\n    ///\n    /// # ANVIL Spec SS14.1\n    ///\n    /// Health profiles are part of the telemetry contract. They are exposed\n    /// for monitoring and audit trail consumption.\n    ///\n    /// # Returns\n    ///\n    /// A cloned snapshot of the agent's [`HealthProfile`].\n    fn health(&self) -> HealthProfile;\n\n    /// Returns the agent's current lifecycle state.\n    ///\n    /// # ANVIL Spec SS13.2\n    ///\n    /// The lifecycle state machine has six states: Initializing, Ready,\n    /// Running, Paused, Error, Terminated. See the spec for the complete\n    /// transition table.\n    ///\n    /// # Returns\n    ///\n    /// The current [`LifecycleState`].\n    fn lifecycle(&self) -> LifecycleState;\n\n    /// Runs the agent with a text prompt.\n    ///\n    /// This is the primary entry point for agent execution. It creates an\n    /// initial user message from the prompt and delegates to\n    /// [`run_with_messages`](Self::run_with_messages).\n    ///\n    /// # ANVIL Spec SS7.1\n    ///\n    /// The agent execution loop:\n    /// 1. Send messages to the LLM.\n    /// 2. If the response contains tool calls, execute them and loop.\n    /// 3. If the response is text only, return the final result.\n    /// 4. Check stop conditions after each step.\n    ///\n    /// # Arguments\n    ///\n    /// * `prompt` - The user's text prompt to process.\n    ///\n    /// # Returns\n    ///\n    /// An [`AgentOutput`] containing the final response, conversation history,\n    /// usage statistics, and step count.\n    ///\n    /// # Errors\n    ///\n    /// * [`ForgeAgentError::ToolLoopFailed`] -- if a tool loop step fails.\n    /// * [`ForgeAgentError::LifecycleError`] -- if the agent is not in a runnable state.\n    /// * [`ForgeAgentError::StopConditionReached`] -- if max steps or tokens are exceeded.\n    /// * [`ForgeAgentError::Generate`] -- if the underlying model call fails.\n    /// * [`ForgeAgentError::Tool`] -- if a tool execution fails.\n    async fn run(&self, prompt: &str) -> Result<AgentOutput, ForgeAgentError>;\n\n    /// Runs the agent with a pre-constructed message list.\n    ///\n    /// This is the lower-level entry point that allows callers to provide\n    /// the complete conversation history, including system messages, tool\n    /// results, and previous exchanges.\n    ///\n    /// # Arguments\n    ///\n    /// * `messages` - The initial message list to process.\n    ///\n    /// # Returns\n    ///\n    /// An [`AgentOutput`] containing the final response and metadata.\n    ///\n    /// # Errors\n    ///\n    /// Same error variants as [`run()`](Self::run).\n    async fn run_with_messages(\n        &self,\n        messages: Vec<ModelMessage>,\n    ) -> Result<AgentOutput, ForgeAgentError>;\n}",
              "documentation": "The core agent trait.\n\nAll agent implementations -- tool loop agents, workflow agents, sub-agents --\nimplement this trait. It provides a uniform interface for running agents and\ninspecting their state.\n\n# ANVIL Spec Reference\n\n- SS5.1 -- Lifecycle State Machine: `lifecycle()` returns the current state.\n- SS7.1 -- Agent Execution Loop: `run()` executes the agent.\n- SS14.1 -- Telemetry: `health()` returns the health profile.\n\n# Thread Safety\n\nAgents must be `Send + Sync` because they may be shared across async tasks\n(e.g., in parallel workflows or agent pools).\n\n# Examples\n\n```no_run\nuse forge_agent::agent::{Agent, AgentOutput};\nuse forge_agent::error::ForgeAgentError;\nuse forge_core::message::ModelMessage;\n\nasync fn run_agent(agent: &dyn Agent) -> Result<AgentOutput, ForgeAgentError> {\n    agent.run(\"What is 2+2?\").await\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/cambium.rs",
          "sha256": "d55ca139681664d21857ea2529daf61e330c3e5279d496213b4c9f7dc53e00f2",
          "artifactSha256": "8bcc78b6ec8a26df4cc3ef0e95c9e6065cd19b1185ef4bf254dd58ed84daf3ad",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/cambium.rs.txt",
          "declarations": [
            {
              "name": "pub use cambium_sdk_rs::{CambiumEvent, CambiumJson, CambiumScope};",
              "line": 15,
              "signature": "pub use cambium_sdk_rs::{CambiumEvent, CambiumJson, CambiumScope};",
              "documentation": ""
            },
            {
              "name": "::ForgeCambiumObserverConfig",
              "line": 24,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct ForgeCambiumObserverConfig {\n/// Cambium tenant/product scope assigned by the embedding host.\n\npub scope: CambiumScope,\n/// Host-assigned Forge run id.\n\npub run_id: String,\n/// OAS agent id or stable agent identifier for lineage.\n\npub agent_id: String,\n/// Principal that requested or authorized the Forge run.\n\npub principal_id: String,\n/// Authentication authority for the principal, when known.\n\npub authenticated_by: Option<String>,\n/// Stable event id prefix used with each Forge tool call id.\n\npub event_id_prefix: String,\n/// Optional distributed trace id.\n\npub trace_id: Option<String>,\n/// Optional span id paired with `trace_id`.\n\npub span_id: Option<String>,\n/// Initial producer sequence. The first emitted event increments from this.\n\npub producer_sequence_start: u64\n}",
              "documentation": "Configuration for projecting Forge observer callbacks into Cambium events."
            },
            {
              "name": "::CambiumAgentLoopObserver",
              "line": 46,
              "signature": "pub struct CambiumAgentLoopObserver {\n\n}",
              "documentation": "Forge [`AgentLoopObserver`] that records Cambium events in a drainable outbox."
            },
            {
              "name": "::CambiumAgentLoopObserver::try_new",
              "line": 59,
              "signature": "pub fn try_new(config: ForgeCambiumObserverConfig) -> Result<Self, String>;",
              "documentation": "Create a Cambium observer after validating static launch context fields.\n\n# Errors\n\nReturns an error if required scope, run, agent, principal, or event id\nprefix fields are blank."
            },
            {
              "name": "::CambiumAgentLoopObserver::events",
              "line": 76,
              "signature": "#[must_use]\npub fn events(&self) -> Vec<CambiumEvent>;",
              "documentation": "Return a snapshot of buffered Cambium events without clearing them."
            },
            {
              "name": "::CambiumAgentLoopObserver::drain_events",
              "line": 85,
              "signature": "#[must_use]\npub fn drain_events(&self) -> Vec<CambiumEvent>;",
              "documentation": "Drain buffered Cambium events for host-side signing and delivery."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/context_manager.rs",
          "sha256": "fffd8cfc51712e9c21f0c9fdfe862e616c5374cc18fe8c99acac5e32fe4e6f83",
          "artifactSha256": "a19e59b9dd0ec89a3512f5401f010421e2d5dfdc4f3374939b5fa7febf3bf9a9",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/context_manager.rs.txt",
          "declarations": [
            {
              "name": "::PruningStrategy",
              "line": 22,
              "signature": "#[derive(Debug, Clone, Copy)]\npub enum PruningStrategy {\n    /// Remove the oldest non-system messages first.\n    RemoveOldest,\n    /// Keep system prompt + the last N messages (sliding window).\n    SlidingWindow {\n        /// Maximum number of recent messages to keep (in addition to system).\n        keep_last: usize,\n    },\n    /// Summarize older messages into a single system message.\n    /// (Future: will use the model to generate a summary.)\n    Summarize,\n}",
              "documentation": "Strategy for pruning messages when the context window is nearly full."
            },
            {
              "name": "::ContextWindowConfig",
              "line": 37,
              "signature": "#[derive(Debug, Clone)]\npub struct ContextWindowConfig {\n/// Maximum number of tokens the model supports.\n\npub max_context_tokens: u64,\n/// Threshold ratio (0.0\u20131.0) at which to start pruning.\n\n/// Default: 0.85 (prune when 85% of context is used).\n\npub threshold_ratio: f64,\n/// Estimated tokens per message for the simple estimator.\n\n/// Default: 4 (roughly 4 tokens per word, ~100 words per message = 400).\n\npub tokens_per_char: f64,\n/// Pruning strategy to use when threshold is exceeded.\n\npub strategy: PruningStrategy\n}",
              "documentation": "Configuration for context window management."
            },
            {
              "name": "::ContextWindowManager",
              "line": 80,
              "signature": "pub struct ContextWindowManager {\n\n}",
              "documentation": "Manages the conversation context window to prevent overflow.\n\nImplements [`PrepareStep`] so it can be plugged into the agent's tool loop\nas a pre-step hook. Before each LLM call, it estimates the token count and\nprunes messages if the threshold is exceeded.\n\n# Examples\n\n```\nuse forge_agent::context_manager::{ContextWindowManager, ContextWindowConfig, PruningStrategy};\n\nlet config = ContextWindowConfig {\n    max_context_tokens: 128_000,\n    threshold_ratio: 0.85,\n    strategy: PruningStrategy::SlidingWindow { keep_last: 20 },\n    ..ContextWindowConfig::default()\n};\nlet manager = ContextWindowManager::new(config);\n```"
            },
            {
              "name": "::ContextWindowManager::new",
              "line": 86,
              "signature": "pub fn new(config: ContextWindowConfig) -> Self;",
              "documentation": "Create a new context window manager with the given configuration."
            },
            {
              "name": "::ContextWindowManager::for_context_size",
              "line": 91,
              "signature": "pub fn for_context_size(max_tokens: u64) -> Self;",
              "documentation": "Create a manager with default settings for a given context size."
            },
            {
              "name": "::ContextWindowManager::estimate_tokens",
              "line": 102,
              "signature": "pub fn estimate_tokens(&self, messages: &[ModelMessage]) -> u64;",
              "documentation": "Estimate the token count for a set of messages.\n\nUses a simple character-based estimation. Production implementations\nshould use a proper tokenizer."
            },
            {
              "name": "::ContextWindowManager::threshold_tokens",
              "line": 116,
              "signature": "pub fn threshold_tokens(&self) -> u64;",
              "documentation": "Returns the configured threshold in tokens."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/error.rs",
          "sha256": "a14655daf1adde0a63aecf6d3b61545a56aa6a704bbe2315a506fcdffb7e0f69",
          "artifactSha256": "39d3e58075bc57924ee7dddf99a6064631dbf54eba57a72f1713471ad225ac0d",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeAgentError",
              "line": 35,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeAgentError {\n    /// The agent's tool loop failed during execution.\n    ///\n    /// This error indicates that a step within the agent's tool loop encountered\n    /// an unrecoverable failure. The `step` field indicates which iteration\n    /// failed, and `reason` explains what went wrong.\n    ///\n    /// See ANVIL Spec SS7.1 -- Agent Execution Loop.\n    #[error(\"agent '{agent_name}' tool loop failed at step {step}: {reason}\")]\n    ToolLoopFailed {\n        /// The name of the agent whose tool loop failed.\n        agent_name: String,\n        /// The step number (1-indexed) at which the failure occurred.\n        step: u32,\n        /// A human-readable description of what went wrong.\n        reason: String,\n    },\n\n    /// A workflow orchestration step failed.\n    ///\n    /// This error wraps failures that occur during sequential, parallel, or\n    /// router workflow execution. It identifies which agent within the workflow\n    /// caused the failure.\n    ///\n    /// See ANVIL Spec SS7.2 -- Agent Workflows.\n    #[error(\"workflow '{workflow_name}' failed at agent '{agent_name}': {reason}\")]\n    WorkflowFailed {\n        /// The name of the workflow that failed.\n        workflow_name: String,\n        /// The name of the agent within the workflow that caused the failure.\n        agent_name: String,\n        /// A human-readable description of the failure.\n        reason: String,\n    },\n\n    /// A sub-agent delegation failed.\n    ///\n    /// This error occurs when creating or executing a sub-agent that was\n    /// delegated work from a parent agent. The parent-child relationship\n    /// is captured in the error context.\n    ///\n    /// See ANVIL Spec SS11.2 -- Lineage Propagation.\n    #[error(\n        \"sub-agent delegation failed: parent '{parent_name}' -> child '{child_name}': {reason}\"\n    )]\n    SubAgentFailed {\n        /// The parent agent that initiated the delegation.\n        parent_name: String,\n        /// The child agent that failed.\n        child_name: String,\n        /// A human-readable description of the failure.\n        reason: String,\n    },\n\n    /// A lifecycle state machine violation occurred.\n    ///\n    /// This error wraps [`forge_health::error::ForgeHealthError`] when an agent\n    /// attempts an invalid lifecycle transition (e.g., running a terminated agent).\n    ///\n    /// See ANVIL Spec SS5.1 -- Lifecycle State Machine.\n    #[error(\"lifecycle error in agent '{agent_name}': {reason}\")]\n    LifecycleError {\n        /// The agent whose lifecycle is in an invalid state.\n        agent_name: String,\n        /// A human-readable explanation of the lifecycle violation.\n        reason: String,\n    },\n\n    /// An inter-agent messaging operation failed.\n    ///\n    /// This error occurs when sending or receiving messages between agents\n    /// via agent channels. Common causes include channel closure and capacity\n    /// exhaustion.\n    #[error(\"agent messaging error: {reason}\")]\n    MessageError {\n        /// A human-readable description of the messaging failure.\n        reason: String,\n    },\n\n    /// The agent's stop condition was reached.\n    ///\n    /// This is a structured termination, not a failure. The agent stopped\n    /// because its configured stop condition (max steps, max tokens, or a\n    /// custom predicate) was satisfied.\n    ///\n    /// See ANVIL Spec SS7.1 -- Agent Execution Loop, stop conditions.\n    #[error(\"agent '{agent_name}' stopped: {reason} (steps={steps_taken}, tokens={tokens_used})\")]\n    StopConditionReached {\n        /// The agent that was stopped.\n        agent_name: String,\n        /// Why the agent stopped.\n        reason: String,\n        /// Number of tool loop steps completed.\n        steps_taken: u32,\n        /// Total tokens consumed across all steps.\n        tokens_used: u64,\n    },\n\n    /// Tool invocation was denied by the authorization gate (ANVIL Spec SS8.7).\n    ///\n    /// This error occurs when a Host (Tier 2) tool is invoked but the agent's\n    /// Arsenal ACT does not grant the required scope. Platform (Tier 1) and\n    /// Embedded (Tier 3) tools are never denied.\n    ///\n    /// See ANVIL Spec SS8.7 -- Tool Authorization Gate.\n    #[error(\"tool '{tool_name}' authorization denied for agent '{agent_did}': {reason}\")]\n    AuthorizationDenied {\n        /// The DID of the agent that was denied.\n        agent_did: String,\n        /// The tool that was requested.\n        tool_name: String,\n        /// A human-readable explanation of the denial.\n        reason: String,\n    },\n\n    /// Coding-provider execution was denied by the active boundary contract.\n    #[error(\"coding-provider execution denied for agent '{agent_name}' on provider '{provider_ref}': {reason}\")]\n    BoundaryContractDenied {\n        /// The human-readable agent name.\n        agent_name: String,\n        /// The provider reference that was denied.\n        provider_ref: String,\n        /// Why the boundary contract denied the execution.\n        reason: String,\n    },\n\n    /// AEGIS-backed delegation or authority validation failed before provider execution.\n    #[error(\"coding-provider delegation denied for agent '{agent_name}' on provider '{provider_ref}': {reason}\")]\n    DelegationDenied {\n        /// The human-readable agent name.\n        agent_name: String,\n        /// The provider reference that was denied.\n        provider_ref: String,\n        /// Why the delegation or authority check failed.\n        reason: String,\n    },\n\n    /// The agent's ACT does not grant the provider scope required for execution.\n    #[error(\"coding-provider scope denied for agent '{agent_name}' on provider '{provider_ref}': missing scope '{required_scope}' in ACT {act_id}\")]\n    CredentialScopeDenied {\n        /// The human-readable agent name.\n        agent_name: String,\n        /// The provider reference being executed.\n        provider_ref: String,\n        /// The scope required by the provider execution preflight.\n        required_scope: String,\n        /// The ACT that was checked, or `[missing]` when no ACT was configured.\n        act_id: String,\n    },\n\n    /// Identity derivation failed during sub-agent creation.\n    ///\n    /// This error occurs when a parent agent attempts to derive a child agent\n    /// identity, but the OAS key derivation or document construction fails.\n    ///\n    /// See ANVIL Spec SS11.2 -- Lineage Propagation.\n    #[error(\"identity derivation failed for sub-agent '{child_name}' from parent '{parent_did}': {reason}\")]\n    IdentityDerivationFailed {\n        /// The parent agent's OAS DID.\n        parent_did: String,\n        /// The child agent's intended name.\n        child_name: String,\n        /// A human-readable description of what went wrong.\n        reason: String,\n    },\n\n    /// A `forge-core` error occurred during agent execution.\n    #[error(\"core error: {0}\")]\n    Core(#[from] forge_core::error::ForgeError),\n\n    /// A `forge-generate` error occurred during inference.\n    #[error(\"generation error: {0}\")]\n    Generate(#[from] forge_generate::ForgeGenerateError),\n\n    /// A `forge-tool` error occurred during tool execution.\n    #[error(\"tool error: {0}\")]\n    Tool(#[from] forge_tool::error::ForgeToolError),\n\n    /// A `forge-health` error occurred during lifecycle management.\n    #[error(\"health error: {0}\")]\n    Health(#[from] forge_health::error::ForgeHealthError),\n\n    /// A `forge-identity` error occurred during identity operations.\n    #[error(\"identity error: {0}\")]\n    Identity(#[from] forge_identity::error::ForgeIdentityError),\n\n    /// A `forge-auth` error occurred during authorization operations.\n    #[error(\"auth error: {0}\")]\n    Auth(#[from] forge_auth::error::ForgeAuthError),\n}",
              "documentation": "Error type for agent execution, workflow orchestration, and inter-agent\ncommunication 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_agent::error::ForgeAgentError;\n\nlet err = ForgeAgentError::ToolLoopFailed {\n    agent_name: \"data-analyst\".to_string(),\n    step: 3,\n    reason: \"tool 'search' execution failed: connection timeout\".to_string(),\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"data-analyst\"));\nassert!(msg.contains(\"step 3\"));\n```"
            },
            {
              "name": "::ForgeAgentResult",
              "line": 227,
              "signature": "pub type ForgeAgentResult<T> = Result<T, ForgeAgentError>;",
              "documentation": "A specialized `Result` type for `forge-agent` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/lib.rs",
          "sha256": "9ed2d7c04865c5d9d24374495ca8870a865cfd97dbf51bb9d1630bc98204345f",
          "artifactSha256": "7098062faf907fb3c3697f6adc3effbc19a4e0e2476043c5b42f1e8b42d596ff",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/lib.rs.txt",
          "declarations": [
            {
              "name": "agent",
              "line": 59,
              "signature": "pub mod agent;",
              "documentation": "# forge-agent\n\nANVIL-compliant agent execution loop, workflows, and multi-agent orchestration\nfor the Forge SDK.\n\nThis crate provides the core agent abstractions for building AI agents:\n\n| Module | Purpose |\n|--------|---------|\n| [`agent`] | The [`Agent`](agent::Agent) trait, [`AgentConfig`](agent::AgentConfig), and [`AgentOutput`](agent::AgentOutput) |\n| [`tool_loop`] | [`ToolLoopAgent`](tool_loop::ToolLoopAgent) -- the reference ANVIL agent execution loop |\n| [`workflow`] | Sequential, parallel, and router workflow orchestration |\n| [`subagent`] | Sub-agent creation with narrowed capabilities |\n| [`messaging`] | Inter-agent communication via bounded async channels |\n| [`loop_control`] | Stop conditions and pre-step hooks |\n| [`error`] | Typed error types for all agent operations |\n\n# ANVIL Spec Reference\n\nThis crate implements:\n- **SS13.2** -- Lifecycle State Machine (6 states, immutable transitions)\n- **SS7.1** -- Agent Execution Loop (tool loop algorithm)\n- **SS7.2** -- Agent Workflows (sequential, parallel, router)\n- **SS8.5** -- Tool Execution (3-tier classification, approval pipeline)\n- **SS11.2** -- Lineage Propagation (sub-agent delegation)\n- **SS14.1** -- Telemetry (health profiles, tracing spans)\n\n# Quick Start\n\n```no_run\nuse forge_agent::prelude::*;\nuse forge_core::model::LanguageModel;\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::approval::AutoApprove;\nuse std::sync::Arc;\n\nasync fn run(model: Arc<dyn LanguageModel>) {\n    let config = AgentConfig::new(\"assistant\", \"openai:gpt-4o\")\n        .with_system_prompt(\"You are a helpful assistant.\")\n        .with_max_steps(10);\n\n    let registry = ToolRegistry::new();\n    let approval = Arc::new(AutoApprove);\n\n    let agent = ToolLoopAgent::new(config, model, registry, approval);\n    let output = agent.run(\"What is 2+2?\").await;\n}\n```"
            },
            {
              "name": "cambium",
              "line": 60,
              "signature": "pub mod cambium;",
              "documentation": ""
            },
            {
              "name": "context_manager",
              "line": 61,
              "signature": "pub mod context_manager;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 62,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "loop_control",
              "line": 63,
              "signature": "pub mod loop_control;",
              "documentation": ""
            },
            {
              "name": "messaging",
              "line": 65,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod messaging;",
              "documentation": ""
            },
            {
              "name": "observer",
              "line": 66,
              "signature": "pub mod observer;",
              "documentation": ""
            },
            {
              "name": "streaming_tool_loop",
              "line": 67,
              "signature": "pub mod streaming_tool_loop;",
              "documentation": ""
            },
            {
              "name": "subagent",
              "line": 68,
              "signature": "pub mod subagent;",
              "documentation": ""
            },
            {
              "name": "tool_loop",
              "line": 69,
              "signature": "pub mod tool_loop;",
              "documentation": ""
            },
            {
              "name": "workflow",
              "line": 70,
              "signature": "pub mod workflow;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 81,
              "signature": "pub mod prelude;",
              "documentation": "Prelude module for convenient imports.\n\nImport everything you need for typical agent usage with:\n\n```\nuse forge_agent::prelude::*;\n```\n\nThis re-exports the most commonly used types from all modules."
            },
            {
              "name": "pub use crate::agent::AegisProviderAuthorityVerifier;",
              "line": 83,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::agent::AegisProviderAuthorityVerifier;",
              "documentation": ""
            },
            {
              "name": "pub use crate::agent::{\n        Agent, AgentCheckpointValidationError, AgentConfig, AgentEvent, AgentOutput,\n        AgentRunCheckpoint, BoundaryContract, CodingProviderPreflight, ModelInferenceRecord,\n        ProviderAuthorityVerifier, ProviderIdentityVerification, SubAgentDelegationRecord,\n        ToolInvocationRecord, ToolInvocationStatus, AGENT_RUN_CHECKPOINT_SCHEMA,\n    };",
              "line": 84,
              "signature": "pub use crate::agent::{\n        Agent, AgentCheckpointValidationError, AgentConfig, AgentEvent, AgentOutput,\n        AgentRunCheckpoint, BoundaryContract, CodingProviderPreflight, ModelInferenceRecord,\n        ProviderAuthorityVerifier, ProviderIdentityVerification, SubAgentDelegationRecord,\n        ToolInvocationRecord, ToolInvocationStatus, AGENT_RUN_CHECKPOINT_SCHEMA,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::cambium::{\n        CambiumAgentLoopObserver, CambiumEvent, CambiumJson, CambiumScope,\n        ForgeCambiumObserverConfig,\n    };",
              "line": 90,
              "signature": "pub use crate::cambium::{\n        CambiumAgentLoopObserver, CambiumEvent, CambiumJson, CambiumScope,\n        ForgeCambiumObserverConfig,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::context_manager::{ContextWindowConfig, ContextWindowManager, PruningStrategy};",
              "line": 94,
              "signature": "pub use crate::context_manager::{ContextWindowConfig, ContextWindowManager, PruningStrategy};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{ForgeAgentError, ForgeAgentResult};",
              "line": 95,
              "signature": "pub use crate::error::{ForgeAgentError, ForgeAgentResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::loop_control::{\n        AgentStopCondition, NoOpPrepare, PrepareStep, StopWhen, StopWhenCustom, StopWhenMaxSteps,\n        StopWhenTextGenerated, StopWhenToolCalled,\n    };",
              "line": 96,
              "signature": "pub use crate::loop_control::{\n        AgentStopCondition, NoOpPrepare, PrepareStep, StopWhen, StopWhenCustom, StopWhenMaxSteps,\n        StopWhenTextGenerated, StopWhenToolCalled,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::messaging::{\n        AgentChannel, AgentChannelReceiver, AgentChannelSender, AgentMessage,\n    };",
              "line": 101,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::messaging::{\n        AgentChannel, AgentChannelReceiver, AgentChannelSender, AgentMessage,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::observer::{AgentLoopObserver, NoOpObserver};",
              "line": 104,
              "signature": "pub use crate::observer::{AgentLoopObserver, NoOpObserver};",
              "documentation": ""
            },
            {
              "name": "pub use crate::streaming_tool_loop::{StreamingLoopConfig, StreamingToolLoopAgent};",
              "line": 105,
              "signature": "pub use crate::streaming_tool_loop::{StreamingLoopConfig, StreamingToolLoopAgent};",
              "documentation": ""
            },
            {
              "name": "pub use crate::subagent::{\n        create_subagent, create_subagent_with_observer, SubAgentConfig, SubAgentDelegationContext,\n    };",
              "line": 106,
              "signature": "pub use crate::subagent::{\n        create_subagent, create_subagent_with_observer, SubAgentConfig, SubAgentDelegationContext,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::tool_loop::ToolLoopAgent;",
              "line": 109,
              "signature": "pub use crate::tool_loop::ToolLoopAgent;",
              "documentation": ""
            },
            {
              "name": "pub use crate::workflow::{\n        ParallelWorkflow, RouterWorkflow, SequentialWorkflow, WorkflowOutput,\n    };",
              "line": 110,
              "signature": "pub use crate::workflow::{\n        ParallelWorkflow, RouterWorkflow, SequentialWorkflow, WorkflowOutput,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/loop_control.rs",
          "sha256": "c4f923438df92e802bb29640ae0d09666872aa85bba295e29f24dd39fd22b032",
          "artifactSha256": "51bf1e22eb53c0390368c170d16e8b798bb0eeece733339f40ced60e419d9378",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/loop_control.rs.txt",
          "declarations": [
            {
              "name": "::AgentStopCondition",
              "line": 58,
              "signature": "pub enum AgentStopCondition {\n    /// Stop when the step count reaches or exceeds this value.\n    ///\n    /// Steps are counted starting from 1 (the first LLM call is step 1).\n    MaxSteps(u32),\n\n    /// Stop when cumulative token usage reaches or exceeds this value.\n    ///\n    /// Token count includes both prompt and completion tokens across all steps.\n    MaxTokens(u64),\n\n    /// Stop when a custom predicate returns `true`.\n    ///\n    /// The predicate receives the current step count and total token usage.\n    /// It must be `Send + Sync` for use in async contexts.\n    ///\n    /// # Examples\n    ///\n    /// ```\n    /// use forge_agent::loop_control::AgentStopCondition;\n    ///\n    /// let stop = AgentStopCondition::Custom(Box::new(|steps, tokens| {\n    ///     steps >= 5 && tokens >= 2000\n    /// }));\n    /// assert!(stop.should_stop(5, 2000));\n    /// assert!(!stop.should_stop(4, 2000));\n    /// assert!(!stop.should_stop(5, 1999));\n    /// ```\n    Custom(Box<dyn Fn(u32, u64) -> bool + Send + Sync>),\n}",
              "documentation": "A condition that determines when the agent's tool loop should terminate.\n\nStop conditions are checked after each tool loop step. If any configured\nstop condition fires, the loop terminates and returns the accumulated output.\n\n# ANVIL Spec SS7.1\n\nThe agent execution loop must respect stop conditions to prevent runaway\nexecution. At minimum, `MaxSteps` should always be configured as a safety\nbound.\n\n# Examples\n\n```\nuse forge_agent::loop_control::AgentStopCondition;\n\n// Stop after 20 steps\nlet by_steps = AgentStopCondition::MaxSteps(20);\nassert!(!by_steps.should_stop(19, 0));\nassert!(by_steps.should_stop(20, 0));\n\n// Stop after 10000 tokens\nlet by_tokens = AgentStopCondition::MaxTokens(10000);\nassert!(!by_tokens.should_stop(1, 9999));\nassert!(by_tokens.should_stop(1, 10000));\n```"
            },
            {
              "name": "::AgentStopCondition::should_stop",
              "line": 111,
              "signature": "pub fn should_stop(&self, steps: u32, total_tokens: u64) -> bool;",
              "documentation": "Evaluates whether the stop condition is satisfied.\n\n# Arguments\n\n* `steps` - The current step count (1-indexed).\n* `total_tokens` - The cumulative token usage across all steps.\n\n# Returns\n\n`true` if the loop should stop, `false` to continue.\n\n# Examples\n\n```\nuse forge_agent::loop_control::AgentStopCondition;\n\nlet stop = AgentStopCondition::MaxSteps(5);\nassert!(!stop.should_stop(4, 0));\nassert!(stop.should_stop(5, 0));\nassert!(stop.should_stop(6, 0));\n```"
            },
            {
              "name": "::AgentStopCondition::description",
              "line": 138,
              "signature": "pub fn description(&self) -> String;",
              "documentation": "Returns a human-readable description of this stop condition.\n\nUsed for logging and error messages.\n\n# Returns\n\nA string describing the stop condition type and its threshold.\n\n# Examples\n\n```\nuse forge_agent::loop_control::AgentStopCondition;\n\nlet stop = AgentStopCondition::MaxSteps(10);\nassert_eq!(stop.description(), \"max_steps(10)\");\n\nlet stop = AgentStopCondition::MaxTokens(5000);\nassert_eq!(stop.description(), \"max_tokens(5000)\");\n```"
            },
            {
              "name": "::StopWhen",
              "line": 191,
              "signature": "pub trait StopWhen: Send + Sync {\n    /// Determines whether the agent's tool loop should stop.\n    ///\n    /// # Arguments\n    ///\n    /// * `messages` - The current conversation history.\n    /// * `step_count` - The number of tool loop steps completed (1-indexed).\n    ///\n    /// # Returns\n    ///\n    /// `true` if the loop should terminate, `false` to continue.\n    fn should_stop(&self, messages: &[ModelMessage], step_count: u32) -> bool;\n}",
              "documentation": "A trait-based stop condition for controlling the agent's tool loop.\n\n`StopWhen` provides a richer interface than [`AgentStopCondition`] by\nreceiving the full message history and step count, enabling content-aware\nstop decisions.\n\n# ANVIL Spec \u00a79.2\n\nThe agent execution loop supports pluggable stop conditions. `StopWhen`\nis the trait-based interface; `AgentStopCondition` is the simpler enum\nalternative. Both are supported.\n\n# Thread Safety\n\nImplementors must be `Send + Sync` for use in async agent contexts.\n\n# Examples\n\n```\nuse forge_agent::loop_control::StopWhen;\nuse forge_core::message::ModelMessage;\n\nstruct StopAfterFiveSteps;\n\nimpl StopWhen for StopAfterFiveSteps {\n    fn should_stop(&self, _messages: &[ModelMessage], step_count: u32) -> bool {\n        step_count >= 5\n    }\n}\n\nlet stop = StopAfterFiveSteps;\nassert!(!stop.should_stop(&[], 4));\nassert!(stop.should_stop(&[], 5));\n```"
            },
            {
              "name": "::StopWhenTextGenerated",
              "line": 225,
              "signature": "pub struct StopWhenTextGenerated;",
              "documentation": "Stops when the agent produces a text-only response (no tool calls).\n\nThis is the default stop condition \u2014 the loop naturally ends when the\nmodel responds with text instead of tool calls.\n\n# Examples\n\n```\nuse forge_agent::loop_control::{StopWhen, StopWhenTextGenerated};\nuse forge_core::message::{ModelMessage, Role};\n\nlet stop = StopWhenTextGenerated;\nlet messages = vec![\n    ModelMessage::text(Role::User, \"Hello\"),\n    ModelMessage::text(Role::Assistant, \"Hi there!\"),\n];\n// This checks message content \u2014 in practice the tool loop handles\n// this by inspecting tool_calls on the response, not via StopWhen.\nassert!(!stop.should_stop(&messages, 1));\n```"
            },
            {
              "name": "::StopWhenMaxSteps",
              "line": 248,
              "signature": "pub struct StopWhenMaxSteps(pub u32);",
              "documentation": "Stops when the step count reaches or exceeds the configured maximum.\n\n# Examples\n\n```\nuse forge_agent::loop_control::{StopWhen, StopWhenMaxSteps};\nuse forge_core::message::ModelMessage;\n\nlet stop = StopWhenMaxSteps(10);\nassert!(!stop.should_stop(&[], 9));\nassert!(stop.should_stop(&[], 10));\nassert!(stop.should_stop(&[], 11));\n```"
            },
            {
              "name": "::StopWhenToolCalled",
              "line": 272,
              "signature": "pub struct StopWhenToolCalled {\n\n}",
              "documentation": "Stops when a specific tool has been called in the conversation.\n\nInspects the message history for any tool call matching the configured\ntool name.\n\n# Examples\n\n```\nuse forge_agent::loop_control::{StopWhen, StopWhenToolCalled};\nuse forge_core::message::{ModelMessage, Role};\n\nlet stop = StopWhenToolCalled::new(\"submit_answer\");\n// No tool calls in the messages\nlet messages = vec![ModelMessage::text(Role::User, \"Hello\")];\nassert!(!stop.should_stop(&messages, 1));\n```"
            },
            {
              "name": "::StopWhenToolCalled::new",
              "line": 282,
              "signature": "pub fn new(tool_name: impl Into<String>) -> Self;",
              "documentation": "Creates a new stop condition that triggers when the named tool is called.\n\n# Arguments\n\n* `tool_name` - The name of the tool to watch for."
            },
            {
              "name": "::StopWhenCustom",
              "line": 317,
              "signature": "pub struct StopWhenCustom {\n\n}",
              "documentation": "Stops when a custom predicate returns `true`.\n\nThe predicate receives the full message history and step count,\nallowing content-aware stop decisions.\n\n# Examples\n\n```\nuse forge_agent::loop_control::{StopWhen, StopWhenCustom};\nuse forge_core::message::ModelMessage;\n\n// Stop when we have more than 20 messages\nlet stop = StopWhenCustom::new(|messages, _step| messages.len() > 20);\nassert!(!stop.should_stop(&[], 1));\n```"
            },
            {
              "name": "::StopWhenCustom::new",
              "line": 328,
              "signature": "pub fn new<F>(predicate: F) -> Self\n    where\n        F: Fn(&[ModelMessage], u32) -> bool + Send + Sync + 'static,;",
              "documentation": "Creates a new custom stop condition from a closure.\n\n# Arguments\n\n* `predicate` - A closure that receives messages and step count,\n  returning `true` to stop."
            },
            {
              "name": "::PrepareStep",
              "line": 387,
              "signature": "#[async_trait]\npub trait PrepareStep: Send + Sync {\n    /// Modifies the message list before the next LLM call.\n    ///\n    /// # Arguments\n    ///\n    /// * `messages` - The mutable message list that will be sent to the model.\n    ///   Implementors may add, remove, or modify messages.\n    /// * `step` - The current step number (1-indexed). Step 1 is the first call.\n    ///\n    /// # Returns\n    ///\n    /// `Ok(())` on success, or a [`ForgeAgentError`](crate::error::ForgeAgentError)\n    /// if preparation fails (which aborts the tool loop).\n    ///\n    /// # Errors\n    ///\n    /// Returning an error aborts the tool loop and propagates the error to\n    /// the caller.\n    async fn prepare(&self, messages: &mut Vec<ModelMessage>, step: u32) -> ForgeAgentResult<()>;\n}",
              "documentation": "A hook that runs before each LLM call in the tool loop.\n\nImplementors can modify the message list before it is sent to the model.\nThis enables prompt injection, context trimming, memory retrieval, and\nother pre-processing steps.\n\n# ANVIL Spec SS7.1\n\nPre-step hooks are optional extensions to the agent execution loop. They\nexecute synchronously before each inference call.\n\n# Thread Safety\n\nImplementors must be `Send + Sync` for use in async contexts.\n\n# Examples\n\n```\nuse async_trait::async_trait;\nuse forge_agent::loop_control::PrepareStep;\nuse forge_agent::error::ForgeAgentResult;\nuse forge_core::message::{ModelMessage, Role};\n\nstruct InjectTimestamp;\n\n#[async_trait]\nimpl PrepareStep for InjectTimestamp {\n    async fn prepare(&self, messages: &mut Vec<ModelMessage>, step: u32) -> ForgeAgentResult<()> {\n        let note = format!(\"[Step {step}] Processing...\");\n        messages.push(ModelMessage::text(Role::System, note));\n        Ok(())\n    }\n}\n```"
            },
            {
              "name": "::NoOpPrepare",
              "line": 427,
              "signature": "pub struct NoOpPrepare;",
              "documentation": "A no-op [`PrepareStep`] implementation that does nothing.\n\nUsed as the default when no pre-step processing is needed.\n\n# Examples\n\n```\nuse forge_agent::loop_control::NoOpPrepare;\nuse forge_agent::loop_control::PrepareStep;\nuse forge_core::message::ModelMessage;\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet noop = NoOpPrepare;\nlet mut messages = vec![];\nlet result = noop.prepare(&mut messages, 1).await;\nassert!(result.is_ok());\nassert!(messages.is_empty());\n# });\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/messaging.rs",
          "sha256": "626d88e8fbf1c56d30fc05a883e4e1887b61ce3eb9f9624f263173e6f654e4ad",
          "artifactSha256": "3f9256b9ce7fad73e5d5583f66617a462b0c65d5131def2f18f251eb712321b2",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/messaging.rs.txt",
          "declarations": [
            {
              "name": "::AgentMessage",
              "line": 71,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AgentMessage {\n\n}",
              "documentation": "A typed message exchanged between agents.\n\n`AgentMessage` carries a payload (text content) along with sender and\nrecipient identifiers. Messages are immutable after creation.\n\n# ANVIL Spec SS7.2\n\nInter-agent messages include sender and recipient identity for audit\ntrail purposes. The payload is a free-form text string that the\nreceiving agent interprets.\n\n# Examples\n\n```\nuse forge_agent::messaging::AgentMessage;\n\nlet msg = AgentMessage::text(\"coordinator\", \"analyst\", \"Summarize the data.\");\nassert_eq!(msg.sender(), \"coordinator\");\nassert_eq!(msg.recipient(), \"analyst\");\nassert_eq!(msg.payload(), \"Summarize the data.\");\nassert_eq!(msg.kind(), \"text\");\n```"
            },
            {
              "name": "::AgentMessage::text",
              "line": 107,
              "signature": "pub fn text(\n        sender: impl Into<String>,\n        recipient: impl Into<String>,\n        payload: impl Into<String>,\n    ) -> Self;",
              "documentation": "Creates a new text message between agents.\n\n# Arguments\n\n* `sender` - The sending agent's name or identifier.\n* `recipient` - The recipient agent's name or identifier.\n* `payload` - The text content of the message.\n\n# Returns\n\nA new `AgentMessage` with kind \"text\".\n\n# Examples\n\n```\nuse forge_agent::messaging::AgentMessage;\n\nlet msg = AgentMessage::text(\"a\", \"b\", \"Hello\");\nassert_eq!(msg.kind(), \"text\");\nassert_eq!(msg.payload(), \"Hello\");\n```"
            },
            {
              "name": "::AgentMessage::result",
              "line": 140,
              "signature": "pub fn result(\n        sender: impl Into<String>,\n        recipient: impl Into<String>,\n        payload: impl Into<String>,\n    ) -> Self;",
              "documentation": "Creates a new result message (agent returning output to another).\n\n# Arguments\n\n* `sender` - The sending agent's name or identifier.\n* `recipient` - The recipient agent's name or identifier.\n* `payload` - The result content.\n\n# Returns\n\nA new `AgentMessage` with kind \"result\".\n\n# Examples\n\n```\nuse forge_agent::messaging::AgentMessage;\n\nlet msg = AgentMessage::result(\"worker\", \"orchestrator\", \"Task complete.\");\nassert_eq!(msg.kind(), \"result\");\n```"
            },
            {
              "name": "::AgentMessage::error",
              "line": 173,
              "signature": "pub fn error(\n        sender: impl Into<String>,\n        recipient: impl Into<String>,\n        payload: impl Into<String>,\n    ) -> Self;",
              "documentation": "Creates a new error message.\n\n# Arguments\n\n* `sender` - The sending agent's name or identifier.\n* `recipient` - The recipient agent's name or identifier.\n* `payload` - The error description.\n\n# Returns\n\nA new `AgentMessage` with kind \"error\".\n\n# Examples\n\n```\nuse forge_agent::messaging::AgentMessage;\n\nlet msg = AgentMessage::error(\"worker\", \"orchestrator\", \"Tool execution failed.\");\nassert_eq!(msg.kind(), \"error\");\n```"
            },
            {
              "name": "::AgentMessage::control",
              "line": 207,
              "signature": "pub fn control(\n        sender: impl Into<String>,\n        recipient: impl Into<String>,\n        payload: impl Into<String>,\n    ) -> Self;",
              "documentation": "Creates a new control message (lifecycle signals, coordination).\n\n# Arguments\n\n* `sender` - The sending agent's name or identifier.\n* `recipient` - The recipient agent's name or identifier.\n* `payload` - The control signal content.\n\n# Returns\n\nA new `AgentMessage` with kind \"control\".\n\n# Examples\n\n```\nuse forge_agent::messaging::AgentMessage;\n\nlet msg = AgentMessage::control(\"orchestrator\", \"worker\", \"shutdown\");\nassert_eq!(msg.kind(), \"control\");\nassert_eq!(msg.payload(), \"shutdown\");\n```"
            },
            {
              "name": "::AgentMessage::sender",
              "line": 221,
              "signature": "pub fn sender(&self) -> &str;",
              "documentation": "Returns the sender's name or identifier."
            },
            {
              "name": "::AgentMessage::recipient",
              "line": 226,
              "signature": "pub fn recipient(&self) -> &str;",
              "documentation": "Returns the recipient's name or identifier."
            },
            {
              "name": "::AgentMessage::payload",
              "line": 231,
              "signature": "pub fn payload(&self) -> &str;",
              "documentation": "Returns the message payload."
            },
            {
              "name": "::AgentMessage::kind",
              "line": 236,
              "signature": "pub fn kind(&self) -> &str;",
              "documentation": "Returns the message kind (\"text\", \"result\", \"error\", \"control\")."
            },
            {
              "name": "::AgentChannelSender",
              "line": 264,
              "signature": "#[derive(Debug, Clone)]\npub struct AgentChannelSender {\n\n}",
              "documentation": "The sending half of an agent channel.\n\nThis wraps a `tokio::mpsc::Sender` and provides a typed interface for\nsending [`AgentMessage`] values to the channel.\n\n# Thread Safety\n\n`AgentChannelSender` is `Clone + Send + Sync`, so it can be shared\nacross multiple agents or tasks.\n\n# Examples\n\n```\nuse forge_agent::messaging::{AgentChannel, AgentMessage};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet (tx, mut rx) = AgentChannel::new(8);\nlet msg = AgentMessage::text(\"a\", \"b\", \"hello\");\nlet result = tx.send(msg).await;\nassert!(result.is_ok());\n# });\n```"
            },
            {
              "name": "::AgentChannelSender::send",
              "line": 298,
              "signature": "pub async fn send(&self, message: AgentMessage) -> ForgeAgentResult<()>;",
              "documentation": "Sends a message through the channel.\n\nThis operation waits until there is capacity in the channel. If the\nreceiver has been dropped, the send fails.\n\n# Arguments\n\n* `message` - The message to send.\n\n# Returns\n\n`Ok(())` if the message was sent, or a [`ForgeAgentError::MessageError`]\nif the receiver has been dropped.\n\n# Errors\n\nReturns [`ForgeAgentError::MessageError`] if the receiver has been dropped.\n\n# Examples\n\n```\nuse forge_agent::messaging::{AgentChannel, AgentMessage};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet (tx, _rx) = AgentChannel::new(4);\nlet result = tx.send(AgentMessage::text(\"a\", \"b\", \"hi\")).await;\nassert!(result.is_ok());\n# });\n```"
            },
            {
              "name": "::AgentChannelSender::try_send",
              "line": 333,
              "signature": "pub fn try_send(&self, message: AgentMessage) -> ForgeAgentResult<()>;",
              "documentation": "Attempts to send a message without waiting.\n\nReturns immediately. If the channel is full or the receiver is dropped,\nthe send fails.\n\n# Arguments\n\n* `message` - The message to send.\n\n# Returns\n\n`Ok(())` if the message was sent, or a [`ForgeAgentError::MessageError`]\nif the channel is full or the receiver is dropped.\n\n# Errors\n\nReturns [`ForgeAgentError::MessageError`] if the channel is full or closed.\n\n# Examples\n\n```\nuse forge_agent::messaging::{AgentChannel, AgentMessage};\n\nlet (tx, _rx) = AgentChannel::new(1);\nlet result = tx.try_send(AgentMessage::text(\"a\", \"b\", \"fast\"));\nassert!(result.is_ok());\n```"
            },
            {
              "name": "::AgentChannelReceiver",
              "line": 361,
              "signature": "#[derive(Debug)]\npub struct AgentChannelReceiver {\n\n}",
              "documentation": "The receiving half of an agent channel.\n\nThis wraps a `tokio::mpsc::Receiver` and provides a typed interface\nfor receiving [`AgentMessage`] values from the channel.\n\n# Examples\n\n```\nuse forge_agent::messaging::{AgentChannel, AgentMessage};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet (tx, mut rx) = AgentChannel::new(8);\ntx.send(AgentMessage::text(\"a\", \"b\", \"hello\")).await.unwrap();\n\nlet msg = rx.recv().await;\nassert!(msg.is_some());\n# });\n```"
            },
            {
              "name": "::AgentChannelReceiver::recv",
              "line": 388,
              "signature": "pub async fn recv(&mut self) -> Option<AgentMessage>;",
              "documentation": "Receives the next message from the channel.\n\nWaits until a message is available. Returns `None` if all senders\nhave been dropped (channel is closed).\n\n# Returns\n\n`Some(message)` if a message was received, or `None` if the channel\nis closed.\n\n# Examples\n\n```\nuse forge_agent::messaging::{AgentChannel, AgentMessage};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet (tx, mut rx) = AgentChannel::new(4);\ntx.send(AgentMessage::text(\"a\", \"b\", \"msg\")).await.unwrap();\nlet received = rx.recv().await;\nassert!(received.is_some());\n# });\n```"
            },
            {
              "name": "::AgentChannelReceiver::try_recv",
              "line": 411,
              "signature": "pub fn try_recv(&mut self) -> Option<AgentMessage>;",
              "documentation": "Tries to receive a message without waiting.\n\nReturns immediately. If no message is available, returns `None`.\n\n# Returns\n\n`Some(message)` if a message was available, or `None` if the channel\nis empty.\n\n# Examples\n\n```\nuse forge_agent::messaging::{AgentChannel, AgentMessage};\n\nlet (tx, mut rx) = AgentChannel::new(4);\ntx.try_send(AgentMessage::text(\"a\", \"b\", \"quick\")).unwrap();\nlet result = rx.try_recv();\nassert!(result.is_some());\n```"
            },
            {
              "name": "::AgentChannel",
              "line": 448,
              "signature": "pub struct AgentChannel;",
              "documentation": "Factory for creating agent communication channels.\n\n`AgentChannel` provides a static `new()` method that creates a bounded\n`(sender, receiver)` pair. The channel has backpressure: when the buffer\nis full, senders wait until there is capacity.\n\n# ANVIL Spec SS7.2\n\nAgent channels are the communication backbone for multi-agent workflows.\nThey are bounded to prevent unbounded memory growth, and typed to ensure\nmessage integrity.\n\n# Examples\n\n```\nuse forge_agent::messaging::{AgentChannel, AgentMessage};\n\n# tokio::runtime::Runtime::new().unwrap().block_on(async {\nlet (tx, mut rx) = AgentChannel::new(16);\n\n// Clone the sender for another agent\nlet tx2 = tx.clone();\n\ntx.send(AgentMessage::text(\"agent-a\", \"agent-b\", \"Hello!\")).await.unwrap();\ntx2.send(AgentMessage::text(\"agent-c\", \"agent-b\", \"Hi!\")).await.unwrap();\n\nlet msg1 = rx.recv().await.unwrap();\nlet msg2 = rx.recv().await.unwrap();\nassert_eq!(msg1.sender(), \"agent-a\");\nassert_eq!(msg2.sender(), \"agent-c\");\n# });\n```"
            },
            {
              "name": "::AgentChannel::new",
              "line": 472,
              "signature": "#[allow(clippy::new_ret_no_self)]\npub fn new(capacity: usize) -> (AgentChannelSender, AgentChannelReceiver);",
              "documentation": "Creates a new bounded agent channel.\n\n# Arguments\n\n* `capacity` - The maximum number of messages that can be buffered.\n  Must be at least 1. If 0 is provided, it is clamped to 1.\n\n# Returns\n\nA `(sender, receiver)` pair. The sender can be cloned and shared\nacross multiple agents. The receiver is single-consumer.\n\n# Examples\n\n```\nuse forge_agent::messaging::AgentChannel;\n\nlet (tx, rx) = AgentChannel::new(32);\n// tx can be cloned: let tx2 = tx.clone();\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/observer.rs",
          "sha256": "6464c48499058684caf9babfb3984946a35430473c15536e6ddb29a4be261d10",
          "artifactSha256": "5a0133e26a188ab6f61c25a08a119d5dcd99d1dc2eb06d6faa925fd7ad78481b",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/observer.rs.txt",
          "declarations": [
            {
              "name": "::AgentLoopObserver",
              "line": 46,
              "signature": "#[async_trait]\npub trait AgentLoopObserver: Send + Sync {\n    /// Called at the start of each tool loop turn.\n    ///\n    /// # Arguments\n    ///\n    /// * `turn` - The turn number (1-indexed).\n    async fn on_turn_start(&self, _turn: u32) ;\n\n    /// Called at the end of each tool loop turn.\n    ///\n    /// # Arguments\n    ///\n    /// * `turn` - The turn number (1-indexed).\n    /// * `usage` - Cumulative token usage after this turn.\n    async fn on_turn_end(&self, _turn: u32, _usage: Usage) ;\n\n    /// Called when the model produces a text delta (during streaming).\n    ///\n    /// # Arguments\n    ///\n    /// * `text` - The text fragment.\n    async fn on_text_delta(&self, _text: &str) ;\n\n    /// Called when the model starts a tool call.\n    ///\n    /// # Arguments\n    ///\n    /// * `tool_call` - The tool call being initiated.\n    async fn on_tool_call_start(&self, _tool_call: &ToolCall) ;\n\n    /// Called when a tool call completes.\n    ///\n    /// Legacy hook -- prefer [`on_tool_invocation`](Self::on_tool_invocation) for\n    /// per-tool latency, status (succeeded / failed / authorization-denied /\n    /// not-found), and the tool name. This hook is preserved for backward\n    /// compatibility and continues to fire alongside `on_tool_invocation`.\n    ///\n    /// # Arguments\n    ///\n    /// * `tool_call_id` - The tool call ID.\n    /// * `result` - The result content.\n    /// * `is_error` - Whether the tool execution failed.\n    async fn on_tool_call_end(&self, _tool_call_id: &str, _result: &str, _is_error: bool) ;\n\n    /// Called when a tool call completes, with the full invocation record.\n    ///\n    /// Symmetric counterpart to [`on_tool_call_start`](Self::on_tool_call_start)\n    /// -- this hook receives the tool name, wall-clock duration, and the typed\n    /// `ToolInvocationStatus` so observers can build per-tool latency\n    /// histograms, structured audit entries, or richer UI states without\n    /// having to maintain their own start-time bookkeeping.\n    ///\n    /// Default implementation is a no-op so existing observers compile\n    /// unchanged. The streaming tool loop fires both this and\n    /// [`on_tool_call_end`](Self::on_tool_call_end) for every invocation.\n    ///\n    /// # Arguments\n    ///\n    /// * `record` - The complete invocation record.\n    async fn on_tool_invocation(&self, _record: &ToolInvocationRecord) ;\n\n    /// Called when a model inference call completes.\n    ///\n    /// The record carries model/provider ids, token counts, latency, outcome,\n    /// and governed prompt/completion refs. It does not carry raw prompt or\n    /// completion text.\n    ///\n    /// # Arguments\n    ///\n    /// * `record` - The complete model inference record.\n    async fn on_model_inference_completed(&self, _record: &ModelInferenceRecord) ;\n\n    /// Called when a parent agent delegates work to a sub-agent.\n    ///\n    /// The record carries child agent/run identifiers and governed refs for\n    /// instruction or handoff context.\n    ///\n    /// # Arguments\n    ///\n    /// * `record` - The delegation record.\n    async fn on_subagent_delegation_started(&self, _record: &SubAgentDelegationRecord) ;\n\n    /// Called when a stream chunk is received.\n    ///\n    /// # Arguments\n    ///\n    /// * `chunk` - The stream chunk.\n    async fn on_stream_chunk(&self, _chunk: &StreamChunk) ;\n\n    /// Called when the agent loop completes successfully.\n    ///\n    /// # Arguments\n    ///\n    /// * `final_message` - The final assistant message.\n    /// * `total_turns` - Total number of turns executed.\n    /// * `total_usage` - Total token usage across all turns.\n    async fn on_complete(\n        &self,\n        _final_message: &ModelMessage,\n        _total_turns: u32,\n        _total_usage: Usage,\n    ) ;\n\n    /// Called when the agent loop encounters an error.\n    ///\n    /// # Arguments\n    ///\n    /// * `error` - A human-readable error description.\n    /// * `turn` - The turn in which the error occurred.\n    async fn on_error(&self, _error: &str, _turn: u32) ;\n\n    /// Called when the agent loop is stopped by a stop condition.\n    ///\n    /// # Arguments\n    ///\n    /// * `reason` - Why the loop stopped.\n    /// * `turn` - The turn at which the loop stopped.\n    async fn on_stopped(&self, _reason: FinishReason, _turn: u32) ;\n}",
              "documentation": "Observer for agent loop events.\n\nImplementors receive callbacks at key points during the agent's tool loop.\nAll methods have default no-op implementations, so observers only need to\noverride the events they care about.\n\n# Thread Safety\n\nImplementors must be `Send + Sync` for use in async contexts.\n\n# Examples\n\n```\nuse forge_agent::observer::AgentLoopObserver;\nuse async_trait::async_trait;\n\nstruct PrintObserver;\n\n#[async_trait]\nimpl AgentLoopObserver for PrintObserver {\n    async fn on_turn_start(&self, turn: u32) {\n        println!(\"Starting turn {turn}\");\n    }\n}\n```"
            },
            {
              "name": "::NoOpObserver",
              "line": 170,
              "signature": "pub struct NoOpObserver;",
              "documentation": "A no-op observer that discards all events.\n\nUsed as the default when no monitoring is needed."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/streaming_tool_loop.rs",
          "sha256": "df84d3a0a4f00e0e559a1a78e877c1f2d8fe9db08ced25b9be82146285e098bb",
          "artifactSha256": "9f10779b03086e4ca755a72628b499a591b1bc2b1f476a18f88815e1fb0e1f36",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/streaming_tool_loop.rs.txt",
          "declarations": [
            {
              "name": "::StreamingLoopConfig",
              "line": 61,
              "signature": "#[derive(Debug, Clone)]\npub struct StreamingLoopConfig {\n/// Maximum turns before forced termination.\n\npub max_turns: u32,\n/// Context pruning threshold (fraction of max_context_tokens).\n\npub context_threshold: f64,\n/// Context pruning strategy.\n\npub pruning_strategy: PruningStrategy,\n/// Model's maximum context window size.\n\npub max_context_tokens: u64\n}",
              "documentation": "Configuration for the streaming tool loop."
            },
            {
              "name": "::StreamingToolLoopAgent",
              "line": 95,
              "signature": "pub struct StreamingToolLoopAgent {\n\n}",
              "documentation": "An agent that uses streaming inference with real-time observer callbacks.\n\nThis is the recommended agent implementation for any use case that needs\nlive output: dashboards, TUIs, founding pipeline, interactive sessions.\n\n# Observer hot-swap\n\nThe active observer is held behind a [`RwLock`] so callers can rotate\nobservers per turn without rebuilding the agent. Use\n[`set_observer`](Self::set_observer) / [`clear_observer`](Self::clear_observer)\non a long-lived `Arc<StreamingToolLoopAgent>` instead of the consuming\nbuilder [`with_observer`](Self::with_observer)."
            },
            {
              "name": "::StreamingToolLoopAgent::new",
              "line": 111,
              "signature": "pub fn new(\n        config: AgentConfig,\n        loop_config: StreamingLoopConfig,\n        model: Arc<dyn LanguageModel>,\n        tool_registry: ToolRegistry,\n        approval: Arc<dyn ApprovalHandler>,\n    ) -> Self;",
              "documentation": ""
            },
            {
              "name": "::StreamingToolLoopAgent::with_observer",
              "line": 143,
              "signature": "pub fn with_observer(self, observer: Arc<dyn AgentLoopObserver>) -> Self;",
              "documentation": "Builder shim that sets the observer and returns `self`.\n\nMost callers should prefer [`set_observer`](Self::set_observer) on a\nlong-lived agent, which doesn't consume the agent and supports per-turn\nobserver rotation."
            },
            {
              "name": "::StreamingToolLoopAgent::set_observer",
              "line": 154,
              "signature": "pub fn set_observer(&self, observer: Arc<dyn AgentLoopObserver>);",
              "documentation": "Atomically swap the active observer through a shared reference.\n\nUseful when one long-lived `Arc<StreamingToolLoopAgent>` runs many turns\nand each turn needs its own observer (e.g., per-turn tool latency\nhistograms or per-request UI streams). The previous observer is dropped\nonce any in-flight `observer()` snapshot completes."
            },
            {
              "name": "::StreamingToolLoopAgent::clear_observer",
              "line": 166,
              "signature": "pub fn clear_observer(&self);",
              "documentation": "Reset the observer slot to a no-op observer.\n\nEquivalent to `set_observer(Arc::new(NoOpObserver))` but spelled out\nfor clarity at call sites that explicitly want to detach observation."
            },
            {
              "name": "::StreamingToolLoopAgent::observer",
              "line": 176,
              "signature": "pub fn observer(&self) -> Arc<dyn AgentLoopObserver>;",
              "documentation": "Returns a snapshot of the current observer.\n\nThe returned `Arc` is independent of the slot, so the caller may hold\nit across observer swaps without affecting subsequent turns. Used\ninternally by the loop and exposed for callers that want to fire\ncustom callbacks against the active observer."
            },
            {
              "name": "::StreamingToolLoopAgent::enqueue_interjection",
              "line": 191,
              "signature": "pub fn enqueue_interjection(&self, text: impl Into<String>);",
              "documentation": "Queue a live interjection for the next model turn.\n\nThis is intentionally turn-boundary delivery: an interjection sent\nwhile a model call or tool call is in flight is appended to the\nconversation before the next LLM request. That keeps providers and\ntools cancellable via their existing controls while giving long-running\nautonomous loops a safe way to accept new instructions."
            },
            {
              "name": "::StreamingToolLoopAgent::enqueue_interjection_message",
              "line": 204,
              "signature": "pub fn enqueue_interjection_message(&self, message: ModelMessage);",
              "documentation": "Queue a fully-formed message for the next model turn.\n\nMost callers should prefer [`enqueue_interjection`](Self::enqueue_interjection).\nThis lower-level hook exists for adapters that need to preserve richer\nrole/content formatting."
            },
            {
              "name": "::StreamingToolLoopAgent::model",
              "line": 224,
              "signature": "pub fn model(&self) -> &Arc<dyn LanguageModel>;",
              "documentation": "Returns a reference to the underlying language model.\n\nUseful for diagnostics, smoke tests, or building a sibling streaming\nagent that shares the same model instance."
            },
            {
              "name": "::StreamingToolLoopAgent::with_generate_options",
              "line": 229,
              "signature": "pub fn with_generate_options(mut self, options: GenerateOptions) -> Self;",
              "documentation": "Set generation options."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/subagent.rs",
          "sha256": "1073dd6b8f60a127b7ebebdbe424c14dcd76f13f95103aa5352605503d8f90e5",
          "artifactSha256": "844bee930b526e120eedb1b35afa6c0f3b7d4b25a23856b94f014be2949d5c45",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/subagent.rs.txt",
          "declarations": [
            {
              "name": "::SubAgentConfig",
              "line": 81,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SubAgentConfig {\n\n}",
              "documentation": "Configuration for creating a sub-agent from a parent agent.\n\n`SubAgentConfig` specifies which tools from the parent's tool set the\nchild should have access to, along with child-specific overrides for\nsystem prompt and step limits.\n\n# ANVIL Spec SS11.2\n\nSub-agent capabilities must be a subset of the parent's capabilities.\nThe `tool_names` field acts as a filter: only tools whose names appear\nin the parent's `AgentConfig::tools()` are included.\n\n# Examples\n\n```\nuse forge_agent::subagent::SubAgentConfig;\n\nlet config = SubAgentConfig::new(\"data-fetcher\")\n    .with_tool_names(vec![\"http_get\".to_string(), \"parse_json\".to_string()])\n    .with_system_prompt(\"You are a data fetching assistant.\")\n    .with_max_steps(5);\n\nassert_eq!(config.name(), \"data-fetcher\");\nassert_eq!(config.tool_names().len(), 2);\nassert_eq!(config.max_steps(), Some(5));\n```"
            },
            {
              "name": "::SubAgentConfig::new",
              "line": 128,
              "signature": "pub fn new(name: impl Into<String>) -> Self;",
              "documentation": "Creates a new `SubAgentConfig` with the given name.\n\nBy default, the child inherits all parent tools, the parent's system\nprompt, and the parent's max_steps.\n\n# Arguments\n\n* `name` - The child agent's name.\n\n# Returns\n\nA new `SubAgentConfig` with default inheritance settings.\n\n# Examples\n\n```\nuse forge_agent::subagent::SubAgentConfig;\n\nlet config = SubAgentConfig::new(\"worker\");\nassert_eq!(config.name(), \"worker\");\nassert!(config.tool_names().is_empty());\nassert!(config.system_prompt().is_none());\nassert!(config.max_steps().is_none());\n```"
            },
            {
              "name": "::SubAgentConfig::with_tool_names",
              "line": 160,
              "signature": "pub fn with_tool_names(mut self, names: Vec<String>) -> Self;",
              "documentation": "Sets the tool names the child is allowed to use.\n\nThese names are matched against the parent's tool definitions.\nOnly tools whose names appear in both this list AND the parent's\ntools will be available to the child.\n\n# Arguments\n\n* `names` - Tool names to filter by.\n\n# Returns\n\nThe modified `SubAgentConfig` (builder pattern).\n\n# Examples\n\n```\nuse forge_agent::subagent::SubAgentConfig;\n\nlet config = SubAgentConfig::new(\"reader\")\n    .with_tool_names(vec![\"read_file\".to_string()]);\nassert_eq!(config.tool_names(), &[\"read_file\"]);\n```"
            },
            {
              "name": "::SubAgentConfig::with_system_prompt",
              "line": 184,
              "signature": "pub fn with_system_prompt(mut self, prompt: impl Into<String>) -> Self;",
              "documentation": "Sets the system prompt override for the child agent.\n\n# Arguments\n\n* `prompt` - The child's system prompt.\n\n# Returns\n\nThe modified `SubAgentConfig` (builder pattern).\n\n# Examples\n\n```\nuse forge_agent::subagent::SubAgentConfig;\n\nlet config = SubAgentConfig::new(\"helper\")\n    .with_system_prompt(\"You are a specialized helper.\");\nassert_eq!(config.system_prompt(), Some(\"You are a specialized helper.\"));\n```"
            },
            {
              "name": "::SubAgentConfig::with_max_steps",
              "line": 207,
              "signature": "pub fn with_max_steps(mut self, max: u32) -> Self;",
              "documentation": "Sets the max_steps override for the child agent.\n\n# Arguments\n\n* `max` - The maximum number of tool loop steps for the child.\n\n# Returns\n\nThe modified `SubAgentConfig` (builder pattern).\n\n# Examples\n\n```\nuse forge_agent::subagent::SubAgentConfig;\n\nlet config = SubAgentConfig::new(\"worker\").with_max_steps(3);\nassert_eq!(config.max_steps(), Some(3));\n```"
            },
            {
              "name": "::SubAgentConfig::name",
              "line": 213,
              "signature": "pub fn name(&self) -> &str;",
              "documentation": "Returns the child agent's name."
            },
            {
              "name": "::SubAgentConfig::tool_names",
              "line": 220,
              "signature": "pub fn tool_names(&self) -> &[String];",
              "documentation": "Returns the tool names the child is allowed to use.\n\nAn empty slice means the child inherits all parent tools."
            },
            {
              "name": "::SubAgentConfig::system_prompt",
              "line": 225,
              "signature": "pub fn system_prompt(&self) -> Option<&str>;",
              "documentation": "Returns the system prompt override, if set."
            },
            {
              "name": "::SubAgentConfig::max_steps",
              "line": 230,
              "signature": "pub fn max_steps(&self) -> Option<u32>;",
              "documentation": "Returns the max_steps override, if set."
            },
            {
              "name": "::SubAgentDelegationContext",
              "line": 237,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct SubAgentDelegationContext {\n/// Optional stable child agent id. Falls back to the child's configured DID\n\n/// or child name when omitted.\n\npub subagent_id: Option<String>,\n/// Host-assigned run id for the delegated child agent.\n\npub subagent_run_id: String,\n/// Optional summary of why the delegation happened.\n\npub delegation_reason: Option<String>,\n/// Governed artifact ref for delegated instructions.\n\npub instruction_ref: Option<String>,\n/// Capability refs granted to the child.\n\npub capability_refs: Vec<String>,\n/// Governed artifact ref for handoff state.\n\npub handoff_ref: Option<String>\n}",
              "documentation": "Host-supplied context for emitting a sub-agent delegation observer event."
            },
            {
              "name": "::create_subagent",
              "line": 316,
              "signature": "pub fn create_subagent(\n    parent_config: &AgentConfig,\n    sub_config: SubAgentConfig,\n    model: Arc<dyn LanguageModel>,\n    tool_registry: ToolRegistry,\n    approval: Arc<dyn ApprovalHandler>,\n) -> ForgeAgentResult<ToolLoopAgent>;",
              "documentation": "Creates a sub-agent from a parent agent's configuration.\n\nThe sub-agent is a new [`ToolLoopAgent`] with:\n- A narrowed set of tools (filtered by `SubAgentConfig::tool_names`).\n- An optional system prompt override.\n- An optional max_steps override.\n- Its own health profile and lifecycle state (both start fresh).\n\n# ANVIL Spec SS11.2\n\nSub-agent delegation must satisfy capability narrowing: the child's tool\nset is always a subset of (or equal to) the parent's tool set. This\nfunction enforces that constraint.\n\n# Arguments\n\n* `parent_config` - The parent agent's configuration. Used to determine\n  the parent's model and available tools.\n* `sub_config` - The sub-agent configuration specifying the child's name,\n  tool restrictions, and optional overrides.\n* `model` - The language model for the child to use (may be the same as\n  the parent's model or a different one).\n* `tool_registry` - The tool registry for the child agent. Should contain\n  at minimum the tools the child is allowed to use.\n* `approval` - The approval handler for tool execution gating.\n\n# Returns\n\nA [`ForgeAgentResult`] containing the new [`ToolLoopAgent`] on success.\n\n# Errors\n\nReturns [`ForgeAgentError::SubAgentFailed`] if:\n- A requested tool name is not present in the parent's tool set (capability\n  escalation attempt).\n\n# Examples\n\n```no_run\nuse forge_agent::subagent::{SubAgentConfig, create_subagent};\nuse forge_agent::agent::AgentConfig;\nuse forge_core::tool::{ToolDefinition, ToolTier};\nuse forge_core::model::LanguageModel;\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::approval::AutoApprove;\nuse std::sync::Arc;\n\nfn example(model: Arc<dyn LanguageModel>) {\n    let parent = AgentConfig::new(\"parent\", \"openai:gpt-4o\")\n        .with_tool(ToolDefinition::builder(\"search\").tier(ToolTier::External).build())\n        .with_tool(ToolDefinition::builder(\"write\").tier(ToolTier::External).build());\n\n    let sub = SubAgentConfig::new(\"child\")\n        .with_tool_names(vec![\"search\".to_string()]);\n\n    let registry = ToolRegistry::new();\n    let approval = Arc::new(AutoApprove);\n\n    let child = create_subagent(&parent, sub, model, registry, approval);\n    assert!(child.is_ok());\n}\n```"
            },
            {
              "name": "::create_subagent_with_observer",
              "line": 408,
              "signature": "pub async fn create_subagent_with_observer(\n    parent_config: &AgentConfig,\n    sub_config: SubAgentConfig,\n    model: Arc<dyn LanguageModel>,\n    tool_registry: ToolRegistry,\n    approval: Arc<dyn ApprovalHandler>,\n    observer: &dyn AgentLoopObserver,\n    context: SubAgentDelegationContext,\n) -> ForgeAgentResult<ToolLoopAgent>;",
              "documentation": "Creates a sub-agent and emits an observer callback for the delegation.\n\nThis async helper preserves the existing synchronous [`create_subagent`]\nAPI while giving streaming hosts and orchestration runtimes a semantic\nboundary for Cambium, telemetry, and UI projections."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/tool_loop.rs",
          "sha256": "ef678213f38866feba9a85a5874dcdf51f210b152044fc4e1a88b89a9640e172",
          "artifactSha256": "15e47604417ec6cccf83fe9522c700c16a330da01d2eeef0ecbd7bb120f9c9e5",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/tool_loop.rs.txt",
          "declarations": [
            {
              "name": "::ToolLoopAgent",
              "line": 105,
              "signature": "pub struct ToolLoopAgent {\n\n}",
              "documentation": "The core agent implementation that executes the ANVIL tool loop.\n\n`ToolLoopAgent` drives the agent execution cycle:\n\n```text\nUser prompt\n    |\n    v\n[System prompt + messages] --> LLM\n    |\n    v\nResponse has tool calls?\n    |-- YES --> Execute tools --> Append results --> Loop\n    |-- NO  --> Return final text\n    |\nStop condition reached?\n    |-- YES --> Return with stop condition error\n```\n\n# Components\n\n| Component | Purpose |\n|-----------|---------|\n| `config` | Agent name, model, tools, max_steps, system prompt |\n| `model` | The language model implementation (provider-agnostic) |\n| `tool_registry` | Maps tool names to definitions and executors |\n| `approval` | Approval handler checked before each tool execution |\n| `health` | Runtime health metrics (tool invocations, inference stats) |\n| `lifecycle` | ANVIL lifecycle state machine |\n| `stop_conditions` | Additional stop conditions beyond max_steps |\n| `prepare_step` | Pre-step hook for message modification |\n\n# Thread Safety\n\n`ToolLoopAgent` is `Send + Sync`. The mutable state (health profile and\nlifecycle manager) is protected by a `Mutex`.\n\n# ANVIL Spec SS7.1\n\nThe tool loop algorithm is defined by the ANVIL specification. This\nimplementation is the Forge reference."
            },
            {
              "name": "::ToolLoopAgent::new",
              "line": 169,
              "signature": "pub fn new(\n        config: AgentConfig,\n        model: Arc<dyn LanguageModel>,\n        tool_registry: ToolRegistry,\n        approval: Arc<dyn ApprovalHandler>,\n    ) -> Self;",
              "documentation": "Creates a new `ToolLoopAgent` with the given configuration.\n\nThe agent starts in the `Initializing` lifecycle state. Call [`run()`](Agent::run)\nto execute it, which will automatically manage lifecycle transitions.\n\n# Arguments\n\n* `config` - The agent configuration (name, model, tools, limits).\n* `model` - The language model implementation.\n* `tool_registry` - Registry containing tool definitions and executors.\n* `approval` - The approval handler for tool execution gating.\n\n# Returns\n\nA new `ToolLoopAgent` ready to execute.\n\n# Examples\n\n```no_run\nuse forge_agent::tool_loop::ToolLoopAgent;\nuse forge_agent::agent::AgentConfig;\nuse forge_core::model::LanguageModel;\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::approval::AutoApprove;\nuse std::sync::Arc;\n\nfn example(model: Arc<dyn LanguageModel>) {\n    let config = AgentConfig::new(\"bot\", \"openai:gpt-4o\");\n    let registry = ToolRegistry::new();\n    let approval = Arc::new(AutoApprove);\n\n    let agent = ToolLoopAgent::new(config, model, registry, approval);\n}\n```"
            },
            {
              "name": "::ToolLoopAgent::with_stop_condition",
              "line": 221,
              "signature": "pub fn with_stop_condition(mut self, condition: AgentStopCondition) -> Self;",
              "documentation": "Adds a stop condition to the agent.\n\nStop conditions are checked after each tool loop step. If any condition\nfires, the loop terminates.\n\n# Arguments\n\n* `condition` - The stop condition to add.\n\n# Returns\n\nThe modified `ToolLoopAgent` (builder pattern).\n\n# Examples\n\n```no_run\nuse forge_agent::tool_loop::ToolLoopAgent;\nuse forge_agent::agent::AgentConfig;\nuse forge_agent::loop_control::AgentStopCondition;\nuse forge_tool::registry::ToolRegistry;\nuse forge_tool::approval::AutoApprove;\nuse std::sync::Arc;\n\nfn example(model: Arc<dyn forge_core::model::LanguageModel>) {\n    let agent = ToolLoopAgent::new(\n        AgentConfig::new(\"bot\", \"openai:gpt-4o\"),\n        model,\n        ToolRegistry::new(),\n        Arc::new(AutoApprove),\n    )\n    .with_stop_condition(AgentStopCondition::MaxTokens(50000));\n}\n```"
            },
            {
              "name": "::ToolLoopAgent::with_prepare_step",
              "line": 237,
              "signature": "pub fn with_prepare_step(mut self, prepare: Arc<dyn PrepareStep>) -> Self;",
              "documentation": "Sets the pre-step hook for message modification.\n\nThe hook runs before each LLM call and can modify the message list.\n\n# Arguments\n\n* `prepare` - The pre-step hook implementation.\n\n# Returns\n\nThe modified `ToolLoopAgent` (builder pattern)."
            },
            {
              "name": "::ToolLoopAgent::with_generate_options",
              "line": 251,
              "signature": "pub fn with_generate_options(mut self, options: GenerateOptions) -> Self;",
              "documentation": "Sets the generation options for LLM calls.\n\n# Arguments\n\n* `options` - The generation options (temperature, max_tokens, etc.).\n\n# Returns\n\nThe modified `ToolLoopAgent` (builder pattern)."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent/src/workflow.rs",
          "sha256": "0a6608e099b46f95a1beebcfce376529dc8e906f639c7cb2333779f2938ab7b4",
          "artifactSha256": "77b2029934a70f7570ea56e2fe306583a2fa202c94503dc1da8ebb2b4581c6fd",
          "url": "/reference/source/forge-rs/crates/forge-agent/src/workflow.rs.txt",
          "declarations": [
            {
              "name": "::WorkflowOutput",
              "line": 57,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct WorkflowOutput {\n/// Individual outputs from each agent that executed.\n\npub agent_outputs: Vec<AgentOutput>,\n/// Aggregate token usage across all agents in the workflow.\n\npub total_usage: Usage,\n/// Total number of steps taken across all agents.\n\npub total_steps: u32,\n/// The final text output of the workflow.\n\n///\n\n/// For sequential workflows, this is the last agent's output.\n\n/// For parallel workflows, this is the concatenated outputs.\n\n/// For router workflows, this is the selected agent's output.\n\npub final_text: String\n}",
              "documentation": "The combined output of a workflow execution.\n\nContains the outputs from all agents that participated in the workflow,\nalong with aggregate statistics.\n\n# Examples\n\n```\nuse forge_agent::workflow::WorkflowOutput;\nuse forge_agent::agent::AgentOutput;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::output::Usage;\n\nlet output = WorkflowOutput {\n    agent_outputs: vec![],\n    total_usage: Usage::zero(),\n    total_steps: 0,\n    final_text: String::new(),\n};\nassert!(output.agent_outputs.is_empty());\n```"
            },
            {
              "name": "::SequentialWorkflow",
              "line": 102,
              "signature": "pub struct SequentialWorkflow {\n\n}",
              "documentation": "A sequential workflow that runs agents one after another.\n\nEach agent receives the previous agent's output as its input prompt.\nThe first agent receives the original user prompt. The final agent's\noutput becomes the workflow's output.\n\n```text\nUser prompt -> Agent 1 -> output_1 -> Agent 2 -> output_2 -> ... -> Final output\n```\n\n# ANVIL Spec SS7.2\n\nSequential workflows are the simplest orchestration pattern. They model\na pipeline where each stage transforms the previous stage's output.\n\n# Examples\n\n```no_run\nuse forge_agent::workflow::SequentialWorkflow;\nuse forge_agent::agent::Agent;\nuse std::sync::Arc;\n\nasync fn example(agents: Vec<Arc<dyn Agent>>) {\n    let workflow = SequentialWorkflow::new(\"pipeline\", agents);\n    let result = workflow.execute(\"Start\").await;\n}\n```"
            },
            {
              "name": "::SequentialWorkflow::new",
              "line": 133,
              "signature": "pub fn new(name: impl Into<String>, agents: Vec<Arc<dyn Agent>>) -> Self;",
              "documentation": "Creates a new sequential workflow.\n\n# Arguments\n\n* `name` - A human-readable name for the workflow (used in error messages).\n* `agents` - The ordered list of agents. The first agent runs first.\n\n# Returns\n\nA new `SequentialWorkflow`.\n\n# Examples\n\n```no_run\nuse forge_agent::workflow::SequentialWorkflow;\nuse std::sync::Arc;\nuse forge_agent::agent::Agent;\n\nfn example(a1: Arc<dyn Agent>, a2: Arc<dyn Agent>) {\n    let wf = SequentialWorkflow::new(\"my-pipeline\", vec![a1, a2]);\n}\n```"
            },
            {
              "name": "::SequentialWorkflow::execute",
              "line": 174,
              "signature": "pub async fn execute(&self, prompt: &str) -> Result<WorkflowOutput, ForgeAgentError>;",
              "documentation": "Executes the sequential workflow.\n\nRuns each agent in order. The first agent receives the `prompt` as input.\nEach subsequent agent receives the previous agent's `final_text` as input.\n\n# Arguments\n\n* `prompt` - The initial user prompt for the first agent.\n\n# Returns\n\nA [`WorkflowOutput`] containing all agent outputs and aggregate stats.\n\n# Errors\n\nReturns [`ForgeAgentError::WorkflowFailed`] if any agent in the sequence\nfails during execution.\n\n# Examples\n\n```no_run\nuse forge_agent::workflow::SequentialWorkflow;\nuse forge_agent::agent::Agent;\nuse std::sync::Arc;\n\nasync fn example(agents: Vec<Arc<dyn Agent>>) {\n    let wf = SequentialWorkflow::new(\"pipe\", agents);\n    match wf.execute(\"start\").await {\n        Ok(output) => println!(\"Final: {}\", output.final_text),\n        Err(e) => eprintln!(\"Workflow failed: {e}\"),\n    }\n}\n```"
            },
            {
              "name": "::ParallelWorkflow",
              "line": 271,
              "signature": "pub struct ParallelWorkflow {\n\n}",
              "documentation": "A parallel workflow that runs agents concurrently.\n\nAll agents receive the same input prompt and execute simultaneously.\nResults are collected when all agents complete. If any agent fails,\nthe entire workflow fails.\n\n```text\nUser prompt --> Agent 1 --> output_1 --|\n           |--> Agent 2 --> output_2 --|-- Collect all\n           |--> Agent N --> output_N --|\n```\n\n# ANVIL Spec SS7.2\n\nParallel workflows are used for fan-out/fan-in patterns where independent\nsub-tasks can be processed concurrently.\n\n# Examples\n\n```no_run\nuse forge_agent::workflow::ParallelWorkflow;\nuse forge_agent::agent::Agent;\nuse std::sync::Arc;\n\nasync fn example(agents: Vec<Arc<dyn Agent>>) {\n    let workflow = ParallelWorkflow::new(\"fan-out\", agents);\n    let result = workflow.execute(\"Analyze this\").await;\n}\n```"
            },
            {
              "name": "::ParallelWorkflow::new",
              "line": 290,
              "signature": "pub fn new(name: impl Into<String>, agents: Vec<Arc<dyn Agent>>) -> Self;",
              "documentation": "Creates a new parallel workflow.\n\n# Arguments\n\n* `name` - A human-readable name for the workflow.\n* `agents` - The list of agents to run concurrently.\n\n# Returns\n\nA new `ParallelWorkflow`."
            },
            {
              "name": "::ParallelWorkflow::execute",
              "line": 315,
              "signature": "pub async fn execute(&self, prompt: &str) -> Result<WorkflowOutput, ForgeAgentError>;",
              "documentation": "Executes the parallel workflow.\n\nSpawns all agents concurrently with the same input prompt. Waits for\nall agents to complete. The final text is the concatenation of all\nagents' outputs, separated by newlines.\n\n# Arguments\n\n* `prompt` - The input prompt sent to every agent.\n\n# Returns\n\nA [`WorkflowOutput`] containing all agent outputs and aggregate stats.\n\n# Errors\n\nReturns [`ForgeAgentError::WorkflowFailed`] if any agent fails."
            },
            {
              "name": "::RouterWorkflow",
              "line": 408,
              "signature": "pub struct RouterWorkflow {\n\n}",
              "documentation": "A router workflow that uses a classifier to select an agent.\n\nThe router sends the input to a classifier model (via a classifier agent)\nto determine which specialized agent should handle the request. Only the\nselected agent executes.\n\n```text\nUser prompt --> Classifier --> select Agent K --> output_K\n```\n\n# ANVIL Spec SS7.2\n\nRouter workflows enable dynamic dispatch to specialized agents based on\nthe input content, enabling efficient resource utilization.\n\n# Examples\n\n```no_run\nuse forge_agent::workflow::RouterWorkflow;\nuse forge_agent::agent::Agent;\nuse std::sync::Arc;\n\nasync fn example(\n    classifier: Arc<dyn Agent>,\n    agents: Vec<(String, Arc<dyn Agent>)>,\n) {\n    let workflow = RouterWorkflow::new(\"router\", classifier, agents);\n    let result = workflow.execute(\"Analyze this dataset\").await;\n}\n```"
            },
            {
              "name": "::RouterWorkflow::new",
              "line": 432,
              "signature": "pub fn new(\n        name: impl Into<String>,\n        classifier: Arc<dyn Agent>,\n        agents: Vec<(String, Arc<dyn Agent>)>,\n    ) -> Self;",
              "documentation": "Creates a new router workflow.\n\n# Arguments\n\n* `name` - A human-readable name for the workflow.\n* `classifier` - An agent that classifies the input and returns a route name.\n* `agents` - Named agents. The classifier's output is matched against these names.\n\n# Returns\n\nA new `RouterWorkflow`."
            },
            {
              "name": "::RouterWorkflow::execute",
              "line": 464,
              "signature": "pub async fn execute(&self, prompt: &str) -> Result<WorkflowOutput, ForgeAgentError>;",
              "documentation": "Executes the router workflow.\n\n1. Runs the classifier agent with the prompt.\n2. Matches the classifier's output text against agent names.\n3. Runs the matched agent with the original prompt.\n\n# Arguments\n\n* `prompt` - The input prompt to classify and route.\n\n# Returns\n\nA [`WorkflowOutput`] containing the classifier and selected agent outputs.\n\n# Errors\n\n- [`ForgeAgentError::WorkflowFailed`] if the classifier fails.\n- [`ForgeAgentError::WorkflowFailed`] if no agent matches the classifier's output.\n- [`ForgeAgentError::WorkflowFailed`] if the selected agent fails."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-embed",
      "language": "rust",
      "version": "0.2.0",
      "description": "Embedding, reranking, vector store, and RAG primitives for the Forge SDK",
      "manifest": "forge-rs/crates/forge-embed/Cargo.toml",
      "manifestSha256": "fdaf0df7c5bf1f097cadc779ff1e169f6392277cf545d9c910f28f9f9fb2ec79",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-embed",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-embed/src/chunking.rs",
          "sha256": "fbdc79c82f2cf6ea447a067b584a94d6489119f7999c45f048ac7fbea8662a58",
          "artifactSha256": "dcea115a9aa07696852560b2ee7cfe1ab4554b8438fa6a458686d32404963f32",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/chunking.rs.txt",
          "declarations": [
            {
              "name": "::TextSplitter",
              "line": 48,
              "signature": "pub trait TextSplitter: Send + Sync {\n    /// Splits the input text into chunks.\n    ///\n    /// # Arguments\n    ///\n    /// * `text` - The text to split.\n    ///\n    /// # Returns\n    ///\n    /// A vector of non-empty string chunks. Returns an empty vector if the\n    /// input is empty.\n    fn split(&self, text: &str) -> Vec<String>;\n}",
              "documentation": "Trait for text splitting strategies.\n\nImplementors break a text into smaller chunks suitable for embedding.\nEach chunk should be a meaningful unit of text (not split mid-word when\npossible).\n\n# Examples\n\n```\nuse forge_embed::chunking::TextSplitter;\n\nstruct FixedSplitter { size: usize }\n\nimpl TextSplitter for FixedSplitter {\n    fn split(&self, text: &str) -> Vec<String> {\n        text.chars()\n            .collect::<Vec<_>>()\n            .chunks(self.size)\n            .map(|c| c.iter().collect())\n            .collect()\n    }\n}\n\nlet splitter = FixedSplitter { size: 5 };\nlet chunks = splitter.split(\"HelloWorld\");\nassert_eq!(chunks, vec![\"Hello\", \"World\"]);\n```"
            },
            {
              "name": "::RecursiveCharacterSplitter",
              "line": 84,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct RecursiveCharacterSplitter {\n\n}",
              "documentation": "Splits text recursively using a hierarchy of separators.\n\nTries to split on paragraph boundaries first (`\\n\\n`), then sentence\nboundaries (`. `), then word boundaries (` `), and finally by individual\ncharacters. This preserves semantic coherence as much as possible.\n\n# Configuration\n\n- `chunk_size` -- Target maximum chunk size in characters.\n- `overlap` -- Number of characters to overlap between consecutive chunks.\n\n# Examples\n\n```\nuse forge_embed::chunking::{TextSplitter, RecursiveCharacterSplitter};\n\nlet splitter = RecursiveCharacterSplitter::new(100, 20);\nlet text = \"First paragraph with some content.\\n\\nSecond paragraph with more content.\";\nlet chunks = splitter.split(text);\nassert!(chunks.len() >= 1);\n```"
            },
            {
              "name": "::RecursiveCharacterSplitter::new",
              "line": 112,
              "signature": "pub fn new(chunk_size: usize, overlap: usize) -> Self;",
              "documentation": "Creates a new `RecursiveCharacterSplitter` with the given chunk size and overlap.\n\nUses the default separator hierarchy: `[\"\\n\\n\", \"\\n\", \". \", \" \"]`.\n\n# Arguments\n\n* `chunk_size` - Target maximum chunk size in characters. Must be > 0.\n  If 0 is passed, it is clamped to 1.\n* `overlap` - Number of characters to overlap between chunks. If larger\n  than `chunk_size`, it is clamped to `chunk_size - 1`.\n\n# Examples\n\n```\nuse forge_embed::chunking::RecursiveCharacterSplitter;\n\nlet splitter = RecursiveCharacterSplitter::new(500, 50);\n```"
            },
            {
              "name": "::RecursiveCharacterSplitter::with_separators",
              "line": 149,
              "signature": "pub fn with_separators(chunk_size: usize, overlap: usize, separators: Vec<String>) -> Self;",
              "documentation": "Creates a splitter with custom separators.\n\n# Arguments\n\n* `chunk_size` - Target maximum chunk size in characters. Clamped to 1 if 0.\n* `overlap` - Number of overlap characters. Clamped to `chunk_size - 1`.\n* `separators` - Custom separator hierarchy, tried in order.\n\n# Examples\n\n```\nuse forge_embed::chunking::RecursiveCharacterSplitter;\n\nlet splitter = RecursiveCharacterSplitter::with_separators(\n    200, 20,\n    vec![\"---\".to_string(), \"\\n\".to_string(), \" \".to_string()],\n);\n```"
            },
            {
              "name": "::RecursiveCharacterSplitter::chunk_size",
              "line": 164,
              "signature": "pub fn chunk_size(&self) -> usize;",
              "documentation": "Returns the configured chunk size."
            },
            {
              "name": "::RecursiveCharacterSplitter::overlap",
              "line": 169,
              "signature": "pub fn overlap(&self) -> usize;",
              "documentation": "Returns the configured overlap."
            },
            {
              "name": "::TokenSplitter",
              "line": 295,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TokenSplitter {\n\n}",
              "documentation": "Splits text by approximate token count using whitespace boundaries.\n\nUses word-level splitting as an approximation of tokenization. Each\nchunk contains at most `tokens_per_chunk` whitespace-delimited words.\n\n# Configuration\n\n- `tokens_per_chunk` -- Maximum number of words per chunk.\n- `overlap_tokens` -- Number of words to overlap between consecutive chunks.\n\n# Examples\n\n```\nuse forge_embed::chunking::{TextSplitter, TokenSplitter};\n\nlet splitter = TokenSplitter::new(3, 1);\nlet chunks = splitter.split(\"one two three four five\");\nassert_eq!(chunks.len(), 2); // [\"one two three\", \"three four five\"]\n```"
            },
            {
              "name": "::TokenSplitter::new",
              "line": 317,
              "signature": "pub fn new(tokens_per_chunk: usize, overlap_tokens: usize) -> Self;",
              "documentation": "Creates a new `TokenSplitter` with the given tokens per chunk and overlap.\n\n# Arguments\n\n* `tokens_per_chunk` - Maximum words per chunk. Must be > 0; clamped to 1 if 0.\n* `overlap_tokens` - Words to overlap. Clamped to `tokens_per_chunk - 1`.\n\n# Examples\n\n```\nuse forge_embed::chunking::TokenSplitter;\n\nlet splitter = TokenSplitter::new(100, 10);\n```"
            },
            {
              "name": "::TokenSplitter::tokens_per_chunk",
              "line": 335,
              "signature": "pub fn tokens_per_chunk(&self) -> usize;",
              "documentation": "Returns the configured tokens per chunk."
            },
            {
              "name": "::TokenSplitter::overlap_tokens",
              "line": 340,
              "signature": "pub fn overlap_tokens(&self) -> usize;",
              "documentation": "Returns the configured overlap tokens."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-embed/src/document.rs",
          "sha256": "8d95d8e9d6be575f5d12050c9c17c1c9a27e67c436bd5fff569099e9a0c4aa3e",
          "artifactSha256": "c1cc60d291ed83b32af9e2be1fb7b7c45c8abe75b355dc13ec9b4c99d2c800bd",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/document.rs.txt",
          "declarations": [
            {
              "name": "::Document",
              "line": 38,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct Document {\n/// The text content of the document.\n\npub content: String,\n/// Arbitrary metadata associated with this document.\n\npub metadata: serde_json::Value\n}",
              "documentation": "A loaded document with its text content and metadata.\n\nRepresents a single document or text fragment in a RAG pipeline.\nMetadata is stored as a JSON value for maximum flexibility.\n\n# Examples\n\n```\nuse forge_embed::document::Document;\nuse serde_json::json;\n\nlet doc = Document {\n    content: \"The quick brown fox.\".to_string(),\n    metadata: json!({\"source\": \"example.txt\", \"page\": 1}),\n};\nassert!(!doc.content.is_empty());\n```"
            },
            {
              "name": "::Document::new",
              "line": 61,
              "signature": "pub fn new(content: impl Into<String>) -> Self;",
              "documentation": "Creates a new document with the given content and empty metadata.\n\n# Arguments\n\n* `content` - The text content.\n\n# Examples\n\n```\nuse forge_embed::document::Document;\n\nlet doc = Document::new(\"Some text.\");\nassert_eq!(doc.content, \"Some text.\");\nassert_eq!(doc.metadata, serde_json::Value::Null);\n```"
            },
            {
              "name": "::Document::with_metadata",
              "line": 84,
              "signature": "pub fn with_metadata(content: impl Into<String>, metadata: serde_json::Value) -> Self;",
              "documentation": "Creates a new document with content and metadata.\n\n# Arguments\n\n* `content` - The text content.\n* `metadata` - Metadata to associate with the document.\n\n# Examples\n\n```\nuse forge_embed::document::Document;\nuse serde_json::json;\n\nlet doc = Document::with_metadata(\"content\", json!({\"key\": \"value\"}));\nassert_eq!(doc.metadata[\"key\"], \"value\");\n```"
            },
            {
              "name": "::Document::is_empty",
              "line": 92,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if the document content is empty."
            },
            {
              "name": "::Document::len",
              "line": 97,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the character length of the document content."
            },
            {
              "name": "::DocumentLoader",
              "line": 125,
              "signature": "pub trait DocumentLoader: Send + Sync {\n    /// Loads documents from the given source string.\n    ///\n    /// # Arguments\n    ///\n    /// * `source` - The source to load from. Interpretation depends on the\n    ///   implementation (raw text, JSON string, file path, etc.).\n    ///\n    /// # Returns\n    ///\n    /// A vector of loaded documents.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeEmbedError`] if loading fails (e.g., invalid format,\n    /// empty input).\n    fn load(&self, source: &str) -> EmbedResult<Vec<Document>>;\n}",
              "documentation": "Trait for loading documents from a source.\n\nImplementors convert a source (text, JSON, file path, URL, etc.) into\na vector of [`Document`] instances.\n\n# Examples\n\n```\nuse forge_embed::document::{DocumentLoader, Document};\nuse forge_embed::error::ForgeEmbedError;\n\nstruct UpperLoader;\n\nimpl DocumentLoader for UpperLoader {\n    fn load(&self, source: &str) -> Result<Vec<Document>, ForgeEmbedError> {\n        Ok(vec![Document::new(source.to_uppercase())])\n    }\n}\n\nlet loader = UpperLoader;\nlet docs = loader.load(\"hello\").unwrap();\nassert_eq!(docs[0].content, \"HELLO\");\n```"
            },
            {
              "name": "::TextLoader",
              "line": 160,
              "signature": "#[derive(Debug, Clone, Copy, Default)]\npub struct TextLoader;",
              "documentation": "Loads plain text as a single document.\n\nThe entire source string becomes the content of one document. Metadata\nincludes the character length.\n\n# Examples\n\n```\nuse forge_embed::document::{DocumentLoader, TextLoader};\n\nlet loader = TextLoader;\nlet docs = loader.load(\"Hello, world!\").unwrap();\nassert_eq!(docs.len(), 1);\nassert_eq!(docs[0].content, \"Hello, world!\");\n```"
            },
            {
              "name": "::JsonLoader",
              "line": 204,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct JsonLoader {\n\n}",
              "documentation": "Loads a JSON string and extracts text content from specified fields.\n\nIf the JSON is an object, each string-valued field becomes a separate\ndocument. If the JSON is an array of objects, each object's string fields\nare extracted as documents. Non-string fields are skipped.\n\n# Configuration\n\n- `content_field` -- If set, only extract text from this field name.\n  If `None`, all string fields are extracted.\n\n# Examples\n\n```\nuse forge_embed::document::{DocumentLoader, JsonLoader};\n\nlet loader = JsonLoader::new(Some(\"text\".to_string()));\nlet json = r#\"[{\"text\": \"Hello\"}, {\"text\": \"World\"}]\"#;\nlet docs = loader.load(json).unwrap();\nassert_eq!(docs.len(), 2);\nassert_eq!(docs[0].content, \"Hello\");\nassert_eq!(docs[1].content, \"World\");\n```"
            },
            {
              "name": "::JsonLoader::new",
              "line": 228,
              "signature": "pub fn new(content_field: Option<String>) -> Self;",
              "documentation": "Creates a new `JsonLoader` with an optional content field filter.\n\n# Arguments\n\n* `content_field` - If `Some`, only extract text from fields with\n  this name. If `None`, extract all string fields.\n\n# Examples\n\n```\nuse forge_embed::document::JsonLoader;\n\n// Extract only the \"body\" field from JSON objects\nlet loader = JsonLoader::new(Some(\"body\".to_string()));\n\n// Extract all string fields\nlet loader = JsonLoader::new(None);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-embed/src/embed.rs",
          "sha256": "eb51d8b701081c2e2939e1ba0778ec1685017b467a99a88204016a610365e324",
          "artifactSha256": "abf7b5a316d4e5351ee7faee6a58e0910be220a43dfc384ff3463de75781e9d2",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/embed.rs.txt",
          "declarations": [
            {
              "name": "::EmbeddingResult",
              "line": 42,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct EmbeddingResult {\n/// The embedding vector.\n\npub vector: Vec<f64>,\n/// The model that produced this embedding.\n\npub model: String,\n/// The number of dimensions in the embedding vector.\n\npub dimensions: usize\n}",
              "documentation": "The result of embedding a single text input.\n\nContains the embedding vector, the model that produced it, and the\nvector dimensionality.\n\n# Examples\n\n```\nuse forge_embed::embed::EmbeddingResult;\n\nlet result = EmbeddingResult {\n    vector: vec![0.1, 0.2, 0.3],\n    model: \"text-embedding-3-small\".to_string(),\n    dimensions: 3,\n};\nassert_eq!(result.dimensions, result.vector.len());\n```"
            },
            {
              "name": "::EmbeddingProvider",
              "line": 83,
              "signature": "#[async_trait]\npub trait EmbeddingProvider: Send + Sync {\n    /// Returns the model identifier for this provider (e.g., \"text-embedding-3-small\").\n    fn model_id(&self) -> &str;\n\n    /// Generates embedding vectors for one or more text inputs.\n    ///\n    /// # Arguments\n    ///\n    /// * `input` - A slice of strings to embed. Must contain at least one item.\n    ///\n    /// # Returns\n    ///\n    /// A vector of embedding vectors, one per input string, in the same order.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeEmbedError::ModelError`] if the provider call fails,\n    /// or [`ForgeEmbedError::EmptyInput`] if the input slice is empty.\n    async fn embed(&self, input: &[String]) -> Result<Vec<Vec<f64>>, ForgeEmbedError>;\n}",
              "documentation": "Trait for pluggable embedding backends.\n\nImplementors provide the actual embedding logic (e.g., calling an API\nlike OpenAI, running a local model, etc.). The trait is object-safe\nand supports async execution.\n\n# ANVIL Spec SS6.3\n\nEvery ANVIL-compliant runtime must support at least one embedding provider.\nProvider implementations must be `Send + Sync` for use in async contexts.\n\n# Examples\n\n```\nuse forge_embed::embed::EmbeddingProvider;\nuse forge_embed::error::ForgeEmbedError;\nuse async_trait::async_trait;\n\nstruct MockProvider;\n\n#[async_trait]\nimpl EmbeddingProvider for MockProvider {\n    fn model_id(&self) -> &str {\n        \"mock-embed-v1\"\n    }\n\n    async fn embed(&self, input: &[String]) -> Result<Vec<Vec<f64>>, ForgeEmbedError> {\n        Ok(input.iter().map(|_| vec![0.1, 0.2, 0.3]).collect())\n    }\n}\n```"
            },
            {
              "name": "::embed",
              "line": 131,
              "signature": "pub async fn embed(provider: &dyn EmbeddingProvider, text: &str) -> EmbedResult<EmbeddingResult>;",
              "documentation": "Embeds a single text string using the given provider.\n\nThis is a convenience wrapper around [`EmbeddingProvider::embed`] for the\ncommon case of embedding one document or query at a time.\n\n# Arguments\n\n* `provider` - The embedding provider to use.\n* `text` - The text to embed.\n\n# Returns\n\nAn [`EmbeddingResult`] containing the vector, model name, and dimensions.\n\n# Errors\n\nReturns [`ForgeEmbedError::EmptyInput`] if `text` is empty.\nReturns [`ForgeEmbedError::ModelError`] if the provider call fails.\n\n# Examples\n\n```no_run\n# use forge_embed::embed::{embed, EmbeddingProvider};\n# async fn example(provider: &dyn EmbeddingProvider) {\nlet result = embed(provider, \"What is machine learning?\").await;\n# }\n```"
            },
            {
              "name": "::embed_many",
              "line": 194,
              "signature": "pub async fn embed_many(\n    provider: &dyn EmbeddingProvider,\n    texts: &[String],\n) -> EmbedResult<Vec<EmbeddingResult>>;",
              "documentation": "Embeds multiple text strings using the given provider.\n\nSends all inputs in a single batch call to the provider. The returned\nresults are in the same order as the input strings.\n\n# Arguments\n\n* `provider` - The embedding provider to use.\n* `texts` - The texts to embed. Must contain at least one item.\n\n# Returns\n\nA vector of [`EmbeddingResult`] values, one per input text.\n\n# Errors\n\nReturns [`ForgeEmbedError::EmptyInput`] if `texts` is empty.\nReturns [`ForgeEmbedError::ModelError`] if the provider call fails or\nreturns a different number of vectors than inputs.\n\n# Examples\n\n```no_run\n# use forge_embed::embed::{embed_many, EmbeddingProvider};\n# async fn example(provider: &dyn EmbeddingProvider) {\nlet texts = vec![\"Hello\".to_string(), \"World\".to_string()];\nlet results = embed_many(provider, &texts).await;\n# }\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-embed/src/error.rs",
          "sha256": "6d3240e5e78a7afd1719ace97c96e290fccda5e395648a43aef69d4377744ac5",
          "artifactSha256": "2456b4c49d9599d4b84a626b4529f5a4c7da240db8ac12e70329e18466681bb4",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeEmbedError",
              "line": 31,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeEmbedError {\n    /// The embedding model returned an error.\n    #[error(\"embedding model '{model}' failed: {reason}\")]\n    ModelError {\n        /// The model identifier that was used.\n        model: String,\n        /// A description of what went wrong.\n        reason: String,\n    },\n\n    /// Vector dimensions do not match for the requested operation.\n    #[error(\"dimension mismatch: vector A has {a} dimensions but vector B has {b} dimensions; both must be equal for {operation}\")]\n    DimensionMismatch {\n        /// Dimensions of the first vector.\n        a: usize,\n        /// Dimensions of the second vector.\n        b: usize,\n        /// The operation that required matching dimensions.\n        operation: String,\n    },\n\n    /// An empty input was provided where at least one item is required.\n    #[error(\"empty input for '{operation}': at least one item is required\")]\n    EmptyInput {\n        /// The operation that received empty input.\n        operation: String,\n    },\n\n    /// A vector store operation failed.\n    #[error(\"vector store error during '{operation}': {reason}\")]\n    StoreError {\n        /// The store operation that failed (e.g., \"insert\", \"search\", \"delete\").\n        operation: String,\n        /// A description of what went wrong.\n        reason: String,\n    },\n\n    /// A text chunking operation failed.\n    #[error(\"chunking error: {reason}\")]\n    ChunkingError {\n        /// A description of what went wrong during chunking.\n        reason: String,\n    },\n\n    /// An error propagated from the `forge-core` crate.\n    #[error(transparent)]\n    Core(#[from] ForgeError),\n}",
              "documentation": "Errors that can occur during embedding, reranking, vector store, or\nchunking operations.\n\nEach variant includes enough context to identify what failed and why,\nfollowing the Forge SDK convention of actionable error messages.\n\n# Examples\n\n```\nuse forge_embed::error::ForgeEmbedError;\n\nlet err = ForgeEmbedError::EmptyInput {\n    operation: \"embed\".to_string(),\n};\nassert!(err.to_string().contains(\"embed\"));\n```"
            },
            {
              "name": "::EmbedResult",
              "line": 81,
              "signature": "pub type EmbedResult<T> = Result<T, ForgeEmbedError>;",
              "documentation": "A specialized `Result` type for `forge-embed` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-embed/src/lib.rs",
          "sha256": "d25665ffabb2954fc39de77029df8b435d6469f044ebf48bd2863f15f9c86cab",
          "artifactSha256": "0c011e62e9bb35e4fd690a383fe4acc5e1c88be19b420ac9c9a8ca563b2f8974",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/lib.rs.txt",
          "declarations": [
            {
              "name": "chunking",
              "line": 59,
              "signature": "pub mod chunking;",
              "documentation": "# forge-embed\n\nEmbedding, reranking, vector store, and RAG primitives for the Forge SDK.\n\nThis crate provides everything needed to build retrieval-augmented generation\n(RAG) pipelines with the Forge SDK:\n\n- **Embedding** \u2014 [`embed::embed`] and [`embed::embed_many`] for generating\n  vector representations of text via pluggable [`embed::EmbeddingProvider`]\n  implementations.\n- **Similarity** \u2014 [`similarity::cosine_similarity`], [`similarity::euclidean_distance`],\n  and [`similarity::dot_product`] for comparing embedding vectors.\n- **Reranking** \u2014 [`rerank::rerank`] to reorder documents by relevance, with\n  the pluggable [`rerank::Reranker`] trait for custom strategies.\n- **Vector Store** \u2014 [`vector_store::VectorStore`] trait with an\n  [`vector_store::InMemoryVectorStore`] reference implementation for\n  nearest-neighbor search.\n- **Chunking** \u2014 [`chunking::RecursiveCharacterSplitter`] and\n  [`chunking::TokenSplitter`] for breaking text into embeddable chunks.\n- **Document Loading** \u2014 [`document::TextLoader`] and [`document::JsonLoader`]\n  for loading text from various sources.\n\n# ANVIL Spec Reference\n\nThis crate implements types from the following ANVIL specification sections:\n- SS6.3 \u2014 Embedding Interface\n- SS6.4 \u2014 Reranking Interface\n- SS6.5 \u2014 Vector Store Interface\n\n# Design Principles\n\n- **Pluggable providers** \u2014 Every operation is defined by a trait so\n  implementations can be swapped without changing application code.\n- **Zero unsafe code** \u2014 All operations use safe Rust with iterators.\n- **Typed errors** \u2014 Every fallible function returns a typed [`error::ForgeEmbedError`].\n- **Serialization** \u2014 All data types implement `Serialize` and `Deserialize`.\n\n# Examples\n\n```no_run\nuse forge_embed::prelude::*;\nuse forge_embed::embed::EmbeddingProvider;\nuse forge_embed::error::ForgeEmbedError;\nuse async_trait::async_trait;\n\nstruct MyProvider;\n\n#[async_trait]\nimpl EmbeddingProvider for MyProvider {\n    fn model_id(&self) -> &str { \"my-model\" }\n    async fn embed(&self, input: &[String]) -> Result<Vec<Vec<f64>>, ForgeEmbedError> {\n        Ok(input.iter().map(|_| vec![0.1, 0.2, 0.3]).collect())\n    }\n}\n```"
            },
            {
              "name": "document",
              "line": 60,
              "signature": "pub mod document;",
              "documentation": ""
            },
            {
              "name": "embed",
              "line": 61,
              "signature": "pub mod embed;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 62,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "rerank",
              "line": 63,
              "signature": "pub mod rerank;",
              "documentation": ""
            },
            {
              "name": "similarity",
              "line": 64,
              "signature": "pub mod similarity;",
              "documentation": ""
            },
            {
              "name": "vector_store",
              "line": 65,
              "signature": "pub mod vector_store;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 68,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::chunking::{RecursiveCharacterSplitter, TextSplitter, TokenSplitter};",
              "line": 69,
              "signature": "pub use crate::chunking::{RecursiveCharacterSplitter, TextSplitter, TokenSplitter};",
              "documentation": ""
            },
            {
              "name": "pub use crate::document::{Document, DocumentLoader, JsonLoader, TextLoader};",
              "line": 70,
              "signature": "pub use crate::document::{Document, DocumentLoader, JsonLoader, TextLoader};",
              "documentation": ""
            },
            {
              "name": "pub use crate::embed::{EmbeddingProvider, EmbeddingResult};",
              "line": 71,
              "signature": "pub use crate::embed::{EmbeddingProvider, EmbeddingResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{EmbedResult, ForgeEmbedError};",
              "line": 72,
              "signature": "pub use crate::error::{EmbedResult, ForgeEmbedError};",
              "documentation": ""
            },
            {
              "name": "pub use crate::rerank::{RerankResult, Reranker};",
              "line": 73,
              "signature": "pub use crate::rerank::{RerankResult, Reranker};",
              "documentation": ""
            },
            {
              "name": "pub use crate::similarity::{cosine_similarity, dot_product, euclidean_distance};",
              "line": 74,
              "signature": "pub use crate::similarity::{cosine_similarity, dot_product, euclidean_distance};",
              "documentation": ""
            },
            {
              "name": "pub use crate::vector_store::{InMemoryVectorStore, SearchResult, VectorEntry, VectorStore};",
              "line": 75,
              "signature": "pub use crate::vector_store::{InMemoryVectorStore, SearchResult, VectorEntry, VectorStore};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-embed/src/rerank.rs",
          "sha256": "3492bef99c4c6a876008cb685249e39965975554ce65570ab40f90228a49437d",
          "artifactSha256": "84e9a0af67215359d383c137e0232cc80ffbb5dede230d48ac2079ef10975971",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/rerank.rs.txt",
          "declarations": [
            {
              "name": "::RerankResult",
              "line": 42,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct RerankResult {\n/// The original index of this document in the input slice.\n\npub index: usize,\n/// The relevance score (higher is more relevant).\n\npub score: f64,\n/// The document text.\n\npub document: String\n}",
              "documentation": "A single reranked document with its relevance score and original index.\n\n# Examples\n\n```\nuse forge_embed::rerank::RerankResult;\n\nlet result = RerankResult {\n    index: 2,\n    score: 0.95,\n    document: \"Machine learning is a subset of AI.\".to_string(),\n};\nassert_eq!(result.index, 2);\n```"
            },
            {
              "name": "::Reranker",
              "line": 92,
              "signature": "#[async_trait]\npub trait Reranker: Send + Sync {\n    /// Reranks documents by relevance to a query.\n    ///\n    /// # Arguments\n    ///\n    /// * `query` - The query string to rank documents against.\n    /// * `documents` - The documents to rerank.\n    /// * `top_k` - If provided, return only the top K most relevant results.\n    ///\n    /// # Returns\n    ///\n    /// A vector of [`RerankResult`] sorted by descending relevance score.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeEmbedError`] if the reranking operation fails.\n    async fn rerank(\n        &self,\n        query: &str,\n        documents: &[String],\n        top_k: Option<usize>,\n    ) -> Result<Vec<RerankResult>, ForgeEmbedError>;\n}",
              "documentation": "Trait for pluggable reranking strategies.\n\nImplementors can provide custom reranking logic such as cross-encoder\nmodels, BM25 scoring, or hybrid approaches.\n\n# Examples\n\n```\nuse forge_embed::rerank::{Reranker, RerankResult};\nuse forge_embed::error::ForgeEmbedError;\nuse async_trait::async_trait;\n\nstruct SimpleReranker;\n\n#[async_trait]\nimpl Reranker for SimpleReranker {\n    async fn rerank(\n        &self,\n        query: &str,\n        documents: &[String],\n        top_k: Option<usize>,\n    ) -> Result<Vec<RerankResult>, ForgeEmbedError> {\n        // Simple length-based scoring for demonstration\n        let mut results: Vec<RerankResult> = documents\n            .iter()\n            .enumerate()\n            .map(|(i, doc)| RerankResult {\n                index: i,\n                score: 1.0 / (1.0 + (doc.len() as f64 - query.len() as f64).abs()),\n                document: doc.clone(),\n            })\n            .collect();\n        results.sort_by(|a, b| b.score.partial_cmp(&a.score).unwrap_or(std::cmp::Ordering::Equal));\n        if let Some(k) = top_k {\n            results.truncate(k);\n        }\n        Ok(results)\n    }\n}\n```"
            },
            {
              "name": "::rerank",
              "line": 151,
              "signature": "pub async fn rerank(\n    provider: &dyn EmbeddingProvider,\n    query: &str,\n    documents: &[String],\n    top_k: Option<usize>,\n) -> EmbedResult<Vec<RerankResult>>;",
              "documentation": "Reranks documents by cosine similarity to a query using an embedding provider.\n\nThis is the default reranking strategy: embed the query and all documents,\nthen sort by cosine similarity (highest first).\n\n# Arguments\n\n* `provider` - The embedding provider to use for vectorizing query and documents.\n* `query` - The query string.\n* `documents` - The documents to rerank.\n* `top_k` - If provided, return only the top K most relevant results.\n\n# Returns\n\nA vector of [`RerankResult`] sorted by descending cosine similarity.\n\n# Errors\n\nReturns [`ForgeEmbedError::EmptyInput`] if `query` is empty or `documents` is empty.\nReturns [`ForgeEmbedError::ModelError`] if the embedding provider fails.\n\n# Examples\n\n```no_run\n# use forge_embed::rerank::rerank;\n# use forge_embed::embed::EmbeddingProvider;\n# async fn example(provider: &dyn EmbeddingProvider) {\nlet documents = vec![\n    \"Rust is a systems programming language.\".to_string(),\n    \"Python is popular for data science.\".to_string(),\n    \"Machine learning uses neural networks.\".to_string(),\n];\nlet results = rerank(provider, \"programming language\", &documents, Some(2)).await;\n# }\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-embed/src/similarity.rs",
          "sha256": "619ea0af9aaf0b22c34c0b9d7094f60d95f13c36d9d48234127111a3af680e8f",
          "artifactSha256": "16339ec55838f03e0f9a71ec12fabc4688921a88d9fb6f2dbe62fb0e9e93c800",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/similarity.rs.txt",
          "declarations": [
            {
              "name": "::cosine_similarity",
              "line": 97,
              "signature": "pub fn cosine_similarity(a: &[f64], b: &[f64]) -> EmbedResult<f64>;",
              "documentation": "Computes the cosine similarity between two vectors.\n\nCosine similarity measures the cosine of the angle between two vectors,\nproducing a value between -1.0 (opposite) and 1.0 (identical direction).\nA value of 0.0 indicates orthogonal (unrelated) vectors.\n\n# Formula\n\n`cos(a, b) = (a . b) / (|a| * |b|)`\n\n# Arguments\n\n* `a` - The first vector.\n* `b` - The second vector. Must have the same length as `a`.\n\n# Returns\n\nThe cosine similarity as a value in `[-1.0, 1.0]`. Returns `0.0` if\neither vector has zero magnitude (to avoid division by zero).\n\n# Errors\n\nReturns [`ForgeEmbedError::DimensionMismatch`] if the vectors have\ndifferent lengths.\nReturns [`ForgeEmbedError::EmptyInput`] if the vectors are empty.\n\n# Examples\n\n```\nuse forge_embed::similarity::cosine_similarity;\n\n// Identical direction\nlet sim = cosine_similarity(&[1.0, 0.0], &[2.0, 0.0]).unwrap();\nassert!((sim - 1.0).abs() < 1e-10);\n\n// Opposite direction\nlet sim = cosine_similarity(&[1.0, 0.0], &[-1.0, 0.0]).unwrap();\nassert!((sim - (-1.0)).abs() < 1e-10);\n\n// Orthogonal\nlet sim = cosine_similarity(&[1.0, 0.0], &[0.0, 1.0]).unwrap();\nassert!((sim - 0.0).abs() < 1e-10);\n```"
            },
            {
              "name": "::euclidean_distance",
              "line": 150,
              "signature": "pub fn euclidean_distance(a: &[f64], b: &[f64]) -> EmbedResult<f64>;",
              "documentation": "Computes the Euclidean distance between two vectors.\n\nEuclidean distance (L2 norm of the difference) measures the straight-line\ndistance between two points in N-dimensional space. Returns a non-negative\nvalue where 0.0 indicates identical vectors.\n\n# Formula\n\n`dist(a, b) = sqrt(sum((a_i - b_i)^2))`\n\n# Arguments\n\n* `a` - The first vector.\n* `b` - The second vector. Must have the same length as `a`.\n\n# Returns\n\nThe Euclidean distance, a non-negative `f64` value.\n\n# Errors\n\nReturns [`ForgeEmbedError::DimensionMismatch`] if the vectors have\ndifferent lengths.\nReturns [`ForgeEmbedError::EmptyInput`] if the vectors are empty.\n\n# Examples\n\n```\nuse forge_embed::similarity::euclidean_distance;\n\n// Identical vectors have distance 0\nlet dist = euclidean_distance(&[1.0, 2.0], &[1.0, 2.0]).unwrap();\nassert!((dist - 0.0).abs() < 1e-10);\n\n// Distance between (0,0) and (3,4) is 5\nlet dist = euclidean_distance(&[0.0, 0.0], &[3.0, 4.0]).unwrap();\nassert!((dist - 5.0).abs() < 1e-10);\n```"
            },
            {
              "name": "::dot_product",
              "line": 201,
              "signature": "pub fn dot_product(a: &[f64], b: &[f64]) -> EmbedResult<f64>;",
              "documentation": "Computes the dot product of two vectors.\n\nThe dot product (inner product) combines magnitude and direction alignment.\nIt is used in many similarity computations and as a raw building block.\n\n# Formula\n\n`dot(a, b) = sum(a_i * b_i)`\n\n# Arguments\n\n* `a` - The first vector.\n* `b` - The second vector. Must have the same length as `a`.\n\n# Returns\n\nThe scalar dot product.\n\n# Errors\n\nReturns [`ForgeEmbedError::DimensionMismatch`] if the vectors have\ndifferent lengths.\nReturns [`ForgeEmbedError::EmptyInput`] if the vectors are empty.\n\n# Examples\n\n```\nuse forge_embed::similarity::dot_product;\n\nlet result = dot_product(&[1.0, 2.0, 3.0], &[4.0, 5.0, 6.0]).unwrap();\nassert!((result - 32.0).abs() < 1e-10);\n\n// Orthogonal vectors\nlet result = dot_product(&[1.0, 0.0], &[0.0, 1.0]).unwrap();\nassert!((result - 0.0).abs() < 1e-10);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-embed/src/vector_store.rs",
          "sha256": "2857ad400d7305d797a88518d5cfba5c391b4c48d9923175963de90541055b8d",
          "artifactSha256": "2c5481f681b3c316c068bfcd6a7625044aa03ba1d1b00982ca2240d7a051f692",
          "url": "/reference/source/forge-rs/crates/forge-embed/src/vector_store.rs.txt",
          "declarations": [
            {
              "name": "::VectorEntry",
              "line": 56,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct VectorEntry {\n/// Unique identifier for this entry.\n\npub id: String,\n/// The embedding vector.\n\npub vector: Vec<f64>,\n/// Arbitrary metadata associated with this entry.\n\npub metadata: serde_json::Value\n}",
              "documentation": "A single entry in a vector store.\n\nAssociates an embedding vector with an identifier and arbitrary metadata.\n\n# Examples\n\n```\nuse forge_embed::vector_store::VectorEntry;\nuse serde_json::json;\n\nlet entry = VectorEntry {\n    id: \"doc-42\".to_string(),\n    vector: vec![0.1, 0.2, 0.3],\n    metadata: json!({\"source\": \"wikipedia\", \"title\": \"Rust\"}),\n};\nassert_eq!(entry.id, \"doc-42\");\n```"
            },
            {
              "name": "::SearchResult",
              "line": 86,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SearchResult {\n/// The matched vector entry.\n\npub entry: VectorEntry,\n/// The similarity score (higher is more similar).\n\npub score: f64\n}",
              "documentation": "A search result from a vector store query.\n\nContains the matched entry and its similarity score relative to the query.\n\n# Examples\n\n```\nuse forge_embed::vector_store::{SearchResult, VectorEntry};\nuse serde_json::json;\n\nlet result = SearchResult {\n    entry: VectorEntry {\n        id: \"doc-1\".to_string(),\n        vector: vec![1.0, 0.0],\n        metadata: json!({}),\n    },\n    score: 0.95,\n};\nassert!(result.score > 0.9);\n```"
            },
            {
              "name": "::VectorStore",
              "line": 131,
              "signature": "#[async_trait]\npub trait VectorStore: Send + Sync {\n    /// Inserts or updates a vector entry in the store.\n    ///\n    /// If an entry with the same `id` already exists, it is replaced.\n    ///\n    /// # Arguments\n    ///\n    /// * `entry` - The vector entry to insert.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeEmbedError::StoreError`] if the insertion fails.\n    async fn insert(&mut self, entry: VectorEntry) -> EmbedResult<()>;\n\n    /// Searches for the nearest vectors to the query.\n    ///\n    /// Returns up to `top_k` results sorted by descending similarity score.\n    ///\n    /// # Arguments\n    ///\n    /// * `query` - The query embedding vector.\n    /// * `top_k` - Maximum number of results to return.\n    ///\n    /// # Returns\n    ///\n    /// A vector of [`SearchResult`] sorted by descending similarity score.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeEmbedError::StoreError`] if the search fails.\n    /// Returns [`ForgeEmbedError::EmptyInput`] if the query vector is empty.\n    async fn search(&self, query: &[f64], top_k: usize) -> EmbedResult<Vec<SearchResult>>;\n\n    /// Deletes a vector entry by ID.\n    ///\n    /// # Arguments\n    ///\n    /// * `id` - The identifier of the entry to delete.\n    ///\n    /// # Returns\n    ///\n    /// `true` if the entry was found and deleted, `false` if it did not exist.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeEmbedError::StoreError`] if the deletion fails.\n    async fn delete(&mut self, id: &str) -> EmbedResult<bool>;\n}",
              "documentation": "Trait for pluggable vector storage backends.\n\nImplementors provide persistent (or ephemeral) storage for embedding\nvectors with nearest-neighbor search capabilities.\n\n# ANVIL Spec SS6.5\n\nEvery ANVIL-compliant runtime that supports RAG must implement this\ninterface. The trait is object-safe and supports async operations.\n\n# Examples\n\n```no_run\nuse forge_embed::vector_store::{VectorStore, VectorEntry, SearchResult};\nuse forge_embed::error::ForgeEmbedError;\nuse async_trait::async_trait;\n\nstruct MyStore;\n\n#[async_trait]\nimpl VectorStore for MyStore {\n    async fn insert(&mut self, entry: VectorEntry) -> Result<(), ForgeEmbedError> {\n        // Store the entry in your backend\n        Ok(())\n    }\n\n    async fn search(&self, query: &[f64], top_k: usize) -> Result<Vec<SearchResult>, ForgeEmbedError> {\n        // Find nearest neighbors\n        Ok(vec![])\n    }\n\n    async fn delete(&mut self, id: &str) -> Result<bool, ForgeEmbedError> {\n        // Remove the entry\n        Ok(false)\n    }\n}\n```"
            },
            {
              "name": "::InMemoryVectorStore",
              "line": 212,
              "signature": "#[derive(Debug, Default)]\npub struct InMemoryVectorStore {\n\n}",
              "documentation": "A simple in-memory vector store backed by a `HashMap`.\n\nUses brute-force cosine similarity search. Suitable for testing,\nprototyping, and small datasets. For production use with large\ncollections, use a dedicated vector database backend.\n\n# Examples\n\n```no_run\nuse forge_embed::vector_store::{InMemoryVectorStore, VectorStore, VectorEntry};\nuse serde_json::json;\n\n# async fn example() {\nlet mut store = InMemoryVectorStore::new();\n\nstore.insert(VectorEntry {\n    id: \"a\".to_string(),\n    vector: vec![1.0, 0.0, 0.0],\n    metadata: json!({}),\n}).await.unwrap();\n\nstore.insert(VectorEntry {\n    id: \"b\".to_string(),\n    vector: vec![0.0, 1.0, 0.0],\n    metadata: json!({}),\n}).await.unwrap();\n\nlet results = store.search(&[1.0, 0.0, 0.0], 1).await.unwrap();\nassert_eq!(results[0].entry.id, \"a\");\n# }\n```"
            },
            {
              "name": "::InMemoryVectorStore::new",
              "line": 227,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates an empty in-memory vector store.\n\n# Examples\n\n```\nuse forge_embed::vector_store::InMemoryVectorStore;\n\nlet store = InMemoryVectorStore::new();\nassert_eq!(store.len(), 0);\n```"
            },
            {
              "name": "::InMemoryVectorStore::len",
              "line": 234,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the number of entries in the store."
            },
            {
              "name": "::InMemoryVectorStore::is_empty",
              "line": 239,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if the store is empty."
            },
            {
              "name": "::InMemoryVectorStore::contains",
              "line": 244,
              "signature": "pub fn contains(&self, id: &str) -> bool;",
              "documentation": "Returns `true` if the store contains an entry with the given ID."
            },
            {
              "name": "::InMemoryVectorStore::get",
              "line": 249,
              "signature": "pub fn get(&self, id: &str) -> Option<&VectorEntry>;",
              "documentation": "Returns a reference to an entry by ID, if it exists."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-media",
      "language": "rust",
      "version": "0.2.0",
      "description": "Image, transcription, speech, and video generation for the Forge SDK",
      "manifest": "forge-rs/crates/forge-media/Cargo.toml",
      "manifestSha256": "16eed4bbe2211ab647b2b84c13f59d1d0ec3de943641b44621eb4cd2bc332129",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-media",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-media/src/error.rs",
          "sha256": "de7c9ef18ea09a0f66361d3069222cbadc993270d0634122f6eba34409c805e8",
          "artifactSha256": "a2b822e660805ac511299a04cabe5dce2f8d878c4d5be503f428de54da3d4bf6",
          "url": "/reference/source/forge-rs/crates/forge-media/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeMediaError",
              "line": 34,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeMediaError {\n    /// Image generation failed.\n    ///\n    /// Returned when the underlying `ImageProvider::generate_image()` call\n    /// fails, including provider-side content filters, rate limits, and\n    /// invalid prompt errors.\n    #[error(\"image generation failed for model '{model}': {reason}\")]\n    GenerationFailed {\n        /// The model identifier (e.g., \"dall-e-3\").\n        model: String,\n        /// The error message from the provider.\n        reason: String,\n    },\n\n    /// Audio transcription failed.\n    ///\n    /// Returned when the underlying `TranscriptionProvider::transcribe()` call\n    /// fails, including invalid audio data, unsupported codecs, and provider\n    /// errors.\n    #[error(\"transcription failed for model '{model}': {reason}\")]\n    TranscriptionFailed {\n        /// The model identifier (e.g., \"whisper-1\").\n        model: String,\n        /// The error message from the provider.\n        reason: String,\n    },\n\n    /// Speech synthesis failed.\n    ///\n    /// Returned when the underlying `SpeechProvider::speak()` call fails,\n    /// including invalid voice identifiers, excessively long input, and\n    /// provider errors.\n    #[error(\"speech synthesis failed for model '{model}': {reason}\")]\n    SpeechFailed {\n        /// The model identifier (e.g., \"tts-1\").\n        model: String,\n        /// The error message from the provider.\n        reason: String,\n    },\n\n    /// Video generation failed.\n    ///\n    /// Returned when the underlying `VideoProvider::generate_video()` call\n    /// fails, including content filters, invalid dimensions, and provider\n    /// errors.\n    #[error(\"video generation failed for model '{model}': {reason}\")]\n    VideoFailed {\n        /// The model identifier (e.g., \"sora-1\").\n        model: String,\n        /// The error message from the provider.\n        reason: String,\n    },\n\n    /// The requested media format is not supported.\n    ///\n    /// Returned when a format is requested that the provider does not support,\n    /// or when input data uses an unrecognized encoding.\n    #[error(\"unsupported format '{format}': {reason}\")]\n    UnsupportedFormat {\n        /// The format that was requested (e.g., \"tiff\", \"aac\").\n        format: String,\n        /// Why the format is not supported.\n        reason: String,\n    },\n\n    /// A `forge-core` error occurred during a media operation.\n    #[error(\"core error: {0}\")]\n    Core(#[from] forge_core::error::ForgeError),\n}",
              "documentation": "Error type for media operations.\n\nCovers image generation failures, transcription errors, speech synthesis\nfailures, video generation errors, unsupported format requests, and\npropagated core errors.\n\n# Examples\n\n```\nuse forge_media::ForgeMediaError;\n\nlet err = ForgeMediaError::GenerationFailed {\n    model: \"dall-e-3\".to_string(),\n    reason: \"content policy violation\".to_string(),\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"dall-e-3\"));\nassert!(msg.contains(\"content policy violation\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-media/src/image.rs",
          "sha256": "792e2d275812ea8f56797ef026fdb45fc3c1ec57c3424d9070ccba72070f78e5",
          "artifactSha256": "d1fdcdb577cb464dd59a888440494670f081746d9febfd3970d2541240dbe0f1",
          "url": "/reference/source/forge-rs/crates/forge-media/src/image.rs.txt",
          "declarations": [
            {
              "name": "::ImageFormat",
              "line": 48,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum ImageFormat {\n    /// PNG (Portable Network Graphics) \u2014 lossless compression.\n    #[default]\n    Png,\n    /// JPEG \u2014 lossy compression, smaller file sizes.\n    Jpeg,\n    /// WebP \u2014 modern format with both lossy and lossless modes.\n    Webp,\n}",
              "documentation": "The output format for generated images.\n\nDetermines the encoding used for the image bytes in [`ImageResult::data`].\n\n# Examples\n\n```\nuse forge_media::image::ImageFormat;\n\nlet format = ImageFormat::Png;\nassert_eq!(format.mime_type(), \"image/png\");\nassert_eq!(format.extension(), \"png\");\n```"
            },
            {
              "name": "::ImageFormat::mime_type",
              "line": 74,
              "signature": "pub fn mime_type(&self) -> &'static str;",
              "documentation": "Returns the MIME type string for this format.\n\n# Returns\n\nA static MIME type string suitable for HTTP `Content-Type` headers.\n\n# Examples\n\n```\nuse forge_media::image::ImageFormat;\n\nassert_eq!(ImageFormat::Png.mime_type(), \"image/png\");\nassert_eq!(ImageFormat::Jpeg.mime_type(), \"image/jpeg\");\nassert_eq!(ImageFormat::Webp.mime_type(), \"image/webp\");\n```"
            },
            {
              "name": "::ImageFormat::extension",
              "line": 93,
              "signature": "pub fn extension(&self) -> &'static str;",
              "documentation": "Returns the file extension for this format (without the dot).\n\n# Examples\n\n```\nuse forge_media::image::ImageFormat;\n\nassert_eq!(ImageFormat::Png.extension(), \"png\");\nassert_eq!(ImageFormat::Jpeg.extension(), \"jpeg\");\nassert_eq!(ImageFormat::Webp.extension(), \"webp\");\n```"
            },
            {
              "name": "::ImageOptions",
              "line": 129,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ImageOptions {\n/// Desired width in pixels.\n\npub width: u32,\n/// Desired height in pixels.\n\npub height: u32,\n/// Output image format.\n\npub format: ImageFormat,\n/// Output quality (0-100). Applicable to lossy formats like JPEG and WebP.\n\n/// `None` means the provider's default quality.\n\npub quality: Option<u8>,\n/// Style hint for the generation model (e.g., \"photorealistic\", \"watercolor\").\n\n/// `None` means the provider's default style.\n\npub style: Option<String>\n}",
              "documentation": "Configuration options for image generation.\n\nControls the output dimensions, format, quality, and style of generated images.\nAll fields except `format` are optional; providers will use their own defaults\nfor unspecified values.\n\n# Examples\n\n```\nuse forge_media::image::{ImageFormat, ImageOptions};\n\nlet options = ImageOptions {\n    width: 1024,\n    height: 1024,\n    format: ImageFormat::Png,\n    quality: Some(90),\n    style: Some(\"photorealistic\".to_string()),\n};\nassert_eq!(options.width, 1024);\n```"
            },
            {
              "name": "::ImageResult",
              "line": 176,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ImageResult {\n/// The raw image bytes in the format specified by `mime_type`.\n\npub data: Vec<u8>,\n/// The MIME type of the image data (e.g., \"image/png\").\n\npub mime_type: String,\n/// The width of the generated image in pixels.\n\npub width: u32,\n/// The height of the generated image in pixels.\n\npub height: u32,\n/// The model that generated this image (e.g., \"dall-e-3\").\n\npub model: String\n}",
              "documentation": "The result of an image generation operation.\n\nContains the raw image bytes along with metadata about the generated image.\n\n# Examples\n\n```\nuse forge_media::image::ImageResult;\n\nlet result = ImageResult {\n    data: vec![0x89, 0x50, 0x4E, 0x47],\n    mime_type: \"image/png\".to_string(),\n    width: 1024,\n    height: 1024,\n    model: \"dall-e-3\".to_string(),\n};\nassert_eq!(result.data.len(), 4);\nassert_eq!(result.mime_type, \"image/png\");\n```"
            },
            {
              "name": "::ImageProvider",
              "line": 232,
              "signature": "#[async_trait]\npub trait ImageProvider: Send + Sync {\n    /// Returns the model identifier (e.g., \"dall-e-3\", \"stable-diffusion-xl\").\n    fn model_id(&self) -> &str;\n\n    /// Returns the provider name (e.g., \"openai\", \"stability\").\n    fn provider_name(&self) -> &str;\n\n    /// Generates an image from a text prompt.\n    ///\n    /// # Arguments\n    ///\n    /// * `prompt` - The text description of the image to generate.\n    /// * `options` - Configuration for output dimensions, format, quality, and style.\n    ///\n    /// # Returns\n    ///\n    /// An [`ImageResult`] containing the generated image bytes and metadata.\n    ///\n    /// # Errors\n    ///\n    /// * [`ForgeMediaError::GenerationFailed`] -- if the provider returns an error.\n    /// * [`ForgeMediaError::UnsupportedFormat`] -- if the requested format is not supported.\n    async fn generate_image(\n        &self,\n        prompt: &str,\n        options: &ImageOptions,\n    ) -> Result<ImageResult, ForgeMediaError>;\n}",
              "documentation": "A provider capable of generating images from text prompts.\n\nImplementations of this trait connect to specific image generation backends\n(e.g., DALL-E, Stable Diffusion, Midjourney). The provider is responsible\nfor translating the generic [`ImageOptions`] into provider-specific API calls\nand returning the result as an [`ImageResult`].\n\n# ANVIL Spec S6.3\n\nThe media interface is provider-agnostic. Agent code never imports a specific\nimage provider -- it uses this trait through the Forge media API.\n\n# Examples\n\n```no_run\nuse async_trait::async_trait;\nuse forge_media::image::{ImageOptions, ImageProvider, ImageResult};\nuse forge_media::ForgeMediaError;\n\nstruct MyImageProvider;\n\n#[async_trait]\nimpl ImageProvider for MyImageProvider {\n    fn model_id(&self) -> &str { \"my-model-v1\" }\n    fn provider_name(&self) -> &str { \"my-provider\" }\n\n    async fn generate_image(\n        &self,\n        prompt: &str,\n        options: &ImageOptions,\n    ) -> Result<ImageResult, ForgeMediaError> {\n        // Implementation would call the actual provider API here\n        Ok(ImageResult {\n            data: vec![0x89, 0x50, 0x4E, 0x47],\n            mime_type: options.format.mime_type().to_string(),\n            width: options.width,\n            height: options.height,\n            model: self.model_id().to_string(),\n        })\n    }\n}\n```"
            },
            {
              "name": "::generate_image",
              "line": 301,
              "signature": "pub async fn generate_image(\n    provider: &dyn ImageProvider,\n    prompt: &str,\n    options: &ImageOptions,\n) -> Result<ImageResult, ForgeMediaError>;",
              "documentation": "Generates an image from a text prompt using the specified provider.\n\nThis is the primary entry point for image generation in the Forge SDK.\nIt delegates to the provider's `generate_image` method and emits telemetry\nspans for observability.\n\n# ANVIL Spec S6.3\n\nImplements the `media.image.generate` operation defined by the ANVIL\nmedia interface.\n\n# Arguments\n\n* `provider` - The image generation provider to use.\n* `prompt` - The text description of the image to generate.\n* `options` - Configuration for output dimensions, format, quality, and style.\n\n# Returns\n\nAn [`ImageResult`] containing the generated image bytes and metadata.\n\n# Errors\n\n* [`ForgeMediaError::GenerationFailed`] -- if the provider call fails.\n* [`ForgeMediaError::UnsupportedFormat`] -- if the requested format is not supported.\n\n# Examples\n\n```no_run\nuse forge_media::image::{generate_image, ImageOptions, ImageProvider};\n\nasync fn example(provider: &dyn ImageProvider) {\n    let options = ImageOptions::default();\n    let result = generate_image(provider, \"a sunset over the ocean\", &options).await;\n    match result {\n        Ok(img) => println!(\"Generated {}x{} image\", img.width, img.height),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-media/src/lib.rs",
          "sha256": "847c6e669bd3f429d1e8b317a77157accaa56e98e11e634230b44cceb94e5f7c",
          "artifactSha256": "e63946fb6f284029e5741447459cdeeebed17a34cfe9fcc1a24266d6da923621",
          "url": "/reference/source/forge-rs/crates/forge-media/src/lib.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 90,
              "signature": "pub mod error;",
              "documentation": "# forge-media\n\nImage generation, audio transcription, speech synthesis, and video generation\nfor the Forge SDK.\n\nThis crate provides the media capabilities that agent code uses to interact with\nimage, audio, and video providers. It builds on `forge-core` error types and\nfollows the provider-agnostic pattern established across the Forge SDK:\n\n- **Image generation** -- [`image::generate_image()`] for creating images from text prompts.\n- **Transcription** -- [`transcription::transcribe()`] for converting audio to text.\n- **Speech synthesis** -- [`speech::speak()`] for converting text to spoken audio.\n- **Video generation** -- [`video::generate_video()`] for creating videos from text prompts.\n\nEach media type has a corresponding provider trait (`ImageProvider`, `TranscriptionProvider`,\n`SpeechProvider`, `VideoProvider`) that defines the interface for concrete backends.\nAgent code interacts with these traits through the top-level functions, never importing\na specific provider implementation directly.\n\n# ANVIL Spec Reference\n\nThis crate implements ANVIL Spec S6.3 -- Media Interface, which defines the optional\nmedia capabilities that ANVIL-compliant runtimes may expose. All four media types\n(image, transcription, speech, video) are implemented through pluggable provider traits.\n\n# Examples\n\n## Image Generation\n\n```no_run\nuse forge_media::image::{generate_image, ImageOptions, ImageProvider};\n\nasync fn example(provider: &dyn ImageProvider) {\n    let options = ImageOptions::default();\n    let result = generate_image(provider, \"a sunset over mountains\", &options).await;\n    match result {\n        Ok(img) => println!(\"Generated {}x{} image\", img.width, img.height),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```\n\n## Audio Transcription\n\n```no_run\nuse forge_media::transcription::{transcribe, TranscriptionOptions, TranscriptionProvider};\n\nasync fn example(provider: &dyn TranscriptionProvider) {\n    let audio: Vec<u8> = vec![]; // audio bytes\n    let options = TranscriptionOptions::default();\n    let result = transcribe(provider, &audio, &options).await;\n    match result {\n        Ok(t) => println!(\"Text: {}\", t.text),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```\n\n## Speech Synthesis\n\n```no_run\nuse forge_media::speech::{speak, SpeechOptions, SpeechProvider};\n\nasync fn example(provider: &dyn SpeechProvider) {\n    let options = SpeechOptions::default();\n    let result = speak(provider, \"Hello, world!\", &options).await;\n    match result {\n        Ok(s) => println!(\"Audio: {} bytes\", s.audio.len()),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```\n\n## Video Generation\n\n```no_run\nuse forge_media::video::{generate_video, VideoOptions, VideoProvider};\n\nasync fn example(provider: &dyn VideoProvider) {\n    let options = VideoOptions::default();\n    let result = generate_video(provider, \"a cat playing with yarn\", &options).await;\n    match result {\n        Ok(v) => println!(\"Video: {}x{}, {:.1}s\", v.width, v.height, v.duration_seconds),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```"
            },
            {
              "name": "image",
              "line": 91,
              "signature": "pub mod image;",
              "documentation": ""
            },
            {
              "name": "speech",
              "line": 92,
              "signature": "pub mod speech;",
              "documentation": ""
            },
            {
              "name": "transcription",
              "line": 93,
              "signature": "pub mod transcription;",
              "documentation": ""
            },
            {
              "name": "video",
              "line": 94,
              "signature": "pub mod video;",
              "documentation": ""
            },
            {
              "name": "pub use error::ForgeMediaError;",
              "line": 96,
              "signature": "pub use error::ForgeMediaError;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 99,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types from the media crate."
            },
            {
              "name": "pub use crate::error::ForgeMediaError;",
              "line": 100,
              "signature": "pub use crate::error::ForgeMediaError;",
              "documentation": ""
            },
            {
              "name": "pub use crate::image::{generate_image, ImageFormat, ImageOptions, ImageProvider, ImageResult};",
              "line": 101,
              "signature": "pub use crate::image::{generate_image, ImageFormat, ImageOptions, ImageProvider, ImageResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::speech::{speak, AudioFormat, SpeechOptions, SpeechProvider, SpeechResult};",
              "line": 102,
              "signature": "pub use crate::speech::{speak, AudioFormat, SpeechOptions, SpeechProvider, SpeechResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::transcription::{\n        transcribe, TranscriptionOptions, TranscriptionProvider, TranscriptionResult,\n        TranscriptionSegment,\n    };",
              "line": 103,
              "signature": "pub use crate::transcription::{\n        transcribe, TranscriptionOptions, TranscriptionProvider, TranscriptionResult,\n        TranscriptionSegment,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::video::{generate_video, VideoFormat, VideoOptions, VideoProvider, VideoResult};",
              "line": 107,
              "signature": "pub use crate::video::{generate_video, VideoFormat, VideoOptions, VideoProvider, VideoResult};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-media/src/speech.rs",
          "sha256": "70552b7d5e97993f9f1ecf278efe005f90936e1402dd4c207c3c5946caeae6f7",
          "artifactSha256": "5cd4c16812ea7dd1ec19c3e82769deb8fdeea0a2d25e70ed2a3606a85e0105d7",
          "url": "/reference/source/forge-rs/crates/forge-media/src/speech.rs.txt",
          "declarations": [
            {
              "name": "::AudioFormat",
              "line": 48,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum AudioFormat {\n    /// MP3 \u2014 widely supported lossy audio format.\n    #[default]\n    Mp3,\n    /// WAV \u2014 uncompressed PCM audio.\n    Wav,\n    /// OGG \u2014 open container format, typically with Vorbis or Opus codec.\n    Ogg,\n    /// FLAC \u2014 lossless audio compression.\n    Flac,\n}",
              "documentation": "The output format for synthesized audio.\n\nDetermines the encoding used for the audio bytes in [`SpeechResult::audio`].\n\n# Examples\n\n```\nuse forge_media::speech::AudioFormat;\n\nlet format = AudioFormat::Mp3;\nassert_eq!(format.mime_type(), \"audio/mpeg\");\nassert_eq!(format.extension(), \"mp3\");\n```"
            },
            {
              "name": "::AudioFormat::mime_type",
              "line": 77,
              "signature": "pub fn mime_type(&self) -> &'static str;",
              "documentation": "Returns the MIME type string for this format.\n\n# Returns\n\nA static MIME type string suitable for HTTP `Content-Type` headers.\n\n# Examples\n\n```\nuse forge_media::speech::AudioFormat;\n\nassert_eq!(AudioFormat::Mp3.mime_type(), \"audio/mpeg\");\nassert_eq!(AudioFormat::Wav.mime_type(), \"audio/wav\");\nassert_eq!(AudioFormat::Ogg.mime_type(), \"audio/ogg\");\nassert_eq!(AudioFormat::Flac.mime_type(), \"audio/flac\");\n```"
            },
            {
              "name": "::AudioFormat::extension",
              "line": 98,
              "signature": "pub fn extension(&self) -> &'static str;",
              "documentation": "Returns the file extension for this format (without the dot).\n\n# Examples\n\n```\nuse forge_media::speech::AudioFormat;\n\nassert_eq!(AudioFormat::Mp3.extension(), \"mp3\");\nassert_eq!(AudioFormat::Wav.extension(), \"wav\");\nassert_eq!(AudioFormat::Ogg.extension(), \"ogg\");\nassert_eq!(AudioFormat::Flac.extension(), \"flac\");\n```"
            },
            {
              "name": "::SpeechOptions",
              "line": 133,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct SpeechOptions {\n/// The voice identifier to use (e.g., \"alloy\", \"echo\", \"nova\").\n\n/// `None` means the provider's default voice.\n\npub voice: Option<String>,\n/// The playback speed multiplier (e.g., 0.5 for half speed, 2.0 for double speed).\n\n/// `None` means the provider's default speed (typically 1.0).\n\npub speed: Option<f64>,\n/// Output audio format.\n\npub format: AudioFormat\n}",
              "documentation": "Configuration options for speech synthesis.\n\nControls the voice, playback speed, and output format of the synthesized audio.\nAll fields except `format` are optional; providers will use their own defaults\nfor unspecified values.\n\n# Examples\n\n```\nuse forge_media::speech::{AudioFormat, SpeechOptions};\n\nlet options = SpeechOptions {\n    voice: Some(\"alloy\".to_string()),\n    speed: Some(1.25),\n    format: AudioFormat::Mp3,\n};\nassert_eq!(options.voice.as_deref(), Some(\"alloy\"));\n```"
            },
            {
              "name": "::SpeechResult",
              "line": 163,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SpeechResult {\n/// The raw audio bytes in the format specified by `mime_type`.\n\npub audio: Vec<u8>,\n/// The MIME type of the audio data (e.g., \"audio/mpeg\").\n\npub mime_type: String,\n/// The duration of the generated audio in seconds, if available.\n\n/// `None` if the provider does not report duration.\n\npub duration_seconds: Option<f64>\n}",
              "documentation": "The result of a speech synthesis operation.\n\nContains the raw audio bytes along with metadata about the generated speech.\n\n# Examples\n\n```\nuse forge_media::speech::SpeechResult;\n\nlet result = SpeechResult {\n    audio: vec![0xFF, 0xFB, 0x90, 0x00],\n    mime_type: \"audio/mpeg\".to_string(),\n    duration_seconds: Some(2.5),\n};\nassert_eq!(result.audio.len(), 4);\nassert_eq!(result.mime_type, \"audio/mpeg\");\nassert_eq!(result.duration_seconds, Some(2.5));\n```"
            },
            {
              "name": "::SpeechProvider",
              "line": 213,
              "signature": "#[async_trait]\npub trait SpeechProvider: Send + Sync {\n    /// Returns the model identifier (e.g., \"tts-1\", \"tts-1-hd\").\n    fn model_id(&self) -> &str;\n\n    /// Returns the provider name (e.g., \"openai\", \"elevenlabs\").\n    fn provider_name(&self) -> &str;\n\n    /// Synthesizes speech from text.\n    ///\n    /// # Arguments\n    ///\n    /// * `text` - The text to convert to speech.\n    /// * `options` - Configuration for voice, speed, and output format.\n    ///\n    /// # Returns\n    ///\n    /// A [`SpeechResult`] containing the generated audio bytes and metadata.\n    ///\n    /// # Errors\n    ///\n    /// * [`ForgeMediaError::SpeechFailed`] -- if the provider returns an error.\n    /// * [`ForgeMediaError::UnsupportedFormat`] -- if the requested format is not supported.\n    async fn speak(\n        &self,\n        text: &str,\n        options: &SpeechOptions,\n    ) -> Result<SpeechResult, ForgeMediaError>;\n}",
              "documentation": "A provider capable of synthesizing speech from text.\n\nImplementations of this trait connect to specific text-to-speech backends\n(e.g., OpenAI TTS, Google Cloud TTS, ElevenLabs). The provider is responsible\nfor translating the generic [`SpeechOptions`] into provider-specific API calls\nand returning the result as a [`SpeechResult`].\n\n# ANVIL Spec S6.3\n\nThe media interface is provider-agnostic. Agent code never imports a specific\nspeech provider -- it uses this trait through the Forge media API.\n\n# Examples\n\n```no_run\nuse async_trait::async_trait;\nuse forge_media::speech::{SpeechOptions, SpeechProvider, SpeechResult};\nuse forge_media::ForgeMediaError;\n\nstruct MySpeechProvider;\n\n#[async_trait]\nimpl SpeechProvider for MySpeechProvider {\n    fn model_id(&self) -> &str { \"my-tts-v1\" }\n    fn provider_name(&self) -> &str { \"my-provider\" }\n\n    async fn speak(\n        &self,\n        text: &str,\n        options: &SpeechOptions,\n    ) -> Result<SpeechResult, ForgeMediaError> {\n        Ok(SpeechResult {\n            audio: vec![0xFF, 0xFB, 0x90, 0x00],\n            mime_type: options.format.mime_type().to_string(),\n            duration_seconds: Some(1.5),\n        })\n    }\n}\n```"
            },
            {
              "name": "::speak",
              "line": 283,
              "signature": "pub async fn speak(\n    provider: &dyn SpeechProvider,\n    text: &str,\n    options: &SpeechOptions,\n) -> Result<SpeechResult, ForgeMediaError>;",
              "documentation": "Synthesizes speech from text using the specified provider.\n\nThis is the primary entry point for speech synthesis in the Forge SDK.\nIt delegates to the provider's `speak` method and emits telemetry spans\nfor observability.\n\n# ANVIL Spec S6.3\n\nImplements the `media.audio.speak` operation defined by the ANVIL\nmedia interface.\n\n# Arguments\n\n* `provider` - The speech synthesis provider to use.\n* `text` - The text to convert to speech.\n* `options` - Configuration for voice, speed, and output format.\n\n# Returns\n\nA [`SpeechResult`] containing the generated audio bytes, MIME type, and\noptional duration.\n\n# Errors\n\n* [`ForgeMediaError::SpeechFailed`] -- if the provider call fails.\n* [`ForgeMediaError::UnsupportedFormat`] -- if the requested format is not supported.\n\n# Examples\n\n```no_run\nuse forge_media::speech::{speak, SpeechOptions, SpeechProvider};\n\nasync fn example(provider: &dyn SpeechProvider) {\n    let options = SpeechOptions::default();\n    let result = speak(provider, \"Good morning!\", &options).await;\n    match result {\n        Ok(s) => println!(\"Audio: {} bytes\", s.audio.len()),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-media/src/transcription.rs",
          "sha256": "0d553e0ce09c44ab7d4599d73d30579be9edb08e6f71a561b51d978df8a484a3",
          "artifactSha256": "f90dfa7483f2a31f15c1da12aff6a23ac381b9a2aaa31911f4467262272af811",
          "url": "/reference/source/forge-rs/crates/forge-media/src/transcription.rs.txt",
          "declarations": [
            {
              "name": "::TranscriptionSegment",
              "line": 54,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct TranscriptionSegment {\n/// The start time of this segment in seconds from the beginning of the audio.\n\npub start: f64,\n/// The end time of this segment in seconds from the beginning of the audio.\n\npub end: f64,\n/// The transcribed text for this segment.\n\npub text: String\n}",
              "documentation": "A time-aligned segment of a transcription.\n\nRepresents a portion of the transcription with its start and end timestamps,\nenabling time-based navigation and subtitle generation.\n\n# Examples\n\n```\nuse forge_media::transcription::TranscriptionSegment;\n\nlet segment = TranscriptionSegment {\n    start: 0.0,\n    end: 2.5,\n    text: \"Hello, world!\".to_string(),\n};\nassert_eq!(segment.start, 0.0);\nassert_eq!(segment.end, 2.5);\nassert_eq!(segment.text, \"Hello, world!\");\n```"
            },
            {
              "name": "::TranscriptionSegment::duration",
              "line": 78,
              "signature": "pub fn duration(&self) -> f64;",
              "documentation": "Returns the duration of this segment in seconds.\n\n# Examples\n\n```\nuse forge_media::transcription::TranscriptionSegment;\n\nlet segment = TranscriptionSegment {\n    start: 1.0,\n    end: 3.5,\n    text: \"example\".to_string(),\n};\nassert!((segment.duration() - 2.5).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::TranscriptionOptions",
              "line": 101,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct TranscriptionOptions {\n/// An ISO 639-1 language code hint (e.g., \"en\", \"fr\", \"de\").\n\n/// `None` means the provider will auto-detect the language.\n\npub language: Option<String>,\n/// An optional prompt to guide the transcription model. Useful for providing\n\n/// context about domain-specific terminology or expected content.\n\n/// `None` means no guidance prompt.\n\npub prompt: Option<String>\n}",
              "documentation": "Configuration options for audio transcription.\n\nControls the language hint and optional prompt for guiding the transcription\nmodel. All fields are optional; providers will use their own defaults for\nunspecified values.\n\n# Examples\n\n```\nuse forge_media::transcription::TranscriptionOptions;\n\nlet options = TranscriptionOptions {\n    language: Some(\"en\".to_string()),\n    prompt: Some(\"Technical discussion about Rust programming\".to_string()),\n};\nassert_eq!(options.language.as_deref(), Some(\"en\"));\n```"
            },
            {
              "name": "::TranscriptionResult",
              "line": 142,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TranscriptionResult {\n/// The full transcribed text.\n\npub text: String,\n/// The detected language as an ISO 639-1 code, if available.\n\npub language: Option<String>,\n/// The total duration of the audio in seconds, if available.\n\npub duration_seconds: Option<f64>,\n/// Time-aligned transcription segments. May be empty if the provider\n\n/// does not support segmented output.\n\npub segments: Vec<TranscriptionSegment>\n}",
              "documentation": "The result of an audio transcription operation.\n\nContains the full transcribed text along with optional metadata including\ndetected language, total duration, and time-aligned segments.\n\n# Examples\n\n```\nuse forge_media::transcription::{TranscriptionResult, TranscriptionSegment};\n\nlet result = TranscriptionResult {\n    text: \"Hello, this is a test.\".to_string(),\n    language: Some(\"en\".to_string()),\n    duration_seconds: Some(3.5),\n    segments: vec![\n        TranscriptionSegment {\n            start: 0.0,\n            end: 1.5,\n            text: \"Hello,\".to_string(),\n        },\n        TranscriptionSegment {\n            start: 1.5,\n            end: 3.5,\n            text: \" this is a test.\".to_string(),\n        },\n    ],\n};\nassert_eq!(result.text, \"Hello, this is a test.\");\nassert_eq!(result.segments.len(), 2);\n```"
            },
            {
              "name": "::TranscriptionProvider",
              "line": 198,
              "signature": "#[async_trait]\npub trait TranscriptionProvider: Send + Sync {\n    /// Returns the model identifier (e.g., \"whisper-1\", \"chirp-v2\").\n    fn model_id(&self) -> &str;\n\n    /// Returns the provider name (e.g., \"openai\", \"google\").\n    fn provider_name(&self) -> &str;\n\n    /// Transcribes audio data to text.\n    ///\n    /// # Arguments\n    ///\n    /// * `audio` - Raw audio bytes. The provider determines acceptable formats\n    ///   (e.g., WAV, MP3, FLAC, OGG).\n    /// * `options` - Configuration for language hint and guidance prompt.\n    ///\n    /// # Returns\n    ///\n    /// A [`TranscriptionResult`] containing the transcribed text and metadata.\n    ///\n    /// # Errors\n    ///\n    /// * [`ForgeMediaError::TranscriptionFailed`] -- if the provider returns an error.\n    /// * [`ForgeMediaError::UnsupportedFormat`] -- if the audio format is not supported.\n    async fn transcribe(\n        &self,\n        audio: &[u8],\n        options: &TranscriptionOptions,\n    ) -> Result<TranscriptionResult, ForgeMediaError>;\n}",
              "documentation": "A provider capable of transcribing audio data to text.\n\nImplementations of this trait connect to specific speech-to-text backends\n(e.g., OpenAI Whisper, Google Speech-to-Text, Deepgram). The provider is\nresponsible for translating the generic [`TranscriptionOptions`] into\nprovider-specific API calls and returning the result as a\n[`TranscriptionResult`].\n\n# ANVIL Spec S6.3\n\nThe media interface is provider-agnostic. Agent code never imports a specific\ntranscription provider -- it uses this trait through the Forge media API.\n\n# Examples\n\n```no_run\nuse async_trait::async_trait;\nuse forge_media::transcription::{\n    TranscriptionOptions, TranscriptionProvider, TranscriptionResult,\n};\nuse forge_media::ForgeMediaError;\n\nstruct MyTranscriptionProvider;\n\n#[async_trait]\nimpl TranscriptionProvider for MyTranscriptionProvider {\n    fn model_id(&self) -> &str { \"my-whisper-v1\" }\n    fn provider_name(&self) -> &str { \"my-provider\" }\n\n    async fn transcribe(\n        &self,\n        audio: &[u8],\n        options: &TranscriptionOptions,\n    ) -> Result<TranscriptionResult, ForgeMediaError> {\n        Ok(TranscriptionResult {\n            text: \"transcribed text\".to_string(),\n            language: Some(\"en\".to_string()),\n            duration_seconds: Some(5.0),\n            segments: Vec::new(),\n        })\n    }\n}\n```"
            },
            {
              "name": "::transcribe",
              "line": 273,
              "signature": "pub async fn transcribe(\n    provider: &dyn TranscriptionProvider,\n    audio: &[u8],\n    options: &TranscriptionOptions,\n) -> Result<TranscriptionResult, ForgeMediaError>;",
              "documentation": "Transcribes audio data to text using the specified provider.\n\nThis is the primary entry point for audio transcription in the Forge SDK.\nIt delegates to the provider's `transcribe` method and emits telemetry\nspans for observability.\n\n# ANVIL Spec S6.3\n\nImplements the `media.audio.transcribe` operation defined by the ANVIL\nmedia interface.\n\n# Arguments\n\n* `provider` - The transcription provider to use.\n* `audio` - Raw audio bytes.\n* `options` - Configuration for language hint and guidance prompt.\n\n# Returns\n\nA [`TranscriptionResult`] containing the transcribed text, detected language,\nduration, and time-aligned segments.\n\n# Errors\n\n* [`ForgeMediaError::TranscriptionFailed`] -- if the provider call fails.\n* [`ForgeMediaError::UnsupportedFormat`] -- if the audio format is not supported.\n\n# Examples\n\n```no_run\nuse forge_media::transcription::{transcribe, TranscriptionOptions, TranscriptionProvider};\n\nasync fn example(provider: &dyn TranscriptionProvider) {\n    let audio_bytes = vec![0u8; 1024]; // sample audio bytes\n    let options = TranscriptionOptions {\n        language: Some(\"en\".to_string()),\n        prompt: None,\n    };\n    let result = transcribe(provider, &audio_bytes, &options).await;\n    match result {\n        Ok(t) => println!(\"Text: {}\", t.text),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-media/src/video.rs",
          "sha256": "f35c9ead40a7fb460adbdf996b23d715321718cdb6a625fb57a1b5d1b629073e",
          "artifactSha256": "43263a766ea39270dc9d34b6534327b2091a2a481a0e3e6adf5fa1d115c952cb",
          "url": "/reference/source/forge-rs/crates/forge-media/src/video.rs.txt",
          "declarations": [
            {
              "name": "::VideoFormat",
              "line": 52,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum VideoFormat {\n    /// MP4 \u2014 widely supported video container format (typically H.264/AAC).\n    #[default]\n    Mp4,\n    /// WebM \u2014 open video format (typically VP8/VP9/Opus).\n    Webm,\n}",
              "documentation": "The output format for generated videos.\n\nDetermines the container format and encoding used for the video bytes\nin [`VideoResult::data`].\n\n# Examples\n\n```\nuse forge_media::video::VideoFormat;\n\nlet format = VideoFormat::Mp4;\nassert_eq!(format.mime_type(), \"video/mp4\");\nassert_eq!(format.extension(), \"mp4\");\n```"
            },
            {
              "name": "::VideoFormat::mime_type",
              "line": 75,
              "signature": "pub fn mime_type(&self) -> &'static str;",
              "documentation": "Returns the MIME type string for this format.\n\n# Returns\n\nA static MIME type string suitable for HTTP `Content-Type` headers.\n\n# Examples\n\n```\nuse forge_media::video::VideoFormat;\n\nassert_eq!(VideoFormat::Mp4.mime_type(), \"video/mp4\");\nassert_eq!(VideoFormat::Webm.mime_type(), \"video/webm\");\n```"
            },
            {
              "name": "::VideoFormat::extension",
              "line": 92,
              "signature": "pub fn extension(&self) -> &'static str;",
              "documentation": "Returns the file extension for this format (without the dot).\n\n# Examples\n\n```\nuse forge_media::video::VideoFormat;\n\nassert_eq!(VideoFormat::Mp4.extension(), \"mp4\");\nassert_eq!(VideoFormat::Webm.extension(), \"webm\");\n```"
            },
            {
              "name": "::VideoOptions",
              "line": 127,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct VideoOptions {\n/// Desired width in pixels.\n\npub width: u32,\n/// Desired height in pixels.\n\npub height: u32,\n/// Desired video duration in seconds.\n\npub duration_seconds: f64,\n/// Output video format.\n\npub format: VideoFormat\n}",
              "documentation": "Configuration options for video generation.\n\nControls the output dimensions, duration, and format of generated videos.\nAll fields except `format` use sensible defaults; providers may impose their\nown limits on dimensions and duration.\n\n# Examples\n\n```\nuse forge_media::video::{VideoFormat, VideoOptions};\n\nlet options = VideoOptions {\n    width: 1920,\n    height: 1080,\n    duration_seconds: 10.0,\n    format: VideoFormat::Mp4,\n};\nassert_eq!(options.width, 1920);\nassert_eq!(options.duration_seconds, 10.0);\n```"
            },
            {
              "name": "::VideoResult",
              "line": 170,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct VideoResult {\n/// The raw video bytes in the format specified by `mime_type`.\n\npub data: Vec<u8>,\n/// The MIME type of the video data (e.g., \"video/mp4\").\n\npub mime_type: String,\n/// The duration of the generated video in seconds.\n\npub duration_seconds: f64,\n/// The width of the generated video in pixels.\n\npub width: u32,\n/// The height of the generated video in pixels.\n\npub height: u32\n}",
              "documentation": "The result of a video generation operation.\n\nContains the raw video bytes along with metadata about the generated video.\n\n# Examples\n\n```\nuse forge_media::video::VideoResult;\n\nlet result = VideoResult {\n    data: vec![0x00, 0x00, 0x00, 0x1C],\n    mime_type: \"video/mp4\".to_string(),\n    duration_seconds: 5.0,\n    width: 1280,\n    height: 720,\n};\nassert_eq!(result.data.len(), 4);\nassert_eq!(result.mime_type, \"video/mp4\");\nassert_eq!(result.duration_seconds, 5.0);\n```"
            },
            {
              "name": "::VideoProvider",
              "line": 225,
              "signature": "#[async_trait]\npub trait VideoProvider: Send + Sync {\n    /// Returns the model identifier (e.g., \"sora-1\", \"runway-gen2\").\n    fn model_id(&self) -> &str;\n\n    /// Returns the provider name (e.g., \"openai\", \"runway\").\n    fn provider_name(&self) -> &str;\n\n    /// Generates a video from a text prompt.\n    ///\n    /// # Arguments\n    ///\n    /// * `prompt` - The text description of the video to generate.\n    /// * `options` - Configuration for output dimensions, duration, and format.\n    ///\n    /// # Returns\n    ///\n    /// A [`VideoResult`] containing the generated video bytes and metadata.\n    ///\n    /// # Errors\n    ///\n    /// * [`ForgeMediaError::VideoFailed`] -- if the provider returns an error.\n    /// * [`ForgeMediaError::UnsupportedFormat`] -- if the requested format is not supported.\n    async fn generate_video(\n        &self,\n        prompt: &str,\n        options: &VideoOptions,\n    ) -> Result<VideoResult, ForgeMediaError>;\n}",
              "documentation": "A provider capable of generating videos from text prompts.\n\nImplementations of this trait connect to specific video generation backends\n(e.g., OpenAI Sora, Runway, Pika). The provider is responsible for translating\nthe generic [`VideoOptions`] into provider-specific API calls and returning\nthe result as a [`VideoResult`].\n\n# ANVIL Spec S6.3\n\nThe media interface is provider-agnostic. Agent code never imports a specific\nvideo provider -- it uses this trait through the Forge media API.\n\n# Examples\n\n```no_run\nuse async_trait::async_trait;\nuse forge_media::video::{VideoOptions, VideoProvider, VideoResult};\nuse forge_media::ForgeMediaError;\n\nstruct MyVideoProvider;\n\n#[async_trait]\nimpl VideoProvider for MyVideoProvider {\n    fn model_id(&self) -> &str { \"my-video-v1\" }\n    fn provider_name(&self) -> &str { \"my-provider\" }\n\n    async fn generate_video(\n        &self,\n        prompt: &str,\n        options: &VideoOptions,\n    ) -> Result<VideoResult, ForgeMediaError> {\n        Ok(VideoResult {\n            data: vec![0x00, 0x00, 0x00, 0x1C],\n            mime_type: options.format.mime_type().to_string(),\n            duration_seconds: options.duration_seconds,\n            width: options.width,\n            height: options.height,\n        })\n    }\n}\n```"
            },
            {
              "name": "::generate_video",
              "line": 294,
              "signature": "pub async fn generate_video(\n    provider: &dyn VideoProvider,\n    prompt: &str,\n    options: &VideoOptions,\n) -> Result<VideoResult, ForgeMediaError>;",
              "documentation": "Generates a video from a text prompt using the specified provider.\n\nThis is the primary entry point for video generation in the Forge SDK.\nIt delegates to the provider's `generate_video` method and emits telemetry\nspans for observability.\n\n# ANVIL Spec S6.3\n\nImplements the `media.video.generate` operation defined by the ANVIL\nmedia interface.\n\n# Arguments\n\n* `provider` - The video generation provider to use.\n* `prompt` - The text description of the video to generate.\n* `options` - Configuration for output dimensions, duration, and format.\n\n# Returns\n\nA [`VideoResult`] containing the generated video bytes and metadata.\n\n# Errors\n\n* [`ForgeMediaError::VideoFailed`] -- if the provider call fails.\n* [`ForgeMediaError::UnsupportedFormat`] -- if the requested format is not supported.\n\n# Examples\n\n```no_run\nuse forge_media::video::{generate_video, VideoOptions, VideoProvider};\n\nasync fn example(provider: &dyn VideoProvider) {\n    let options = VideoOptions::default();\n    let result = generate_video(provider, \"a cat playing with yarn\", &options).await;\n    match result {\n        Ok(v) => println!(\"Video: {}x{}, {:.1}s\", v.width, v.height, v.duration_seconds),\n        Err(e) => eprintln!(\"Failed: {e}\"),\n    }\n}\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-mcp",
      "language": "rust",
      "version": "0.2.0",
      "description": "Model Context Protocol (MCP) client, server, and transport layer for the Forge SDK",
      "manifest": "forge-rs/crates/forge-mcp/Cargo.toml",
      "manifestSha256": "d16e8f459ba7f7c8a1003389291533b4098bea6dc5d8a2da1b905fd97bfbdede",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-mcp",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-mcp/src/auth.rs",
          "sha256": "cc21378a8aae74472b4d803ae8666bdf38f91e82ac42b4c88d09be0223512f98",
          "artifactSha256": "1c03a64d2bf840d9ae768b032de7650af3454e731b282b9daa07657430a0ea09",
          "url": "/reference/source/forge-rs/crates/forge-mcp/src/auth.rs.txt",
          "declarations": [
            {
              "name": "::OAuthConfig",
              "line": 37,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct OAuthConfig {\n/// The OAuth client ID registered with the authorization server.\n\npub client_id: String,\n/// The OAuth client secret, if the client is confidential.\n\n///\n\n/// Public clients (e.g., CLI tools) should leave this as `None`\n\n/// and rely on PKCE for security.\n\npub client_secret: Option<String>,\n/// The redirect URI for receiving the authorization code.\n\npub redirect_uri: String,\n/// The authorization endpoint URL.\n\npub auth_url: String,\n/// The token endpoint URL for exchanging codes for tokens.\n\npub token_url: String\n}",
              "documentation": "OAuth 2.0 configuration for authenticating with an MCP server.\n\nWhen an MCP server requires authentication, the client uses this\nconfiguration to perform an OAuth 2.0 authorization code flow with\nPKCE (RFC 7636).\n\n# Examples\n\n```\nuse forge_mcp::auth::OAuthConfig;\n\nlet config = OAuthConfig {\n    client_id: \"my-forge-app\".to_string(),\n    client_secret: None,\n    redirect_uri: \"http://localhost:3000/callback\".to_string(),\n    auth_url: \"https://auth.example.com/authorize\".to_string(),\n    token_url: \"https://auth.example.com/token\".to_string(),\n};\nassert_eq!(config.client_id, \"my-forge-app\");\n```"
            },
            {
              "name": "::PkceChallenge",
              "line": 72,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct PkceChallenge {\n/// The code verifier -- a high-entropy random string sent during\n\n/// the token exchange.\n\npub verifier: String,\n/// The code challenge -- the SHA-256 hash of the verifier, Base64url-encoded.\n\n/// Sent during the authorization request.\n\npub challenge: String,\n/// The challenge method (always \"S256\" for SHA-256).\n\npub method: String\n}",
              "documentation": "A PKCE (Proof Key for Code Exchange) challenge pair.\n\nPKCE (RFC 7636) prevents authorization code interception attacks by\nbinding the authorization request to the token exchange via a\ncryptographic challenge.\n\n# Examples\n\n```\nuse forge_mcp::auth::PkceChallenge;\n\nlet challenge = PkceChallenge {\n    verifier: \"dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk\".to_string(),\n    challenge: \"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM\".to_string(),\n    method: \"S256\".to_string(),\n};\nassert_eq!(challenge.method, \"S256\");\n```"
            },
            {
              "name": "::generate_pkce_challenge",
              "line": 116,
              "signature": "pub fn generate_pkce_challenge(verifier_bytes: &[u8]) -> ForgeMcpResult<PkceChallenge>;",
              "documentation": "Generates a PKCE S256 challenge pair from the given verifier bytes.\n\nThe verifier is Base64url-encoded (no padding), and the challenge is the\nSHA-256 hash of the verifier string, also Base64url-encoded (no padding).\n\n# Arguments\n\n* `verifier_bytes` - Random bytes to use as the verifier source. Must be\n  at least 32 bytes for adequate entropy. The MCP/OAuth spec recommends\n  32-96 bytes.\n\n# Returns\n\nA `PkceChallenge` containing the verifier, challenge, and method.\n\n# Errors\n\nReturns `ForgeMcpError::AuthError` if `verifier_bytes` is fewer than\n32 bytes.\n\n# Examples\n\n```\nuse forge_mcp::auth::generate_pkce_challenge;\n\nlet random_bytes = [0x42u8; 32];\nlet challenge = generate_pkce_challenge(&random_bytes).unwrap();\nassert_eq!(challenge.method, \"S256\");\nassert!(!challenge.verifier.is_empty());\nassert!(!challenge.challenge.is_empty());\n// Verifier and challenge are different\nassert_ne!(challenge.verifier, challenge.challenge);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-mcp/src/client.rs",
          "sha256": "adccfb8db17c77cda36b6d783f341468f21f862628014c6a2fe3a3b2235e3805",
          "artifactSha256": "79590970c023fb067809252c1c962e37c30678771bc403dece0881c46508e984",
          "url": "/reference/source/forge-rs/crates/forge-mcp/src/client.rs.txt",
          "declarations": [
            {
              "name": "::McpClientConfig",
              "line": 56,
              "signature": "#[derive(Debug, Clone)]\npub struct McpClientConfig {\n/// Transport configuration (stdio, SSE, or HTTP).\n\npub transport: TransportConfig,\n/// Optional OAuth configuration for authenticated servers.\n\npub auth: Option<OAuthConfig>\n}",
              "documentation": "Configuration for constructing an `McpClient`.\n\nSpecifies the transport to use and optional OAuth credentials for\nauthenticated MCP servers.\n\n# Examples\n\n```\nuse forge_mcp::client::McpClientConfig;\nuse forge_mcp::transport::TransportConfig;\n\nlet config = McpClientConfig {\n    transport: TransportConfig::Stdio,\n    auth: None,\n};\n```"
            },
            {
              "name": "::McpClient",
              "line": 89,
              "signature": "pub struct McpClient {\n\n}",
              "documentation": "An MCP client that communicates with a single MCP server.\n\nThe client manages the transport lifecycle, negotiates capabilities during\nthe initialization handshake, and provides methods for each MCP feature:\ntool listing/invocation, resource access, and prompt retrieval.\n\n# Lifecycle\n\n1. Create a `McpClientConfig` with the desired transport and auth settings.\n2. Call `McpClient::connect()` to establish the connection and negotiate capabilities.\n3. Use `list_tools()`, `call_tool()`, `list_resources()`, etc.\n4. Call `disconnect()` when done.\n\n# Examples\n\n```\nuse forge_mcp::client::{McpClient, McpClientConfig};\nuse forge_mcp::transport::TransportConfig;\n\nlet config = McpClientConfig {\n    transport: TransportConfig::Stdio,\n    auth: None,\n};\n\n// McpClient::connect(config).await would establish the connection.\n```"
            },
            {
              "name": "::McpClient::connect",
              "line": 136,
              "signature": "pub async fn connect(config: McpClientConfig) -> ForgeMcpResult<Self>;",
              "documentation": "Connects to an MCP server using the provided configuration.\n\nThis performs the MCP initialization handshake:\n1. Opens the transport.\n2. Sends an `initialize` request with client capabilities.\n3. Receives the server's capabilities.\n4. Sends an `initialized` notification.\n\n# Arguments\n\n* `config` - The client configuration specifying transport and auth.\n\n# Returns\n\nA connected `McpClient` ready for use.\n\n# Errors\n\nReturns `ForgeMcpError::ConnectionFailed` if the handshake fails,\nor `ForgeMcpError::TransportError` if the underlying transport cannot\nbe opened.\n\n# Examples\n\n```no_run\nuse forge_mcp::client::{McpClient, McpClientConfig};\nuse forge_mcp::transport::TransportConfig;\n\n# async fn example() -> Result<(), forge_mcp::error::ForgeMcpError> {\nlet config = McpClientConfig {\n    transport: TransportConfig::Stdio,\n    auth: None,\n};\nlet client = McpClient::connect(config).await?;\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpClient::capabilities",
              "line": 253,
              "signature": "pub fn capabilities(&self) -> &McpCapabilities;",
              "documentation": "Returns the capabilities negotiated with the server.\n\n# Examples\n\n```\nuse forge_mcp::types::McpCapabilities;\n\n// After connecting, check what the server supports:\n// let caps = client.capabilities();\n// if caps.tools { /* list and call tools */ }\n```"
            },
            {
              "name": "::McpClient::list_tools",
              "line": 281,
              "signature": "pub async fn list_tools(&self) -> ForgeMcpResult<Vec<McpToolDescriptor>>;",
              "documentation": "Lists all tools available on the MCP server.\n\nSends a `tools/list` request and returns the tool descriptors.\n\n# Returns\n\nA vector of `McpToolDescriptor` items representing available tools.\n\n# Errors\n\nReturns `ForgeMcpError::ProtocolError` if the server returns an error,\nor `ForgeMcpError::TransportError` if communication fails.\n\n# Examples\n\n```no_run\n# async fn example(client: &forge_mcp::client::McpClient) -> Result<(), forge_mcp::error::ForgeMcpError> {\nlet tools = client.list_tools().await?;\nfor tool in &tools {\n    println!(\"Tool: {} - {}\", tool.name, tool.description);\n}\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpClient::call_tool",
              "line": 332,
              "signature": "pub async fn call_tool(\n        &self,\n        name: &str,\n        arguments: serde_json::Value,\n    ) -> ForgeMcpResult<serde_json::Value>;",
              "documentation": "Invokes a tool on the MCP server.\n\nSends a `tools/call` request with the specified tool name and arguments,\nand returns the server's response.\n\n# Arguments\n\n* `name` - The tool name to invoke.\n* `arguments` - JSON arguments for the tool.\n\n# Returns\n\nThe JSON response from the tool execution.\n\n# Errors\n\nReturns `ForgeMcpError::ToolNotFound` if the server reports the tool\ndoes not exist, `ForgeMcpError::ProtocolError` for other server errors,\nor `ForgeMcpError::TransportError` if communication fails.\n\n# Examples\n\n```no_run\n# async fn example(client: &forge_mcp::client::McpClient) -> Result<(), forge_mcp::error::ForgeMcpError> {\nuse serde_json::json;\n\nlet result = client.call_tool(\"read_file\", json!({\"path\": \"/tmp/data.txt\"})).await?;\nprintln!(\"Tool result: {}\", result);\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpClient::list_resources",
              "line": 377,
              "signature": "pub async fn list_resources(&self) -> ForgeMcpResult<Vec<McpResource>>;",
              "documentation": "Lists all resources available on the MCP server.\n\nSends a `resources/list` request and returns the resource descriptors.\n\n# Returns\n\nA vector of `McpResource` items representing available resources.\n\n# Errors\n\nReturns `ForgeMcpError::ProtocolError` if the server returns an error,\nor `ForgeMcpError::TransportError` if communication fails.\n\n# Examples\n\n```no_run\n# async fn example(client: &forge_mcp::client::McpClient) -> Result<(), forge_mcp::error::ForgeMcpError> {\nlet resources = client.list_resources().await?;\nfor res in &resources {\n    println!(\"Resource: {} ({})\", res.name, res.uri);\n}\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpClient::get_resource",
              "line": 423,
              "signature": "pub async fn get_resource(&self, uri: &str) -> ForgeMcpResult<serde_json::Value>;",
              "documentation": "Retrieves the content of a specific resource by URI.\n\nSends a `resources/read` request and returns the resource content.\n\n# Arguments\n\n* `uri` - The resource URI to read.\n\n# Returns\n\nThe JSON response containing the resource content.\n\n# Errors\n\nReturns `ForgeMcpError::ProtocolError` if the server returns an error,\nor `ForgeMcpError::TransportError` if communication fails.\n\n# Examples\n\n```no_run\n# async fn example(client: &forge_mcp::client::McpClient) -> Result<(), forge_mcp::error::ForgeMcpError> {\nlet content = client.get_resource(\"file:///project/README.md\").await?;\nprintln!(\"Content: {}\", content);\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpClient::list_prompts",
              "line": 458,
              "signature": "pub async fn list_prompts(&self) -> ForgeMcpResult<Vec<McpPrompt>>;",
              "documentation": "Lists all prompts available on the MCP server.\n\nSends a `prompts/list` request and returns the prompt descriptors.\n\n# Returns\n\nA vector of `McpPrompt` items representing available prompts.\n\n# Errors\n\nReturns `ForgeMcpError::ProtocolError` if the server returns an error,\nor `ForgeMcpError::TransportError` if communication fails.\n\n# Examples\n\n```no_run\n# async fn example(client: &forge_mcp::client::McpClient) -> Result<(), forge_mcp::error::ForgeMcpError> {\nlet prompts = client.list_prompts().await?;\nfor prompt in &prompts {\n    println!(\"Prompt: {}\", prompt.name);\n}\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpClient::get_prompt",
              "line": 509,
              "signature": "pub async fn get_prompt(\n        &self,\n        name: &str,\n        arguments: std::collections::HashMap<String, String>,\n    ) -> ForgeMcpResult<serde_json::Value>;",
              "documentation": "Retrieves a specific prompt by name with the given arguments.\n\nSends a `prompts/get` request and returns the prompt messages.\n\n# Arguments\n\n* `name` - The prompt name to retrieve.\n* `arguments` - A map of argument name-value pairs.\n\n# Returns\n\nThe JSON response containing the rendered prompt messages.\n\n# Errors\n\nReturns `ForgeMcpError::ProtocolError` if the server returns an error,\nor `ForgeMcpError::TransportError` if communication fails.\n\n# Examples\n\n```no_run\n# async fn example(client: &forge_mcp::client::McpClient) -> Result<(), forge_mcp::error::ForgeMcpError> {\nuse std::collections::HashMap;\n\nlet mut args = HashMap::new();\nargs.insert(\"language\".to_string(), \"Rust\".to_string());\nlet messages = client.get_prompt(\"code_review\", args).await?;\nprintln!(\"Prompt messages: {}\", messages);\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpClient::disconnect",
              "line": 547,
              "signature": "pub async fn disconnect(&self) -> ForgeMcpResult<()>;",
              "documentation": "Disconnects from the MCP server.\n\nCloses the underlying transport. After disconnecting, all other\nmethods will return errors.\n\n# Errors\n\nReturns `ForgeMcpError::TransportError` if the close fails.\n\n# Examples\n\n```no_run\n# async fn example(client: forge_mcp::client::McpClient) -> Result<(), forge_mcp::error::ForgeMcpError> {\nclient.disconnect().await?;\n# Ok(())\n# }\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-mcp/src/error.rs",
          "sha256": "7aa2b1da0f4e840c1ce332be1be9af09ca02613b18ff07b3a63e804a98047a4e",
          "artifactSha256": "40ab6fb4ceb20019b62934a545f36361a789f8c453273dd260bf0c3a9d218e8b",
          "url": "/reference/source/forge-rs/crates/forge-mcp/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeMcpError",
              "line": 40,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeMcpError {\n    /// Failed to establish a connection to an MCP server.\n    ///\n    /// Check that the server is running, the transport configuration is correct,\n    /// and the endpoint is reachable.\n    #[error(\"MCP connection to '{endpoint}' failed: {reason}\")]\n    ConnectionFailed {\n        /// The endpoint that was being connected to.\n        endpoint: String,\n        /// What went wrong during connection.\n        reason: String,\n    },\n\n    /// A transport-level I/O error occurred.\n    ///\n    /// This covers read/write failures on the underlying transport (stdio, SSE, HTTP).\n    #[error(\"MCP transport error on '{transport}': {reason}\")]\n    TransportError {\n        /// The transport type (e.g., \"stdio\", \"sse\", \"http\").\n        transport: String,\n        /// Description of the I/O failure.\n        reason: String,\n    },\n\n    /// The MCP protocol exchange contained invalid framing or unexpected content.\n    ///\n    /// This indicates a JSON-RPC framing error, an unrecognized method, or a\n    /// protocol version mismatch.\n    #[error(\"MCP protocol error (code={code}): {message}\")]\n    ProtocolError {\n        /// The JSON-RPC error code, or -1 if not applicable.\n        code: i64,\n        /// Description of the protocol-level failure.\n        message: String,\n    },\n\n    /// The requested tool was not found on the MCP server.\n    ///\n    /// Check the tool name spelling and call `list_tools()` to see available tools.\n    #[error(\"MCP tool '{tool_name}' not found; available tools: {}\", available.join(\", \"))]\n    ToolNotFound {\n        /// The tool name that was looked up.\n        tool_name: String,\n        /// The tools that are actually available.\n        available: Vec<String>,\n    },\n\n    /// JSON serialization or deserialization of an MCP message failed.\n    #[error(\"MCP serialization error: {reason}\")]\n    SerializationError {\n        /// What went wrong during serialization.\n        reason: String,\n    },\n\n    /// Authentication or authorization failed for the MCP connection.\n    ///\n    /// Check OAuth configuration, client credentials, and token validity.\n    #[error(\"MCP auth error for endpoint '{endpoint}': {reason}\")]\n    AuthError {\n        /// The endpoint that rejected authentication.\n        endpoint: String,\n        /// Why authentication failed.\n        reason: String,\n    },\n\n    /// An error propagated from the Forge core layer.\n    #[error(\"Forge core error: {0}\")]\n    Core(#[from] ForgeError),\n}",
              "documentation": "Error type for the Forge MCP subsystem.\n\nEvery variant carries actionable context: what failed, why, and what the developer\nshould check or do next.\n\n# ANVIL Spec Reference\n\nMCP integration follows ANVIL Spec SS12.1 -- External Protocol Bridges. Error\nsemantics preserve the JSON-RPC error code from the MCP specification where\napplicable.\n\n# Examples\n\n```\nuse forge_mcp::error::ForgeMcpError;\n\nlet err = ForgeMcpError::ToolNotFound {\n    tool_name: \"read_file\".to_string(),\n    available: vec![\"list_files\".to_string(), \"write_file\".to_string()],\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"read_file\"));\nassert!(msg.contains(\"list_files, write_file\"));\n```"
            },
            {
              "name": "::ForgeMcpResult",
              "line": 111,
              "signature": "pub type ForgeMcpResult<T> = Result<T, ForgeMcpError>;",
              "documentation": "A specialized `Result` type for Forge MCP operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-mcp/src/lib.rs",
          "sha256": "d5d9efb86119280c6e003fea57f9bc86dde5775a7a0c4dfca325214570bfaebc",
          "artifactSha256": "8e3ba9c63a51680720e313fbe30cdcec6f7771b954c0521d390c6021315baf05",
          "url": "/reference/source/forge-rs/crates/forge-mcp/src/lib.rs.txt",
          "declarations": [
            {
              "name": "auth",
              "line": 88,
              "signature": "pub mod auth;",
              "documentation": "# forge-mcp\n\nModel Context Protocol (MCP) client, server, and transport layer for the\nForge SDK.\n\nThis crate provides the complete MCP subsystem for ANVIL-compliant agents.\nIt enables Forge agents to connect to external MCP tool servers as clients\nand to expose their own capabilities as MCP servers.\n\n# ANVIL Spec Reference\n\nThis crate implements the following ANVIL specification sections:\n- SS12.1 -- External Protocol Bridges: MCP client and server integration.\n- SS12.2 -- Transport Layer: pluggable transports (stdio, SSE, HTTP).\n- SS12.3 -- Capability Negotiation: initialization handshake.\n\n# Architecture\n\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502           forge-mcp                  \u2502\n\u2502                                      \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   \u2502\n\u2502  \u2502 McpClient\u2502     \u2502  McpServer   \u2502   \u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518   \u2502\n\u2502       \u2502                  \u2502           \u2502\n\u2502       \u25bc                  \u25bc           \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u2502\n\u2502  \u2502     McpTransport (trait)    \u2502     \u2502\n\u2502  \u2502  Stdio | SSE | HTTP        \u2502     \u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2502\n\u2502                                      \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   \u2502\n\u2502  \u2502  types   \u2502     \u2502    auth      \u2502   \u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n# Modules\n\n- [`client`] -- MCP client for connecting to external tool servers.\n- [`server`] -- MCP server for exposing tools, resources, and prompts.\n- [`transport`] -- Pluggable transport trait and implementations.\n- [`types`] -- MCP protocol types (tool descriptors, resources, prompts, JSON-RPC).\n- [`auth`] -- OAuth 2.0 + PKCE authentication for MCP connections.\n- [`error`] -- Typed error enum for all MCP operations.\n\n# Examples\n\n## Creating an MCP server\n\n```\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::types::{McpCapabilities, McpToolDescriptor};\nuse serde_json::json;\n\nlet config = McpServerConfig {\n    name: \"my-tools\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities { tools: true, resources: false, prompts: false },\n};\n\nlet mut server = McpServer::new(config);\nserver.register_tool(\n    McpToolDescriptor {\n        name: \"echo\".to_string(),\n        description: \"Echoes the input\".to_string(),\n        input_schema: json!({\"type\": \"object\", \"properties\": {\"text\": {\"type\": \"string\"}}}),\n    },\n    Box::new(|_name, args| Ok(json!({\"content\": [{\"type\": \"text\", \"text\": args.to_string()}]}))),\n);\n```\n\n## Configuring an MCP client\n\n```\nuse forge_mcp::client::McpClientConfig;\nuse forge_mcp::transport::TransportConfig;\n\nlet config = McpClientConfig {\n    transport: TransportConfig::Stdio,\n    auth: None,\n};\n// McpClient::connect(config).await establishes the connection.\n```"
            },
            {
              "name": "client",
              "line": 90,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod client;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 91,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "server",
              "line": 93,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod server;",
              "documentation": ""
            },
            {
              "name": "transport",
              "line": 95,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod transport;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 96,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 99,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::auth::{generate_pkce_challenge, OAuthConfig, PkceChallenge};",
              "line": 100,
              "signature": "pub use crate::auth::{generate_pkce_challenge, OAuthConfig, PkceChallenge};",
              "documentation": ""
            },
            {
              "name": "pub use crate::client::{McpClient, McpClientConfig};",
              "line": 102,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::client::{McpClient, McpClientConfig};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{ForgeMcpError, ForgeMcpResult};",
              "line": 103,
              "signature": "pub use crate::error::{ForgeMcpError, ForgeMcpResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::server::{McpServer, McpServerConfig};",
              "line": 105,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::server::{McpServer, McpServerConfig};",
              "documentation": ""
            },
            {
              "name": "pub use crate::transport::{\n        create_transport, HttpTransport, McpTransport, SseTransport, StdioTransport,\n        TransportConfig,\n    };",
              "line": 107,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::transport::{\n        create_transport, HttpTransport, McpTransport, SseTransport, StdioTransport,\n        TransportConfig,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::types::{\n        McpCapabilities, McpErrorObject, McpPrompt, McpPromptArgument, McpRequest, McpRequestId,\n        McpResource, McpResponse, McpToolDescriptor,\n    };",
              "line": 111,
              "signature": "pub use crate::types::{\n        McpCapabilities, McpErrorObject, McpPrompt, McpPromptArgument, McpRequest, McpRequestId,\n        McpResource, McpResponse, McpToolDescriptor,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-mcp/src/server.rs",
          "sha256": "0a67d2a153686452909756abc7d118974403346bc9d0c952de7f6886f39187c5",
          "artifactSha256": "354562dfad9c6d2cadfe60e9565070c501f160b40eb77d94687e2fa153a4399f",
          "url": "/reference/source/forge-rs/crates/forge-mcp/src/server.rs.txt",
          "declarations": [
            {
              "name": "::ToolHandler",
              "line": 48,
              "signature": "pub type ToolHandler =\n    Box<dyn Fn(&str, &serde_json::Value) -> ForgeMcpResult<serde_json::Value> + Send + Sync>;",
              "documentation": "Handler function type for tool invocations.\n\nA tool handler receives the tool name and JSON arguments and returns\na JSON result or an error."
            },
            {
              "name": "::ResourceHandler",
              "line": 55,
              "signature": "pub type ResourceHandler = Box<dyn Fn(&str) -> ForgeMcpResult<serde_json::Value> + Send + Sync>;",
              "documentation": "Handler function type for resource reads.\n\nA resource handler receives the resource URI and returns the resource\ncontent as JSON or an error."
            },
            {
              "name": "::PromptHandler",
              "line": 61,
              "signature": "pub type PromptHandler =\n    Box<dyn Fn(&str, &HashMap<String, String>) -> ForgeMcpResult<serde_json::Value> + Send + Sync>;",
              "documentation": "Handler function type for prompt rendering.\n\nA prompt handler receives the prompt name and arguments and returns\nthe rendered prompt messages as JSON or an error."
            },
            {
              "name": "::McpServerConfig",
              "line": 80,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct McpServerConfig {\n/// Human-readable server name.\n\npub name: String,\n/// Server version string.\n\npub version: String,\n/// Capabilities this server advertises.\n\npub capabilities: McpCapabilities\n}",
              "documentation": "Configuration for constructing an `McpServer`.\n\n# Examples\n\n```\nuse forge_mcp::server::McpServerConfig;\nuse forge_mcp::types::McpCapabilities;\n\nlet config = McpServerConfig {\n    name: \"my-tools\".to_string(),\n    version: \"1.0.0\".to_string(),\n    capabilities: McpCapabilities::all(),\n};\nassert_eq!(config.name, \"my-tools\");\n```"
            },
            {
              "name": "::McpServer",
              "line": 120,
              "signature": "pub struct McpServer {\n\n}",
              "documentation": "An MCP server that hosts tools, resources, and prompts.\n\nThe server accepts JSON-RPC requests, dispatches them to registered\nhandlers, and returns JSON-RPC responses. It manages registration of\ntools, resources, and prompts and performs the initialization handshake.\n\n# Examples\n\n```\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::types::{McpCapabilities, McpToolDescriptor};\nuse serde_json::json;\n\nlet config = McpServerConfig {\n    name: \"example-server\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities { tools: true, resources: false, prompts: false },\n};\n\nlet mut server = McpServer::new(config);\n\n// Register a tool\nlet descriptor = McpToolDescriptor {\n    name: \"echo\".to_string(),\n    description: \"Echoes the input\".to_string(),\n    input_schema: json!({\"type\": \"object\", \"properties\": {\"text\": {\"type\": \"string\"}}}),\n};\nserver.register_tool(descriptor, Box::new(|_name, args| {\n    Ok(json!({\"content\": [{\"type\": \"text\", \"text\": args.to_string()}]}))\n}));\n```"
            },
            {
              "name": "::McpServer::new",
              "line": 154,
              "signature": "pub fn new(config: McpServerConfig) -> Self;",
              "documentation": "Creates a new MCP server with the given configuration.\n\nThe server starts with no registered tools, resources, or prompts.\nUse `register_tool()`, `register_resource()`, and `register_prompt()`\nto add capabilities before serving requests.\n\n# Arguments\n\n* `config` - The server configuration.\n\n# Examples\n\n```\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::types::McpCapabilities;\n\nlet server = McpServer::new(McpServerConfig {\n    name: \"test\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities::all(),\n});\n```"
            },
            {
              "name": "::McpServer::register_tool",
              "line": 194,
              "signature": "pub fn register_tool(&mut self, descriptor: McpToolDescriptor, handler: ToolHandler);",
              "documentation": "Registers a tool with this server.\n\nIf a tool with the same name is already registered, it is replaced.\n\n# Arguments\n\n* `descriptor` - The tool descriptor (name, description, schema).\n* `handler` - The function that executes the tool.\n\n# Examples\n\n```\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::types::{McpCapabilities, McpToolDescriptor};\nuse serde_json::json;\n\nlet mut server = McpServer::new(McpServerConfig {\n    name: \"s\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities::all(),\n});\n\nserver.register_tool(\n    McpToolDescriptor {\n        name: \"ping\".to_string(),\n        description: \"Returns pong\".to_string(),\n        input_schema: json!({\"type\": \"object\"}),\n    },\n    Box::new(|_name, _args| Ok(json!({\"content\": [{\"type\": \"text\", \"text\": \"pong\"}]}))),\n);\n```"
            },
            {
              "name": "::McpServer::register_resource",
              "line": 232,
              "signature": "pub fn register_resource(&mut self, resource: McpResource, handler: ResourceHandler);",
              "documentation": "Registers a resource with this server.\n\nIf a resource with the same URI is already registered, it is replaced.\n\n# Arguments\n\n* `resource` - The resource descriptor (URI, name, etc.).\n* `handler` - The function that reads the resource content.\n\n# Examples\n\n```\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::types::{McpCapabilities, McpResource};\nuse serde_json::json;\n\nlet mut server = McpServer::new(McpServerConfig {\n    name: \"s\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities::all(),\n});\n\nserver.register_resource(\n    McpResource {\n        uri: \"file:///data.json\".to_string(),\n        name: \"data.json\".to_string(),\n        description: Some(\"Data file\".to_string()),\n        mime_type: Some(\"application/json\".to_string()),\n    },\n    Box::new(|_uri| Ok(json!({\"contents\": [{\"uri\": \"file:///data.json\", \"text\": \"{}\"}]}))),\n);\n```"
            },
            {
              "name": "::McpServer::register_prompt",
              "line": 269,
              "signature": "pub fn register_prompt(&mut self, prompt: McpPrompt, handler: PromptHandler);",
              "documentation": "Registers a prompt with this server.\n\nIf a prompt with the same name is already registered, it is replaced.\n\n# Arguments\n\n* `prompt` - The prompt descriptor (name, description, arguments).\n* `handler` - The function that renders the prompt.\n\n# Examples\n\n```\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::types::{McpCapabilities, McpPrompt};\nuse serde_json::json;\n\nlet mut server = McpServer::new(McpServerConfig {\n    name: \"s\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities::all(),\n});\n\nserver.register_prompt(\n    McpPrompt {\n        name: \"greet\".to_string(),\n        description: Some(\"Greet someone\".to_string()),\n        arguments: vec![],\n    },\n    Box::new(|_name, _args| Ok(json!({\"messages\": []}))),\n);\n```"
            },
            {
              "name": "::McpServer::handle_request",
              "line": 310,
              "signature": "pub fn handle_request(&self, request: &McpRequest) -> McpResponse;",
              "documentation": "Handles an incoming JSON-RPC request and returns a response.\n\nDispatches the request to the appropriate handler based on the method\nname. Handles initialization, tool listing/invocation, resource\nlisting/reading, and prompt listing/retrieval.\n\n# Arguments\n\n* `request` - The parsed JSON-RPC request.\n\n# Returns\n\nA JSON-RPC response. If the method is not recognized, returns a\nmethod-not-found error response.\n\n# Examples\n\n```\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::types::{McpCapabilities, McpRequest, McpRequestId};\n\nlet server = McpServer::new(McpServerConfig {\n    name: \"test\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities::all(),\n});\n\nlet req = McpRequest::new(McpRequestId::Number(1), \"initialize\", Some(serde_json::json!({\n    \"protocolVersion\": \"2024-11-05\",\n    \"capabilities\": {},\n    \"clientInfo\": {\"name\": \"test\", \"version\": \"0.1.0\"}\n})));\n\nlet resp = server.handle_request(&req);\nassert!(resp.is_success());\n```"
            },
            {
              "name": "::McpServer::serve",
              "line": 376,
              "signature": "pub async fn serve(&self, transport: &dyn McpTransport) -> ForgeMcpResult<()>;",
              "documentation": "Starts serving requests over the given transport.\n\nEnters a loop that reads requests from the transport, dispatches them\nvia `handle_request()`, and writes responses back. The loop exits when\nthe transport is closed or an unrecoverable transport error occurs.\n\n# Arguments\n\n* `transport` - The transport to serve on.\n\n# Errors\n\nReturns `ForgeMcpError::TransportError` if a transport read/write fails.\n\n# Examples\n\n```no_run\n# async fn example() -> Result<(), forge_mcp::error::ForgeMcpError> {\nuse forge_mcp::server::{McpServer, McpServerConfig};\nuse forge_mcp::transport::StdioTransport;\nuse forge_mcp::types::McpCapabilities;\n\nlet server = McpServer::new(McpServerConfig {\n    name: \"my-server\".to_string(),\n    version: \"0.1.0\".to_string(),\n    capabilities: McpCapabilities::all(),\n});\n\nlet transport = StdioTransport::new();\nserver.serve(&transport).await?;\n# Ok(())\n# }\n```"
            },
            {
              "name": "::McpServer::config",
              "line": 422,
              "signature": "pub fn config(&self) -> &McpServerConfig;",
              "documentation": "Returns the server configuration."
            },
            {
              "name": "::McpServer::tool_count",
              "line": 427,
              "signature": "pub fn tool_count(&self) -> usize;",
              "documentation": "Returns the number of registered tools."
            },
            {
              "name": "::McpServer::resource_count",
              "line": 432,
              "signature": "pub fn resource_count(&self) -> usize;",
              "documentation": "Returns the number of registered resources."
            },
            {
              "name": "::McpServer::prompt_count",
              "line": 437,
              "signature": "pub fn prompt_count(&self) -> usize;",
              "documentation": "Returns the number of registered prompts."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-mcp/src/transport.rs",
          "sha256": "bd78963350e09184a385db77f16c1150aedd4d8d9281936ba8daa203bd703128",
          "artifactSha256": "de0241b80d036091eaefd7e3d5921569166dfd62f6ffce02aa7810601ac48047",
          "url": "/reference/source/forge-rs/crates/forge-mcp/src/transport.rs.txt",
          "declarations": [
            {
              "name": "::TransportConfig",
              "line": 228,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum TransportConfig {\n    /// Standard I/O transport (stdin/stdout).\n    ///\n    /// Used when the MCP server is spawned as a child process.\n    Stdio,\n\n    /// Server-Sent Events transport.\n    ///\n    /// The client receives responses via an SSE stream and sends requests\n    /// via HTTP POST to a companion endpoint.\n    Sse {\n        /// The SSE endpoint URL.\n        url: String,\n    },\n\n    /// HTTP POST transport.\n    ///\n    /// Both requests and responses use HTTP POST with JSON bodies. This\n    /// is the simplest transport for stateless MCP servers.\n    Http {\n        /// The HTTP endpoint URL.\n        url: String,\n    },\n}",
              "documentation": "Configuration for selecting and parameterizing a transport.\n\nThe transport config is provided at client or server construction time\nand determines which concrete transport is instantiated.\n\n# Examples\n\n```\nuse forge_mcp::transport::TransportConfig;\n\nlet stdio = TransportConfig::Stdio;\nlet sse = TransportConfig::Sse {\n    url: \"http://localhost:8080/sse\".to_string(),\n};\nlet http = TransportConfig::Http {\n    url: \"http://localhost:8080/mcp\".to_string(),\n};\n```"
            },
            {
              "name": "::TransportConfig::transport_name",
              "line": 263,
              "signature": "pub fn transport_name(&self) -> &'static str;",
              "documentation": "Returns a human-readable name for this transport type.\n\n# Examples\n\n```\nuse forge_mcp::transport::TransportConfig;\n\nassert_eq!(TransportConfig::Stdio.transport_name(), \"stdio\");\n```"
            },
            {
              "name": "::TransportConfig::endpoint_url",
              "line": 285,
              "signature": "pub fn endpoint_url(&self) -> Option<&str>;",
              "documentation": "Returns the endpoint URL, if applicable.\n\nReturns `None` for stdio transport since it has no URL.\n\n# Examples\n\n```\nuse forge_mcp::transport::TransportConfig;\n\nlet sse = TransportConfig::Sse { url: \"http://localhost/sse\".to_string() };\nassert_eq!(sse.endpoint_url(), Some(\"http://localhost/sse\"));\n\nassert_eq!(TransportConfig::Stdio.endpoint_url(), None);\n```"
            },
            {
              "name": "::McpTransport",
              "line": 314,
              "signature": "#[async_trait]\npub trait McpTransport: Send + Sync {\n    /// Sends a JSON-encoded message through the transport.\n    ///\n    /// # Arguments\n    ///\n    /// * `message` - The JSON string to send.\n    ///\n    /// # Errors\n    ///\n    /// Returns `ForgeMcpError::TransportError` if the write fails.\n    async fn send(&self, message: &str) -> ForgeMcpResult<()>;\n\n    /// Receives the next JSON-encoded message from the transport.\n    ///\n    /// This method blocks (asynchronously) until a message is available\n    /// or the transport is closed.\n    ///\n    /// # Returns\n    ///\n    /// `Ok(Some(message))` if a message was received, `Ok(None)` if the\n    /// transport has been cleanly closed.\n    ///\n    /// # Errors\n    ///\n    /// Returns `ForgeMcpError::TransportError` if the read fails.\n    async fn receive(&self) -> ForgeMcpResult<Option<String>>;\n\n    /// Closes the transport, releasing any held resources.\n    ///\n    /// After calling `close()`, subsequent `send()` and `receive()` calls\n    /// should return errors.\n    ///\n    /// # Errors\n    ///\n    /// Returns `ForgeMcpError::TransportError` if the close fails.\n    async fn close(&self) -> ForgeMcpResult<()>;\n}",
              "documentation": "Trait for MCP message transport.\n\nAll transport implementations must be `Send + Sync` to support async\nusage from multiple tasks. The trait provides three operations: send a\nmessage, receive a message, and close the transport.\n\n# Implementors\n\n- [`StdioTransport`] -- stdin/stdout communication with child processes.\n- [`SseTransport`] -- Server-Sent Events for streaming responses.\n- [`HttpTransport`] -- Simple HTTP POST request/response.\n\n# Examples\n\n```\nuse forge_mcp::transport::McpTransport;\n\n// Transports are used through Box<dyn McpTransport> in McpClient/McpServer.\n// See McpClient::connect() for usage.\n```"
            },
            {
              "name": "::StdioTransport",
              "line": 364,
              "signature": "pub struct StdioTransport {\n\n}",
              "documentation": "Standard I/O transport.\n\nCommunicates with an MCP server via stdin/stdout of a child process.\nThis is the most common transport for locally spawned MCP servers.\n\n# Examples\n\n```\nuse forge_mcp::transport::StdioTransport;\n\nlet transport = StdioTransport::new();\n```"
            },
            {
              "name": "::StdioTransport::new",
              "line": 383,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new stdio transport backed by the current process streams.\n\n# Examples\n\n```\nuse forge_mcp::transport::StdioTransport;\n\nlet transport = StdioTransport::new();\n```"
            },
            {
              "name": "::StdioTransport::from_streams",
              "line": 391,
              "signature": "pub fn from_streams<R, W>(reader: R, writer: W) -> Self\n    where\n        R: AsyncRead + Send + 'static,\n        W: AsyncWrite + Send + 'static,;",
              "documentation": "Creates a stdio transport from custom async streams.\n\nThis is primarily useful for tests and embedded runtimes that provide\ntheir own stdin/stdout equivalents."
            },
            {
              "name": "::SseTransport",
              "line": 499,
              "signature": "pub struct SseTransport {\n\n}",
              "documentation": "Server-Sent Events transport.\n\nUses SSE for server-to-client streaming and HTTP POST for client-to-server\nrequests. This is the recommended transport for remote MCP servers.\n\n# Examples\n\n```\nuse forge_mcp::transport::SseTransport;\n\nlet transport = SseTransport::new(\"http://localhost:8080/sse\");\nassert_eq!(transport.url(), \"http://localhost:8080/sse\");\n```"
            },
            {
              "name": "::SseTransport::new",
              "line": 530,
              "signature": "pub fn new(url: impl Into<String>) -> Self;",
              "documentation": "Creates a new SSE transport targeting the given URL.\n\n# Arguments\n\n* `url` - The SSE endpoint URL.\n\n# Examples\n\n```\nuse forge_mcp::transport::SseTransport;\n\nlet transport = SseTransport::new(\"http://localhost:8080/sse\");\n```"
            },
            {
              "name": "::SseTransport::url",
              "line": 543,
              "signature": "pub fn url(&self) -> &str;",
              "documentation": "Returns the SSE endpoint URL."
            },
            {
              "name": "::HttpTransport",
              "line": 731,
              "signature": "pub struct HttpTransport {\n\n}",
              "documentation": "HTTP POST transport.\n\nUses HTTP POST for both requests and responses. This is the simplest\ntransport, suitable for stateless MCP servers.\n\n# Examples\n\n```\nuse forge_mcp::transport::HttpTransport;\n\nlet transport = HttpTransport::new(\"http://localhost:8080/mcp\");\nassert_eq!(transport.url(), \"http://localhost:8080/mcp\");\n```"
            },
            {
              "name": "::HttpTransport::new",
              "line": 756,
              "signature": "pub fn new(url: impl Into<String>) -> Self;",
              "documentation": "Creates a new HTTP transport targeting the given URL.\n\n# Arguments\n\n* `url` - The HTTP endpoint URL.\n\n# Examples\n\n```\nuse forge_mcp::transport::HttpTransport;\n\nlet transport = HttpTransport::new(\"http://localhost:8080/mcp\");\n```"
            },
            {
              "name": "::HttpTransport::url",
              "line": 766,
              "signature": "pub fn url(&self) -> &str;",
              "documentation": "Returns the HTTP endpoint URL."
            },
            {
              "name": "::create_transport",
              "line": 881,
              "signature": "pub fn create_transport(config: &TransportConfig) -> Box<dyn McpTransport>;",
              "documentation": "Creates a boxed transport from the given configuration.\n\nThis factory function selects the appropriate transport implementation\nbased on the `TransportConfig` variant.\n\n# Arguments\n\n* `config` - The transport configuration.\n\n# Returns\n\nA boxed trait object implementing `McpTransport`.\n\n# Examples\n\n```\nuse forge_mcp::transport::{TransportConfig, create_transport};\n\nlet transport = create_transport(&TransportConfig::Stdio);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-mcp/src/types.rs",
          "sha256": "28883f34b58a04331ae6e596addb7a39e7b42faa34c8729629bd24fabb0f365d",
          "artifactSha256": "787fffe28168a49e5e518a00e303558585568f0b60e164f798deb516d27807de",
          "url": "/reference/source/forge-rs/crates/forge-mcp/src/types.rs.txt",
          "declarations": [
            {
              "name": "::McpToolDescriptor",
              "line": 47,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct McpToolDescriptor {\n/// The unique tool name within the server.\n\npub name: String,\n/// Human-readable description of what the tool does.\n\npub description: String,\n/// JSON Schema for the tool's input parameters.\n\n#[serde(rename = \"inputSchema\")]\npub input_schema: serde_json::Value\n}",
              "documentation": "Describes a tool exposed by an MCP server.\n\n`McpToolDescriptor` represents a single tool listing returned by the\n`tools/list` method. It carries the tool's name, a human-readable\ndescription, and a JSON Schema defining the expected input parameters.\n\n# Examples\n\n```\nuse forge_mcp::types::McpToolDescriptor;\nuse serde_json::json;\n\nlet tool = McpToolDescriptor {\n    name: \"read_file\".to_string(),\n    description: \"Read a file from disk\".to_string(),\n    input_schema: json!({\n        \"type\": \"object\",\n        \"properties\": {\n            \"path\": { \"type\": \"string\" }\n        },\n        \"required\": [\"path\"]\n    }),\n};\nassert_eq!(tool.name, \"read_file\");\n```"
            },
            {
              "name": "::McpResource",
              "line": 80,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct McpResource {\n/// The resource URI (e.g., `file:///path` or `https://...`).\n\npub uri: String,\n/// Human-readable resource name.\n\npub name: String,\n/// Optional description of the resource.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub description: Option<String>,\n/// Optional MIME type of the resource content.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\n#[serde(rename = \"mimeType\")]\npub mime_type: Option<String>\n}",
              "documentation": "Describes a resource exposed by an MCP server.\n\nResources are read-only data sources (files, database records, API\nresponses) that the server makes available to the client.\n\n# Examples\n\n```\nuse forge_mcp::types::McpResource;\n\nlet resource = McpResource {\n    uri: \"file:///project/README.md\".to_string(),\n    name: \"README.md\".to_string(),\n    description: Some(\"Project README file\".to_string()),\n    mime_type: Some(\"text/markdown\".to_string()),\n};\nassert_eq!(resource.uri, \"file:///project/README.md\");\n```"
            },
            {
              "name": "::McpPrompt",
              "line": 123,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct McpPrompt {\n/// Unique prompt name within the server.\n\npub name: String,\n/// Optional description of the prompt's purpose.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub description: Option<String>,\n/// Arguments that the prompt template accepts.\n\n#[serde(default)]\npub arguments: Vec<McpPromptArgument>\n}",
              "documentation": "Describes a prompt template exposed by an MCP server.\n\nPrompts are reusable templates that accept arguments and produce messages\nfor the language model. They enable servers to provide canned workflows.\n\n# Examples\n\n```\nuse forge_mcp::types::{McpPrompt, McpPromptArgument};\n\nlet prompt = McpPrompt {\n    name: \"summarize\".to_string(),\n    description: Some(\"Summarize a document\".to_string()),\n    arguments: vec![\n        McpPromptArgument {\n            name: \"text\".to_string(),\n            description: Some(\"The text to summarize\".to_string()),\n            required: true,\n        },\n    ],\n};\nassert_eq!(prompt.arguments.len(), 1);\nassert!(prompt.arguments[0].required);\n```"
            },
            {
              "name": "::McpPromptArgument",
              "line": 149,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct McpPromptArgument {\n/// Argument name.\n\npub name: String,\n/// Optional description of the argument.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub description: Option<String>,\n/// Whether this argument is required.\n\n#[serde(default)]\npub required: bool\n}",
              "documentation": "An argument to an MCP prompt template.\n\n# Examples\n\n```\nuse forge_mcp::types::McpPromptArgument;\n\nlet arg = McpPromptArgument {\n    name: \"language\".to_string(),\n    description: Some(\"Target programming language\".to_string()),\n    required: false,\n};\nassert!(!arg.required);\n```"
            },
            {
              "name": "::McpRequest",
              "line": 185,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct McpRequest {\n/// JSON-RPC version string (always \"2.0\").\n\npub jsonrpc: String,\n/// Request identifier for matching responses to requests.\n\npub id: McpRequestId,\n/// The MCP method to invoke (e.g., `tools/list`, `tools/call`).\n\npub method: String,\n/// Optional method parameters.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub params: Option<serde_json::Value>\n}",
              "documentation": "JSON-RPC 2.0 request envelope for MCP communication.\n\nMCP uses JSON-RPC 2.0 as its wire protocol. Every client-to-server message\nis wrapped in this envelope with a method name and optional parameters.\n\n# Examples\n\n```\nuse forge_mcp::types::{McpRequest, McpRequestId};\nuse serde_json::json;\n\nlet req = McpRequest {\n    jsonrpc: \"2.0\".to_string(),\n    id: McpRequestId::Number(1),\n    method: \"tools/list\".to_string(),\n    params: Some(json!({})),\n};\nlet json = serde_json::to_string(&req).unwrap();\nassert!(json.contains(\"tools/list\"));\n```"
            },
            {
              "name": "::McpRequest::new",
              "line": 220,
              "signature": "pub fn new(\n        id: McpRequestId,\n        method: impl Into<String>,\n        params: Option<serde_json::Value>,\n    ) -> Self;",
              "documentation": "Creates a new JSON-RPC 2.0 request.\n\n# Arguments\n\n* `id` - The request identifier.\n* `method` - The MCP method name.\n* `params` - Optional parameters for the method.\n\n# Examples\n\n```\nuse forge_mcp::types::{McpRequest, McpRequestId};\nuse serde_json::json;\n\nlet req = McpRequest::new(\n    McpRequestId::Number(1),\n    \"tools/list\",\n    Some(json!({})),\n);\nassert_eq!(req.method, \"tools/list\");\nassert_eq!(req.jsonrpc, \"2.0\");\n```"
            },
            {
              "name": "::McpResponse",
              "line": 253,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct McpResponse {\n/// JSON-RPC version string (always \"2.0\").\n\npub jsonrpc: String,\n/// The request identifier this response corresponds to.\n\npub id: McpRequestId,\n/// The successful result, if the request succeeded.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub result: Option<serde_json::Value>,\n/// The error object, if the request failed.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub error: Option<McpErrorObject>\n}",
              "documentation": "JSON-RPC 2.0 response envelope for MCP communication.\n\nEither `result` or `error` is present, never both.\n\n# Examples\n\n```\nuse forge_mcp::types::{McpResponse, McpRequestId};\nuse serde_json::json;\n\nlet resp = McpResponse {\n    jsonrpc: \"2.0\".to_string(),\n    id: McpRequestId::Number(1),\n    result: Some(json!({\"tools\": []})),\n    error: None,\n};\nassert!(resp.is_success());\n```"
            },
            {
              "name": "::McpResponse::is_success",
              "line": 268,
              "signature": "pub fn is_success(&self) -> bool;",
              "documentation": "Returns `true` if this response indicates success."
            },
            {
              "name": "::McpResponse::is_error",
              "line": 273,
              "signature": "pub fn is_error(&self) -> bool;",
              "documentation": "Returns `true` if this response indicates an error."
            },
            {
              "name": "::McpErrorObject",
              "line": 295,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct McpErrorObject {\n/// The JSON-RPC error code.\n\npub code: i64,\n/// Human-readable error message.\n\npub message: String,\n/// Optional additional error data.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub data: Option<serde_json::Value>\n}",
              "documentation": "JSON-RPC 2.0 error object.\n\nCarries an error code, human-readable message, and optional structured data.\n\n# Examples\n\n```\nuse forge_mcp::types::McpErrorObject;\n\nlet err = McpErrorObject {\n    code: -32601,\n    message: \"method not found\".to_string(),\n    data: None,\n};\nassert_eq!(err.code, -32601);\n```"
            },
            {
              "name": "::McpRequestId",
              "line": 320,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(untagged)]\npub enum McpRequestId {\n    /// Numeric request identifier.\n    Number(u64),\n    /// String request identifier.\n    Str(String),\n    /// Null identifier (for notifications).\n    Null,\n}",
              "documentation": "A JSON-RPC 2.0 request/response identifier.\n\nPer the JSON-RPC spec, the id can be a number, a string, or null.\n\n# Examples\n\n```\nuse forge_mcp::types::McpRequestId;\n\nlet num_id = McpRequestId::Number(42);\nlet str_id = McpRequestId::Str(\"req-abc\".to_string());\nlet null_id = McpRequestId::Null;\n```"
            },
            {
              "name": "::McpCapabilities",
              "line": 353,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub struct McpCapabilities {\n/// Whether tool listing and invocation is supported.\n\n#[serde(default)]\npub tools: bool,\n/// Whether resource listing and reading is supported.\n\n#[serde(default)]\npub resources: bool,\n/// Whether prompt listing and retrieval is supported.\n\n#[serde(default)]\npub prompts: bool\n}",
              "documentation": "Capabilities advertised during the MCP initialization handshake.\n\nBoth client and server advertise their capabilities during the `initialize`\nexchange. The intersection determines which features are available for the\nsession.\n\n# Examples\n\n```\nuse forge_mcp::types::McpCapabilities;\n\nlet caps = McpCapabilities {\n    tools: true,\n    resources: false,\n    prompts: true,\n};\nassert!(caps.tools);\nassert!(!caps.resources);\n```"
            },
            {
              "name": "::McpCapabilities::all",
              "line": 378,
              "signature": "pub fn all() -> Self;",
              "documentation": "Creates capabilities with all features enabled.\n\n# Examples\n\n```\nuse forge_mcp::types::McpCapabilities;\n\nlet caps = McpCapabilities::all();\nassert!(caps.tools);\nassert!(caps.resources);\nassert!(caps.prompts);\n```"
            },
            {
              "name": "::McpCapabilities::none",
              "line": 398,
              "signature": "pub fn none() -> Self;",
              "documentation": "Creates capabilities with no features enabled.\n\n# Examples\n\n```\nuse forge_mcp::types::McpCapabilities;\n\nlet caps = McpCapabilities::none();\nassert!(!caps.tools);\nassert!(!caps.resources);\nassert!(!caps.prompts);\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-identity",
      "language": "rust",
      "version": "0.2.0",
      "description": "OAS identity binding for Forge agents \u2014 ANVIL Spec \u00a711.1-11.2",
      "manifest": "forge-rs/crates/forge-identity/Cargo.toml",
      "manifestSha256": "57e3544070ac91e9296c549c8638683324eeacd8f4853bc6ca7c7299acce5f60",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-identity",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-identity/src/agent_identity.rs",
          "sha256": "e88967a6f4dd208e88f23046a063c8f4ad2cf674ea688af6bf430c8c7f50b251",
          "artifactSha256": "68f17ba0395368a9b061605f36e8baaa04b5ddf92a207fc583386cc1ac276fc7",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/agent_identity.rs.txt",
          "declarations": [
            {
              "name": "::ForgeAgentIdentity",
              "line": 63,
              "signature": "pub struct ForgeAgentIdentity {\n\n}",
              "documentation": "A Forge agent's cryptographic identity, binding an OAS DID, keypair, and lineage.\n\nEvery Forge agent has a `ForgeAgentIdentity` from creation. The identity\nincludes the agent's Ed25519 keypair (derived via HKDF-SHA256 from its parent),\nthe OAS DID document, and the lineage proof chain.\n\nSee ANVIL Specification \u00a711.1 \u2014 OAS Identity Binding.\n\n# Security\n\n- The [`Debug`] implementation never exposes the private key.\n- Clone creates an independent copy of the keypair.\n- The signing key is zeroized on drop (via `OasKeyPair`'s inner `SigningKey`).\n\n# Examples\n\n```\nuse forge_identity::lineage::{create_hmr_identity, derive_agent_identity};\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet agent = derive_agent_identity(&hmr, \"analyzer\", \"test\").unwrap();\nassert_eq!(agent.kind(), \"agent\");\nassert_eq!(agent.lineage_depth(), 1);\n```"
            },
            {
              "name": "::ForgeAgentIdentity::new",
              "line": 137,
              "signature": "pub fn new(\n        did: String,\n        kind: String,\n        keypair: OasKeyPair,\n        document: OasDocument,\n        lineage_depth: u32,\n    ) -> ForgeIdentityResult<Self>;",
              "documentation": "Creates a new `ForgeAgentIdentity` from its constituent parts.\n\nThis is the internal constructor used by the [`lineage`](crate::lineage) module.\nExternal callers should use [`create_hmr_identity`](crate::lineage::create_hmr_identity)\nor [`derive_agent_identity`](crate::lineage::derive_agent_identity) instead.\n\n# Arguments\n\n* `did` - The `did:oas` identifier string.\n* `kind` - The entity kind (e.g., `\"hmr\"`, `\"agent\"`).\n* `keypair` - The Ed25519 keypair for this identity.\n* `document` - The signed OAS Identity Document.\n* `lineage_depth` - The number of derivation steps from the human root.\n\n# Returns\n\nA validated `ForgeAgentIdentity`.\n\n# Errors\n\nReturns [`ForgeIdentityError::InvalidIdentity`] if the DID is empty or\nthe document ID does not match the provided DID.\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\n// Prefer using the high-level creation functions:\nlet identity = create_hmr_identity(\"test\", \"alice\").unwrap();\nassert_eq!(identity.did(), \"did:oas:test:hmr:alice\");\n```"
            },
            {
              "name": "::ForgeAgentIdentity::did",
              "line": 178,
              "signature": "pub fn did(&self) -> &str;",
              "documentation": "Returns the `did:oas` identifier string for this agent.\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nassert_eq!(hmr.did(), \"did:oas:test:hmr:alice\");\n```"
            },
            {
              "name": "::ForgeAgentIdentity::kind",
              "line": 192,
              "signature": "pub fn kind(&self) -> &str;",
              "documentation": "Returns the entity kind (e.g., `\"hmr\"`, `\"mhr\"`, `\"agent\"`, `\"tool\"`).\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nassert_eq!(hmr.kind(), \"hmr\");\n```"
            },
            {
              "name": "::ForgeAgentIdentity::document",
              "line": 211,
              "signature": "pub fn document(&self) -> &OasDocument;",
              "documentation": "Returns a reference to the signed OAS Identity Document.\n\nThe document contains the full DID document structure including\nverification methods, authentication references, lineage section,\nand document proof.\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet doc = hmr.document();\nassert!(doc.proof.is_some());\n```"
            },
            {
              "name": "::ForgeAgentIdentity::lineage_depth",
              "line": 234,
              "signature": "pub fn lineage_depth(&self) -> u32;",
              "documentation": "Returns the lineage depth (number of derivation steps from human root).\n\n- `0` for HMR and MHR root entities.\n- `1` for agents derived directly from a root.\n- `n` for agents `n` steps removed from the root.\n\nSee ANVIL Spec \u00a711.2 \u2014 Lineage Propagation.\n\n# Examples\n\n```\nuse forge_identity::lineage::{create_hmr_identity, derive_agent_identity};\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nassert_eq!(hmr.lineage_depth(), 0);\n\nlet agent = derive_agent_identity(&hmr, \"bot\", \"test\").unwrap();\nassert_eq!(agent.lineage_depth(), 1);\n```"
            },
            {
              "name": "::ForgeAgentIdentity::sign",
              "line": 261,
              "signature": "pub fn sign(&self, message: &[u8]) -> Vec<u8>;",
              "documentation": "Signs a message with this agent's Ed25519 signing key.\n\nThe returned bytes are a 64-byte Ed25519 signature. Use\n[`verify`](Self::verify) or [`OasKeyPair::verify_with_key`] to\nverify the signature against this agent's public key.\n\n# Arguments\n\n* `message` - The raw bytes to sign.\n\n# Returns\n\nA 64-byte Ed25519 signature as a `Vec<u8>`.\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet sig = hmr.sign(b\"audit trail entry\");\nassert_eq!(sig.len(), 64);\n```"
            },
            {
              "name": "::ForgeAgentIdentity::verify",
              "line": 294,
              "signature": "pub fn verify(&self, message: &[u8], signature: &[u8]) -> ForgeIdentityResult<()>;",
              "documentation": "Verifies an Ed25519 signature against this agent's public key.\n\nUses constant-time comparison internally (provided by `ed25519-dalek`).\n\n# Arguments\n\n* `message` - The original message that was signed.\n* `signature` - The 64-byte Ed25519 signature to verify.\n\n# Returns\n\n`Ok(())` if the signature is valid.\n\n# Errors\n\nReturns [`ForgeIdentityError::InvalidIdentity`] if the signature\ndoes not verify against this agent's public key.\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet message = b\"audit trail entry\";\nlet sig = hmr.sign(message);\nassert!(hmr.verify(message, &sig).is_ok());\nassert!(hmr.verify(b\"tampered\", &sig).is_err());\n```"
            },
            {
              "name": "::ForgeAgentIdentity::verifying_key_bytes",
              "line": 316,
              "signature": "pub fn verifying_key_bytes(&self) -> [u8; 32];",
              "documentation": "Returns the raw 32-byte Ed25519 verifying (public) key bytes.\n\nThis is the agent's public key that can be shared freely. Use it\nto verify signatures produced by [`sign`](Self::sign).\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet pub_key = hmr.verifying_key_bytes();\nassert_eq!(pub_key.len(), 32);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/error.rs",
          "sha256": "61fd83dc1e7edbeb21cd24433915ca3d33a8c6199df7a52e99a673a59dff2e5b",
          "artifactSha256": "9be9c093fa19c1a0cafb91aa29e54aabe5ce756b9f0b4192910beff12fd14cdb",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeIdentityError",
              "line": 44,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeIdentityError {\n    /// HKDF key derivation failed for the specified derivation path.\n    ///\n    /// This indicates a failure in the cryptographic key derivation process\n    /// when creating a child agent identity from a parent.\n    ///\n    /// See ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding.\n    #[error(\"identity derivation failed for path '{path}' from parent {parent_did}: {reason}\")]\n    DerivationFailed {\n        /// The parent's DID from which derivation was attempted.\n        parent_did: String,\n        /// The HKDF derivation path that was used.\n        path: String,\n        /// A description of why the derivation failed.\n        reason: String,\n    },\n\n    /// Lineage chain verification failed for the specified identity.\n    ///\n    /// The cryptographic chain from the agent to its human root could not\n    /// be verified. This may indicate a tampered identity, a missing parent\n    /// document, or an invalid proof signature.\n    ///\n    /// See ANVIL Spec \u00a711.2 \u2014 Lineage Propagation.\n    #[error(\"lineage verification failed for '{did}': {reason}\")]\n    LineageVerificationFailed {\n        /// The DID of the identity whose lineage failed verification.\n        did: String,\n        /// A description of why verification failed.\n        reason: String,\n    },\n\n    /// Lineage chain exceeds the maximum allowed generation depth.\n    ///\n    /// ANVIL Spec \u00a711.2 defines a maximum lineage depth to prevent\n    /// unbounded delegation chains. The default maximum is 16.\n    #[error(\"lineage chain depth {depth} exceeds ANVIL maximum {max_depth} (ANVIL Spec \u00a711.2)\")]\n    ChainTooDeep {\n        /// The actual depth of the lineage chain.\n        depth: u32,\n        /// The configured maximum depth.\n        max_depth: u32,\n    },\n\n    /// The identity is malformed or fails structural validation.\n    ///\n    /// This covers cases like missing DID fields, invalid document structure,\n    /// or inconsistent lineage sections.\n    #[error(\"invalid identity: {reason}\")]\n    InvalidIdentity {\n        /// A description of the structural problem.\n        reason: String,\n    },\n\n    /// Saving or loading an identity to/from persistent storage failed.\n    ///\n    /// This may indicate I/O errors, permission problems, or corrupted\n    /// identity files on disk.\n    #[error(\"identity persistence failed: {reason}\")]\n    PersistenceFailed {\n        /// A description of the persistence failure.\n        reason: String,\n    },\n\n    /// An error propagated from the underlying OAS SDK.\n    ///\n    /// This wraps [`oas_sdk::OasError`] for seamless `?` propagation\n    /// from OAS SDK calls within forge-identity functions.\n    #[error(\"OAS SDK error: {0}\")]\n    Oas(#[from] oas_sdk::OasError),\n}",
              "documentation": "Errors that can occur during Forge agent identity operations.\n\nEvery variant includes actionable context: what failed, why, and the\nrelevant ANVIL specification section. No generic \"something went wrong\"\nmessages.\n\n# ANVIL Spec References\n\n- ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding\n- ANVIL Spec \u00a711.2 \u2014 Lineage Propagation\n- ANVIL Spec \u00a714.2 \u2014 Error Handling"
            },
            {
              "name": "::ForgeIdentityResult",
              "line": 127,
              "signature": "pub type ForgeIdentityResult<T> = Result<T, ForgeIdentityError>;",
              "documentation": "A specialized `Result` type for forge-identity operations.\n\n# Examples\n\n```\nuse forge_identity::error::ForgeIdentityResult;\n\nfn example() -> ForgeIdentityResult<String> {\n    Ok(\"identity created\".to_string())\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/glyph/error.rs",
          "sha256": "543f458b5a772bb2fd0f0a9d79e4e8bba9bd7dfb2a6a491cad4329689d8b24d6",
          "artifactSha256": "b15713b303740baba5ad89a46655478548d3934eaeacac27f2bc94617b4f8960",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/glyph/error.rs.txt",
          "declarations": [
            {
              "name": "::GlyphError",
              "line": 25,
              "signature": "#[derive(Debug, Error)]\npub enum GlyphError {\n    /// The provided DID string is malformed or unparseable.\n    #[error(\"invalid DID '{did}': {reason}\")]\n    InvalidDid {\n        /// The DID string that failed validation.\n        did: String,\n        /// Why the DID is invalid.\n        reason: String,\n    },\n\n    /// The entity kind string does not map to a known glyph kind.\n    #[error(\"invalid glyph entity kind '{kind}': expected one of hmr, mhr, enr, agent, org\")]\n    InvalidKind {\n        /// The kind string that was not recognized.\n        kind: String,\n    },\n\n    /// Payload encoding failed.\n    #[error(\"glyph payload encoding failed for DID '{did}': {reason}\")]\n    PayloadEncodingFailed {\n        /// The DID being encoded.\n        did: String,\n        /// Why encoding failed.\n        reason: String,\n    },\n\n    /// Rendering the glyph to the requested output format failed.\n    #[error(\"glyph render failed: {reason}\")]\n    RenderFailed {\n        /// Why rendering failed.\n        reason: String,\n    },\n}",
              "documentation": "Errors that can occur during glyph operations.\n\nEvery variant provides enough context for a developer to diagnose\nthe issue without reading source code.\n\n# Examples\n\n```\nuse forge_identity::glyph::error::GlyphError;\n\nlet err = GlyphError::InvalidDid {\n    did: \"not-a-did\".to_string(),\n    reason: \"expected 'did:' prefix\".to_string(),\n};\nassert!(err.to_string().contains(\"not-a-did\"));\n```"
            },
            {
              "name": "::GlyphResult",
              "line": 60,
              "signature": "pub type GlyphResult<T> = Result<T, GlyphError>;",
              "documentation": "A specialized `Result` type for glyph operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/glyph/mod.rs",
          "sha256": "685cb3c462875bb7a4fcf47200bcf60a0d751b92cb61a63273372c2ca4ae4476",
          "artifactSha256": "32528096f6e839f9dd8430f371daaba7bfc0a44b1f804978db5bae173c975f54",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/glyph/mod.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 56,
              "signature": "pub mod error;",
              "documentation": "# Glyph \u2014 Visual Identity for Forge Agents\n\nDeterministic visual identity glyphs for OAS agents, implementing the\nglyph contract from the Forge coding-provider and glyph implementation\nplan (Phase 5).\n\nA glyph is a scannable, aesthetically unique avatar that encodes an\nagent's `did:oas` identity into a colored block grid. Unlike QR codes,\nglyphs use variable block sizes, shapes, and colors to create a visually\ndistinctive pattern that doubles as a profile picture.\n\n## Encoding Architecture\n\nThe glyph encodes data across three visual channels per cell:\n\n- **Block size** (4 levels) -- 2 bits per cell\n- **Shape** (square, circle, diamond, triangle) -- 2 bits per cell\n- **Hue shift** (4 palette variations) -- 2 bits per cell\n\nThis yields 6 bits per cell in a 12x12 grid.\n\n## Determinism Guarantee\n\nSame DID + same options = identical output bytes. This is enforced by:\n\n1. BLAKE3-hashing the DID components for the payload.\n2. Deriving the palette from the payload hash (no randomness).\n3. Rendering the grid with deterministic float formatting.\n\n## Quick Start\n\n```\nuse forge_identity::glyph::{\n    GlyphDescriptor, GlyphEntityKind, GlyphRenderOptions,\n    GlyphRenderTarget, render::render_glyph,\n};\n\nlet descriptor = GlyphDescriptor {\n    did: \"did:oas:l1fe:agent:data-analyst\".to_string(),\n    kind: GlyphEntityKind::Agent,\n    label: Some(\"Data Analyst\".to_string()),\n};\n\nlet options = GlyphRenderOptions {\n    target: GlyphRenderTarget::Web,\n    width: Some(256),\n    height: Some(256),\n    color_override: None,\n};\n\nlet result = render_glyph(&descriptor, &options).unwrap();\nlet svg = result.svg_data().unwrap();\nassert!(svg.starts_with(\"<svg\"));\n```"
            },
            {
              "name": "palette",
              "line": 57,
              "signature": "pub mod palette;",
              "documentation": ""
            },
            {
              "name": "payload",
              "line": 58,
              "signature": "pub mod payload;",
              "documentation": ""
            },
            {
              "name": "render",
              "line": 59,
              "signature": "pub mod render;",
              "documentation": ""
            },
            {
              "name": "pub use error::{GlyphError, GlyphResult};",
              "line": 61,
              "signature": "pub use error::{GlyphError, GlyphResult};",
              "documentation": ""
            },
            {
              "name": "pub use palette::{GlyphColor, GlyphPalette};",
              "line": 62,
              "signature": "pub use palette::{GlyphColor, GlyphPalette};",
              "documentation": ""
            },
            {
              "name": "::GlyphDescriptor",
              "line": 81,
              "signature": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\npub struct GlyphDescriptor {\n/// The agent's DID string (e.g. `did:oas:l1fe:agent:data-analyst`).\n\npub did: String,\n/// The entity kind that determines the kind-region visual motif.\n\npub kind: GlyphEntityKind,\n/// Optional human-readable label rendered below the glyph.\n\npub label: Option<String>\n}",
              "documentation": "The glyph input contract: describes what to render.\n\nA `GlyphDescriptor` captures the agent DID, entity kind, and an optional\nhuman-readable label. This is the input to [`render::render_glyph`].\n\n# Examples\n\n```\nuse forge_identity::glyph::{GlyphDescriptor, GlyphEntityKind};\n\nlet desc = GlyphDescriptor {\n    did: \"did:oas:l1fe:agent:data-analyst\".to_string(),\n    kind: GlyphEntityKind::Agent,\n    label: Some(\"Data Analyst\".to_string()),\n};\n```"
            },
            {
              "name": "::GlyphEntityKind",
              "line": 114,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]\npub enum GlyphEntityKind {\n    /// Human Root identity.\n    Hmr,\n    /// Multi-Human Root identity.\n    Mhr,\n    /// Entity Root identity (organizations, services, etc.).\n    Enr,\n    /// Agent identity.\n    Agent,\n    /// Organization identity.\n    Org,\n}",
              "documentation": "Entity kinds supported by the glyph system.\n\nMaps to the upstream `oas-glyph` entity kind taxonomy, restricted to\nthe five kinds relevant to the Forge identity surface:\n\n| Kind | Upstream Value | Visual Motif |\n|------|---------------|-------------|\n| `Hmr` | 0 | Shield (human root) |\n| `Mhr` | 1 | Multi-shield (machine root) |\n| `Enr` | 2 | Grid (entity root) |\n| `Agent` | 3 | Diamond (agent) |\n| `Org` | 4 | Hexagon (organization) |\n\n# Examples\n\n```\nuse forge_identity::glyph::GlyphEntityKind;\n\nlet kind = GlyphEntityKind::parse_kind(\"agent\").unwrap();\nassert_eq!(kind, GlyphEntityKind::Agent);\nassert_eq!(kind.as_str(), \"agent\");\nassert_eq!(kind.as_u8(), 3);\n```"
            },
            {
              "name": "::GlyphEntityKind::parse_kind",
              "line": 146,
              "signature": "pub fn parse_kind(s: &str) -> Option<Self>;",
              "documentation": "Parse a kind string into a `GlyphEntityKind`.\n\n# Arguments\n\n* `s` - A lowercase kind string.\n\n# Returns\n\n`Some(kind)` if the string matches a known kind, `None` otherwise.\n\n# Examples\n\n```\nuse forge_identity::glyph::GlyphEntityKind;\n\nassert_eq!(GlyphEntityKind::parse_kind(\"hmr\"), Some(GlyphEntityKind::Hmr));\nassert_eq!(GlyphEntityKind::parse_kind(\"unknown\"), None);\n```"
            },
            {
              "name": "::GlyphEntityKind::as_str",
              "line": 166,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Return the canonical string representation of this kind.\n\n# Examples\n\n```\nuse forge_identity::glyph::GlyphEntityKind;\n\nassert_eq!(GlyphEntityKind::Agent.as_str(), \"agent\");\n```"
            },
            {
              "name": "::GlyphEntityKind::as_u8",
              "line": 189,
              "signature": "pub fn as_u8(&self) -> u8;",
              "documentation": "Return the numeric value used in payload encoding.\n\nValues 0-4 match the upstream `oas-glyph` `EntityKind` discriminants\nfor the supported subset.\n\n# Examples\n\n```\nuse forge_identity::glyph::GlyphEntityKind;\n\nassert_eq!(GlyphEntityKind::Hmr.as_u8(), 0);\nassert_eq!(GlyphEntityKind::Agent.as_u8(), 3);\n```"
            },
            {
              "name": "::GlyphEntityKind::from_u8",
              "line": 211,
              "signature": "pub fn from_u8(v: u8) -> Option<Self>;",
              "documentation": "Reconstruct a `GlyphEntityKind` from its numeric value.\n\nReturns `None` if the value does not map to a known kind.\n\n# Examples\n\n```\nuse forge_identity::glyph::GlyphEntityKind;\n\nassert_eq!(GlyphEntityKind::from_u8(3), Some(GlyphEntityKind::Agent));\nassert_eq!(GlyphEntityKind::from_u8(99), None);\n```"
            },
            {
              "name": "::GlyphRenderTarget",
              "line": 238,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]\npub enum GlyphRenderTarget {\n    /// SVG output for web rendering.\n    Web,\n    /// ANSI-colored terminal output.\n    Terminal,\n}",
              "documentation": "Render target selection.\n\nDetermines the output format of the glyph rendering:\n\n- `Web` produces a self-contained SVG string.\n- `Terminal` produces ANSI-colored block characters.\n\n# Examples\n\n```\nuse forge_identity::glyph::GlyphRenderTarget;\n\nlet target = GlyphRenderTarget::Web;\n```"
            },
            {
              "name": "::GlyphRenderOptions",
              "line": 260,
              "signature": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\npub struct GlyphRenderOptions {\n/// The render target (Web or Terminal).\n\npub target: GlyphRenderTarget,\n/// Desired width in pixels (Web) or columns (Terminal). Defaults to 512/12.\n\npub width: Option<u32>,\n/// Desired height in pixels (Web) or rows (Terminal). Defaults to 512/6.\n\npub height: Option<u32>,\n/// Optional background color override. If `None`, the palette-derived\n\n/// background is used.\n\npub color_override: Option<palette::GlyphColor>\n}",
              "documentation": "Render options controlling the glyph output.\n\n# Examples\n\n```\nuse forge_identity::glyph::{GlyphRenderOptions, GlyphRenderTarget};\n\nlet options = GlyphRenderOptions {\n    target: GlyphRenderTarget::Web,\n    width: Some(512),\n    height: Some(512),\n    color_override: None,\n};\n```"
            },
            {
              "name": "::GlyphRenderFormat",
              "line": 276,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]\npub enum GlyphRenderFormat {\n    /// Self-contained SVG XML string.\n    Svg,\n    /// PNG image bytes.\n    Png,\n    /// ASCII art (plain text).\n    AsciiArt,\n    /// Braille dot pattern.\n    Braille,\n    /// ANSI half-block characters.\n    HalfBlock,\n}",
              "documentation": "Output format tag for render results.\n\nDescribes the actual format of the rendered data bytes."
            },
            {
              "name": "::GlyphRenderResult",
              "line": 307,
              "signature": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\npub struct GlyphRenderResult {\n/// The output format.\n\npub format: GlyphRenderFormat,\n/// The rendered data bytes.\n\npub data: Vec<u8>,\n/// Width of the rendered output (pixels for SVG/PNG, columns for terminal).\n\npub width: u32,\n/// Height of the rendered output (pixels for SVG/PNG, rows for terminal).\n\npub height: u32\n}",
              "documentation": "The output of a glyph render operation.\n\nContains the rendered data bytes, format tag, and dimensions.\n\n# Examples\n\n```\nuse forge_identity::glyph::{GlyphRenderResult, GlyphRenderFormat};\n\nlet result = GlyphRenderResult {\n    format: GlyphRenderFormat::Svg,\n    data: b\"<svg>...</svg>\".to_vec(),\n    width: 256,\n    height: 256,\n};\nassert!(result.svg_data().is_some());\n```"
            },
            {
              "name": "::GlyphRenderResult::svg_data",
              "line": 337,
              "signature": "pub fn svg_data(&self) -> Option<String>;",
              "documentation": "Extract the rendered data as a UTF-8 string, if the format is text-based.\n\nReturns `Some(string)` for SVG, AsciiArt, Braille, and HalfBlock formats.\nReturns `None` for binary formats like PNG.\n\n# Examples\n\n```\nuse forge_identity::glyph::{GlyphRenderResult, GlyphRenderFormat};\n\nlet result = GlyphRenderResult {\n    format: GlyphRenderFormat::Svg,\n    data: b\"<svg></svg>\".to_vec(),\n    width: 256,\n    height: 256,\n};\nassert_eq!(result.svg_data(), Some(\"<svg></svg>\".to_string()));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/glyph/palette.rs",
          "sha256": "8624b8f4d25846bb3aa37a9907674b03e03ab40b1c0c2c0579c7e97dd5492fcf",
          "artifactSha256": "8daebc73a5847608193130b07e53452fd0560bfe22893a351f7c1233b88b63eb",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/glyph/palette.rs.txt",
          "declarations": [
            {
              "name": "::GlyphColor",
              "line": 31,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]\npub struct GlyphColor {\n/// Red channel (0-255).\n\npub r: u8,\n/// Green channel (0-255).\n\npub g: u8,\n/// Blue channel (0-255).\n\npub b: u8\n}",
              "documentation": "An RGB color triple.\n\nAll channels are 8-bit unsigned (0-255). Alpha is not stored because\nglyph rendering always uses fully opaque colors; the SVG renderer adds\nopacity through element-level attributes if needed.\n\n# Examples\n\n```\nuse forge_identity::glyph::palette::GlyphColor;\n\nlet red = GlyphColor { r: 255, g: 0, b: 0 };\nassert_eq!(red.to_hex(), \"#ff0000\");\n```"
            },
            {
              "name": "::GlyphColor::rgb",
              "line": 42,
              "signature": "pub fn rgb(r: u8, g: u8, b: u8) -> Self;",
              "documentation": "Create a color from RGB components."
            },
            {
              "name": "::GlyphColor::to_hex",
              "line": 56,
              "signature": "pub fn to_hex(&self) -> String;",
              "documentation": "Format as a CSS hex color string (e.g. `#ff8040`).\n\n# Examples\n\n```\nuse forge_identity::glyph::palette::GlyphColor;\n\nlet c = GlyphColor::rgb(255, 128, 64);\nassert_eq!(c.to_hex(), \"#ff8040\");\n```"
            },
            {
              "name": "::GlyphColor::lerp",
              "line": 94,
              "signature": "pub fn lerp(a: &GlyphColor, b: &GlyphColor, t: f64) -> Self;",
              "documentation": "Linearly interpolate between two colors.\n\n# Arguments\n\n* `a` - Start color (t=0.0).\n* `b` - End color (t=1.0).\n* `t` - Interpolation factor, clamped to [0.0, 1.0].\n\n# Examples\n\n```\nuse forge_identity::glyph::palette::GlyphColor;\n\nlet black = GlyphColor::rgb(0, 0, 0);\nlet white = GlyphColor::rgb(255, 255, 255);\nlet mid = GlyphColor::lerp(&black, &white, 0.5);\nassert!(mid.r > 100 && mid.r < 150);\n```"
            },
            {
              "name": "::GlyphPalette",
              "line": 134,
              "signature": "#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]\npub struct GlyphPalette {\n/// Primary identity color.\n\npub primary: GlyphColor,\n/// Secondary identity color (hue-offset from primary).\n\npub secondary: GlyphColor,\n/// Accent color for kind region and highlights.\n\npub accent: GlyphColor,\n/// Background color (dark, desaturated primary).\n\npub background: GlyphColor\n}",
              "documentation": "A complete glyph color palette derived from an agent's identity.\n\nThe palette is deterministically computed from the BLAKE3 hash of the\nDID payload bytes. Every field is fully determined by the payload input;\nno randomness is involved.\n\n# Palette Structure\n\n| Field | Derivation |\n|-------|-----------|\n| `primary` | HSL from hash bytes 0-3 (hue), byte 8 (saturation), byte 9 (lightness) |\n| `secondary` | HSL offset 60-180 degrees from primary hue, via hash bytes 4-7 |\n| `accent` | Bright, saturated version of secondary hue |\n| `background` | Dark, desaturated version of primary hue |\n\n# Examples\n\n```\nuse forge_identity::glyph::palette::{GlyphPalette, derive_palette};\nuse forge_identity::glyph::GlyphEntityKind;\n\nlet payload = vec![0u8; 38]; // normally from encode_did_payload\nlet palette = derive_palette(&payload, GlyphEntityKind::Agent);\n\n// Palette is deterministic\nlet palette2 = derive_palette(&payload, GlyphEntityKind::Agent);\nassert_eq!(palette.primary, palette2.primary);\nassert_eq!(palette.secondary, palette2.secondary);\n```"
            },
            {
              "name": "::derive_palette",
              "line": 178,
              "signature": "pub fn derive_palette(payload: &[u8], kind: GlyphEntityKind) -> GlyphPalette;",
              "documentation": "Derive a deterministic color palette from payload bytes and entity kind.\n\nThe palette is computed by hashing the payload with BLAKE3 and mapping\nthe resulting bytes to HSL color space. The algorithm matches the upstream\n`oas-glyph` palette derivation:\n\n1. Primary hue from bytes 0-3 (LE u32 scaled to 0-360 degrees).\n2. Secondary hue offset from bytes 4-7 (60-180 degrees from primary).\n3. Saturation from byte 8 (50-90%).\n4. Lightness from byte 9 (35-55%).\n\nThe entity kind influences the accent color intensity to provide visual\ndifferentiation between humans, machines, organizations, and agents.\n\n# Arguments\n\n* `payload` - Payload bytes from [`encode_did_payload`](super::payload::encode_did_payload).\n* `kind` - The entity kind for kind-specific accent tuning.\n\n# Returns\n\nA [`GlyphPalette`] with four deterministic colors.\n\n# Examples\n\n```\nuse forge_identity::glyph::palette::{GlyphPalette, derive_palette};\nuse forge_identity::glyph::GlyphEntityKind;\n\nlet payload = vec![42u8; 38];\nlet palette = derive_palette(&payload, GlyphEntityKind::Hmr);\nassert_ne!(palette.primary.to_hex(), palette.secondary.to_hex());\n```"
            },
            {
              "name": "::derive_palette_from_did",
              "line": 251,
              "signature": "pub fn derive_palette_from_did(did: &str, kind: GlyphEntityKind) -> GlyphPalette;",
              "documentation": "Derive a palette directly from a DID string.\n\nConvenience function that hashes the DID with BLAKE3 (matching the upstream\n`GlyphPalette::from_did` behavior) to produce a palette without first\nencoding a payload. Useful when you need colors but not the full glyph\nrendering pipeline.\n\n# Arguments\n\n* `did` - A DID string.\n* `kind` - The entity kind.\n\n# Returns\n\nA [`GlyphPalette`] deterministically derived from the DID string.\n\n# Examples\n\n```\nuse forge_identity::glyph::palette::derive_palette_from_did;\nuse forge_identity::glyph::GlyphEntityKind;\n\nlet p1 = derive_palette_from_did(\"did:oas:l1fe:agent:bot\", GlyphEntityKind::Agent);\nlet p2 = derive_palette_from_did(\"did:oas:l1fe:agent:bot\", GlyphEntityKind::Agent);\nassert_eq!(p1.primary, p2.primary);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/glyph/payload.rs",
          "sha256": "ba9bb563250c478d44cf7e907d7be35eb048c78cf20f179a731ce7fd3c67fbc9",
          "artifactSha256": "db5e03bd7e8992d5c8c152e4ea959316c7b9dd25ea234ae7df5c7ec5a07b102b",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/glyph/payload.rs.txt",
          "declarations": [
            {
              "name": "::GLYPH_VERSION",
              "line": 29,
              "signature": "pub const GLYPH_VERSION: u8;",
              "documentation": "Glyph payload format version (4 bits, values 0-15)."
            },
            {
              "name": "::PAYLOAD_SIZE",
              "line": 34,
              "signature": "pub const PAYLOAD_SIZE: usize;",
              "documentation": "Fixed payload size in bytes.\n\n1 (header) + 1 (namespace hash) + 32 (identifier hash) + 4 (checksum) = 38."
            },
            {
              "name": "::encode_did_payload",
              "line": 67,
              "signature": "pub fn encode_did_payload(did: &str) -> GlyphResult<Vec<u8>>;",
              "documentation": "Encode a DID string into a deterministic byte payload for glyph generation.\n\nThe DID is parsed to extract the namespace, kind, and identifier components.\nEach component is hashed with BLAKE3 to produce a compact, fixed-size payload\nthat drives the glyph's visual structure.\n\n# Arguments\n\n* `did` - A DID string in the format `did:<method>:<namespace>:<kind>:<identifier>`\n\n# Returns\n\nA [`Vec<u8>`] of exactly [`PAYLOAD_SIZE`] bytes encoding the DID components.\n\n# Errors\n\nReturns [`GlyphError::InvalidDid`] if the DID string cannot be parsed.\nReturns [`GlyphError::PayloadEncodingFailed`] if encoding fails.\n\n# Examples\n\n```\nuse forge_identity::glyph::payload::encode_did_payload;\n\nlet payload = encode_did_payload(\"did:oas:l1fe:agent:data-analyst\").unwrap();\nassert_eq!(payload.len(), 38);\n\n// Deterministic: same DID always produces the same bytes\nlet payload2 = encode_did_payload(\"did:oas:l1fe:agent:data-analyst\").unwrap();\nassert_eq!(payload, payload2);\n```"
            },
            {
              "name": "::verify_payload_checksum",
              "line": 110,
              "signature": "pub fn verify_payload_checksum(payload: &[u8]) -> bool;",
              "documentation": "Verify a payload's internal checksum.\n\nReturns `true` if the last 4 bytes match the BLAKE3 checksum of the\npreceding bytes.\n\n# Arguments\n\n* `payload` - A payload previously produced by [`encode_did_payload`].\n\n# Examples\n\n```\nuse forge_identity::glyph::payload::{encode_did_payload, verify_payload_checksum};\n\nlet payload = encode_did_payload(\"did:oas:l1fe:agent:data-analyst\").unwrap();\nassert!(verify_payload_checksum(&payload));\n```"
            },
            {
              "name": "::extract_version",
              "line": 135,
              "signature": "pub fn extract_version(payload: &[u8]) -> Option<u8>;",
              "documentation": "Extract the version nibble from a payload header byte.\n\n# Arguments\n\n* `payload` - A payload previously produced by [`encode_did_payload`].\n\n# Examples\n\n```\nuse forge_identity::glyph::payload::{encode_did_payload, extract_version};\n\nlet payload = encode_did_payload(\"did:oas:l1fe:agent:data-analyst\").unwrap();\nassert_eq!(extract_version(&payload), Some(1));\n```"
            },
            {
              "name": "::extract_kind",
              "line": 154,
              "signature": "pub fn extract_kind(payload: &[u8]) -> Option<GlyphEntityKind>;",
              "documentation": "Extract the entity kind nibble from a payload header byte.\n\n# Arguments\n\n* `payload` - A payload previously produced by [`encode_did_payload`].\n\n# Examples\n\n```\nuse forge_identity::glyph::payload::{encode_did_payload, extract_kind};\nuse forge_identity::glyph::GlyphEntityKind;\n\nlet payload = encode_did_payload(\"did:oas:l1fe:agent:data-analyst\").unwrap();\nassert_eq!(extract_kind(&payload), Some(GlyphEntityKind::Agent));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/glyph/render.rs",
          "sha256": "bcc7fe27823af38d16358b2bc9fbef3f732fc31c92251692d5846b6010de0445",
          "artifactSha256": "19ed2a76fb4b5d847c0c47c7e76e4c2304b79d9bc3fbe37a35160a1c077994f9",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/glyph/render.rs.txt",
          "declarations": [
            {
              "name": "::render_glyph",
              "line": 69,
              "signature": "pub fn render_glyph(\n    descriptor: &GlyphDescriptor,\n    options: &GlyphRenderOptions,\n) -> GlyphResult<GlyphRenderResult>;",
              "documentation": "Render a glyph from a descriptor and options.\n\nThis is the main entry point for glyph rendering. It encodes the DID\npayload, derives the color palette, constructs the grid, and renders\nto the requested target format.\n\n# Arguments\n\n* `descriptor` - The glyph input contract (DID, kind, optional label).\n* `options` - Render configuration (target, size, color override).\n\n# Returns\n\nA [`GlyphRenderResult`] containing the rendered output.\n\n# Errors\n\nReturns [`GlyphError::InvalidDid`] if the DID cannot be parsed.\nReturns [`GlyphError::RenderFailed`] if rendering fails.\n\n# Examples\n\n```\nuse forge_identity::glyph::{\n    GlyphDescriptor, GlyphEntityKind, GlyphRenderOptions, GlyphRenderTarget,\n    render::render_glyph,\n};\n\nlet descriptor = GlyphDescriptor {\n    did: \"did:oas:l1fe:agent:data-analyst\".to_string(),\n    kind: GlyphEntityKind::Agent,\n    label: Some(\"Data Analyst\".to_string()),\n};\nlet options = GlyphRenderOptions {\n    target: GlyphRenderTarget::Web,\n    width: Some(256),\n    height: Some(256),\n    color_override: None,\n};\n\nlet result = render_glyph(&descriptor, &options).unwrap();\nassert!(result.svg_data().is_some());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/lib.rs",
          "sha256": "a3fadc0c1eec140b607a2093c00cb88129cbb01e59c2cfe0235d82aee0b9e292",
          "artifactSha256": "eb11b2ed8b8eca76d58bf25b539403e1492da2c7db191f224dca12fab3a741ee",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/lib.rs.txt",
          "declarations": [
            {
              "name": "agent_identity",
              "line": 67,
              "signature": "pub mod agent_identity;",
              "documentation": "# forge-identity\n\nOAS identity binding for Forge agents, implementing ANVIL Spec \u00a711.1\u201311.2.\n\nThis crate binds OAS (Open Agent Specification) cryptographic identities\nto Forge agents. Every agent has a `ForgeAgentIdentity` containing an\nEd25519 keypair, a signed OAS Identity Document, and a lineage proof chain\nlinking the agent back to its human root.\n\n# Components\n\n- **[`agent_identity`]** \u2014 The core [`ForgeAgentIdentity`](agent_identity::ForgeAgentIdentity)\n  struct with signing, verification, and accessor methods.\n- **[`lineage`]** \u2014 High-level workflows for creating HMR/MHR root identities,\n  deriving child agent identities, and verifying lineage chains.\n- **[`persistence`]** \u2014 Save and load identities to/from JSON files.\n- **[`error`]** \u2014 Typed error enum with actionable messages and ANVIL spec references.\n\n# Quick Start\n\n```\nuse forge_identity::prelude::*;\n\n// 1. Create a Human Root identity\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nassert_eq!(hmr.did(), \"did:oas:test:hmr:alice\");\nassert_eq!(hmr.lineage_depth(), 0);\n\n// 2. Derive an agent identity from the HMR\nlet agent = derive_agent_identity(&hmr, \"data-analyzer\", \"test\").unwrap();\nassert_eq!(agent.did(), \"did:oas:test:agent:data-analyzer\");\nassert_eq!(agent.lineage_depth(), 1);\n\n// 3. Sign and verify with the agent's key\nlet message = b\"audit trail entry\";\nlet signature = agent.sign(message);\nassert!(agent.verify(message, &signature).is_ok());\n\n// 4. Verify the lineage chain\nuse oas_lineage::provider::InMemoryProvider;\nuse oas_lineage::config::VerifyConfig;\n\nlet mut provider = InMemoryProvider::new();\nprovider.register(hmr.document().clone());\n\nlet result = verify_lineage_chain(&agent, &provider, &VerifyConfig::default());\nassert!(result.is_ok());\n```\n\n# Security\n\n- Private key material is never exposed in [`Debug`] output (`[REDACTED]`).\n- Signing keys are zeroized on drop via `ed25519-dalek`'s `ZeroizeOnDrop`.\n- All signature verification uses constant-time comparison.\n- No `unsafe` code \u2014 `#![forbid(unsafe_code)]` is enforced workspace-wide.\n- No `unwrap()`, `expect()`, or `panic!()` in library code.\n\n# ANVIL Spec References\n\n- ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding\n- ANVIL Spec \u00a711.2 \u2014 Lineage Propagation\n- ANVIL Spec \u00a714.2 \u2014 Error Handling"
            },
            {
              "name": "error",
              "line": 68,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "glyph",
              "line": 69,
              "signature": "pub mod glyph;",
              "documentation": ""
            },
            {
              "name": "lineage",
              "line": 70,
              "signature": "pub mod lineage;",
              "documentation": ""
            },
            {
              "name": "local_dev",
              "line": 71,
              "signature": "pub mod local_dev;",
              "documentation": ""
            },
            {
              "name": "persistence",
              "line": 72,
              "signature": "pub mod persistence;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 81,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types and functions.\n\nImport this module to get started quickly:\n\n```\nuse forge_identity::prelude::*;\n```"
            },
            {
              "name": "pub use crate::agent_identity::ForgeAgentIdentity;",
              "line": 82,
              "signature": "pub use crate::agent_identity::ForgeAgentIdentity;",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{ForgeIdentityError, ForgeIdentityResult};",
              "line": 83,
              "signature": "pub use crate::error::{ForgeIdentityError, ForgeIdentityResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::lineage::{\n        create_hmr_identity, create_mhr_identity, derive_agent_identity, verify_lineage_chain,\n        DEFAULT_MAX_LINEAGE_DEPTH,\n    };",
              "line": 84,
              "signature": "pub use crate::lineage::{\n        create_hmr_identity, create_mhr_identity, derive_agent_identity, verify_lineage_chain,\n        DEFAULT_MAX_LINEAGE_DEPTH,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::persistence::{load_identity, save_identity};",
              "line": 89,
              "signature": "#[allow(deprecated)]\npub use crate::persistence::{load_identity, save_identity};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/lineage.rs",
          "sha256": "18e2439a314fba84a7097048458cf47d48849a7182b9f9be36ad514b5199f179",
          "artifactSha256": "639d2360f967553e99f440747cb358ed75b85de909e56506cea9021383cc7b48",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/lineage.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_MAX_LINEAGE_DEPTH",
              "line": 54,
              "signature": "pub const DEFAULT_MAX_LINEAGE_DEPTH: u32;",
              "documentation": "The default maximum lineage chain depth per ANVIL Spec \u00a711.2.\n\nThe ANVIL specification recommends a maximum of 16 derivation steps\nfrom a human root entity. Chains exceeding this depth are rejected."
            },
            {
              "name": "::create_hmr_identity",
              "line": 94,
              "signature": "pub fn create_hmr_identity(\n    namespace: &str,\n    identifier: &str,\n) -> ForgeIdentityResult<ForgeAgentIdentity>;",
              "documentation": "Creates a new Human Root (HMR) identity.\n\nGenerates a fresh Ed25519 keypair, constructs an OAS Identity Document\nfor a `did:oas:<namespace>:hmr:<identifier>` DID, and signs it.\n\nHMR identities are the ultimate trust anchors in the lineage chain.\nEvery derived agent traces back to an HMR.\n\nSee ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding.\n\n# Arguments\n\n* `namespace` - The OAS namespace (e.g., `\"l1fe\"`, `\"test\"`).\n* `identifier` - The unique identifier within the namespace.\n\n# Returns\n\nA [`ForgeAgentIdentity`] with lineage depth 0 and kind `\"hmr\"`.\n\n# Errors\n\nReturns [`ForgeIdentityError::Oas`] if DID construction, document building,\nor signing fails in the underlying OAS SDK.\n\nReturns [`ForgeIdentityError::InvalidIdentity`] if the resulting identity\nfails structural validation.\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nassert_eq!(hmr.did(), \"did:oas:test:hmr:alice\");\nassert_eq!(hmr.kind(), \"hmr\");\nassert_eq!(hmr.lineage_depth(), 0);\n```"
            },
            {
              "name": "::create_hmr_with_seed",
              "line": 218,
              "signature": "pub fn create_hmr_with_seed(\n    namespace: &str,\n    identifier: &str,\n    seed_bytes: &[u8; 32],\n) -> ForgeIdentityResult<ForgeAgentIdentity>;",
              "documentation": "Creates a new Human Root (HMR) identity from a deterministic 32-byte seed.\n\nThe Ed25519 keypair is derived from `seed_bytes` using HKDF-SHA256 with\nthe kind/namespace/identifier bound into the info string. The same seed\nwill produce the same identity across runs (deterministic), but different\n`(namespace, identifier)` pairs derive different keys from the same seed.\n\nUse this when you want **deterministic identity from a sealed secret** --\ne.g., the seed lives in a sealed env var (`FORGE_TUTOR_HMR_SEED`) so the\nHMR's keypair is reproducible across boots without ever writing the\nkeypair to disk.\n\nSee ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding.\n\n# Arguments\n\n* `namespace` - The OAS namespace (e.g., `\"l1fe\"`, `\"test\"`).\n* `identifier` - The unique identifier within the namespace.\n* `seed_bytes` - 32 bytes of high-entropy material. Treat as a secret.\n\n# Returns\n\nA [`ForgeAgentIdentity`] with lineage depth 0, kind `\"hmr\"`, and an\nEd25519 keypair derived from `seed_bytes`.\n\n# Errors\n\n- [`ForgeIdentityError::Oas`] if document construction or signing fails.\n- [`ForgeIdentityError::InvalidIdentity`] if the derived keypair fails\n  structural validation or HKDF expansion fails (should not happen with\n  uniformly random `seed_bytes`).\n\n# Examples\n\n```\nuse forge_identity::lineage::create_hmr_with_seed;\n\nlet seed: [u8; 32] = [42u8; 32];\nlet hmr = create_hmr_with_seed(\"test\", \"alice\", &seed).unwrap();\nassert_eq!(hmr.did(), \"did:oas:test:hmr:alice\");\nassert_eq!(hmr.kind(), \"hmr\");\nassert_eq!(hmr.lineage_depth(), 0);\n\n// Same seed + same (namespace, identifier) => same DID with same key.\nlet hmr_again = create_hmr_with_seed(\"test\", \"alice\", &seed).unwrap();\nassert_eq!(hmr_again.did(), hmr.did());\n```"
            },
            {
              "name": "::create_mhr_with_seed",
              "line": 257,
              "signature": "pub fn create_mhr_with_seed(\n    namespace: &str,\n    identifier: &str,\n    seed_bytes: &[u8; 32],\n) -> ForgeIdentityResult<ForgeAgentIdentity>;",
              "documentation": "Creates a new Multi-Human Root (MHR) identity from a deterministic 32-byte seed.\n\nCompanion to [`create_hmr_with_seed`] for machine-originated root entities.\nSame HKDF derivation rules apply -- different kinds derive different keys\nfrom the same seed thanks to the `kind` binding in the HKDF info string.\n\n# Examples\n\n```\nuse forge_identity::lineage::{create_hmr_with_seed, create_mhr_with_seed};\n\nlet seed: [u8; 32] = [7u8; 32];\nlet hmr = create_hmr_with_seed(\"test\", \"alice\", &seed).unwrap();\nlet mhr = create_mhr_with_seed(\"test\", \"alice\", &seed).unwrap();\n// Different kinds => different DIDs and different keypairs even with same seed.\nassert_ne!(hmr.did(), mhr.did());\n```"
            },
            {
              "name": "::create_mhr_identity",
              "line": 313,
              "signature": "pub fn create_mhr_identity(\n    namespace: &str,\n    identifier: &str,\n) -> ForgeIdentityResult<ForgeAgentIdentity>;",
              "documentation": "Creates a new Multi-Human Root (MHR) identity.\n\nSimilar to [`create_hmr_identity`] but for machine-originated root entities.\nMHR identities use `did:oas:<namespace>:mhr:<identifier>`.\n\nSee ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding.\n\n# Arguments\n\n* `namespace` - The OAS namespace (e.g., `\"l1fe\"`, `\"test\"`).\n* `identifier` - The unique identifier within the namespace.\n\n# Returns\n\nA [`ForgeAgentIdentity`] with lineage depth 0 and kind `\"mhr\"`.\n\n# Errors\n\nReturns [`ForgeIdentityError::Oas`] if DID construction, document building,\nor signing fails in the underlying OAS SDK.\n\nReturns [`ForgeIdentityError::InvalidIdentity`] if the resulting identity\nfails structural validation.\n\n# Examples\n\n```\nuse forge_identity::lineage::create_mhr_identity;\n\nlet mhr = create_mhr_identity(\"test\", \"system1\").unwrap();\nassert_eq!(mhr.did(), \"did:oas:test:mhr:system1\");\nassert_eq!(mhr.kind(), \"mhr\");\nassert_eq!(mhr.lineage_depth(), 0);\n```"
            },
            {
              "name": "::derive_agent_identity",
              "line": 382,
              "signature": "pub fn derive_agent_identity(\n    parent: &ForgeAgentIdentity,\n    name: &str,\n    namespace: &str,\n) -> ForgeIdentityResult<ForgeAgentIdentity>;",
              "documentation": "Derives a child agent identity from a parent identity.\n\nPerforms the complete agent derivation workflow per ANVIL Spec \u00a711.2:\n\n1. Validates the parent's lineage depth does not exceed the maximum.\n2. Derives a child Ed25519 keypair using HKDF-SHA256.\n3. Generates an AgentLineageProof2025 linking child to parent.\n4. Constructs a signed OAS Identity Document with a complete lineage section.\n\nThe child's lineage depth is `parent.lineage_depth() + 1`.\n\n# Arguments\n\n* `parent` - The parent identity (HMR, MHR, or another agent).\n* `name` - The child agent's identifier (e.g., `\"analyzer\"`, `\"scraper\"`).\n* `namespace` - The child's namespace (often the same as the parent's).\n\n# Returns\n\nA [`ForgeAgentIdentity`] with kind `\"agent\"` and an incremented lineage depth.\n\n# Errors\n\nReturns [`ForgeIdentityError::ChainTooDeep`] if the parent's lineage depth\nplus one exceeds [`DEFAULT_MAX_LINEAGE_DEPTH`].\n\nReturns [`ForgeIdentityError::Oas`] if key derivation, document building,\nor signing fails in the underlying OAS SDK.\n\nReturns [`ForgeIdentityError::InvalidIdentity`] if the resulting identity\nfails structural validation.\n\n# Examples\n\n```\nuse forge_identity::lineage::{create_hmr_identity, derive_agent_identity};\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet agent = derive_agent_identity(&hmr, \"analyzer\", \"test\").unwrap();\n\nassert_eq!(agent.did(), \"did:oas:test:agent:analyzer\");\nassert_eq!(agent.kind(), \"agent\");\nassert_eq!(agent.lineage_depth(), 1);\nassert!(agent.document().lineage.is_some());\n```"
            },
            {
              "name": "::verify_lineage_chain",
              "line": 468,
              "signature": "pub fn verify_lineage_chain(\n    identity: &ForgeAgentIdentity,\n    provider: &dyn DocumentProvider,\n    config: &VerifyConfig,\n) -> ForgeIdentityResult<VerifyResult>;",
              "documentation": "Verifies the lineage chain for a given agent identity.\n\nWalks the cryptographic chain from the agent to its human root,\nverifying each hop's AgentLineageProof2025 signature against the\nresolved parent document's public key.\n\nSee ANVIL Spec \u00a711.2 \u2014 Lineage Propagation.\n\n# Arguments\n\n* `identity` - The agent identity whose lineage to verify.\n* `provider` - A [`DocumentProvider`] for resolving parent documents.\n* `config` - Verification configuration (timeouts, max depth).\n\n# Returns\n\nA [`VerifyResult`] on success, containing chain metadata and any warnings.\n\n# Errors\n\nReturns [`ForgeIdentityError::LineageVerificationFailed`] if any step\nof the verification fails (missing parent, invalid signature, etc.).\n\n# Examples\n\n```\nuse forge_identity::lineage::{\n    create_hmr_identity, derive_agent_identity, verify_lineage_chain,\n};\nuse oas_lineage::provider::InMemoryProvider;\nuse oas_lineage::config::VerifyConfig;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nlet agent = derive_agent_identity(&hmr, \"bot\", \"test\").unwrap();\n\nlet mut provider = InMemoryProvider::new();\nprovider.register(hmr.document().clone());\n\nlet result = verify_lineage_chain(&agent, &provider, &VerifyConfig::default());\nassert!(result.is_ok());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/local_dev/did.rs",
          "sha256": "48a0040312a8e50a8bd7e63f2e5bc064d4ac3787837c23a1c9fbe0f21e1b3967",
          "artifactSha256": "7cbe7f3ecb7598646a855eb587b005508d9b373d089ce02a0eecbe32a042a78d",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/local_dev/did.rs.txt",
          "declarations": [
            {
              "name": "::FORGE_DEV_METHOD",
              "line": 35,
              "signature": "pub const FORGE_DEV_METHOD: &str;",
              "documentation": "The DID method prefix for local development identities.\n\nThis prefix is explicitly rejected by all production DID resolvers."
            },
            {
              "name": "::forge_dev_did",
              "line": 63,
              "signature": "pub fn forge_dev_did(machine_id: &str, kind: &str, identifier: &str) -> String;",
              "documentation": "Constructs a local dev DID string.\n\n# Format\n\n`did:forge-dev:<machine-id>:<kind>:<identifier>`\n\nThe `machine_id` is a 16-character hex string derived from\n`SHA-256(\"forge-dev-root:\" + hostname + \":\" + username + \":\" + profile_name)[0..8]`.\nIt is computed once per profile and stored in the profile file. This scopes\nevery DID to the physical machine + OS user + profile name, preventing\ncollisions across developers and across named profiles on the same machine.\n\n# Arguments\n\n* `machine_id` - The 16-char hex machine identifier from the profile.\n* `kind` - One of `\"mhr\"`, `\"hmr\"`, `\"agent\"`, `\"org\"`.\n* `identifier` - The entity name or derived fingerprint.\n\n# Examples\n\n```\nuse forge_identity::local_dev::did::forge_dev_did;\n\nlet did = forge_dev_did(\"a1b2c3d4e5f6a7b8\", \"agent\", \"data-analyst\");\nassert_eq!(did, \"did:forge-dev:a1b2c3d4e5f6a7b8:agent:data-analyst\");\n```"
            },
            {
              "name": "::derive_machine_id",
              "line": 100,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn derive_machine_id(profile_name: &str) -> String;",
              "documentation": "Derives a deterministic machine identifier from hostname, username,\nand profile name.\n\nThe ID is stable across sessions on the same machine for the same user\nand same profile, ensuring agent DIDs remain consistent across SDK restarts.\n\n# Algorithm\n\n`SHA-256(\"forge-dev-root:\" + hostname + \":\" + username + \":\" + profile_name)`\ntruncated to the first 8 bytes, hex-encoded to 16 characters.\n\n# Arguments\n\n* `profile_name` - The profile name (e.g., `\"default\"`, `\"alice\"`).\n\n# Returns\n\nA 16-character hex string (8 bytes of SHA-256 output).\n\n# Examples\n\n```\nuse forge_identity::local_dev::did::derive_machine_id;\n\nlet id1 = derive_machine_id(\"default\");\nlet id2 = derive_machine_id(\"default\");\nassert_eq!(id1, id2); // Deterministic on the same machine\nassert_eq!(id1.len(), 16); // Always 16 hex chars\n\nlet id3 = derive_machine_id(\"alice\");\nassert_ne!(id1, id3); // Different profiles produce different IDs\n```"
            },
            {
              "name": "::derive_machine_id",
              "line": 108,
              "signature": "#[cfg(target_arch = \"wasm32\")]\npub fn derive_machine_id(profile_name: &str) -> String;",
              "documentation": "WASM fallback: derives a machine identifier using fixed host/user values."
            },
            {
              "name": "::derive_machine_id_from_parts",
              "line": 141,
              "signature": "pub fn derive_machine_id_from_parts(hostname: &str, username: &str, profile_name: &str) -> String;",
              "documentation": "Derives a machine identifier from explicit hostname, username, and profile name.\n\nThis is the deterministic core of [`derive_machine_id`], exposed for\ncross-language parity testing where hostname and username must be fixed.\n\n# Arguments\n\n* `hostname` - The machine hostname.\n* `username` - The OS username.\n* `profile_name` - The profile name.\n\n# Returns\n\nA 16-character hex string.\n\n# Examples\n\n```\nuse forge_identity::local_dev::did::derive_machine_id_from_parts;\n\nlet id = derive_machine_id_from_parts(\"dev-machine\", \"alice\", \"default\");\nassert_eq!(id.len(), 16);\n\n// Same inputs always produce the same output\nlet id2 = derive_machine_id_from_parts(\"dev-machine\", \"alice\", \"default\");\nassert_eq!(id, id2);\n```"
            },
            {
              "name": "::validate_forge_dev_did",
              "line": 161,
              "signature": "pub fn validate_forge_dev_did(did: &str) -> ForgeIdentityResult<()>;",
              "documentation": "Validates that a string is a valid forge-dev DID.\n\n# Arguments\n\n* `did` - The DID string to validate.\n\n# Returns\n\n`Ok(())` if the DID has the correct format.\n\n# Errors\n\nReturns [`ForgeIdentityError::InvalidIdentity`] if the DID does not match\nthe expected `did:forge-dev:<machine-id>:<kind>:<identifier>` format."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/local_dev/mod.rs",
          "sha256": "32434596ae628e28d6d0c924c4cf8ec5f8c840651308a48a3f948914967f9e24",
          "artifactSha256": "41b2f76232f172681ff05f2ca290627e85ed4e40eecb187ad1ab8e9ce0721e2d",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/local_dev/mod.rs.txt",
          "declarations": [
            {
              "name": "did",
              "line": 38,
              "signature": "pub mod did;",
              "documentation": "Local development identity layer for Forge agents.\n\nThis module provides a lightweight, self-contained identity and authorization\nlayer that works entirely offline without external services. It uses real\nEd25519 cryptography but with a distinct DID method (`did:forge-dev`) that\nis rejected by all production systems.\n\n# Architecture\n\n- [`LocalDevProfile`] \u2014 The top-level profile managing root identity, org, and agent cache.\n- [`ForgeDevIdentity`] \u2014 A dev identity wrapping [`ForgeAgentIdentity`](crate::agent_identity::ForgeAgentIdentity)\n  with development metadata.\n- [`LocalOrg`] \u2014 A local organization container for grouping dev identities.\n- [`did`] \u2014 DID construction and validation for the `forge-dev` method.\n- [`persistence`] \u2014 Profile save/load to/from JSON files.\n\n# Security\n\nLocal dev identities use real Ed25519 keys and real signatures. The only\ndifference from production is the DID method prefix (`forge-dev` vs `oas`).\nThe `forge-dev` method is not recognized by any production DID resolver,\nregistry, or verifier.\n\n# Examples\n\n```no_run\nuse forge_identity::local_dev::LocalDevProfile;\n\n// Load or create a profile at the default path\nlet mut profile = LocalDevProfile::load_or_create_default().unwrap();\n\n// Derive an agent identity (lazy, cached)\nlet agent = profile.agent_identity(\"data-analyst\").unwrap();\nassert!(agent.did().starts_with(\"did:forge-dev:\"));\nassert_eq!(agent.kind(), \"agent\");\n```"
            },
            {
              "name": "persistence",
              "line": 39,
              "signature": "pub mod persistence;",
              "documentation": ""
            },
            {
              "name": "::LocalDevProfile",
              "line": 79,
              "signature": "pub struct LocalDevProfile {\n\n}",
              "documentation": "A local development profile providing identity and authorization\nwithout external services.\n\n`LocalDevProfile` is the entry point for development-mode operation.\nIt provisions a local root identity, derives agent identities on demand,\nand issues local-scoped capability tokens that grant all capabilities.\n\n# Security\n\nLocal dev profiles use real Ed25519 cryptography but are clearly\nnon-production. The DID method `forge-dev` is not recognized by any\nproduction verifier, registry, or resolver.\n\n# Examples\n\n```no_run\nuse forge_identity::local_dev::LocalDevProfile;\n\nlet mut profile = LocalDevProfile::load_or_create_default().unwrap();\nlet agent = profile.agent_identity(\"data-analyst\").unwrap();\nassert!(agent.did().starts_with(\"did:forge-dev:\"));\n```"
            },
            {
              "name": "::ForgeDevIdentity",
              "line": 112,
              "signature": "pub struct ForgeDevIdentity {\n\n}",
              "documentation": "A local development identity wrapping [`ForgeAgentIdentity`] with dev metadata.\n\nThis is intentionally NOT a newtype around `ForgeAgentIdentity`. It wraps\nthe real identity and adds development-mode metadata (creation timestamp,\norg binding, profile version)."
            },
            {
              "name": "::ForgeDevIdentity::did",
              "line": 149,
              "signature": "pub fn did(&self) -> &str;",
              "documentation": "Returns the `did:forge-dev` identifier string."
            },
            {
              "name": "::ForgeDevIdentity::kind",
              "line": 154,
              "signature": "pub fn kind(&self) -> &str;",
              "documentation": "Returns the entity kind (e.g., `\"mhr\"`, `\"agent\"`)."
            },
            {
              "name": "::ForgeDevIdentity::lineage_depth",
              "line": 159,
              "signature": "pub fn lineage_depth(&self) -> u32;",
              "documentation": "Returns the lineage depth from the root."
            },
            {
              "name": "::ForgeDevIdentity::inner",
              "line": 164,
              "signature": "pub fn inner(&self) -> &ForgeAgentIdentity;",
              "documentation": "Returns a reference to the underlying [`ForgeAgentIdentity`]."
            },
            {
              "name": "::ForgeDevIdentity::into_inner",
              "line": 169,
              "signature": "pub fn into_inner(self) -> ForgeAgentIdentity;",
              "documentation": "Consumes the dev identity wrapper, returning the inner [`ForgeAgentIdentity`]."
            },
            {
              "name": "::ForgeDevIdentity::org_id",
              "line": 174,
              "signature": "pub fn org_id(&self) -> &str;",
              "documentation": "Returns the org ID this identity belongs to."
            },
            {
              "name": "::ForgeDevIdentity::created_at",
              "line": 179,
              "signature": "pub fn created_at(&self) -> &str;",
              "documentation": "Returns the ISO 8601 creation timestamp."
            },
            {
              "name": "::ForgeDevIdentity::schema_version",
              "line": 184,
              "signature": "pub fn schema_version(&self) -> u32;",
              "documentation": "Returns the schema version."
            },
            {
              "name": "::ForgeDevIdentity::sign",
              "line": 189,
              "signature": "pub fn sign(&self, message: &[u8]) -> Vec<u8>;",
              "documentation": "Signs a message with this identity's Ed25519 signing key."
            },
            {
              "name": "::ForgeDevIdentity::verifying_key_bytes",
              "line": 194,
              "signature": "pub fn verifying_key_bytes(&self) -> [u8; 32];",
              "documentation": "Returns the raw 32-byte Ed25519 verifying (public) key bytes."
            },
            {
              "name": "::LocalOrg",
              "line": 204,
              "signature": "#[derive(Debug, Clone)]\npub struct LocalOrg {\n\n}",
              "documentation": "A local organization for grouping dev identities.\n\nIn production, orgs are managed by external services (IAM, Omerta sidecar,\netc.). In local dev, an org is a named container with a deterministic ID."
            },
            {
              "name": "::LocalOrg::new",
              "line": 216,
              "signature": "pub fn new(name: impl Into<String>) -> Self;",
              "documentation": "Creates a new local org with the given name.\n\nThe org ID is deterministically derived as `\"forge-dev-org:<name>\"`."
            },
            {
              "name": "::LocalOrg::id",
              "line": 223,
              "signature": "pub fn id(&self) -> &str;",
              "documentation": "Returns the org identifier."
            },
            {
              "name": "::LocalOrg::name",
              "line": 228,
              "signature": "pub fn name(&self) -> &str;",
              "documentation": "Returns the org display name."
            },
            {
              "name": "::LocalDevProfile::load_or_create_default",
              "line": 253,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn load_or_create_default() -> ForgeIdentityResult<Self>;",
              "documentation": "Loads or creates a local dev profile at the default path.\n\nThe default path is `~/.forge/dev-profile.json`. If the file exists,\nthe profile is loaded. If it does not exist, a new profile is created\nwith a fresh Ed25519 root identity and persisted to disk.\n\n# Returns\n\nA [`LocalDevProfile`] ready for use.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if the home directory\ncannot be determined or I/O fails.\n\nReturns [`ForgeIdentityError::Oas`] if identity creation fails."
            },
            {
              "name": "::LocalDevProfile::load_or_create",
              "line": 277,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn load_or_create(profile_name: &str) -> ForgeIdentityResult<Self>;",
              "documentation": "Loads or creates a named local dev profile.\n\nNamed profiles are stored at `~/.forge/dev-profile-<name>.json`\n(or `~/.forge/dev-profile.json` for the `\"default\"` profile).\nDifferent profile names produce different machine IDs and therefore\ndifferent DID namespaces.\n\n# Arguments\n\n* `profile_name` - The profile name (e.g., `\"alice\"`, `\"bob\"`).\n\n# Returns\n\nA [`LocalDevProfile`] for the given profile name.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if I/O fails.\nReturns [`ForgeIdentityError::Oas`] if identity creation fails."
            },
            {
              "name": "::LocalDevProfile::root",
              "line": 289,
              "signature": "pub fn root(&self) -> &ForgeDevIdentity;",
              "documentation": "Returns the root dev identity."
            },
            {
              "name": "::LocalDevProfile::org",
              "line": 294,
              "signature": "pub fn org(&self) -> &LocalOrg;",
              "documentation": "Returns the local org."
            },
            {
              "name": "::LocalDevProfile::machine_id",
              "line": 299,
              "signature": "pub fn machine_id(&self) -> &str;",
              "documentation": "Returns the machine ID."
            },
            {
              "name": "::LocalDevProfile::profile_name",
              "line": 304,
              "signature": "pub fn profile_name(&self) -> &str;",
              "documentation": "Returns the profile name."
            },
            {
              "name": "::LocalDevProfile::storage_path",
              "line": 309,
              "signature": "pub fn storage_path(&self) -> &std::path::Path;",
              "documentation": "Returns the storage path."
            },
            {
              "name": "::LocalDevProfile::agent_count",
              "line": 314,
              "signature": "pub fn agent_count(&self) -> usize;",
              "documentation": "Returns the number of cached agent identities."
            },
            {
              "name": "::LocalDevProfile::agent_identity",
              "line": 337,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn agent_identity(&mut self, agent_name: &str) -> ForgeIdentityResult<&ForgeDevIdentity>;",
              "documentation": "Derives (or retrieves from cache) an agent identity for the given name.\n\nAgent identities are derived lazily from the root identity using\nHKDF-SHA256 key derivation. Once derived, they are cached in the\nprofile and persisted to disk.\n\n# Arguments\n\n* `agent_name` - The agent's identifier (e.g., `\"data-analyst\"`).\n\n# Returns\n\nA reference to the cached or newly derived [`ForgeDevIdentity`].\n\n# Errors\n\nReturns [`ForgeIdentityError::Oas`] if key derivation or document\nconstruction fails."
            },
            {
              "name": "::LocalDevProfile::save",
              "line": 366,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn save(&self) -> ForgeIdentityResult<()>;",
              "documentation": "Persists the current profile state to disk.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if serialization or I/O fails."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/local_dev/persistence.rs",
          "sha256": "e334b9cb607d4201382f7975f68d5b2e300ced8bc910420b264128e4c55c986a",
          "artifactSha256": "4e2dc2734e8ce9cd31273c05b061bc64e78c2547bbd4159e46b74e0799dfd79c",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/local_dev/persistence.rs.txt",
          "declarations": [
            {
              "name": "::PROFILE_SCHEMA_VERSION",
              "line": 28,
              "signature": "pub const PROFILE_SCHEMA_VERSION: u32;",
              "documentation": "The current schema version for the profile JSON format."
            },
            {
              "name": "::PersistedProfile",
              "line": 42,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PersistedProfile {\n/// Schema version for forward compatibility.\n\npub schema_version: u32,\n/// ISO 8601 timestamp of when the profile was first created.\n\npub created_at: String,\n/// The profile name (e.g., `\"default\"`, `\"alice\"`).\n\npub profile_name: String,\n/// The 16-character hex machine identifier.\n\npub machine_id: String,\n/// The root identity data.\n\npub root: PersistedDevIdentity,\n/// The local organization context.\n\npub org: PersistedOrg,\n/// Cached agent identities, keyed by agent name.\n\npub agents: BTreeMap<String, PersistedDevIdentity>\n}",
              "documentation": "Serializable representation of a local dev profile.\n\nThis is the on-disk format. It is intentionally separate from the in-memory\n[`LocalDevProfile`](super::LocalDevProfile) to decouple serialization from\nruntime behavior."
            },
            {
              "name": "::PersistedDevIdentity",
              "line": 61,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PersistedDevIdentity {\n/// The `did:forge-dev:...` identifier string.\n\npub did: String,\n/// The entity kind (e.g., `\"mhr\"`, `\"agent\"`).\n\npub kind: String,\n/// The 32-byte Ed25519 signing key, hex-encoded.\n\npub signing_key_hex: String,\n/// The full OAS Identity Document serialized as a JSON string.\n\npub document_json: String,\n/// The number of derivation steps from root.\n\npub lineage_depth: u32,\n/// The org ID this identity belongs to.\n\npub org_id: String,\n/// ISO 8601 timestamp of when this identity was created.\n\npub created_at: String\n}",
              "documentation": "Serializable representation of a single dev identity."
            },
            {
              "name": "::PersistedOrg",
              "line": 80,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PersistedOrg {\n/// The org identifier (e.g., `\"forge-dev-org:local\"`).\n\npub id: String,\n/// The org display name.\n\npub name: String\n}",
              "documentation": "Serializable representation of a local organization."
            },
            {
              "name": "::default_profile_path",
              "line": 101,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn default_profile_path() -> ForgeIdentityResult<PathBuf>;",
              "documentation": "Returns the default profile storage path.\n\nThe path is `~/.forge/dev-profile.json` unless the `FORGE_DEV_PROFILE_PATH`\nenvironment variable is set.\n\n# Returns\n\nThe resolved profile path.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if the home directory\ncannot be determined."
            },
            {
              "name": "::named_profile_path",
              "line": 132,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn named_profile_path(profile_name: &str) -> ForgeIdentityResult<PathBuf>;",
              "documentation": "Returns the profile storage path for a named profile.\n\nNamed profiles are stored at `~/.forge/dev-profile-<name>.json`.\n\n# Arguments\n\n* `profile_name` - The profile name.\n\n# Returns\n\nThe resolved profile path.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if the home directory\ncannot be determined."
            },
            {
              "name": "::save_profile",
              "line": 161,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn save_profile(profile: &PersistedProfile, path: &Path) -> ForgeIdentityResult<()>;",
              "documentation": "Saves a persisted profile to disk at the given path.\n\nCreates parent directories if they do not exist. On Unix, sets file\npermissions to 0600 (owner-only read/write).\n\n# Arguments\n\n* `profile` - The profile data to persist.\n* `path` - The filesystem path to write to.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if serialization or I/O fails."
            },
            {
              "name": "::load_profile",
              "line": 213,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn load_profile(path: &Path) -> ForgeIdentityResult<PersistedProfile>;",
              "documentation": "Loads a persisted profile from disk.\n\n# Arguments\n\n* `path` - The filesystem path to read from.\n\n# Returns\n\nThe deserialized [`PersistedProfile`].\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if the file cannot be read\nor the JSON is malformed."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-identity/src/persistence.rs",
          "sha256": "5eedfb18847c2c0227c9241bf1394c6d31ac846a29d1b1ee74d7dfb83dca6cfb",
          "artifactSha256": "f0dbb99802f4b604a1ae8d80eb2d2c7770ff96ff44e82c40f162c7423c70e49e",
          "url": "/reference/source/forge-rs/crates/forge-identity/src/persistence.rs.txt",
          "declarations": [
            {
              "name": "::save_identity",
              "line": 118,
              "signature": "#[deprecated(\n    since = \"0.2.0\",\n    note = \"Persists signing key in plaintext. Use an encrypted persistence backend \\\n            (e.g., AES-256-GCM + Argon2id) for production workloads. \\\n            See L1F-570 for the encrypted persistence follow-up.\"\n)]\npub fn save_identity(identity: &ForgeAgentIdentity, path: &Path) -> ForgeIdentityResult<()>;",
              "documentation": "Saves an agent identity to a JSON file at the specified path.\n\nThe identity is serialized as a `PersistedIdentity` containing the DID,\nkind, signing key (hex-encoded), full document JSON, and lineage depth.\n\n# Security\n\n**WARNING**: The signing key is currently stored in hex without encryption.\nIn production, use encrypted storage (AES-256-GCM or similar). This\nfunction is suitable for development and testing only.\n\nSee ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding.\n\n# Arguments\n\n* `identity` - The agent identity to save.\n* `path` - The filesystem path to write the JSON file to.\n\n# Returns\n\n`Ok(())` on success.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if serialization or\nfile I/O fails.\n\n# Examples\n\n```no_run\nuse forge_identity::lineage::create_hmr_identity;\nuse forge_identity::persistence::save_identity;\nuse std::path::Path;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nsave_identity(&hmr, Path::new(\"/tmp/identity.json\")).unwrap();\n```"
            },
            {
              "name": "::load_identity",
              "line": 213,
              "signature": "pub fn load_identity(path: &Path) -> ForgeIdentityResult<ForgeAgentIdentity>;",
              "documentation": "Loads an agent identity from a JSON file at the specified path.\n\nReads and deserializes a `PersistedIdentity`, reconstructs the\nEd25519 keypair from the stored signing key bytes, parses the OAS\ndocument, and returns a fully functional [`ForgeAgentIdentity`].\n\nSee ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding.\n\n# Arguments\n\n* `path` - The filesystem path to read the JSON file from.\n\n# Returns\n\nA [`ForgeAgentIdentity`] reconstructed from the persisted data.\n\n# Errors\n\nReturns [`ForgeIdentityError::PersistenceFailed`] if:\n- The file cannot be read.\n- The JSON is malformed.\n- The signing key hex is invalid.\n- The OAS document JSON is malformed.\n- The reconstructed identity fails validation.\n\n# Examples\n\n```no_run\nuse forge_identity::persistence::load_identity;\nuse std::path::Path;\n\nlet identity = load_identity(Path::new(\"/tmp/identity.json\")).unwrap();\nprintln!(\"Loaded identity: {}\", identity.did());\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-auth",
      "language": "rust",
      "version": "0.2.0",
      "description": "Arsenal capability token integration for Forge agents \u2014 ANVIL Spec \u00a78.7, \u00a711.3",
      "manifest": "forge-rs/crates/forge-auth/Cargo.toml",
      "manifestSha256": "4e029538eeccd6254d775b2034b2f9fd72caa45a449f5d6c30d3900087d7382b",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-auth",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-auth/src/auth_context.rs",
          "sha256": "d85cda354c1529833855e97796a70baf41ba0fcf669551974d34a5aeb1d84c4c",
          "artifactSha256": "123b0b289f26522a5052564386f236d6d375a3128cc41a85aed4fb226ed3f03d",
          "url": "/reference/source/forge-rs/crates/forge-auth/src/auth_context.rs.txt",
          "declarations": [
            {
              "name": "::AuthContext",
              "line": 87,
              "signature": "pub struct AuthContext {\n\n}",
              "documentation": "An identity-aware authorization context for a Forge agent.\n\nCombines the agent's cryptographic identity ([`ForgeAgentIdentity`]) with\nits Arsenal capability token ([`AgentCapabilityToken`]) to provide a unified\ninterface for identity-aware authorization.\n\n# Security\n\n- The private key is accessible only through the identity's signing methods.\n- The Debug implementation redacts the private key.\n- All authorization checks go through the ACT.\n\n# ANVIL Spec \u00a78.7, \u00a711.1\n\n# Examples\n\n```no_run\nuse forge_auth::auth_context::AuthContext;\nuse forge_identity::lineage::create_hmr_identity;\nuse forge_auth::local_capability::LocalCapabilityFactory;\n\nlet hmr = create_hmr_identity(\"test\", \"example\").unwrap();\nlet factory = LocalCapabilityFactory::new(\"forge-dev-org:local\");\nlet act = factory.create_dev_token(hmr.did());\n\nlet ctx = AuthContext::new(hmr, act);\nassert!(ctx.identity().lineage_depth() == 0);\n```"
            },
            {
              "name": "::AuthContext::new",
              "line": 132,
              "signature": "pub fn new(identity: ForgeAgentIdentity, act: AgentCapabilityToken) -> Self;",
              "documentation": "Creates a new `AuthContext` from an identity and capability token.\n\n# Arguments\n\n* `identity` - The agent's OAS identity.\n* `act` - The agent's Arsenal capability token.\n\n# Returns\n\nA new `AuthContext`.\n\n# Examples\n\n```no_run\nuse forge_auth::auth_context::AuthContext;\nuse forge_identity::lineage::create_hmr_identity;\nuse forge_auth::local_capability::LocalCapabilityFactory;\n\nlet hmr = create_hmr_identity(\"test\", \"new-ctx\").unwrap();\nlet factory = LocalCapabilityFactory::new(\"forge-dev-org:local\");\nlet act = factory.create_dev_token(hmr.did());\nlet ctx = AuthContext::new(hmr, act);\n```"
            },
            {
              "name": "::AuthContext::agent_did",
              "line": 157,
              "signature": "pub fn agent_did(&self) -> &str;",
              "documentation": "Returns the agent's OAS DID.\n\n# Examples\n\n```no_run\n# use forge_auth::auth_context::AuthContext;\n# use forge_identity::lineage::create_hmr_identity;\n# use forge_auth::local_capability::LocalCapabilityFactory;\n# let hmr = create_hmr_identity(\"test\", \"did-demo\").unwrap();\n# let factory = LocalCapabilityFactory::new(\"forge-dev-org:local\");\n# let act = factory.create_dev_token(hmr.did());\n# let ctx = AuthContext::new(hmr, act);\nassert!(ctx.agent_did().starts_with(\"did:oas:\"));\n```"
            },
            {
              "name": "::AuthContext::identity",
              "line": 162,
              "signature": "pub fn identity(&self) -> &ForgeAgentIdentity;",
              "documentation": "Returns a reference to the agent's identity."
            },
            {
              "name": "::AuthContext::act",
              "line": 167,
              "signature": "pub fn act(&self) -> &AgentCapabilityToken;",
              "documentation": "Returns a reference to the agent's capability token."
            },
            {
              "name": "::AuthContext::lineage_depth",
              "line": 172,
              "signature": "pub fn lineage_depth(&self) -> u32;",
              "documentation": "Returns the agent's lineage depth."
            },
            {
              "name": "::AuthContext::sign",
              "line": 187,
              "signature": "pub fn sign(&self, message: &[u8]) -> Vec<u8>;",
              "documentation": "Signs a message with the agent's Ed25519 key.\n\nUseful for signing audit trail entries.\n\n# Arguments\n\n* `message` - The raw bytes to sign.\n\n# Returns\n\nA 64-byte Ed25519 signature."
            },
            {
              "name": "::AuthContext::authorize_tool",
              "line": 211,
              "signature": "#[instrument(skip(self), fields(agent_did = %self.identity.did(), tool = %tool_name, tier = %tool_tier))]\npub fn authorize_tool(\n        &self,\n        tool_name: &str,\n        tool_tier: ToolTier,\n    ) -> ForgeAuthResult<ToolAuthorizationDecision>;",
              "documentation": "Authorizes a tool invocation against the agent's ACT.\n\nThis is the primary tool authorization method. It checks the tool's\ntier and verifies the ACT scope if required.\n\n# Arguments\n\n* `tool_name` - The name of the tool being invoked.\n* `tool_tier` - The tool's classification tier.\n\n# Returns\n\nA [`ToolAuthorizationDecision`] indicating whether the invocation is allowed.\n\n# Errors\n\nPropagates errors from ACT verification (expired, invalid).\n\n# ANVIL Spec \u00a78.7"
            },
            {
              "name": "::AuthContext::authorize_proxy_tool",
              "line": 243,
              "signature": "#[instrument(skip(self, variables), fields(agent_did = %self.identity.did(), tool = %tool_name))]\npub fn authorize_proxy_tool(\n        &self,\n        tool_name: &str,\n        tool_tier: ToolTier,\n        variables: &[String],\n    ) -> ForgeAuthResult<ToolAuthorizationDecision>;",
              "documentation": "Authorizes a tool invocation that uses proxy template variables.\n\nChecks both the tool scope and proxy variable scopes.\n\n# Arguments\n\n* `tool_name` - The name of the tool being invoked.\n* `tool_tier` - The tool's classification tier.\n* `variables` - The template variable names used by the tool.\n\n# Returns\n\nA [`ToolAuthorizationDecision`].\n\n# Errors\n\nPropagates errors from ACT verification."
            },
            {
              "name": "::AuthContext::create_authorized_subagent",
              "line": 284,
              "signature": "#[instrument(skip(self, requested_scopes), fields(parent_did = %self.identity.did(), child_name = %name))]\npub fn create_authorized_subagent(\n        &self,\n        name: &str,\n        namespace: &str,\n        requested_scopes: ScopeSet,\n    ) -> ForgeAuthResult<AuthContext>;",
              "documentation": "Creates an authorized sub-agent with derived identity and narrowed capabilities.\n\nThis is the single entry point for sub-agent creation per ANVIL Spec \u00a711.2\u201311.3.\nIt performs:\n1. Identity derivation (HKDF-SHA256) from the parent.\n2. Capability delegation with scope narrowing.\n3. Validation that child scopes are a subset of parent scopes.\n\n# Arguments\n\n* `name` - The sub-agent's identifier (e.g., `\"analyzer\"`, `\"scraper\"`).\n* `namespace` - The sub-agent's OAS namespace.\n* `requested_scopes` - The scopes requested for the child (must be a subset of parent).\n\n# Returns\n\nA new [`AuthContext`] for the sub-agent with derived identity and narrowed capabilities.\n\n# Errors\n\n- [`ForgeAuthError::CapabilityEscalation`] \u2014 if requested scopes exceed parent.\n- [`ForgeAuthError::DelegationDenied`] \u2014 if delegation constraints prevent creation.\n- Propagated identity errors via [`ForgeAuthError::IdentityError`].\n\n# ANVIL Spec \u00a711.2, \u00a711.3"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-auth/src/capability.rs",
          "sha256": "743cd09d7ddcae1e3ceef9bfa505b2c255bf24876de9c9fc6dd37e543fd0789d",
          "artifactSha256": "77f6e39de7f5329e30e277013bd6c64f768848427356467a20eb656d9e302576",
          "url": "/reference/source/forge-rs/crates/forge-auth/src/capability.rs.txt",
          "declarations": [
            {
              "name": "::verify_act",
              "line": 88,
              "signature": "#[instrument(skip(act), fields(token_id = %act.id(), agent_id = %act.subject()))]\npub fn verify_act(act: &AgentCapabilityToken) -> ForgeAuthResult<()>;",
              "documentation": "Verifies that an Arsenal ACT is structurally valid and time-valid.\n\n# Security\n\n**This function does NOT verify the cryptographic signature on the token.\nIt only checks:\n\n1. **Structural validation** \u2014 non-empty scopes, valid TTL bounds, well-formed\n   fields (via `AgentCapabilityToken::validate_structure`).\n2. **Time validity** \u2014 token not expired and `nbf` (not-before) has passed.\n\nCryptographic signature verification is the responsibility of the Arsenal\ncrypto layer and **must** be performed separately before any decision is\nmade to honor the ACT. Without that signature check, a forged or tampered\ntoken can satisfy this function and still be invalid -- callers that treat\n`verify_act -> Ok(())` as \"this token is authentic\" are creating a silent\nsecurity gap.\n\nThe lower-level alias [`decode_and_check_ttl`] points at this same routine\nand exists so call sites that only want the structure-and-TTL gate can\nspell that out explicitly. Production-grade callers should pair this with\nthe Arsenal verifier before honoring any scope decision.\n\n# Arguments\n\n* `act` - The Arsenal ACT to verify.\n\n# Returns\n\n`Ok(())` if the token is valid.\n\n# Errors\n\n- [`ForgeAuthError::TokenExpired`] \u2014 if the token's expiration time has passed.\n- [`ForgeAuthError::InvalidToken`] \u2014 if the token fails structural validation.\n\n# ANVIL Spec \u00a78.7.1\n\nEvery tool invocation path must verify the ACT before checking scopes.\n\n# Examples\n\n```no_run\n# use arsenal_core::token::AgentCapabilityToken;\nuse forge_auth::capability::verify_act;\n# fn example(act: &AgentCapabilityToken) -> forge_auth::error::ForgeAuthResult<()> {\nverify_act(act)?;\n// Token is valid \u2014 proceed with scope checks\n# Ok(())\n# }\n```"
            },
            {
              "name": "::decode_and_check_ttl",
              "line": 141,
              "signature": "pub fn decode_and_check_ttl(act: &AgentCapabilityToken) -> ForgeAuthResult<()>;",
              "documentation": "Alias for [`verify_act`] that names what it actually does.\n\n`verify_act` verifies the token's structure and TTL but does NOT verify\nthe cryptographic signature -- callers reading code that says\n`verify_act(&token)?` often assume signature verification happened.\n`decode_and_check_ttl` is the same routine spelled out so the security\nposture is obvious at the call site.\n\nPair this with the Arsenal verifier before honoring any scope decision.\n\n# Examples\n\n```no_run\n# use arsenal_core::token::AgentCapabilityToken;\nuse forge_auth::capability::decode_and_check_ttl;\n# fn example(act: &AgentCapabilityToken) -> forge_auth::error::ForgeAuthResult<()> {\ndecode_and_check_ttl(act)?;\n// Token is structurally valid and not expired.\n// Signature verification still required before honoring scopes.\n# Ok(())\n# }\n```"
            },
            {
              "name": "::extract_scopes",
              "line": 174,
              "signature": "pub fn extract_scopes(act: &AgentCapabilityToken) -> Vec<String>;",
              "documentation": "Extracts all granted scope strings from an Arsenal ACT.\n\nReturns the scopes as a vector of `String` values in the\n`\"service:resource:action\"` format. The order is deterministic\n(sorted lexicographically, since `ScopeSet` uses `BTreeSet`).\n\nThis function does **not** validate the token. Call [`verify_act`] first\nto ensure the token is valid before relying on its scopes.\n\n# Arguments\n\n* `act` - The Arsenal ACT from which to extract scopes.\n\n# Returns\n\nA `Vec<String>` of scope strings.\n\n# Examples\n\n```no_run\n# use arsenal_core::token::AgentCapabilityToken;\nuse forge_auth::capability::extract_scopes;\n# fn example(act: &AgentCapabilityToken) {\nlet scopes = extract_scopes(act);\nfor scope in &scopes {\n    println!(\"Granted: {scope}\");\n}\n# }\n```"
            },
            {
              "name": "::act_allows_scope",
              "line": 218,
              "signature": "#[instrument(skip(act), fields(token_id = %act.id(), scope = %scope))]\npub fn act_allows_scope(act: &AgentCapabilityToken, scope: &str) -> ForgeAuthResult<bool>;",
              "documentation": "Checks whether an Arsenal ACT grants a specific scope.\n\nThis function first verifies the token is valid (not expired, structurally\nsound), then checks if any of the token's granted scopes imply the\nrequested scope. Wildcard scopes (e.g., `\"forge:*:*\"`) will match\nspecific scopes (e.g., `\"forge:tool.search:execute\"`).\n\n# Arguments\n\n* `act` - The Arsenal ACT to check.\n* `scope` - The scope string to check in `\"service:resource:action\"` format.\n\n# Returns\n\n`Ok(true)` if the scope is granted, `Ok(false)` if not.\n\n# Errors\n\n- [`ForgeAuthError::TokenExpired`] \u2014 if the token has expired.\n- [`ForgeAuthError::InvalidToken`] \u2014 if the token is structurally invalid.\n- [`ForgeAuthError::InvalidToken`] \u2014 if the requested scope string is malformed.\n\n# ANVIL Spec \u00a78.7.2\n\nScope checking uses the Arsenal `Scope::implies` semantics, which support\nwildcard matching at each component position.\n\n# Examples\n\n```no_run\n# use arsenal_core::token::AgentCapabilityToken;\nuse forge_auth::capability::act_allows_scope;\n# fn example(act: &AgentCapabilityToken) -> forge_auth::error::ForgeAuthResult<()> {\nif act_allows_scope(act, \"forge:tool.web_search:execute\")? {\n    println!(\"Web search tool is authorized\");\n}\n# Ok(())\n# }\n```"
            },
            {
              "name": "::act_allows_proxy_variable",
              "line": 257,
              "signature": "#[instrument(skip(act), fields(token_id = %act.id(), variable = %variable))]\npub fn act_allows_proxy_variable(\n    act: &AgentCapabilityToken,\n    variable: &str,\n) -> ForgeAuthResult<bool>;",
              "documentation": "Checks whether an Arsenal ACT grants proxy access for a specific variable.\n\nThe proxy scope format is `\"proxy:<variable_name>:use\"`. If the exact scope\nis not present, the function also checks for the wildcard scope `\"proxy:*:*\"`.\n\n# Arguments\n\n* `act` - The Arsenal ACT to check.\n* `variable` - The variable name to check proxy access for.\n\n# Returns\n\n`Ok(true)` if proxy access is granted, `Ok(false)` if not.\n\n# Errors\n\n- [`ForgeAuthError::TokenExpired`] \u2014 if the token has expired.\n- [`ForgeAuthError::InvalidToken`] \u2014 if the token is structurally invalid."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-auth/src/delegation.rs",
          "sha256": "b38368961e974545debd611ddd2da787ca8f9aba60248f9cdb70525330971d00",
          "artifactSha256": "ce7f717a1593a9368996c98cc62416a17b716e99d790ecb584dc90fecab37187",
          "url": "/reference/source/forge-rs/crates/forge-auth/src/delegation.rs.txt",
          "declarations": [
            {
              "name": "::DelegationRequest",
              "line": 60,
              "signature": "#[derive(Debug)]\npub struct DelegationRequest<'a> {\n/// The parent agent's Arsenal ACT.\n\npub parent_act: &'a AgentCapabilityToken,\n/// The parent agent's OAS DID (for error messages).\n\npub parent_did: String,\n/// The child agent's Arsenal identity.\n\npub child_agent_id: AgentId,\n/// The child agent's OAS DID (for error messages).\n\npub child_did: String,\n/// The scopes requested for the child agent.\n\n///\n\n/// Must be a subset of the parent's scopes.\n\npub requested_scopes: ScopeSet\n}",
              "documentation": "A request to delegate capabilities from a parent agent to a child agent.\n\n# ANVIL Spec \u00a711.3\n\nThe delegation request captures all information needed to create a\nchild ACT with narrowed capabilities."
            },
            {
              "name": "::delegate_capabilities",
              "line": 135,
              "signature": "#[instrument(\n    skip(request),\n    fields(\n        parent_did = %request.parent_did,\n        child_did = %request.child_did,\n        requested_scope_count = request.requested_scopes.len()\n    )\n)]\npub fn delegate_capabilities(\n    request: &DelegationRequest<'_>,\n) -> ForgeAuthResult<AgentCapabilityToken>;",
              "documentation": "Delegates capabilities from a parent agent to a child agent.\n\nThis function enforces all delegation constraints defined in ANVIL Spec \u00a711.3:\n\n1. **Parent ACT validity** \u2014 The parent's token must be valid (not expired,\n   structurally sound).\n2. **Scope narrowing** \u2014 The requested child scopes must be a subset of\n   the parent's scopes. Any scope in `requested_scopes` that is not implied\n   by the parent's scopes triggers a [`ForgeAuthError::CapabilityEscalation`].\n3. **Delegation permission** \u2014 The parent's ACT must have delegation\n   constraints that allow delegation (if present).\n4. **Delegate identity** \u2014 The parent's delegation constraints must allow\n   delegation to the specific child agent (or to any agent).\n5. **TTL reduction** \u2014 The child's TTL is computed as the parent's remaining\n   TTL minus `min_ttl_reduction` (default: 60 seconds). If the parent's\n   remaining TTL is too short, delegation is denied.\n\nOn success, returns a new **unsigned** [`AgentCapabilityToken`] for the child\nagent. The caller is responsible for signing the token via the Arsenal\ncrypto layer.\n\n# Arguments\n\n* `request` - The delegation request.\n\n# Returns\n\nA new unsigned `AgentCapabilityToken` for the child agent.\n\n# Errors\n\n- [`ForgeAuthError::TokenExpired`] \u2014 parent ACT has expired.\n- [`ForgeAuthError::InvalidToken`] \u2014 parent ACT is structurally invalid.\n- [`ForgeAuthError::CapabilityEscalation`] \u2014 child requests scope not in parent.\n- [`ForgeAuthError::DelegationDenied`] \u2014 delegation constraints prevent delegation.\n\n# ANVIL Spec \u00a711.3\n\n# Examples\n\n```no_run\n# use arsenal_core::identity::AgentId;\n# use arsenal_core::scope::{Scope, ScopeSet};\n# use arsenal_core::token::AgentCapabilityToken;\nuse forge_auth::delegation::{DelegationRequest, delegate_capabilities};\n\n# fn example(parent_act: &AgentCapabilityToken) -> forge_auth::error::ForgeAuthResult<()> {\nlet mut child_scopes = ScopeSet::new();\n// Request a subset of parent's scopes\n# Ok(())\n# }\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-auth/src/error.rs",
          "sha256": "8b29405122d0fe1f244f03058f6f25a16ad4af73a9396cf99a3bf36754b758fa",
          "artifactSha256": "e0005f8c6d31ead412f4c5e57256de85c850c4698c1ae5a262a9ae54e8e2d54c",
          "url": "/reference/source/forge-rs/crates/forge-auth/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeAuthResult",
              "line": 15,
              "signature": "pub type ForgeAuthResult<T> = Result<T, ForgeAuthError>;",
              "documentation": "Result type alias for `forge-auth` operations."
            },
            {
              "name": "::ForgeAuthError",
              "line": 31,
              "signature": "#[derive(Debug, thiserror::Error)]\npub enum ForgeAuthError {\n    /// The Arsenal ACT has expired and is no longer valid.\n    ///\n    /// Agents must obtain a fresh token before retrying the operation.\n    ///\n    /// # ANVIL Spec \u00a78.7.1\n    #[error(\n        \"ACT '{token_id}' for agent '{agent_did}' expired at {expired_at} \u2014 obtain a fresh token\"\n    )]\n    TokenExpired {\n        /// The unique identifier of the expired token.\n        token_id: String,\n        /// The DID of the agent that presented the token.\n        agent_did: String,\n        /// The timestamp at which the token expired (ISO 8601).\n        expired_at: String,\n    },\n\n    /// The agent's ACT does not grant the required scope for the operation.\n    ///\n    /// The agent must obtain a token with the missing capability, or the\n    /// operation must be re-scoped to match the agent's granted permissions.\n    ///\n    /// # ANVIL Spec \u00a78.7.2\n    #[error(\n        \"agent '{agent_did}' lacks required scope '{required_scope}' \u2014 available scopes: {available_scopes:?}\"\n    )]\n    InsufficientScope {\n        /// The DID of the agent whose token was checked.\n        agent_did: String,\n        /// The scope string that was required but not granted.\n        required_scope: String,\n        /// The scopes that the agent's ACT actually grants.\n        available_scopes: Vec<String>,\n    },\n\n    /// A sub-agent delegation attempted to grant capabilities exceeding the parent's scope.\n    ///\n    /// Child agent capabilities must be a strict subset of the parent's. This is\n    /// a security invariant that prevents privilege escalation via delegation.\n    ///\n    /// # ANVIL Spec \u00a711.3.1\n    #[error(\n        \"capability escalation denied: child '{child_did}' requested scope '{requested}' but parent '{parent_did}' only grants {available:?}\"\n    )]\n    CapabilityEscalation {\n        /// The DID of the parent agent whose ACT was being delegated.\n        parent_did: String,\n        /// The DID of the child agent that would receive the delegation.\n        child_did: String,\n        /// The scope string that was requested but exceeds the parent's grant.\n        requested: String,\n        /// The scopes available in the parent's ACT.\n        available: Vec<String>,\n    },\n\n    /// Delegation was denied due to constraint violations in the parent's ACT.\n    ///\n    /// This covers cases where the parent's token does not permit delegation at all,\n    /// or the target agent is not in the allowed delegates list, or the delegation\n    /// depth has been exceeded.\n    ///\n    /// # ANVIL Spec \u00a711.3.2\n    #[error(\"delegation from parent '{parent_did}' to child '{child_did}' denied: {reason}\")]\n    DelegationDenied {\n        /// The DID of the parent agent attempting to delegate.\n        parent_did: String,\n        /// The DID of the intended child agent.\n        child_did: String,\n        /// Human-readable reason for the denial.\n        reason: String,\n    },\n\n    /// The ACT is structurally invalid or malformed.\n    ///\n    /// This indicates the token could not be validated even before checking\n    /// scopes or time validity. The token may be corrupted, incorrectly\n    /// constructed, or tampered with.\n    ///\n    /// # ANVIL Spec \u00a78.7.3\n    #[error(\"invalid Arsenal ACT: {reason}\")]\n    InvalidToken {\n        /// Human-readable explanation of why the token is invalid.\n        reason: String,\n    },\n\n    /// An error propagated from the underlying Arsenal SDK.\n    ///\n    /// This wraps errors from `arsenal-core` operations that do not map\n    /// cleanly to a Forge-specific authorization error. Boxed to keep\n    /// the overall enum size small.\n    #[error(\"arsenal error: {0}\")]\n    Arsenal(Box<ArsenalError>),\n\n    /// A proxy request was denied due to insufficient proxy scopes.\n    #[error(\n        \"proxy access denied for variable '{variable}' \u2014 agent '{agent_did}' lacks proxy scope\"\n    )]\n    ProxyDenied {\n        /// The DID of the agent.\n        agent_did: String,\n        /// The variable name that was denied.\n        variable: String,\n    },\n\n    /// A proxy request requires consent that has not been granted.\n    #[error(\"consent required for agent '{agent_did}' to access variable '{variable}'\")]\n    ConsentRequired {\n        /// The DID of the agent.\n        agent_did: String,\n        /// The variable name requiring consent.\n        variable: String,\n    },\n\n    /// A fingerprint hash chain mismatch was detected.\n    #[error(\"fingerprint mismatch for agent '{agent_did}' \u2014 possible key compromise\")]\n    FingerprintMismatch {\n        /// The DID of the agent with the mismatched fingerprint.\n        agent_did: String,\n    },\n\n    /// An identity operation failed during an auth workflow.\n    ///\n    /// This wraps errors from `forge-identity` operations (derivation, lineage)\n    /// that occur during identity-aware auth flows like sub-agent creation.\n    ///\n    /// # ANVIL Spec \u00a711.1\n    #[error(\"identity error: {reason}\")]\n    IdentityError {\n        /// Human-readable description of the identity failure.\n        reason: String,\n    },\n}",
              "documentation": "Errors that can occur during Forge authorization operations.\n\nEach variant carries enough context for operators to diagnose the issue\nwithout access to internal state. Error messages never include private keys\nor raw token bytes.\n\n# ANVIL Spec Reference\n\n- `TokenExpired` \u2014 ANVIL Spec \u00a78.7.1: ACT time validity checks\n- `InsufficientScope` \u2014 ANVIL Spec \u00a78.7.2: scope matching on tool invocation\n- `CapabilityEscalation` \u2014 ANVIL Spec \u00a711.3.1: delegation scope narrowing enforcement\n- `DelegationDenied` \u2014 ANVIL Spec \u00a711.3.2: delegation constraint violations\n- `InvalidToken` \u2014 ANVIL Spec \u00a78.7.3: structural validation of ACTs"
            },
            {
              "name": "::ForgeAuthError::is_expired",
              "line": 174,
              "signature": "#[must_use]\npub fn is_expired(&self) -> bool;",
              "documentation": "Returns `true` if the error is a token expiration."
            },
            {
              "name": "::ForgeAuthError::is_insufficient_scope",
              "line": 180,
              "signature": "#[must_use]\npub fn is_insufficient_scope(&self) -> bool;",
              "documentation": "Returns `true` if the error is an insufficient scope."
            },
            {
              "name": "::ForgeAuthError::is_capability_escalation",
              "line": 186,
              "signature": "#[must_use]\npub fn is_capability_escalation(&self) -> bool;",
              "documentation": "Returns `true` if the error is a capability escalation."
            },
            {
              "name": "::ForgeAuthError::is_delegation_denied",
              "line": 192,
              "signature": "#[must_use]\npub fn is_delegation_denied(&self) -> bool;",
              "documentation": "Returns `true` if the error is a delegation denial."
            },
            {
              "name": "::ForgeAuthError::is_invalid_token",
              "line": 198,
              "signature": "#[must_use]\npub fn is_invalid_token(&self) -> bool;",
              "documentation": "Returns `true` if the error indicates the token itself is malformed."
            },
            {
              "name": "::ForgeAuthError::is_proxy_denied",
              "line": 204,
              "signature": "#[must_use]\npub fn is_proxy_denied(&self) -> bool;",
              "documentation": "Returns `true` if the error is a proxy denial."
            },
            {
              "name": "::ForgeAuthError::is_consent_required",
              "line": 210,
              "signature": "#[must_use]\npub fn is_consent_required(&self) -> bool;",
              "documentation": "Returns `true` if the error requires consent."
            },
            {
              "name": "::ForgeAuthError::is_fingerprint_mismatch",
              "line": 216,
              "signature": "#[must_use]\npub fn is_fingerprint_mismatch(&self) -> bool;",
              "documentation": "Returns `true` if the error is a fingerprint mismatch."
            },
            {
              "name": "::ForgeAuthError::is_identity_error",
              "line": 222,
              "signature": "#[must_use]\npub fn is_identity_error(&self) -> bool;",
              "documentation": "Returns `true` if the error is an identity operation failure."
            },
            {
              "name": "::ForgeAuthError::error_code",
              "line": 236,
              "signature": "#[must_use]\npub fn error_code(&self) -> &'static str;",
              "documentation": "Returns a short error code string suitable for telemetry and logging.\n\n# Returns\n\nA static string identifying the error category."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-auth/src/lib.rs",
          "sha256": "17773ed57c1688f8136da91cfe9d1c02f6182e6121dafcb3e914acfd9e2bbd4e",
          "artifactSha256": "82d431300eef4b940babec98d60650923d7fd4410209878c8855b268b6eb94cd",
          "url": "/reference/source/forge-rs/crates/forge-auth/src/lib.rs.txt",
          "declarations": [
            {
              "name": "auth_context",
              "line": 98,
              "signature": "pub mod auth_context;",
              "documentation": "# forge-auth\n\nArsenal capability token integration for Forge agents.\n\nThis crate bridges the Forge agent runtime with the Arsenal authorization\nframework, providing:\n\n- **ACT verification** \u2014 Validate token structure and time validity\n- **Tool authorization** \u2014 Enforce three-tier tool authorization per ANVIL \u00a78.7\n- **Capability delegation** \u2014 Safely narrow scopes for sub-agents per ANVIL \u00a711.3\n- **Scope extraction** \u2014 Read granted capabilities from tokens\n\n# ANVIL Spec Reference\n\nThis crate implements requirements from the following ANVIL specification sections:\n- \u00a78.7 \u2014 Tool Authorization Gate (tool tier checks, scope matching)\n- \u00a711.3 \u2014 Capability Delegation (scope narrowing, escalation prevention)\n\n# Security Invariants\n\n1. **No capability escalation**: Child scopes are always a subset of parent scopes.\n2. **No `unsafe` code**: This crate uses `#![forbid(unsafe_code)]` at the workspace level.\n3. **No panicking**: All fallible operations return `Result<T, ForgeAuthError>`.\n4. **Actionable errors**: Every error includes agent DIDs, scope names, and reasons.\n\n# Architecture\n\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                     forge-auth                       \u2502\n\u2502                                                      \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\n\u2502  \u2502 capability  \u2502  \u2502  tool_auth   \u2502  \u2502  delegation   \u2502  \u2502\n\u2502  \u2502             \u2502  \u2502              \u2502  \u2502               \u2502  \u2502\n\u2502  \u2502 verify_act  \u2502  \u2502 authorize_   \u2502  \u2502 delegate_     \u2502  \u2502\n\u2502  \u2502 extract_    \u2502  \u2502 tool_        \u2502  \u2502 capabilities  \u2502  \u2502\n\u2502  \u2502 scopes      \u2502  \u2502 invocation   \u2502  \u2502               \u2502  \u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\n\u2502         \u2502               \u2502                  \u2502           \u2502\n\u2502         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518           \u2502\n\u2502                         \u2502                              \u2502\n\u2502                \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                     \u2502\n\u2502                \u2502  arsenal-core    \u2502                     \u2502\n\u2502                \u2502  (ACT, Scope,    \u2502                     \u2502\n\u2502                \u2502   Delegation)    \u2502                     \u2502\n\u2502                \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n# Examples\n\n## Tool Authorization (ANVIL \u00a78.7)\n\n```no_run\nuse forge_auth::prelude::*;\nuse forge_core::tool::ToolTier;\n# use arsenal_core::token::AgentCapabilityToken;\n\n# fn example(act: &AgentCapabilityToken) -> ForgeAuthResult<()> {\nlet request = ToolAuthorizationRequest {\n    agent_did: \"did:oas:l1fe:agent:worker\".to_string(),\n    tool_name: \"web_search\".to_string(),\n    tool_tier: ToolTier::External,\n    act: Some(act),\n};\nlet decision = authorize_tool_invocation(&request)?;\nif decision.is_allowed() {\n    println!(\"Tool authorized\");\n}\n# Ok(())\n# }\n```\n\n## Capability Delegation (ANVIL \u00a711.3)\n\n```no_run\nuse forge_auth::prelude::*;\n# use arsenal_core::identity::AgentId;\n# use arsenal_core::scope::ScopeSet;\n# use arsenal_core::token::AgentCapabilityToken;\n\n# fn example(parent_act: &AgentCapabilityToken) -> ForgeAuthResult<()> {\nlet request = DelegationRequest {\n    parent_act,\n    parent_did: \"did:oas:l1fe:agent:parent\".to_string(),\n    child_agent_id: AgentId::generate(),\n    child_did: \"did:oas:l1fe:agent:child\".to_string(),\n    requested_scopes: ScopeSet::new(),\n};\nlet child_act = delegate_capabilities(&request)?;\n# Ok(())\n# }\n```"
            },
            {
              "name": "capability",
              "line": 99,
              "signature": "pub mod capability;",
              "documentation": ""
            },
            {
              "name": "delegation",
              "line": 100,
              "signature": "pub mod delegation;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 101,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "local_capability",
              "line": 102,
              "signature": "pub mod local_capability;",
              "documentation": ""
            },
            {
              "name": "tool_auth",
              "line": 103,
              "signature": "pub mod tool_auth;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 108,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types and functions.\n\nImport `forge_auth::prelude::*` for convenient access to the primary API."
            },
            {
              "name": "pub use crate::auth_context::AuthContext;",
              "line": 109,
              "signature": "pub use crate::auth_context::AuthContext;",
              "documentation": ""
            },
            {
              "name": "pub use crate::capability::{\n        act_allows_proxy_variable, act_allows_scope, extract_scopes, verify_act,\n    };",
              "line": 110,
              "signature": "pub use crate::capability::{\n        act_allows_proxy_variable, act_allows_scope, extract_scopes, verify_act,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::delegation::{delegate_capabilities, DelegationRequest};",
              "line": 113,
              "signature": "pub use crate::delegation::{delegate_capabilities, DelegationRequest};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{ForgeAuthError, ForgeAuthResult};",
              "line": 114,
              "signature": "pub use crate::error::{ForgeAuthError, ForgeAuthResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::tool_auth::{\n        authorize_proxy_tool_invocation, authorize_tool_invocation, ToolAuthorizationDecision,\n        ToolAuthorizationRequest,\n    };",
              "line": 115,
              "signature": "pub use crate::tool_auth::{\n        authorize_proxy_tool_invocation, authorize_tool_invocation, ToolAuthorizationDecision,\n        ToolAuthorizationRequest,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-auth/src/local_capability.rs",
          "sha256": "91837cd3e9b282ae469d3a4a98576bc574405a8717cf4585f234a32fc7468520",
          "artifactSha256": "24b60414530b49975c67f469b73067b38fc2824d6ab64b7337551c5a7b8b90d1",
          "url": "/reference/source/forge-rs/crates/forge-auth/src/local_capability.rs.txt",
          "declarations": [
            {
              "name": "::DEV_ISSUER",
              "line": 34,
              "signature": "pub const DEV_ISSUER: &str;",
              "documentation": "The issuer string for all local dev capability tokens.\n\nThis string is explicitly rejected by all production Arsenal validators."
            },
            {
              "name": "::DEV_AUDIENCE",
              "line": 39,
              "signature": "pub const DEV_AUDIENCE: &str;",
              "documentation": "The audience string for all local dev capability tokens.\n\nThis string is explicitly rejected by all production Arsenal validators."
            },
            {
              "name": "::DEV_TOKEN_TTL_SECONDS",
              "line": 42,
              "signature": "pub const DEV_TOKEN_TTL_SECONDS: i64;",
              "documentation": "The default TTL for dev capability tokens: 24 hours (86400 seconds)."
            },
            {
              "name": "::LocalCapabilityFactory",
              "line": 60,
              "signature": "#[derive(Debug, Clone)]\npub struct LocalCapabilityFactory {\n\n}",
              "documentation": "A local-scoped capability token factory.\n\nProduces Arsenal-compatible `AgentCapabilityToken` instances that grant\nall scopes. These tokens are structurally identical to production ACTs\nbut use the `forge-dev-issuer` issuer and `forge-dev-runtime` audience\nstrings, which production validators reject.\n\n# Examples\n\n```no_run\nuse forge_auth::local_capability::LocalCapabilityFactory;\n\nlet factory = LocalCapabilityFactory::new(\"forge-dev-org:local\");\nlet act = factory.create_dev_token(\"did:forge-dev:a1b2c3d4e5f6a7b8:agent:bot\");\n```"
            },
            {
              "name": "::LocalCapabilityFactory::new",
              "line": 81,
              "signature": "pub fn new(org_id: &str) -> Self;",
              "documentation": "Creates a new factory with a tenant ID derived from the org ID.\n\n# Arguments\n\n* `org_id` - The local org identifier (e.g., `\"forge-dev-org:local\"`).\n\n# Examples\n\n```no_run\nuse forge_auth::local_capability::LocalCapabilityFactory;\n\nlet factory = LocalCapabilityFactory::new(\"forge-dev-org:local\");\n```"
            },
            {
              "name": "::LocalCapabilityFactory::with_ttl",
              "line": 99,
              "signature": "pub fn with_ttl(org_id: &str, ttl_seconds: i64) -> Self;",
              "documentation": "Creates a new factory with a custom TTL.\n\n# Arguments\n\n* `org_id` - The local org identifier.\n* `ttl_seconds` - The TTL in seconds for generated tokens."
            },
            {
              "name": "::LocalCapabilityFactory::create_dev_token",
              "line": 131,
              "signature": "pub fn create_dev_token(&self, agent_did: &str) -> AgentCapabilityToken;",
              "documentation": "Creates a dev-mode capability token granting all scopes.\n\nThe token is structurally identical to a production Arsenal ACT but\nuses dev-mode issuer and audience strings that production validators\nreject.\n\n# Arguments\n\n* `agent_did` - The local dev agent's DID (e.g., `\"did:forge-dev:...:agent:bot\"`).\n\n# Returns\n\nA valid `AgentCapabilityToken` with wildcard scopes (`*:*:*`).\n\n# Examples\n\n```no_run\nuse forge_auth::local_capability::LocalCapabilityFactory;\nuse forge_auth::capability::verify_act;\n\nlet factory = LocalCapabilityFactory::new(\"forge-dev-org:local\");\nlet act = factory.create_dev_token(\"did:forge-dev:a1b2c3d4e5f6a7b8:agent:bot\");\n\n// The token is structurally valid\nassert!(verify_act(&act).is_ok());\n```"
            },
            {
              "name": "::LocalCapabilityFactory::create_scoped_dev_token",
              "line": 216,
              "signature": "pub fn create_scoped_dev_token(\n        &self,\n        agent_did: &str,\n        scope_strs: &[&str],\n    ) -> ForgeAuthResult<AgentCapabilityToken>;",
              "documentation": "Creates a dev-mode capability token with specific scopes.\n\nThis allows developers to test authorization failures by narrowing\nthe scopes granted to an agent.\n\n# Arguments\n\n* `agent_did` - The local dev agent's DID.\n* `scope_strs` - The scope strings to grant (e.g., `[\"forge:tool.clock:execute\"]`).\n\n# Returns\n\nA valid `AgentCapabilityToken` with the specified scopes.\n\n# Errors\n\nReturns [`ForgeAuthError::InvalidToken`] if any scope string is malformed.\n\n# Examples\n\n```no_run\nuse forge_auth::local_capability::LocalCapabilityFactory;\n\nlet factory = LocalCapabilityFactory::new(\"forge-dev-org:local\");\nlet act = factory.create_scoped_dev_token(\n    \"did:forge-dev:a1b2c3d4e5f6a7b8:agent:bot\",\n    &[\"forge:tool.clock:execute\", \"forge:tool.search:execute\"],\n);\n```"
            },
            {
              "name": "::LocalCapabilityFactory::issuer",
              "line": 254,
              "signature": "pub fn issuer(&self) -> &str;",
              "documentation": "Returns the issuer string used by this factory."
            },
            {
              "name": "::LocalCapabilityFactory::audience",
              "line": 259,
              "signature": "pub fn audience(&self) -> &str;",
              "documentation": "Returns the audience string used by this factory."
            },
            {
              "name": "::LocalCapabilityFactory::default_ttl_seconds",
              "line": 264,
              "signature": "pub fn default_ttl_seconds(&self) -> i64;",
              "documentation": "Returns the default TTL in seconds."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-auth/src/tool_auth.rs",
          "sha256": "2f11976a64a484f2d027bb5f49ab9f0f2878a960867ad8f9968e1dcced04fd06",
          "artifactSha256": "a99bbf7d702630b216a3ccf1af73d158b66b71326efce7329c1502434fc07135",
          "url": "/reference/source/forge-rs/crates/forge-auth/src/tool_auth.rs.txt",
          "declarations": [
            {
              "name": "::ToolAuthorizationRequest",
              "line": 57,
              "signature": "#[derive(Debug)]\npub struct ToolAuthorizationRequest<'a> {\n/// The OAS DID of the agent requesting tool invocation.\n\npub agent_did: String,\n/// The name of the tool being invoked.\n\npub tool_name: String,\n/// The tier classification of the tool.\n\npub tool_tier: ToolTier,\n/// The agent's Arsenal ACT, if available.\n\n///\n\n/// When `None`, the request is processed in legacy mode (no ACT checks).\n\npub act: Option<&'a AgentCapabilityToken>\n}",
              "documentation": "A request to authorize a tool invocation.\n\nContains the agent's identity, the tool being invoked, its tier, and\nthe optional Arsenal ACT. When `act` is `None`, the system operates\nin legacy mode (no authorization enforcement).\n\n# ANVIL Spec \u00a78.7"
            },
            {
              "name": "::ToolAuthorizationDecision",
              "line": 79,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum ToolAuthorizationDecision {\n    /// The tool invocation is authorized.\n    ///\n    /// Returned for:\n    /// - Tier 1 (Platform) tools \u2014 always allowed.\n    /// - Tier 3 (Embedded) tools \u2014 always allowed.\n    /// - Tier 2 (Host) tools \u2014 when the ACT grants the required scope.\n    Allowed,\n\n    /// The tool invocation is denied.\n    ///\n    /// Returned for Tier 2 (Host) tools when the ACT does not grant the\n    /// required scope. The `reason` field provides an actionable explanation.\n    Denied {\n        /// Human-readable explanation of why the tool was denied.\n        reason: String,\n    },\n\n    /// No ACT was provided \u2014 operating in legacy mode.\n    ///\n    /// Legacy mode allows tool execution without authorization. This mode\n    /// exists for backward compatibility during the OAS integration migration.\n    /// A `WARN`-level log is emitted when this mode is triggered.\n    ///\n    /// Legacy mode will be removed in a future major version.\n    LegacyMode,\n}",
              "documentation": "The result of a tool authorization check.\n\n# ANVIL Spec \u00a78.7\n\nThe three variants correspond to the three possible outcomes:\n- `Allowed` \u2014 tool invocation proceeds\n- `Denied` \u2014 tool invocation is blocked with a reason\n- `LegacyMode` \u2014 no ACT was provided; tool executes without authorization"
            },
            {
              "name": "::ToolAuthorizationDecision::is_allowed",
              "line": 112,
              "signature": "#[must_use]\npub fn is_allowed(&self) -> bool;",
              "documentation": "Returns `true` if the decision allows the tool invocation.\n\nBoth `Allowed` and `LegacyMode` permit execution."
            },
            {
              "name": "::ToolAuthorizationDecision::is_denied",
              "line": 118,
              "signature": "#[must_use]\npub fn is_denied(&self) -> bool;",
              "documentation": "Returns `true` if the decision denies the tool invocation."
            },
            {
              "name": "::ToolAuthorizationDecision::is_legacy_mode",
              "line": 124,
              "signature": "#[must_use]\npub fn is_legacy_mode(&self) -> bool;",
              "documentation": "Returns `true` if operating in legacy mode (no ACT)."
            },
            {
              "name": "::authorize_tool_invocation",
              "line": 202,
              "signature": "#[instrument(\n    skip(request),\n    fields(\n        agent_did = %request.agent_did,\n        tool = %request.tool_name,\n        tier = %request.tool_tier,\n        has_act = request.act.is_some()\n    )\n)]\npub fn authorize_tool_invocation(\n    request: &ToolAuthorizationRequest<'_>,\n) -> ForgeAuthResult<ToolAuthorizationDecision>;",
              "documentation": "Authorizes a tool invocation per ANVIL Spec \u00a78.7.\n\nThis is the primary authorization gate for all tool invocations in the\nForge runtime. It enforces the three-tier model:\n\n- **Tier 1 (Platform)**: Always returns `Allowed`. Platform tools (clock,\n  crypto, logging, random) are always available to agents.\n- **Tier 2 (Host)**: Requires an Arsenal ACT with a scope that implies\n  `\"forge:tool.<tool_name>:execute\"`. Returns `Denied` if the scope is\n  missing, or `LegacyMode` if no ACT is provided.\n- **Tier 3 (Embedded)**: Always returns `Allowed`. Embedded tools run\n  inside the WASM sandbox and are scoped to the module.\n\n# Arguments\n\n* `request` - The authorization request containing agent DID, tool name,\n  tier, and optional ACT.\n\n# Returns\n\nA [`ToolAuthorizationDecision`] indicating whether the invocation is allowed,\ndenied, or operating in legacy mode.\n\n# Errors\n\n- [`ForgeAuthError::TokenExpired`] \u2014 if the ACT has expired.\n- [`ForgeAuthError::InvalidToken`] \u2014 if the ACT is structurally invalid.\n\n# ANVIL Spec \u00a78.7\n\n> The runtime MUST check the agent's ACT before executing any Host tool.\n> Platform and Embedded tools bypass the ACT check.\n\n# Examples\n\n```no_run\nuse forge_auth::tool_auth::{ToolAuthorizationRequest, authorize_tool_invocation};\nuse forge_core::tool::ToolTier;\n\n// Platform tool \u2014 always allowed, no ACT needed\nlet request = ToolAuthorizationRequest {\n    agent_did: \"did:oas:l1fe:agent:bot\".to_string(),\n    tool_name: \"clock\".to_string(),\n    tool_tier: ToolTier::Platform,\n    act: None,\n};\nlet decision = authorize_tool_invocation(&request).unwrap();\nassert!(decision.is_allowed());\n```"
            },
            {
              "name": "::authorize_proxy_tool_invocation",
              "line": 292,
              "signature": "#[instrument(\n    skip(request, variables),\n    fields(\n        agent_did = %request.agent_did,\n        tool = %request.tool_name,\n        variable_count = variables.len()\n    )\n)]\npub fn authorize_proxy_tool_invocation(\n    request: &ToolAuthorizationRequest<'_>,\n    variables: &[String],\n) -> ForgeAuthResult<ToolAuthorizationDecision>;",
              "documentation": "Checks whether a tool invocation that uses proxy template variables is authorized.\n\nWhen a tool uses `{{VARIABLE_NAME}}` template variables, it requires both the\ntool scope (`forge:tool.<name>:execute`) and proxy scopes for each variable\n(`proxy:<variable>:use` or `proxy:*:*`).\n\n# Arguments\n\n* `request` - The tool authorization request.\n* `variables` - The template variable names used by the tool.\n\n# Returns\n\nA [`ToolAuthorizationDecision`] indicating the authorization result.\n\n# Errors\n\nPropagates errors from ACT verification."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-comm",
      "language": "rust",
      "version": "0.2.0",
      "description": "ANVIL Communication Contract: message transport, envelopes, and protocol negotiation for the Forge SDK",
      "manifest": "forge-rs/crates/forge-comm/Cargo.toml",
      "manifestSha256": "cd3ca5ccc282c08cf418fa0ff0b319790d84631b00c56a1467006a74d79bb3a6",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-comm",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-comm/src/channel.rs",
          "sha256": "0ba0913096938d10023b133f64f8e101a199f6cce3facb7278f86ebd8e962c3b",
          "artifactSha256": "bd0114fe4f17fc55e5408a5186f09bfbe3e93c803880eb238c4a6476586afee5",
          "url": "/reference/source/forge-rs/crates/forge-comm/src/channel.rs.txt",
          "declarations": [
            {
              "name": "::ChannelTransport",
              "line": 68,
              "signature": "pub struct ChannelTransport {\n\n}",
              "documentation": "A bounded async channel transport for in-process agent communication.\n\nCreated in pairs via [`ChannelTransport::new`], each `ChannelTransport`\nholds a sender to the peer's receive queue and a receiver for its own\nincoming messages. This enables bidirectional communication between two\nagents within the same process.\n\n# Capacity\n\nThe channel is bounded with the capacity specified at creation time.\nIf the channel is full, `send` will wait asynchronously until space\nbecomes available (backpressure).\n\n# Lifecycle\n\nWhen one side of the pair is dropped, the other side will receive\n[`CommError::ChannelClosed`] on subsequent `send` or `receive` calls.\n\n# ANVIL Spec Reference\n\n- ANVIL Spec section 10.1 -- Communication Contract\n- ANVIL Spec section 10.3 -- Channel Lifecycle"
            },
            {
              "name": "::ChannelTransport::new",
              "line": 103,
              "signature": "pub fn new(capacity: usize) -> (Self, Self);",
              "documentation": "Creates a new pair of connected `ChannelTransport` instances.\n\nMessages sent on the first transport are received by the second,\nand vice versa. The `capacity` parameter controls the bounded channel\nbuffer size for each direction.\n\n# Arguments\n\n* `capacity` - The maximum number of messages that can be buffered\n  in each direction before backpressure is applied.\n\n# Returns\n\nA tuple `(transport_a, transport_b)` where messages sent by `a`\nare received by `b` and messages sent by `b` are received by `a`.\n\n# Examples\n\n```\nuse forge_comm::channel::ChannelTransport;\n\nlet (a, b) = ChannelTransport::new(32);\n// a.send() -> b.receive()\n// b.send() -> a.receive()\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-comm/src/error.rs",
          "sha256": "bac2ceeffbe163b0698d94fac0621288e25dfd402f5effeeaa2770167befd214",
          "artifactSha256": "13dd3563fe5ac6fd269266c9d129cb335556b47b20f9a766158ab2f2eca8d904",
          "url": "/reference/source/forge-rs/crates/forge-comm/src/error.rs.txt",
          "declarations": [
            {
              "name": "::CommError",
              "line": 34,
              "signature": "#[derive(Debug, Error)]\npub enum CommError {\n    /// Message serialization to JSON failed.\n    ///\n    /// This typically indicates that the message payload contains values that\n    /// cannot be represented in JSON (e.g., NaN floats, circular references).\n    ///\n    /// See ANVIL Spec section 10.2 -- Agent Message Envelope.\n    #[error(\"message serialization failed: {reason}\")]\n    SerializationFailed {\n        /// A human-readable explanation of the serialization failure.\n        reason: String,\n    },\n\n    /// Message deserialization from JSON failed.\n    ///\n    /// This indicates that the received bytes do not constitute a valid\n    /// `AgentMessage` envelope. Common causes include malformed JSON,\n    /// missing required fields, or incompatible schema versions.\n    ///\n    /// See ANVIL Spec section 10.2 -- Agent Message Envelope.\n    #[error(\"message deserialization failed: {reason}\")]\n    DeserializationFailed {\n        /// A human-readable explanation of the deserialization failure.\n        reason: String,\n    },\n\n    /// The underlying transport mechanism failed.\n    ///\n    /// This covers network errors, I/O failures, and other transport-layer\n    /// issues that prevent message delivery.\n    ///\n    /// See ANVIL Spec section 10.1 -- Communication Contract.\n    #[error(\"transport failed: {reason}\")]\n    TransportFailed {\n        /// A human-readable explanation of the transport failure.\n        reason: String,\n    },\n\n    /// The transport is not connected and cannot send or receive messages.\n    ///\n    /// This is returned by transports that require an active connection\n    /// (e.g., `NoopTransport::receive`).\n    ///\n    /// See ANVIL Spec section 10.1 -- Communication Contract.\n    #[error(\"transport is not connected\")]\n    NotConnected,\n\n    /// The communication channel has been closed.\n    ///\n    /// This is returned when the peer endpoint of a channel-based transport\n    /// has been dropped, making further communication impossible.\n    ///\n    /// See ANVIL Spec section 10.3 -- Channel Lifecycle.\n    #[error(\"communication channel is closed\")]\n    ChannelClosed,\n\n    /// The message signature is invalid or cannot be verified.\n    ///\n    /// This indicates that the Ed25519 signature on the message does not\n    /// match the claimed sender's public key, or the signature is malformed.\n    ///\n    /// See ANVIL Spec section 10.4 -- Message Integrity.\n    #[error(\"invalid signature from sender '{sender}'\")]\n    SignatureInvalid {\n        /// The OAS DID of the sender whose signature failed verification.\n        sender: String,\n    },\n\n    /// Protocol negotiation between two agents failed.\n    ///\n    /// The offered protocol versions did not match any version supported\n    /// by the receiving agent.\n    ///\n    /// See ANVIL Spec section 10.5 -- Protocol Negotiation.\n    #[error(\"protocol negotiation failed for '{offered}': {reason}\")]\n    ProtocolNegotiationFailed {\n        /// The protocol identifier that was offered.\n        offered: String,\n        /// A human-readable explanation of why negotiation failed.\n        reason: String,\n    },\n\n    /// The message exceeds the maximum allowed size.\n    ///\n    /// Transports may enforce size limits to prevent resource exhaustion.\n    /// The message must be split or the payload reduced.\n    ///\n    /// See ANVIL Spec section 10.2 -- Agent Message Envelope.\n    #[error(\"message size {size} bytes exceeds maximum {max_size} bytes\")]\n    MessageTooLarge {\n        /// The actual size of the message in bytes.\n        size: usize,\n        /// The maximum allowed size in bytes.\n        max_size: usize,\n    },\n\n    /// A transport operation timed out.\n    ///\n    /// The operation did not complete within the specified duration.\n    /// This may indicate network congestion, an unresponsive peer, or\n    /// a misconfigured timeout value.\n    ///\n    /// See ANVIL Spec section 10.1 -- Communication Contract.\n    #[error(\"transport operation timed out after {duration_ms}ms\")]\n    Timeout {\n        /// The timeout duration in milliseconds.\n        duration_ms: u64,\n    },\n\n    /// Replay protection rejected the received message.\n    ///\n    /// The envelope's nonce was already seen within the validity window, its\n    /// timestamp was outside the configured clock-skew tolerance, or the\n    /// envelope was a legacy wire format and legacy acceptance is disabled.\n    /// The wrapped [`forge_core::replay::ReplayError`] carries the specific\n    /// reason.\n    ///\n    /// See ANVIL Spec section 10.4 -- Message Integrity.\n    #[error(\"replay protection rejected message: {0}\")]\n    ReplayDetected(#[from] forge_core::replay::ReplayError),\n}",
              "documentation": "Error type for communication, transport, and protocol negotiation 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_comm::error::CommError;\n\nlet err = CommError::MessageTooLarge {\n    size: 2_000_000,\n    max_size: 1_048_576,\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"2000000\"));\nassert!(msg.contains(\"1048576\"));\n```"
            },
            {
              "name": "::CommResult",
              "line": 157,
              "signature": "pub type CommResult<T> = Result<T, CommError>;",
              "documentation": "A specialized `Result` type for `forge-comm` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-comm/src/lib.rs",
          "sha256": "c91ef5bff40e1628f7cb3c603b05df2d16d7ea340511445f6ee365194529412e",
          "artifactSha256": "44a68f2aa2bd16e18179a6276b505a522eba7d497543ac756b006c3beab9d583",
          "url": "/reference/source/forge-rs/crates/forge-comm/src/lib.rs.txt",
          "declarations": [
            {
              "name": "channel",
              "line": 96,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod channel;",
              "documentation": "# forge-comm\n\nANVIL Communication Contract: message transport, envelopes, and protocol\nnegotiation for the Forge SDK.\n\nThis crate provides the inter-agent communication infrastructure for\nANVIL-compliant agents. It defines the message envelope format, the\ntransport trait for message delivery, built-in transport implementations,\nand protocol version negotiation.\n\n# Components\n\n- **Message envelope** -- [`AgentMessage`](message::AgentMessage) is the\n  fundamental unit of inter-agent communication, carrying sender/recipient\n  OAS DIDs, protocol identification, a JSON payload, and an optional\n  Ed25519 signature.\n- **Transport trait** -- [`MessageTransport`](transport::MessageTransport)\n  defines how agents send and receive messages. Implementations are\n  pluggable: channels, network sockets, message brokers, etc.\n- **NoopTransport** -- [`NoopTransport`](noop::NoopTransport) is the\n  default transport for standalone agents. It silently drops sent messages\n  and returns `NotConnected` on receive.\n- **ChannelTransport** -- [`ChannelTransport`](channel::ChannelTransport)\n  provides paired, bidirectional in-process communication using bounded\n  async channels.\n- **Protocol negotiation** -- [`negotiate_protocol`](protocol::negotiate_protocol)\n  selects the highest mutually supported protocol version between two agents.\n- **Error types** -- [`CommError`](error::CommError) covers all failure modes\n  in the communication layer with actionable, context-rich messages.\n\n# ANVIL Spec References\n\n- ANVIL Spec section 10 -- Communication Contract\n- ANVIL Spec section 10.1 -- Transport Model\n- ANVIL Spec section 10.2 -- Agent Message Envelope\n- ANVIL Spec section 10.3 -- Channel Lifecycle\n- ANVIL Spec section 10.4 -- Message Integrity\n- ANVIL Spec section 10.5 -- Protocol Negotiation\n\n# Examples\n\n## Standalone agent (no communication)\n\n```\nuse forge_comm::noop::NoopTransport;\nuse forge_comm::transport::MessageTransport;\n\nlet transport = NoopTransport;\n// Standalone agents use NoopTransport as their default.\n// send() silently drops messages, receive() returns NotConnected.\n```\n\n## In-process agent pair\n\n```\nuse forge_comm::channel::ChannelTransport;\nuse forge_comm::transport::MessageTransport;\nuse forge_comm::message::AgentMessage;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet (alice, bob) = ChannelTransport::new(16);\n\nlet msg = AgentMessage::new(\n    \"did:oas:l1fe:agent:alice\",\n    \"did:oas:l1fe:agent:bob\",\n    \"anvil.task.v1\",\n    \"request\",\n    serde_json::json!({\"task\": \"summarize\"}),\n);\nalice.send(msg).await?;\n\nlet received = bob.receive().await?;\nassert_eq!(received.sender, \"did:oas:l1fe:agent:alice\");\n# Ok(())\n# }\n```\n\n## Protocol negotiation\n\n```\nuse forge_comm::protocol::{ProtocolOffer, negotiate_protocol};\n\nlet offer = ProtocolOffer {\n    protocol: \"anvil.task\".to_string(),\n    versions: vec![\"v1\".to_string(), \"v2\".to_string()],\n    extensions: vec![\"streaming\".to_string()],\n};\n\nlet accept = negotiate_protocol(&offer, &[\"v1\", \"v2\", \"v3\"]).unwrap();\nassert_eq!(accept.version, \"v2\");\n```"
            },
            {
              "name": "error",
              "line": 97,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "message",
              "line": 98,
              "signature": "pub mod message;",
              "documentation": ""
            },
            {
              "name": "noop",
              "line": 99,
              "signature": "pub mod noop;",
              "documentation": ""
            },
            {
              "name": "protocol",
              "line": 100,
              "signature": "pub mod protocol;",
              "documentation": ""
            },
            {
              "name": "transport",
              "line": 101,
              "signature": "pub mod transport;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 104,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::channel::ChannelTransport;",
              "line": 106,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::channel::ChannelTransport;",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{CommError, CommResult};",
              "line": 107,
              "signature": "pub use crate::error::{CommError, CommResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::message::AgentMessage;",
              "line": 108,
              "signature": "pub use crate::message::AgentMessage;",
              "documentation": ""
            },
            {
              "name": "pub use crate::noop::NoopTransport;",
              "line": 109,
              "signature": "pub use crate::noop::NoopTransport;",
              "documentation": ""
            },
            {
              "name": "pub use crate::protocol::{negotiate_protocol, ProtocolAccept, ProtocolOffer};",
              "line": 110,
              "signature": "pub use crate::protocol::{negotiate_protocol, ProtocolAccept, ProtocolOffer};",
              "documentation": ""
            },
            {
              "name": "pub use crate::transport::MessageTransport;",
              "line": 111,
              "signature": "pub use crate::transport::MessageTransport;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-comm/src/message.rs",
          "sha256": "a42919cfd41b1182096aa4c9950d6190390224837d9bb2b7de0b5172d2eb3668",
          "artifactSha256": "3659bbd79182ce7def0fd03645622797530b1e4c5f6fde8ed344e3d799c4bbe4",
          "url": "/reference/source/forge-rs/crates/forge-comm/src/message.rs.txt",
          "declarations": [
            {
              "name": "::NONCE_LEN",
              "line": 49,
              "signature": "pub const NONCE_LEN: usize;",
              "documentation": "Length in bytes of the replay-protection nonce."
            },
            {
              "name": "::AgentMessage",
              "line": 93,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]\npub struct AgentMessage {\n/// Unique message identifier (UUID v4).\n\npub id: String,\n/// Correlation ID linking related messages in a conversation.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub correlation_id: Option<String>,\n/// Message ID this is a direct reply to.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub reply_to: Option<String>,\n/// Sender's OAS DID.\n\npub sender: String,\n/// Recipient's OAS DID.\n\npub recipient: String,\n/// Protocol identifier (dot-separated, e.g., `\"anvil.task.v1\"`).\n\npub protocol: String,\n/// Message type within the protocol.\n\npub message_type: String,\n/// JSON payload, opaque to the transport layer.\n\npub payload: serde_json::Value,\n/// Ed25519 signature of the message (hex-encoded).\n\n///\n\n/// Computed over [`AgentMessage::signing_bytes`], which includes the\n\n/// replay-protection `nonce` and `timestamp_ms` fields. Verification\n\n/// uses the sender's public key resolved from their OAS DID document.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub signature: Option<String>,\n/// ISO 8601 creation timestamp (human-readable).\n\n///\n\n/// For replay protection use [`timestamp_ms`](Self::timestamp_ms); this\n\n/// field is retained for logging and audit trails.\n\npub timestamp: String,\n/// Unix-epoch milliseconds at send time. Covered by the signature.\n\n///\n\n/// `None` only for envelopes deserialized from a pre-replay-protection\n\n/// wire format. Present on every message produced by [`AgentMessage::new`].\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub timestamp_ms: Option<i64>,\n/// 16-byte random nonce, hex-encoded. Covered by the signature.\n\n///\n\n/// `None` only for envelopes deserialized from a pre-replay-protection\n\n/// wire format. Present on every message produced by [`AgentMessage::new`].\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub nonce: Option<String>\n}",
              "documentation": "An agent message envelope per ANVIL Spec section 10.2.\n\nThe `AgentMessage` is the fundamental unit of inter-agent communication.\nIt wraps a JSON payload with routing metadata (sender/recipient DIDs),\nprotocol identification, correlation tracking, and an optional\ncryptographic signature for integrity verification.\n\n# Replay Protection\n\n`nonce` and `timestamp_ms` are populated automatically by\n[`AgentMessage::new`]. They are covered by the Ed25519 signature produced\nover [`AgentMessage::signing_bytes`], so an attacker cannot mutate them\nwithout invalidating the signature. Receivers must feed these fields to\na [`forge_core::replay::ReplayValidator`] after verifying the signature.\n\nMessages deserialized from a pre-replay-protection wire format will have\n`nonce` and `timestamp_ms` as `None`; such messages are rejected unless\nthe operator opts into legacy acceptance \u2014 see\n[`AgentMessage::validate_replay`].\n\n# Fields\n\n| Field | Purpose |\n|-------|---------|\n| `id` | Unique message identifier (UUID v4) |\n| `correlation_id` | Links related messages in a conversation |\n| `reply_to` | Message ID this is a direct reply to |\n| `sender` | Sender's OAS DID |\n| `recipient` | Recipient's OAS DID |\n| `protocol` | Protocol identifier (e.g., `\"anvil.task.v1\"`) |\n| `message_type` | Message type within the protocol (e.g., `\"request\"`) |\n| `payload` | Arbitrary JSON payload |\n| `signature` | Optional Ed25519 signature (hex-encoded) |\n| `timestamp` | ISO 8601 creation timestamp |\n| `timestamp_ms` | Unix-epoch milliseconds (replay protection) |\n| `nonce` | 16-byte random nonce, hex-encoded (replay protection) |\n\n# ANVIL Spec Reference\n\n- ANVIL Spec section 10.2 -- Agent Message Envelope\n- ANVIL Spec section 10.4 -- Message Integrity"
            },
            {
              "name": "::AgentMessage::new",
              "line": 167,
              "signature": "pub fn new(\n        sender: impl Into<String>,\n        recipient: impl Into<String>,\n        protocol: impl Into<String>,\n        message_type: impl Into<String>,\n        payload: serde_json::Value,\n    ) -> Self;",
              "documentation": "Creates a new `AgentMessage` with a generated UUID, current timestamp,\nand fresh replay-protection fields (random nonce + `timestamp_ms`).\n\nThe message is created without a signature, correlation ID, or reply-to\nreference. Sign it with the sender's Ed25519 key over the output of\n[`signing_bytes`](Self::signing_bytes), then set [`signature`](Self::signature)\nto the hex-encoded signature bytes.\n\n# Arguments\n\n* `sender` - The sender's OAS DID string.\n* `recipient` - The recipient's OAS DID string.\n* `protocol` - The protocol identifier (e.g., `\"anvil.task.v1\"`).\n* `message_type` - The message type within the protocol.\n* `payload` - The JSON payload body."
            },
            {
              "name": "::AgentMessage::kind",
              "line": 197,
              "signature": "pub fn kind(&self) -> &str;",
              "documentation": "Returns the message type (backward-compatible accessor)."
            },
            {
              "name": "::AgentMessage::is_signed",
              "line": 203,
              "signature": "pub fn is_signed(&self) -> bool;",
              "documentation": "Returns whether this message has an Ed25519 signature."
            },
            {
              "name": "::AgentMessage::has_replay_fields",
              "line": 212,
              "signature": "pub fn has_replay_fields(&self) -> bool;",
              "documentation": "Returns `true` iff both replay-protection fields are populated.\n\nAn envelope lacking either field must not be accepted for replay\nchecking; see [`validate_replay`](Self::validate_replay) for the\nreceiver-side legacy-compat behavior."
            },
            {
              "name": "::AgentMessage::nonce_bytes",
              "line": 217,
              "signature": "pub fn nonce_bytes(&self) -> Option<[u8; NONCE_LEN]>;",
              "documentation": "Returns the nonce as raw bytes, if present and well-formed."
            },
            {
              "name": "::AgentMessage::with_correlation_id",
              "line": 223,
              "signature": "pub fn with_correlation_id(mut self, id: String) -> Self;",
              "documentation": "Sets the correlation ID, consuming and returning `self`."
            },
            {
              "name": "::AgentMessage::with_reply_to",
              "line": 229,
              "signature": "pub fn with_reply_to(mut self, id: String) -> Self;",
              "documentation": "Sets the reply-to message ID, consuming and returning `self`."
            },
            {
              "name": "::AgentMessage::with_replay_fields",
              "line": 239,
              "signature": "pub fn with_replay_fields(mut self, timestamp_ms: i64, nonce: [u8; NONCE_LEN]) -> Self;",
              "documentation": "Overrides the replay-protection fields with caller-supplied values.\n\nIntended for conformance harnesses and test vectors only. Production\ncode should rely on [`AgentMessage::new`] to populate these fields\nautomatically."
            },
            {
              "name": "::AgentMessage::signing_bytes",
              "line": 262,
              "signature": "pub fn signing_bytes(&self) -> Vec<u8>;",
              "documentation": "Canonical byte representation of the envelope, used as the input to\nthe Ed25519 signature.\n\nThe signature must cover every field that affects trust, including\nthe replay-protection `nonce` and `timestamp_ms`. This function\nserializes the envelope via `serde_json` with the `signature` field\nstripped, guaranteeing that verification always recomputes over the\nsame bytes the sender signed.\n\n# Determinism\n\n`serde_json` preserves struct field order as declared in the Rust\nsource, giving us deterministic output without pulling in a full\nJCS implementation. Non-Rust SDKs must match this struct's field\norder when building the signing bytes; the conformance suite enforces\nthis."
            },
            {
              "name": "::AgentMessage::validate_replay",
              "line": 287,
              "signature": "pub fn validate_replay(\n        &self,\n        validator: &forge_core::replay::ReplayValidator,\n    ) -> Result<(), forge_core::replay::ReplayError>;",
              "documentation": "Runs replay-protection checks against `validator`.\n\nCall this on the receiver after the Ed25519 signature has been\nverified. The flow is:\n\n1. If both `timestamp_ms` and `nonce` are present, forward them to\n   [`forge_core::replay::ReplayValidator::validate`].\n2. Otherwise delegate to\n   [`forge_core::replay::ReplayValidator::accept_legacy`], which\n   honors [`ReplayConfig::accept_legacy`] and the\n   `FORGE_ACCEPT_LEGACY_MESSAGES` env flag.\n\n# Errors\n\nReturns the underlying [`forge_core::replay::ReplayError`] on any\nvalidation failure."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-comm/src/noop.rs",
          "sha256": "c130a342ec0876c2763898d588e5a57a283808a80ddfc179caccaa51cb9bf7ac",
          "artifactSha256": "428c43b459513ebd2a130d63bb72b9364a56f17c9468bb465a02b7fa3ee9cd97",
          "url": "/reference/source/forge-rs/crates/forge-comm/src/noop.rs.txt",
          "declarations": [
            {
              "name": "::NoopTransport",
              "line": 74,
              "signature": "#[derive(Debug, Clone, Copy, Default)]\npub struct NoopTransport;",
              "documentation": "A no-op message transport that drops sent messages and never receives.\n\n`NoopTransport` is the default transport for standalone agents that do\nnot participate in inter-agent messaging. It satisfies the\n[`MessageTransport`] trait contract with minimal overhead:\n\n- [`send`](MessageTransport::send) silently succeeds, dropping the message.\n- [`receive`](MessageTransport::receive) immediately returns\n  [`CommError::NotConnected`].\n\n# ANVIL Spec Reference\n\nANVIL Spec section 10.1 -- Communication Contract\n\n# Examples\n\n```\nuse forge_comm::noop::NoopTransport;\nuse forge_comm::transport::MessageTransport;\nuse forge_comm::message::AgentMessage;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet transport = NoopTransport;\n\n// Send always succeeds (message is dropped)\nlet msg = AgentMessage::new(\n    \"did:oas:l1fe:agent:a\",\n    \"did:oas:l1fe:agent:b\",\n    \"anvil.task.v1\",\n    \"request\",\n    serde_json::json!({}),\n);\ntransport.send(msg).await?;\n\n// Receive always fails with NotConnected\nlet result = transport.receive().await;\nassert!(result.is_err());\n# Ok(())\n# }\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-comm/src/protocol.rs",
          "sha256": "f8f3752d04f7740c0270fe78631bbb18270e23bf4630bc2e08e6aa651f9680c4",
          "artifactSha256": "50e514e02820f0e0d6133f3104359a45e59ed6f2c74b4d3c93d5d4732addfbd4",
          "url": "/reference/source/forge-rs/crates/forge-comm/src/protocol.rs.txt",
          "declarations": [
            {
              "name": "::ProtocolOffer",
              "line": 56,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]\npub struct ProtocolOffer {\n/// The protocol identifier (e.g., `\"anvil.task\"`).\n\n///\n\n/// This identifies the protocol family without a version suffix.\n\npub protocol: String,\n/// The versions the offering agent supports, ordered by preference.\n\n///\n\n/// Version strings follow the pattern `\"v1\"`, `\"v2\"`, etc. The first\n\n/// version in the list is the most preferred by the offering agent.\n\npub versions: Vec<String>,\n/// Optional extensions the offering agent supports.\n\n///\n\n/// Extensions are additional capabilities within the protocol, such as\n\n/// `\"streaming\"`, `\"compression\"`, or `\"batching\"`. Both agents must\n\n/// agree on extensions for them to be active.\n\npub extensions: Vec<String>\n}",
              "documentation": "A protocol version offer sent during negotiation.\n\nThe offering agent lists all protocol versions it supports, ordered\nby preference (first is most preferred). Extensions are optional\ncapabilities the offering agent supports within the protocol.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 10.5 -- Protocol Negotiation\n\n# Examples\n\n```\nuse forge_comm::protocol::ProtocolOffer;\n\nlet offer = ProtocolOffer {\n    protocol: \"anvil.task\".to_string(),\n    versions: vec![\"v2\".to_string(), \"v1\".to_string()],\n    extensions: vec![\"compression\".to_string(), \"batching\".to_string()],\n};\nassert_eq!(offer.protocol, \"anvil.task\");\nassert_eq!(offer.versions.len(), 2);\n```"
            },
            {
              "name": "::ProtocolAccept",
              "line": 99,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]\npub struct ProtocolAccept {\n/// The agreed-upon protocol identifier.\n\npub protocol: String,\n/// The agreed-upon version string.\n\npub version: String,\n/// The extensions active for this protocol session.\n\n///\n\n/// This is the full set of extensions from the offer, carried through\n\n/// to the acceptance. In a full implementation, this would be intersected\n\n/// with the accepting agent's supported extensions.\n\npub extensions: Vec<String>\n}",
              "documentation": "An accepted protocol version resulting from successful negotiation.\n\nContains the agreed-upon protocol, version, and the subset of extensions\nthat both agents support.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 10.5 -- Protocol Negotiation\n\n# Examples\n\n```\nuse forge_comm::protocol::ProtocolAccept;\n\nlet accept = ProtocolAccept {\n    protocol: \"anvil.task\".to_string(),\n    version: \"v2\".to_string(),\n    extensions: vec![\"streaming\".to_string()],\n};\nassert_eq!(accept.protocol, \"anvil.task\");\nassert_eq!(accept.version, \"v2\");\n```"
            },
            {
              "name": "::negotiate_protocol",
              "line": 154,
              "signature": "pub fn negotiate_protocol(\n    offered: &ProtocolOffer,\n    supported_versions: &[&str],\n) -> Result<ProtocolAccept, CommError>;",
              "documentation": "Negotiate the best matching protocol version between offered and supported.\n\nExamines the offered versions and selects the highest one (by position\nin `supported_versions`) that appears in both the offer and the supported\nlist. \"Highest\" means the last matching entry in `supported_versions`,\nwhich should be ordered from oldest to newest.\n\nIf no version matches, returns [`CommError::ProtocolNegotiationFailed`].\n\n# Arguments\n\n* `offered` - The protocol offer from the remote agent.\n* `supported_versions` - The versions the local agent supports, ordered\n  from oldest to newest (e.g., `[\"v1\", \"v2\", \"v3\"]`).\n\n# Returns\n\nA [`ProtocolAccept`] with the negotiated version and the offered extensions,\nor a [`CommError::ProtocolNegotiationFailed`] if no version matches.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 10.5 -- Protocol Negotiation\n\n# Examples\n\n```\nuse forge_comm::protocol::{ProtocolOffer, negotiate_protocol};\n\nlet offer = ProtocolOffer {\n    protocol: \"anvil.task\".to_string(),\n    versions: vec![\"v1\".to_string(), \"v2\".to_string()],\n    extensions: vec![],\n};\n\n// We support v2 and v3, so v2 is the match\nlet accept = negotiate_protocol(&offer, &[\"v2\", \"v3\"]).unwrap();\nassert_eq!(accept.version, \"v2\");\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-comm/src/transport.rs",
          "sha256": "308622255b99934d699e2a41452ca5ec329c82b11799e80d76b24e3dab3098bd",
          "artifactSha256": "a99793abd92acb0156fbc186976af53808289bff12a4fa183b5de2cc6faf0fc1",
          "url": "/reference/source/forge-rs/crates/forge-comm/src/transport.rs.txt",
          "declarations": [
            {
              "name": "::MessageTransport",
              "line": 59,
              "signature": "#[async_trait::async_trait]\npub trait MessageTransport: Send + Sync {\n    /// Send a message to the recipient identified in the message envelope.\n    ///\n    /// The transport delivers the message to the recipient's receive queue.\n    /// Delivery semantics (at-most-once, at-least-once, exactly-once) depend\n    /// on the specific transport implementation.\n    ///\n    /// # Arguments\n    ///\n    /// * `message` - The agent message envelope to send.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CommError::TransportFailed`] if the underlying mechanism fails,\n    /// [`CommError::ChannelClosed`] if the peer endpoint has been dropped, or\n    /// [`CommError::MessageTooLarge`] if the message exceeds transport limits.\n    async fn send(&self, message: AgentMessage) -> Result<(), CommError>;\n\n    /// Receive the next available message.\n    ///\n    /// This method waits asynchronously until a message arrives or an error\n    /// occurs. The specific blocking behavior depends on the transport\n    /// implementation: channel transports suspend the current task, while\n    /// network transports may perform I/O polling.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CommError::NotConnected`] if the transport is not active,\n    /// [`CommError::ChannelClosed`] if the peer endpoint has been dropped, or\n    /// [`CommError::TransportFailed`] for other transport-level failures.\n    async fn receive(&self) -> Result<AgentMessage, CommError>;\n\n    /// Receive the next available message and enforce replay protection.\n    ///\n    /// This is the preferred receive path for any caller that has already\n    /// verified the sender's Ed25519 signature (or is about to, in a\n    /// subsequent step). It delegates to [`receive`](Self::receive) to pull\n    /// the next envelope off the wire, then calls\n    /// [`AgentMessage::validate_replay`](crate::message::AgentMessage::validate_replay)\n    /// with the provided `validator`.\n    ///\n    /// The replay validator enforces two invariants (see\n    /// [`forge_core::replay::ReplayValidator`]):\n    ///\n    /// 1. The envelope's `timestamp_ms` must be within the validator's\n    ///    configured clock-skew window.\n    /// 2. The envelope's `nonce` must not have been seen before, within the\n    ///    validity window.\n    ///\n    /// Legacy envelopes (no `nonce`/`timestamp_ms`) are rejected unless the\n    /// validator has been configured with `accept_legacy = true` or the\n    /// `FORGE_ACCEPT_LEGACY_MESSAGES=true` env flag is honored by the\n    /// caller's [`forge_core::replay::ReplayConfig`].\n    ///\n    /// # Errors\n    ///\n    /// - Any error returned by [`receive`](Self::receive).\n    /// - [`CommError::ReplayDetected`] if replay protection rejects the\n    ///   message.\n    async fn receive_validated(\n        &self,\n        validator: &ReplayValidator,\n    ) -> Result<AgentMessage, CommError> ;\n}",
              "documentation": "The message transport contract for ANVIL-compliant agent communication.\n\nImplementations of this trait provide the mechanism by which agents\nexchange [`AgentMessage`] envelopes. The trait is intentionally minimal:\nsend a message, receive a message. Higher-level concerns (protocol\nnegotiation, message routing, retry logic) are handled by upper layers.\n\n# Thread Safety\n\nAll implementations must be `Send + Sync` to allow shared ownership\nacross async tasks.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 10.1 -- Communication Contract\n\n# Examples\n\n```\nuse forge_comm::transport::MessageTransport;\nuse forge_comm::noop::NoopTransport;\n\nlet transport = NoopTransport;\n// NoopTransport is a valid MessageTransport (compile-time check)\nfn assert_transport(_: &impl MessageTransport) {}\nassert_transport(&transport);\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-collab",
      "language": "rust",
      "version": "0.2.0",
      "description": "ANVIL Collaboration Contract: roles, sessions, task delegation, shared context, and interrupts for the Forge SDK",
      "manifest": "forge-rs/crates/forge-collab/Cargo.toml",
      "manifestSha256": "3b1528e6b976f326d66bd6e964a8de33da673983ba7813cbe9f9103900b18f40",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-collab",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-collab/src/capability.rs",
          "sha256": "881a760efca13e792b460d367b6998094b14144f7a45416ee888b57b2653aba1",
          "artifactSha256": "19b28863af4b912fb7df74a699b1f9a1f2e6dead3b75bd40e5380acbf20de1e4",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/capability.rs.txt",
          "declarations": [
            {
              "name": "::CapabilityAdvertiser",
              "line": 58,
              "signature": "pub trait CapabilityAdvertiser: Send + Sync {\n    /// Returns the agent's full capability profile.\n    ///\n    /// The profile includes the agent's supported roles, task types,\n    /// available tools, current load, and maximum concurrency.\n    ///\n    /// # Returns\n    ///\n    /// An [`AgentCapabilityProfile`] describing the agent's capabilities.\n    fn advertise_capabilities(&self) -> AgentCapabilityProfile;\n\n    /// Returns `true` if this agent can handle the given task type.\n    ///\n    /// This is a convenience check that avoids constructing the full\n    /// capability profile for simple task type matching.\n    ///\n    /// # Arguments\n    ///\n    /// * `task_type` - The task type to check (e.g., \"code-review\").\n    ///\n    /// # Returns\n    ///\n    /// `true` if the agent supports this task type.\n    fn can_handle(&self, task_type: &str) -> bool;\n\n    /// Returns the agent's current availability as a factor between 0.0\n    /// (fully loaded) and 1.0 (completely idle).\n    ///\n    /// This is the inverse of `current_load` in the capability profile:\n    /// `availability = 1.0 - current_load`.\n    ///\n    /// # Returns\n    ///\n    /// A value between 0.0 and 1.0 representing available capacity.\n    fn current_availability(&self) -> f64;\n}",
              "documentation": "Capability advertiser contract.\n\nAgents implement this trait to advertise their capabilities to the\ncollaboration framework. The coordinator uses these advertisements\nto match tasks to suitable agents.\n\nSee ANVIL Spec section 11.6 -- Agent Capability Profile.\n\n# Examples\n\n```\nuse forge_collab::capability::CapabilityAdvertiser;\nuse forge_collab::types::{AgentCapabilityProfile, CollaborationRole};\n\nstruct MyAgent;\n\nimpl CapabilityAdvertiser for MyAgent {\n    fn advertise_capabilities(&self) -> AgentCapabilityProfile {\n        AgentCapabilityProfile {\n            agent_did: \"did:oas:agent:my-agent\".to_string(),\n            supported_roles: vec![CollaborationRole::Worker],\n            supported_task_types: vec![\"summarize\".to_string(), \"translate\".to_string()],\n            available_tools: vec![\"read_file\".to_string()],\n            current_load: 0.2,\n            max_concurrent_tasks: 5,\n        }\n    }\n\n    fn can_handle(&self, task_type: &str) -> bool {\n        matches!(task_type, \"summarize\" | \"translate\")\n    }\n\n    fn current_availability(&self) -> f64 {\n        0.8\n    }\n}\n\nlet agent = MyAgent;\nlet profile = agent.advertise_capabilities();\nassert_eq!(profile.supported_task_types.len(), 2);\nassert!(agent.can_handle(\"summarize\"));\nassert!(!agent.can_handle(\"code-review\"));\n```"
            },
            {
              "name": "::match_task_to_agents",
              "line": 163,
              "signature": "pub fn match_task_to_agents(\n    task: &DelegatedTask,\n    agents: &[AgentCapabilityProfile],\n) -> Vec<String>;",
              "documentation": "Matches a task to available agents based on capability profiles.\n\nThe matching algorithm:\n1. Filters agents that support the task's `task_type`.\n2. Filters agents that have all required tools (from `constraints.allowed_tools`,\n   if non-empty -- agents must have at least those tools available).\n3. Filters agents with availability > 0.0 (i.e., not fully loaded).\n4. Sorts by availability descending (most available first).\n\nReturns the DIDs of matching agents in order of suitability.\n\nSee ANVIL Spec section 11.6 -- Task-to-Agent Matching.\n\n# Arguments\n\n* `task` - The task to match.\n* `agents` - The available agent capability profiles.\n\n# Returns\n\nA `Vec` of agent DIDs sorted by suitability (most suitable first).\nReturns an empty `Vec` if no agents match.\n\n# Examples\n\n```\nuse forge_collab::capability::match_task_to_agents;\nuse forge_collab::types::{\n    DelegatedTask, TaskConstraints, TaskPriority, AgentCapabilityProfile, CollaborationRole,\n};\n\nlet task = DelegatedTask {\n    task_id: \"task-001\".to_string(),\n    task_type: \"summarize\".to_string(),\n    description: \"Summarize document\".to_string(),\n    input: serde_json::json!({}),\n    output_schema: None,\n    constraints: TaskConstraints::default(),\n    delegator: \"did:oas:agent:coord\".to_string(),\n    priority: TaskPriority::Normal,\n    deadline: None,\n    context_keys: vec![],\n};\n\nlet agents = vec![\n    AgentCapabilityProfile {\n        agent_did: \"did:oas:agent:worker-1\".to_string(),\n        supported_roles: vec![CollaborationRole::Worker],\n        supported_task_types: vec![\"summarize\".to_string()],\n        available_tools: vec![],\n        current_load: 0.3,\n        max_concurrent_tasks: 5,\n    },\n    AgentCapabilityProfile {\n        agent_did: \"did:oas:agent:worker-2\".to_string(),\n        supported_roles: vec![CollaborationRole::Worker],\n        supported_task_types: vec![\"translate\".to_string()],\n        available_tools: vec![],\n        current_load: 0.1,\n        max_concurrent_tasks: 5,\n    },\n];\n\nlet matches = match_task_to_agents(&task, &agents);\nassert_eq!(matches.len(), 1);\nassert_eq!(matches[0], \"did:oas:agent:worker-1\");\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/context.rs",
          "sha256": "c415243c7aacfc161a79a3fa7e5460d3ed332dd0f29078f67464f4eb23f05229",
          "artifactSha256": "08f0c32606b1837ae44c2fc76be8fb8ae2c7654e1da92b7aa390b7dc74c41b07",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/context.rs.txt",
          "declarations": [
            {
              "name": "::SharedContextContract",
              "line": 62,
              "signature": "#[async_trait::async_trait]\npub trait SharedContextContract: Send + Sync {\n    /// Reads a context entry by key from the specified session.\n    ///\n    /// # Arguments\n    ///\n    /// * `session_id` - The session whose context to read from.\n    /// * `key` - The key of the entry to read.\n    ///\n    /// # Returns\n    ///\n    /// The [`ContextEntry`] for the given key.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::ContextKeyNotFound`] if the key does not\n    /// exist in the session's context.\n    ///\n    /// Returns [`CollabError::SessionNotFound`] if the session does not\n    /// exist.\n    // ANVIL Spec section 11.4 -- Shared Context: context_read\n    async fn context_read(&self, session_id: &str, key: &str) -> Result<ContextEntry, CollabError>;\n\n    /// Writes a context entry to the specified session.\n    ///\n    /// If the key already exists, the entry is updated with the new value\n    /// and its version is incremented.\n    ///\n    /// # Arguments\n    ///\n    /// * `session_id` - The session whose context to write to.\n    /// * `entry` - The context entry to write.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::SessionNotFound`] if the session does not\n    /// exist.\n    // ANVIL Spec section 11.4 -- Shared Context: context_write\n    async fn context_write(&self, session_id: &str, entry: ContextEntry)\n        -> Result<(), CollabError>;\n\n    /// Lists all keys in the specified session's context.\n    ///\n    /// # Arguments\n    ///\n    /// * `session_id` - The session whose context keys to list.\n    ///\n    /// # Returns\n    ///\n    /// A `Vec` of key strings.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::SessionNotFound`] if the session does not\n    /// exist.\n    // ANVIL Spec section 11.4 -- Shared Context: context_keys\n    async fn context_keys(&self, session_id: &str) -> Result<Vec<String>, CollabError>;\n}",
              "documentation": "Shared context contract for collaboration sessions.\n\nImplementations provide read/write access to a session-scoped key-value\nstore. Each entry carries versioning, authorship, and visibility metadata.\n\nSee ANVIL Spec section 11.4 -- Shared Context.\n\n# Examples\n\n```no_run\nuse forge_collab::context::SharedContextContract;\nuse forge_collab::types::ContextEntry;\nuse forge_collab::error::CollabError;\n\nstruct MyContext;\n\n#[async_trait::async_trait]\nimpl SharedContextContract for MyContext {\n    async fn context_read(\n        &self,\n        _session_id: &str,\n        _key: &str,\n    ) -> Result<ContextEntry, CollabError> {\n        Err(CollabError::ContextKeyNotFound {\n            key: \"not-found\".to_string(),\n        })\n    }\n\n    async fn context_write(\n        &self,\n        _session_id: &str,\n        _entry: ContextEntry,\n    ) -> Result<(), CollabError> {\n        Ok(())\n    }\n\n    async fn context_keys(\n        &self,\n        _session_id: &str,\n    ) -> Result<Vec<String>, CollabError> {\n        Ok(vec![])\n    }\n}\n```"
            },
            {
              "name": "::InMemorySharedContext",
              "line": 153,
              "signature": "#[derive(Debug, Clone)]\npub struct InMemorySharedContext {\n\n}",
              "documentation": "In-memory implementation of the shared context store.\n\nStores context entries in a nested `HashMap` keyed by session ID and\nthen by entry key. Suitable for testing and single-process deployments.\n\n# Examples\n\n```\nuse forge_collab::context::InMemorySharedContext;\nuse forge_collab::types::{ContextEntry, ContextVisibility};\n\nlet mut ctx = InMemorySharedContext::new();\nctx.create_session(\"sess-001\");\n\nlet entry = ContextEntry {\n    key: \"result\".to_string(),\n    value: serde_json::json!(42),\n    value_type: \"number\".to_string(),\n    author: \"did:oas:agent:writer\".to_string(),\n    version: 1,\n    timestamp: \"2026-02-19T10:00:00Z\".to_string(),\n    visibility: ContextVisibility::Session,\n};\n\nctx.write_entry(\"sess-001\", entry).unwrap();\n\nlet read = ctx.read_entry(\"sess-001\", \"result\").unwrap();\nassert_eq!(read.key, \"result\");\n\nlet keys = ctx.list_keys(\"sess-001\").unwrap();\nassert_eq!(keys, vec![\"result\"]);\n```"
            },
            {
              "name": "::InMemorySharedContext::new",
              "line": 167,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new empty in-memory shared context store.\n\nNo sessions are pre-created. Use [`create_session`](Self::create_session)\nto register sessions before reading or writing context.\n\n# Returns\n\nA new `InMemorySharedContext` with no sessions."
            },
            {
              "name": "::InMemorySharedContext::create_session",
              "line": 181,
              "signature": "pub fn create_session(&mut self, session_id: &str);",
              "documentation": "Registers a session in the context store.\n\nThis must be called before reading or writing context for a session.\nCalling it for an already-registered session is a no-op.\n\n# Arguments\n\n* `session_id` - The ID of the session to register."
            },
            {
              "name": "::InMemorySharedContext::session_count",
              "line": 186,
              "signature": "pub fn session_count(&self) -> usize;",
              "documentation": "Returns the number of sessions in the context store."
            },
            {
              "name": "::InMemorySharedContext::write_entry",
              "line": 269,
              "signature": "pub fn write_entry(\n        &mut self,\n        session_id: &str,\n        entry: ContextEntry,\n    ) -> Result<(), CollabError>;",
              "documentation": "Writes a context entry directly (requires `&mut self`).\n\nThis is the concrete mutation method. Use this when you have direct\nownership or a mutable reference to the context store.\n\n# Arguments\n\n* `session_id` - The session to write to.\n* `entry` - The context entry to write.\n\n# Errors\n\nReturns [`CollabError::SessionNotFound`] if the session does not exist."
            },
            {
              "name": "::InMemorySharedContext::read_entry",
              "line": 296,
              "signature": "pub fn read_entry(&self, session_id: &str, key: &str) -> Result<ContextEntry, CollabError>;",
              "documentation": "Reads a context entry directly (convenience for non-async contexts).\n\n# Arguments\n\n* `session_id` - The session to read from.\n* `key` - The key to read.\n\n# Errors\n\nReturns [`CollabError::SessionNotFound`] or [`CollabError::ContextKeyNotFound`]."
            },
            {
              "name": "::InMemorySharedContext::list_keys",
              "line": 321,
              "signature": "pub fn list_keys(&self, session_id: &str) -> Result<Vec<String>, CollabError>;",
              "documentation": "Lists all keys for a session directly (convenience for non-async contexts).\n\n# Arguments\n\n* `session_id` - The session to list keys for.\n\n# Errors\n\nReturns [`CollabError::SessionNotFound`] if the session does not exist."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/delegation.rs",
          "sha256": "6002f36da9ca332487a312d0077c8348444d00aae86bd12937616226d8ff05b7",
          "artifactSha256": "ad07563f36f68bd073628dd771bb5b911f779ab5e971e7f8ee9f4012b5ab5435",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/delegation.rs.txt",
          "declarations": [
            {
              "name": "::create_delegated_task",
              "line": 57,
              "signature": "pub fn create_delegated_task(\n    delegator_did: &str,\n    task_type: &str,\n    description: &str,\n    input: serde_json::Value,\n    priority: TaskPriority,\n    constraints: TaskConstraints,\n) -> DelegatedTask;",
              "documentation": "Creates a delegated task with a unique ID and timestamp.\n\nThe task ID is generated as a UUID v4 prefixed with `\"task-\"`. The\ntask carries the delegator's DID, priority, constraints, and an empty\nset of context keys (which can be populated after creation).\n\nSee ANVIL Spec section 11.3 -- Delegated Task.\n\n# Arguments\n\n* `delegator_did` - The OAS DID of the agent delegating the task.\n* `task_type` - The type of task (e.g., \"code-review\", \"summarize\").\n* `description` - A human-readable description of the task.\n* `input` - The input data for the task.\n* `priority` - The task priority level.\n* `constraints` - Execution constraints for the task.\n\n# Returns\n\nA new [`DelegatedTask`] with a unique ID and current timestamp.\n\n# Examples\n\n```\nuse forge_collab::delegation::create_delegated_task;\nuse forge_collab::types::{TaskConstraints, TaskPriority};\n\nlet task = create_delegated_task(\n    \"did:oas:agent:coordinator-1\",\n    \"summarize\",\n    \"Summarize the quarterly report\",\n    serde_json::json!({\"document_id\": \"doc-123\"}),\n    TaskPriority::Normal,\n    TaskConstraints::default(),\n);\n\nassert!(task.task_id.starts_with(\"task-\"));\nassert_eq!(task.task_type, \"summarize\");\nassert_eq!(task.delegator, \"did:oas:agent:coordinator-1\");\nassert_eq!(task.priority, TaskPriority::Normal);\n```"
            },
            {
              "name": "::validate_task_constraints",
              "line": 124,
              "signature": "pub fn validate_task_constraints(constraints: &TaskConstraints) -> Result<(), CollabError>;",
              "documentation": "Validates that a task's constraints are within acceptable bounds.\n\nChecks:\n- `max_steps`, if set, must be greater than 0.\n- `max_tokens`, if set, must be greater than 0.\n- `max_duration_seconds`, if set, must be greater than 0.\n- `required_confidence`, if set, must be between 0.0 and 1.0 inclusive.\n\nSee ANVIL Spec section 11.3 -- Task Constraints.\n\n# Arguments\n\n* `constraints` - The task constraints to validate.\n\n# Returns\n\n`Ok(())` if all constraints are valid.\n\n# Errors\n\nReturns [`CollabError::DelegationFailed`] with a descriptive reason\nif any constraint is invalid.\n\n# Examples\n\n```\nuse forge_collab::delegation::validate_task_constraints;\nuse forge_collab::types::TaskConstraints;\n\n// Default constraints are valid\nlet result = validate_task_constraints(&TaskConstraints::default());\nassert!(result.is_ok());\n\n// Zero max_steps is invalid\nlet bad = TaskConstraints {\n    max_steps: Some(0),\n    ..TaskConstraints::default()\n};\nlet result = validate_task_constraints(&bad);\nassert!(result.is_err());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/error.rs",
          "sha256": "7f866e40eff44ce1155559a9308dcf036219e70d2f6359af9a38445d230c495b",
          "artifactSha256": "b82ed936a1a2b1f44de7bcf7d6b9c6033718cf7ea7f9e0b544384dade0e1a5fa",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/error.rs.txt",
          "declarations": [
            {
              "name": "::CollabError",
              "line": 29,
              "signature": "#[derive(Debug, Error)]\npub enum CollabError {\n    /// The specified collaboration session does not exist.\n    ///\n    /// This is returned when an operation references a session ID that has\n    /// not been created or has already been garbage-collected after reaching\n    /// a terminal state.\n    ///\n    /// See ANVIL Spec section 11.2 -- Collaboration Session.\n    #[error(\"collaboration session '{session_id}' not found (see ANVIL Spec section 11.2)\")]\n    SessionNotFound {\n        /// The session ID that was not found.\n        session_id: String,\n    },\n\n    /// A session with the given ID is already in the Active state.\n    ///\n    /// Duplicate session activation is not permitted. Sessions must be\n    /// dissolved before a new session with the same logical purpose is created.\n    ///\n    /// See ANVIL Spec section 11.2 -- Collaboration Session.\n    #[error(\n        \"collaboration session '{session_id}' is already active (see ANVIL Spec section 11.2)\"\n    )]\n    SessionAlreadyActive {\n        /// The session ID that is already active.\n        session_id: String,\n    },\n\n    /// The session exceeded its configured timeout duration.\n    ///\n    /// Sessions with a `timeout_seconds` value will automatically transition\n    /// to the `TimedOut` terminal state when the deadline passes.\n    ///\n    /// See ANVIL Spec section 11.2 -- Collaboration Session.\n    #[error(\"collaboration session '{session_id}' timed out (see ANVIL Spec section 11.2)\")]\n    SessionTimedOut {\n        /// The session ID that timed out.\n        session_id: String,\n    },\n\n    /// An invalid session state transition was attempted.\n    ///\n    /// The collaboration session state machine defines exactly which transitions\n    /// are valid from each state. This error is returned when a transition\n    /// violates the state machine rules.\n    ///\n    /// See ANVIL Spec section 11.2 -- Session State Machine.\n    #[error(\"invalid session transition from '{from}' to '{to}' (see ANVIL Spec section 11.2)\")]\n    InvalidSessionTransition {\n        /// The current session state.\n        from: String,\n        /// The target state that was attempted.\n        to: String,\n    },\n\n    /// The agent is not a participant in the specified session.\n    ///\n    /// Only agents that have joined a session can perform operations within\n    /// that session (read/write context, receive tasks, send interrupts).\n    ///\n    /// See ANVIL Spec section 11.2 -- Session Participation.\n    #[error(\"agent '{agent_did}' is not a participant in session '{session_id}' (see ANVIL Spec section 11.2)\")]\n    NotAParticipant {\n        /// The agent DID that is not a participant.\n        agent_did: String,\n        /// The session ID the agent attempted to interact with.\n        session_id: String,\n    },\n\n    /// The specified delegated task does not exist.\n    ///\n    /// This is returned when an operation references a task ID that has\n    /// not been created or has been completed and removed.\n    ///\n    /// See ANVIL Spec section 11.3 -- Delegated Task.\n    #[error(\"delegated task '{task_id}' not found (see ANVIL Spec section 11.3)\")]\n    TaskNotFound {\n        /// The task ID that was not found.\n        task_id: String,\n    },\n\n    /// The task is already assigned to another agent.\n    ///\n    /// A delegated task can only be assigned to one worker at a time.\n    /// The existing assignment must be cancelled before re-assignment.\n    ///\n    /// See ANVIL Spec section 11.3 -- Delegated Task.\n    #[error(\"delegated task '{task_id}' is already assigned to '{assignee}' (see ANVIL Spec section 11.3)\")]\n    TaskAlreadyAssigned {\n        /// The task ID that is already assigned.\n        task_id: String,\n        /// The DID of the agent currently assigned to the task.\n        assignee: String,\n    },\n\n    /// The agent's capabilities do not match the task requirements.\n    ///\n    /// Task assignment validates that the target agent supports the required\n    /// task type, tools, and has sufficient capacity.\n    ///\n    /// See ANVIL Spec section 11.6 -- Agent Capability Profile.\n    #[error(\"capability mismatch for task type '{task_type}' and agent '{agent_did}': {reason} (see ANVIL Spec section 11.6)\")]\n    CapabilityMismatch {\n        /// The task type that was not supported.\n        task_type: String,\n        /// The agent DID that lacks the capability.\n        agent_did: String,\n        /// A human-readable explanation of the mismatch.\n        reason: String,\n    },\n\n    /// The specified key was not found in the shared context.\n    ///\n    /// Context reads return this when the key has not been written to\n    /// the session's shared context store.\n    ///\n    /// See ANVIL Spec section 11.4 -- Shared Context.\n    #[error(\"context key '{key}' not found (see ANVIL Spec section 11.4)\")]\n    ContextKeyNotFound {\n        /// The key that was not found.\n        key: String,\n    },\n\n    /// The agent does not have permission to access the specified context key.\n    ///\n    /// Context entries can have visibility restrictions based on session scope,\n    /// role, or specific agent DID.\n    ///\n    /// See ANVIL Spec section 11.4 -- Shared Context.\n    #[error(\"agent '{agent_did}' does not have permission to access context key '{key}' (see ANVIL Spec section 11.4)\")]\n    ContextPermissionDenied {\n        /// The context key the agent attempted to access.\n        key: String,\n        /// The agent DID that was denied access.\n        agent_did: String,\n    },\n\n    /// The interrupt was rejected by the target agent.\n    ///\n    /// Agents may reject interrupts if they are in a state that does not\n    /// permit interruption (e.g., in a critical section) or if the interrupt\n    /// type is not supported.\n    ///\n    /// See ANVIL Spec section 11.5 -- Interrupts.\n    #[error(\"interrupt '{interrupt_id}' rejected: {reason} (see ANVIL Spec section 11.5)\")]\n    InterruptRejected {\n        /// The interrupt ID that was rejected.\n        interrupt_id: String,\n        /// A human-readable explanation of the rejection.\n        reason: String,\n    },\n\n    /// A task delegation operation failed.\n    ///\n    /// This is a general delegation failure covering scenarios such as\n    /// no eligible workers, constraint violations, or internal errors\n    /// during the delegation flow.\n    ///\n    /// See ANVIL Spec section 11.3 -- Delegated Task.\n    #[error(\"delegation failed: {reason} (see ANVIL Spec section 11.3)\")]\n    DelegationFailed {\n        /// A human-readable explanation of the failure.\n        reason: String,\n    },\n\n    /// The agent attempted an action that violates its assigned role.\n    ///\n    /// For example, a Worker attempting to decompose tasks (a Coordinator\n    /// action) or a Peer attempting to assign tasks.\n    ///\n    /// See ANVIL Spec section 11.1 -- Collaboration Roles.\n    #[error(\"role violation: agent '{agent_did}' with role '{role}' cannot perform action '{action}' (see ANVIL Spec section 11.1)\")]\n    RoleViolation {\n        /// The agent DID that violated its role.\n        agent_did: String,\n        /// The role the agent holds.\n        role: String,\n        /// The action the agent attempted.\n        action: String,\n    },\n}",
              "documentation": "Error type for collaboration sessions, delegation, context, and interrupts.\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_collab::error::CollabError;\n\nlet err = CollabError::SessionNotFound {\n    session_id: \"sess-001\".to_string(),\n};\nassert!(err.to_string().contains(\"sess-001\"));\n```"
            },
            {
              "name": "::CollabResult",
              "line": 212,
              "signature": "pub type CollabResult<T> = Result<T, CollabError>;",
              "documentation": "A specialized `Result` type for `forge-collab` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/interrupt.rs",
          "sha256": "8782604eec0d935ab46089000c61664c2c01959fb99703d964a73cc3fb0f767a",
          "artifactSha256": "4f5b63fa98767e8cb409dfc7d6cf387c57b023b635614709ad1a550b1e17893a",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/interrupt.rs.txt",
          "declarations": [
            {
              "name": "::InterruptHandler",
              "line": 59,
              "signature": "#[async_trait::async_trait]\npub trait InterruptHandler: Send + Sync {\n    /// Handles an incoming interrupt.\n    ///\n    /// The handler inspects the interrupt type and priority, then decides\n    /// whether to acknowledge it. The response includes the agent's current\n    /// state if applicable (e.g., for suspendable tasks).\n    ///\n    /// # Arguments\n    ///\n    /// * `interrupt` - The interrupt to handle.\n    ///\n    /// # Returns\n    ///\n    /// An [`InterruptResponse`] indicating acknowledgment and optional state.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::InterruptRejected`] if the interrupt cannot\n    /// be handled (e.g., the agent is in a critical section).\n    // ANVIL Spec section 11.5 -- Interrupt Handler: on_interrupt\n    async fn on_interrupt(&self, interrupt: &Interrupt) -> Result<InterruptResponse, CollabError>;\n\n    /// Called when the agent must be preempted by a higher-priority task.\n    ///\n    /// The agent should save its current state and prepare for the current\n    /// task to be suspended or aborted.\n    ///\n    /// # Arguments\n    ///\n    /// * `interrupt` - The preemption interrupt.\n    ///\n    /// # Returns\n    ///\n    /// An [`InterruptedState`] snapshot of the agent's state at the moment\n    /// of preemption.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::InterruptRejected`] if preemption is not\n    /// possible.\n    // ANVIL Spec section 11.5 -- Interrupt Handler: on_preempt\n    async fn on_preempt(&self, interrupt: &Interrupt) -> Result<InterruptedState, CollabError>;\n}",
              "documentation": "Interrupt handler contract.\n\nAgents implement this trait to handle incoming interrupts. The handler\ndecides whether to acknowledge the interrupt and optionally reports\nits interrupted state for potential resumption.\n\nSee ANVIL Spec section 11.5 -- Interrupts.\n\n# Examples\n\n```no_run\nuse forge_collab::interrupt::InterruptHandler;\nuse forge_collab::types::{Interrupt, InterruptResponse, InterruptedState};\nuse forge_collab::error::CollabError;\n\nstruct MyInterruptHandler;\n\n#[async_trait::async_trait]\nimpl InterruptHandler for MyInterruptHandler {\n    async fn on_interrupt(\n        &self,\n        interrupt: &Interrupt,\n    ) -> Result<InterruptResponse, CollabError> {\n        Ok(InterruptResponse {\n            interrupt_id: interrupt.interrupt_id.clone(),\n            acknowledged: true,\n            current_state: None,\n        })\n    }\n\n    async fn on_preempt(\n        &self,\n        _interrupt: &Interrupt,\n    ) -> Result<InterruptedState, CollabError> {\n        Ok(InterruptedState {\n            task_id: None,\n            step_count: 0,\n            progress_percentage: 0.0,\n            can_resume: false,\n        })\n    }\n}\n```"
            },
            {
              "name": "::create_interrupt",
              "line": 139,
              "signature": "pub fn create_interrupt(\n    interrupt_type: InterruptType,\n    source_did: &str,\n    priority: TaskPriority,\n    payload: serde_json::Value,\n) -> Interrupt;",
              "documentation": "Creates an interrupt with a unique ID and current timestamp.\n\nThe interrupt ID is generated as a UUID v4 prefixed with `\"int-\"`.\n\nSee ANVIL Spec section 11.5 -- Interrupts.\n\n# Arguments\n\n* `interrupt_type` - The type of interrupt.\n* `source_did` - The OAS DID of the agent sending the interrupt.\n* `priority` - The priority of the interrupt.\n* `payload` - Arbitrary payload data for the interrupt.\n\n# Returns\n\nA new [`Interrupt`] with a unique ID and current timestamp.\n\n# Examples\n\n```\nuse forge_collab::interrupt::create_interrupt;\nuse forge_collab::types::{InterruptType, TaskPriority};\n\nlet interrupt = create_interrupt(\n    InterruptType::Suspend,\n    \"did:oas:agent:coordinator-1\",\n    TaskPriority::High,\n    serde_json::json!({\"reason\": \"higher priority work\"}),\n);\n\nassert!(interrupt.interrupt_id.starts_with(\"int-\"));\nassert_eq!(interrupt.interrupt_type, InterruptType::Suspend);\nassert_eq!(interrupt.source, \"did:oas:agent:coordinator-1\");\nassert_eq!(interrupt.priority, TaskPriority::High);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/lib.rs",
          "sha256": "c765309b840a52635cf93c81ea15270eb96a82aba0f77ed94076fd4925090ee9",
          "artifactSha256": "dda93fb227a021af4b3c2d1f056d8cce9c85f29ff3f06232efacf4e8c50c5dd3",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/lib.rs.txt",
          "declarations": [
            {
              "name": "capability",
              "line": 84,
              "signature": "pub mod capability;",
              "documentation": "# forge-collab\n\nANVIL Collaboration Contract: roles, sessions, task delegation, shared\ncontext, and interrupts for the Forge SDK.\n\nThis crate provides the multi-agent collaboration infrastructure for\nANVIL-compliant agents. It implements the Collaboration Contract defined\nin ANVIL Spec section 11, enabling agents to coordinate work through\nstructured sessions, delegated tasks, shared context, and interrupts.\n\n# Components\n\n- **Roles** -- Three collaboration roles (Coordinator, Worker, Peer) with\n  trait contracts defining each role's operations (ANVIL Spec section 11.1).\n- **Sessions** -- Collaboration session lifecycle with a 6-state immutable\n  state machine (Proposed, Active, Completing, Completed, TimedOut,\n  Dissolved) per ANVIL Spec section 11.2.\n- **Delegation** -- Task creation, constraint validation, and assignment\n  helpers per ANVIL Spec section 11.3.\n- **Shared Context** -- Session-scoped key-value store with visibility\n  controls and versioning per ANVIL Spec section 11.4.\n- **Interrupts** -- Preemption, suspension, resumption, and abort\n  mechanisms per ANVIL Spec section 11.5.\n- **Capability** -- Agent capability advertisement and task-to-agent\n  matching per ANVIL Spec section 11.6.\n\n# ANVIL Spec References\n\n- ANVIL Spec section 11 -- Collaboration Contract\n- ANVIL Spec section 11.1 -- Collaboration Roles\n- ANVIL Spec section 11.2 -- Collaboration Session\n- ANVIL Spec section 11.3 -- Delegated Task\n- ANVIL Spec section 11.4 -- Shared Context\n- ANVIL Spec section 11.5 -- Interrupts\n- ANVIL Spec section 11.6 -- Agent Capability Profile\n\n# Architecture\n\n`forge-collab` depends on `forge-core` for shared types and `forge-comm`\nfor message transport. It does NOT depend on `forge-agent` -- the\ncollaboration contract is a peer-level concern, not an agent-level concern.\nAgents integrate collaboration by implementing the role traits and session\ncontract.\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::{SessionState, TaskConstraints, TaskPriority};\nuse forge_collab::delegation::{create_delegated_task, validate_task_constraints};\n\n// Create and advance a session\nlet mut session = SessionManager::new();\nassert_eq!(session.state(), SessionState::Proposed);\n\nsession.transition(SessionState::Active).unwrap();\nassert_eq!(session.state(), SessionState::Active);\n\n// Create a delegated task\nlet task = create_delegated_task(\n    \"did:oas:agent:coordinator-1\",\n    \"code-review\",\n    \"Review the authentication module\",\n    serde_json::json!({\"file\": \"auth.rs\"}),\n    TaskPriority::High,\n    TaskConstraints {\n        max_steps: Some(20),\n        max_tokens: Some(5000),\n        ..TaskConstraints::default()\n    },\n);\n\n// Validate constraints\nvalidate_task_constraints(&task.constraints).unwrap();\n\n// Complete the session\nsession.transition(SessionState::Completing).unwrap();\nsession.transition(SessionState::Completed).unwrap();\nassert!(session.state().is_terminal());\n```"
            },
            {
              "name": "context",
              "line": 85,
              "signature": "pub mod context;",
              "documentation": ""
            },
            {
              "name": "delegation",
              "line": 86,
              "signature": "pub mod delegation;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 87,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "interrupt",
              "line": 88,
              "signature": "pub mod interrupt;",
              "documentation": ""
            },
            {
              "name": "roles",
              "line": 89,
              "signature": "pub mod roles;",
              "documentation": ""
            },
            {
              "name": "session",
              "line": 90,
              "signature": "pub mod session;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 91,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 94,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::capability::{match_task_to_agents, CapabilityAdvertiser};",
              "line": 95,
              "signature": "pub use crate::capability::{match_task_to_agents, CapabilityAdvertiser};",
              "documentation": ""
            },
            {
              "name": "pub use crate::context::{InMemorySharedContext, SharedContextContract};",
              "line": 96,
              "signature": "pub use crate::context::{InMemorySharedContext, SharedContextContract};",
              "documentation": ""
            },
            {
              "name": "pub use crate::delegation::{create_delegated_task, validate_task_constraints};",
              "line": 97,
              "signature": "pub use crate::delegation::{create_delegated_task, validate_task_constraints};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{CollabError, CollabResult};",
              "line": 98,
              "signature": "pub use crate::error::{CollabError, CollabResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::interrupt::{create_interrupt, InterruptHandler};",
              "line": 99,
              "signature": "pub use crate::interrupt::{create_interrupt, InterruptHandler};",
              "documentation": ""
            },
            {
              "name": "pub use crate::roles::{CoordinatorContract, PeerContract, WorkerContract};",
              "line": 100,
              "signature": "pub use crate::roles::{CoordinatorContract, PeerContract, WorkerContract};",
              "documentation": ""
            },
            {
              "name": "pub use crate::session::{SessionContract, SessionManager};",
              "line": 101,
              "signature": "pub use crate::session::{SessionContract, SessionManager};",
              "documentation": ""
            },
            {
              "name": "pub use crate::types::{\n        AgentCapabilityProfile, CollaborationRole, CollaborationSession, ContextEntry,\n        ContextVisibility, DelegatedTask, Interrupt, InterruptResponse, InterruptType,\n        InterruptedState, SessionParticipant, SessionState, SessionTransition, TaskAcknowledgment,\n        TaskConstraints, TaskPriority, TaskProgress, TaskResult, TaskStatus,\n    };",
              "line": 102,
              "signature": "pub use crate::types::{\n        AgentCapabilityProfile, CollaborationRole, CollaborationSession, ContextEntry,\n        ContextVisibility, DelegatedTask, Interrupt, InterruptResponse, InterruptType,\n        InterruptedState, SessionParticipant, SessionState, SessionTransition, TaskAcknowledgment,\n        TaskConstraints, TaskPriority, TaskProgress, TaskResult, TaskStatus,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/roles.rs",
          "sha256": "c85da017b2e37e98b9d006156484e17462fc6c06c127092dbdedb4ea1446a232",
          "artifactSha256": "6e20fc224a7d98ba0c11f039408d3ce77b33ea0db8ab75a98c697d9aeddc1370",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/roles.rs.txt",
          "declarations": [
            {
              "name": "::CoordinatorContract",
              "line": 69,
              "signature": "#[async_trait::async_trait]\npub trait CoordinatorContract: Send + Sync {\n    /// Decomposes a high-level task into smaller sub-tasks.\n    ///\n    /// The coordinator analyzes the input task and produces a list of\n    /// sub-tasks that can be individually assigned to workers. The sub-tasks\n    /// should collectively cover the scope of the original task.\n    ///\n    /// # Arguments\n    ///\n    /// * `task` - The task to decompose.\n    ///\n    /// # Returns\n    ///\n    /// A `Vec` of sub-tasks derived from the original task.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::DelegationFailed`] if the task cannot be\n    /// decomposed (e.g., it is already atomic or invalid).\n    // ANVIL Spec section 11.1 -- Coordinator: decompose_task\n    async fn decompose_task(&self, task: &DelegatedTask)\n        -> Result<Vec<DelegatedTask>, CollabError>;\n\n    /// Assigns a task to a specific worker agent.\n    ///\n    /// The coordinator sends the task to the identified worker and receives\n    /// an acknowledgment indicating acceptance or rejection.\n    ///\n    /// # Arguments\n    ///\n    /// * `task` - The task to assign.\n    /// * `worker_did` - The OAS DID of the target worker.\n    ///\n    /// # Returns\n    ///\n    /// A [`TaskAcknowledgment`] from the worker.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::CapabilityMismatch`] if the worker cannot\n    /// handle the task type, or [`CollabError::DelegationFailed`] if the\n    /// assignment fails for other reasons.\n    // ANVIL Spec section 11.1 -- Coordinator: assign_task\n    async fn assign_task(\n        &self,\n        task: &DelegatedTask,\n        worker_did: &str,\n    ) -> Result<TaskAcknowledgment, CollabError>;\n\n    /// Aggregates results from multiple worker tasks into a single result.\n    ///\n    /// After all sub-tasks have completed, the coordinator merges their\n    /// results into a unified response for the original task.\n    ///\n    /// # Arguments\n    ///\n    /// * `results` - The results from all completed sub-tasks.\n    ///\n    /// # Returns\n    ///\n    /// A single aggregated [`TaskResult`].\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::DelegationFailed`] if the results cannot be\n    /// meaningfully aggregated (e.g., no results, conflicting outputs).\n    // ANVIL Spec section 11.1 -- Coordinator: aggregate_results\n    async fn aggregate_results(&self, results: &[TaskResult]) -> Result<TaskResult, CollabError>;\n\n    /// Handles a failure reported by a worker.\n    ///\n    /// When a worker fails to complete a task, the coordinator decides how\n    /// to recover: reassign the task, mark it as failed, or abort the\n    /// session.\n    ///\n    /// # Arguments\n    ///\n    /// * `task_id` - The ID of the failed task.\n    /// * `worker_did` - The DID of the worker that failed.\n    /// * `error` - A description of the failure.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::DelegationFailed`] if recovery is not possible.\n    // ANVIL Spec section 11.1 -- Coordinator: handle_worker_failure\n    async fn handle_worker_failure(\n        &self,\n        task_id: &str,\n        worker_did: &str,\n        error: &str,\n    ) -> Result<(), CollabError>;\n}",
              "documentation": "Coordinator role contract -- decomposes and assigns tasks, aggregates results.\n\nThe coordinator is responsible for breaking down high-level objectives into\nindividual tasks, assigning them to suitable workers, collecting results,\nand handling worker failures. There is at most one coordinator per\ncollaboration session.\n\nSee ANVIL Spec section 11.1 -- Coordinator Role.\n\n# Examples\n\n```no_run\nuse forge_collab::roles::CoordinatorContract;\nuse forge_collab::types::{DelegatedTask, TaskResult, TaskAcknowledgment};\nuse forge_collab::error::CollabError;\n\nstruct MyCoordinator;\n\n#[async_trait::async_trait]\nimpl CoordinatorContract for MyCoordinator {\n    async fn decompose_task(&self, task: &DelegatedTask) -> Result<Vec<DelegatedTask>, CollabError> {\n        // Split the task into sub-tasks\n        Ok(vec![task.clone()])\n    }\n\n    async fn assign_task(&self, _task: &DelegatedTask, _worker_did: &str) -> Result<TaskAcknowledgment, CollabError> {\n        Ok(TaskAcknowledgment {\n            task_id: \"task-001\".to_string(),\n            accepted: true,\n            rejection_reason: None,\n            estimated_completion_seconds: Some(60),\n        })\n    }\n\n    async fn aggregate_results(&self, results: &[TaskResult]) -> Result<TaskResult, CollabError> {\n        if results.is_empty() {\n            return Err(CollabError::DelegationFailed {\n                reason: \"no results to aggregate\".to_string(),\n            });\n        }\n        Ok(results[0].clone())\n    }\n\n    async fn handle_worker_failure(&self, _task_id: &str, _worker_did: &str, _error: &str) -> Result<(), CollabError> {\n        Ok(())\n    }\n}\n```"
            },
            {
              "name": "::WorkerContract",
              "line": 204,
              "signature": "#[async_trait::async_trait]\npub trait WorkerContract: Send + Sync {\n    /// Called when a task is delegated to this worker.\n    ///\n    /// The worker inspects the task and decides whether to accept or reject\n    /// it based on its capabilities and current load.\n    ///\n    /// # Arguments\n    ///\n    /// * `task` - The delegated task to evaluate.\n    ///\n    /// # Returns\n    ///\n    /// A [`TaskAcknowledgment`] indicating acceptance or rejection.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError`] if the acknowledgment cannot be produced.\n    // ANVIL Spec section 11.1 -- Worker: on_task_delegated\n    async fn on_task_delegated(\n        &self,\n        task: &DelegatedTask,\n    ) -> Result<TaskAcknowledgment, CollabError>;\n\n    /// Reports progress on an in-flight task.\n    ///\n    /// Workers should report progress periodically so the coordinator can\n    /// monitor execution and detect stalls.\n    ///\n    /// # Arguments\n    ///\n    /// * `progress` - The progress report.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::TaskNotFound`] if the task ID in the progress\n    /// report does not match an active task.\n    // ANVIL Spec section 11.1 -- Worker: report_progress\n    async fn report_progress(&self, progress: &TaskProgress) -> Result<(), CollabError>;\n\n    /// Submits the result of a completed task.\n    ///\n    /// Called when the worker has finished executing the task. The result\n    /// includes the output data, status, and optional confidence score.\n    ///\n    /// # Arguments\n    ///\n    /// * `result` - The task result to submit.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::TaskNotFound`] if the task ID in the result\n    /// does not match an active task.\n    // ANVIL Spec section 11.1 -- Worker: submit_result\n    async fn submit_result(&self, result: &TaskResult) -> Result<(), CollabError>;\n\n    /// Called when a task is cancelled by the coordinator.\n    ///\n    /// The worker should clean up any in-progress work for the specified\n    /// task and release resources.\n    ///\n    /// # Arguments\n    ///\n    /// * `task_id` - The ID of the cancelled task.\n    /// * `reason` - A human-readable cancellation reason.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::TaskNotFound`] if the task is not known.\n    // ANVIL Spec section 11.1 -- Worker: on_task_cancelled\n    async fn on_task_cancelled(&self, task_id: &str, reason: &str) -> Result<(), CollabError>;\n}",
              "documentation": "Worker role contract -- executes delegated tasks, reports progress.\n\nWorkers receive tasks from coordinators, execute them within the given\nconstraints, report progress periodically, and submit results upon\ncompletion. Workers can also handle task cancellation gracefully.\n\nSee ANVIL Spec section 11.1 -- Worker Role.\n\n# Examples\n\n```no_run\nuse forge_collab::roles::WorkerContract;\nuse forge_collab::types::{DelegatedTask, TaskAcknowledgment, TaskProgress, TaskResult};\nuse forge_collab::error::CollabError;\n\nstruct MyWorker;\n\n#[async_trait::async_trait]\nimpl WorkerContract for MyWorker {\n    async fn on_task_delegated(&self, task: &DelegatedTask) -> Result<TaskAcknowledgment, CollabError> {\n        Ok(TaskAcknowledgment {\n            task_id: task.task_id.clone(),\n            accepted: true,\n            rejection_reason: None,\n            estimated_completion_seconds: Some(30),\n        })\n    }\n\n    async fn report_progress(&self, _progress: &TaskProgress) -> Result<(), CollabError> {\n        Ok(())\n    }\n\n    async fn submit_result(&self, _result: &TaskResult) -> Result<(), CollabError> {\n        Ok(())\n    }\n\n    async fn on_task_cancelled(&self, _task_id: &str, _reason: &str) -> Result<(), CollabError> {\n        Ok(())\n    }\n}\n```"
            },
            {
              "name": "::PeerContract",
              "line": 308,
              "signature": "#[async_trait::async_trait]\npub trait PeerContract: Send + Sync {\n    /// Submits a proposal for peer consensus.\n    ///\n    /// # Arguments\n    ///\n    /// * `proposal` - The proposal data to submit for voting.\n    ///\n    /// # Returns\n    ///\n    /// A unique proposal ID string.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::DelegationFailed`] if the proposal cannot be\n    /// submitted (e.g., session is not in an active state).\n    // ANVIL Spec section 11.1 -- Peer: propose\n    async fn propose(&self, proposal: &serde_json::Value) -> Result<String, CollabError>;\n\n    /// Votes on an existing proposal.\n    ///\n    /// # Arguments\n    ///\n    /// * `proposal_id` - The ID of the proposal to vote on.\n    /// * `approve` - `true` to approve, `false` to reject.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError::DelegationFailed`] if the proposal is not\n    /// found or voting has closed.\n    // ANVIL Spec section 11.1 -- Peer: vote\n    async fn vote(&self, proposal_id: &str, approve: bool) -> Result<(), CollabError>;\n\n    /// Called when consensus is reached on a proposal.\n    ///\n    /// # Arguments\n    ///\n    /// * `proposal_id` - The ID of the proposal that reached consensus.\n    /// * `result` - The consensus result data.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError`] if the agent cannot act on the consensus.\n    // ANVIL Spec section 11.1 -- Peer: on_consensus\n    async fn on_consensus(\n        &self,\n        proposal_id: &str,\n        result: &serde_json::Value,\n    ) -> Result<(), CollabError>;\n}",
              "documentation": "Peer role contract -- participates in consensus-based collaboration.\n\nIn peer-mode collaboration, all agents have equal standing. Peers propose\nactions, vote on proposals, and act on consensus decisions. There is no\ncoordinator; decisions are made collectively.\n\nSee ANVIL Spec section 11.1 -- Peer Role.\n\n# Examples\n\n```no_run\nuse forge_collab::roles::PeerContract;\nuse forge_collab::error::CollabError;\n\nstruct MyPeer;\n\n#[async_trait::async_trait]\nimpl PeerContract for MyPeer {\n    async fn propose(&self, proposal: &serde_json::Value) -> Result<String, CollabError> {\n        Ok(\"proposal-001\".to_string())\n    }\n\n    async fn vote(&self, _proposal_id: &str, _approve: bool) -> Result<(), CollabError> {\n        Ok(())\n    }\n\n    async fn on_consensus(&self, _proposal_id: &str, _result: &serde_json::Value) -> Result<(), CollabError> {\n        Ok(())\n    }\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/session.rs",
          "sha256": "f65e767a07d3a1a4a3e28c21daefefbdc4ca89b162c4419627de1cf550a13253",
          "artifactSha256": "51e5ec01f98145d2415f258416006405263295ce7ba46d1a3c7829b01988c78c",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/session.rs.txt",
          "declarations": [
            {
              "name": "::SessionContract",
              "line": 85,
              "signature": "#[async_trait::async_trait]\npub trait SessionContract: Send + Sync {\n    /// Called when the agent joins a collaboration session.\n    ///\n    /// # Arguments\n    ///\n    /// * `session` - The session being joined.\n    /// * `role` - The role assigned to this agent in the session.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError`] if the agent cannot join the session.\n    // ANVIL Spec section 11.2 -- Session Lifecycle: on_session_join\n    async fn on_session_join(\n        &self,\n        session: &CollaborationSession,\n        role: CollaborationRole,\n    ) -> Result<(), CollabError>;\n\n    /// Called when the session transitions between states.\n    ///\n    /// # Arguments\n    ///\n    /// * `session_id` - The ID of the session.\n    /// * `from` - The previous state.\n    /// * `to` - The new state.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError`] if the agent cannot handle the transition.\n    // ANVIL Spec section 11.2 -- Session Lifecycle: on_session_transition\n    async fn on_session_transition(\n        &self,\n        session_id: &str,\n        from: SessionState,\n        to: SessionState,\n    ) -> Result<(), CollabError>;\n\n    /// Called when the agent leaves a collaboration session.\n    ///\n    /// # Arguments\n    ///\n    /// * `session_id` - The ID of the session being left.\n    /// * `reason` - A human-readable reason for leaving.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`CollabError`] if cleanup fails.\n    // ANVIL Spec section 11.2 -- Session Lifecycle: on_session_leave\n    async fn on_session_leave(&self, session_id: &str, reason: &str) -> Result<(), CollabError>;\n}",
              "documentation": "Session lifecycle contract.\n\nAgents implement this trait to receive notifications about session\nlifecycle events: joining, state transitions, and leaving.\n\nSee ANVIL Spec section 11.2 -- Session Lifecycle.\n\n# Examples\n\n```no_run\nuse forge_collab::session::SessionContract;\nuse forge_collab::types::{CollaborationRole, CollaborationSession, SessionState};\nuse forge_collab::error::CollabError;\n\nstruct MySessionHandler;\n\n#[async_trait::async_trait]\nimpl SessionContract for MySessionHandler {\n    async fn on_session_join(\n        &self,\n        _session: &CollaborationSession,\n        _role: CollaborationRole,\n    ) -> Result<(), CollabError> {\n        Ok(())\n    }\n\n    async fn on_session_transition(\n        &self,\n        _session_id: &str,\n        _from: SessionState,\n        _to: SessionState,\n    ) -> Result<(), CollabError> {\n        Ok(())\n    }\n\n    async fn on_session_leave(\n        &self,\n        _session_id: &str,\n        _reason: &str,\n    ) -> Result<(), CollabError> {\n        Ok(())\n    }\n}\n```"
            },
            {
              "name": "::SessionManager",
              "line": 179,
              "signature": "#[derive(Debug, Clone)]\npub struct SessionManager {\n\n}",
              "documentation": "Manages the session state machine per ANVIL Spec section 11.2.\n\nThe `SessionManager` enforces the immutable transition table for\ncollaboration sessions. It tracks the current state, validates all\ntransitions, and maintains a complete transition history.\n\nSessions start in the `Proposed` state and progress through `Active`\nand `Completing` to terminal states (`Completed`, `TimedOut`, `Dissolved`).\n\n# Thread Safety\n\n`SessionManager` is not `Sync`. For concurrent access, wrap it in a\n`Mutex` or `RwLock`.\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mut mgr = SessionManager::new();\nassert_eq!(mgr.state(), SessionState::Proposed);\n\n// Happy path: Proposed -> Active -> Completing -> Completed\nmgr.transition(SessionState::Active).unwrap();\nmgr.transition(SessionState::Completing).unwrap();\nmgr.transition(SessionState::Completed).unwrap();\nassert!(mgr.state().is_terminal());\nassert_eq!(mgr.history().len(), 3);\n```\n\nDissolution at any non-terminal state:\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mut mgr = SessionManager::new();\nmgr.transition(SessionState::Active).unwrap();\nmgr.transition(SessionState::Dissolved).unwrap();\nassert!(mgr.state().is_terminal());\n```"
            },
            {
              "name": "::SessionManager::new",
              "line": 206,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new `SessionManager` in the `Proposed` state.\n\nEvery session starts in the `Proposed` state per ANVIL Spec\nsection 11.2.\n\n# Returns\n\nA new `SessionManager` with an empty transition history.\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mgr = SessionManager::new();\nassert_eq!(mgr.state(), SessionState::Proposed);\nassert!(mgr.history().is_empty());\n```"
            },
            {
              "name": "::SessionManager::state",
              "line": 228,
              "signature": "pub fn state(&self) -> SessionState;",
              "documentation": "Returns the current session state.\n\n# Returns\n\nThe current [`SessionState`].\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mgr = SessionManager::new();\nassert_eq!(mgr.state(), SessionState::Proposed);\n```"
            },
            {
              "name": "::SessionManager::transition",
              "line": 272,
              "signature": "pub fn transition(&mut self, target: SessionState) -> Result<SessionTransition, CollabError>;",
              "documentation": "Attempts to transition to the given target state.\n\nValidates the transition against the ANVIL Spec section 11.2\ntransition table. If valid, the state is updated, a\n[`SessionTransition`] is recorded in the history, and a copy is\nreturned. If invalid, an error is returned and the state is unchanged.\n\n# Arguments\n\n* `target` - The desired target [`SessionState`].\n\n# Returns\n\nA [`SessionTransition`] record on success.\n\n# Errors\n\nReturns [`CollabError::InvalidSessionTransition`] if the transition\nfrom the current state to `target` is not in the ANVIL transition\ntable, or if `target` equals the current state (self-transitions\nare not permitted).\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mut mgr = SessionManager::new();\n\n// Valid transition\nlet t = mgr.transition(SessionState::Active).unwrap();\nassert_eq!(t.from, SessionState::Proposed);\nassert_eq!(t.to, SessionState::Active);\n\n// Invalid transition returns error\nlet err = mgr.transition(SessionState::Proposed);\nassert!(err.is_err());\n```"
            },
            {
              "name": "::SessionManager::can_transition_to",
              "line": 322,
              "signature": "pub fn can_transition_to(&self, target: SessionState) -> bool;",
              "documentation": "Returns `true` if the transition from the current state to `target`\nis valid.\n\n# Arguments\n\n* `target` - The candidate target [`SessionState`].\n\n# Returns\n\n`true` if the transition is permitted by the ANVIL transition table.\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mgr = SessionManager::new();\nassert!(mgr.can_transition_to(SessionState::Active));\nassert!(mgr.can_transition_to(SessionState::Dissolved));\nassert!(!mgr.can_transition_to(SessionState::Completing));\n```"
            },
            {
              "name": "::SessionManager::valid_transitions",
              "line": 344,
              "signature": "pub fn valid_transitions(&self) -> Vec<SessionState>;",
              "documentation": "Returns the set of valid target states from the current state.\n\n# Returns\n\nA `Vec` of valid target states. Empty if the current state is\nterminal.\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mgr = SessionManager::new();\nlet valid = mgr.valid_transitions();\nassert!(valid.contains(&SessionState::Active));\nassert!(valid.contains(&SessionState::Dissolved));\n```"
            },
            {
              "name": "::SessionManager::history",
              "line": 370,
              "signature": "pub fn history(&self) -> &[SessionTransition];",
              "documentation": "Returns the complete transition history.\n\nThe history is ordered chronologically -- the first entry is the\nfirst transition that occurred.\n\n# Returns\n\nA slice of all [`SessionTransition`] records.\n\n# Examples\n\n```\nuse forge_collab::session::SessionManager;\nuse forge_collab::types::SessionState;\n\nlet mut mgr = SessionManager::new();\nassert!(mgr.history().is_empty());\n\nmgr.transition(SessionState::Active).unwrap();\nassert_eq!(mgr.history().len(), 1);\nassert_eq!(mgr.history()[0].from, SessionState::Proposed);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-collab/src/types.rs",
          "sha256": "66f63a869b8090ec18d64be190e816ea5c1161b7914e5eceb94dc148cfdb33ab",
          "artifactSha256": "cd92bcb3e74ed179cf73ef542aabc258378be723432e407b4520a7ad7f10a504",
          "url": "/reference/source/forge-rs/crates/forge-collab/src/types.rs.txt",
          "declarations": [
            {
              "name": "::CollaborationRole",
              "line": 45,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum CollaborationRole {\n    /// Coordinator: decomposes tasks, assigns them to workers, and aggregates\n    /// results. There is at most one coordinator per session.\n    Coordinator,\n    /// Worker: executes delegated tasks, reports progress, and submits results\n    /// back to the coordinator.\n    Worker,\n    /// Peer: participates in consensus-based collaboration where all agents\n    /// have equal standing.\n    Peer,\n}",
              "documentation": "Role an agent plays in a collaboration session.\n\nRoles define the set of actions available to an agent within a session.\nA Coordinator decomposes and assigns tasks; a Worker executes delegated\ntasks; a Peer participates in consensus-based decision-making.\n\nSee ANVIL Spec section 11.1 -- Collaboration Roles.\n\n# Examples\n\n```\nuse forge_collab::types::CollaborationRole;\n\nlet role = CollaborationRole::Coordinator;\nlet json = serde_json::to_string(&role).unwrap();\nassert_eq!(json, \"\\\"coordinator\\\"\");\n```"
            },
            {
              "name": "::CollaborationSession",
              "line": 103,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CollaborationSession {\n/// Unique identifier for this session.\n\npub session_id: String,\n/// The type of collaboration (e.g., \"code-review\", \"data-analysis\").\n\npub session_type: String,\n/// The agents participating in this session.\n\npub participants: Vec<SessionParticipant>,\n/// The DID of the coordinator agent, if any.\n\npub coordinator: Option<String>,\n/// The ID of the shared context store for this session.\n\npub shared_context_id: Option<String>,\n/// ISO 8601 timestamp when the session was created.\n\npub created_at: String,\n/// Optional session timeout in seconds. When elapsed, the session\n\n/// automatically transitions to the `TimedOut` terminal state.\n\npub timeout_seconds: Option<u64>,\n/// Arbitrary metadata for application-specific session properties.\n\npub metadata: serde_json::Value\n}",
              "documentation": "A collaboration session grouping agents for coordinated work.\n\nSessions have a typed purpose (`session_type`), a set of participants with\nassigned roles, an optional coordinator, and an optional shared context\nstore. Sessions follow a state machine that governs their lifecycle from\nproposal through completion or dissolution.\n\nSee ANVIL Spec section 11.2 -- Collaboration Session.\n\n# Examples\n\n```\nuse forge_collab::types::{CollaborationSession, SessionParticipant, CollaborationRole};\n\nlet session = CollaborationSession {\n    session_id: \"sess-001\".to_string(),\n    session_type: \"code-review\".to_string(),\n    participants: vec![SessionParticipant {\n        agent_did: \"did:oas:agent:coordinator-1\".to_string(),\n        role: CollaborationRole::Coordinator,\n        joined_at: \"2026-02-19T10:00:00Z\".to_string(),\n        status: \"active\".to_string(),\n    }],\n    coordinator: Some(\"did:oas:agent:coordinator-1\".to_string()),\n    shared_context_id: Some(\"ctx-001\".to_string()),\n    created_at: \"2026-02-19T10:00:00Z\".to_string(),\n    timeout_seconds: Some(3600),\n    metadata: serde_json::Value::Object(serde_json::Map::new()),\n};\nassert_eq!(session.session_id, \"sess-001\");\n```"
            },
            {
              "name": "::SessionState",
              "line": 155,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SessionState {\n    /// The session has been proposed but not yet accepted by all participants.\n    Proposed,\n    /// The session is active and participants can collaborate.\n    Active,\n    /// The session is in the process of completing (aggregating results).\n    Completing,\n    /// The session has completed successfully. Terminal state.\n    Completed,\n    /// The session exceeded its timeout. Terminal state.\n    TimedOut,\n    /// The session was dissolved before completion. Terminal state.\n    Dissolved,\n}",
              "documentation": "State of a collaboration session.\n\nThe session state machine controls which operations are valid. Sessions\nstart in the `Proposed` state and progress through `Active` and\n`Completing` states to terminal states.\n\nSee ANVIL Spec section 11.2 -- Session State Machine.\n\n# Transition Table (IMMUTABLE -- ANVIL Spec section 11.2)\n\n| Current State | Valid Next States |\n|---------------|-------------------|\n| Proposed | Active, Dissolved |\n| Active | Completing, Dissolved, TimedOut |\n| Completing | Completed, Dissolved |\n| Completed | *(terminal)* |\n| TimedOut | *(terminal)* |\n| Dissolved | *(terminal)* |\n\n# Examples\n\n```\nuse forge_collab::types::SessionState;\n\nlet state = SessionState::Active;\nassert!(!state.is_terminal());\n\nlet state = SessionState::Completed;\nassert!(state.is_terminal());\n```"
            },
            {
              "name": "::SessionState::valid_transitions",
              "line": 192,
              "signature": "pub fn valid_transitions(&self) -> &'static [SessionState];",
              "documentation": "Returns the set of valid target states from this state.\n\nThe transition table is defined by ANVIL Spec section 11.2\nand is immutable.\n\n# Returns\n\nA slice of `SessionState` values that are valid targets from the\ncurrent state. Returns an empty slice for terminal states.\n\n# Examples\n\n```\nuse forge_collab::types::SessionState;\n\nlet targets = SessionState::Active.valid_transitions();\nassert!(targets.contains(&SessionState::Completing));\nassert!(targets.contains(&SessionState::Dissolved));\nassert!(targets.contains(&SessionState::TimedOut));\n```"
            },
            {
              "name": "::SessionState::is_terminal",
              "line": 223,
              "signature": "pub fn is_terminal(&self) -> bool;",
              "documentation": "Returns `true` if this is a terminal state (no outgoing transitions).\n\nTerminal states are `Completed`, `TimedOut`, and `Dissolved`.\n\n# Examples\n\n```\nuse forge_collab::types::SessionState;\n\nassert!(!SessionState::Proposed.is_terminal());\nassert!(!SessionState::Active.is_terminal());\nassert!(!SessionState::Completing.is_terminal());\nassert!(SessionState::Completed.is_terminal());\nassert!(SessionState::TimedOut.is_terminal());\nassert!(SessionState::Dissolved.is_terminal());\n```"
            },
            {
              "name": "::SessionParticipant",
              "line": 266,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SessionParticipant {\n/// The OAS DID of the participating agent.\n\npub agent_did: String,\n/// The role this agent plays in the session.\n\npub role: CollaborationRole,\n/// ISO 8601 timestamp when the agent joined the session.\n\npub joined_at: String,\n/// Current participation status (e.g., \"active\", \"left\", \"disconnected\").\n\npub status: String\n}",
              "documentation": "A participant in a collaboration session.\n\nEach participant has an assigned role and a status indicating whether\nthey are actively participating. Participants join at a recorded\ntimestamp and may leave before the session completes.\n\nSee ANVIL Spec section 11.2 -- Collaboration Session.\n\n# Examples\n\n```\nuse forge_collab::types::{SessionParticipant, CollaborationRole};\n\nlet participant = SessionParticipant {\n    agent_did: \"did:oas:agent:worker-1\".to_string(),\n    role: CollaborationRole::Worker,\n    joined_at: \"2026-02-19T10:00:00Z\".to_string(),\n    status: \"active\".to_string(),\n};\nassert_eq!(participant.role, CollaborationRole::Worker);\n```"
            },
            {
              "name": "::DelegatedTask",
              "line": 309,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DelegatedTask {\n/// Unique identifier for this task.\n\npub task_id: String,\n/// The type of task (e.g., \"code-review\", \"summarize\", \"translate\").\n\npub task_type: String,\n/// Human-readable description of the task.\n\npub description: String,\n/// Input data for the task.\n\npub input: serde_json::Value,\n/// Optional JSON Schema describing the expected output format.\n\npub output_schema: Option<serde_json::Value>,\n/// Constraints bounding the task execution.\n\npub constraints: TaskConstraints,\n/// The OAS DID of the agent that delegated this task.\n\npub delegator: String,\n/// Priority level for task scheduling.\n\npub priority: TaskPriority,\n/// Optional ISO 8601 deadline for task completion.\n\npub deadline: Option<String>,\n/// Keys in the shared context that this task may read.\n\npub context_keys: Vec<String>\n}",
              "documentation": "A task delegated from a coordinator to a worker agent.\n\nDelegated tasks carry input data, constraint bounds, output expectations,\nand context key references that the worker may read from the shared\ncontext store.\n\nSee ANVIL Spec section 11.3 -- Delegated Task.\n\n# Examples\n\n```\nuse forge_collab::types::{DelegatedTask, TaskConstraints, TaskPriority};\n\nlet task = DelegatedTask {\n    task_id: \"task-001\".to_string(),\n    task_type: \"code-review\".to_string(),\n    description: \"Review the authentication module changes\".to_string(),\n    input: serde_json::json!({\"file\": \"auth.rs\"}),\n    output_schema: None,\n    constraints: TaskConstraints::default(),\n    delegator: \"did:oas:agent:coordinator-1\".to_string(),\n    priority: TaskPriority::Normal,\n    deadline: None,\n    context_keys: vec![\"shared.pr.diff\".to_string()],\n};\nassert_eq!(task.task_type, \"code-review\");\n```"
            },
            {
              "name": "::TaskConstraints",
              "line": 349,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TaskConstraints {\n/// Maximum number of reasoning steps the worker may take.\n\npub max_steps: Option<u32>,\n/// Maximum number of tokens the worker may consume.\n\npub max_tokens: Option<u64>,\n/// Maximum duration in seconds for task execution.\n\npub max_duration_seconds: Option<u64>,\n/// Allowed tool names. If empty, no tool restrictions apply.\n\npub allowed_tools: Vec<String>,\n/// Minimum required confidence score (0.0 to 1.0) for the result.\n\npub required_confidence: Option<f64>\n}",
              "documentation": "Constraints bounding a delegated task's execution.\n\nConstraints prevent runaway tasks by limiting steps, tokens, duration,\nand tool access. The worker must respect these bounds during execution.\n\nSee ANVIL Spec section 11.3 -- Task Constraints.\n\n# Examples\n\n```\nuse forge_collab::types::TaskConstraints;\n\nlet constraints = TaskConstraints::default();\nassert!(constraints.max_steps.is_none());\nassert!(constraints.required_confidence.is_none());\n```"
            },
            {
              "name": "::TaskResult",
              "line": 411,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TaskResult {\n/// The ID of the task this result corresponds to.\n\npub task_id: String,\n/// The completion status of the task.\n\npub status: TaskStatus,\n/// The output data produced by the worker.\n\npub output: serde_json::Value,\n/// Optional confidence score (0.0 to 1.0) for the result.\n\npub confidence: Option<f64>,\n/// Arbitrary metadata about the task execution.\n\npub metadata: serde_json::Value,\n/// Optional Ed25519 signature over the result for verification.\n\npub signature: Option<String>\n}",
              "documentation": "The result of a completed delegated task.\n\nWorkers submit results with a status, output data, optional confidence\nscore, metadata, and an optional cryptographic signature.\n\nSee ANVIL Spec section 11.3 -- Task Result.\n\n# Examples\n\n```\nuse forge_collab::types::{TaskResult, TaskStatus};\n\nlet result = TaskResult {\n    task_id: \"task-001\".to_string(),\n    status: TaskStatus::Completed,\n    output: serde_json::json!({\"summary\": \"LGTM\"}),\n    confidence: Some(0.95),\n    metadata: serde_json::Value::Object(serde_json::Map::new()),\n    signature: None,\n};\nassert_eq!(result.status, TaskStatus::Completed);\n```"
            },
            {
              "name": "::TaskStatus",
              "line": 431,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TaskStatus {\n    /// The task completed successfully with full output.\n    Completed,\n    /// The task failed and could not produce output.\n    Failed,\n    /// The task produced partial output but could not fully complete.\n    Partial,\n}",
              "documentation": "Status of a completed delegated task.\n\nSee ANVIL Spec section 11.3 -- Task Status."
            },
            {
              "name": "::TaskAcknowledgment",
              "line": 471,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TaskAcknowledgment {\n/// The ID of the task being acknowledged.\n\npub task_id: String,\n/// Whether the worker accepts the task.\n\npub accepted: bool,\n/// Reason for rejection, if `accepted` is `false`.\n\npub rejection_reason: Option<String>,\n/// Estimated time to completion in seconds, if accepted.\n\npub estimated_completion_seconds: Option<u64>\n}",
              "documentation": "A worker's acknowledgment of a delegated task.\n\nWhen a task is delegated, the worker responds with an acknowledgment\nindicating whether it accepts or rejects the task.\n\nSee ANVIL Spec section 11.3 -- Task Acknowledgment.\n\n# Examples\n\n```\nuse forge_collab::types::TaskAcknowledgment;\n\nlet ack = TaskAcknowledgment {\n    task_id: \"task-001\".to_string(),\n    accepted: true,\n    rejection_reason: None,\n    estimated_completion_seconds: Some(120),\n};\nassert!(ack.accepted);\n```"
            },
            {
              "name": "::TaskProgress",
              "line": 502,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct TaskProgress {\n/// The ID of the task this progress report corresponds to.\n\npub task_id: String,\n/// Completion percentage (0.0 to 100.0).\n\npub percentage: f64,\n/// Human-readable status message.\n\npub message: String\n}",
              "documentation": "Progress report for an in-flight delegated task.\n\nWorkers periodically report progress to the coordinator. Progress\nincludes a percentage estimate and a human-readable status message.\n\nSee ANVIL Spec section 11.3 -- Task Progress.\n\n# Examples\n\n```\nuse forge_collab::types::TaskProgress;\n\nlet progress = TaskProgress {\n    task_id: \"task-001\".to_string(),\n    percentage: 50.0,\n    message: \"Halfway through code review\".to_string(),\n};\nassert!((progress.percentage - 50.0).abs() < f64::EPSILON);\n```"
            },
            {
              "name": "::TaskPriority",
              "line": 530,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TaskPriority {\n    /// Highest priority -- task must be handled immediately.\n    Critical,\n    /// High priority -- task should be handled soon.\n    High,\n    /// Normal priority -- default scheduling.\n    Normal,\n    /// Low priority -- task can wait.\n    Low,\n}",
              "documentation": "Priority level for task scheduling.\n\nHigher priority tasks are scheduled before lower priority tasks.\nThe default priority is `Normal`.\n\nSee ANVIL Spec section 11.3 -- Task Priority.\n\n# Examples\n\n```\nuse forge_collab::types::TaskPriority;\n\nassert_eq!(TaskPriority::default(), TaskPriority::Normal);\n\nlet json = serde_json::to_string(&TaskPriority::Critical).unwrap();\nassert_eq!(json, \"\\\"critical\\\"\");\n```"
            },
            {
              "name": "::Interrupt",
              "line": 587,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct Interrupt {\n/// Unique identifier for this interrupt.\n\npub interrupt_id: String,\n/// The type of interrupt.\n\npub interrupt_type: InterruptType,\n/// The OAS DID of the agent that sent the interrupt.\n\npub source: String,\n/// Priority of the interrupt.\n\npub priority: TaskPriority,\n/// Arbitrary payload data for the interrupt.\n\npub payload: serde_json::Value,\n/// ISO 8601 timestamp when the interrupt was created.\n\npub timestamp: String\n}",
              "documentation": "An interrupt sent to an agent during task execution.\n\nInterrupts allow coordinators (or the platform) to preempt, suspend,\nresume, abort, or redirect an agent's current work. Interrupts carry\na priority to determine how urgently they should be handled.\n\nSee ANVIL Spec section 11.5 -- Interrupts.\n\n# Examples\n\n```\nuse forge_collab::types::{Interrupt, InterruptType, TaskPriority};\n\nlet interrupt = Interrupt {\n    interrupt_id: \"int-001\".to_string(),\n    interrupt_type: InterruptType::Suspend,\n    source: \"did:oas:agent:coordinator-1\".to_string(),\n    priority: TaskPriority::High,\n    payload: serde_json::json!({\"reason\": \"higher priority task incoming\"}),\n    timestamp: \"2026-02-19T10:30:00Z\".to_string(),\n};\nassert_eq!(interrupt.interrupt_type, InterruptType::Suspend);\n```"
            },
            {
              "name": "::InterruptType",
              "line": 616,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum InterruptType {\n    /// Override the current task with a higher-priority task.\n    PriorityOverride,\n    /// Suspend the current task (can be resumed later).\n    Suspend,\n    /// Resume a previously suspended task.\n    Resume,\n    /// Abort the current task entirely.\n    Abort,\n    /// Redirect the agent to a different task or session.\n    Redirect,\n    /// A human operator is interjecting into the agent's workflow.\n    HumanInterjection,\n}",
              "documentation": "Type of interrupt that can be sent to an agent.\n\nSee ANVIL Spec section 11.5 -- Interrupt Types.\n\n# Examples\n\n```\nuse forge_collab::types::InterruptType;\n\nlet json = serde_json::to_string(&InterruptType::HumanInterjection).unwrap();\nassert_eq!(json, \"\\\"human_interjection\\\"\");\n```"
            },
            {
              "name": "::InterruptResponse",
              "line": 664,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct InterruptResponse {\n/// The ID of the interrupt being responded to.\n\npub interrupt_id: String,\n/// Whether the agent acknowledged and handled the interrupt.\n\npub acknowledged: bool,\n/// The agent's state at the time of interruption, if applicable.\n\npub current_state: Option<InterruptedState>\n}",
              "documentation": "An agent's response to an interrupt.\n\nAfter receiving an interrupt, the agent acknowledges it and optionally\nreports its interrupted state for potential resumption.\n\nSee ANVIL Spec section 11.5 -- Interrupt Response.\n\n# Examples\n\n```\nuse forge_collab::types::InterruptResponse;\n\nlet response = InterruptResponse {\n    interrupt_id: \"int-001\".to_string(),\n    acknowledged: true,\n    current_state: None,\n};\nassert!(response.acknowledged);\n```"
            },
            {
              "name": "::InterruptedState",
              "line": 694,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct InterruptedState {\n/// The ID of the task that was interrupted, if any.\n\npub task_id: Option<String>,\n/// The number of steps completed before interruption.\n\npub step_count: u32,\n/// Progress percentage at the time of interruption (0.0 to 100.0).\n\npub progress_percentage: f64,\n/// Whether the task can be resumed from this state.\n\npub can_resume: bool\n}",
              "documentation": "Snapshot of an agent's state at the moment of interruption.\n\nThis captures enough information to resume the task later if the\ninterrupt type supports resumption.\n\nSee ANVIL Spec section 11.5 -- Interrupted State.\n\n# Examples\n\n```\nuse forge_collab::types::InterruptedState;\n\nlet state = InterruptedState {\n    task_id: Some(\"task-001\".to_string()),\n    step_count: 5,\n    progress_percentage: 42.0,\n    can_resume: true,\n};\nassert!(state.can_resume);\n```"
            },
            {
              "name": "::ContextEntry",
              "line": 734,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ContextEntry {\n/// The key identifying this context entry.\n\npub key: String,\n/// The value stored in this entry.\n\npub value: serde_json::Value,\n/// The type of the value (e.g., \"json\", \"text\", \"binary\").\n\npub value_type: String,\n/// The OAS DID of the agent that wrote this entry.\n\npub author: String,\n/// Monotonically increasing version number for this key.\n\npub version: u64,\n/// ISO 8601 timestamp when this version was written.\n\npub timestamp: String,\n/// Visibility control for this entry.\n\npub visibility: ContextVisibility\n}",
              "documentation": "An entry in a session's shared context store.\n\nContext entries are key-value pairs with versioning, authorship tracking,\nand visibility controls. Participants read and write context entries to\nshare information during collaboration.\n\nSee ANVIL Spec section 11.4 -- Shared Context.\n\n# Examples\n\n```\nuse forge_collab::types::{ContextEntry, ContextVisibility};\n\nlet entry = ContextEntry {\n    key: \"analysis.result\".to_string(),\n    value: serde_json::json!({\"score\": 0.95}),\n    value_type: \"json\".to_string(),\n    author: \"did:oas:agent:worker-1\".to_string(),\n    version: 1,\n    timestamp: \"2026-02-19T10:15:00Z\".to_string(),\n    visibility: ContextVisibility::Session,\n};\nassert_eq!(entry.version, 1);\n```"
            },
            {
              "name": "::ContextVisibility",
              "line": 774,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ContextVisibility {\n    /// Visible to all participants in the session.\n    Session,\n    /// Visible only to agents with the specified role.\n    Role(CollaborationRole),\n    /// Visible only to the specific agent identified by DID.\n    Agent(String),\n}",
              "documentation": "Visibility scope for a shared context entry.\n\nControls which agents can read a context entry. Entries may be visible\nto the entire session, to agents with a specific role, or to a single\nnamed agent.\n\nSee ANVIL Spec section 11.4 -- Context Visibility.\n\n# Examples\n\n```\nuse forge_collab::types::{ContextVisibility, CollaborationRole};\n\nlet vis = ContextVisibility::Session;\nlet json = serde_json::to_string(&vis).unwrap();\nassert_eq!(json, \"\\\"session\\\"\");\n\nlet role_vis = ContextVisibility::Role(CollaborationRole::Worker);\nlet json2 = serde_json::to_string(&role_vis).unwrap();\nassert!(json2.contains(\"role\"));\n```"
            },
            {
              "name": "::AgentCapabilityProfile",
              "line": 812,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AgentCapabilityProfile {\n/// The OAS DID of the agent.\n\npub agent_did: String,\n/// Collaboration roles this agent supports.\n\npub supported_roles: Vec<CollaborationRole>,\n/// Task types this agent can handle (e.g., \"code-review\", \"translate\").\n\npub supported_task_types: Vec<String>,\n/// Tool names available to this agent.\n\npub available_tools: Vec<String>,\n/// Current load factor (0.0 = idle, 1.0 = fully loaded).\n\npub current_load: f64,\n/// Maximum number of tasks this agent can execute concurrently.\n\npub max_concurrent_tasks: u32\n}",
              "documentation": "An agent's advertised capability profile for task matching.\n\nCapability profiles describe what an agent can do (supported roles,\ntask types, available tools), its current load, and its maximum\nconcurrency. The collaboration coordinator uses these profiles to\nmatch tasks to suitable workers.\n\nSee ANVIL Spec section 11.6 -- Agent Capability Profile.\n\n# Examples\n\n```\nuse forge_collab::types::{AgentCapabilityProfile, CollaborationRole};\n\nlet profile = AgentCapabilityProfile {\n    agent_did: \"did:oas:agent:analyzer-1\".to_string(),\n    supported_roles: vec![CollaborationRole::Worker],\n    supported_task_types: vec![\"code-review\".to_string(), \"summarize\".to_string()],\n    available_tools: vec![\"read_file\".to_string(), \"search\".to_string()],\n    current_load: 0.3,\n    max_concurrent_tasks: 5,\n};\nassert_eq!(profile.max_concurrent_tasks, 5);\n```"
            },
            {
              "name": "::SessionTransition",
              "line": 850,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SessionTransition {\n/// The state before the transition.\n\npub from: SessionState,\n/// The state after the transition.\n\npub to: SessionState,\n/// ISO 8601 timestamp when the transition occurred.\n\npub timestamp: String\n}",
              "documentation": "A record of a single session state transition.\n\nEvery session transition is timestamped and can be stored in the session's\ntransition history for audit trail purposes.\n\n# Examples\n\n```\nuse forge_collab::types::{SessionTransition, SessionState};\n\nlet transition = SessionTransition {\n    from: SessionState::Proposed,\n    to: SessionState::Active,\n    timestamp: \"2026-02-19T10:00:00Z\".to_string(),\n};\nassert_eq!(transition.from, SessionState::Proposed);\nassert_eq!(transition.to, SessionState::Active);\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-telemetry",
      "language": "rust",
      "version": "0.2.0",
      "description": "ANVIL Telemetry Contract: span collection, audit trails, and observability for the Forge SDK",
      "manifest": "forge-rs/crates/forge-telemetry/Cargo.toml",
      "manifestSha256": "4c226da821ea73d19ca377ab3d5ae90d54b5a43f778cb02809d3c273045b9a78",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-telemetry",
      "features": {
        "default": [
          "signed-audit"
        ],
        "signed-audit": [
          "dep:forge-identity"
        ]
      },
      "files": [
        {
          "path": "forge-rs/crates/forge-telemetry/src/audit.rs",
          "sha256": "788707b9b0d54b3cb434626a978d63a8dc54d506171596b3b28bdd717634a87b",
          "artifactSha256": "d5f05e47c441e0f615fdd1a4c90f8174f9f8cf5da87b3b6cf2719832b6b859be",
          "url": "/reference/source/forge-rs/crates/forge-telemetry/src/audit.rs.txt",
          "declarations": [
            {
              "name": "::AuditEntry",
              "line": 41,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AuditEntry {\n/// Sequential index in the trail (0-based).\n\npub index: usize,\n/// The audit event.\n\npub event: AuditEvent\n}",
              "documentation": "A single audit trail entry.\n\nEach entry has a sequential index assigned by the `AuditTrail` and wraps\nan `AuditEvent` with the full event details.\n\n# Examples\n\n```\nuse forge_telemetry::audit::{AuditTrail, AuditEntry};\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet mut trail = AuditTrail::new(\"did:oas:l1fe:agent:test\".to_string());\ntrail.append(AuditEvent::new(\n    AuditEventKind::AgentInstantiated,\n    \"did:oas:l1fe:agent:test\".to_string(),\n    serde_json::json!({}),\n));\n\nlet entry = trail.last();\nassert!(entry.is_some());\n```"
            },
            {
              "name": "::AuditTrail",
              "line": 87,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AuditTrail {\n\n}",
              "documentation": "An append-only audit trail with optional Ed25519 signatures.\n\nPer ANVIL Spec section 14.2, every significant agent operation is recorded\nin the audit trail. Entries are timestamped and optionally signed by the\nagent's Ed25519 key. The trail assigns sequential indices starting from 0.\n\n# Invariants\n\n- Entries are append-only; removal is not supported.\n- Each entry's index equals its position in the trail.\n- The agent DID is set at creation and does not change.\n\n# Examples\n\n```\nuse forge_telemetry::audit::AuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet mut trail = AuditTrail::new(\"did:oas:l1fe:agent:analyst\".to_string());\nassert!(trail.is_empty());\n\ntrail.append(AuditEvent::new(\n    AuditEventKind::AgentInstantiated,\n    \"did:oas:l1fe:agent:analyst\".to_string(),\n    serde_json::json!({\"module_hash\": \"abc123\"}),\n));\n\ntrail.append(AuditEvent::new(\n    AuditEventKind::ToolInvocation,\n    \"did:oas:l1fe:agent:analyst\".to_string(),\n    serde_json::json!({\"tool\": \"calculator\", \"status\": \"success\"}),\n));\n\nassert_eq!(trail.len(), 2);\nassert_eq!(trail.entries()[0].index, 0);\nassert_eq!(trail.entries()[1].index, 1);\n```"
            },
            {
              "name": "::AuditTrail::new",
              "line": 112,
              "signature": "pub fn new(agent_did: String) -> Self;",
              "documentation": "Creates a new empty `AuditTrail` for the given agent DID.\n\n# Arguments\n\n* `agent_did` - The agent's OAS DID string.\n\n# Returns\n\nAn empty audit trail.\n\n# Examples\n\n```\nuse forge_telemetry::audit::AuditTrail;\n\nlet trail = AuditTrail::new(\"did:oas:l1fe:agent:bot\".to_string());\nassert!(trail.is_empty());\nassert_eq!(trail.agent_did(), \"did:oas:l1fe:agent:bot\");\n```"
            },
            {
              "name": "::AuditTrail::append",
              "line": 143,
              "signature": "pub fn append(&mut self, event: AuditEvent);",
              "documentation": "Appends an audit event to the trail.\n\nThe event is wrapped in an `AuditEntry` with a sequential index\nequal to the current length of the trail.\n\n# Arguments\n\n* `event` - The audit event to append.\n\n# Examples\n\n```\nuse forge_telemetry::audit::AuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet mut trail = AuditTrail::new(\"did:oas:l1fe:agent:bot\".to_string());\ntrail.append(AuditEvent::new(\n    AuditEventKind::CapabilityCheck,\n    \"did:oas:l1fe:agent:bot\".to_string(),\n    serde_json::json!({\"capability\": \"web_search\", \"granted\": true}),\n));\nassert_eq!(trail.len(), 1);\n```"
            },
            {
              "name": "::AuditTrail::entries",
              "line": 153,
              "signature": "pub fn entries(&self) -> &[AuditEntry];",
              "documentation": "Returns a slice of all entries in the trail.\n\n# Returns\n\nA slice of `AuditEntry` in sequential order."
            },
            {
              "name": "::AuditTrail::len",
              "line": 158,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the number of entries in the trail."
            },
            {
              "name": "::AuditTrail::is_empty",
              "line": 163,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if the trail contains no entries."
            },
            {
              "name": "::AuditTrail::last",
              "line": 190,
              "signature": "pub fn last(&self) -> Option<&AuditEntry>;",
              "documentation": "Returns the last entry in the trail, or `None` if empty.\n\n# Returns\n\nA reference to the most recently appended entry.\n\n# Examples\n\n```\nuse forge_telemetry::audit::AuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet mut trail = AuditTrail::new(\"did:oas:l1fe:agent:bot\".to_string());\nassert!(trail.last().is_none());\n\ntrail.append(AuditEvent::new(\n    AuditEventKind::AgentInstantiated,\n    \"did:oas:l1fe:agent:bot\".to_string(),\n    serde_json::json!({}),\n));\nassert!(trail.last().is_some());\n```"
            },
            {
              "name": "::AuditTrail::agent_did",
              "line": 195,
              "signature": "pub fn agent_did(&self) -> &str;",
              "documentation": "Returns the agent DID associated with this trail."
            },
            {
              "name": "::AuditTrail::filter_by_kind",
              "line": 240,
              "signature": "pub fn filter_by_kind(&self, kind: &AuditEventKind) -> Vec<&AuditEntry>;",
              "documentation": "Returns all entries matching the given `AuditEventKind`.\n\n# Arguments\n\n* `kind` - The kind of audit event to filter for.\n\n# Returns\n\nA vector of references to entries whose event kind matches.\n\n# Examples\n\n```\nuse forge_telemetry::audit::AuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet mut trail = AuditTrail::new(\"did:oas:l1fe:agent:bot\".to_string());\n\ntrail.append(AuditEvent::new(\n    AuditEventKind::ToolInvocation,\n    \"did:oas:l1fe:agent:bot\".to_string(),\n    serde_json::json!({\"tool\": \"search\"}),\n));\ntrail.append(AuditEvent::new(\n    AuditEventKind::NetworkAccess,\n    \"did:oas:l1fe:agent:bot\".to_string(),\n    serde_json::json!({\"url\": \"https://example.com\"}),\n));\ntrail.append(AuditEvent::new(\n    AuditEventKind::ToolInvocation,\n    \"did:oas:l1fe:agent:bot\".to_string(),\n    serde_json::json!({\"tool\": \"calculator\"}),\n));\n\nlet tools = trail.filter_by_kind(&AuditEventKind::ToolInvocation);\nassert_eq!(tools.len(), 2);\n\nlet network = trail.filter_by_kind(&AuditEventKind::NetworkAccess);\nassert_eq!(network.len(), 1);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-telemetry/src/collector.rs",
          "sha256": "fa3e06298d43c2e95e0d099130ee6693aaaea480df6c1be3e9981ab65e6b9273",
          "artifactSha256": "f6e6f002c663639e9247943ca4c530f709bc9ab2f17e2fbe0eb357982633cfa4",
          "url": "/reference/source/forge-rs/crates/forge-telemetry/src/collector.rs.txt",
          "declarations": [
            {
              "name": "::CompletedSpan",
              "line": 39,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CompletedSpan {\n/// The unique identifier for this span.\n\npub span_id: SpanId,\n/// The span name (e.g., `\"anvil.generate\"`, `\"anvil.tool.invoke\"`).\n\npub name: String,\n/// Key-value attributes associated with this span.\n\npub attributes: Vec<(String, String)>,\n/// ISO 8601 timestamp of when the span was started.\n\npub start_time: String,\n/// ISO 8601 timestamp of when the span was ended.\n\npub end_time: String,\n/// The agent's OAS DID, if available.\n\npub agent_did: Option<String>\n}",
              "documentation": "A completed span with timing information.\n\nRepresents a span that has been started and ended, capturing the full\nduration and attributes of the operation.\n\n# Examples\n\n```\nuse forge_telemetry::collector::CompletedSpan;\nuse forge_telemetry::contract::SpanId;\n\nlet span = CompletedSpan {\n    span_id: SpanId::generate(),\n    name: \"anvil.generate\".to_string(),\n    attributes: vec![(\"model\".to_string(), \"gpt-4o\".to_string())],\n    start_time: \"2026-02-19T00:00:00Z\".to_string(),\n    end_time: \"2026-02-19T00:00:01Z\".to_string(),\n    agent_did: Some(\"did:oas:l1fe:agent:test\".to_string()),\n};\nassert_eq!(span.name, \"anvil.generate\");\n```"
            },
            {
              "name": "::SpanCollector",
              "line": 79,
              "signature": "pub trait SpanCollector: Send + Sync {\n    /// Record a completed span.\n    ///\n    /// # Arguments\n    ///\n    /// * `span` - The completed span to record.\n    fn record_span(&self, span: CompletedSpan);\n\n    /// Retrieve all recorded spans.\n    ///\n    /// # Returns\n    ///\n    /// A vector of all completed spans recorded so far.\n    fn spans(&self) -> Vec<CompletedSpan>;\n\n    /// Clear all recorded spans.\n    fn clear(&self);\n\n    /// Number of recorded spans.\n    fn len(&self) -> usize;\n\n    /// Returns `true` if no spans have been recorded.\n    fn is_empty(&self) -> bool;\n}",
              "documentation": "Trait for collecting completed telemetry spans.\n\nImplementations can store spans in memory, write them to disk, or forward\nthem to an external collector.\n\n# Examples\n\n```\nuse forge_telemetry::collector::{SpanCollector, InMemoryCollector, CompletedSpan};\nuse forge_telemetry::contract::SpanId;\n\nlet collector = InMemoryCollector::new();\nassert!(collector.is_empty());\n\ncollector.record_span(CompletedSpan {\n    span_id: SpanId::generate(),\n    name: \"test\".to_string(),\n    attributes: vec![],\n    start_time: \"2026-01-01T00:00:00Z\".to_string(),\n    end_time: \"2026-01-01T00:00:01Z\".to_string(),\n    agent_did: None,\n});\n\nassert_eq!(collector.len(), 1);\n```"
            },
            {
              "name": "::NoopCollector",
              "line": 127,
              "signature": "pub struct NoopCollector;",
              "documentation": "Discards all spans. Zero-cost default for standalone agents.\n\nUse `NoopCollector` when span collection is not needed. All operations\nare no-ops and allocate nothing.\n\n# Examples\n\n```\nuse forge_telemetry::collector::{SpanCollector, NoopCollector, CompletedSpan};\nuse forge_telemetry::contract::SpanId;\n\nlet collector = NoopCollector;\ncollector.record_span(CompletedSpan {\n    span_id: SpanId::generate(),\n    name: \"discarded\".to_string(),\n    attributes: vec![],\n    start_time: \"2026-01-01T00:00:00Z\".to_string(),\n    end_time: \"2026-01-01T00:00:01Z\".to_string(),\n    agent_did: None,\n});\nassert_eq!(collector.len(), 0);\nassert!(collector.is_empty());\n```"
            },
            {
              "name": "::InMemoryCollector",
              "line": 172,
              "signature": "pub struct InMemoryCollector {\n\n}",
              "documentation": "Stores spans in memory. Useful for testing and debugging.\n\nThread-safe via `Mutex`. Not intended for high-throughput production use;\nuse a dedicated exporter for production telemetry.\n\n# Examples\n\n```\nuse forge_telemetry::collector::{SpanCollector, InMemoryCollector, CompletedSpan};\nuse forge_telemetry::contract::SpanId;\n\nlet collector = InMemoryCollector::new();\ncollector.record_span(CompletedSpan {\n    span_id: SpanId::generate(),\n    name: \"test.span\".to_string(),\n    attributes: vec![(\"key\".to_string(), \"value\".to_string())],\n    start_time: \"2026-01-01T00:00:00Z\".to_string(),\n    end_time: \"2026-01-01T00:00:01Z\".to_string(),\n    agent_did: Some(\"did:oas:l1fe:agent:test\".to_string()),\n});\n\nassert_eq!(collector.len(), 1);\nlet spans = collector.spans();\nassert_eq!(spans.len(), 1);\n```"
            },
            {
              "name": "::InMemoryCollector::new",
              "line": 182,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new empty `InMemoryCollector`.\n\n# Returns\n\nAn empty collector ready to record spans."
            },
            {
              "name": "::InMemoryTelemetry",
              "line": 257,
              "signature": "pub struct InMemoryTelemetry {\n\n}",
              "documentation": "In-memory telemetry implementation that stores both spans and events.\n\nWraps `InMemoryCollector` for span storage and tracks active spans to\nproduce `CompletedSpan` records when `end_span` is called. Also collects\nemitted `AuditEvent` entries.\n\nImplements `TelemetryContract` for use in testing and debugging scenarios.\n\n# Examples\n\n```\nuse forge_telemetry::collector::InMemoryTelemetry;\nuse forge_telemetry::contract::{TelemetryContract, AuditEvent};\nuse forge_core::telemetry::AuditEventKind;\n\nlet telemetry = InMemoryTelemetry::new(None);\nlet span_id = telemetry.start_span(\"anvil.generate\", &[(\"model\", \"gpt-4o\")]);\ntelemetry.end_span(&span_id);\n\ntelemetry.emit_event(AuditEvent::new(\n    AuditEventKind::ToolInvocation,\n    \"did:oas:l1fe:agent:test\".to_string(),\n    serde_json::json!({\"tool\": \"web_search\"}),\n));\n\nassert_eq!(telemetry.completed_spans().len(), 1);\nassert_eq!(telemetry.events().len(), 1);\n```"
            },
            {
              "name": "::InMemoryTelemetry::new",
              "line": 274,
              "signature": "pub fn new(agent_did: Option<String>) -> Self;",
              "documentation": "Creates a new `InMemoryTelemetry` instance.\n\n# Arguments\n\n* `agent_did` - Optional agent DID to associate with recorded spans.\n\n# Returns\n\nA new `InMemoryTelemetry` ready to collect spans and events."
            },
            {
              "name": "::InMemoryTelemetry::completed_spans",
              "line": 288,
              "signature": "pub fn completed_spans(&self) -> Vec<CompletedSpan>;",
              "documentation": "Returns all completed spans.\n\n# Returns\n\nA vector of all completed spans that have been started and ended."
            },
            {
              "name": "::InMemoryTelemetry::events",
              "line": 297,
              "signature": "pub fn events(&self) -> Vec<AuditEvent>;",
              "documentation": "Returns all emitted audit events.\n\n# Returns\n\nA vector of all audit events emitted via `emit_event`."
            },
            {
              "name": "::InMemoryTelemetry::clear",
              "line": 302,
              "signature": "pub fn clear(&self);",
              "documentation": "Clears all collected spans and events."
            },
            {
              "name": "::InMemoryTelemetry::span_count",
              "line": 313,
              "signature": "pub fn span_count(&self) -> usize;",
              "documentation": "Returns the number of completed spans."
            },
            {
              "name": "::InMemoryTelemetry::event_count",
              "line": 318,
              "signature": "pub fn event_count(&self) -> usize;",
              "documentation": "Returns the number of emitted events."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-telemetry/src/contract.rs",
          "sha256": "ebcc283560f3240f305cce6181c70e3ef0ebf6aedbbf790696f421b113cc5e30",
          "artifactSha256": "2c32c104c15f373c35b172295da9f6be8f447d84763f97a5524e211746d40121",
          "url": "/reference/source/forge-rs/crates/forge-telemetry/src/contract.rs.txt",
          "declarations": [
            {
              "name": "::SpanId",
              "line": 35,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct SpanId(pub String);",
              "documentation": "A unique span identifier.\n\nEach span started via the `TelemetryContract` receives a `SpanId` that\nmust be passed to `end_span` when the operation completes. IDs are\ngenerated as UUID v4 strings for global uniqueness.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 14.1 -- Telemetry Contract (span identification).\n\n# Examples\n\n```\nuse forge_telemetry::contract::SpanId;\n\nlet id = SpanId::generate();\nassert!(!id.as_str().is_empty());\n```"
            },
            {
              "name": "::SpanId::generate",
              "line": 53,
              "signature": "pub fn generate() -> Self;",
              "documentation": "Creates a new random span ID using UUID v4.\n\n# Returns\n\nA globally unique `SpanId`.\n\n# Examples\n\n```\nuse forge_telemetry::contract::SpanId;\n\nlet a = SpanId::generate();\nlet b = SpanId::generate();\nassert_ne!(a, b);\n```"
            },
            {
              "name": "::SpanId::from_string",
              "line": 71,
              "signature": "pub fn from_string(id: String) -> Self;",
              "documentation": "Creates a `SpanId` from an existing string value.\n\n# Arguments\n\n* `id` - The span identifier string.\n\n# Examples\n\n```\nuse forge_telemetry::contract::SpanId;\n\nlet id = SpanId::from_string(\"custom-span-id\".to_string());\nassert_eq!(id.as_str(), \"custom-span-id\");\n```"
            },
            {
              "name": "::SpanId::as_str",
              "line": 80,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the span ID as a string slice.\n\n# Returns\n\nThe inner string representation of this span ID."
            },
            {
              "name": "::TelemetryContract",
              "line": 128,
              "signature": "pub trait TelemetryContract: Send + Sync {\n    /// Start a new span with the given name and attributes.\n    ///\n    /// Returns a `SpanId` that must be passed to `end_span` when the\n    /// operation completes.\n    ///\n    /// # Arguments\n    ///\n    /// * `name` - The span name (use dotted notation, e.g., `\"anvil.generate\"`).\n    /// * `attributes` - Key-value pairs of span attributes.\n    ///\n    /// # Returns\n    ///\n    /// A unique `SpanId` for the started span.\n    fn start_span(&self, name: &str, attributes: &[(&str, &str)]) -> SpanId;\n\n    /// End a previously started span.\n    ///\n    /// Marks the span as completed with the current timestamp. If the span\n    /// has already been ended, the behavior is implementation-defined (some\n    /// implementations may silently ignore, others may log a warning).\n    ///\n    /// # Arguments\n    ///\n    /// * `span_id` - The ID returned by `start_span`.\n    fn end_span(&self, span_id: &SpanId);\n\n    /// Emit an audit event for the agent's audit trail.\n    ///\n    /// Events are buffered until `flush` is called, or may be written\n    /// immediately depending on the implementation.\n    ///\n    /// # Arguments\n    ///\n    /// * `event` - The audit event to record.\n    fn emit_event(&self, event: AuditEvent);\n\n    /// Flush any buffered telemetry data to the backend.\n    ///\n    /// # Errors\n    ///\n    /// Returns `TelemetryError::FlushFailed` if the flush operation fails.\n    fn flush(&self) -> Result<(), TelemetryError>;\n}",
              "documentation": "ANVIL Spec section 14.1 -- Telemetry Contract.\n\nDefines the telemetry emission interface for ANVIL-compliant agents.\nImplementations collect spans, emit audit events, and support flushing\nbuffered telemetry data to external systems.\n\n# Contract Guarantees\n\n- `start_span` always returns a valid `SpanId`\n- `end_span` is idempotent for implementations that track span state\n- `emit_event` is non-blocking (events may be buffered)\n- `flush` ensures all buffered data is written to the backend\n\n# Examples\n\n```\nuse forge_telemetry::contract::{TelemetryContract, NoopTelemetry, AuditEvent};\nuse forge_core::telemetry::AuditEventKind;\n\nlet telemetry = NoopTelemetry;\nlet span_id = telemetry.start_span(\"anvil.generate\", &[(\"model\", \"gpt-4o\")]);\ntelemetry.end_span(&span_id);\n\ntelemetry.emit_event(AuditEvent::new(\n    AuditEventKind::AgentInstantiated,\n    \"did:oas:l1fe:agent:bot\".to_string(),\n    serde_json::json!({\"module\": \"test\"}),\n));\n\nassert!(telemetry.flush().is_ok());\n```"
            },
            {
              "name": "::AuditEvent",
              "line": 200,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AuditEvent {\n/// The kind of event.\n\npub kind: AuditEventKind,\n/// The agent's OAS DID.\n\npub agent_did: String,\n/// ISO 8601 timestamp of when the event occurred.\n\npub timestamp: String,\n/// Event-specific details as a JSON value.\n\npub details: serde_json::Value,\n/// Ed25519 signature (hex-encoded), if signed.\n\npub signature: Option<String>\n}",
              "documentation": "An audit event recording a significant agent operation.\n\nEach event is associated with an agent DID, timestamped, and optionally\nsigned by the agent's Ed25519 key. Audit events form the foundation of\nthe agent's audit trail.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 14.3 -- Audit Events.\n\n# Examples\n\n```\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet event = AuditEvent::new(\n    AuditEventKind::ToolInvocation,\n    \"did:oas:l1fe:agent:analyzer\".to_string(),\n    serde_json::json!({\"tool\": \"web_search\", \"status\": \"success\"}),\n);\n\nassert_eq!(event.kind, AuditEventKind::ToolInvocation);\nassert_eq!(event.agent_did, \"did:oas:l1fe:agent:analyzer\");\nassert!(event.signature.is_none());\n```"
            },
            {
              "name": "::AuditEvent::new",
              "line": 244,
              "signature": "pub fn new(kind: AuditEventKind, agent_did: String, details: serde_json::Value) -> Self;",
              "documentation": "Creates a new `AuditEvent` with the current UTC timestamp.\n\nThe signature is initially `None`. Call `sign` to attach an Ed25519\nsignature after construction.\n\n# Arguments\n\n* `kind` - The kind of audit event.\n* `agent_did` - The agent's OAS DID string.\n* `details` - Event-specific details as a JSON value.\n\n# Returns\n\nA new `AuditEvent` with the timestamp set to the current UTC time.\n\n# Examples\n\n```\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet event = AuditEvent::new(\n    AuditEventKind::LifecycleTransition,\n    \"did:oas:l1fe:agent:bot\".to_string(),\n    serde_json::json!({\"from\": \"created\", \"to\": \"initializing\"}),\n);\n\nassert!(!event.timestamp.is_empty());\nassert!(event.signature.is_none());\n```"
            },
            {
              "name": "::AuditEvent::with_signature",
              "line": 263,
              "signature": "pub fn with_signature(mut self, signature: String) -> Self;",
              "documentation": "Attaches an Ed25519 signature to this event.\n\n# Arguments\n\n* `signature` - The hex-encoded Ed25519 signature.\n\n# Returns\n\nThe event with the signature attached (builder pattern)."
            },
            {
              "name": "::NoopTelemetry",
              "line": 288,
              "signature": "pub struct NoopTelemetry;",
              "documentation": "No-op telemetry implementation that discards all telemetry data.\n\nUsed as the default for agents that do not need telemetry collection\nor when telemetry is disabled. All operations are zero-cost.\n\n# ANVIL Spec Reference\n\nANVIL Spec section 14.1 -- Telemetry Contract (default implementation).\n\n# Examples\n\n```\nuse forge_telemetry::contract::{TelemetryContract, NoopTelemetry};\n\nlet noop = NoopTelemetry;\nlet span = noop.start_span(\"test\", &[]);\nnoop.end_span(&span);\nassert!(noop.flush().is_ok());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-telemetry/src/error.rs",
          "sha256": "47cca4c817edbb919b51893fbdc6152cdb3c4091d9cf4aac95b6cc5d93428fc0",
          "artifactSha256": "93bc84d321f4ac68ecdc3ac8905e4276ba07e8334e3193e19b5bc9afb4cc9e10",
          "url": "/reference/source/forge-rs/crates/forge-telemetry/src/error.rs.txt",
          "declarations": [
            {
              "name": "::TelemetryError",
              "line": 28,
              "signature": "#[derive(Debug, Error)]\npub enum TelemetryError {\n    /// A span with the given ID was not found in the collector.\n    #[error(\"span '{span_id}' not found in telemetry collector\")]\n    SpanNotFound {\n        /// The span ID that was not found.\n        span_id: String,\n    },\n\n    /// An attempt was made to close a span that is already closed.\n    #[error(\"span '{span_id}' has already been closed and cannot be ended again\")]\n    SpanAlreadyClosed {\n        /// The span ID that was already closed.\n        span_id: String,\n    },\n\n    /// An audit entry failed validation.\n    #[error(\"audit entry is invalid: {reason}\")]\n    AuditEntryInvalid {\n        /// The reason the entry is invalid.\n        reason: String,\n    },\n\n    /// The audit trail integrity check failed at the given index.\n    #[error(\"audit trail corrupted at index {index}: {reason}\")]\n    AuditTrailCorrupted {\n        /// The index where corruption was detected.\n        index: usize,\n        /// The reason for the corruption.\n        reason: String,\n    },\n\n    /// Flushing buffered telemetry data to the backend failed.\n    #[error(\"failed to flush telemetry data: {reason}\")]\n    FlushFailed {\n        /// The reason the flush failed.\n        reason: String,\n    },\n\n    /// The span collector has reached its capacity limit.\n    #[error(\"telemetry collector is full (capacity: {capacity} spans)\")]\n    CollectorFull {\n        /// The maximum number of spans the collector can hold.\n        capacity: usize,\n    },\n\n    /// Exporting telemetry data to an external system failed.\n    #[error(\"failed to export telemetry data: {reason}\")]\n    ExportFailed {\n        /// The reason the export failed.\n        reason: String,\n    },\n\n    /// An audit trail signature or hash chain verification failed.\n    ///\n    /// This indicates either a tampered entry, a wrong signer, or a\n    /// corrupted hash chain in the signed audit trail.\n    ///\n    /// # ANVIL Spec \u00a714.2\n    #[error(\"audit trail verification failed: {reason}\")]\n    AuditVerificationFailed {\n        /// Human-readable description of the verification failure.\n        reason: String,\n    },\n}",
              "documentation": "Errors that can occur during telemetry operations.\n\nEach variant provides specific context about the failure, including\nidentifiers and reasons to enable actionable debugging.\n\n# Examples\n\n```\nuse forge_telemetry::error::TelemetryError;\n\nlet err = TelemetryError::SpanNotFound {\n    span_id: \"abc-123\".to_string(),\n};\nassert!(err.to_string().contains(\"abc-123\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-telemetry/src/lib.rs",
          "sha256": "037357b9d7c56e9fcae4946462abe6ee725b9edf247b0adb9e6a3b629f81e75a",
          "artifactSha256": "31f0fdc2ab5ec71f6f2ed52f1e01162061ce05980fea15de0d76bd4085cca2e9",
          "url": "/reference/source/forge-rs/crates/forge-telemetry/src/lib.rs.txt",
          "declarations": [
            {
              "name": "audit",
              "line": 93,
              "signature": "pub mod audit;",
              "documentation": "# forge-telemetry\n\nANVIL Telemetry Contract: span collection, audit trails, and observability\nfor the Forge SDK.\n\nThis crate defines the telemetry emission interface for ANVIL-compliant agents.\nIt provides:\n\n- **`TelemetryContract` trait** \u2014 The standard interface for starting/ending spans,\n  emitting audit events, and flushing buffered data (ANVIL Spec section 14.1)\n- **Span collection** \u2014 `SpanCollector` trait with `NoopCollector` and\n  `InMemoryCollector` implementations\n- **Audit trail** \u2014 Append-only `AuditTrail` with sequential indexing and\n  filtering by event kind (ANVIL Spec section 14.2)\n- **`NoopTelemetry`** \u2014 Zero-cost default for agents that do not need telemetry\n- **`InMemoryTelemetry`** \u2014 Full in-memory implementation for testing and debugging\n- **Typed errors** \u2014 `TelemetryError` with actionable messages\n\n# Architecture\n\n`forge-telemetry` depends on `forge-core` for span constants (`SPAN_GENERATE`, etc.)\nand base types (`AuditEventKind`, `ForgeSpan`, `ForgeEvent`). It does NOT depend on\n`forge-agent` \u2014 agent crates depend on this crate, not the other way around.\n\n# ANVIL Spec Reference\n\n- Section 14.1 \u2014 Telemetry Contract\n- Section 14.2 \u2014 Audit Trail\n- Section 14.3 \u2014 Audit Events\n\n# Examples\n\n## Using `NoopTelemetry` (zero-cost default)\n\n```\nuse forge_telemetry::contract::{TelemetryContract, NoopTelemetry};\n\nlet telemetry = NoopTelemetry;\nlet span = telemetry.start_span(\"anvil.generate\", &[(\"model\", \"gpt-4o\")]);\ntelemetry.end_span(&span);\nassert!(telemetry.flush().is_ok());\n```\n\n## Using `InMemoryTelemetry` for testing\n\n```\nuse forge_telemetry::collector::InMemoryTelemetry;\nuse forge_telemetry::contract::{TelemetryContract, AuditEvent};\nuse forge_core::telemetry::AuditEventKind;\n\nlet telemetry = InMemoryTelemetry::new(Some(\"did:oas:l1fe:agent:test\".to_string()));\n\nlet span_id = telemetry.start_span(\"anvil.tool.invoke\", &[(\"tool\", \"search\")]);\ntelemetry.end_span(&span_id);\n\ntelemetry.emit_event(AuditEvent::new(\n    AuditEventKind::ToolInvocation,\n    \"did:oas:l1fe:agent:test\".to_string(),\n    serde_json::json!({\"tool\": \"search\", \"status\": \"success\"}),\n));\n\nassert_eq!(telemetry.completed_spans().len(), 1);\nassert_eq!(telemetry.events().len(), 1);\n```\n\n## Building an audit trail\n\n```\nuse forge_telemetry::audit::AuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\n\nlet mut trail = AuditTrail::new(\"did:oas:l1fe:agent:analyst\".to_string());\n\ntrail.append(AuditEvent::new(\n    AuditEventKind::AgentInstantiated,\n    \"did:oas:l1fe:agent:analyst\".to_string(),\n    serde_json::json!({\"module_hash\": \"sha256:abc123\"}),\n));\n\ntrail.append(AuditEvent::new(\n    AuditEventKind::ToolInvocation,\n    \"did:oas:l1fe:agent:analyst\".to_string(),\n    serde_json::json!({\"tool\": \"web_search\"}),\n));\n\nassert_eq!(trail.len(), 2);\nlet tools = trail.filter_by_kind(&AuditEventKind::ToolInvocation);\nassert_eq!(tools.len(), 1);\n```"
            },
            {
              "name": "collector",
              "line": 94,
              "signature": "pub mod collector;",
              "documentation": ""
            },
            {
              "name": "contract",
              "line": 95,
              "signature": "pub mod contract;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 96,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "signed_audit",
              "line": 97,
              "signature": "pub mod signed_audit;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 100,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::audit::{AuditEntry, AuditTrail};",
              "line": 101,
              "signature": "pub use crate::audit::{AuditEntry, AuditTrail};",
              "documentation": ""
            },
            {
              "name": "pub use crate::collector::{\n        CompletedSpan, InMemoryCollector, InMemoryTelemetry, NoopCollector, SpanCollector,\n    };",
              "line": 102,
              "signature": "pub use crate::collector::{\n        CompletedSpan, InMemoryCollector, InMemoryTelemetry, NoopCollector, SpanCollector,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::contract::{AuditEvent, NoopTelemetry, SpanId, TelemetryContract};",
              "line": 105,
              "signature": "pub use crate::contract::{AuditEvent, NoopTelemetry, SpanId, TelemetryContract};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::TelemetryError;",
              "line": 106,
              "signature": "pub use crate::error::TelemetryError;",
              "documentation": ""
            },
            {
              "name": "pub use crate::signed_audit::{SignedAuditEntry, SignedAuditTrail};",
              "line": 107,
              "signature": "pub use crate::signed_audit::{SignedAuditEntry, SignedAuditTrail};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-telemetry/src/signed_audit.rs",
          "sha256": "a74610b828086f877775ae88a89222853849ef73960016fcada3f6a56a835ea9",
          "artifactSha256": "7ecee972aba3654875fab0e75d8a885bde42c69d0208b2fde1e53e5d08d14180",
          "url": "/reference/source/forge-rs/crates/forge-telemetry/src/signed_audit.rs.txt",
          "declarations": [
            {
              "name": "::SignedAuditEntry",
              "line": 101,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SignedAuditEntry {\n/// Sequential index in the trail (0-based).\n\npub index: usize,\n/// The audit event data.\n\npub event: AuditEvent,\n/// BLAKE3 hash of the previous entry (or genesis hash for index 0).\n\npub previous_hash: String,\n/// Hex-encoded 64-byte Ed25519 signature over the canonical content.\n\npub signature_hex: String,\n/// BLAKE3 hash of this entry's signed content (used as `previous_hash` by the next entry).\n\npub entry_hash: String\n}",
              "documentation": "A signed audit trail entry with hash chaining.\n\nEach entry extends [`AuditEvent`] with:\n- A sequential `index` (0-based)\n- A `previous_hash` linking to the prior entry (BLAKE3)\n- A 64-byte Ed25519 `signature` over the canonical content\n- The `entry_hash` (BLAKE3 of the signed content, used as `previous_hash` by the next entry)\n\n# ANVIL Spec \u00a714.2\n\n# Examples\n\n```\nuse forge_telemetry::signed_audit::{SignedAuditTrail, SignedAuditEntry};\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"entry-demo\").unwrap();\nlet mut trail = SignedAuditTrail::new(&hmr);\n\ntrail.append_signed(\n    AuditEvent::new(\n        AuditEventKind::ToolInvocation,\n        \"did:oas:test:hmr:entry-demo\".to_string(),\n        serde_json::json!({\"tool\": \"search\"}),\n    ),\n    &hmr,\n);\n\nlet entry = trail.entries().first().unwrap();\nassert_eq!(entry.index, 0);\nassert!(!entry.signature_hex.is_empty());\nassert!(!entry.entry_hash.is_empty());\n```"
            },
            {
              "name": "::SignedAuditTrail",
              "line": 225,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SignedAuditTrail {\n\n}",
              "documentation": "An Ed25519-signed, hash-chained, append-only audit trail.\n\nEvery entry appended to this trail is:\n1. Signed with the agent's Ed25519 key\n2. Hash-chained to the previous entry via BLAKE3\n\nThe trail stores the agent's public key bytes (NOT the private key) for\nverification purposes. The private key is only used during `append()`.\n\n# Security\n\n- The private key is borrowed during `append()` and never stored.\n- The public key is stored for verification.\n- Entries are append-only.\n- The hash chain enables tamper detection.\n\n# ANVIL Spec \u00a714.2\n\n# Examples\n\n```\nuse forge_telemetry::signed_audit::SignedAuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"trail-demo\").unwrap();\nlet mut trail = SignedAuditTrail::new(&hmr);\n\ntrail.append_signed(\n    AuditEvent::new(\n        AuditEventKind::AgentInstantiated,\n        hmr.did().to_string(),\n        serde_json::json!({}),\n    ),\n    &hmr,\n);\n\nassert_eq!(trail.len(), 1);\nassert!(trail.verify_all().is_ok());\n```"
            },
            {
              "name": "::SignedAuditTrail::new",
              "line": 261,
              "signature": "#[cfg(feature = \"signed-audit\")]\npub fn new(identity: &forge_identity::agent_identity::ForgeAgentIdentity) -> Self;",
              "documentation": "Creates a new empty `SignedAuditTrail` bound to the given agent identity.\n\nThe agent's DID and public key are extracted from the identity. The\nprivate key is NOT stored; it is only borrowed during [`append_signed`](Self::append_signed).\n\n# Arguments\n\n* `identity` - The agent's [`ForgeAgentIdentity`](forge_identity::agent_identity::ForgeAgentIdentity).\n\n# Returns\n\nAn empty signed audit trail.\n\n# Examples\n\n```\nuse forge_telemetry::signed_audit::SignedAuditTrail;\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"new-demo\").unwrap();\nlet trail = SignedAuditTrail::new(&hmr);\nassert!(trail.is_empty());\nassert_eq!(trail.agent_did(), hmr.did());\n```"
            },
            {
              "name": "::SignedAuditTrail::from_parts",
              "line": 279,
              "signature": "pub fn from_parts(agent_did: String, verifying_key_hex: String) -> Self;",
              "documentation": "Creates a `SignedAuditTrail` from raw components (for deserialization/testing).\n\n# Arguments\n\n* `agent_did` - The agent's DID.\n* `verifying_key_hex` - Hex-encoded 32-byte Ed25519 public key.\n\n# Returns\n\nAn empty signed audit trail."
            },
            {
              "name": "::SignedAuditTrail::append_signed",
              "line": 299,
              "signature": "#[cfg(feature = \"signed-audit\")]\npub fn append_signed(\n        &mut self,\n        event: AuditEvent,\n        identity: &forge_identity::agent_identity::ForgeAgentIdentity,\n    );",
              "documentation": "Appends a signed audit event using the provided identity for signing.\n\nThis is the primary append method. It borrows the identity only for\nthe duration of the signing operation.\n\n# Arguments\n\n* `event` - The audit event to append.\n* `identity` - The agent identity providing the signing key.\n\n# ANVIL Spec \u00a714.2"
            },
            {
              "name": "::SignedAuditTrail::verify_entry",
              "line": 387,
              "signature": "pub fn verify_entry(&self, index: usize) -> Result<(), TelemetryError>;",
              "documentation": "Verifies a single audit entry's signature against the stored public key.\n\n# Arguments\n\n* `index` - The index of the entry to verify.\n\n# Returns\n\n`Ok(())` if the signature is valid.\n\n# Errors\n\nReturns [`TelemetryError::AuditVerificationFailed`] if:\n- The index is out of bounds.\n- The signature does not verify.\n- The public key bytes are malformed.\n\n# Examples\n\n```\nuse forge_telemetry::signed_audit::SignedAuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"verify-demo\").unwrap();\nlet mut trail = SignedAuditTrail::new(&hmr);\ntrail.append_signed(\n    AuditEvent::new(\n        AuditEventKind::AgentInstantiated,\n        hmr.did().to_string(),\n        serde_json::json!({}),\n    ),\n    &hmr,\n);\nassert!(trail.verify_entry(0).is_ok());\n```"
            },
            {
              "name": "::SignedAuditTrail::verify_all",
              "line": 534,
              "signature": "pub fn verify_all(&self) -> Result<(), TelemetryError>;",
              "documentation": "Verifies all entries in the trail: signatures and hash chain integrity.\n\nWalks the entire trail from index 0 to the end, verifying each entry's\nEd25519 signature and hash chain link.\n\n# Returns\n\n`Ok(())` if all entries verify successfully.\n\n# Errors\n\nReturns [`TelemetryError::AuditVerificationFailed`] at the first\nentry that fails verification, with details about the failure.\n\n# Examples\n\n```\nuse forge_telemetry::signed_audit::SignedAuditTrail;\nuse forge_telemetry::contract::AuditEvent;\nuse forge_core::telemetry::AuditEventKind;\nuse forge_identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"verify-all-demo\").unwrap();\nlet mut trail = SignedAuditTrail::new(&hmr);\n\ntrail.append_signed(\n    AuditEvent::new(\n        AuditEventKind::AgentInstantiated,\n        hmr.did().to_string(),\n        serde_json::json!({}),\n    ),\n    &hmr,\n);\ntrail.append_signed(\n    AuditEvent::new(\n        AuditEventKind::ToolInvocation,\n        hmr.did().to_string(),\n        serde_json::json!({\"tool\": \"search\"}),\n    ),\n    &hmr,\n);\n\nassert!(trail.verify_all().is_ok());\n```"
            },
            {
              "name": "::SignedAuditTrail::entries",
              "line": 542,
              "signature": "pub fn entries(&self) -> &[SignedAuditEntry];",
              "documentation": "Returns a slice of all signed entries in the trail."
            },
            {
              "name": "::SignedAuditTrail::len",
              "line": 547,
              "signature": "pub fn len(&self) -> usize;",
              "documentation": "Returns the number of entries in the trail."
            },
            {
              "name": "::SignedAuditTrail::is_empty",
              "line": 552,
              "signature": "pub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if the trail contains no entries."
            },
            {
              "name": "::SignedAuditTrail::last",
              "line": 557,
              "signature": "pub fn last(&self) -> Option<&SignedAuditEntry>;",
              "documentation": "Returns the last entry in the trail, or `None` if empty."
            },
            {
              "name": "::SignedAuditTrail::agent_did",
              "line": 562,
              "signature": "pub fn agent_did(&self) -> &str;",
              "documentation": "Returns the agent DID associated with this trail."
            },
            {
              "name": "::SignedAuditTrail::verifying_key_hex",
              "line": 567,
              "signature": "pub fn verifying_key_hex(&self) -> &str;",
              "documentation": "Returns the hex-encoded verifying (public) key."
            },
            {
              "name": "::SignedAuditTrail::filter_by_kind",
              "line": 580,
              "signature": "pub fn filter_by_kind(&self, kind: &AuditEventKind) -> Vec<&SignedAuditEntry>;",
              "documentation": "Returns all entries matching the given `AuditEventKind`.\n\n# Arguments\n\n* `kind` - The kind of audit event to filter for.\n\n# Returns\n\nA vector of references to entries whose event kind matches."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-wasm",
      "language": "rust",
      "version": "0.2.0",
      "description": "WASM/WASI component exports for the Forge SDK \u2014 cross-language consumption",
      "manifest": "forge-rs/crates/forge-wasm/Cargo.toml",
      "manifestSha256": "306c930f34f77ea969142a5953c984c9816746c1c058e742eb7e83ce0a9b1afd",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-wasm",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-wasm/src/error.rs",
          "sha256": "5741229b505f64d84b42c9d803deea4a71010c86c578dc8143b5583cf7d2cbd0",
          "artifactSha256": "b6b99df50091b762264e0eee11811df45e186a70fd5d21965d437f037ad6ff21",
          "url": "/reference/source/forge-rs/crates/forge-wasm/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeWasmError",
              "line": 35,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeWasmError {\n    /// JSON serialization failed when converting a Rust type to JSON output.\n    ///\n    /// This indicates a bug in the WASM export layer if it occurs, since\n    /// all output types derive `Serialize`.\n    #[error(\"JSON serialization error: {0}\")]\n    Serialization(String),\n\n    /// JSON deserialization failed when parsing input from the calling language.\n    ///\n    /// The calling SDK sent malformed JSON. The error message includes the\n    /// serde parse error for debugging.\n    #[error(\"JSON deserialization error: {0}\")]\n    Deserialization(String),\n\n    /// An identity operation failed in the underlying `forge-identity` or `oas-sdk` layer.\n    ///\n    /// This wraps errors from HMR creation, agent derivation, and related\n    /// identity workflows.\n    #[error(\"identity operation failed: {0}\")]\n    Identity(String),\n\n    /// An authorization operation failed in the underlying `forge-auth` layer.\n    ///\n    /// This wraps errors from Arsenal ACT verification and capability checks.\n    #[error(\"auth operation failed: {0}\")]\n    Auth(String),\n\n    /// The input provided to a WASM export function is structurally invalid.\n    ///\n    /// Examples: empty namespace, invalid hex string, wrong key length.\n    #[error(\"invalid input: {0}\")]\n    InvalidInput(String),\n}",
              "documentation": "Errors that can occur during Forge WASM export operations.\n\nEvery variant provides actionable context for the calling language SDK.\nThese errors are designed to be serialized to JSON for consumption by\nTypeScript, Go, Python, Swift, and Kotlin callers.\n\n# ANVIL Spec References\n\n- ANVIL Spec \u00a714.2 \u2014 Error Handling"
            },
            {
              "name": "::ForgeWasmResult",
              "line": 81,
              "signature": "pub type ForgeWasmResult<T> = Result<T, ForgeWasmError>;",
              "documentation": "A specialized `Result` type for forge-wasm operations.\n\n# Examples\n\n```\nuse forge_wasm::error::ForgeWasmResult;\n\nfn example() -> ForgeWasmResult<String> {\n    Ok(\"success\".to_string())\n}\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-wasm/src/exports.rs",
          "sha256": "8f4f004956304ec31697841839e798df476b09eb9bc8ab564f192ebdaece6d71",
          "artifactSha256": "73a52c7ce6a26df483fabca1daf6df1a82091c464a27bbfdce1cdc9f1a68ba42",
          "url": "/reference/source/forge-rs/crates/forge-wasm/src/exports.rs.txt",
          "declarations": [
            {
              "name": "::create_hmr_identity",
              "line": 174,
              "signature": "pub fn create_hmr_identity(request_json: &str) -> ForgeWasmResult<String>;",
              "documentation": "Creates a new HMR (Human Root) identity via JSON input/output.\n\nThis is the primary WASM export for creating root identities. It generates\na fresh Ed25519 keypair, constructs a `did:oas:<namespace>:hmr:<identifier>`\nDID, builds and signs the OAS Identity Document, and returns everything as JSON.\n\nSee ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding.\n\n# Arguments\n\n* `request_json` - A JSON string conforming to [`WasmCreateHmrRequest`]:\n  ```json\n  {\"namespace\": \"l1fe\", \"identifier\": \"alice\"}\n  ```\n\n# Returns\n\nA JSON string conforming to [`WasmCreateHmrResult`], containing the identity\ninfo (DID, kind, lineage depth, public key hex), the signing key hex, and\nthe signed OAS document JSON.\n\n# Errors\n\nReturns [`ForgeWasmError::Deserialization`] if the input JSON is malformed.\n\nReturns [`ForgeWasmError::InvalidInput`] if `namespace` or `identifier` is empty.\n\nReturns [`ForgeWasmError::Identity`] if the OAS SDK fails to create the identity.\n\nReturns [`ForgeWasmError::Serialization`] if the result cannot be serialized to JSON.\n\n# Examples\n\n```\nuse forge_wasm::exports::create_hmr_identity;\n\nlet request = r#\"{\"namespace\":\"test\",\"identifier\":\"alice\"}\"#;\nlet result = create_hmr_identity(request);\nassert!(result.is_ok());\n\nlet json = result.unwrap();\nassert!(json.contains(\"did:oas:test:hmr:alice\"));\nassert!(json.contains(\"signing_key_hex\"));\n```"
            },
            {
              "name": "::derive_agent_identity",
              "line": 282,
              "signature": "pub fn derive_agent_identity(request_json: &str) -> ForgeWasmResult<String>;",
              "documentation": "Derives a child agent identity from a parent via JSON input/output.\n\nThis is the primary WASM export for agent derivation. It reconstructs the\nparent keypair from hex bytes, parses the parent document from JSON, performs\nHKDF-SHA256 key derivation, generates a lineage proof, and returns the child\nidentity as JSON.\n\nSee ANVIL Spec \u00a711.2 \u2014 Lineage Propagation.\n\n# Arguments\n\n* `request_json` - A JSON string conforming to [`WasmDeriveAgentRequest`]:\n  ```json\n  {\n    \"parent_signing_key_hex\": \"9d61b19d...\",\n    \"parent_document_json\": \"{\\\"id\\\":\\\"did:oas:test:hmr:alice\\\",...}\",\n    \"child_name\": \"analyzer\",\n    \"child_namespace\": \"test\"\n  }\n  ```\n\n# Returns\n\nA JSON string conforming to [`WasmDeriveAgentResult`], containing the child\nidentity info, derived signing key hex, and signed child document JSON.\n\n# Errors\n\nReturns [`ForgeWasmError::Deserialization`] if the input JSON is malformed.\n\nReturns [`ForgeWasmError::InvalidInput`] if any required field is empty or\nthe parent signing key hex is not a valid 32-byte hex string.\n\nReturns [`ForgeWasmError::Identity`] if key derivation, document building,\nor signing fails.\n\nReturns [`ForgeWasmError::Serialization`] if the result cannot be serialized.\n\n# Examples\n\n```\nuse forge_wasm::exports::{create_hmr_identity, derive_agent_identity};\n\n// First create a parent\nlet hmr_json = create_hmr_identity(r#\"{\"namespace\":\"test\",\"identifier\":\"alice\"}\"#).unwrap();\nlet hmr: serde_json::Value = serde_json::from_str(&hmr_json).unwrap();\n\n// Then derive a child\nlet derive_req = format!(\n    r#\"{{\"parent_signing_key_hex\":\"{}\",\"parent_document_json\":\"{}\",\"child_name\":\"bot\",\"child_namespace\":\"test\"}}\"#,\n    hmr[\"signing_key_hex\"].as_str().unwrap(),\n    hmr[\"document_json\"].as_str().unwrap().replace('\"', \"\\\\\\\"\"),\n);\n// Note: in practice, build JSON with serde_json to avoid escaping issues\n```"
            },
            {
              "name": "::sign_message",
              "line": 422,
              "signature": "pub fn sign_message(request_json: &str) -> ForgeWasmResult<String>;",
              "documentation": "Signs a message with an Ed25519 key via JSON input/output.\n\nReconstructs the signing key from hex, decodes the message from hex,\nproduces a 64-byte Ed25519 signature, and returns it as hex in JSON.\n\n# Arguments\n\n* `request_json` - A JSON string conforming to [`WasmSignRequest`]:\n  ```json\n  {\"signing_key_hex\": \"9d61b19d...\", \"message_hex\": \"48656c6c6f\"}\n  ```\n\n# Returns\n\nA JSON string conforming to [`WasmSignResult`]:\n  ```json\n  {\"signature_hex\": \"e5564300...\"}\n  ```\n\n# Errors\n\nReturns [`ForgeWasmError::Deserialization`] if the input JSON is malformed.\n\nReturns [`ForgeWasmError::InvalidInput`] if the signing key hex is invalid\nor the message hex contains non-hex characters.\n\nReturns [`ForgeWasmError::Serialization`] if the result cannot be serialized.\n\n# Examples\n\n```\nuse forge_wasm::exports::sign_message;\n\n// Use a known test key (32 bytes, hex-encoded)\nuse forge_wasm::exports::create_hmr_identity;\n\nlet hmr = create_hmr_identity(r#\"{\"namespace\":\"test\",\"identifier\":\"signer\"}\"#).unwrap();\nlet hmr_val: serde_json::Value = serde_json::from_str(&hmr).unwrap();\nlet key_hex = hmr_val[\"signing_key_hex\"].as_str().unwrap();\n\nlet req = format!(r#\"{{\"signing_key_hex\":\"{}\",\"message_hex\":\"48656c6c6f\"}}\"#, key_hex);\nlet result = sign_message(&req);\nassert!(result.is_ok());\n\nlet result_val: serde_json::Value = serde_json::from_str(&result.unwrap()).unwrap();\n// Ed25519 signatures are 64 bytes = 128 hex chars\nassert_eq!(result_val[\"signature_hex\"].as_str().unwrap().len(), 128);\n```"
            },
            {
              "name": "::verify_signature",
              "line": 511,
              "signature": "pub fn verify_signature(request_json: &str) -> ForgeWasmResult<String>;",
              "documentation": "Verifies an Ed25519 signature via JSON input/output.\n\nDecodes the public key, message, and signature from hex, and verifies\nthe signature using constant-time comparison (provided by `ed25519-dalek`).\n\n# Arguments\n\n* `request_json` - A JSON string conforming to [`WasmVerifyRequest`]:\n  ```json\n  {\n    \"public_key_hex\": \"d75a980...\",\n    \"message_hex\": \"48656c6c6f\",\n    \"signature_hex\": \"e5564300...\"\n  }\n  ```\n\n# Returns\n\nA JSON string conforming to [`WasmVerifyResult`]:\n  ```json\n  {\"valid\": true}\n  ```\n\n# Errors\n\nReturns [`ForgeWasmError::Deserialization`] if the input JSON is malformed.\n\nReturns [`ForgeWasmError::InvalidInput`] if any hex string is invalid.\n\nReturns [`ForgeWasmError::Serialization`] if the result cannot be serialized.\n\n# Examples\n\n```\nuse forge_wasm::exports::{create_hmr_identity, sign_message, verify_signature};\n\n// Create identity and sign a message\nlet hmr = create_hmr_identity(r#\"{\"namespace\":\"test\",\"identifier\":\"verifier\"}\"#).unwrap();\nlet hmr_val: serde_json::Value = serde_json::from_str(&hmr).unwrap();\nlet key_hex = hmr_val[\"signing_key_hex\"].as_str().unwrap();\nlet pub_hex = hmr_val[\"identity\"][\"public_key_hex\"].as_str().unwrap();\n\nlet sign_req = format!(r#\"{{\"signing_key_hex\":\"{}\",\"message_hex\":\"cafe\"}}\"#, key_hex);\nlet sign_res = sign_message(&sign_req).unwrap();\nlet sign_val: serde_json::Value = serde_json::from_str(&sign_res).unwrap();\nlet sig_hex = sign_val[\"signature_hex\"].as_str().unwrap();\n\n// Verify the signature\nlet verify_req = format!(\n    r#\"{{\"public_key_hex\":\"{}\",\"message_hex\":\"cafe\",\"signature_hex\":\"{}\"}}\"#,\n    pub_hex, sig_hex,\n);\nlet verify_res = verify_signature(&verify_req).unwrap();\nlet verify_val: serde_json::Value = serde_json::from_str(&verify_res).unwrap();\nassert_eq!(verify_val[\"valid\"], true);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-wasm/src/lib.rs",
          "sha256": "1bb8dd034cbb51a6ae762c1b373390f0a5e44c656be415e4eb84a7edd8633565",
          "artifactSha256": "5333c9f08c20bd706b5b63f6922e556d0dcaef2fcbac70ab6cc5721ec400d93e",
          "url": "/reference/source/forge-rs/crates/forge-wasm/src/lib.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 112,
              "signature": "pub mod error;",
              "documentation": "# forge-wasm\n\nWASM/WASI component exports for the Forge SDK, enabling cross-language\nconsumption of Rust cryptographic operations.\n\nThis crate provides serializable types and synchronous functions suitable\nfor WASM export. It is used by non-Rust language SDKs (TypeScript, Go,\nPython, Swift, Kotlin) to call into the Rust crypto implementation,\nguaranteeing identical key derivation, signing, and verification behavior\nacross all six Forge language SDKs.\n\n# Architecture\n\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                    forge-wasm                          \u2502\n\u2502                                                       \u2502\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   \u2502\n\u2502  \u2502 exports   \u2502    \u2502  types   \u2502    \u2502     error      \u2502   \u2502\n\u2502  \u2502           \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 create_   \u2502    \u2502 Wasm*    \u2502    \u2502 ForgeWasmError  \u2502   \u2502\n\u2502  \u2502 hmr_      \u2502    \u2502 Request  \u2502    \u2502 ForgeWasmResult \u2502   \u2502\n\u2502  \u2502 identity  \u2502    \u2502 / Result \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502           \u2502    \u2502 types    \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 derive_   \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 agent_    \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 identity  \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502           \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 sign_     \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 message   \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502           \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 verify_   \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2502 signature \u2502    \u2502          \u2502    \u2502                 \u2502   \u2502\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518   \u2502\n\u2502        \u2502                                               \u2502\n\u2502   \u250c\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                  \u2502\n\u2502   \u2502  oas-sdk / oas-crypto           \u2502                  \u2502\n\u2502   \u2502  (Ed25519, HKDF, document ops)  \u2502                  \u2502\n\u2502   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n# Design Principles\n\n- **All functions are synchronous.** WASM builds do not use async runtimes.\n- **All I/O is via JSON strings.** WASM boundary crossing uses JSON-encoded\n  request and response types.\n- **Private keys are hex-encoded.** Callers (non-Rust SDKs) handle secure storage.\n- **No lifetimes, no `Arc`, no `dyn Trait`.** Only plain owned types cross the boundary.\n- **Single source of truth for crypto.** All language SDKs use this WASM module\n  for Ed25519 operations, guaranteeing cross-language parity per ANVIL \u00a78.3.\n\n# Modules\n\n- **[`exports`]** \u2014 The public WASM export functions: identity creation,\n  derivation, signing, and verification.\n- **[`types`]** \u2014 Serializable wrapper types for the WASM boundary\n  (`WasmIdentityInfo`, `WasmCreateHmrRequest`, etc.).\n- **[`error`]** \u2014 WASM-specific error types (`ForgeWasmError`, `ForgeWasmResult`).\n\n# Quick Start\n\n```\nuse forge_wasm::exports::{create_hmr_identity, sign_message, verify_signature};\n\n// 1. Create a Human Root identity\nlet hmr_json = create_hmr_identity(\n    r#\"{\"namespace\":\"test\",\"identifier\":\"alice\"}\"#,\n).unwrap();\n\n// 2. Parse the result\nlet hmr: serde_json::Value = serde_json::from_str(&hmr_json).unwrap();\nlet signing_key = hmr[\"signing_key_hex\"].as_str().unwrap();\nlet public_key = hmr[\"identity\"][\"public_key_hex\"].as_str().unwrap();\n\n// 3. Sign a message\nlet sign_req = format!(\n    r#\"{{\"signing_key_hex\":\"{}\",\"message_hex\":\"48656c6c6f\"}}\"#,\n    signing_key,\n);\nlet sig_json = sign_message(&sign_req).unwrap();\nlet sig: serde_json::Value = serde_json::from_str(&sig_json).unwrap();\n\n// 4. Verify the signature\nlet verify_req = format!(\n    r#\"{{\"public_key_hex\":\"{}\",\"message_hex\":\"48656c6c6f\",\"signature_hex\":\"{}\"}}\"#,\n    public_key,\n    sig[\"signature_hex\"].as_str().unwrap(),\n);\nlet result_json = verify_signature(&verify_req).unwrap();\nlet result: serde_json::Value = serde_json::from_str(&result_json).unwrap();\nassert_eq!(result[\"valid\"], true);\n```\n\n# Security\n\n- Signing keys are passed as hex strings. The calling SDK is responsible\n  for secure storage (encryption at rest, zeroization after use).\n- No private key material is ever logged by this crate.\n- Signature verification uses constant-time comparison (via `ed25519-dalek`).\n- No `unsafe` code \u2014 `#![forbid(unsafe_code)]` is enforced workspace-wide.\n\n# ANVIL Spec References\n\n- ANVIL Spec \u00a78.3 \u2014 Cross-Language Parity\n- ANVIL Spec \u00a711.1 \u2014 OAS Identity Binding\n- ANVIL Spec \u00a711.2 \u2014 Lineage Propagation"
            },
            {
              "name": "exports",
              "line": 113,
              "signature": "pub mod exports;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 114,
              "signature": "pub mod types;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-wasm/src/types.rs",
          "sha256": "7d3a37ce75fe27a0c6056b6840b58f302d1b4749cdec8108618f7105fed28ead",
          "artifactSha256": "a0f912e2d2290fb1a2595ce5740d3cb1e08629a4b1c2bdf15f6314a6c84fca7c",
          "url": "/reference/source/forge-rs/crates/forge-wasm/src/types.rs.txt",
          "declarations": [
            {
              "name": "::WasmIdentityInfo",
              "line": 48,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Zeroize)]\npub struct WasmIdentityInfo {\n/// The `did:oas` identifier string (e.g., `\"did:oas:test:hmr:alice\"`).\n\npub did: String,\n/// The entity kind (e.g., `\"hmr\"`, `\"mhr\"`, `\"agent\"`, `\"tool\"`).\n\npub kind: String,\n/// The number of derivation steps from the human root (0 for root entities).\n\npub lineage_depth: u32,\n/// Hex-encoded 32-byte Ed25519 public (verifying) key.\n\npub public_key_hex: String\n}",
              "documentation": "Serializable identity information for WASM boundary crossing.\n\nContains the public identity metadata for an OAS entity: the DID string,\nentity kind, lineage depth, and hex-encoded public key. This is the\n\"safe to share\" portion of an agent's identity.\n\n# Examples\n\n```\nuse forge_wasm::types::WasmIdentityInfo;\n\nlet info = WasmIdentityInfo {\n    did: \"did:oas:test:hmr:alice\".to_string(),\n    kind: \"hmr\".to_string(),\n    lineage_depth: 0,\n    public_key_hex: \"ab\".repeat(32),\n};\nlet json = serde_json::to_string(&info).unwrap();\nassert!(json.contains(\"did:oas:test:hmr:alice\"));\n```"
            },
            {
              "name": "::WasmCreateHmrRequest",
              "line": 74,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]\npub struct WasmCreateHmrRequest {\n/// The OAS namespace (e.g., `\"l1fe\"`, `\"test\"`).\n\npub namespace: String,\n/// The unique identifier within the namespace (e.g., `\"alice\"`).\n\npub identifier: String\n}",
              "documentation": "Request to create a new HMR (Human Root) identity.\n\n# Examples\n\n```\nuse forge_wasm::types::WasmCreateHmrRequest;\n\nlet req = WasmCreateHmrRequest {\n    namespace: \"l1fe\".to_string(),\n    identifier: \"alice\".to_string(),\n};\nlet json = serde_json::to_string(&req).unwrap();\nassert!(json.contains(\"l1fe\"));\n```"
            },
            {
              "name": "::WasmCreateHmrResult",
              "line": 109,
              "signature": "#[derive(Clone, Serialize, Deserialize, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]\npub struct WasmCreateHmrResult {\n/// Public identity info (DID, kind, depth, public key).\n\npub identity: WasmIdentityInfo,\n/// Hex-encoded 32-byte Ed25519 signing (private) key. SENSITIVE.\n\npub signing_key_hex: String,\n/// The signed OAS Identity Document serialized as JSON.\n\npub document_json: String\n}",
              "documentation": "Result of creating a new HMR identity.\n\nContains both the public identity info and the signing key. The signing\nkey is hex-encoded and MUST be handled securely by the calling SDK.\n\n# Security\n\nThe `signing_key_hex` field contains sensitive key material. Never log,\ntransmit in cleartext, or store unencrypted.\n\n# Examples\n\n```\nuse forge_wasm::types::{WasmCreateHmrResult, WasmIdentityInfo};\n\nlet result = WasmCreateHmrResult {\n    identity: WasmIdentityInfo {\n        did: \"did:oas:test:hmr:alice\".to_string(),\n        kind: \"hmr\".to_string(),\n        lineage_depth: 0,\n        public_key_hex: \"ab\".repeat(32),\n    },\n    signing_key_hex: \"cd\".repeat(32),\n    document_json: \"{}\".to_string(),\n};\nassert_eq!(result.identity.lineage_depth, 0);\n```"
            },
            {
              "name": "::WasmDeriveAgentRequest",
              "line": 151,
              "signature": "#[derive(Clone, Serialize, Deserialize, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]\npub struct WasmDeriveAgentRequest {\n/// Hex-encoded 32-byte Ed25519 signing key of the parent. SENSITIVE.\n\npub parent_signing_key_hex: String,\n/// The parent's signed OAS Identity Document as a JSON string.\n\npub parent_document_json: String,\n/// The child agent's identifier (e.g., `\"analyzer\"`, `\"scraper\"`).\n\npub child_name: String,\n/// The child agent's OAS namespace (e.g., `\"l1fe\"`, `\"test\"`).\n\npub child_namespace: String\n}",
              "documentation": "Request to derive a child agent identity from a parent.\n\nRequires the parent's signing key (hex) and document (JSON) to perform\nHKDF-SHA256 key derivation and lineage proof generation.\n\n# Security\n\nThe `parent_signing_key_hex` field contains sensitive key material.\n\n# Examples\n\n```\nuse forge_wasm::types::WasmDeriveAgentRequest;\n\nlet req = WasmDeriveAgentRequest {\n    parent_signing_key_hex: \"ab\".repeat(32),\n    parent_document_json: \"{}\".to_string(),\n    child_name: \"analyzer\".to_string(),\n    child_namespace: \"test\".to_string(),\n};\nassert_eq!(req.child_name, \"analyzer\");\n```"
            },
            {
              "name": "::WasmDeriveAgentResult",
              "line": 200,
              "signature": "#[derive(Clone, Serialize, Deserialize, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]\npub struct WasmDeriveAgentResult {\n/// Public identity info for the derived child agent.\n\npub identity: WasmIdentityInfo,\n/// Hex-encoded 32-byte Ed25519 signing (private) key of the child. SENSITIVE.\n\npub signing_key_hex: String,\n/// The signed child OAS Identity Document (with lineage section) as JSON.\n\npub document_json: String\n}",
              "documentation": "Result of deriving a child agent identity.\n\nContains the child's public identity info and derived signing key.\n\n# Security\n\nThe `signing_key_hex` field contains sensitive key material. Handle\nwith the same care as the parent's signing key.\n\n# Examples\n\n```\nuse forge_wasm::types::{WasmDeriveAgentResult, WasmIdentityInfo};\n\nlet result = WasmDeriveAgentResult {\n    identity: WasmIdentityInfo {\n        did: \"did:oas:test:agent:analyzer\".to_string(),\n        kind: \"agent\".to_string(),\n        lineage_depth: 1,\n        public_key_hex: \"ab\".repeat(32),\n    },\n    signing_key_hex: \"cd\".repeat(32),\n    document_json: \"{}\".to_string(),\n};\nassert_eq!(result.identity.lineage_depth, 1);\n```"
            },
            {
              "name": "::WasmSignRequest",
              "line": 237,
              "signature": "#[derive(Clone, Serialize, Deserialize, PartialEq, Eq, Zeroize, ZeroizeOnDrop)]\npub struct WasmSignRequest {\n/// Hex-encoded 32-byte Ed25519 signing key. SENSITIVE.\n\npub signing_key_hex: String,\n/// Hex-encoded message bytes to sign.\n\npub message_hex: String\n}",
              "documentation": "Request to sign a message with an Ed25519 key.\n\n# Security\n\nThe `signing_key_hex` field contains sensitive key material.\n\n# Examples\n\n```\nuse forge_wasm::types::WasmSignRequest;\n\nlet req = WasmSignRequest {\n    signing_key_hex: \"ab\".repeat(32),\n    message_hex: \"deadbeef\".to_string(),\n};\nassert_eq!(req.message_hex, \"deadbeef\");\n```"
            },
            {
              "name": "::WasmSignResult",
              "line": 266,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]\npub struct WasmSignResult {\n/// Hex-encoded 64-byte Ed25519 signature.\n\npub signature_hex: String\n}",
              "documentation": "Result of signing a message.\n\n# Examples\n\n```\nuse forge_wasm::types::WasmSignResult;\n\nlet result = WasmSignResult {\n    signature_hex: \"ab\".repeat(64),\n};\nassert_eq!(result.signature_hex.len(), 128);\n```"
            },
            {
              "name": "::WasmVerifyRequest",
              "line": 286,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]\npub struct WasmVerifyRequest {\n/// Hex-encoded 32-byte Ed25519 public (verifying) key.\n\npub public_key_hex: String,\n/// Hex-encoded message bytes that were signed.\n\npub message_hex: String,\n/// Hex-encoded 64-byte Ed25519 signature to verify.\n\npub signature_hex: String\n}",
              "documentation": "Request to verify an Ed25519 signature.\n\n# Examples\n\n```\nuse forge_wasm::types::WasmVerifyRequest;\n\nlet req = WasmVerifyRequest {\n    public_key_hex: \"ab\".repeat(32),\n    message_hex: \"deadbeef\".to_string(),\n    signature_hex: \"cd\".repeat(64),\n};\nassert_eq!(req.message_hex, \"deadbeef\");\n```"
            },
            {
              "name": "::WasmVerifyResult",
              "line": 306,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]\npub struct WasmVerifyResult {\n/// Whether the signature is valid for the given message and public key.\n\npub valid: bool\n}",
              "documentation": "Result of verifying an Ed25519 signature.\n\n# Examples\n\n```\nuse forge_wasm::types::WasmVerifyResult;\n\nlet result = WasmVerifyResult { valid: true };\nassert!(result.valid);\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-sdk",
      "language": "rust",
      "version": "0.2.0",
      "description": "The Forge SDK \u2014 unified ANVIL-compliant agent development framework",
      "manifest": "forge-rs/crates/forge-sdk/Cargo.toml",
      "manifestSha256": "59054a58bb16295bfcc7594b8eb8398077fd34a302d57a971f435e5cad08985b",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-sdk",
      "features": {
        "default": [],
        "openai": [
          "dep:forge-provider-openai"
        ],
        "anthropic": [
          "dep:forge-provider-anthropic"
        ],
        "google": [
          "dep:forge-provider-google"
        ],
        "coding": [
          "dep:forge-provider-coding"
        ],
        "platforms": [
          "dep:forge-provider-platforms"
        ],
        "all-providers": [
          "openai",
          "anthropic",
          "google",
          "coding",
          "platforms"
        ]
      },
      "files": [
        {
          "path": "forge-rs/crates/forge-sdk/src/adapters.rs",
          "sha256": "ef118fa135b2f0bebb9a3f4e6a874e13540e9dc1a1ccdced65eff2603a253827",
          "artifactSha256": "8040a4a5a19532719fddef3d9b3b4a88a7a35500a3bd35db23fb9dba23d48feb",
          "url": "/reference/source/forge-rs/crates/forge-sdk/src/adapters.rs.txt",
          "declarations": [
            {
              "name": "::IdentityAdapter",
              "line": 14,
              "signature": "pub trait IdentityAdapter: Send + Sync {\n    /// Creates a new human root identity.\n    fn create_hmr_identity(\n        &self,\n        namespace: &str,\n        identifier: &str,\n    ) -> ForgeIdentityResult<ForgeAgentIdentity>;\n\n    /// Creates a new machine root identity.\n    fn create_mhr_identity(\n        &self,\n        namespace: &str,\n        identifier: &str,\n    ) -> ForgeIdentityResult<ForgeAgentIdentity>;\n\n    /// Derives a child agent identity from a parent identity.\n    fn derive_agent_identity(\n        &self,\n        parent: &ForgeAgentIdentity,\n        name: &str,\n        namespace: &str,\n    ) -> ForgeIdentityResult<ForgeAgentIdentity>;\n}",
              "documentation": "Stable Forge contract for OAS-backed identity creation and derivation."
            },
            {
              "name": "::OasIdentityAdapter",
              "line": 40,
              "signature": "#[derive(Debug, Default, Clone, Copy)]\npub struct OasIdentityAdapter;",
              "documentation": "Production identity adapter backed by Forge's OAS reference implementation."
            },
            {
              "name": "::AuthorizationAdapter",
              "line": 70,
              "signature": "pub trait AuthorizationAdapter: Send + Sync {\n    /// Verifies that an ACT is structurally and temporally valid.\n    fn verify_act(&self, act: &AgentCapabilityToken) -> ForgeAuthResult<()>;\n\n    /// Extracts the scopes granted by an ACT.\n    fn extract_scopes(&self, act: &AgentCapabilityToken) -> Vec<String>;\n\n    /// Authorizes a tool invocation against the active ACT.\n    fn authorize_tool_invocation(\n        &self,\n        request: &ToolAuthorizationRequest<'_>,\n    ) -> ForgeAuthResult<ToolAuthorizationDecision>;\n\n    /// Delegates a narrowed capability set to a child agent.\n    fn delegate_capabilities(\n        &self,\n        request: &DelegationRequest<'_>,\n    ) -> ForgeAuthResult<AgentCapabilityToken>;\n}",
              "documentation": "Stable Forge contract for Arsenal-backed authorization."
            },
            {
              "name": "::ArsenalAuthorizationAdapter",
              "line": 92,
              "signature": "#[derive(Debug, Default, Clone, Copy)]\npub struct ArsenalAuthorizationAdapter;",
              "documentation": "Production authorization adapter backed by Forge's Arsenal integration."
            },
            {
              "name": "::DocumentRevocationState",
              "line": 120,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum DocumentRevocationState {\n    Active,\n    Revoked,\n    Suspended,\n    Expired,\n    Unknown,\n}",
              "documentation": "Forge-owned revocation status for the verification contract."
            },
            {
              "name": "::HumanRootLivenessState",
              "line": 130,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum HumanRootLivenessState {\n    Active,\n    Warning,\n    Stale,\n    Unknown,\n}",
              "documentation": "Forge-owned human-root liveness state for the verification contract."
            },
            {
              "name": "::DocumentVerification",
              "line": 139,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct DocumentVerification {\npub did: String,\npub signature_valid: bool,\npub lineage_valid: bool,\npub lineage_depth: u32,\npub human_root: Option<String>,\npub revocation_state: DocumentRevocationState,\npub liveness_state: HumanRootLivenessState,\npub conformance_level: u8,\npub warnings: Vec<String>,\npub verified_at: Timestamp\n}",
              "documentation": "Stable Forge verification result independent of the upstream verifier."
            },
            {
              "name": "::VerificationAdapterError",
              "line": 154,
              "signature": "#[derive(Debug, Error)]\npub enum VerificationAdapterError {\n    #[cfg(not(target_arch = \"wasm32\"))]\n    #[error(transparent)]\n    Aegis(#[from] aegis_core::VerificationError),\n\n    #[error(\"verification backend unavailable: {reason}\")]\n    BackendUnavailable { reason: String },\n}",
              "documentation": "Errors produced by a verification adapter implementation."
            },
            {
              "name": "::VerificationAdapterResult",
              "line": 164,
              "signature": "pub type VerificationAdapterResult<T> = Result<T, VerificationAdapterError>;",
              "documentation": "Result type for verification adapter operations."
            },
            {
              "name": "::VerificationAdapter",
              "line": 168,
              "signature": "#[async_trait]\npub trait VerificationAdapter: Send + Sync {\n    /// Verifies a DID through the configured verification backend.\n    async fn verify_did(&self, did: &str) -> VerificationAdapterResult<DocumentVerification>;\n}",
              "documentation": "Stable Forge contract for verification backends."
            },
            {
              "name": "::ForgePlatformAdapters",
              "line": 175,
              "signature": "#[derive(Clone)]\npub struct ForgePlatformAdapters {\n\n}",
              "documentation": "Bundle of the production adapter contracts consumed by Forge runtimes."
            },
            {
              "name": "::ForgePlatformAdapters::new",
              "line": 183,
              "signature": "pub fn new(\n        identity: Arc<dyn IdentityAdapter>,\n        authorization: Arc<dyn AuthorizationAdapter>,\n        verification: Arc<dyn VerificationAdapter>,\n    ) -> Self;",
              "documentation": "Builds an adapter bundle from explicit implementations."
            },
            {
              "name": "::ForgePlatformAdapters::identity",
              "line": 196,
              "signature": "pub fn identity(&self) -> &dyn IdentityAdapter;",
              "documentation": "Returns the configured identity adapter."
            },
            {
              "name": "::ForgePlatformAdapters::authorization",
              "line": 201,
              "signature": "pub fn authorization(&self) -> &dyn AuthorizationAdapter;",
              "documentation": "Returns the configured authorization adapter."
            },
            {
              "name": "::ForgePlatformAdapters::verification",
              "line": 206,
              "signature": "pub fn verification(&self) -> &dyn VerificationAdapter;",
              "documentation": "Returns the configured verification adapter."
            },
            {
              "name": "::ForgePlatformAdapters::production",
              "line": 212,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn production(\n        registry: Arc<aegis_core::PluginRegistry>,\n        config: aegis_core::VerificationConfig,\n    ) -> Self;",
              "documentation": "Builds the production bundle backed by Forge/OAS, Forge/Arsenal, and AEGIS."
            },
            {
              "name": "::AegisVerificationAdapter",
              "line": 269,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub struct AegisVerificationAdapter {\n\n}",
              "documentation": "Production verification adapter backed by the AEGIS verification pipeline."
            },
            {
              "name": "::AegisVerificationAdapter::new",
              "line": 276,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn new(\n        registry: Arc<aegis_core::PluginRegistry>,\n        config: aegis_core::VerificationConfig,\n    ) -> Self;",
              "documentation": "Creates an AEGIS-backed verification adapter from a resolver registry."
            },
            {
              "name": "::AegisVerificationAdapter::from_pipeline",
              "line": 286,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn from_pipeline(pipeline: aegis_verify::VerificationPipeline) -> Self;",
              "documentation": "Wraps an existing AEGIS verification pipeline."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-sdk/src/lib.rs",
          "sha256": "44e38c920e79406a79a8947fcc59ae9103e9d5021c7bf90f3b72273b9e4e5bf2",
          "artifactSha256": "f50cebaff005f84b7fc9c3fd057df951460af5f369befc02f5ba2d066b1e7b55",
          "url": "/reference/source/forge-rs/crates/forge-sdk/src/lib.rs.txt",
          "declarations": [
            {
              "name": "pub use forge_core;",
              "line": 94,
              "signature": "pub use forge_core;",
              "documentation": "# forge-sdk\n\nThe unified Forge SDK -- an ANVIL-compliant agent development framework.\n\nThis crate re-exports all Forge SDK crates under a single import, providing\na convenient entry point for building AI agents with cryptographic identity,\ncapability-based authorization, and full observability.\n\n# Quick Start\n\n```no_run\nuse forge_sdk::prelude::*;\nuse std::sync::Arc;\n\nasync fn quickstart(model: Arc<dyn LanguageModel>) {\n    // 1. Create a human root identity\n    let hmr = create_hmr_identity(\"l1fe\", \"admin\").unwrap();\n\n    // 2. Derive an agent identity\n    let agent_id = derive_agent_identity(&hmr, \"data-analyst\", \"l1fe\").unwrap();\n\n    // 3. Configure the agent\n    let config = AgentConfig::new(\"data-analyst\", \"openai:gpt-4o\")\n        .with_system_prompt(\"You are a data analysis assistant.\")\n        .with_max_steps(10);\n\n    // 4. Run the agent\n    let registry = ToolRegistry::new();\n    let approval = Arc::new(AutoApprove);\n    let agent = ToolLoopAgent::new(config, model, registry, approval);\n    let output = agent.run(\"Analyze the data\").await;\n}\n```\n\n# Module Organization\n\n| Module | Crate | Purpose |\n|--------|-------|---------|\n| [`forge_core`] | `forge-core` | Types, provider trait, telemetry, configuration |\n| [`generate`] | `forge-generate` | Text, stream, and object generation |\n| [`tool`] | `forge-tool` | Tool definition, execution, approval, registry |\n| [`health`] | `forge-health` | Lifecycle state machine, health profiles |\n| [`agent`] | `forge-agent` | Tool loops, workflows, sub-agents |\n| [`embed`] | `forge-embed` | Embeddings, similarity, vector store, chunking |\n| [`media`] | `forge-media` | Image, transcription, speech, video |\n| [`mcp`] | `forge-mcp` | Model Context Protocol client/server |\n| [`identity`] | `forge-identity` | OAS identity binding, lineage |\n| [`auth`] | `forge-auth` | Arsenal capability tokens, authorization |\n| [`comm`] | `forge-comm` | Communication Contract: transports, envelopes |\n| [`collab`] | `forge-collab` | Collaboration Contract: roles, sessions, delegation |\n| [`telemetry`] | `forge-telemetry` | Telemetry Contract: spans, audit trails |\n\n# Re-exported External Crates\n\nFor convenience, this crate also re-exports commonly needed external types:\n\n- [`serde`] -- Serialization and deserialization framework.\n- [`serde_json`] -- JSON parsing and serialization.\n- [`async_trait`] -- Async trait support for implementing provider traits.\n- [`tokio`] -- Async runtime for running agents.\n\n# ANVIL Conformance\n\nThe Forge SDK implements the ANVIL specification at conformance level L1\n(Accountable Runtime). See the ANVIL specification for details on each\nconformance level.\n\n| Level | Description | Status |\n|-------|-------------|--------|\n| L0 -- Core Runtime | Sandbox, cognitive interface, tool invocation, lifecycle | Implemented |\n| L1 -- Accountable Runtime | L0 + OAS identity, Arsenal authorization, health, audit | Implemented |\n| L2 -- Full Runtime | L1 + WASM compilation, on-chain deployment, full lineage | In progress |\nCore types, provider traits, telemetry, and configuration.\n\nRe-exports the `forge-core` crate. This module contains the foundational types\nused throughout the entire Forge SDK: messages, tools, schemas, providers,\nconfiguration, output types, errors, and telemetry primitives.\n\n# Examples\n\n```\nuse forge_sdk::forge_core::message::{ModelMessage, Role};\n\nlet msg = ModelMessage::text(Role::User, \"Hello, agent!\");\nassert_eq!(msg.role(), Role::User);\n```"
            },
            {
              "name": "pub use forge_generate as generate;",
              "line": 116,
              "signature": "pub use forge_generate as generate;",
              "documentation": "Text generation, streaming, and structured output generation.\n\nRe-exports the `forge-generate` crate. Provides `generate_text`,\n`stream_text`, `generate_object`, and `stream_object` functions for\ninteracting with language models.\n\n# Examples\n\n```no_run\nuse forge_sdk::generate::generate_text;\nuse forge_sdk::forge_core::config::GenerateOptions;\nuse forge_sdk::forge_core::message::{ModelMessage, Role};\nuse forge_sdk::forge_core::model::LanguageModel;\n\nasync fn example(model: &dyn LanguageModel) {\n    let msgs = vec![ModelMessage::text(Role::User, \"Hello\")];\n    let opts = GenerateOptions::default();\n    let result = generate_text(model, &msgs, &[], &opts).await;\n}\n```"
            },
            {
              "name": "pub use forge_tool as tool;",
              "line": 123,
              "signature": "pub use forge_tool as tool;",
              "documentation": "Tool definition, execution, approval, and registry.\n\nRe-exports the `forge-tool` crate. Provides the complete 3-tier tool\nsubsystem: definition builders, execution pipeline with schema validation\nand approval gates, and the runtime tool registry."
            },
            {
              "name": "pub use forge_health as health;",
              "line": 130,
              "signature": "pub use forge_health as health;",
              "documentation": "ANVIL health profiles, lifecycle state machine, and monitoring.\n\nRe-exports the `forge-health` crate. Implements the immutable 6-state\nlifecycle state machine defined in ANVIL Spec section 13.2 and health\nprofile tracking with threshold-based monitoring."
            },
            {
              "name": "pub use forge_agent as agent;",
              "line": 137,
              "signature": "pub use forge_agent as agent;",
              "documentation": "Agent execution loop, workflows, and multi-agent orchestration.\n\nRe-exports the `forge-agent` crate. Provides the `ToolLoopAgent`,\nsequential/parallel/router workflows, sub-agent creation, and\ninter-agent messaging."
            },
            {
              "name": "pub use forge_embed as embed;",
              "line": 144,
              "signature": "pub use forge_embed as embed;",
              "documentation": "Embedding, reranking, vector store, and RAG primitives.\n\nRe-exports the `forge-embed` crate. Provides everything needed for\nretrieval-augmented generation: embedding providers, similarity functions,\nvector stores, document loaders, and text chunking."
            },
            {
              "name": "pub use forge_media as media;",
              "line": 150,
              "signature": "pub use forge_media as media;",
              "documentation": "Image generation, audio transcription, speech synthesis, and video.\n\nRe-exports the `forge-media` crate. Provides pluggable provider traits\nfor all media types with top-level convenience functions."
            },
            {
              "name": "pub use forge_mcp as mcp;",
              "line": 157,
              "signature": "pub use forge_mcp as mcp;",
              "documentation": "Model Context Protocol (MCP) client, server, and transport.\n\nRe-exports the `forge-mcp` crate. Enables Forge agents to connect to\nexternal MCP tool servers as clients and to expose their own capabilities\nas MCP servers."
            },
            {
              "name": "adapters",
              "line": 160,
              "signature": "pub mod adapters;",
              "documentation": "Ecosystem adapter contracts for identity, authorization, and verification."
            },
            {
              "name": "pub use forge_identity as identity;",
              "line": 176,
              "signature": "pub use forge_identity as identity;",
              "documentation": "OAS identity binding for agents.\n\nRe-exports the `forge-identity` crate. Binds OAS cryptographic identities\nto Forge agents, providing Ed25519 keypairs, signed identity documents,\nand lineage proof chains.\n\n# Examples\n\n```\nuse forge_sdk::identity::lineage::create_hmr_identity;\n\nlet hmr = create_hmr_identity(\"test\", \"alice\").unwrap();\nassert_eq!(hmr.did(), \"did:oas:test:hmr:alice\");\n```"
            },
            {
              "name": "pub use forge_auth as auth;",
              "line": 183,
              "signature": "pub use forge_auth as auth;",
              "documentation": "Arsenal capability token integration.\n\nRe-exports the `forge-auth` crate. Bridges the Forge agent runtime with\nthe Arsenal authorization framework, providing ACT verification, tool\nauthorization, capability delegation, and scope extraction."
            },
            {
              "name": "pub use forge_comm as comm;",
              "line": 190,
              "signature": "pub use forge_comm as comm;",
              "documentation": "Communication Contract (ANVIL Spec \u00a710).\n\nRe-exports the `forge-comm` crate. Provides the inter-agent communication\nabstraction: message envelopes, transport traits (`MessageTransport`),\nchannel and noop transports, and protocol negotiation types."
            },
            {
              "name": "pub use forge_collab as collab;",
              "line": 198,
              "signature": "pub use forge_collab as collab;",
              "documentation": "Collaboration Contract (ANVIL Spec \u00a711).\n\nRe-exports the `forge-collab` crate. Provides the multi-agent collaboration\nframework: role contracts (Coordinator/Worker/Peer), session management,\nshared context, task delegation, interrupt handling, and capability\nadvertising."
            },
            {
              "name": "pub use forge_provider_coding as coding;",
              "line": 202,
              "signature": "#[cfg(feature = \"coding\")]\npub use forge_provider_coding as coding;",
              "documentation": "Official coding-product adapters for subscription-style coding providers."
            },
            {
              "name": "pub use forge_provider_platforms as platforms;",
              "line": 206,
              "signature": "#[cfg(feature = \"platforms\")]\npub use forge_provider_platforms as platforms;",
              "documentation": "Official direct-provider and gateway adapters for the wider model ecosystem."
            },
            {
              "name": "pub use forge_telemetry as telemetry;",
              "line": 213,
              "signature": "pub use forge_telemetry as telemetry;",
              "documentation": "Telemetry Contract (ANVIL Spec \u00a714).\n\nRe-exports the `forge-telemetry` crate. Provides the telemetry abstraction:\n`TelemetryContract` trait, span collectors, signed audit trails, and\nOpenTelemetry-compatible export."
            },
            {
              "name": "pub use serde;",
              "line": 218,
              "signature": "pub use serde;",
              "documentation": "Re-export of the `serde` crate for serialization and deserialization."
            },
            {
              "name": "pub use serde_json;",
              "line": 221,
              "signature": "pub use serde_json;",
              "documentation": "Re-export of the `serde_json` crate for JSON handling."
            },
            {
              "name": "pub use async_trait;",
              "line": 224,
              "signature": "pub use async_trait;",
              "documentation": "Re-export of the `async_trait` crate for async trait definitions."
            },
            {
              "name": "pub use tokio;",
              "line": 231,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use tokio;",
              "documentation": "Re-export of the `tokio` crate for async runtime support.\n\nThis re-export is only available on non-WASM targets, because `tokio` with\nfull features does not compile to `wasm32-wasip1`."
            },
            {
              "name": "prelude",
              "line": 263,
              "signature": "pub mod prelude;",
              "documentation": "The Forge SDK prelude -- import `use forge_sdk::prelude::*` for the most common types.\n\nThis module re-exports the essential types and functions needed to build and\nrun ANVIL-compliant agents. It aggregates the most commonly used items from\nevery Forge crate so that a single `use forge_sdk::prelude::*;` import covers\nthe typical agent development workflow.\n\n# What's Included\n\n- **Core types**: Messages, roles, tools, schemas, providers, output types, errors\n- **Agent types**: Config, trait, tool loop, sub-agents, workflows, messaging\n- **Generation functions**: `generate_text`, `stream_text`, `generate_object`, `stream_object`\n- **Tool types**: Registry, approval handlers, executors\n- **Health types**: Lifecycle state machine, health profiles, monitoring\n- **Identity types**: Create HMR/MHR roots, derive agents, verify lineage chains\n- **Auth types**: Tool authorization, capability delegation\n- **Async support**: `async_trait` macro for trait implementations\n\n# Examples\n\n```\nuse forge_sdk::prelude::*;\n\n// Create an agent config\nlet config = AgentConfig::new(\"assistant\", \"openai:gpt-4o\")\n    .with_system_prompt(\"You are helpful.\")\n    .with_max_steps(10);\n\nassert_eq!(config.name(), \"assistant\");\n```"
            },
            {
              "name": "pub use forge_core::message::{MessagePart, ModelMessage, Role};",
              "line": 267,
              "signature": "pub use forge_core::message::{MessagePart, ModelMessage, Role};",
              "documentation": "Message types for LLM communication."
            },
            {
              "name": "pub use forge_core::model::LanguageModel;",
              "line": 270,
              "signature": "pub use forge_core::model::LanguageModel;",
              "documentation": "The language model trait that all providers implement."
            },
            {
              "name": "pub use forge_core::provider::{ProviderRef, ProviderRegistry};",
              "line": 273,
              "signature": "pub use forge_core::provider::{ProviderRef, ProviderRegistry};",
              "documentation": "Provider reference and registry for model dispatch."
            },
            {
              "name": "pub use forge_core::tool::{ToolApproval, ToolCall, ToolDefinition, ToolResult, ToolTier};",
              "line": 276,
              "signature": "pub use forge_core::tool::{ToolApproval, ToolCall, ToolDefinition, ToolResult, ToolTier};",
              "documentation": "Tool definition types: 3-tier classification, calls, and results."
            },
            {
              "name": "pub use forge_core::config::GenerateOptions;",
              "line": 279,
              "signature": "pub use forge_core::config::GenerateOptions;",
              "documentation": "Configuration for generation calls."
            },
            {
              "name": "pub use forge_core::output::{FinishReason, GenerateResult, StreamChunk, Usage};",
              "line": 282,
              "signature": "pub use forge_core::output::{FinishReason, GenerateResult, StreamChunk, Usage};",
              "documentation": "Output types from generation calls."
            },
            {
              "name": "pub use forge_core::error::{ForgeError, ForgeResult};",
              "line": 285,
              "signature": "pub use forge_core::error::{ForgeError, ForgeResult};",
              "documentation": "Typed error types used across the Forge SDK."
            },
            {
              "name": "pub use forge_core::telemetry::{ForgeEvent, ForgeSpan, TelemetryEmitter};",
              "line": 288,
              "signature": "pub use forge_core::telemetry::{ForgeEvent, ForgeSpan, TelemetryEmitter};",
              "documentation": "Telemetry primitives for structured observability."
            },
            {
              "name": "pub use forge_core::types::{AgentDid, Timestamp};",
              "line": 291,
              "signature": "pub use forge_core::types::{AgentDid, Timestamp};",
              "documentation": "Common types: agent DIDs and timestamps."
            },
            {
              "name": "pub use forge_core::schema::JsonSchema;",
              "line": 294,
              "signature": "pub use forge_core::schema::JsonSchema;",
              "documentation": "Zero-dependency JSON schema representation."
            },
            {
              "name": "pub use forge_agent::agent::{\n        Agent, AgentCheckpointValidationError, AgentConfig, AgentOutput, AgentRunCheckpoint,\n        AGENT_RUN_CHECKPOINT_SCHEMA,\n    };",
              "line": 299,
              "signature": "pub use forge_agent::agent::{\n        Agent, AgentCheckpointValidationError, AgentConfig, AgentOutput, AgentRunCheckpoint,\n        AGENT_RUN_CHECKPOINT_SCHEMA,\n    };",
              "documentation": "The core agent trait and configuration."
            },
            {
              "name": "pub use forge_agent::tool_loop::ToolLoopAgent;",
              "line": 305,
              "signature": "pub use forge_agent::tool_loop::ToolLoopAgent;",
              "documentation": "The reference ANVIL agent execution loop."
            },
            {
              "name": "pub use forge_agent::subagent::{create_subagent, SubAgentConfig};",
              "line": 308,
              "signature": "pub use forge_agent::subagent::{create_subagent, SubAgentConfig};",
              "documentation": "Sub-agent creation with narrowed capabilities."
            },
            {
              "name": "pub use forge_agent::workflow::{\n        ParallelWorkflow, RouterWorkflow, SequentialWorkflow, WorkflowOutput,\n    };",
              "line": 311,
              "signature": "pub use forge_agent::workflow::{\n        ParallelWorkflow, RouterWorkflow, SequentialWorkflow, WorkflowOutput,\n    };",
              "documentation": "Workflow orchestration patterns: sequential, parallel, router."
            },
            {
              "name": "pub use forge_agent::loop_control::{\n        AgentStopCondition, NoOpPrepare, PrepareStep, StopWhen, StopWhenCustom, StopWhenMaxSteps,\n        StopWhenTextGenerated, StopWhenToolCalled,\n    };",
              "line": 316,
              "signature": "pub use forge_agent::loop_control::{\n        AgentStopCondition, NoOpPrepare, PrepareStep, StopWhen, StopWhenCustom, StopWhenMaxSteps,\n        StopWhenTextGenerated, StopWhenToolCalled,\n    };",
              "documentation": "Stop conditions and pre-step hooks for agent execution loops."
            },
            {
              "name": "pub use forge_agent::messaging::{\n        AgentChannel, AgentChannelReceiver, AgentChannelSender, AgentMessage,\n    };",
              "line": 325,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use forge_agent::messaging::{\n        AgentChannel, AgentChannelReceiver, AgentChannelSender, AgentMessage,\n    };",
              "documentation": "Inter-agent communication via bounded async channels.\n\nOnly available on non-WASM targets (requires `tokio::sync::mpsc`)."
            },
            {
              "name": "pub use forge_agent::error::{ForgeAgentError, ForgeAgentResult};",
              "line": 330,
              "signature": "pub use forge_agent::error::{ForgeAgentError, ForgeAgentResult};",
              "documentation": "Agent-specific error types."
            },
            {
              "name": "pub use forge_generate::generate_text;",
              "line": 335,
              "signature": "pub use forge_generate::generate_text;",
              "documentation": "Generate a complete text response from a language model."
            },
            {
              "name": "pub use forge_generate::stream_text;",
              "line": 338,
              "signature": "pub use forge_generate::stream_text;",
              "documentation": "Stream text responses incrementally from a language model."
            },
            {
              "name": "pub use forge_generate::generate_object;",
              "line": 341,
              "signature": "pub use forge_generate::generate_object;",
              "documentation": "Generate a schema-validated, deserialized object from a language model."
            },
            {
              "name": "pub use forge_generate::stream_object;",
              "line": 344,
              "signature": "pub use forge_generate::stream_object;",
              "documentation": "Stream a schema-validated object incrementally from a language model."
            },
            {
              "name": "pub use forge_tool::registry::ToolRegistry;",
              "line": 349,
              "signature": "pub use forge_tool::registry::ToolRegistry;",
              "documentation": "Runtime tool registry for managing registered tools."
            },
            {
              "name": "pub use forge_tool::approval::{ApprovalHandler, AutoApprove, DenyAll};",
              "line": 352,
              "signature": "pub use forge_tool::approval::{ApprovalHandler, AutoApprove, DenyAll};",
              "documentation": "Approval handlers: `AutoApprove`, `DenyAll`, and the `ApprovalHandler` trait."
            },
            {
              "name": "pub use forge_provider_coding::{\n        official_provider_registry, AuthorizedSessionExecution, AuthorizedSessionHandle,\n        AuthorizedSessionRequest, ClaudeCodeAdapter, CodexCliAdapter,\n        OfficialCodingProviderManager,\n    };",
              "line": 355,
              "signature": "#[cfg(all(feature = \"coding\", not(target_arch = \"wasm32\")))]\npub use forge_provider_coding::{\n        official_provider_registry, AuthorizedSessionExecution, AuthorizedSessionHandle,\n        AuthorizedSessionRequest, ClaudeCodeAdapter, CodexCliAdapter,\n        OfficialCodingProviderManager,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use forge_provider_platforms::{\n        approved_direct_provider_presets, approved_gateway_provider_presets, AuthStrategy,\n        ProviderFamily, ProviderPreset,\n    };",
              "line": 362,
              "signature": "#[cfg(feature = \"platforms\")]\npub use forge_provider_platforms::{\n        approved_direct_provider_presets, approved_gateway_provider_presets, AuthStrategy,\n        ProviderFamily, ProviderPreset,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use forge_provider_platforms::{\n        register_anthropic_model, register_bedrock_model, register_cohere_model,\n        register_deepseek_model, register_default_core_direct_providers, register_foundry_model,\n        register_google_model, register_groq_model, register_microsoft_foundry_model,\n        register_minimax_model, register_mistral_model, register_moonshot_model,\n        register_openai_model, register_openrouter_model, register_vertex_ai_model,\n        register_xai_model, register_zai_model,\n    };",
              "line": 368,
              "signature": "#[cfg(all(feature = \"platforms\", not(target_arch = \"wasm32\")))]\npub use forge_provider_platforms::{\n        register_anthropic_model, register_bedrock_model, register_cohere_model,\n        register_deepseek_model, register_default_core_direct_providers, register_foundry_model,\n        register_google_model, register_groq_model, register_microsoft_foundry_model,\n        register_minimax_model, register_mistral_model, register_moonshot_model,\n        register_openai_model, register_openrouter_model, register_vertex_ai_model,\n        register_xai_model, register_zai_model,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use forge_tool::execution::{execute_tool_call, FnToolExecutor, ToolExecutor};",
              "line": 378,
              "signature": "pub use forge_tool::execution::{execute_tool_call, FnToolExecutor, ToolExecutor};",
              "documentation": "Tool execution pipeline and executor types."
            },
            {
              "name": "pub use forge_tool::definition::ToolBuilder;",
              "line": 381,
              "signature": "pub use forge_tool::definition::ToolBuilder;",
              "documentation": "Fluent builder for constructing tool definitions."
            },
            {
              "name": "pub use forge_health::lifecycle::{LifecycleManager, LifecycleState, LifecycleTransition};",
              "line": 386,
              "signature": "pub use forge_health::lifecycle::{LifecycleManager, LifecycleState, LifecycleTransition};",
              "documentation": "Lifecycle state machine: 6 immutable states per ANVIL Spec section 13.2."
            },
            {
              "name": "pub use forge_health::profile::HealthProfile;",
              "line": 389,
              "signature": "pub use forge_health::profile::HealthProfile;",
              "documentation": "Runtime health profile tracking agent metrics."
            },
            {
              "name": "pub use forge_health::monitoring::{HealthMonitor, HealthThresholds};",
              "line": 392,
              "signature": "pub use forge_health::monitoring::{HealthMonitor, HealthThresholds};",
              "documentation": "Health monitoring with configurable thresholds."
            },
            {
              "name": "pub use forge_health::reporting::{HealthReport, HealthStatus};",
              "line": 395,
              "signature": "pub use forge_health::reporting::{HealthReport, HealthStatus};",
              "documentation": "Health status reporting."
            },
            {
              "name": "pub use forge_health::events::LifecycleEvent;",
              "line": 398,
              "signature": "pub use forge_health::events::LifecycleEvent;",
              "documentation": "Lifecycle events emitted at every state transition."
            },
            {
              "name": "pub use forge_identity::agent_identity::ForgeAgentIdentity;",
              "line": 403,
              "signature": "pub use forge_identity::agent_identity::ForgeAgentIdentity;",
              "documentation": "The core agent identity binding: keypair, DID document, and lineage."
            },
            {
              "name": "pub use forge_identity::lineage::{\n        create_hmr_identity, create_mhr_identity, derive_agent_identity, verify_lineage_chain,\n    };",
              "line": 406,
              "signature": "pub use forge_identity::lineage::{\n        create_hmr_identity, create_mhr_identity, derive_agent_identity, verify_lineage_chain,\n    };",
              "documentation": "High-level identity workflows: create roots, derive agents, verify chains."
            },
            {
              "name": "pub use forge_identity::persistence::{load_identity, save_identity};",
              "line": 412,
              "signature": "#[allow(deprecated)]\npub use forge_identity::persistence::{load_identity, save_identity};",
              "documentation": "Identity persistence: save and load from JSON files."
            },
            {
              "name": "pub use forge_identity::error::{ForgeIdentityError, ForgeIdentityResult};",
              "line": 415,
              "signature": "pub use forge_identity::error::{ForgeIdentityError, ForgeIdentityResult};",
              "documentation": "Identity-specific error types."
            },
            {
              "name": "pub use forge_auth::tool_auth::{\n        authorize_tool_invocation, ToolAuthorizationDecision, ToolAuthorizationRequest,\n    };",
              "line": 420,
              "signature": "pub use forge_auth::tool_auth::{\n        authorize_tool_invocation, ToolAuthorizationDecision, ToolAuthorizationRequest,\n    };",
              "documentation": "Tool authorization decision and request types (ANVIL Spec section 8.7)."
            },
            {
              "name": "pub use forge_auth::delegation::{delegate_capabilities, DelegationRequest};",
              "line": 425,
              "signature": "pub use forge_auth::delegation::{delegate_capabilities, DelegationRequest};",
              "documentation": "Capability delegation for sub-agents (ANVIL Spec section 11.3)."
            },
            {
              "name": "pub use forge_auth::capability::{act_allows_scope, extract_scopes, verify_act};",
              "line": 428,
              "signature": "pub use forge_auth::capability::{act_allows_scope, extract_scopes, verify_act};",
              "documentation": "ACT verification and scope extraction."
            },
            {
              "name": "pub use forge_auth::error::{ForgeAuthError, ForgeAuthResult};",
              "line": 431,
              "signature": "pub use forge_auth::error::{ForgeAuthError, ForgeAuthResult};",
              "documentation": "Auth-specific error types."
            },
            {
              "name": "pub use crate::adapters::AegisVerificationAdapter;",
              "line": 436,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::adapters::AegisVerificationAdapter;",
              "documentation": ""
            },
            {
              "name": "pub use crate::adapters::{\n        ArsenalAuthorizationAdapter, AuthorizationAdapter, DocumentRevocationState,\n        DocumentVerification, ForgePlatformAdapters, HumanRootLivenessState, IdentityAdapter,\n        OasIdentityAdapter, VerificationAdapter, VerificationAdapterError,\n        VerificationAdapterResult,\n    };",
              "line": 438,
              "signature": "pub use crate::adapters::{\n        ArsenalAuthorizationAdapter, AuthorizationAdapter, DocumentRevocationState,\n        DocumentVerification, ForgePlatformAdapters, HumanRootLivenessState, IdentityAdapter,\n        OasIdentityAdapter, VerificationAdapter, VerificationAdapterError,\n        VerificationAdapterResult,\n    };",
              "documentation": "Forge-owned adapter contracts and the production reference adapters."
            },
            {
              "name": "pub use forge_comm::message::AgentMessage as CommMessage;",
              "line": 451,
              "signature": "pub use forge_comm::message::AgentMessage as CommMessage;",
              "documentation": "Communication message envelope for inter-agent communication (ANVIL Spec \u00a710.2).\n\nThis is the full-featured envelope type from `forge-comm`. For the simpler\nchannel-based messaging, see [`AgentMessage`] from `forge-agent`."
            },
            {
              "name": "pub use forge_comm::transport::MessageTransport;",
              "line": 455,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use forge_comm::transport::MessageTransport;",
              "documentation": "Transport trait for pluggable inter-agent communication backends."
            },
            {
              "name": "pub use forge_comm::noop::NoopTransport;",
              "line": 458,
              "signature": "pub use forge_comm::noop::NoopTransport;",
              "documentation": "No-op transport for standalone agents without communication needs."
            },
            {
              "name": "pub use forge_collab::types::CollaborationRole;",
              "line": 463,
              "signature": "pub use forge_collab::types::CollaborationRole;",
              "documentation": "Collaboration roles: Coordinator, Worker, Peer."
            },
            {
              "name": "pub use forge_collab::types::CollaborationSession;",
              "line": 466,
              "signature": "pub use forge_collab::types::CollaborationSession;",
              "documentation": "Collaboration session for multi-agent coordination."
            },
            {
              "name": "pub use forge_collab::types::DelegatedTask;",
              "line": 469,
              "signature": "pub use forge_collab::types::DelegatedTask;",
              "documentation": "Delegated task from coordinator to worker."
            },
            {
              "name": "pub use forge_collab::types::TaskResult;",
              "line": 472,
              "signature": "pub use forge_collab::types::TaskResult;",
              "documentation": "Result of a delegated task execution."
            },
            {
              "name": "pub use forge_collab::types::Interrupt;",
              "line": 475,
              "signature": "pub use forge_collab::types::Interrupt;",
              "documentation": "Interrupt for priority-based agent preemption."
            },
            {
              "name": "pub use forge_collab::types::AgentCapabilityProfile;",
              "line": 478,
              "signature": "pub use forge_collab::types::AgentCapabilityProfile;",
              "documentation": "Agent capability profile for advertising capabilities."
            },
            {
              "name": "pub use forge_telemetry::contract::TelemetryContract;",
              "line": 483,
              "signature": "pub use forge_telemetry::contract::TelemetryContract;",
              "documentation": "Telemetry contract trait for pluggable observability backends."
            },
            {
              "name": "pub use forge_telemetry::contract::NoopTelemetry;",
              "line": 486,
              "signature": "pub use forge_telemetry::contract::NoopTelemetry;",
              "documentation": "No-op telemetry implementation that discards all spans."
            },
            {
              "name": "pub use forge_telemetry::collector::InMemoryTelemetry;",
              "line": 489,
              "signature": "pub use forge_telemetry::collector::InMemoryTelemetry;",
              "documentation": "In-memory telemetry collector for testing."
            },
            {
              "name": "pub use forge_telemetry::audit::AuditTrail;",
              "line": 492,
              "signature": "pub use forge_telemetry::audit::AuditTrail;",
              "documentation": "Signed audit trail for accountability."
            },
            {
              "name": "pub use async_trait::async_trait;",
              "line": 497,
              "signature": "pub use async_trait::async_trait;",
              "documentation": "Re-export of `async_trait` for implementing async traits such as `Agent`."
            },
            {
              "name": "::version",
              "line": 511,
              "signature": "pub fn version() -> &'static str;",
              "documentation": "Returns the Forge SDK version string.\n\nThis returns the version of the `forge-sdk` crate as defined in its\n`Cargo.toml`. All Forge crates share the same workspace version.\n\n# Examples\n\n```\nlet version = forge_sdk::version();\nassert!(!version.is_empty());\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-provider-coding",
      "language": "rust",
      "version": "0.2.0",
      "description": "Official coding-provider adapters for the Forge SDK",
      "manifest": "forge-rs/crates/forge-provider-coding/Cargo.toml",
      "manifestSha256": "87e8e1cea482fc512e00d6be2338d99eddbcf2a3b26c0749ce7f035463c91635",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-provider-coding",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-provider-coding/src/lib.rs",
          "sha256": "c4f2e4a02fd5048b3c7433d03fcb21e6150af04cbc3e6f3a025919666e25627b",
          "artifactSha256": "bc7f79584b624a7a82962171d55dcfbda33e62796667559211df96c2d45bd5e6",
          "url": "/reference/source/forge-rs/crates/forge-provider-coding/src/lib.rs.txt",
          "declarations": [
            {
              "name": "::CliCommandSpec",
              "line": 61,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct CliCommandSpec {\npub program: String,\npub args: Vec<String>,\npub current_dir: Option<PathBuf>,\npub final_output_path: Option<PathBuf>\n}",
              "documentation": ""
            },
            {
              "name": "::AuthorizedSessionRequest",
              "line": 69,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct AuthorizedSessionRequest {\npub provider_ref: String,\npub required_capabilities: Vec<RuntimeCapability>,\npub prompt: String,\npub system_prompt: Option<String>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub working_directory: Option<PathBuf>,\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub timeout_seconds: Option<u64>\n}",
              "documentation": ""
            },
            {
              "name": "::AuthorizedSessionExecution",
              "line": 81,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct AuthorizedSessionExecution {\npub session_id: String,\npub provider_ref: String,\npub events: Vec<ProviderSessionEvent>,\npub usage: ProviderUsageSummary\n}",
              "documentation": ""
            },
            {
              "name": "::AuthorizedSessionHandle",
              "line": 90,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\n#[derive(Clone)]\npub struct AuthorizedSessionHandle {\n\n}",
              "documentation": ""
            },
            {
              "name": "::AuthorizedSessionHandle::session_id",
              "line": 99,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn session_id(&self) -> &str;",
              "documentation": ""
            },
            {
              "name": "::AuthorizedSessionHandle::provider_ref",
              "line": 103,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn provider_ref(&self) -> &str;",
              "documentation": ""
            },
            {
              "name": "::AuthorizedSessionHandle::preflight",
              "line": 107,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn preflight(&self) -> &CodingProviderPreflight;",
              "documentation": ""
            },
            {
              "name": "::AuthorizedSessionHandle::execute",
              "line": 111,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub async fn execute(&self) -> ForgeResult<AuthorizedSessionExecution>;",
              "documentation": ""
            },
            {
              "name": "::OfficialCodingProviderManager",
              "line": 224,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub struct OfficialCodingProviderManager {\n\n}",
              "documentation": ""
            },
            {
              "name": "::OfficialCodingProviderManager::new",
              "line": 230,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn new() -> ForgeResult<Self>;",
              "documentation": ""
            },
            {
              "name": "::OfficialCodingProviderManager::registry",
              "line": 236,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn registry(&self) -> &ProviderRegistry;",
              "documentation": ""
            },
            {
              "name": "::OfficialCodingProviderManager::start_authorized_session",
              "line": 240,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub async fn start_authorized_session<V: ProviderAuthorityVerifier>(\n        &self,\n        agent: &AgentConfig,\n        request: &AuthorizedSessionRequest,\n        verifier: &V,\n    ) -> Result<AuthorizedSessionHandle, ForgeAgentError>;",
              "documentation": ""
            },
            {
              "name": "::official_provider_registry",
              "line": 269,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn official_provider_registry() -> ForgeResult<ProviderRegistry>;",
              "documentation": ""
            },
            {
              "name": "::register_official_coding_providers",
              "line": 276,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_official_coding_providers(registry: &mut ProviderRegistry) -> ForgeResult<()>;",
              "documentation": ""
            },
            {
              "name": "::OpenAiCompatibleCodingLanguageModel",
              "line": 329,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\n#[derive(Debug, Clone)]\npub struct OpenAiCompatibleCodingLanguageModel {\n\n}",
              "documentation": ""
            },
            {
              "name": "::OpenAiCompatibleCodingLanguageModel::new",
              "line": 339,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn new(\n        provider_namespace: impl Into<String>,\n        model_id: impl Into<String>,\n        api_key_env: impl Into<String>,\n        base_url_env: impl Into<String>,\n        default_base_url: impl Into<String>,\n    ) -> Self;",
              "documentation": ""
            },
            {
              "name": "::CodexCliAdapter",
              "line": 445,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\n#[derive(Debug, Clone)]\npub struct CodexCliAdapter {\npub program: String\n}",
              "documentation": ""
            },
            {
              "name": "::CodexCliAdapter::build_command",
              "line": 460,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn build_command(\n        &self,\n        prompt: &str,\n        system_prompt: Option<&str>,\n        cwd: Option<&Path>,\n    ) -> CliCommandSpec;",
              "documentation": ""
            },
            {
              "name": "::ClaudeCodeAdapter",
              "line": 487,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\n#[derive(Debug, Clone)]\npub struct ClaudeCodeAdapter {\npub program: String\n}",
              "documentation": ""
            },
            {
              "name": "::ClaudeCodeAdapter::build_command",
              "line": 502,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn build_command(\n        &self,\n        prompt: &str,\n        system_prompt: Option<&str>,\n        cwd: Option<&Path>,\n    ) -> CliCommandSpec;",
              "documentation": ""
            },
            {
              "name": "::official_provider_metadata",
              "line": 934,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn official_provider_metadata<'a>(\n    registry: &'a ProviderRegistry,\n    provider_ref: &str,\n) -> Option<&'a ProviderMetadata>;",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "forge-provider-platforms",
      "language": "rust",
      "version": "0.2.0",
      "description": "Official direct-provider and gateway adapters for the Forge SDK",
      "manifest": "forge-rs/crates/forge-provider-platforms/Cargo.toml",
      "manifestSha256": "a3cace21f89f274728c814a24c96b0d2d1c1867fbbc8494c9f6887149f47bccd",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-provider-platforms",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-provider-platforms/src/lib.rs",
          "sha256": "092754cb834f0ceaed06cfd6c11a403aa7c4eedd6b774b1f804325f47edf31b1",
          "artifactSha256": "22e152bbac8f86c64fb4aef611dafa3febc724acaf33598ca67b605c4fe22103",
          "url": "/reference/source/forge-rs/crates/forge-provider-platforms/src/lib.rs.txt",
          "declarations": [
            {
              "name": "::ProviderFamily",
              "line": 61,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum ProviderFamily {\n    DirectModel,\n    Gateway,\n}",
              "documentation": ""
            },
            {
              "name": "::AuthStrategy",
              "line": 67,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum AuthStrategy {\n    ApiKey,\n    AccessToken,\n    BrowserAccountLogin,\n    CloudCredentials,\n}",
              "documentation": ""
            },
            {
              "name": "::ProviderPreset",
              "line": 75,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct ProviderPreset {\npub namespace: &'static str,\npub family: ProviderFamily,\npub auth_strategy: AuthStrategy\n}",
              "documentation": ""
            },
            {
              "name": "::approved_direct_provider_presets",
              "line": 81,
              "signature": "pub fn approved_direct_provider_presets() -> Vec<ProviderPreset>;",
              "documentation": ""
            },
            {
              "name": "::approved_gateway_provider_presets",
              "line": 141,
              "signature": "pub fn approved_gateway_provider_presets() -> Vec<ProviderPreset>;",
              "documentation": ""
            },
            {
              "name": "::register_default_core_direct_providers",
              "line": 172,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_default_core_direct_providers(registry: &mut ProviderRegistry) -> ForgeResult<()>;",
              "documentation": ""
            },
            {
              "name": "::register_openai_model",
              "line": 180,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_openai_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_anthropic_model",
              "line": 200,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_anthropic_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_google_model",
              "line": 219,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_google_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_xai_model",
              "line": 238,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_xai_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_deepseek_model",
              "line": 253,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_deepseek_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_mistral_model",
              "line": 268,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_mistral_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_cohere_model",
              "line": 283,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_cohere_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_groq_model",
              "line": 298,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_groq_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_moonshot_model",
              "line": 313,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_moonshot_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_zai_model",
              "line": 328,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_zai_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_minimax_model",
              "line": 343,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_minimax_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_openrouter_model",
              "line": 358,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_openrouter_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_bedrock_model",
              "line": 373,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_bedrock_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_vertex_ai_model",
              "line": 388,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_vertex_ai_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_microsoft_foundry_model",
              "line": 403,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_microsoft_foundry_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            },
            {
              "name": "::register_foundry_model",
              "line": 418,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub fn register_foundry_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n) -> ForgeResult<String>;",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "forge-provider-openai",
      "language": "rust",
      "version": "0.2.0",
      "description": "OpenAI provider for the Forge SDK \u2014 implements the LanguageModel trait for OpenAI ChatCompletion API",
      "manifest": "forge-rs/crates/forge-provider-openai/Cargo.toml",
      "manifestSha256": "f90ffd081fff1c6dbc481539d5d6f2dec8116854555bd2796c9c4e24db699cab",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-provider-openai",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-provider-openai/src/client.rs",
          "sha256": "5829bf861c0772e914d7043a1685bf7c1434483c6da50094bd1f1811b4c3d22b",
          "artifactSha256": "771035dd66de76a3a7274fac803a2c1d2796faad71544c1e4e69899e3b1ca402",
          "url": "/reference/source/forge-rs/crates/forge-provider-openai/src/client.rs.txt",
          "declarations": []
        },
        {
          "path": "forge-rs/crates/forge-provider-openai/src/config.rs",
          "sha256": "668964c68fbef1e1b6f3b854fd79870af67f3fe4bedeccc751f1349a83d4b625",
          "artifactSha256": "f92d3b3aa3862e9610f060ac9aa6611690c18bca2aeb2cb45fe7ceade9edfffa",
          "url": "/reference/source/forge-rs/crates/forge-provider-openai/src/config.rs.txt",
          "declarations": [
            {
              "name": "::OpenAiConfig",
              "line": 55,
              "signature": "#[derive(Clone)]\npub struct OpenAiConfig {\n\n}",
              "documentation": "Configuration for connecting to the OpenAI API.\n\nContains the API key, base URL, optional organization header, timeout,\nand retry settings.\n\n# Security\n\nThe `Debug` implementation **always** redacts the API key. The key is\nnever written to logs, error messages, or debug output.\n\n# Examples\n\n```\nuse forge_provider_openai::OpenAiConfig;\n\nlet config = OpenAiConfig::builder(\"sk-test-key-123\").build();\nlet debug_output = format!(\"{:?}\", config);\nassert!(!debug_output.contains(\"sk-test-key-123\"));\nassert!(debug_output.contains(\"[REDACTED]\"));\n```"
            },
            {
              "name": "::OpenAiConfig::builder",
              "line": 87,
              "signature": "pub fn builder(api_key: impl Into<String>) -> OpenAiConfigBuilder;",
              "documentation": "Creates a new configuration builder.\n\n# Arguments\n\n* `api_key` - The OpenAI API key. This is required and cannot be empty.\n\n# Returns\n\nAn `OpenAiConfigBuilder` with default values for all optional fields.\n\n# Examples\n\n```\nuse forge_provider_openai::OpenAiConfig;\n\nlet config = OpenAiConfig::builder(\"sk-my-key\").build();\nassert_eq!(config.base_url(), \"https://api.openai.com/v1\");\n```"
            },
            {
              "name": "::OpenAiConfig::base_url",
              "line": 112,
              "signature": "pub fn base_url(&self) -> &str;",
              "documentation": "Returns the base URL for API requests.\n\n# Returns\n\nThe configured base URL (e.g., `\"https://api.openai.com/v1\"`)."
            },
            {
              "name": "::OpenAiConfig::organization",
              "line": 121,
              "signature": "pub fn organization(&self) -> Option<&str>;",
              "documentation": "Returns the optional organization identifier.\n\n# Returns\n\n`Some(&str)` if an organization was configured, `None` otherwise."
            },
            {
              "name": "::OpenAiConfig::timeout_seconds",
              "line": 126,
              "signature": "pub fn timeout_seconds(&self) -> u64;",
              "documentation": "Returns the request timeout in seconds."
            },
            {
              "name": "::OpenAiConfig::max_retries",
              "line": 131,
              "signature": "pub fn max_retries(&self) -> u32;",
              "documentation": "Returns the maximum number of retries for transient errors."
            },
            {
              "name": "::OpenAiConfigBuilder",
              "line": 165,
              "signature": "pub struct OpenAiConfigBuilder {\n\n}",
              "documentation": "Builder for [`OpenAiConfig`].\n\nAll optional fields have sensible defaults:\n- `base_url`: `\"https://api.openai.com/v1\"`\n- `timeout_seconds`: `60`\n- `max_retries`: `3`\n\n# Examples\n\n```\nuse forge_provider_openai::OpenAiConfig;\n\nlet config = OpenAiConfig::builder(\"sk-key\")\n    .base_url(\"https://custom-proxy.example.com/v1\")\n    .timeout_seconds(90)\n    .build();\n```"
            },
            {
              "name": "::OpenAiConfigBuilder::base_url",
              "line": 184,
              "signature": "pub fn base_url(mut self, url: impl Into<String>) -> Self;",
              "documentation": "Sets the base URL for API requests.\n\n# Arguments\n\n* `url` - The base URL (e.g., `\"https://api.openai.com/v1\"`).\n  Trailing slashes are stripped.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::OpenAiConfigBuilder::organization",
              "line": 199,
              "signature": "pub fn organization(mut self, org: impl Into<String>) -> Self;",
              "documentation": "Sets the organization identifier for multi-org accounts.\n\n# Arguments\n\n* `org` - The organization ID (e.g., `\"org-abc123\"`).\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::OpenAiConfigBuilder::timeout_seconds",
              "line": 213,
              "signature": "pub fn timeout_seconds(mut self, seconds: u64) -> Self;",
              "documentation": "Sets the request timeout in seconds.\n\n# Arguments\n\n* `seconds` - Timeout duration. Must be greater than 0.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::OpenAiConfigBuilder::max_retries",
              "line": 230,
              "signature": "pub fn max_retries(mut self, retries: u32) -> Self;",
              "documentation": "Sets the maximum number of retries for transient errors.\n\nRetries are attempted for HTTP 429 (rate limit) and 5xx (server error)\nresponses, using exponential backoff with jitter.\n\n# Arguments\n\n* `retries` - Maximum retry count. Set to 0 to disable retries.\n\n# Returns\n\nThe builder for chaining."
            },
            {
              "name": "::OpenAiConfigBuilder::build",
              "line": 240,
              "signature": "pub fn build(self) -> OpenAiConfig;",
              "documentation": "Builds the [`OpenAiConfig`].\n\n# Returns\n\nThe configured `OpenAiConfig` instance."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-openai/src/error.rs",
          "sha256": "6b0f971c10b6415cceb05f77a3e0a5d6de346f65a61dd121e746fea1e61312c1",
          "artifactSha256": "48e605681c8c2e6c9569409e145d8cd6a6439e3d3af8c946657ae5b1a03e85c8",
          "url": "/reference/source/forge-rs/crates/forge-provider-openai/src/error.rs.txt",
          "declarations": [
            {
              "name": "::OpenAiError",
              "line": 30,
              "signature": "#[derive(Debug, Error)]\npub enum OpenAiError {\n    /// The OpenAI API returned an HTTP error response.\n    ///\n    /// Common status codes:\n    /// - 400: malformed request (check message format)\n    /// - 401: invalid API key\n    /// - 403: insufficient permissions\n    /// - 404: model not found\n    /// - 429: rate limited\n    /// - 500+: server error (retryable)\n    #[error(\n        \"OpenAI API returned HTTP {status}: {body} (check request format and API key permissions)\"\n    )]\n    HttpError {\n        /// The HTTP status code.\n        status: u16,\n        /// The response body (may contain OpenAI error details).\n        body: String,\n    },\n\n    /// Failed to connect to the OpenAI API endpoint.\n    ///\n    /// Check network connectivity, firewall rules, and the configured base URL.\n    #[error(\"failed to connect to OpenAI API at '{url}': {reason} (check network connectivity and base_url configuration)\")]\n    ConnectionFailed {\n        /// The URL that was being connected to.\n        url: String,\n        /// The underlying connection error.\n        reason: String,\n    },\n\n    /// The request timed out waiting for a response.\n    ///\n    /// Consider increasing `timeout_seconds` in `OpenAiConfig` or reducing\n    /// `max_tokens` to speed up generation.\n    #[error(\"OpenAI API request to '{url}' timed out after {timeout_seconds}s (consider increasing timeout_seconds in OpenAiConfig or reducing max_tokens)\")]\n    Timeout {\n        /// The URL that timed out.\n        url: String,\n        /// The configured timeout in seconds.\n        timeout_seconds: u64,\n    },\n\n    /// The API response could not be parsed.\n    ///\n    /// This typically indicates an API version mismatch or an unexpected\n    /// response format. Check the OpenAI API changelog for breaking changes.\n    #[error(\"invalid response from OpenAI API: {reason} (this may indicate an API version mismatch; check the OpenAI API changelog)\")]\n    InvalidResponse {\n        /// Description of what was wrong with the response.\n        reason: String,\n    },\n\n    /// The API returned a rate limit error (HTTP 429).\n    ///\n    /// The provider will automatically retry with exponential backoff. If this\n    /// error surfaces, all retries have been exhausted.\n    #[error(\"OpenAI API rate limited; all retries exhausted{}\", match .retry_after_ms {\n        Some(ms) => format!(\" (server suggested retry after {ms}ms)\"),\n        None => String::new(),\n    })]\n    RateLimited {\n        /// Milliseconds to wait before retrying, if provided by the server.\n        retry_after_ms: Option<u64>,\n    },\n\n    /// Authentication failed (HTTP 401).\n    ///\n    /// The API key is invalid, expired, or missing.\n    #[error(\"OpenAI API authentication failed: {hint}\")]\n    AuthenticationFailed {\n        /// Actionable hint for resolving the auth issue.\n        hint: String,\n    },\n\n    /// An error occurred while parsing the SSE stream.\n    ///\n    /// This may indicate a network interruption during streaming or an\n    /// unexpected stream format.\n    #[error(\"OpenAI streaming error: {reason}\")]\n    StreamError {\n        /// Description of the stream parsing failure.\n        reason: String,\n    },\n\n    /// JSON serialization or deserialization failed.\n    ///\n    /// This typically means a request or response struct is malformed.\n    #[error(\"JSON serialization error: {0}\")]\n    SerializationError(#[from] serde_json::Error),\n\n    /// The request could not be constructed.\n    ///\n    /// This indicates an internal error in request building.\n    #[error(\"failed to build HTTP request: {reason}\")]\n    RequestBuildError {\n        /// Description of the request construction failure.\n        reason: String,\n    },\n}",
              "documentation": "Errors specific to the OpenAI provider.\n\nEach variant includes actionable context: what failed, why, and what\nthe developer should check.\n\n# Examples\n\n```\nuse forge_provider_openai::OpenAiError;\n\nlet err = OpenAiError::AuthenticationFailed {\n    hint: \"check that OPENAI_API_KEY is set and valid\".to_string(),\n};\nassert!(err.to_string().contains(\"OPENAI_API_KEY\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-openai/src/lib.rs",
          "sha256": "b2ed35a2d5e409a8a23683a9d6af61a52f840d7ebe3c9389744fc49cefdc1343",
          "artifactSha256": "2799e31465a56599b59bdca651a3afa2c8af60571fcef4eb4539e704efd6aa4c",
          "url": "/reference/source/forge-rs/crates/forge-provider-openai/src/lib.rs.txt",
          "declarations": [
            {
              "name": "client",
              "line": 57,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod client;",
              "documentation": "# forge-provider-openai\n\nOpenAI provider for the Forge SDK, implementing the `LanguageModel` trait\nfrom `forge-core` for the [OpenAI ChatCompletion API](https://platform.openai.com/docs/api-reference/chat).\n\nThis crate translates between Forge's provider-agnostic message types and\nOpenAI's API format. It handles authentication, retries with exponential\nbackoff, SSE streaming, and structured output via `response_format`.\n\n# ANVIL Spec Reference\n\nANVIL Spec \u00a76.1 \u2014 Cognitive Interface: this provider satisfies the\n`LanguageModel` contract for the `openai` namespace.\n\n# Supported Models\n\n- `gpt-4o`, `gpt-4o-mini` \u2014 full feature set (tools, images, streaming, structured output)\n- `o1`, `o3`, `o3-mini`, `o4-mini` \u2014 reasoning models (limited temperature/system support)\n- `gpt-4-turbo`, `gpt-3.5-turbo` \u2014 legacy models\n\n# Examples\n\n```no_run\nuse forge_provider_openai::{OpenAiLanguageModel, OpenAiConfig};\nuse forge_core::model::LanguageModel;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet config = OpenAiConfig::builder(\"sk-your-api-key\")\n    .base_url(\"https://api.openai.com/v1\")\n    .build();\n\nlet model = OpenAiLanguageModel::new(\"gpt-4o\".to_string(), config)?;\n\nlet messages = vec![\n    ModelMessage::text(Role::System, \"You are a helpful assistant.\"),\n    ModelMessage::text(Role::User, \"What is 2+2?\"),\n];\n\nlet result = model.generate(&messages, &[], &GenerateOptions::default()).await?;\nprintln!(\"{}\", result.text());\n# Ok(())\n# }\n```\n\n# Security\n\n- API keys are **never** logged. The `Debug` implementation for `OpenAiConfig`\n  redacts the key.\n- All HTTP communication uses TLS via `hyper-tls`.\n- No `unsafe` code \u2014 enforced via `#![forbid(unsafe_code)]`."
            },
            {
              "name": "config",
              "line": 59,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod config;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 60,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "model",
              "line": 62,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod model;",
              "documentation": ""
            },
            {
              "name": "sse",
              "line": 64,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod sse;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 65,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "pub use config::{OpenAiConfig, OpenAiConfigBuilder};",
              "line": 68,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use config::{OpenAiConfig, OpenAiConfigBuilder};",
              "documentation": ""
            },
            {
              "name": "pub use error::OpenAiError;",
              "line": 69,
              "signature": "pub use error::OpenAiError;",
              "documentation": ""
            },
            {
              "name": "pub use model::OpenAiLanguageModel;",
              "line": 71,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use model::OpenAiLanguageModel;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-openai/src/model.rs",
          "sha256": "63f9fdc57e6484c3ae0c23060f7c86b58db7477e8b9a48cb1f255ad87666c690",
          "artifactSha256": "9b6ccd3692d8bcc52c79a0a8ad2df9bdc1bb1d842197fa01aa62b93cbd61bce2",
          "url": "/reference/source/forge-rs/crates/forge-provider-openai/src/model.rs.txt",
          "declarations": [
            {
              "name": "::OpenAiLanguageModel",
              "line": 76,
              "signature": "pub struct OpenAiLanguageModel {\n\n}",
              "documentation": "OpenAI language model implementing the Forge `LanguageModel` trait.\n\nProvides text generation and streaming via the OpenAI ChatCompletion API.\nHandles message translation, tool calling, structured output, and\nmodel-specific quirks.\n\n# ANVIL Spec \u00a76.1\n\nThis implementation satisfies the cognitive interface contract for the\n`openai` provider namespace.\n\n# Examples\n\n```no_run\nuse forge_provider_openai::{OpenAiLanguageModel, OpenAiConfig};\nuse forge_core::model::LanguageModel;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet config = OpenAiConfig::builder(\"sk-your-key\").build();\nlet model = OpenAiLanguageModel::new(\"gpt-4o\".to_string(), config)?;\n\nassert_eq!(model.model_id(), \"gpt-4o\");\nassert_eq!(model.provider(), \"openai\");\nassert!(model.supports_tool_calling());\nassert!(model.supports_image_input()); // gpt-4o supports vision\n# Ok(())\n# }\n```"
            },
            {
              "name": "::OpenAiLanguageModel::new",
              "line": 112,
              "signature": "pub fn new(model_id: String, config: OpenAiConfig) -> ForgeResult<Self>;",
              "documentation": "Creates a new OpenAI language model instance.\n\n# Arguments\n\n* `model_id` - The OpenAI model identifier (e.g., \"gpt-4o\", \"o3-mini\").\n* `config` - The provider configuration with API key and settings.\n\n# Returns\n\nThe initialized model, ready for inference calls.\n\n# Errors\n\nReturns `ForgeError::MissingConfig` if the API key is empty.\n\n# Examples\n\n```no_run\nuse forge_provider_openai::{OpenAiLanguageModel, OpenAiConfig};\n\nlet config = OpenAiConfig::builder(\"sk-key\").build();\nlet model = OpenAiLanguageModel::new(\"gpt-4o\".to_string(), config);\nassert!(model.is_ok());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-openai/src/sse.rs",
          "sha256": "dbd9f3a1872382987a1db08da44f89e56a537d565890326b3ca418caded00993",
          "artifactSha256": "97d1299a13bb1aeea378c3d839593067246f9a533949a46feaad498e59e88580",
          "url": "/reference/source/forge-rs/crates/forge-provider-openai/src/sse.rs.txt",
          "declarations": [
            {
              "name": "::parse_sse_response",
              "line": 61,
              "signature": "pub fn parse_sse_response(body: &str) -> Result<Vec<ChatCompletionChunk>, OpenAiError>;",
              "documentation": "Parses a raw SSE response body into a vector of `ChatCompletionChunk`.\n\nProcesses each `data:` line, ignoring comment lines (starting with `:`)\nand blank lines. The stream terminates when `data: [DONE]` is encountered.\n\n# Arguments\n\n* `body` - The raw SSE response body as a string.\n\n# Returns\n\nA vector of parsed `ChatCompletionChunk` objects.\n\n# Errors\n\nReturns `OpenAiError::StreamError` if:\n- A `data:` line contains invalid JSON.\n- The response body is empty and contains no data lines.\n\n# Examples\n\n```\nuse forge_provider_openai::sse::parse_sse_response;\n\nlet body = \"data: {\\\"id\\\":\\\"abc\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"Hi\\\"},\\\"finish_reason\\\":null}]}\\n\\ndata: [DONE]\\n\\n\";\nlet chunks = parse_sse_response(body);\nassert!(chunks.is_ok());\n```"
            },
            {
              "name": "::DecoderState",
              "line": 113,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum DecoderState {\n    /// Stream is ongoing; more data can be fed.\n    Continue,\n    /// Terminal `[DONE]` sentinel observed; further bytes will be ignored.\n    Done,\n}",
              "documentation": "Outcome of feeding bytes into [`OpenAiSseDecoder`]."
            },
            {
              "name": "::OpenAiSseDecoder",
              "line": 139,
              "signature": "pub struct OpenAiSseDecoder {\n\n}",
              "documentation": "Stateful SSE decoder for incremental byte streams from OpenAI.\n\nBuffers partial events across `feed(&[u8])` calls and yields complete\n`ChatCompletionChunk` values via `drain()`. Tolerates byte-chunk\nboundaries that split events anywhere \u2014 the only producer guarantee is\nthat line terminators (`\\n` or `\\r\\n`) appear at byte boundaries where\nthe producer wrote them.\n\n# Examples\n\n```\nuse forge_provider_openai::sse::OpenAiSseDecoder;\n\nlet mut decoder = OpenAiSseDecoder::new();\ndecoder.feed(b\"data: {\\\"id\\\":\\\"x\\\",\\\"choices\\\":[]}\\n\\ndata: [DONE]\\n\\n\").unwrap();\nlet chunks = decoder.drain();\nassert_eq!(chunks.len(), 1);\nassert_eq!(chunks[0].id, \"x\");\n```"
            },
            {
              "name": "::OpenAiSseDecoder::new",
              "line": 150,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new, empty decoder."
            },
            {
              "name": "::OpenAiSseDecoder::feed",
              "line": 167,
              "signature": "pub fn feed(&mut self, bytes: &[u8]) -> Result<DecoderState, OpenAiError>;",
              "documentation": "Feeds raw bytes into the decoder. Any complete events that become\navailable are queued; call [`drain`](Self::drain) to take them.\nReturns `DecoderState::Done` once `[DONE]` has been observed.\n\n# Errors\n\nReturns `OpenAiError::StreamError` if a complete `data:` line's JSON\npayload fails to deserialize into [`ChatCompletionChunk`]. Partial\nevents (still waiting for more bytes) never error here."
            },
            {
              "name": "::OpenAiSseDecoder::drain",
              "line": 224,
              "signature": "pub fn drain(&mut self) -> Vec<ChatCompletionChunk>;",
              "documentation": "Drains all events ready to be consumed."
            },
            {
              "name": "::OpenAiSseDecoder::is_done",
              "line": 229,
              "signature": "pub fn is_done(&self) -> bool;",
              "documentation": "Whether the terminal `[DONE]` sentinel has been observed."
            },
            {
              "name": "::OpenAiSseDecoder::finish",
              "line": 239,
              "signature": "pub fn finish(&mut self) -> Result<Vec<ChatCompletionChunk>, OpenAiError>;",
              "documentation": "Signals end-of-stream, processing any leftover unterminated bytes as\na (best-effort) final line. Returns any remaining queued events.\n\nOpenAI streams normally end with `data: [DONE]\\n\\n`, but if the\nupstream connection drops without that, this method tries to parse\nany final partial line."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-openai/src/types.rs",
          "sha256": "00f18148d69dd6550005f21e4806e0b92248202be57b5527b41169f04029fd34",
          "artifactSha256": "df24f6dd175846563999e0e6ffe3066b752cfe285ed7b01891f7493e8d50ca17",
          "url": "/reference/source/forge-rs/crates/forge-provider-openai/src/types.rs.txt",
          "declarations": [
            {
              "name": "::ChatCompletionRequest",
              "line": 21,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChatCompletionRequest {\n/// The model ID (e.g., \"gpt-4o\").\n\npub model: String,\n/// The conversation messages.\n\npub messages: Vec<ChatMessage>,\n/// Tool definitions available to the model.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub tools: Option<Vec<ApiToolDefinition>>,\n/// Sampling temperature (0.0 to 2.0).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub temperature: Option<f64>,\n/// Maximum tokens to generate.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub max_tokens: Option<u32>,\n/// Top-p (nucleus) sampling threshold.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub top_p: Option<f64>,\n/// Up to 4 stop sequences.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub stop: Option<Vec<String>>,\n/// Frequency penalty (-2.0 to 2.0).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub frequency_penalty: Option<f64>,\n/// Presence penalty (-2.0 to 2.0).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub presence_penalty: Option<f64>,\n/// Seed for deterministic generation.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub seed: Option<u64>,\n/// Response format for structured output.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub response_format: Option<ResponseFormat>,\n/// Whether to stream the response.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub stream: Option<bool>,\n/// Stream options (e.g., include usage in stream).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub stream_options: Option<StreamOptions>\n}",
              "documentation": "A ChatCompletion API request body.\n\nSee <https://platform.openai.com/docs/api-reference/chat/create>."
            },
            {
              "name": "::StreamOptions",
              "line": 75,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct StreamOptions {\n/// Whether to include usage statistics in the final stream chunk.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub include_usage: Option<bool>\n}",
              "documentation": "Stream options for controlling streaming behavior."
            },
            {
              "name": "::ChatMessage",
              "line": 88,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChatMessage {\n/// The role: \"system\", \"user\", \"assistant\", or \"tool\".\n\npub role: String,\n/// The message content (text or multi-part).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub content: Option<ChatContent>,\n/// Tool calls made by the assistant.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub tool_calls: Option<Vec<ApiToolCall>>,\n/// The tool call ID this message responds to (for tool role).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub tool_call_id: Option<String>,\n/// The tool name (for tool role messages).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub name: Option<String>\n}",
              "documentation": "A message in the OpenAI ChatCompletion format.\n\nThe structure varies by role:\n- **system/user**: `content` is a string or content array\n- **assistant**: may have `content` and/or `tool_calls`\n- **tool**: has `content` (result) and `tool_call_id`"
            },
            {
              "name": "::ChatContent",
              "line": 115,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(untagged)]\npub enum ChatContent {\n    /// Plain text content.\n    Text(String),\n    /// Array of content parts (text and/or images).\n    Parts(Vec<ContentPart>),\n}",
              "documentation": "Message content \u2014 either a plain string or an array of content parts.\n\nOpenAI's API accepts both formats. Text-only messages use the string\nform; multi-modal messages (with images) use the array form."
            },
            {
              "name": "::ContentPart",
              "line": 125,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum ContentPart {\n    /// A text content part.\n    Text {\n        /// The text content.\n        text: String,\n    },\n    /// An image URL content part.\n    ImageUrl {\n        /// The image URL object.\n        image_url: ImageUrlObject,\n    },\n}",
              "documentation": "A content part within a multi-part message."
            },
            {
              "name": "::ImageUrlObject",
              "line": 140,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ImageUrlObject {\n/// The image URL. For base64, use `data:<media_type>;base64,<data>`.\n\npub url: String\n}",
              "documentation": "An image URL reference within a content part."
            },
            {
              "name": "::ApiToolCall",
              "line": 147,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ApiToolCall {\n/// Unique identifier for this tool call.\n\npub id: String,\n/// The type of tool call \u2014 always \"function\" for now.\n\n#[serde(rename = \"type\")]\npub call_type: String,\n/// The function being called.\n\npub function: FunctionCall\n}",
              "documentation": "A tool call in the assistant's response."
            },
            {
              "name": "::FunctionCall",
              "line": 161,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FunctionCall {\n/// The function name.\n\npub name: String,\n/// The function arguments as a JSON string.\n\npub arguments: String\n}",
              "documentation": "A function call within a tool call."
            },
            {
              "name": "::ApiToolDefinition",
              "line": 171,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ApiToolDefinition {\n/// The type \u2014 always \"function\".\n\n#[serde(rename = \"type\")]\npub tool_type: String,\n/// The function definition.\n\npub function: FunctionDef\n}",
              "documentation": "A tool definition in the OpenAI format."
            },
            {
              "name": "::FunctionDef",
              "line": 182,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FunctionDef {\n/// The function name.\n\npub name: String,\n/// A human-readable description of what the function does.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub description: Option<String>,\n/// JSON Schema for the function's parameters.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub parameters: Option<serde_json::Value>\n}",
              "documentation": "A function definition within a tool definition."
            },
            {
              "name": "::ResponseFormat",
              "line": 197,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ResponseFormat {\n/// The format type: \"text\", \"json_object\", or \"json_schema\".\n\n#[serde(rename = \"type\")]\npub format_type: String,\n/// JSON schema definition (only for `json_schema` type).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub json_schema: Option<JsonSchemaFormat>\n}",
              "documentation": "Response format for structured output."
            },
            {
              "name": "::JsonSchemaFormat",
              "line": 209,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct JsonSchemaFormat {\n/// Name for the schema (required by OpenAI).\n\npub name: String,\n/// The JSON Schema object.\n\npub schema: serde_json::Value,\n/// Whether to enforce strict schema adherence.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub strict: Option<bool>\n}",
              "documentation": "A JSON schema format specification for structured output."
            },
            {
              "name": "::ChatCompletionResponse",
              "line": 229,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChatCompletionResponse {\n/// Unique response identifier.\n\npub id: String,\n/// The list of completion choices.\n\npub choices: Vec<ChatCompletionChoice>,\n/// Token usage statistics.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub usage: Option<ApiUsage>,\n/// The model that generated the response.\n\npub model: String\n}",
              "documentation": "A ChatCompletion API response.\n\nSee <https://platform.openai.com/docs/api-reference/chat/object>."
            },
            {
              "name": "::ChatCompletionChoice",
              "line": 246,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChatCompletionChoice {\n/// The choice index.\n\npub index: u32,\n/// The generated message.\n\npub message: ChatMessage,\n/// Why generation stopped.\n\npub finish_reason: Option<String>\n}",
              "documentation": "A single completion choice."
            },
            {
              "name": "::ApiUsage",
              "line": 259,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ApiUsage {\n/// Tokens consumed by the prompt.\n\npub prompt_tokens: u64,\n/// Tokens generated in the completion.\n\npub completion_tokens: u64,\n/// Total tokens (prompt + completion).\n\npub total_tokens: u64\n}",
              "documentation": "Token usage statistics from the OpenAI API."
            },
            {
              "name": "::ChatCompletionChunk",
              "line": 278,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChatCompletionChunk {\n/// Unique response identifier (same across all chunks).\n\npub id: String,\n/// The list of chunk choices.\n\npub choices: Vec<ChunkChoice>,\n/// Usage statistics (only present in the final chunk when `stream_options.include_usage` is true).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub usage: Option<ApiUsage>\n}",
              "documentation": "A streaming chunk from the ChatCompletion API.\n\nSee <https://platform.openai.com/docs/api-reference/chat/streaming>."
            },
            {
              "name": "::ChunkChoice",
              "line": 292,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChunkChoice {\n/// The choice index.\n\npub index: u32,\n/// The content delta for this chunk.\n\npub delta: ChunkDelta,\n/// Why generation stopped (present in the final chunk).\n\npub finish_reason: Option<String>\n}",
              "documentation": "A single choice within a streaming chunk."
            },
            {
              "name": "::ChunkDelta",
              "line": 305,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChunkDelta {\n/// The role (typically only in the first chunk).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub role: Option<String>,\n/// Text content delta.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub content: Option<String>,\n/// Tool call deltas.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub tool_calls: Option<Vec<ChunkToolCall>>\n}",
              "documentation": "The delta content within a streaming chunk."
            },
            {
              "name": "::ChunkToolCall",
              "line": 321,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChunkToolCall {\n/// The tool call index (for correlating deltas).\n\npub index: u32,\n/// The tool call ID (may only be present in the first delta).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub id: Option<String>,\n/// The tool call type (may only be present in the first delta).\n\n#[serde(rename = \"type\")]\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub call_type: Option<String>,\n/// The function call delta.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub function: Option<ChunkFunctionCall>\n}",
              "documentation": "A tool call delta within a streaming chunk."
            },
            {
              "name": "::ChunkFunctionCall",
              "line": 341,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChunkFunctionCall {\n/// The function name (may only be present in the first delta).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub name: Option<String>,\n/// Partial function arguments (streamed incrementally).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub arguments: Option<String>\n}",
              "documentation": "A function call delta within a streaming tool call chunk."
            },
            {
              "name": "::ApiErrorResponse",
              "line": 357,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ApiErrorResponse {\n/// The error detail object.\n\npub error: ApiErrorDetail\n}",
              "documentation": "An error response from the OpenAI API."
            },
            {
              "name": "::ApiErrorDetail",
              "line": 364,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ApiErrorDetail {\n/// The error message.\n\npub message: String,\n/// The error type (e.g., \"invalid_request_error\").\n\n#[serde(rename = \"type\")]\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub error_type: Option<String>,\n/// The parameter that caused the error.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub param: Option<String>,\n/// The error code (e.g., \"model_not_found\").\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub code: Option<String>\n}",
              "documentation": "Error detail from the OpenAI API."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-provider-anthropic",
      "language": "rust",
      "version": "0.2.0",
      "description": "Anthropic provider for the Forge SDK \u2014 implements the LanguageModel trait for the Anthropic Messages API",
      "manifest": "forge-rs/crates/forge-provider-anthropic/Cargo.toml",
      "manifestSha256": "d729a56208ec7259f3264dca98385e0fae958af288a668c4222e746785aa3d3d",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-provider-anthropic",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-provider-anthropic/src/client.rs",
          "sha256": "5661d6b581f075b5df14c016559ac77ea6799a208800e584341ff6cfc66f4c39",
          "artifactSha256": "06f7372450051527142eaa146d40b2d35159dbe1387faddc43e0686681427aef",
          "url": "/reference/source/forge-rs/crates/forge-provider-anthropic/src/client.rs.txt",
          "declarations": [
            {
              "name": "::AnthropicHttpClient",
              "line": 40,
              "signature": "pub struct AnthropicHttpClient {\n\n}",
              "documentation": "HTTP client wrapper for the Anthropic Messages API.\n\nManages connection pooling, authentication headers, and retry logic\nfor transient failures (429, 500, 503).\n\n# Examples\n\n```no_run\nuse forge_provider_anthropic::config::AnthropicConfig;\nuse forge_provider_anthropic::client::AnthropicHttpClient;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet config = AnthropicConfig::new(\"sk-ant-api03-...\");\nlet client = AnthropicHttpClient::new(&config)?;\n# Ok(())\n# }\n```"
            },
            {
              "name": "::AnthropicHttpClient::new",
              "line": 72,
              "signature": "pub fn new(config: &AnthropicConfig) -> Result<Self, AnthropicError>;",
              "documentation": "Creates a new HTTP client from the given configuration.\n\n# Arguments\n\n* `config` - The Anthropic configuration containing API key and endpoints.\n\n# Returns\n\nThe configured HTTP client.\n\n# Errors\n\nReturns `AnthropicError::InvalidConfig` if the API key is empty."
            },
            {
              "name": "::AnthropicHttpClient::send_messages",
              "line": 109,
              "signature": "pub async fn send_messages(\n        &self,\n        request: &MessagesRequest,\n    ) -> Result<MessagesResponse, AnthropicError>;",
              "documentation": "Sends a non-streaming Messages API request and returns the parsed response.\n\nHandles retry logic for transient HTTP errors (429, 500, 503).\n\n# Arguments\n\n* `request` - The serialized Messages API request.\n\n# Returns\n\nThe deserialized `MessagesResponse`.\n\n# Errors\n\nReturns `AnthropicError` for HTTP failures, API errors, and\ndeserialization failures."
            },
            {
              "name": "::AnthropicHttpClient::send_streaming",
              "line": 187,
              "signature": "pub async fn send_streaming(\n        &self,\n        request: &MessagesRequest,\n    ) -> Result<Vec<u8>, AnthropicError>;",
              "documentation": "Sends a streaming Messages API request and returns the raw response body.\n\nThe caller is responsible for parsing the SSE stream. Retry logic is\nnot applied to streaming requests because partial responses cannot\nbe resumed.\n\n# Arguments\n\n* `request` - The serialized Messages API request (must have `stream: true`).\n\n# Returns\n\nA tuple of the HTTP status and the raw response body bytes.\n\n# Errors\n\nReturns `AnthropicError` for HTTP failures and non-2xx responses."
            },
            {
              "name": "::AnthropicHttpClient::send_streaming_body",
              "line": 222,
              "signature": "pub async fn send_streaming_body(\n        &self,\n        request: &MessagesRequest,\n    ) -> Result<Incoming, AnthropicError>;",
              "documentation": "Sends a streaming request and returns the response body **without\ncollecting it**. The caller drives the body frame-by-frame to deliver\nSSE events to consumers as the upstream wire produces them.\n\nUsed by `LanguageModel::stream_chunks` (RFC 0001 / F-6 / F-7) \u2014 see\n[`crate::model`] for the full pipeline that wires this body into\n[`crate::sse::SseDecoder`] and [`crate::sse::ChunkEmitter`].\n\n# Errors\n\n- [`AnthropicError::HttpTransport`] if the request fails to send\n  or the headers can't be read.\n- [`AnthropicError::ApiError`] (with the body collected eagerly) if\n  the response status is non-2xx \u2014 error bodies are small enough\n  that buffering them is the right tradeoff vs. trying to stream a\n  failure."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-anthropic/src/config.rs",
          "sha256": "1ae87a2450273990205490f0ee359102fbc5d11539e022e67f66224a3b19088e",
          "artifactSha256": "c63f440756fc3e7388c7791dacc1044856d6ff6eda0971d15682e66a95899a76",
          "url": "/reference/source/forge-rs/crates/forge-provider-anthropic/src/config.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_MAX_TOKENS",
              "line": 24,
              "signature": "pub const DEFAULT_MAX_TOKENS: u32;",
              "documentation": "Default max_tokens value when the caller does not specify one.\n\nAnthropic requires `max_tokens` on every request. When\n`GenerateOptions::max_tokens` is `None`, this value is used."
            },
            {
              "name": "::AnthropicConfig",
              "line": 44,
              "signature": "#[derive(Clone)]\npub struct AnthropicConfig {\n\n}",
              "documentation": "Configuration for the Anthropic provider.\n\nContains the API key, base URL, API version header, timeout, and retry\nsettings. The [`Debug`] implementation redacts the API key.\n\n# Examples\n\n```\nuse forge_provider_anthropic::AnthropicConfig;\n\nlet config = AnthropicConfig::new(\"sk-ant-api03-...\")\n    .with_model(\"claude-sonnet-4-5-20250929\")\n    .with_timeout_seconds(60);\n\nassert_eq!(config.model(), \"claude-sonnet-4-5-20250929\");\nassert_eq!(config.base_url(), \"https://api.anthropic.com/v1\");\n```"
            },
            {
              "name": "::AnthropicConfig::new",
              "line": 75,
              "signature": "pub fn new(api_key: impl Into<String>) -> Self;",
              "documentation": "Creates a new configuration with the given API key and default settings.\n\n# Arguments\n\n* `api_key` - The Anthropic API key (starts with `sk-ant-`).\n\n# Examples\n\n```\nuse forge_provider_anthropic::AnthropicConfig;\n\nlet config = AnthropicConfig::new(\"sk-ant-api03-...\");\nassert_eq!(config.base_url(), \"https://api.anthropic.com/v1\");\nassert_eq!(config.api_version(), \"2023-06-01\");\n```"
            },
            {
              "name": "::AnthropicConfig::no_credentials",
              "line": 109,
              "signature": "pub fn no_credentials() -> Self;",
              "documentation": "Builds a config with no API key, intended for mock-mode boot paths.\n\nUse this when constructing the config at boot before knowing whether\nreal credentials are configured (e.g., `ANTHROPIC_API_KEY` may be unset\nin dev or CI). The returned config is structurally identical to one\nbuilt with [`new`](Self::new), but the API key is empty -- the actual\nrequest layer is responsible for surfacing a clear error if a real\nrequest is attempted without credentials, instead of failing at\nconstruction.\n\nThis lets callers write a single straight-line code path and decide\nat request time whether to short-circuit to mock-mode, rather than\nthreading `Option<AnthropicConfig>` through their agent type.\n\n```\nuse forge_provider_anthropic::AnthropicConfig;\n\nlet config = match std::env::var(\"ANTHROPIC_API_KEY\") {\n    Ok(key) if !key.is_empty() => AnthropicConfig::new(key),\n    _ => AnthropicConfig::no_credentials(),\n};\nassert!(!config.has_credentials() || !config.api_key().is_empty());\n```"
            },
            {
              "name": "::AnthropicConfig::has_credentials",
              "line": 124,
              "signature": "pub fn has_credentials(&self) -> bool;",
              "documentation": "Returns whether this config carries a non-empty API key.\n\nUse this to short-circuit to mock-mode without inspecting the redacted\nkey directly:\n\n```\nuse forge_provider_anthropic::AnthropicConfig;\n\nassert!(!AnthropicConfig::no_credentials().has_credentials());\nassert!(AnthropicConfig::new(\"sk-ant-real\").has_credentials());\n```"
            },
            {
              "name": "::AnthropicConfig::with_model",
              "line": 133,
              "signature": "pub fn with_model(mut self, model: impl Into<String>) -> Self;",
              "documentation": "Sets the model identifier.\n\n# Arguments\n\n* `model` - The model to use (e.g., \"claude-sonnet-4-5-20250929\", \"claude-opus-4-5-20250416\")."
            },
            {
              "name": "::AnthropicConfig::with_base_url",
              "line": 143,
              "signature": "pub fn with_base_url(mut self, base_url: impl Into<String>) -> Self;",
              "documentation": "Sets the base URL for the API.\n\n# Arguments\n\n* `base_url` - The base URL (e.g., `https://api.anthropic.com/v1`)."
            },
            {
              "name": "::AnthropicConfig::with_api_version",
              "line": 153,
              "signature": "pub fn with_api_version(mut self, version: impl Into<String>) -> Self;",
              "documentation": "Sets the API version header.\n\n# Arguments\n\n* `version` - The `anthropic-version` header value."
            },
            {
              "name": "::AnthropicConfig::with_timeout_seconds",
              "line": 163,
              "signature": "pub fn with_timeout_seconds(mut self, seconds: u64) -> Self;",
              "documentation": "Sets the request timeout in seconds.\n\n# Arguments\n\n* `seconds` - Timeout in seconds."
            },
            {
              "name": "::AnthropicConfig::with_max_retries",
              "line": 173,
              "signature": "pub fn with_max_retries(mut self, retries: u32) -> Self;",
              "documentation": "Sets the maximum number of retries for transient HTTP errors.\n\n# Arguments\n\n* `retries` - The maximum retry count."
            },
            {
              "name": "::AnthropicConfig::api_key",
              "line": 184,
              "signature": "pub fn api_key(&self) -> &str;",
              "documentation": "Returns the API key.\n\n# Security\n\nDo not log or display the return value. The [`Debug`] implementation\nredacts this field."
            },
            {
              "name": "::AnthropicConfig::model",
              "line": 189,
              "signature": "pub fn model(&self) -> &str;",
              "documentation": "Returns the model identifier."
            },
            {
              "name": "::AnthropicConfig::base_url",
              "line": 194,
              "signature": "pub fn base_url(&self) -> &str;",
              "documentation": "Returns the base URL."
            },
            {
              "name": "::AnthropicConfig::api_version",
              "line": 199,
              "signature": "pub fn api_version(&self) -> &str;",
              "documentation": "Returns the API version header value."
            },
            {
              "name": "::AnthropicConfig::timeout_seconds",
              "line": 204,
              "signature": "pub fn timeout_seconds(&self) -> u64;",
              "documentation": "Returns the request timeout in seconds."
            },
            {
              "name": "::AnthropicConfig::max_retries",
              "line": 209,
              "signature": "pub fn max_retries(&self) -> u32;",
              "documentation": "Returns the maximum retry count."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-anthropic/src/error.rs",
          "sha256": "4384a7d539bf316a65bc264cc7d9eb5cf44bb773faed60a6b236c74496f934b2",
          "artifactSha256": "e94c87bcd70bc02118afac4b9c16162e03af83efe52fa4e6d7ccb7df08ceffe8",
          "url": "/reference/source/forge-rs/crates/forge-provider-anthropic/src/error.rs.txt",
          "declarations": [
            {
              "name": "::AnthropicError",
              "line": 23,
              "signature": "#[derive(Debug, Error)]\npub enum AnthropicError {\n    /// The API returned an HTTP error status code.\n    ///\n    /// Anthropic returns structured error bodies; the `error_type` and `message`\n    /// fields come from the API response.\n    #[error(\n        \"Anthropic API returned HTTP {status_code}: type='{error_type}', message='{message}' \\\n         (model='{model}', request_id='{request_id}')\"\n    )]\n    ApiError {\n        /// The HTTP status code (e.g., 400, 401, 429, 500).\n        status_code: u16,\n        /// The Anthropic error type (e.g., \"invalid_request_error\", \"authentication_error\").\n        error_type: String,\n        /// Human-readable error message from the API.\n        message: String,\n        /// The model that was being called.\n        model: String,\n        /// The request ID from the `request-id` response header, or \"unknown\".\n        request_id: String,\n    },\n\n    /// An HTTP transport error occurred (DNS failure, connection reset, TLS error).\n    #[error(\"HTTP transport error calling Anthropic API at '{url}': {reason}\")]\n    HttpTransport {\n        /// The URL that was being called.\n        url: String,\n        /// Description of the transport failure.\n        reason: String,\n    },\n\n    /// The API response body could not be deserialized.\n    #[error(\n        \"failed to deserialize Anthropic API response for model '{model}': {reason} \\\n         (response snippet: '{snippet}')\"\n    )]\n    DeserializationFailed {\n        /// The model that produced the response.\n        model: String,\n        /// What went wrong during deserialization.\n        reason: String,\n        /// First 200 bytes of the response body for debugging.\n        snippet: String,\n    },\n\n    /// Request serialization failed.\n    #[error(\"failed to serialize request for Anthropic model '{model}': {reason}\")]\n    SerializationFailed {\n        /// The model the request was for.\n        model: String,\n        /// What went wrong during serialization.\n        reason: String,\n    },\n\n    /// An SSE stream event could not be parsed.\n    #[error(\"SSE parse error on event '{event_type}': {reason} (data snippet: '{snippet}')\")]\n    SseParseFailed {\n        /// The SSE event type (e.g., \"content_block_delta\").\n        event_type: String,\n        /// What went wrong.\n        reason: String,\n        /// First 200 bytes of the data field for debugging.\n        snippet: String,\n    },\n\n    /// The request timed out.\n    #[error(\n        \"Anthropic API request timed out after {timeout_seconds}s for model '{model}' \\\n         \u2014 consider increasing timeout or reducing max_tokens\"\n    )]\n    Timeout {\n        /// The model being called.\n        model: String,\n        /// The timeout that was exceeded, in seconds.\n        timeout_seconds: u64,\n    },\n\n    /// All retry attempts were exhausted.\n    #[error(\n        \"Anthropic API request failed after {attempts} attempts for model '{model}': {last_error}\"\n    )]\n    RetriesExhausted {\n        /// The model being called.\n        model: String,\n        /// How many attempts were made.\n        attempts: u32,\n        /// The last error message.\n        last_error: String,\n    },\n\n    /// The configuration is invalid.\n    #[error(\"invalid Anthropic configuration: {reason}\")]\n    InvalidConfig {\n        /// What is wrong with the configuration.\n        reason: String,\n    },\n}",
              "documentation": "Errors specific to the Anthropic provider.\n\nEach variant includes enough context to diagnose the issue: what was\nattempted, what failed, and what to check.\n\n# Conversion\n\n`AnthropicError` converts to `ForgeError` via the [`From`] implementation,\nso provider code can use `?` with `ForgeResult`."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-anthropic/src/lib.rs",
          "sha256": "bd38ebeca339f0841657da970e87030ba339de21633d25fa0b0309fef6893ab5",
          "artifactSha256": "a3db53d2af3c12a70497acaa38563ba10df530ed4e40026b2ad060781122e8c0",
          "url": "/reference/source/forge-rs/crates/forge-provider-anthropic/src/lib.rs.txt",
          "declarations": [
            {
              "name": "client",
              "line": 49,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod client;",
              "documentation": "# forge-provider-anthropic\n\nAnthropic provider for the Forge SDK. Implements the\n[`LanguageModel`](forge_core::model::LanguageModel) trait from `forge-core`\nfor the Anthropic Messages API.\n\nThis crate translates between Forge's unified message/tool model and the\nAnthropic-specific wire format, handling key differences:\n\n- **System prompt**: Anthropic uses a top-level `system` field, not a system message in the array.\n- **Authentication**: `x-api-key` header (not Bearer token), plus `anthropic-version` header.\n- **Content blocks**: Messages contain typed content blocks (text, tool_use, tool_result, image).\n- **Tool schema**: Anthropic uses `input_schema` (not `parameters`).\n- **SSE events**: Anthropic uses a distinct set of SSE event types for streaming.\n- **max_tokens required**: Anthropic requires `max_tokens` on every request; defaults to 4096.\n\n# ANVIL Spec Reference\n\nThis crate implements ANVIL Spec section 6.1 (Cognitive Interface) and section 6.2\n(Provider Abstraction) for the Anthropic provider namespace.\n\n# Examples\n\n```no_run\nuse forge_provider_anthropic::{AnthropicLanguageModel, AnthropicConfig};\nuse forge_core::model::LanguageModel;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet config = AnthropicConfig::new(\"sk-ant-api-key-here\")\n    .with_model(\"claude-sonnet-4-5-20250929\");\nlet model = AnthropicLanguageModel::new(config)?;\n\nlet messages = vec![\n    ModelMessage::text(Role::System, \"You are a helpful assistant.\"),\n    ModelMessage::text(Role::User, \"What is the capital of France?\"),\n];\n\nlet result = model.generate(&messages, &[], &GenerateOptions::default()).await?;\nprintln!(\"{}\", result.text());\n# Ok(())\n# }\n```"
            },
            {
              "name": "config",
              "line": 51,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod config;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 52,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "model",
              "line": 54,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod model;",
              "documentation": ""
            },
            {
              "name": "sse",
              "line": 56,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod sse;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 57,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "pub use config::AnthropicConfig;",
              "line": 60,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use config::AnthropicConfig;",
              "documentation": ""
            },
            {
              "name": "pub use error::AnthropicError;",
              "line": 61,
              "signature": "pub use error::AnthropicError;",
              "documentation": ""
            },
            {
              "name": "pub use model::AnthropicLanguageModel;",
              "line": 63,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use model::AnthropicLanguageModel;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-anthropic/src/model.rs",
          "sha256": "a55b49df20c2eeda01fde3bc23746da87c80c54bf0fac76ee7b8bf6975584663",
          "artifactSha256": "34eee7a39e22fa4adea07018069522fe7bb88dfb01b495300c989c5bfd5408bc",
          "url": "/reference/source/forge-rs/crates/forge-provider-anthropic/src/model.rs.txt",
          "declarations": [
            {
              "name": "::AnthropicLanguageModel",
              "line": 79,
              "signature": "pub struct AnthropicLanguageModel {\n\n}",
              "documentation": "Anthropic language model implementing the Forge `LanguageModel` trait.\n\nProvides access to Claude models via the Anthropic Messages API.\nHandles system prompt extraction, content block translation, tool schema\nmapping, and SSE stream parsing.\n\n# ANVIL Spec Reference\n\nImplements ANVIL Spec section 6.1 (Cognitive Interface) and section 6.2 (Provider\nAbstraction) for the \"anthropic\" provider namespace.\n\n# Examples\n\n```no_run\nuse forge_provider_anthropic::{AnthropicLanguageModel, AnthropicConfig};\nuse forge_core::model::LanguageModel;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet config = AnthropicConfig::new(\"sk-ant-api03-...\")\n    .with_model(\"claude-sonnet-4-5-20250929\");\nlet model = AnthropicLanguageModel::new(config)?;\n\nassert_eq!(model.provider(), \"anthropic\");\nassert_eq!(model.model_id(), \"claude-sonnet-4-5-20250929\");\nassert!(model.supports_image_input());\n# Ok(())\n# }\n```"
            },
            {
              "name": "::AnthropicLanguageModel::new",
              "line": 111,
              "signature": "pub fn new(config: AnthropicConfig) -> Result<Self, AnthropicError>;",
              "documentation": "Creates a new Anthropic language model from the given configuration.\n\n# Arguments\n\n* `config` - Configuration containing API key, model, and client settings.\n\n# Returns\n\nThe configured language model.\n\n# Errors\n\nReturns `AnthropicError::InvalidConfig` if the configuration is invalid\n(e.g., empty API key).\n\n# Examples\n\n```no_run\nuse forge_provider_anthropic::{AnthropicLanguageModel, AnthropicConfig};\n\nlet config = AnthropicConfig::new(\"sk-ant-api03-...\");\nlet model = AnthropicLanguageModel::new(config);\nassert!(model.is_ok());\n```"
            },
            {
              "name": "::convert_tool_definition",
              "line": 623,
              "signature": "pub fn convert_tool_definition(tool: &ToolDefinition) -> AnthropicToolDef;",
              "documentation": "Converts Forge `ToolDefinition` to Anthropic `AnthropicToolDef`.\n\nThe key difference is that Anthropic uses `input_schema` where OpenAI\nuses `parameters`.\n\n# Arguments\n\n* `tool` - The Forge tool definition to convert.\n\n# Returns\n\nThe Anthropic tool definition."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-anthropic/src/sse.rs",
          "sha256": "7b27a84ebf6b5086ff3d5347dd9e7ed6f29c85977a4c3b9eb3e7d9eba2392f53",
          "artifactSha256": "fe23d922c6d5e3bc187bb523267d2a3d3a2e93932194697678387ea3cb2b6ab7",
          "url": "/reference/source/forge-rs/crates/forge-provider-anthropic/src/sse.rs.txt",
          "declarations": [
            {
              "name": "::AnthropicSseEvent",
              "line": 30,
              "signature": "#[derive(Debug, Clone)]\npub enum AnthropicSseEvent {\n    /// Stream started with message metadata.\n    MessageStart {\n        /// Input token count from the initial message.\n        input_tokens: u64,\n    },\n    /// A new content block started.\n    ContentBlockStart {\n        /// Zero-based index of this block.\n        index: u32,\n        /// The initial content block.\n        block: ContentBlock,\n    },\n    /// Incremental update to the current content block.\n    ContentBlockDelta {\n        /// Zero-based index of the block being updated.\n        index: u32,\n        /// The delta update.\n        delta: DeltaBlock,\n    },\n    /// A content block finished.\n    ContentBlockStop {\n        /// Zero-based index of the completed block.\n        index: u32,\n    },\n    /// Stream metadata update (stop reason, output usage).\n    MessageDelta {\n        /// Why generation stopped.\n        stop_reason: Option<String>,\n        /// Output tokens generated.\n        output_tokens: Option<u64>,\n    },\n    /// Stream completed.\n    MessageStop,\n    /// Keepalive ping (ignored by consumers).\n    Ping,\n}",
              "documentation": "Parsed SSE event from the Anthropic stream.\n\nThese are intermediate representations; the [`crate::model`] module converts\nthem into Forge `StreamChunk` values."
            },
            {
              "name": "::parse_sse_stream",
              "line": 84,
              "signature": "pub fn parse_sse_stream(sse_bytes: &[u8]) -> Result<Vec<StreamChunk>, AnthropicError>;",
              "documentation": "Parses a raw SSE byte stream into Forge `StreamChunk` values.\n\nThis function processes the complete SSE response body (collected after\nthe HTTP response completes) and returns a vector of `StreamChunk`.\n\n# Arguments\n\n* `sse_bytes` - The raw SSE response body bytes.\n\n# Returns\n\nA vector of `StreamChunk` representing the streamed response.\n\n# Errors\n\nReturns `AnthropicError::SseParseFailed` if an SSE event cannot be parsed."
            },
            {
              "name": "::SseDecoder",
              "line": 324,
              "signature": "pub struct SseDecoder {\n\n}",
              "documentation": "Stateful SSE decoder for incremental byte streams.\n\nBuffers partial events across `feed(&[u8])` calls and yields complete\nevents via `drain()`. Tolerates byte-chunk boundaries that split SSE\nevents at any point \u2014 between lines, mid-line in a `data:` JSON value,\nor mid-`event:` header. The only correctness guarantee from upstream is\nthat SSE line terminators (`\\n` or `\\r\\n`) appear at byte boundaries\nwhere the producer wrote them.\n\n# Examples\n\n```\nuse forge_provider_anthropic::sse::{AnthropicSseEvent, SseDecoder};\n\nlet mut decoder = SseDecoder::new();\n// Bytes can arrive in any chunking \u2014 feed them in pieces:\ndecoder.feed(b\"event: ping\\ndata: {}\\n\\n\").unwrap();\nlet events = decoder.drain();\nassert_eq!(events.len(), 1);\nassert!(matches!(events[0], AnthropicSseEvent::Ping));\n```"
            },
            {
              "name": "::SseDecoder::new",
              "line": 338,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new, empty decoder."
            },
            {
              "name": "::SseDecoder::feed",
              "line": 355,
              "signature": "pub fn feed(&mut self, bytes: &[u8]) -> Result<(), AnthropicError>;",
              "documentation": "Feeds raw bytes into the decoder. Any complete events that become\navailable are queued; call [`drain`](Self::drain) to take them.\n\n# Errors\n\nReturns `AnthropicError::SseParseFailed` if a complete event's JSON\npayload fails to deserialize into the expected event type. Partial\nevents (still waiting for more bytes) never error here."
            },
            {
              "name": "::SseDecoder::drain",
              "line": 413,
              "signature": "pub fn drain(&mut self) -> Vec<AnthropicSseEvent>;",
              "documentation": "Drains all events ready to be consumed."
            },
            {
              "name": "::SseDecoder::finish",
              "line": 428,
              "signature": "pub fn finish(&mut self) -> Result<Vec<AnthropicSseEvent>, AnthropicError>;",
              "documentation": "Signals end-of-stream, flushing any pending partial event.\n\nSSE streams are typically terminated by an explicit `message_stop`\nevent followed by an empty line, but if the upstream connection\ncloses without that final blank line, this method ensures the last\nevent still gets parsed.\n\n# Errors\n\nSame as [`feed`](Self::feed) \u2014 returns an error if the final\npending event's JSON payload fails to deserialize."
            },
            {
              "name": "::ChunkEmitter",
              "line": 476,
              "signature": "pub struct ChunkEmitter {\n\n}",
              "documentation": "Stateful event-to-chunk converter.\n\nThreads the cross-event state that `parse_sse_stream` previously held\nlocally (input/output token totals, tool-block JSON accumulators, final\nstop reason) so events can be processed one at a time as they arrive\nfrom [`SseDecoder`].\n\n# Examples\n\n```no_run\nuse forge_provider_anthropic::sse::{AnthropicSseEvent, ChunkEmitter, SseDecoder};\n\n# fn example(bytes: &[u8]) -> Result<Vec<forge_core::output::StreamChunk>, forge_provider_anthropic::error::AnthropicError> {\nlet mut decoder = SseDecoder::new();\nlet mut emitter = ChunkEmitter::new();\nlet mut chunks = Vec::new();\n\ndecoder.feed(bytes)?;\nfor event in decoder.drain() {\n    chunks.extend(emitter.emit(event));\n}\nOk(chunks)\n# }\n```"
            },
            {
              "name": "::ChunkEmitter::new",
              "line": 486,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a fresh emitter for one stream."
            },
            {
              "name": "::ChunkEmitter::emit",
              "line": 496,
              "signature": "pub fn emit(&mut self, event: AnthropicSseEvent) -> Vec<StreamChunk>;",
              "documentation": "Converts one event into zero or more `StreamChunk` values."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-anthropic/src/types.rs",
          "sha256": "5364c9d915a47924d75808cdfb24da70231824159de94b95894f6d1adb2b1852",
          "artifactSha256": "f818cc60c3555986ffb3e027a367a1ccb017a7a7f8d83020cd39091d22812185",
          "url": "/reference/source/forge-rs/crates/forge-provider-anthropic/src/types.rs.txt",
          "declarations": [
            {
              "name": "::MessagesRequest",
              "line": 27,
              "signature": "#[derive(Debug, Clone, Serialize)]\npub struct MessagesRequest {\n/// The model to use (e.g., \"claude-sonnet-4-5-20250929\").\n\npub model: String,\n/// The conversation messages. Must not contain system messages; use\n\n/// the `system` field instead.\n\npub messages: Vec<AnthropicMessage>,\n/// Top-level system prompt. Anthropic does not use a system role in\n\n/// the messages array.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub system: Option<String>,\n/// Maximum tokens to generate. Required by the Anthropic API.\n\npub max_tokens: u32,\n/// Tool definitions available to the model.\n\n#[serde(skip_serializing_if = \"Vec::is_empty\")]\npub tools: Vec<AnthropicToolDef>,\n/// Sampling temperature (0.0..1.0).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub temperature: Option<f64>,\n/// Top-p (nucleus) sampling threshold.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub top_p: Option<f64>,\n/// Stop sequences.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub stop_sequences: Option<Vec<String>>,\n/// Whether to stream the response via SSE.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub stream: Option<bool>\n}",
              "documentation": "A request to the Anthropic Messages API (`POST /messages`).\n\nSee <https://docs.anthropic.com/en/api/messages> for the full specification."
            },
            {
              "name": "::AnthropicMessage",
              "line": 69,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AnthropicMessage {\n/// The message role: \"user\" or \"assistant\".\n\npub role: String,\n/// Content blocks making up the message.\n\npub content: Vec<ContentBlock>\n}",
              "documentation": "A single message in the Anthropic conversation format.\n\nAnthropic messages have a role (\"user\" or \"assistant\") and an array of\ntyped content blocks. System messages are NOT placed here."
            },
            {
              "name": "::ContentBlock",
              "line": 83,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum ContentBlock {\n    /// A text content block.\n    Text {\n        /// The text content.\n        text: String,\n    },\n\n    /// A tool use (tool call) content block \u2014 returned by the model.\n    ToolUse {\n        /// Unique identifier for this tool use.\n        id: String,\n        /// The tool name.\n        name: String,\n        /// The input arguments as a JSON object.\n        input: serde_json::Value,\n    },\n\n    /// A tool result content block \u2014 sent by the client after executing a tool.\n    ToolResult {\n        /// The `tool_use` ID this result corresponds to.\n        tool_use_id: String,\n        /// The result content.\n        content: String,\n        /// Whether the tool execution resulted in an error.\n        #[serde(skip_serializing_if = \"Option::is_none\")]\n        is_error: Option<bool>,\n    },\n\n    /// An image content block.\n    Image {\n        /// The image source.\n        source: ImageSource,\n    },\n}",
              "documentation": "A typed content block within an Anthropic message.\n\nContent blocks are tagged by their `type` field. The Anthropic API\nuses these both in requests and responses."
            },
            {
              "name": "::ImageSource",
              "line": 122,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ImageSource {\n/// The source type \u2014 always \"base64\" for inline images.\n\n#[serde(rename = \"type\")]\npub source_type: String,\n/// The MIME type (e.g., \"image/png\", \"image/jpeg\").\n\npub media_type: String,\n/// The base64-encoded image data.\n\npub data: String\n}",
              "documentation": "Image source for the Anthropic API.\n\nSupports base64-encoded images with a media type."
            },
            {
              "name": "::AnthropicToolDef",
              "line": 136,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AnthropicToolDef {\n/// The tool name.\n\npub name: String,\n/// Human-readable description.\n\npub description: String,\n/// JSON Schema for the tool's input parameters.\n\npub input_schema: serde_json::Value\n}",
              "documentation": "An Anthropic tool definition.\n\nAnthropic uses `input_schema` instead of OpenAI's `parameters`."
            },
            {
              "name": "::MessagesResponse",
              "line": 151,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct MessagesResponse {\n/// Unique message identifier (e.g., \"msg_01XFDUDYJgAACzvnptvVoYEL\").\n\npub id: String,\n/// Object type \u2014 always \"message\".\n\n#[serde(rename = \"type\")]\npub object_type: String,\n/// The role \u2014 always \"assistant\" for responses.\n\npub role: String,\n/// The response content blocks (text, tool_use).\n\npub content: Vec<ContentBlock>,\n/// The model that generated the response.\n\npub model: String,\n/// Why generation stopped: \"end_turn\", \"max_tokens\", \"tool_use\", \"stop_sequence\".\n\npub stop_reason: Option<String>,\n/// Token usage statistics.\n\npub usage: AnthropicUsage\n}",
              "documentation": "Response from the Anthropic Messages API (non-streaming)."
            },
            {
              "name": "::AnthropicUsage",
              "line": 177,
              "signature": "#[derive(Debug, Clone, Copy, Deserialize, Serialize)]\npub struct AnthropicUsage {\n/// Number of input (prompt) tokens.\n\npub input_tokens: u64,\n/// Number of output (completion) tokens.\n\npub output_tokens: u64\n}",
              "documentation": "Token usage statistics from the Anthropic API."
            },
            {
              "name": "::AnthropicApiErrorResponse",
              "line": 188,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct AnthropicApiErrorResponse {\n/// The error type (e.g., \"invalid_request_error\").\n\n#[serde(rename = \"type\")]\npub error_type: String,\n/// The error details.\n\npub error: AnthropicApiErrorDetail\n}",
              "documentation": "An error response from the Anthropic API.\n\nReturned when the API responds with a non-2xx status code."
            },
            {
              "name": "::AnthropicApiErrorDetail",
              "line": 198,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct AnthropicApiErrorDetail {\n/// The error type (e.g., \"invalid_request_error\").\n\n#[serde(rename = \"type\")]\npub error_type: String,\n/// Human-readable error message.\n\npub message: String\n}",
              "documentation": "The nested error detail within an Anthropic error response."
            },
            {
              "name": "::MessageStartEvent",
              "line": 214,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct MessageStartEvent {\n/// The message response metadata.\n\npub message: MessagesResponse\n}",
              "documentation": "The `message_start` SSE event payload.\n\nContains the initial `MessagesResponse` with empty content."
            },
            {
              "name": "::ContentBlockStartEvent",
              "line": 223,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct ContentBlockStartEvent {\n/// The zero-based index of this content block.\n\npub index: u32,\n/// The initial content block (may have empty text or partial tool_use).\n\npub content_block: ContentBlock\n}",
              "documentation": "The `content_block_start` SSE event payload.\n\nIndicates a new content block is starting in the stream."
            },
            {
              "name": "::ContentBlockDeltaEvent",
              "line": 234,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct ContentBlockDeltaEvent {\n/// The zero-based index of the content block being updated.\n\npub index: u32,\n/// The delta update.\n\npub delta: DeltaBlock\n}",
              "documentation": "The `content_block_delta` SSE event payload.\n\nContains incremental updates to the current content block."
            },
            {
              "name": "::DeltaBlock",
              "line": 246,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum DeltaBlock {\n    /// Incremental text content.\n    TextDelta {\n        /// The text fragment.\n        text: String,\n    },\n    /// Incremental JSON for tool use input.\n    InputJsonDelta {\n        /// A fragment of the JSON input string.\n        partial_json: String,\n    },\n}",
              "documentation": "A delta block within a `content_block_delta` event.\n\nCan be a text delta or an input JSON delta (for tool use streaming)."
            },
            {
              "name": "::MessageDeltaEvent",
              "line": 263,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct MessageDeltaEvent {\n/// The delta with the stop reason.\n\npub delta: MessageDelta,\n/// Updated usage statistics.\n\npub usage: Option<MessageDeltaUsage>\n}",
              "documentation": "The `message_delta` SSE event payload.\n\nContains the final `stop_reason` and usage update."
            },
            {
              "name": "::MessageDelta",
              "line": 272,
              "signature": "#[derive(Debug, Clone, Deserialize)]\npub struct MessageDelta {\n/// Why generation stopped: \"end_turn\", \"max_tokens\", \"tool_use\", \"stop_sequence\".\n\npub stop_reason: Option<String>\n}",
              "documentation": "The delta portion of a `message_delta` event."
            },
            {
              "name": "::MessageDeltaUsage",
              "line": 282,
              "signature": "#[derive(Debug, Clone, Copy, Deserialize)]\npub struct MessageDeltaUsage {\n/// The output tokens generated so far.\n\npub output_tokens: u64\n}",
              "documentation": "Usage statistics from a `message_delta` event.\n\nOnly contains `output_tokens` because input tokens were reported in\n`message_start`."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-provider-google",
      "language": "rust",
      "version": "0.2.0",
      "description": "Google Gemini provider for the Forge SDK \u2014 implements the LanguageModel trait for Google Generative Language API",
      "manifest": "forge-rs/crates/forge-provider-google/Cargo.toml",
      "manifestSha256": "7a9daf4d2e98109e3b8dcfccc836e94610365ae48596b85d73096b33ac89d6e3",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-provider-google",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-provider-google/src/client.rs",
          "sha256": "22206e4617aab90aa7bd7a84af1532e64e579c0cf6006c81227b9629716261d0",
          "artifactSha256": "c987fb92a8d3e1fe715224a1a00a72d92abd49518a80eed5f683cf2fb1e8f930",
          "url": "/reference/source/forge-rs/crates/forge-provider-google/src/client.rs.txt",
          "declarations": [
            {
              "name": "::GoogleHttpClient",
              "line": 47,
              "signature": "#[derive(Clone)]\npub struct GoogleHttpClient {\n\n}",
              "documentation": "HTTP client for the Google Gemini API.\n\nWraps `hyper` with TLS support and provides methods for both synchronous\n(buffered) and streaming API calls. The client handles URL construction,\nAPI key injection, serialization, and retry logic.\n\n# Examples\n\n```no_run\nuse forge_provider_google::{GoogleConfig, GoogleError};\nuse forge_provider_google::client::GoogleHttpClient;\n\n# async fn example() -> Result<(), GoogleError> {\nlet config = GoogleConfig::builder(\"your-key\").build();\nlet client = GoogleHttpClient::new(config)?;\n# Ok(())\n# }\n```"
            },
            {
              "name": "::GoogleHttpClient::new",
              "line": 68,
              "signature": "pub fn new(config: GoogleConfig) -> Result<Self, GoogleError>;",
              "documentation": "Creates a new HTTP client for the Gemini API.\n\n# Arguments\n\n* `config` - The Google provider configuration.\n\n# Returns\n\nA configured HTTP client, or an error if the configuration is invalid.\n\n# Errors\n\nReturns [`GoogleError::MissingApiKey`] if the API key is empty."
            },
            {
              "name": "::GoogleHttpClient::generate_content",
              "line": 96,
              "signature": "pub async fn generate_content(\n        &self,\n        model: &str,\n        request: &GenerateContentRequest,\n    ) -> Result<GenerateContentResponse, GoogleError>;",
              "documentation": "Sends a `generateContent` request and returns the parsed response.\n\nIncludes retry logic for transient failures (HTTP 429, 500, 502, 503, 504).\n\n# Arguments\n\n* `model` - The model identifier (e.g., `\"gemini-2.5-pro\"`).\n* `request` - The generate content request body.\n\n# Returns\n\nThe parsed API response, or an error if the request fails after retries.\n\n# Errors\n\n- [`GoogleError::HttpError`] if the HTTP request itself fails.\n- [`GoogleError::ApiError`] if the API returns a non-2xx status.\n- [`GoogleError::DeserializationError`] if the response cannot be parsed.\n- [`GoogleError::Timeout`] if the request exceeds the configured timeout."
            },
            {
              "name": "::GoogleHttpClient::stream_generate_content",
              "line": 137,
              "signature": "pub async fn stream_generate_content(\n        &self,\n        model: &str,\n        request: &GenerateContentRequest,\n    ) -> Result<Vec<u8>, GoogleError>;",
              "documentation": "Sends a `streamGenerateContent` request and returns the raw SSE bytes.\n\nThe caller is responsible for parsing the SSE stream using the `sse` module.\n\n# Arguments\n\n* `model` - The model identifier.\n* `request` - The generate content request body.\n\n# Returns\n\nThe raw response bytes (SSE stream content), or an error.\n\n# Errors\n\n- [`GoogleError::HttpError`] if the HTTP request fails.\n- [`GoogleError::ApiError`] if the API returns a non-2xx status.\n- [`GoogleError::Timeout`] if the request exceeds the configured timeout."
            },
            {
              "name": "::GoogleHttpClient::stream_generate_content_body",
              "line": 161,
              "signature": "pub async fn stream_generate_content_body(\n        &self,\n        model: &str,\n        request: &GenerateContentRequest,\n    ) -> Result<hyper::body::Incoming, GoogleError>;",
              "documentation": "Sends a `streamGenerateContent` request and returns the response body\n**without collecting it**. Used by `LanguageModel::stream_chunks`\n(RFC 0001 / F-6 / F-7) to deliver Gemini SSE events to consumers as\nthe upstream wire produces them.\n\nConnect-time errors (auth, malformed request, non-2xx status) surface\nhere on the outer Result; mid-stream errors land as per-item errors\non the consumer's stream. No retry \u2014 partial streamed responses can't\nbe resumed cleanly."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-google/src/config.rs",
          "sha256": "e373add2b5f3e5badb2adc57a3fa821efd1d5a3bd771b892d6f169c000f8572c",
          "artifactSha256": "5e53c7d59d9669c5f32abec1e22c1193fdbd166bf6b1eb6c4f1c58e1338e0e20",
          "url": "/reference/source/forge-rs/crates/forge-provider-google/src/config.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_BASE_URL",
              "line": 31,
              "signature": "pub const DEFAULT_BASE_URL: &str;",
              "documentation": "Default base URL for the Google Generative Language API."
            },
            {
              "name": "::GoogleConfig",
              "line": 61,
              "signature": "#[derive(Clone)]\npub struct GoogleConfig {\n\n}",
              "documentation": "Configuration for the Google Gemini language model provider.\n\nContains the API key, base URL, timeout, and retry settings. Construct\ninstances via [`GoogleConfig::builder`].\n\n# Security\n\nThe `Debug` implementation redacts the API key to prevent accidental\nexposure in logs. The API key is never included in any log output,\ntrace span, or error message produced by this crate.\n\n# Examples\n\n```\nuse forge_provider_google::GoogleConfig;\n\nlet config = GoogleConfig::builder(\"my-key\").build();\nlet debug_output = format!(\"{:?}\", config);\nassert!(debug_output.contains(\"[REDACTED]\"));\nassert!(!debug_output.contains(\"my-key\"));\n```"
            },
            {
              "name": "::GoogleConfig::builder",
              "line": 94,
              "signature": "pub fn builder(api_key: impl Into<String>) -> GoogleConfigBuilder;",
              "documentation": "Creates a new configuration builder with the given API key.\n\n# Arguments\n\n* `api_key` - The Google API key for Gemini. This is sent as a query\n  parameter on every request.\n\n# Returns\n\nA [`GoogleConfigBuilder`] for further configuration.\n\n# Examples\n\n```\nuse forge_provider_google::GoogleConfig;\n\nlet config = GoogleConfig::builder(\"your-api-key\")\n    .base_url(\"https://custom-endpoint.example.com/v1beta\")\n    .timeout_seconds(30)\n    .build();\n```"
            },
            {
              "name": "::GoogleConfig::base_url",
              "line": 114,
              "signature": "pub fn base_url(&self) -> &str;",
              "documentation": "Returns the base URL for the Gemini API."
            },
            {
              "name": "::GoogleConfig::timeout_seconds",
              "line": 119,
              "signature": "pub fn timeout_seconds(&self) -> u64;",
              "documentation": "Returns the request timeout in seconds."
            },
            {
              "name": "::GoogleConfig::max_retries",
              "line": 124,
              "signature": "pub fn max_retries(&self) -> u32;",
              "documentation": "Returns the maximum number of retries for transient failures."
            },
            {
              "name": "::GoogleConfig::validate",
              "line": 134,
              "signature": "pub fn validate(&self) -> Result<(), GoogleError>;",
              "documentation": "Validates the configuration, returning an error if required fields\nare missing or invalid.\n\n# Errors\n\nReturns [`GoogleError::MissingApiKey`] if the API key is empty."
            },
            {
              "name": "::GoogleConfigBuilder",
              "line": 169,
              "signature": "pub struct GoogleConfigBuilder {\n\n}",
              "documentation": "Builder for [`GoogleConfig`].\n\nConstructed via [`GoogleConfig::builder`]. All fields have sensible defaults\nexcept `api_key`, which must be provided at builder creation.\n\n# Examples\n\n```\nuse forge_provider_google::GoogleConfig;\n\nlet config = GoogleConfig::builder(\"key\")\n    .timeout_seconds(60)\n    .max_retries(5)\n    .build();\n```"
            },
            {
              "name": "::GoogleConfigBuilder::base_url",
              "line": 183,
              "signature": "pub fn base_url(mut self, url: impl Into<String>) -> Self;",
              "documentation": "Sets a custom base URL for the Gemini API.\n\n# Arguments\n\n* `url` - The base URL (without trailing slash). Defaults to\n  `https://generativelanguage.googleapis.com/v1beta`."
            },
            {
              "name": "::GoogleConfigBuilder::timeout_seconds",
              "line": 193,
              "signature": "pub fn timeout_seconds(mut self, seconds: u64) -> Self;",
              "documentation": "Sets the request timeout in seconds.\n\n# Arguments\n\n* `seconds` - Timeout in seconds. Defaults to 120."
            },
            {
              "name": "::GoogleConfigBuilder::max_retries",
              "line": 203,
              "signature": "pub fn max_retries(mut self, retries: u32) -> Self;",
              "documentation": "Sets the maximum number of retries for transient failures (5xx, timeouts).\n\n# Arguments\n\n* `retries` - Maximum retry count. Defaults to 2."
            },
            {
              "name": "::GoogleConfigBuilder::build",
              "line": 213,
              "signature": "pub fn build(self) -> GoogleConfig;",
              "documentation": "Builds the [`GoogleConfig`].\n\n# Returns\n\nA fully configured [`GoogleConfig`] instance."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-google/src/error.rs",
          "sha256": "66c5937121962fe1497d4cd193fbf5f216225a5ef03c2fc5eaf5f652099eaadf",
          "artifactSha256": "b04f9101e661cdd433ca109e8b942a2254f7f14a3a21e5f76710cd3fb892e1a4",
          "url": "/reference/source/forge-rs/crates/forge-provider-google/src/error.rs.txt",
          "declarations": [
            {
              "name": "::GoogleError",
              "line": 32,
              "signature": "#[derive(Debug, Error)]\npub enum GoogleError {\n    /// The API key was not provided in the configuration.\n    #[error(\"Google API key is missing: provide it via GoogleConfig::builder(api_key) or the GOOGLE_API_KEY environment variable\")]\n    MissingApiKey,\n\n    /// The model identifier is empty or invalid.\n    #[error(\"invalid model identifier '{model_id}': model ID must be a non-empty string (e.g., 'gemini-2.5-pro', 'gemini-2.5-flash')\")]\n    InvalidModelId {\n        /// The invalid model identifier that was provided.\n        model_id: String,\n    },\n\n    /// An HTTP request to the Gemini API failed.\n    #[error(\"HTTP request to Google Gemini API failed: {reason} (url: {url})\")]\n    HttpError {\n        /// The URL that was being requested.\n        url: String,\n        /// A description of the failure.\n        reason: String,\n    },\n\n    /// The Gemini API returned a non-success HTTP status code.\n    #[error(\"Google Gemini API returned HTTP {status_code}: {body} (model: {model})\")]\n    ApiError {\n        /// The HTTP status code returned.\n        status_code: u16,\n        /// The response body (may contain error details from Google).\n        body: String,\n        /// The model that was being called.\n        model: String,\n    },\n\n    /// The Gemini API response could not be deserialized.\n    #[error(\"failed to deserialize Google Gemini API response: {reason} (raw: {raw_body})\")]\n    DeserializationError {\n        /// A description of what was expected.\n        reason: String,\n        /// The raw response body that failed to parse (truncated to 500 chars).\n        raw_body: String,\n    },\n\n    /// The Gemini API response contained no candidates.\n    #[error(\"Google Gemini API returned no candidates for model '{model}': the response was empty or all candidates were filtered\")]\n    EmptyResponse {\n        /// The model that was called.\n        model: String,\n    },\n\n    /// An SSE stream event could not be parsed.\n    #[error(\"failed to parse SSE stream event: {reason}\")]\n    SseParseError {\n        /// A description of what went wrong.\n        reason: String,\n    },\n\n    /// A request timed out.\n    #[error(\"request to Google Gemini API timed out after {timeout_seconds}s (model: {model})\")]\n    Timeout {\n        /// The timeout duration in seconds.\n        timeout_seconds: u64,\n        /// The model that was being called.\n        model: String,\n    },\n\n    /// Message translation failed.\n    #[error(\"failed to translate message to Gemini format: {reason}\")]\n    MessageTranslationError {\n        /// A description of what went wrong.\n        reason: String,\n    },\n\n    /// The Gemini API indicated content was blocked by safety filters.\n    #[error(\"Google Gemini API blocked content for model '{model}': safety filter triggered (finish_reason: SAFETY)\")]\n    SafetyBlocked {\n        /// The model that was called.\n        model: String,\n    },\n}",
              "documentation": "Errors that can occur during interaction with the Google Gemini API.\n\nEach variant includes actionable context: what failed, what was expected,\nand what the developer should check.\n\n# Conversion\n\nAll variants convert to [`ForgeError`] via `From<GoogleError>`, so callers\nworking with `ForgeResult<T>` can use the `?` operator transparently.\n\n# Examples\n\n```\nuse forge_provider_google::GoogleError;\n\nlet err = GoogleError::MissingApiKey;\nlet msg = err.to_string();\nassert!(msg.contains(\"API key\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-google/src/lib.rs",
          "sha256": "4ddf1534f16b87941e35bb88e54d69bbdf3bcc484cc7bca71d749e4c16549921",
          "artifactSha256": "f7f302d0be1fde8fadee3f70981778ac1e85c625522a95848f0fcf7360edaf0b",
          "url": "/reference/source/forge-rs/crates/forge-provider-google/src/lib.rs.txt",
          "declarations": [
            {
              "name": "client",
              "line": 69,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod client;",
              "documentation": "# forge-provider-google\n\nGoogle Gemini provider for the Forge SDK, implementing the\n[`LanguageModel`](forge_core::model::LanguageModel) trait from `forge-core` for the\n[Google Generative Language API](https://ai.google.dev/api).\n\nThis crate translates between Forge's provider-agnostic message types and\nGoogle Gemini's API format. It handles authentication via API key query\nparameters, SSE streaming for `streamGenerateContent`, and tool calling\nvia `functionDeclarations`.\n\n# ANVIL Spec Reference\n\nANVIL Spec S6.1 -- Cognitive Interface: this provider satisfies the\n`LanguageModel` contract for the `google` namespace.\n\n# Supported Models\n\n- `gemini-2.5-pro` -- flagship model with full feature set\n- `gemini-2.5-flash` -- fast, cost-effective model\n- `gemini-2.0-flash` -- previous generation fast model\n- `gemini-1.5-pro`, `gemini-1.5-flash` -- legacy models\n\nAll models support tool calling, structured output, image input, and streaming.\n\n# API Differences from OpenAI/Anthropic\n\n- Authentication: API key as query parameter (`?key=...`), not an HTTP header.\n- Role mapping: Forge `Role::Assistant` maps to Gemini `\"model\"`.\n- System instructions: Sent as top-level `systemInstruction`, not as a message.\n- Tool format: `functionDeclarations` with `functionCall`/`functionResponse` parts.\n- Streaming: Server-Sent Events on `streamGenerateContent?alt=sse`.\n\n# Examples\n\n```no_run\nuse forge_provider_google::{GoogleLanguageModel, GoogleConfig};\nuse forge_core::model::LanguageModel;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet config = GoogleConfig::builder(\"your-api-key\")\n    .build();\n\nlet model = GoogleLanguageModel::new(\"gemini-2.5-pro\".to_string(), config)?;\n\nlet messages = vec![\n    ModelMessage::text(Role::System, \"You are a helpful assistant.\"),\n    ModelMessage::text(Role::User, \"What is 2+2?\"),\n];\n\nlet result = model.generate(&messages, &[], &GenerateOptions::default()).await?;\nprintln!(\"{}\", result.text());\n# Ok(())\n# }\n```\n\n# Security\n\n- API keys are **never** logged. The `Debug` implementation for [`GoogleConfig`]\n  redacts the key.\n- All HTTP communication uses TLS via `hyper-tls`.\n- No `unsafe` code -- enforced via `#![forbid(unsafe_code)]`."
            },
            {
              "name": "config",
              "line": 71,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod config;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 72,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "model",
              "line": 74,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod model;",
              "documentation": ""
            },
            {
              "name": "sse",
              "line": 76,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod sse;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 77,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "pub use config::{GoogleConfig, GoogleConfigBuilder};",
              "line": 80,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use config::{GoogleConfig, GoogleConfigBuilder};",
              "documentation": ""
            },
            {
              "name": "pub use error::GoogleError;",
              "line": 81,
              "signature": "pub use error::GoogleError;",
              "documentation": ""
            },
            {
              "name": "pub use model::GoogleLanguageModel;",
              "line": 83,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use model::GoogleLanguageModel;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-google/src/model.rs",
          "sha256": "ba8ecb6a2090afb2513f7d2173a14e70e12cdba91bdcec81800aa713d5e0cfcb",
          "artifactSha256": "9777ed80663e9a7d93d1bf4b8e2348619b9136b04f23ea4dd89a2ace7b4bdd79",
          "url": "/reference/source/forge-rs/crates/forge-provider-google/src/model.rs.txt",
          "declarations": [
            {
              "name": "::GoogleLanguageModel",
              "line": 83,
              "signature": "pub struct GoogleLanguageModel {\n\n}",
              "documentation": "Google Gemini language model implementing the Forge [`LanguageModel`] trait.\n\nTranslates Forge messages, tools, and options into Gemini API calls and\nconverts responses back to Forge types. Supports both synchronous (buffered)\nand streaming inference.\n\n# Supported Models\n\n| Model | Features |\n|-------|----------|\n| `gemini-2.5-pro` | Full: tools, images, streaming, structured output |\n| `gemini-2.5-flash` | Full: tools, images, streaming, structured output |\n| `gemini-2.0-flash` | Full: tools, images, streaming, structured output |\n| `gemini-1.5-pro` | Full: tools, images, streaming, structured output |\n| `gemini-1.5-flash` | Full: tools, images, streaming, structured output |\n\n# Examples\n\n```no_run\nuse forge_provider_google::{GoogleLanguageModel, GoogleConfig};\nuse forge_core::model::LanguageModel;\nuse forge_core::message::{ModelMessage, Role};\nuse forge_core::config::GenerateOptions;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\nlet config = GoogleConfig::builder(\"your-api-key\").build();\nlet model = GoogleLanguageModel::new(\"gemini-2.5-pro\".to_string(), config)?;\n\nassert_eq!(model.provider(), \"google\");\nassert_eq!(model.model_id(), \"gemini-2.5-pro\");\nassert!(model.supports_tool_calling());\nassert!(model.supports_image_input());\n# Ok(())\n# }\n```"
            },
            {
              "name": "::GoogleLanguageModel::new",
              "line": 116,
              "signature": "pub fn new(model_id: String, config: GoogleConfig) -> Result<Self, GoogleError>;",
              "documentation": "Creates a new Google Gemini language model instance.\n\n# Arguments\n\n* `model_id` - The Gemini model identifier (e.g., `\"gemini-2.5-pro\"`).\n* `config` - The Google provider configuration with API key and settings.\n\n# Returns\n\nA configured language model instance, or an error if configuration is invalid.\n\n# Errors\n\n- [`GoogleError::InvalidModelId`] if the model ID is empty.\n- [`GoogleError::MissingApiKey`] if the API key is empty.\n\n# Examples\n\n```no_run\nuse forge_provider_google::{GoogleLanguageModel, GoogleConfig};\n\nlet config = GoogleConfig::builder(\"your-key\").build();\nlet model = GoogleLanguageModel::new(\"gemini-2.5-flash\".to_string(), config);\nassert!(model.is_ok());\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-google/src/sse.rs",
          "sha256": "870913569b27e96d1ea787ecbb1a4bfbb1f5e9c128b7f24c83698c01e4ba0003",
          "artifactSha256": "971dba0f6c7974283ede176f00bd3f75c1f58581fe938f6ff246695bf1408bac",
          "url": "/reference/source/forge-rs/crates/forge-provider-google/src/sse.rs.txt",
          "declarations": [
            {
              "name": "::parse_sse_stream",
              "line": 48,
              "signature": "pub fn parse_sse_stream(raw: &[u8]) -> Result<Vec<GenerateContentResponse>, GoogleError>;",
              "documentation": "Parses SSE-formatted bytes into a sequence of [`GenerateContentResponse`] objects.\n\nThe Gemini streaming API returns `data: {json}\\n\\n` formatted events.\nThis function extracts each JSON payload and deserializes it.\n\n# Arguments\n\n* `raw` - The raw SSE response bytes from the streaming endpoint.\n\n# Returns\n\nA vector of parsed responses (one per SSE event), or an error if parsing fails.\n\n# Errors\n\nReturns [`GoogleError::SseParseError`] if an SSE `data:` line contains\ninvalid JSON that cannot be deserialized into a [`GenerateContentResponse`].\n\n# Examples\n\n```\nuse forge_provider_google::sse::parse_sse_stream;\n\nlet raw = b\"data: {\\\"candidates\\\": [], \\\"usageMetadata\\\": {\\\"promptTokenCount\\\": 0, \\\"candidatesTokenCount\\\": 0, \\\"totalTokenCount\\\": 0}}\\n\\n\";\nlet events = parse_sse_stream(raw);\nassert!(events.is_ok());\n```"
            },
            {
              "name": "::GoogleSseDecoder",
              "line": 129,
              "signature": "pub struct GoogleSseDecoder {\n\n}",
              "documentation": "Stateful SSE decoder for incremental Gemini streams.\n\nBuffers partial events across `feed(&[u8])` calls and yields complete\n[`GenerateContentResponse`] values via `drain()`.\n\n# Examples\n\n```\nuse forge_provider_google::sse::GoogleSseDecoder;\n\nlet mut decoder = GoogleSseDecoder::new();\ndecoder\n    .feed(b\"data: {\\\"candidates\\\": []}\\n\\n\")\n    .unwrap();\nlet events = decoder.drain();\nassert_eq!(events.len(), 1);\n```"
            },
            {
              "name": "::GoogleSseDecoder::new",
              "line": 138,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new, empty decoder."
            },
            {
              "name": "::GoogleSseDecoder::feed",
              "line": 147,
              "signature": "pub fn feed(&mut self, bytes: &[u8]) -> Result<(), GoogleError>;",
              "documentation": "Feeds raw bytes into the decoder. Any complete events that become\navailable are queued; call [`drain`](Self::drain) to take them."
            },
            {
              "name": "::GoogleSseDecoder::drain",
              "line": 189,
              "signature": "pub fn drain(&mut self) -> Vec<GenerateContentResponse>;",
              "documentation": "Drains all events ready to be consumed."
            },
            {
              "name": "::GoogleSseDecoder::finish",
              "line": 195,
              "signature": "pub fn finish(&mut self) -> Result<Vec<GenerateContentResponse>, GoogleError>;",
              "documentation": "Signals end-of-stream, processing any leftover unterminated bytes\nas a best-effort final line."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-google/src/types.rs",
          "sha256": "bdbc0f5edcf667b3dbb6feb334ad7e3b3ff5a17992fa9fe2258bb479ec5f6ef6",
          "artifactSha256": "95b3bb6e9f139fc98f073047224846a3c1ec38f90b5d92ab188d3516728a530b",
          "url": "/reference/source/forge-rs/crates/forge-provider-google/src/types.rs.txt",
          "declarations": [
            {
              "name": "::GenerateContentRequest",
              "line": 26,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct GenerateContentRequest {\n/// The conversation contents (user and model turns).\n\npub contents: Vec<GeminiContent>,\n/// System-level instructions, sent outside the conversation turns.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub system_instruction: Option<GeminiContent>,\n/// Tool configurations (function declarations).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub tools: Option<Vec<GeminiToolConfig>>,\n/// Generation parameters (temperature, max tokens, etc.).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub generation_config: Option<GenerationConfig>\n}",
              "documentation": "Top-level request body for the `generateContent` endpoint.\n\nSee: <https://ai.google.dev/api/generate-content#v1beta.models.generateContent>"
            },
            {
              "name": "::GeminiContent",
              "line": 48,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct GeminiContent {\n/// The role of this content block: `\"user\"` or `\"model\"`.\n\n/// System instructions may omit the role.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub role: Option<String>,\n/// The content parts (text, function calls, function responses, images).\n\npub parts: Vec<GeminiPart>\n}",
              "documentation": "A single content block in the Gemini conversation.\n\nEach content block has an optional role (`\"user\"` or `\"model\"`) and\none or more parts. System instructions omit the role."
            },
            {
              "name": "::GeminiPart",
              "line": 74,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(untagged)]\npub enum GeminiPart {\n    /// A text part: `{\"text\": \"...\"}`.\n    Text {\n        /// The text content.\n        text: String,\n    },\n\n    /// A function call emitted by the model: `{\"functionCall\": {...}}`.\n    FunctionCall {\n        /// The function call details.\n        #[serde(rename = \"functionCall\")]\n        function_call: FnCall,\n    },\n\n    /// A function response provided by the client: `{\"functionResponse\": {...}}`.\n    FunctionResponse {\n        /// The function response details.\n        #[serde(rename = \"functionResponse\")]\n        function_response: FnResponse,\n    },\n\n    /// Inline binary data (images, etc.): `{\"inlineData\": {...}}`.\n    InlineData {\n        /// The binary data with MIME type.\n        #[serde(rename = \"inlineData\")]\n        inline_data: Blob,\n    },\n}",
              "documentation": "A single part within a [`GeminiContent`] block.\n\nParts use `#[serde(untagged)]` to match the Gemini API wire format where\neach part is a flat JSON object with exactly one identifying field:\n`\"text\"`, `\"functionCall\"`, `\"functionResponse\"`, or `\"inlineData\"`.\n\n# Wire Format Examples\n\n```json\n{\"text\": \"Hello, world!\"}\n{\"functionCall\": {\"name\": \"get_weather\", \"args\": {\"city\": \"NYC\"}}}\n{\"functionResponse\": {\"name\": \"get_weather\", \"response\": {...}}}\n{\"inlineData\": {\"mimeType\": \"image/png\", \"data\": \"iVBOR...\"}}\n```"
            },
            {
              "name": "::GeminiPart::text",
              "line": 109,
              "signature": "pub fn text(text: impl Into<String>) -> Self;",
              "documentation": "Creates a text part.\n\n# Arguments\n\n* `text` - The text content."
            },
            {
              "name": "::GeminiPart::function_call",
              "line": 119,
              "signature": "pub fn function_call(name: impl Into<String>, args: serde_json::Value) -> Self;",
              "documentation": "Creates a function call part.\n\n# Arguments\n\n* `name` - The function name.\n* `args` - The function arguments as a JSON value."
            },
            {
              "name": "::GeminiPart::function_response",
              "line": 134,
              "signature": "pub fn function_response(name: impl Into<String>, response: serde_json::Value) -> Self;",
              "documentation": "Creates a function response part.\n\n# Arguments\n\n* `name` - The function name this response corresponds to.\n* `response` - The function output as a JSON value."
            },
            {
              "name": "::GeminiPart::inline_data",
              "line": 149,
              "signature": "pub fn inline_data(mime_type: impl Into<String>, data: impl Into<String>) -> Self;",
              "documentation": "Creates an inline data part (for images).\n\n# Arguments\n\n* `mime_type` - The MIME type (e.g., `\"image/png\"`).\n* `data` - Base64-encoded binary data."
            },
            {
              "name": "::FnCall",
              "line": 161,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FnCall {\n/// The function name to invoke.\n\npub name: String,\n/// The arguments as a JSON object.\n\npub args: serde_json::Value\n}",
              "documentation": "A function call from the model."
            },
            {
              "name": "::FnResponse",
              "line": 170,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FnResponse {\n/// The function name this response corresponds to.\n\npub name: String,\n/// The function output as a JSON value.\n\npub response: serde_json::Value\n}",
              "documentation": "A function response to feed back to the model."
            },
            {
              "name": "::Blob",
              "line": 180,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct Blob {\n/// The MIME type (e.g., `\"image/png\"`, `\"image/jpeg\"`).\n\npub mime_type: String,\n/// Base64-encoded binary data.\n\npub data: String\n}",
              "documentation": "Inline binary data (e.g., images) with a MIME type."
            },
            {
              "name": "::GeminiToolConfig",
              "line": 190,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct GeminiToolConfig {\n/// The function declarations available to the model.\n\npub function_declarations: Vec<FunctionDeclaration>\n}",
              "documentation": "Tool configuration containing function declarations."
            },
            {
              "name": "::FunctionDeclaration",
              "line": 197,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FunctionDeclaration {\n/// The function name.\n\npub name: String,\n/// A description of what the function does.\n\npub description: String,\n/// The parameter schema as a JSON Schema object.\n\npub parameters: serde_json::Value\n}",
              "documentation": "A single function declaration (tool definition in Gemini format)."
            },
            {
              "name": "::GenerationConfig",
              "line": 209,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct GenerationConfig {\n/// Sampling temperature (0.0 to 2.0).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub temperature: Option<f64>,\n/// Maximum number of tokens to generate.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub max_output_tokens: Option<u32>,\n/// Top-p (nucleus) sampling threshold.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub top_p: Option<f64>,\n/// Stop sequences -- generation stops when any of these appear.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub stop_sequences: Option<Vec<String>>\n}",
              "documentation": "Generation parameters controlling model output."
            },
            {
              "name": "::GenerateContentResponse",
              "line": 236,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct GenerateContentResponse {\n/// The generated candidates (typically one).\n\n#[serde(default)]\npub candidates: Vec<Candidate>,\n/// Token usage metadata.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub usage_metadata: Option<UsageMetadata>\n}",
              "documentation": "Top-level response from the `generateContent` endpoint.\n\nSee: <https://ai.google.dev/api/generate-content#v1beta.GenerateContentResponse>"
            },
            {
              "name": "::Candidate",
              "line": 249,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct Candidate {\n/// The generated content.\n\npub content: GeminiContent,\n/// The reason generation stopped for this candidate.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub finish_reason: Option<String>\n}",
              "documentation": "A single generation candidate."
            },
            {
              "name": "::UsageMetadata",
              "line": 261,
              "signature": "#[derive(Debug, Clone, Copy, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct UsageMetadata {\n/// Number of tokens in the input prompt.\n\n#[serde(default)]\npub prompt_token_count: u64,\n/// Number of tokens in the generated candidates.\n\n#[serde(default)]\npub candidates_token_count: u64,\n/// Total token count (prompt + candidates).\n\n#[serde(default)]\npub total_token_count: u64\n}",
              "documentation": "Token usage metadata from the API response."
            },
            {
              "name": "::GoogleApiErrorResponse",
              "line": 277,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct GoogleApiErrorResponse {\n/// The error details.\n\npub error: GoogleApiErrorDetail\n}",
              "documentation": "Google API error response format."
            },
            {
              "name": "::GoogleApiErrorDetail",
              "line": 284,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct GoogleApiErrorDetail {\n/// HTTP status code.\n\npub code: u16,\n/// Error message.\n\npub message: String,\n/// Error status string (e.g., \"INVALID_ARGUMENT\").\n\n#[serde(default)]\npub status: String\n}",
              "documentation": "Error detail within a Google API error response."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-web",
      "language": "rust",
      "version": "0.2.0",
      "description": "Native web substrate for the Forge SDK \u2014 fetch, parse, extract, crawl, and compact web content",
      "manifest": "forge-rs/crates/forge-web/Cargo.toml",
      "manifestSha256": "4c2951edbca90cb8d1bfbb13f7bb6f2b2035bfdbb17de2cb49d154887e9f2272",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-web",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-web/src/compact.rs",
          "sha256": "732cc4703c0bdaff99937e0286f177d874f42dc70adb07294405855697fe6928",
          "artifactSha256": "d45a63304309f553634b3d683ae4b39d7aaf8e5425b728ff8a456e501b434246",
          "url": "/reference/source/forge-rs/crates/forge-web/src/compact.rs.txt",
          "declarations": [
            {
              "name": "::web_compact_site",
              "line": 29,
              "signature": "pub async fn web_compact_site(\n    config: &WebSubstrateConfig,\n    root_url: &str,\n    max_depth: u32,\n    max_pages: u32,\n) -> WebResult<CompactedSite>;",
              "documentation": "Compacts a site's content into a [`CompactedSite`] for LLM context.\n\nCrawls the site, converts each page to Markdown, strips boilerplate,\nand estimates the total token count.\n\n# Arguments\n\n* `config` - The web substrate configuration.\n* `root_url` - The URL to start from.\n* `max_depth` - Maximum link-following depth.\n* `max_pages` - Maximum number of pages to include.\n\n# Returns\n\nA [`CompactedSite`] with page content and token estimates.\n\n# Errors\n"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/config.rs",
          "sha256": "3fd9f95e5a6d2752b8fbd8bd12c2b52bcd34b9c44f8214c7347d30924e3c6b64",
          "artifactSha256": "6f9f8fa61738d01df601fd0fe5ba52079f222b13304ad5e6e8142e9cc73b2212",
          "url": "/reference/source/forge-rs/crates/forge-web/src/config.rs.txt",
          "declarations": [
            {
              "name": "::WebSubstrateConfig",
              "line": 35,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct WebSubstrateConfig {\n/// Maximum response body size in bytes.\n\n///\n\n/// Responses exceeding this limit will return\n\n/// [`WebError::ContentTooLarge`](crate::error::WebError::ContentTooLarge).\n\n///\n\n/// Default: 10,485,760 (10 MB).\n\npub max_fetch_size_bytes: u64,\n/// Maximum number of HTTP redirects to follow per request.\n\n///\n\n/// Exceeding this limit returns\n\n/// [`WebError::RedirectLimitExceeded`](crate::error::WebError::RedirectLimitExceeded).\n\n///\n\n/// Default: 5.\n\npub max_redirects: u32,\n/// Request timeout in milliseconds.\n\n///\n\n/// If the server does not respond within this duration, the request\n\n/// returns [`WebError::Timeout`](crate::error::WebError::Timeout).\n\n///\n\n/// Default: 30,000 (30 seconds).\n\npub request_timeout_ms: u64,\n/// IP address ranges to block for SSRF protection.\n\n///\n\n/// Each entry is a CIDR notation string (e.g., `10.0.0.0/8`). Requests\n\n/// whose resolved IP falls within any of these ranges will return\n\n/// [`WebError::SsrfBlocked`](crate::error::WebError::SsrfBlocked).\n\n///\n\n/// Default: private (RFC 1918), loopback, link-local, and IPv6 private ranges.\n\npub blocked_ip_ranges: Vec<String>,\n/// The `User-Agent` header sent with all outgoing requests.\n\n///\n\n/// Default: `\"forge-web/0.1 (+https://github.com/l1fe-labs/forge)\"`.\n\npub user_agent: String,\n/// Whether to respect `robots.txt` directives when crawling.\n\n///\n\n/// When `true`, the substrate will fetch and honor `robots.txt` rules\n\n/// before crawling a site. Disabling this is only appropriate for\n\n/// authorized internal crawling.\n\n///\n\n/// Default: `true`.\n\npub respect_robots_txt: bool\n}",
              "documentation": "Configuration for the web substrate.\n\nControls SSRF protection, redirect limits, content size caps, timeouts,\nand other behavioral defaults. All web operations (fetch, crawl, inspect,\ncompact) use this configuration.\n\n# Defaults\n\nThe default configuration provides a secure baseline:\n- 10 MB max fetch size\n- 5 max redirects\n- 30-second request timeout\n- SSRF protection enabled (blocks private, loopback, link-local ranges)\n- `robots.txt` respected\n\n# Examples\n\n```\nuse forge_web::config::WebSubstrateConfig;\n\nlet config = WebSubstrateConfig::default();\nassert_eq!(config.max_fetch_size_bytes, 10_485_760);\nassert_eq!(config.max_redirects, 5);\nassert_eq!(config.request_timeout_ms, 30_000);\nassert!(config.respect_robots_txt);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/crawl.rs",
          "sha256": "833caa5c63776aff4342376cdde0a0a35c0d04c88ff9a3cd5c8ead35161a46df",
          "artifactSha256": "1fbe9f1c47e8e3c51ed6abd9e93012379a9d7c2ff4df56aebe31634194ab1d5e",
          "url": "/reference/source/forge-rs/crates/forge-web/src/crawl.rs.txt",
          "declarations": [
            {
              "name": "::web_crawl",
              "line": 28,
              "signature": "pub async fn web_crawl(\n    config: &WebSubstrateConfig,\n    root_url: &str,\n    max_depth: u32,\n    max_pages: u32,\n) -> WebResult<Vec<WebFetchResponse>>;",
              "documentation": "Crawls a site starting from the given root URL.\n\nPerforms a breadth-first crawl, fetching pages and extracting links up\nto the specified depth and page count limits.\n\n# Arguments\n\n* `config` - The web substrate configuration.\n* `root_url` - The URL to start crawling from.\n* `max_depth` - Maximum link-following depth (0 = root only).\n* `max_pages` - Maximum number of pages to fetch.\n\n# Returns\n\nA vector of [`WebFetchResponse`] values for all successfully fetched pages.\n\n# Errors\n"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/error.rs",
          "sha256": "f1cf0da76c9cc6f04ff91e055e5f1dd883b84e94c77a565c6e244857e0cc911d",
          "artifactSha256": "9d40ce42a4941c706e9927cba75061a7432225ffd1be74d12645abadb67bce1e",
          "url": "/reference/source/forge-rs/crates/forge-web/src/error.rs.txt",
          "declarations": [
            {
              "name": "::WebError",
              "line": 26,
              "signature": "#[derive(Debug, Error)]\npub enum WebError {\n    /// An HTTP fetch operation failed.\n    ///\n    /// This covers network errors, DNS resolution failures, TLS handshake\n    /// failures, and other transport-level problems.\n    #[error(\"fetch failed for '{url}': {reason}\")]\n    FetchFailed {\n        /// The URL that was being fetched.\n        url: String,\n        /// What went wrong during the fetch.\n        reason: String,\n    },\n\n    /// HTML or document parsing failed.\n    ///\n    /// Returned when the web content cannot be parsed into the expected\n    /// structured format or does not satisfy the operation's parser contract.\n    #[error(\"parse failed for '{url}': {reason}\")]\n    ParseFailed {\n        /// The URL whose content could not be parsed.\n        url: String,\n        /// What went wrong during parsing.\n        reason: String,\n    },\n\n    /// Content extraction failed.\n    ///\n    /// Returned when a CSS selector, XPath, or JSONPath query cannot be\n    /// executed against the parsed content.\n    #[error(\"extraction failed for query '{query}' on '{url}': {reason}\")]\n    ExtractionFailed {\n        /// The URL whose content was being queried.\n        url: String,\n        /// The extraction query that failed.\n        query: String,\n        /// What went wrong during extraction.\n        reason: String,\n    },\n\n    /// A web search operation failed.\n    ///\n    /// Returned when a search query cannot be validated, a search endpoint\n    /// cannot be queried, or the response cannot be parsed into results.\n    #[error(\"search failed for query '{query}': {reason}\")]\n    SearchFailed {\n        /// The search query.\n        query: String,\n        /// What went wrong during the search.\n        reason: String,\n    },\n\n    /// A fetch was blocked because the resolved IP address falls within a\n    /// private, loopback, or link-local range (SSRF protection).\n    ///\n    /// This is a security control. The blocked IP ranges are configured via\n    /// [`WebSubstrateConfig::blocked_ip_ranges`](crate::config::WebSubstrateConfig).\n    #[error(\n        \"SSRF blocked: '{url}' resolved to blocked IP {ip} (private/loopback/link-local range)\"\n    )]\n    SsrfBlocked {\n        /// The URL that was being fetched.\n        url: String,\n        /// The IP address that triggered the block.\n        ip: String,\n    },\n\n    /// The maximum number of HTTP redirects was exceeded.\n    ///\n    /// Configure the limit via\n    /// [`WebSubstrateConfig::max_redirects`](crate::config::WebSubstrateConfig).\n    #[error(\"redirect limit exceeded for '{url}': followed {count} redirects (max {max})\")]\n    RedirectLimitExceeded {\n        /// The original URL that was being fetched.\n        url: String,\n        /// The number of redirects followed before the limit was hit.\n        count: u32,\n        /// The configured maximum number of redirects.\n        max: u32,\n    },\n\n    /// The response body exceeds the configured maximum size.\n    ///\n    /// Configure the limit via\n    /// [`WebSubstrateConfig::max_fetch_size_bytes`](crate::config::WebSubstrateConfig).\n    #[error(\n        \"content too large for '{url}': response size {size} bytes exceeds limit of {max} bytes\"\n    )]\n    ContentTooLarge {\n        /// The URL whose response was too large.\n        url: String,\n        /// The actual (or estimated) response size in bytes.\n        size: u64,\n        /// The configured maximum size in bytes.\n        max: u64,\n    },\n\n    /// The provided URL is invalid or cannot be parsed.\n    ///\n    /// Check that the URL includes a scheme (`http://` or `https://`),\n    /// a valid host, and well-formed path components.\n    #[error(\"invalid URL '{url}': {reason}\")]\n    InvalidUrl {\n        /// The URL string that failed validation.\n        url: String,\n        /// What is wrong with the URL.\n        reason: String,\n    },\n\n    /// The HTTP request timed out.\n    ///\n    /// Configure the timeout via\n    /// [`WebSubstrateConfig::request_timeout_ms`](crate::config::WebSubstrateConfig).\n    #[error(\"request timed out for '{url}' after {timeout_ms}ms\")]\n    Timeout {\n        /// The URL that timed out.\n        url: String,\n        /// The configured timeout in milliseconds.\n        timeout_ms: u64,\n    },\n\n    /// A boundary contract denied the operation.\n    ///\n    /// This occurs when the web substrate detects a security policy violation\n    /// such as a cross-scheme redirect downgrade (HTTPS to HTTP).\n    #[error(\"boundary contract denied for '{url}': {reason}\")]\n    BoundaryContractDenied {\n        /// The URL involved in the denied operation.\n        url: String,\n        /// Why the boundary contract was violated.\n        reason: String,\n    },\n}",
              "documentation": "Errors that can occur during web substrate 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_web::error::WebError;\n\nlet err = WebError::InvalidUrl {\n    url: \"not-a-url\".to_string(),\n    reason: \"missing scheme (expected http:// or https://)\".to_string(),\n};\nassert!(err.to_string().contains(\"not-a-url\"));\n```"
            },
            {
              "name": "::WebResult",
              "line": 160,
              "signature": "pub type WebResult<T> = Result<T, WebError>;",
              "documentation": "A specialized `Result` type for `forge-web` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/extract.rs",
          "sha256": "17a74f9fec1cdc51c8029733c6665014c6398fe8b6cccf1b94967bb20a34821e",
          "artifactSha256": "f65ea30161ea005eed1cc82d501c023b10796f48c145689fbc88031c4fb03315",
          "url": "/reference/source/forge-rs/crates/forge-web/src/extract.rs.txt",
          "declarations": [
            {
              "name": "::web_extract",
              "line": 29,
              "signature": "pub fn web_extract(\n    content: &str,\n    query: &WebExtractQuery,\n    url: &str,\n) -> WebResult<WebExtractResult>;",
              "documentation": "Extracts content from a parsed web page using a query.\n\n# Arguments\n\n* `content` - The HTML or JSON content to query against.\n* `query` - The extraction query (CSS selector, XPath, or JSONPath).\n* `url` - The source URL (used in error messages).\n\n# Returns\n\nA [`WebExtractResult`] containing the matched elements.\n\n# Errors\n\nReturns [`WebError::ExtractionFailed`] for invalid selectors or unsupported\nquery engines."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/fetch.rs",
          "sha256": "86c52a3550e900cc3c60583c100ffa97ba6f5268ae02228e6e51e8312f344e0d",
          "artifactSha256": "e56003068a787b5d000b626163dae7767053b05a959b6e6f2ae0165200bb399b",
          "url": "/reference/source/forge-rs/crates/forge-web/src/fetch.rs.txt",
          "declarations": [
            {
              "name": "::web_fetch",
              "line": 79,
              "signature": "pub async fn web_fetch(\n    config: &WebSubstrateConfig,\n    request: &WebFetchRequest,\n) -> WebResult<WebFetchResponse>;",
              "documentation": "Fetches a URL with SSRF protection, redirect following, and size limits.\n\nThis is the core HTTP primitive for the web substrate. It performs:\n\n1. **URL validation** -- ensures the URL is well-formed and uses HTTP(S).\n2. **DNS resolution** -- resolves the hostname to IP addresses.\n3. **SSRF check** -- verifies resolved IPs are not in blocked ranges.\n4. **HTTP request** -- sends the request with configured timeout.\n5. **Redirect following** -- follows redirects up to the configured limit,\n   blocking HTTPS-to-HTTP downgrades.\n6. **Size enforcement** -- caps the response body at the configured limit.\n\n# Arguments\n\n* `config` - The web substrate configuration controlling limits and security.\n* `request` - The fetch request specifying URL, method, headers, and options.\n\n# Returns\n\nA [`WebFetchResponse`] containing the status, headers, body, content type,\nand final URL.\n\n# Errors\n\n- [`WebError::InvalidUrl`] if the URL is malformed.\n- [`WebError::SsrfBlocked`] if the resolved IP is in a blocked range.\n- [`WebError::BoundaryContractDenied`] if a redirect downgrades HTTPS to HTTP.\n- [`WebError::RedirectLimitExceeded`] if too many redirects occur.\n- [`WebError::ContentTooLarge`] if the response body exceeds the limit.\n- [`WebError::Timeout`] if the request exceeds the configured timeout.\n- [`WebError::FetchFailed`] for network errors, DNS failures, TLS errors, etc.\n\n# Examples\n\n```no_run\nuse forge_web::config::WebSubstrateConfig;\nuse forge_web::types::WebFetchRequest;\nuse forge_web::fetch::web_fetch;\n\n# async fn example() -> Result<(), forge_web::error::WebError> {\nlet config = WebSubstrateConfig::default();\nlet request = WebFetchRequest::get(\"https://example.com\")?;\nlet response = web_fetch(&config, &request).await?;\nassert_eq!(response.status, 200);\n# Ok(())\n# }\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/inspect.rs",
          "sha256": "e9506ed625c1493cf5f282a260daca10f2a0b273160eab8a5ce5630be75a2231",
          "artifactSha256": "f49a484c6bf17eb496a4eb3a952693669cc414697d03d7cdb40664576d1adb0f",
          "url": "/reference/source/forge-rs/crates/forge-web/src/inspect.rs.txt",
          "declarations": [
            {
              "name": "::web_inspect_site",
              "line": 26,
              "signature": "pub async fn web_inspect_site(\n    config: &WebSubstrateConfig,\n    root_url: &str,\n    max_depth: u32,\n    max_pages: u32,\n) -> WebResult<SiteMap>;",
              "documentation": "Inspects a site and returns its structure as a [`SiteMap`].\n\nCrawls the site from the root URL, building a map of pages, their titles,\noutgoing links, and discovery depths.\n\n# Arguments\n\n* `config` - The web substrate configuration.\n* `root_url` - The URL to start inspection from.\n* `max_depth` - Maximum link-following depth.\n* `max_pages` - Maximum number of pages to inspect.\n\n# Returns\n\nA [`SiteMap`] describing the site structure.\n\n# Errors\n"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/lib.rs",
          "sha256": "26630838bdf402c32e999baa41f3bde35d394100ee9c67ab0f77f83a8a17a983",
          "artifactSha256": "59105636854fa4271fc4554dedb73f309cf833c985a599c06fd7fb05e542d9b5",
          "url": "/reference/source/forge-rs/crates/forge-web/src/lib.rs.txt",
          "declarations": [
            {
              "name": "compact",
              "line": 82,
              "signature": "pub mod compact;",
              "documentation": "# forge-web\n\nNative web substrate for the Forge SDK.\n\nThis crate provides first-class web capabilities as core runtime primitives:\nfetch, parse, extract, crawl, inspect, compact, and convert web content. These\noperations are built in to every Forge installation -- no external services,\nMCP servers, or third-party dependencies required for basic web access.\n\n# Capabilities and Readiness\n\n| Operation | Status | Description |\n|-----------|--------|-------------|\n| **Fetch** | **READY** | HTTP GET/POST with SSRF protection, redirect limits, and size caps |\n| **Tools** | **READY** | `web_fetch`, `web_parse`, `web_extract`, `web_to_markdown`, `web_crawl`, `web_inspect_site`, `web_compact_site`, and `web_search` execute through the Forge tool registry |\n| **Parse** | **READY** | HTML parser validation and raw HTML content representation |\n| **Extract** | **READY** | CSS selector extraction over HTML and native JSONPath extraction over JSON; XPath returns a typed unsupported error |\n| **Markdown** | **READY** | HTML to Markdown conversion for headings, paragraphs, lists, preformatted blocks, and blockquotes |\n| **Crawl** | **READY** | Same-origin breadth-first site crawl with depth and page limits |\n| **Inspect** | **READY** | Same-origin site map discovery with page titles, links, and crawl depth |\n| **Compact** | **READY** | Multi-page site compaction into Markdown pages with an estimated token count |\n| **Search** | **READY** | HTML search endpoint integration parsed into ranked title, URL, and snippet results |\n\n**Important for consumers**: `Fetch`, `Parse`, CSS `Extract`, JSONPath\n`Extract`, `Markdown`, `Crawl`, `Inspect`, `Compact`, `Search`, and their\nmatching tool executors are production-ready. JSONPath supports `$`, dot\nfields, array indexes, and `[*]` array wildcards. XPath returns an explicit\nunsupported-query error until its implementation slice is wired.\n\n# Security\n\nThe fetch layer enforces SSRF protection by default. All private, loopback,\nand link-local IP ranges are blocked. Cross-scheme downgrades (HTTPS to HTTP)\non redirects are denied. Content size and redirect count are capped.\n\n# Architecture\n\n```text\nWebSubstrateConfig\n       |\n       v\n   web_fetch() \u2500\u2500> WebFetchResponse\n       |\n       v\n   web_parse() \u2500\u2500> WebContent::Html\n       |\n       v\n   web_extract() \u2500\u2500> WebExtractResult (CSS + JSONPath ready)\n   web_to_markdown() \u2500\u2500> WebContent::Markdown\n   web_crawl() \u2500\u2500> Vec<WebFetchResponse>\n   web_inspect_site() \u2500\u2500> SiteMap\n   web_compact_site() \u2500\u2500> CompactedSite\n   web_search() \u2500\u2500> WebSearchResponse\n```\n\n# Tool Registration\n\nAll web operations are available as registered tools via\n[`tools::register_web_tools`]. Each tool has a `ToolDefinition` with a\nproper JSON Schema, description, and `ToolTier::External` classification.\nThe `web_fetch`, `web_parse`, `web_extract`, `web_to_markdown`,\n`web_crawl`, `web_inspect_site`, `web_compact_site`, and `web_search`\nexecutors call the native substrate.\n\n# Examples\n\n```no_run\nuse forge_web::config::WebSubstrateConfig;\nuse forge_web::types::WebFetchRequest;\nuse forge_web::fetch::web_fetch;\n\n# async fn example() -> Result<(), forge_web::error::WebError> {\nlet config = WebSubstrateConfig::default();\nlet request = WebFetchRequest::get(\"https://example.com\")?;\nlet response = web_fetch(&config, &request).await?;\nprintln!(\"Status: {}\", response.status);\n# Ok(())\n# }\n```"
            },
            {
              "name": "config",
              "line": 83,
              "signature": "pub mod config;",
              "documentation": ""
            },
            {
              "name": "crawl",
              "line": 84,
              "signature": "pub mod crawl;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 85,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "extract",
              "line": 86,
              "signature": "pub mod extract;",
              "documentation": ""
            },
            {
              "name": "fetch",
              "line": 88,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod fetch;",
              "documentation": ""
            },
            {
              "name": "inspect",
              "line": 89,
              "signature": "pub mod inspect;",
              "documentation": ""
            },
            {
              "name": "markdown",
              "line": 90,
              "signature": "pub mod markdown;",
              "documentation": ""
            },
            {
              "name": "parse",
              "line": 91,
              "signature": "pub mod parse;",
              "documentation": ""
            },
            {
              "name": "search",
              "line": 92,
              "signature": "pub mod search;",
              "documentation": ""
            },
            {
              "name": "tools",
              "line": 93,
              "signature": "pub mod tools;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 94,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 97,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::config::WebSubstrateConfig;",
              "line": 98,
              "signature": "pub use crate::config::WebSubstrateConfig;",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{WebError, WebResult};",
              "line": 99,
              "signature": "pub use crate::error::{WebError, WebResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::fetch::web_fetch;",
              "line": 101,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::fetch::web_fetch;",
              "documentation": ""
            },
            {
              "name": "pub use crate::tools::register_web_tools;",
              "line": 102,
              "signature": "pub use crate::tools::register_web_tools;",
              "documentation": ""
            },
            {
              "name": "pub use crate::types::{\n        CompactedSite, SiteMap, SiteNode, WebContent, WebExtractQuery, WebExtractResult,\n        WebFetchRequest, WebFetchResponse, WebSearchResponse, WebSearchResult,\n    };",
              "line": 103,
              "signature": "pub use crate::types::{\n        CompactedSite, SiteMap, SiteNode, WebContent, WebExtractQuery, WebExtractResult,\n        WebFetchRequest, WebFetchResponse, WebSearchResponse, WebSearchResult,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/markdown.rs",
          "sha256": "97794948acd3030912822500d9733b89d7ba1f581cc82e3e89bbbae004c76b6f",
          "artifactSha256": "40fcddc273f737365eab4c0d34662b90834dccce578aa5991588a8e64ae6287b",
          "url": "/reference/source/forge-rs/crates/forge-web/src/markdown.rs.txt",
          "declarations": [
            {
              "name": "::web_to_markdown",
              "line": 20,
              "signature": "pub fn web_to_markdown(html: &str, url: &str) -> WebResult<WebContent>;",
              "documentation": "Converts HTML content to Markdown.\n\n# Arguments\n\n* `html` - The HTML string to convert.\n* `url` - The source URL (used in error messages).\n\n# Returns\n\nA [`WebContent::Markdown`] containing the converted content.\n\n# Errors\n\nReturns [`WebError::ParseFailed`] if the document cannot be converted."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/parse.rs",
          "sha256": "69e4160eea14af0b4abdce36244340de00dddea2a6c4dcdff6edf46689872af5",
          "artifactSha256": "bf970e26dc7b70a6723b63b27ab1ecb11673988d4499dcb9062db8aaef05cd0d",
          "url": "/reference/source/forge-rs/crates/forge-web/src/parse.rs.txt",
          "declarations": [
            {
              "name": "::web_parse",
              "line": 21,
              "signature": "pub fn web_parse(html: &str, url: &str) -> WebResult<WebContent>;",
              "documentation": "Parses raw HTML content into a structured [`WebContent`] representation.\n\n# Arguments\n\n* `html` - The raw HTML string to parse.\n* `url` - The source URL (used in error messages).\n\n# Returns\n\nA [`WebContent::Html`] containing the parsed content.\n\n# Errors\n\nReturns [`WebError::ParseFailed`] when the document contains no readable\nHTML nodes."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/search.rs",
          "sha256": "faf0d6bda12c857546c3abe9ad14fafb32ad0a28c939890f9a9c41f92773f610",
          "artifactSha256": "a7918b2eaa03eb14877aa7c0fef82fdc71cfcf354fc5ecd4f15c6bb63be07989",
          "url": "/reference/source/forge-rs/crates/forge-web/src/search.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_SEARCH_ENDPOINT",
              "line": 11,
              "signature": "pub const DEFAULT_SEARCH_ENDPOINT: &str;",
              "documentation": "Default HTML search endpoint used by [`web_search`]."
            },
            {
              "name": "::web_search",
              "line": 17,
              "signature": "pub async fn web_search(\n    config: &WebSubstrateConfig,\n    query: &str,\n    num_results: u32,\n) -> WebResult<WebSearchResponse>;",
              "documentation": "Search the web using the configured first-party HTML search adapter.\n\nThe implementation intentionally goes through [`web_fetch`] so the same\nSSRF, redirect, timeout, and size controls apply to search traffic."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/tools.rs",
          "sha256": "8cd7ed9a392ac34ef20f813e7d3a2e0a4a9a1907d30a392d0b8947ccb478b048",
          "artifactSha256": "6e0bf96aa145af8a58acddb5afe47ecb38cca033021f3a2f5e487fac385bfa34",
          "url": "/reference/source/forge-rs/crates/forge-web/src/tools.rs.txt",
          "declarations": [
            {
              "name": "::WEB_TOOL_NAMES",
              "line": 54,
              "signature": "pub const WEB_TOOL_NAMES: &[&str];",
              "documentation": "The names of all web tools registered by [`register_web_tools`]."
            },
            {
              "name": "::web_tool_definitions",
              "line": 90,
              "signature": "pub fn web_tool_definitions() -> Vec<ToolDefinition>;",
              "documentation": "Returns the tool definitions for all web substrate tools.\n\nEach tool definition includes:\n- A unique name matching the web substrate API function\n- A human-readable description suitable for LLM tool selection\n- A JSON Schema defining the expected parameters\n- `ToolTier::External` classification (web operations access external resources)\n\n# Returns\n\nA `Vec` of 8 [`ToolDefinition`] values, one for each web tool.\n\n# Examples\n\n```\nuse forge_web::tools::web_tool_definitions;\n\nlet defs = web_tool_definitions();\nassert_eq!(defs.len(), 8);\n\n// All tools are External tier\nfor def in &defs {\n    assert_eq!(def.tier(), forge_core::tool::ToolTier::External);\n}\n```"
            },
            {
              "name": "::register_web_tools",
              "line": 136,
              "signature": "pub fn register_web_tools(registry: &mut ToolRegistry) -> Result<(), ForgeToolError>;",
              "documentation": "Registers all 8 web substrate tools into the given [`ToolRegistry`].\n\nEach tool is registered with its definition (name, description, parameter\nschema, tier) and an executor. Fetch, parse, extract, Markdown conversion,\ncrawl, inspect, and compact tools run the real Forge web substrate. Search\nreturns a descriptive tool error until a search-provider integration is\nwired.\n\n# Arguments\n\n* `registry` - The tool registry to register web tools into.\n\n# Returns\n\n`Ok(())` if all 8 tools are registered successfully.\n\n# Errors\n\nReturns [`ForgeToolError::RegistryError`] if any tool name is already\nregistered in the registry.\n\n# Examples\n\n```\nuse forge_tool::registry::ToolRegistry;\nuse forge_web::tools::register_web_tools;\n\nlet mut registry = ToolRegistry::new();\nregister_web_tools(&mut registry).unwrap();\nassert_eq!(registry.len(), 8);\nassert!(registry.contains(\"web_fetch\"));\nassert!(registry.contains(\"web_search\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-web/src/types.rs",
          "sha256": "f2545a2e9b88a253e9786d9a68a9448a9abbad1b7dccc547d88dc553bf9f0215",
          "artifactSha256": "834ba89425d5af56446029d591111b2f0894024baa07f98d29fbdf78c5d037d3",
          "url": "/reference/source/forge-rs/crates/forge-web/src/types.rs.txt",
          "declarations": [
            {
              "name": "::HttpMethod",
              "line": 14,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum HttpMethod {\n    /// HTTP GET request.\n    #[serde(rename = \"GET\")]\n    Get,\n    /// HTTP POST request.\n    #[serde(rename = \"POST\")]\n    Post,\n    /// HTTP HEAD request.\n    #[serde(rename = \"HEAD\")]\n    Head,\n}",
              "documentation": "An HTTP method for web fetch requests."
            },
            {
              "name": "::WebFetchRequest",
              "line": 47,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct WebFetchRequest {\n/// The target URL to fetch.\n\npub url: String,\n/// The HTTP method to use.\n\npub method: HttpMethod,\n/// HTTP headers to include in the request.\n\n///\n\n/// Keys are header names, values are header values. Uses `BTreeMap` for\n\n/// deterministic serialization.\n\npub headers: BTreeMap<String, String>,\n/// Request timeout in milliseconds. Overrides the config default if set.\n\npub timeout_ms: Option<u64>,\n/// Whether to follow HTTP redirects.\n\npub follow_redirects: bool,\n/// Maximum number of redirects to follow. Overrides the config default if set.\n\npub max_redirects: Option<u32>,\n/// Optional request body (for POST requests).\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub body: Option<String>\n}",
              "documentation": "A web fetch request specifying URL, method, headers, and fetch behavior.\n\n# Examples\n\n```\nuse forge_web::types::WebFetchRequest;\n\nlet request = WebFetchRequest::get(\"https://example.com\").unwrap();\nassert_eq!(request.url, \"https://example.com/\");\n```"
            },
            {
              "name": "::WebFetchRequest::get",
              "line": 98,
              "signature": "pub fn get(url: &str) -> Result<Self, WebError>;",
              "documentation": "Creates a GET request for the given URL.\n\n# Arguments\n\n* `url` - The URL to fetch. Must be a valid HTTP or HTTPS URL.\n\n# Returns\n\nA `WebFetchRequest` configured for GET with default settings.\n\n# Errors\n\nReturns [`WebError::InvalidUrl`] if the URL cannot be parsed or uses\na non-HTTP scheme.\n\n# Examples\n\n```\nuse forge_web::types::WebFetchRequest;\n\nlet req = WebFetchRequest::get(\"https://example.com\").unwrap();\nassert_eq!(req.method, forge_web::types::HttpMethod::Get);\n```"
            },
            {
              "name": "::WebFetchRequest::post",
              "line": 134,
              "signature": "pub fn post(url: &str) -> Result<Self, WebError>;",
              "documentation": "Creates a POST request for the given URL.\n\n# Arguments\n\n* `url` - The URL to fetch. Must be a valid HTTP or HTTPS URL.\n\n# Returns\n\nA `WebFetchRequest` configured for POST with default settings.\n\n# Errors\n\nReturns [`WebError::InvalidUrl`] if the URL cannot be parsed or uses\na non-HTTP scheme.\n\n# Examples\n\n```\nuse forge_web::types::WebFetchRequest;\n\nlet req = WebFetchRequest::post(\"https://api.example.com/data\").unwrap();\nassert_eq!(req.method, forge_web::types::HttpMethod::Post);\n```"
            },
            {
              "name": "::WebFetchRequest::head",
              "line": 161,
              "signature": "pub fn head(url: &str) -> Result<Self, WebError>;",
              "documentation": "Creates a HEAD request for the given URL.\n\n# Arguments\n\n* `url` - The URL to fetch. Must be a valid HTTP or HTTPS URL.\n\n# Returns\n\nA `WebFetchRequest` configured for HEAD with default settings.\n\n# Errors\n\nReturns [`WebError::InvalidUrl`] if the URL cannot be parsed or uses\na non-HTTP scheme."
            },
            {
              "name": "::WebFetchRequest::with_header",
              "line": 184,
              "signature": "pub fn with_header(mut self, name: impl Into<String>, value: impl Into<String>) -> Self;",
              "documentation": "Adds a header to the request.\n\n# Arguments\n\n* `name` - The header name.\n* `value` - The header value.\n\n# Returns\n\nThe modified request (builder pattern)."
            },
            {
              "name": "::WebFetchRequest::with_body",
              "line": 198,
              "signature": "pub fn with_body(mut self, body: impl Into<String>) -> Self;",
              "documentation": "Sets the request body (for POST requests).\n\n# Arguments\n\n* `body` - The request body as a string.\n\n# Returns\n\nThe modified request (builder pattern)."
            },
            {
              "name": "::WebFetchRequest::with_timeout",
              "line": 212,
              "signature": "pub fn with_timeout(mut self, timeout_ms: u64) -> Self;",
              "documentation": "Sets the request timeout in milliseconds.\n\n# Arguments\n\n* `timeout_ms` - The timeout duration in milliseconds.\n\n# Returns\n\nThe modified request (builder pattern)."
            },
            {
              "name": "::WebFetchResponse",
              "line": 223,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct WebFetchResponse {\n/// The HTTP status code (e.g., 200, 404, 500).\n\npub status: u16,\n/// Response headers. Uses `BTreeMap` for deterministic serialization.\n\npub headers: BTreeMap<String, String>,\n/// The response body as a string.\n\n///\n\n/// Binary responses are base64-encoded. Non-UTF-8 text responses use\n\n/// lossy conversion.\n\npub body: String,\n/// The detected content type from the `Content-Type` header.\n\n///\n\n/// `None` if no `Content-Type` header is present.\n\npub content_type: Option<String>,\n/// The final URL after following any redirects.\n\n///\n\n/// Matches the request URL if no redirects occurred.\n\npub final_url: String\n}",
              "documentation": "An HTTP response from a web fetch operation.\n\nContains the status code, response headers, body content, detected content\ntype, and the final URL after any redirects."
            },
            {
              "name": "::WebContent",
              "line": 253,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"type\", content = \"data\")]\npub enum WebContent {\n    /// Raw HTML content.\n    Html(String),\n    /// Markdown-converted content.\n    Markdown(String),\n    /// Plain text content (HTML tags stripped).\n    PlainText(String),\n    /// Structured JSON content.\n    Json(serde_json::Value),\n    /// Binary content (e.g., images, PDFs).\n    Binary(Vec<u8>),\n}",
              "documentation": "Represents web content in various formats.\n\nThe `WebContent` enum captures the different representations of web\ncontent that the substrate can produce."
            },
            {
              "name": "::WebExtractQuery",
              "line": 273,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"type\", content = \"expression\")]\npub enum WebExtractQuery {\n    /// A CSS selector query (e.g., `div.content > p`).\n    CssSelector(String),\n    /// An XPath query (e.g., `//div[@class='content']/p`).\n    XPath(String),\n    /// A JSONPath query (e.g., `$.data.items[*].name`).\n    JsonPath(String),\n}",
              "documentation": "A query for extracting content from a parsed web page.\n\nSupports CSS selectors, XPath expressions, and JSONPath queries. The native\nJSONPath evaluator supports `$`, dot fields, array indexes, and `[*]` array\nwildcards."
            },
            {
              "name": "::WebExtractResult",
              "line": 298,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct WebExtractResult {\n/// The matched elements or values as strings.\n\npub matches: Vec<String>\n}",
              "documentation": "The result of a content extraction query.\n\nContains the matched elements as strings. For CSS selectors and XPath,\neach match is the outer HTML or text content of the matched element.\nFor JSONPath, each match is the JSON-serialized matched value."
            },
            {
              "name": "::SiteNode",
              "line": 305,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SiteNode {\n/// The URL of this page.\n\npub url: String,\n/// The page title extracted from the `<title>` tag, if available.\n\npub title: Option<String>,\n/// URLs linked from this page.\n\npub links: Vec<String>,\n/// The crawl depth at which this node was discovered (0 = root).\n\npub depth: u32\n}",
              "documentation": "A node in a site map representing a single page and its outgoing links."
            },
            {
              "name": "::SiteMap",
              "line": 320,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SiteMap {\n/// The root URL that the crawl started from.\n\npub root: String,\n/// All discovered site nodes, in breadth-first order.\n\npub nodes: Vec<SiteNode>\n}",
              "documentation": "A site map representing the structure of a website.\n\nBuilt by crawling from a root URL and following links to a configured depth."
            },
            {
              "name": "::CompactedSite",
              "line": 332,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct CompactedSite {\n/// Map of URL to compacted Markdown content. Uses `BTreeMap` for\n\n/// deterministic serialization order.\n\npub pages: BTreeMap<String, String>,\n/// Estimated total token count across all pages.\n\n///\n\n/// Uses a rough heuristic of ~4 characters per token.\n\npub total_tokens_estimate: u64\n}",
              "documentation": "A compacted representation of a multi-page site, optimized for LLM context.\n\nEach page's content is converted to Markdown and stripped of boilerplate.\nThe total token estimate helps with context window management."
            },
            {
              "name": "::WebSearchResult",
              "line": 344,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct WebSearchResult {\n/// Human-readable search result title.\n\npub title: String,\n/// Canonical result URL.\n\npub url: String,\n/// Optional search-provider snippet or summary.\n\npub snippet: Option<String>\n}",
              "documentation": "A single web search result."
            },
            {
              "name": "::WebSearchResponse",
              "line": 355,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct WebSearchResponse {\n/// Original user query after trimming leading/trailing whitespace.\n\npub query: String,\n/// Search results in provider rank order.\n\npub results: Vec<WebSearchResult>\n}",
              "documentation": "Search response returned by [`crate::search::web_search`]."
            },
            {
              "name": "::validate_url",
              "line": 378,
              "signature": "pub fn validate_url(url: &str) -> Result<String, WebError>;",
              "documentation": "Validates and normalizes a URL string.\n\nEnsures the URL uses HTTP or HTTPS scheme and is well-formed.\n\n# Arguments\n\n* `url` - The URL string to validate.\n\n# Returns\n\nThe normalized URL string on success.\n\n# Errors\n\nReturns [`WebError::InvalidUrl`] if the URL is malformed or uses a\nnon-HTTP scheme."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-flowers",
      "language": "rust",
      "version": "0.2.0",
      "description": "Bridge connecting Forge agents and Brew plans to the Flowers durable execution runtime",
      "manifest": "forge-rs/crates/forge-flowers/Cargo.toml",
      "manifestSha256": "48a4d44de735e0b03529c22309d9778545d1c43a442d733ff3818b9d4377c315",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-flowers",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-flowers/src/client.rs",
          "sha256": "95bc233d0c0fc59ac36301af75a835fad6bdbff2d24be9b0b66f3c4f0705efaf",
          "artifactSha256": "22c8e24468687734cec95dc65b2628a354ba09a3fba31ecbdad269e57f9eb7f5",
          "url": "/reference/source/forge-rs/crates/forge-flowers/src/client.rs.txt",
          "declarations": [
            {
              "name": "::FlowersClient",
              "line": 53,
              "signature": "pub struct FlowersClient {\n\n}",
              "documentation": "Flowers client for Rust embedded mode.\n\nWraps [`FlowersRuntime`] and provides a Forge-friendly API for submitting\nand managing durable executions of Forge agents and Brew plans.\n\n# Thread Safety\n\nThe client is `Send + Sync` and can be shared across threads via `Arc`.\n\n# Examples\n\n```no_run\nuse forge_flowers::client::FlowersClient;\nuse flowers::{FlowersConfig, FlowersRuntime};\nuse flowers::journal::memory::MemoryJournalStore;\nuse std::sync::Arc;\n\nlet store = Arc::new(MemoryJournalStore::new());\nlet runtime = FlowersRuntime::new(FlowersConfig::testing_direct(), store);\nlet client = FlowersClient::new(runtime);\n```"
            },
            {
              "name": "::FlowersClient::new",
              "line": 68,
              "signature": "pub fn new(runtime: FlowersRuntime) -> Self;",
              "documentation": "Creates a new `FlowersClient` wrapping the given runtime.\n\n# Arguments\n\n* `runtime` - The Flowers runtime to wrap.\n\n# Returns\n\nA client ready to submit and manage executions."
            },
            {
              "name": "::FlowersClient::submit_agent_run",
              "line": 92,
              "signature": "pub async fn submit_agent_run(\n        &self,\n        config: AgentConfig,\n        prompt: impl Into<String>,\n        factory: Arc<dyn ForgeAgentFactory>,\n    ) -> ForgeBridgeResult<ExecutionId>;",
              "documentation": "Submits a Forge agent for durable execution.\n\nThe agent is wrapped in a [`ForgeWorkflowHandler`] and submitted to\nthe Flowers runtime. The execution runs asynchronously; the returned\n[`ExecutionId`] can be used to query status, cancel, or signal.\n\n# Arguments\n\n* `config` - The agent configuration.\n* `prompt` - The text prompt to run the agent with.\n* `factory` - Factory that builds agents with journaled dependencies.\n\n# Returns\n\nThe execution ID assigned by the Flowers runtime.\n\n# Errors\n\nReturns [`ForgeBridgeError::Flowers`] if the runtime rejects the\nexecution (e.g., concurrent limit reached)."
            },
            {
              "name": "::FlowersClient::submit_brew_run",
              "line": 129,
              "signature": "pub async fn submit_brew_run(\n        &self,\n        plan: ResolvedBrewPlan,\n        provider: Arc<dyn LanguageModel>,\n    ) -> ForgeBridgeResult<ExecutionId>;",
              "documentation": "Submits a resolved Brew plan for durable execution.\n\nEach node in the plan is executed as a journaled call, providing\nnode-level replay granularity.\n\n# Arguments\n\n* `plan` - The resolved brew plan to execute.\n* `provider` - The language model provider for agent step nodes.\n\n# Returns\n\nThe execution ID assigned by the Flowers runtime.\n\n# Errors\n\nReturns [`ForgeBridgeError::PlanMappingFailed`] if the plan has\nstructural problems, or [`ForgeBridgeError::Flowers`] if the runtime\nrejects the execution."
            },
            {
              "name": "::FlowersClient::get_execution",
              "line": 163,
              "signature": "pub async fn get_execution(\n        &self,\n        id: &ExecutionId,\n    ) -> ForgeBridgeResult<Option<ExecutionInfo>>;",
              "documentation": "Queries the status of an execution.\n\n# Arguments\n\n* `id` - The execution ID to query.\n\n# Returns\n\nThe execution info if found, or `None` if the execution does not exist.\n\n# Errors\n\nReturns [`ForgeBridgeError::Flowers`] if the underlying store fails."
            },
            {
              "name": "::FlowersClient::cancel_execution",
              "line": 187,
              "signature": "pub async fn cancel_execution(&self, id: &ExecutionId) -> ForgeBridgeResult<()>;",
              "documentation": "Cancels a running execution.\n\nThe execution transitions to the `Cancelled` state. If the execution\nis already in a terminal state, the cancel is a no-op (Flowers will\nreturn an error that is propagated).\n\n# Arguments\n\n* `id` - The execution ID to cancel.\n\n# Errors\n\nReturns [`ForgeBridgeError::Flowers`] if the execution cannot be\ncancelled (e.g., not found, already terminal)."
            },
            {
              "name": "::FlowersClient::signal_execution",
              "line": 210,
              "signature": "pub async fn signal_execution(\n        &self,\n        id: &ExecutionId,\n        name: &str,\n        payload: serde_json::Value,\n    ) -> ForgeBridgeResult<()>;",
              "documentation": "Sends a signal to a running or suspended execution.\n\nSignals are the mechanism for external events (human approval,\nwebhook callbacks, timer expirations) to reach a durable execution.\nThe signal is persisted in the journal store and delivered to the\nexecution when it polls for signals.\n\n# Arguments\n\n* `id` - The execution ID to signal.\n* `name` - The signal name (e.g., `\"approval\"`, `\"webhook_response\"`).\n* `payload` - The signal payload as a JSON value.\n\n# Errors\n\nReturns [`ForgeBridgeError::Flowers`] if the signal cannot be written."
            },
            {
              "name": "::FlowersClient::list_executions",
              "line": 231,
              "signature": "pub async fn list_executions(&self) -> ForgeBridgeResult<Vec<ExecutionInfo>>;",
              "documentation": "Lists all active (non-terminal) executions.\n\n# Returns\n\nA vector of execution info for all active executions.\n\n# Errors\n\nReturns [`ForgeBridgeError::Flowers`] if the underlying store fails."
            },
            {
              "name": "::FlowersClient::runtime",
              "line": 243,
              "signature": "#[must_use]\npub fn runtime(&self) -> &FlowersRuntime;",
              "documentation": "Returns a reference to the underlying Flowers runtime.\n\nThis provides escape-hatch access to the full Flowers API for\nadvanced use cases (resume, recovery, direct journal access)."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-flowers/src/error.rs",
          "sha256": "8a0824146ba62f3b4a11865223ec855e0b6b90657285c6d0a6d4284301b23f30",
          "artifactSha256": "d3927d47da4eb3f85710b26254776e29713bb9ddd8cae20dc68635acf5c5e287",
          "url": "/reference/source/forge-rs/crates/forge-flowers/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ForgeBridgeError",
              "line": 18,
              "signature": "#[derive(Debug, Error)]\npub enum ForgeBridgeError {\n    /// The bridge failed to create a Forge agent via the factory.\n    ///\n    /// This typically indicates a misconfiguration: the factory could not\n    /// construct an agent with the given journaled provider and tool registry.\n    #[error(\"handler creation failed for agent '{agent_name}': {reason}\")]\n    HandlerCreationFailed {\n        /// The agent name that was being constructed.\n        agent_name: String,\n        /// Why construction failed.\n        reason: String,\n    },\n\n    /// A Brew node failed during execution within the workflow handler.\n    ///\n    /// Contains the node ID so the caller can identify which step in the\n    /// Brew plan caused the failure.\n    #[error(\"node '{node_id}' execution failed: {reason}\")]\n    NodeExecutionFailed {\n        /// The node that failed.\n        node_id: String,\n        /// Why execution failed.\n        reason: String,\n    },\n\n    /// The bridge could not map a `ResolvedBrewPlan` to a Flowers workflow.\n    ///\n    /// This indicates a structural problem with the plan: missing entry nodes,\n    /// empty execution order, or an invalid graph topology.\n    #[error(\"plan mapping failed for brew '{brew_id}': {reason}\")]\n    PlanMappingFailed {\n        /// The brew ID of the plan that could not be mapped.\n        brew_id: String,\n        /// Why the mapping failed.\n        reason: String,\n    },\n\n    /// During replay, the bridge detected that the input to a journaled call\n    /// does not match the cached input from the original execution.\n    ///\n    /// This is a hard error by default (fail closed). The execution must be\n    /// cancelled and restarted if the agent's inputs have changed.\n    #[error(\"replay input mismatch at interface '{interface}' method '{method}': {reason}\")]\n    ReplayInputMismatch {\n        /// The WIT interface of the mismatched call.\n        interface: String,\n        /// The method of the mismatched call.\n        method: String,\n        /// Description of what differed.\n        reason: String,\n    },\n\n    /// The bridge encountered a `ResolvedNodeKind` that it does not know how\n    /// to execute in the current version.\n    #[error(\"unsupported node kind '{kind}' in node '{node_id}': {reason}\")]\n    UnsupportedNodeKind {\n        /// The node ID containing the unsupported kind.\n        node_id: String,\n        /// The kind name that is not supported.\n        kind: String,\n        /// Additional context.\n        reason: String,\n    },\n\n    /// An error propagated from the Flowers runtime.\n    #[cfg(not(target_arch = \"wasm32\"))]\n    #[error(\"flowers runtime error: {0}\")]\n    Flowers(#[from] flowers::FlowersError),\n\n    /// A serialization or deserialization error during bridging.\n    #[error(\"serialization error in bridge: {0}\")]\n    Serialization(#[from] serde_json::Error),\n\n    /// An error propagated from the Forge agent layer.\n    #[error(\"forge agent error: {0}\")]\n    ForgeAgent(String),\n}",
              "documentation": "Errors produced by the Forge-Flowers bridge.\n\nThese errors cover the bridge-specific failure modes that do not originate\nin either Flowers or Forge independently, but arise from the interaction\nbetween the two systems."
            },
            {
              "name": "::ForgeBridgeResult",
              "line": 97,
              "signature": "pub type ForgeBridgeResult<T> = Result<T, ForgeBridgeError>;",
              "documentation": "Result alias for the Forge-Flowers bridge."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-flowers/src/handler.rs",
          "sha256": "58f5c133b108a7556c9c311f0b5c5c0ca7c52268fd78f0db2103a7aed73a30b7",
          "artifactSha256": "fe5c7d69acbce497893f83114dbb397d416ed6b47555e03f0ad05f4c72b93566",
          "url": "/reference/source/forge-rs/crates/forge-flowers/src/handler.rs.txt",
          "declarations": [
            {
              "name": "::ForgeAgentFactory",
              "line": 70,
              "signature": "pub trait ForgeAgentFactory: Send + Sync {\n    /// Creates a Forge agent whose LLM calls and tool invocations are\n    /// routed through the Flowers execution context for journaling.\n    ///\n    /// # Arguments\n    ///\n    /// * `ctx` - The Flowers execution context for this workflow execution.\n    ///\n    /// # Returns\n    ///\n    /// A boxed [`Agent`] ready for execution within a Flowers workflow.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`ForgeBridgeError::HandlerCreationFailed`] if agent\n    /// construction fails (e.g., missing configuration, provider not found).\n    fn build(&self, ctx: &ExecutionContext) -> Result<Box<dyn Agent>, ForgeBridgeError>;\n}",
              "documentation": "Factory trait for constructing Forge agents with journaled dependencies.\n\nImplementations create a [`Agent`] where all side-effects (LLM calls,\ntool invocations) are routed through the Flowers [`ExecutionContext`]\nfor journaling and replay.\n\n# Why This Exists\n\nThe agent cannot be pre-built because the [`ExecutionContext`] is only\navailable inside `WorkflowHandler::execute()`. The factory pattern\ndefers agent construction until the context is available, then injects\nthe journaled wrappers.\n\n# Implementors\n\nA typical implementation wraps the real `LanguageModel` in a\n[`JournaledProvider`](crate::interceptor::JournaledProvider) and creates a tool executor backed by a\n[`JournaledToolExecutor`](crate::interceptor::JournaledToolExecutor),\nthen constructs the agent with these journaled dependencies.\n\n# Lifetime\n\nThe `build` method receives the `ExecutionContext` by reference. The\nreturned agent must not borrow from the context -- instead, the factory\nshould use the [`JournaledProvider`](crate::interceptor::JournaledProvider) pattern to capture the context's\n`call()` behavior through owned closures or channels."
            },
            {
              "name": "::ForgeWorkflowHandler",
              "line": 110,
              "signature": "pub struct ForgeWorkflowHandler {\n\n}",
              "documentation": "Flowers workflow handler that wraps a single Forge agent.\n\nWhen Flowers calls `execute()`, the handler:\n1. Uses the [`ForgeAgentFactory`] to build an agent with journaled deps.\n2. Runs the agent via [`Agent::run()`] with the configured prompt.\n3. Returns the serialized [`AgentOutput`](forge_agent::agent::AgentOutput).\n\nDuring replay, all LLM and tool calls return cached results from the\njournal. The agent code runs unmodified.\n\n# Example Flow\n\n```text\nFlowersRuntime::start()\n  -> ForgeWorkflowHandler::execute(ctx)\n    -> factory.build(ctx)       // creates agent with JournaledProvider\n    -> agent.run(prompt)         // runs the tool loop\n      -> model.generate(...)     // routed through ctx.call(\"forge.llm\", \"generate\", ...)\n      -> tool.execute(...)       // routed through ctx.call(\"forge.tool\", \"execute:X\", ...)\n    -> serialize AgentOutput\n```"
            },
            {
              "name": "::ForgeWorkflowHandler::new",
              "line": 131,
              "signature": "pub fn new(\n        factory: Arc<dyn ForgeAgentFactory>,\n        config: AgentConfig,\n        prompt: impl Into<String>,\n    ) -> Self;",
              "documentation": "Creates a new `ForgeWorkflowHandler`.\n\n# Arguments\n\n* `factory` - Factory that builds agents with journaled dependencies.\n* `config` - The agent configuration.\n* `prompt` - The text prompt to run the agent with.\n\n# Returns\n\nA handler ready to be submitted to the Flowers runtime."
            },
            {
              "name": "::ForgeWorkflowHandler::config",
              "line": 145,
              "signature": "#[must_use]\npub fn config(&self) -> &AgentConfig;",
              "documentation": "Returns the agent configuration."
            },
            {
              "name": "::ForgeWorkflowHandler::prompt",
              "line": 151,
              "signature": "#[must_use]\npub fn prompt(&self) -> &str;",
              "documentation": "Returns the prompt."
            },
            {
              "name": "::BrewWorkflowHandler",
              "line": 203,
              "signature": "pub struct BrewWorkflowHandler {\n\n}",
              "documentation": "Flowers workflow handler that executes a [`ResolvedBrewPlan`] node by node.\n\nEach node in the plan's `execution_order` is executed as a journaled call\nthrough `ctx.call(\"brew\", &node_id, input, live_fn)`. This provides\nnode-level replay granularity: if the process crashes between nodes, only\nthe incomplete node is re-executed on resume.\n\nNode outputs are collected in a [`BTreeMap`] keyed by [`NodeId`]. The\nfinal result is the combined outputs of all exit nodes.\n\n# Execution Surface\n\nAgent steps are executed through a `ToolLoopAgent`, direct tool/web/MCP\nnodes execute through a registered [`ToolRegistry`], and `SubBrewRef` nodes\nrecursively execute registered child plans under a namespaced Flowers\njournal path. Missing executors fail closed instead of returning structural\noutput.\n\n# Execution Model\n\n```text\nfor node_id in plan.execution_order:\n    output = ctx.call(\"brew\", node_id, input, |input| execute_node(node))\n    node_outputs[node_id] = output\n\nreturn { exit_node_id: node_outputs[exit_node_id] for each exit node }\n```"
            },
            {
              "name": "::BrewWorkflowHandler::new",
              "line": 227,
              "signature": "pub fn new(plan: ResolvedBrewPlan, provider: Arc<dyn LanguageModel>) -> Self;",
              "documentation": "Creates a new `BrewWorkflowHandler`.\n\n# Arguments\n\n* `plan` - The resolved brew plan to execute.\n* `provider` - The language model provider for agent step nodes.\n\n# Returns\n\nA handler ready to be submitted to the Flowers runtime."
            },
            {
              "name": "::BrewWorkflowHandler::plan",
              "line": 239,
              "signature": "#[must_use]\npub fn plan(&self) -> &ResolvedBrewPlan;",
              "documentation": "Returns the brew plan."
            },
            {
              "name": "::BrewWorkflowHandler::with_tool_registry",
              "line": 245,
              "signature": "#[must_use]\npub fn with_tool_registry(mut self, tool_registry: ToolRegistry) -> Self;",
              "documentation": "Sets the tool registry used by tool, web, MCP, and agent-step nodes."
            },
            {
              "name": "::BrewWorkflowHandler::with_approval_handler",
              "line": 252,
              "signature": "#[must_use]\npub fn with_approval_handler(mut self, approval: Arc<dyn ApprovalHandler>) -> Self;",
              "documentation": "Sets the approval handler used before direct tool execution."
            },
            {
              "name": "::BrewWorkflowHandler::with_sub_plan",
              "line": 259,
              "signature": "#[must_use]\npub fn with_sub_plan(mut self, plan: ResolvedBrewPlan) -> Self;",
              "documentation": "Registers a resolved child plan for `SubBrewRef` execution."
            },
            {
              "name": "::BrewWorkflowHandler::with_sub_plans",
              "line": 266,
              "signature": "#[must_use]\npub fn with_sub_plans(mut self, plans: Vec<ResolvedBrewPlan>) -> Self;",
              "documentation": "Registers multiple resolved child plans for `SubBrewRef` execution."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-flowers/src/interceptor.rs",
          "sha256": "933ac699c415348b87ecf052664ec09097734e89d884294e39763ef915a48cad",
          "artifactSha256": "310ad70b304d90fb792177a4dccb44097e26e4e3488e6ef1a5316b58e5ffee70",
          "url": "/reference/source/forge-rs/crates/forge-flowers/src/interceptor.rs.txt",
          "declarations": [
            {
              "name": "::JournaledProvider",
              "line": 62,
              "signature": "pub struct JournaledProvider<'ctx> {\n\n}",
              "documentation": "A journaled wrapper around a [`LanguageModel`] that routes all inference\ncalls through the Flowers [`ExecutionContext`].\n\nDuring replay, cached LLM responses are returned without calling the\nunderlying provider. During live execution, the real provider is called\nand the result is journaled for future replay.\n\n# Journal Event Format\n\n- **Interface**: `\"forge.llm\"`\n- **Method**: `\"generate\"` for buffered calls, `\"stream\"` for streaming\n- **Input**: serialized `{model_id, messages, tools, options}`\n- **Output**: serialized `GenerateResult` or `Vec<StreamChunk>`\n\n# Lifetime\n\nThe `JournaledProvider` borrows the [`ExecutionContext`] for the duration\nof the workflow execution. It is constructed inside\n`WorkflowHandler::execute()` and must not outlive the context reference."
            },
            {
              "name": "::JournaledProvider<'ctx>::new",
              "line": 80,
              "signature": "pub fn new(inner: Arc<dyn LanguageModel>, ctx: &'ctx ExecutionContext) -> Self;",
              "documentation": "Creates a new journaled provider wrapping the given model.\n\n# Arguments\n\n* `inner` - The real language model to wrap.\n* `ctx` - The Flowers execution context for journaling calls.\n\n# Returns\n\nA `JournaledProvider` that routes all calls through the context."
            },
            {
              "name": "::JournaledProvider<'ctx>::model_id",
              "line": 85,
              "signature": "pub fn model_id(&self) -> &str;",
              "documentation": "Returns the inner model's ID."
            },
            {
              "name": "::JournaledProvider<'ctx>::provider",
              "line": 90,
              "signature": "pub fn provider(&self) -> &str;",
              "documentation": "Returns the inner model's provider namespace."
            },
            {
              "name": "::JournaledProvider<'ctx>::generate",
              "line": 113,
              "signature": "pub async fn generate(\n        &self,\n        messages: &[ModelMessage],\n        tools: &[ToolDefinition],\n        options: &GenerateOptions,\n    ) -> Result<GenerateResult, FlowersError>;",
              "documentation": "Executes a buffered generate call through the Flowers journal.\n\nDuring replay, the cached LLM response is returned without calling\nthe provider. During live execution, the real provider is called and\nthe result is journaled.\n\n# Arguments\n\n* `messages` - The conversation history.\n* `tools` - Available tool definitions.\n* `options` - Generation options.\n\n# Returns\n\nThe `GenerateResult` from either the journal cache or the live provider.\n\n# Errors\n\nReturns [`FlowersError`] if replay diverges or the live call fails."
            },
            {
              "name": "::JournaledProvider<'ctx>::stream",
              "line": 174,
              "signature": "pub async fn stream(\n        &self,\n        messages: &[ModelMessage],\n        tools: &[ToolDefinition],\n        options: &GenerateOptions,\n    ) -> Result<Vec<StreamChunk>, FlowersError>;",
              "documentation": "Executes a streaming call through the Flowers journal.\n\nStreaming calls are collected into a complete response and journaled\nas a single event. See module-level docs for the rationale.\n\n# Arguments\n\n* `messages` - The conversation history.\n* `tools` - Available tool definitions.\n* `options` - Generation options.\n\n# Returns\n\nThe complete stream chunks from either the journal cache or the live\nprovider.\n\n# Errors\n\nReturns [`FlowersError`] if replay diverges or the live call fails."
            },
            {
              "name": "::JournaledToolExecutor",
              "line": 241,
              "signature": "pub struct JournaledToolExecutor<'ctx> {\n\n}",
              "documentation": "A journaled wrapper for tool execution that routes calls through the\nFlowers [`ExecutionContext`].\n\nDuring replay, cached tool results are returned without executing the\nreal tool. During live execution, the real tool is executed and the\nresult is journaled.\n\n# Journal Event Format\n\n- **Interface**: `\"forge.tool\"`\n- **Method**: `\"execute:{tool_id}\"` (includes the tool name for\n  divergence diagnostics)\n- **Input**: serialized `{tool_id, parameters}`\n- **Output**: serialized tool result\n\n# Lifetime\n\nBorrows the [`ExecutionContext`] for the duration of the workflow\nexecution. Must not outlive the `execute()` scope."
            },
            {
              "name": "::JournaledToolExecutor<'ctx>::new",
              "line": 252,
              "signature": "pub fn new(ctx: &'ctx ExecutionContext) -> Self;",
              "documentation": "Creates a new journaled tool executor.\n\n# Arguments\n\n* `ctx` - The Flowers execution context for journaling calls."
            },
            {
              "name": "::JournaledToolExecutor<'ctx>::execute",
              "line": 274,
              "signature": "pub async fn execute<F, Fut>(\n        &self,\n        tool_id: &str,\n        parameters: serde_json::Value,\n        execute_fn: F,\n    ) -> Result<serde_json::Value, FlowersError>\n    where\n        F: FnOnce(serde_json::Value) -> Fut + Send,\n        Fut: std::future::Future<Output = Result<serde_json::Value, FlowersError>> + Send,;",
              "documentation": "Executes a tool call through the Flowers journal.\n\nDuring replay, the cached result is returned. During live execution,\nthe provided `execute_fn` is called and its result is journaled.\n\n# Arguments\n\n* `tool_id` - The identifier of the tool being executed.\n* `parameters` - The tool call parameters as a JSON value.\n* `execute_fn` - The function that performs the real tool execution.\n\n# Returns\n\nThe tool execution result as a JSON value.\n\n# Errors\n\nReturns [`FlowersError`] if replay diverges or the live function fails."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-flowers/src/lib.rs",
          "sha256": "1358caacc8dd7f9b607e1e1c99e64500d4aa789c1b90945503d1de1a5023feb5",
          "artifactSha256": "caaa9f75ada6fa5535da7c9fbb9cd401991ddf22844a48d2d01a8f59f3a4d217",
          "url": "/reference/source/forge-rs/crates/forge-flowers/src/lib.rs.txt",
          "declarations": [
            {
              "name": "client",
              "line": 74,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod client;",
              "documentation": "Forge-Flowers Bridge -- durable execution for Forge agents and Brew plans.\n\nThis crate bridges Forge agents and resolved brew plans to the Flowers\ndurable execution runtime. It implements Flowers'\n[`WorkflowHandler`](flowers::WorkflowHandler) trait, wrapping Forge\noperations in journaled calls that survive process crashes.\n\n# Architecture\n\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Forge Agent  \u2502     \u2502  forge-flowers    \u2502     \u2502 Flowers Runtime  \u2502\n\u2502 (unmodified) \u2502\u2500\u2500\u2500\u2500>\u2502  (this crate)     \u2502\u2500\u2500\u2500\u2500>\u2502 (journaling,     \u2502\n\u2502              \u2502     \u2502                   \u2502     \u2502  replay, crash   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2502  recovery)       \u2502\n                             \u2502                 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                             \u2502\n                    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                    \u2502                 \u2502\n             JournaledProvider  JournaledToolExecutor\n             (routes LLM calls  (routes tool calls\n              through journal)   through journal)\n```\n\n# Key Components\n\n- [`handler::ForgeWorkflowHandler`] -- wraps a single Forge agent as a\n  Flowers workflow. The agent's LLM and tool calls are journaled.\n\n- [`handler::BrewWorkflowHandler`] -- wraps a\n  [`ResolvedBrewPlan`](forge_core::brew_resolver::ResolvedBrewPlan) as a\n  Flowers workflow. Each node is executed as a journaled call.\n\n- [`interceptor::JournaledProvider`] -- wraps a\n  [`LanguageModel`](forge_core::model::LanguageModel), routing\n  `generate()` and `stream()` calls through\n  [`ExecutionContext::call()`](flowers::ExecutionContext::call).\n\n- [`interceptor::JournaledToolExecutor`] -- wraps tool execution,\n  routing each tool call through the Flowers journal.\n\n- [`client::FlowersClient`] -- Rust-native client surface wrapping\n  [`FlowersRuntime`](flowers::FlowersRuntime) for submitting, querying,\n  cancelling, and signaling executions.\n\n- [`state`] -- bidirectional mapping between Forge's 6-state ANVIL\n  lifecycle and Flowers' 7-state execution model.\n\n- [`plan`] -- maps [`ResolvedBrewPlan`](forge_core::brew_resolver::ResolvedBrewPlan)\n  to Flowers [`WorkflowId`](flowers::WorkflowId) and\n  [`ExecutionInfo`](flowers::ExecutionInfo).\n\n# Replay Safety\n\nThe bridge guarantees deterministic replay when the agent's control flow\ndepends only on journaled call outputs. Ambient non-determinism (system\nclock, random numbers, environment variables) must be routed through the\njournal by the agent author.\n\nReplay input mismatches are hard errors by default (fail closed). This\nprevents unsound cached results from being returned for different inputs.\n\n# What This Crate Does NOT Do\n\n- **HTTP wire protocol**: Non-Rust SDKs connect to a Flowers host over\n  HTTP. That protocol layer is a separate service crate.\n- **Modify Flowers**: This crate adapts to Flowers as-is. It does not\n  add, change, or remove any Flowers API.\n- **Implement agent logic**: The agent runs unmodified. This crate only\n  wraps the side-effect boundary."
            },
            {
              "name": "error",
              "line": 75,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "handler",
              "line": 77,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod handler;",
              "documentation": ""
            },
            {
              "name": "interceptor",
              "line": 79,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod interceptor;",
              "documentation": ""
            },
            {
              "name": "plan",
              "line": 81,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod plan;",
              "documentation": ""
            },
            {
              "name": "state",
              "line": 83,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod state;",
              "documentation": ""
            },
            {
              "name": "pub use client::FlowersClient;",
              "line": 87,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use client::FlowersClient;",
              "documentation": ""
            },
            {
              "name": "pub use error::{ForgeBridgeError, ForgeBridgeResult};",
              "line": 88,
              "signature": "pub use error::{ForgeBridgeError, ForgeBridgeResult};",
              "documentation": ""
            },
            {
              "name": "pub use handler::{BrewWorkflowHandler, ForgeAgentFactory, ForgeWorkflowHandler};",
              "line": 90,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use handler::{BrewWorkflowHandler, ForgeAgentFactory, ForgeWorkflowHandler};",
              "documentation": ""
            },
            {
              "name": "pub use interceptor::{JournaledProvider, JournaledToolExecutor};",
              "line": 92,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use interceptor::{JournaledProvider, JournaledToolExecutor};",
              "documentation": ""
            },
            {
              "name": "pub use plan::{execution_info_from_plan, plan_to_workflow_id};",
              "line": 94,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use plan::{execution_info_from_plan, plan_to_workflow_id};",
              "documentation": ""
            },
            {
              "name": "pub use state::{flowers_state_to_forge, forge_state_to_flowers};",
              "line": 96,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use state::{flowers_state_to_forge, forge_state_to_flowers};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-flowers/src/plan.rs",
          "sha256": "d6fbbac08ec72f9aa52f5a81d49d5aaa47e5d61818bd1862e1e62836daddf09c",
          "artifactSha256": "0d441d13586b0a01c6acc2dc3ef9edc4ec3ec650dc4b139d8d5a665f3e6915f1",
          "url": "/reference/source/forge-rs/crates/forge-flowers/src/plan.rs.txt",
          "declarations": [
            {
              "name": "::plan_to_workflow_id",
              "line": 40,
              "signature": "#[must_use]\npub fn plan_to_workflow_id(plan: &ResolvedBrewPlan) -> WorkflowId;",
              "documentation": "Maps a [`ResolvedBrewPlan`] to a Flowers [`WorkflowId`].\n\nThe plan's deterministic `plan_id` (a BLAKE3 hash of\n`brew_id || brew_version || environment_hash`) is used directly as the\nFlowers workflow identifier. This ensures that the same brew resolved\nagainst the same environment always maps to the same workflow ID.\n\n# Arguments\n\n* `plan` - The resolved brew plan to map.\n\n# Returns\n\nA Flowers `WorkflowId` derived from the plan ID.\n\n# Examples\n\n```\n# use forge_core::brew_resolver::ResolvedBrewPlan;\n# use forge_flowers::plan::plan_to_workflow_id;\n// Given a plan with plan_id \"abc123...\", the workflow ID is \"forge-brew:abc123...\"\n```"
            },
            {
              "name": "::execution_info_from_plan",
              "line": 63,
              "signature": "pub fn execution_info_from_plan(plan: &ResolvedBrewPlan) -> ForgeBridgeResult<ExecutionInfo>;",
              "documentation": "Creates initial Flowers [`ExecutionInfo`] metadata from a\n[`ResolvedBrewPlan`].\n\nThis is used when submitting a new Brew execution to the Flowers runtime.\nThe execution starts in `Pending` state with no journal events.\n\n# Arguments\n\n* `plan` - The resolved brew plan to create execution info for.\n\n# Returns\n\nA `ForgeBridgeResult` containing the initial execution info, or an error\nif the plan has structural problems (e.g., empty execution order).\n\n# Errors\n\nReturns [`ForgeBridgeError::PlanMappingFailed`] if the plan has no\nexecution order entries."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-flowers/src/state.rs",
          "sha256": "517ddd81ccf9a44e3718fbd952af13a656f8f895b354d197825ff240fbf38ac5",
          "artifactSha256": "509c198398f9b0d9690a9aed0f4486e88bd0a4fc259f68b4a175b32ebb663170",
          "url": "/reference/source/forge-rs/crates/forge-flowers/src/state.rs.txt",
          "declarations": [
            {
              "name": "::forge_state_to_flowers",
              "line": 60,
              "signature": "#[must_use]\npub fn forge_state_to_flowers(forge_state: LifecycleState) -> ExecutionState;",
              "documentation": "Maps a Forge [`LifecycleState`] to the closest Flowers [`ExecutionState`].\n\nThis mapping is used when reporting Forge agent state to the Flowers\nruntime. The mapping is intentionally conservative: ambiguous cases\nmap to the safer state.\n\n# Mapping\n\n| Input | Output |\n|-------|--------|\n| `Initializing` | `Pending` |\n| `Ready` | `Pending` |\n| `Running` | `Running` |\n| `Paused` | `Suspended` |\n| `Error` | `Failed` |\n| `Terminated` | `Completed` |\n\n# Arguments\n\n* `forge_state` - The Forge lifecycle state to map.\n\n# Returns\n\nThe corresponding Flowers execution state."
            },
            {
              "name": "::flowers_state_to_forge",
              "line": 97,
              "signature": "#[must_use]\npub fn flowers_state_to_forge(flowers_state: ExecutionState) -> LifecycleState;",
              "documentation": "Maps a Flowers [`ExecutionState`] to the closest Forge [`LifecycleState`].\n\nThis mapping is used when translating Flowers execution status back to\nthe Forge ANVIL lifecycle model. The `Replaying` state (Flowers-only)\nmaps to `Running` because the agent is actively executing.\n\n# Mapping\n\n| Input | Output |\n|-------|--------|\n| `Pending` | `Initializing` |\n| `Running` | `Running` |\n| `Suspended` | `Paused` |\n| `Completed` | `Terminated` |\n| `Failed` | `Error` |\n| `Cancelled` | `Terminated` |\n| `Replaying` | `Running` |\n\n# Arguments\n\n* `flowers_state` - The Flowers execution state to map.\n\n# Returns\n\nThe corresponding Forge lifecycle state."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-provider-session",
      "language": "rust",
      "version": "0.2.0",
      "description": "Provider session model, policy, and runtime routing for the Forge SDK",
      "manifest": "forge-rs/crates/forge-provider-session/Cargo.toml",
      "manifestSha256": "3a9da17d7636cc828e97739de461561ce01d9c9159e896501c6af8979e4f0b65",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-provider-session",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-provider-session/src/error.rs",
          "sha256": "ac1d98ece9f023373709204a0e7515fe3719d0b2ea759c8b140e57f01c138911",
          "artifactSha256": "b573f7ffa401725b7fdbad75c3c78dd97508fc1483ffb71b13aa8d2171525393",
          "url": "/reference/source/forge-rs/crates/forge-provider-session/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ProviderSessionError",
              "line": 13,
              "signature": "#[derive(Debug, Error)]\npub enum ProviderSessionError {\n    /// The requested provider is not allowed by the active session policy.\n    #[error(\n        \"provider '{provider_ref}' is not allowed by session policy '{policy_name}': {reason}\"\n    )]\n    ProviderNotAllowed {\n        /// The provider reference that was denied.\n        provider_ref: String,\n        /// The name of the policy that denied the request.\n        policy_name: String,\n        /// Human-readable explanation of why the provider was denied.\n        reason: String,\n    },\n\n    /// A session was not found for the given ID.\n    #[error(\"session '{session_id}' not found in session manager\")]\n    SessionNotFound {\n        /// The session ID that was looked up.\n        session_id: String,\n    },\n\n    /// An invalid session state transition was attempted.\n    #[error(\"invalid session transition from {from:?} to {to:?}: {reason}\")]\n    InvalidSessionTransition {\n        /// The current session state.\n        from: super::session::SessionState,\n        /// The attempted target state.\n        to: super::session::SessionState,\n        /// Human-readable explanation of why the transition is invalid.\n        reason: String,\n    },\n\n    /// A session has expired and cannot be used.\n    #[error(\"session '{session_id}' expired at {expired_at}; create a new session\")]\n    SessionExpired {\n        /// The expired session ID.\n        session_id: String,\n        /// When the session expired (ISO 8601).\n        expired_at: String,\n    },\n\n    /// A runtime provider swap was attempted but the policy forbids it.\n    #[error(\n        \"runtime provider swap from '{from_provider}' to '{to_provider}' denied by policy '{policy_name}': runtime swapping is disabled\"\n    )]\n    RuntimeSwapDenied {\n        /// The current provider.\n        from_provider: String,\n        /// The requested new provider.\n        to_provider: String,\n        /// The policy that denied the swap.\n        policy_name: String,\n    },\n\n    /// No default provider is configured in the session policy.\n    #[error(\"no default provider configured in session policy '{policy_name}'; set a default_provider in the SessionPolicy\")]\n    NoDefaultProvider {\n        /// The policy that lacks a default provider.\n        policy_name: String,\n    },\n\n    /// The session policy is invalid.\n    #[error(\"invalid session policy: {reason}\")]\n    InvalidPolicy {\n        /// What is wrong with the policy.\n        reason: String,\n    },\n\n    /// A Forge core error occurred.\n    #[error(\"forge core error: {0}\")]\n    ForgeCore(#[from] forge_core::error::ForgeError),\n}",
              "documentation": "Errors that can occur during provider session operations.\n\nEvery variant includes enough context to diagnose the issue without reading\nsource code."
            },
            {
              "name": "::ProviderSessionResult",
              "line": 87,
              "signature": "pub type ProviderSessionResult<T> = Result<T, ProviderSessionError>;",
              "documentation": "A specialized `Result` type for provider session operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-session/src/lib.rs",
          "sha256": "a5d505a751ad43eb2dac652fb76ce49bdf504a5086cc7768e4699fa0f4843f82",
          "artifactSha256": "42dd753916143f4f23dab992ddd8de4b0114c7e9ad3999eb35ce858b958cd4ef",
          "url": "/reference/source/forge-rs/crates/forge-provider-session/src/lib.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 62,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "policy",
              "line": 63,
              "signature": "pub mod policy;",
              "documentation": ""
            },
            {
              "name": "session",
              "line": 64,
              "signature": "pub mod session;",
              "documentation": ""
            },
            {
              "name": "pub use error::{ProviderSessionError, ProviderSessionResult};",
              "line": 66,
              "signature": "pub use error::{ProviderSessionError, ProviderSessionResult};",
              "documentation": ""
            },
            {
              "name": "pub use policy::{\n    PolicyDecision, PolicyEngine, ProviderType, SessionPolicy, SessionPolicyBuilder,\n    TaskRoutingRule,\n};",
              "line": 67,
              "signature": "pub use policy::{\n    PolicyDecision, PolicyEngine, ProviderType, SessionPolicy, SessionPolicyBuilder,\n    TaskRoutingRule,\n};",
              "documentation": ""
            },
            {
              "name": "pub use session::{\n    ProviderSession, SessionConfig, SessionId, SessionManager, SessionState, SwapOutcome,\n};",
              "line": 71,
              "signature": "pub use session::{\n    ProviderSession, SessionConfig, SessionId, SessionManager, SessionState, SwapOutcome,\n};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-session/src/policy.rs",
          "sha256": "61f4f958c119651a68c686160329ee6d579813afea93e73231c93780b0997355",
          "artifactSha256": "a7150b1fe61d018989cc2828264dc8dc06efbb2fef9d96c7c6776588587b3b7c",
          "url": "/reference/source/forge-rs/crates/forge-provider-session/src/policy.rs.txt",
          "declarations": [
            {
              "name": "::ProviderType",
              "line": 38,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ProviderType {\n    /// Direct model provider (Anthropic, OpenAI, Google, etc.).\n    DirectModel,\n    /// Local model provider (Ollama, llama.cpp, etc.).\n    Local,\n    /// Routed through a gateway (Foundry, OpenRouter, etc.).\n    Routed,\n    /// Coding subscription provider (Claude Code, Codex, etc.).\n    CodingSubscription,\n}",
              "documentation": "Classification of provider types.\n\nProvider types inform session management about the nature of the\nprovider connection and what session semantics apply.\n\n# Examples\n\n```\nuse forge_provider_session::ProviderType;\n\nlet pt = ProviderType::DirectModel;\nassert_eq!(format!(\"{pt:?}\"), \"DirectModel\");\n```"
            },
            {
              "name": "::TaskRoutingRule",
              "line": 69,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct TaskRoutingRule {\n/// If set, this rule only matches the given task mode.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub task_mode: Option<TaskMode>,\n/// If set, this rule only matches the given domain string.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub domain: Option<String>,\n/// The provider to use when this rule matches.\n\npub provider_ref: String\n}",
              "documentation": "A routing rule that maps task characteristics to a specific provider.\n\nRules are evaluated in order. The first rule whose conditions match\nthe routing context wins. Both `task_mode` and `domain` are optional;\nif both are `None`, the rule matches everything (use as fallback).\n\n# Examples\n\n```\nuse forge_provider_session::TaskRoutingRule;\nuse forge_core::routing::TaskMode;\n\nlet rule = TaskRoutingRule {\n    task_mode: Some(TaskMode::Planning),\n    domain: None,\n    provider_ref: \"anthropic:claude-opus-4\".to_string(),\n};\nassert!(rule.matches_mode(&TaskMode::Planning));\n```"
            },
            {
              "name": "::TaskRoutingRule::matches_mode",
              "line": 86,
              "signature": "pub fn matches_mode(&self, mode: &TaskMode) -> bool;",
              "documentation": "Returns `true` if this rule matches the given task mode.\n\nA rule with `task_mode: None` matches any task mode."
            },
            {
              "name": "::TaskRoutingRule::matches_domain",
              "line": 96,
              "signature": "pub fn matches_domain(&self, domain: &str) -> bool;",
              "documentation": "Returns `true` if this rule matches the given domain.\n\nA rule with `domain: None` matches any domain."
            },
            {
              "name": "::TaskRoutingRule::matches",
              "line": 106,
              "signature": "pub fn matches(&self, task_mode: Option<&TaskMode>, domain: Option<&str>) -> bool;",
              "documentation": "Returns `true` if this rule matches the given context.\n\nBoth conditions must match. `None` conditions are treated as wildcards."
            },
            {
              "name": "::SessionPolicy",
              "line": 153,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SessionPolicy {\n\n}",
              "documentation": "Declarative session policy for provider selection and switching.\n\nA `SessionPolicy` defines which providers are available, which is the\ndefault, what task-level routing rules apply, and whether runtime\nswapping is allowed.\n\n# Examples\n\n```\nuse forge_provider_session::{SessionPolicy, TaskRoutingRule};\nuse forge_core::routing::TaskMode;\n\nlet policy = SessionPolicy::builder()\n    .name(\"engineering-team\")\n    .default_provider(\"anthropic:claude-sonnet-4-5-20250929\")\n    .allowed_provider(\"anthropic:claude-sonnet-4-5-20250929\")\n    .allowed_provider(\"anthropic:claude-opus-4\")\n    .allowed_provider(\"openai:gpt-4o\")\n    .task_route(TaskRoutingRule {\n        task_mode: Some(TaskMode::Planning),\n        domain: None,\n        provider_ref: \"anthropic:claude-opus-4\".to_string(),\n    })\n    .allow_runtime_swap(true)\n    .session_ttl_seconds(3600)\n    .build()\n    .unwrap();\n\nassert_eq!(policy.name(), \"engineering-team\");\nassert!(policy.is_provider_allowed(\"anthropic:claude-opus-4\"));\n```"
            },
            {
              "name": "::SessionPolicy::builder",
              "line": 164,
              "signature": "pub fn builder() -> SessionPolicyBuilder;",
              "documentation": "Returns a builder for constructing a `SessionPolicy`."
            },
            {
              "name": "::SessionPolicy::name",
              "line": 169,
              "signature": "pub fn name(&self) -> &str;",
              "documentation": "Returns the policy name."
            },
            {
              "name": "::SessionPolicy::default_provider",
              "line": 174,
              "signature": "pub fn default_provider(&self) -> Option<&str>;",
              "documentation": "Returns the default provider reference, if set."
            },
            {
              "name": "::SessionPolicy::is_provider_allowed",
              "line": 181,
              "signature": "pub fn is_provider_allowed(&self, provider_ref: &str) -> bool;",
              "documentation": "Returns `true` if the given provider is allowed by this policy.\n\nIf the allowed list is empty, all providers are allowed (open policy)."
            },
            {
              "name": "::SessionPolicy::allow_runtime_swap",
              "line": 189,
              "signature": "pub fn allow_runtime_swap(&self) -> bool;",
              "documentation": "Returns `true` if runtime provider swapping is allowed."
            },
            {
              "name": "::SessionPolicy::session_ttl_seconds",
              "line": 194,
              "signature": "pub fn session_ttl_seconds(&self) -> Option<u64>;",
              "documentation": "Returns the session TTL in seconds, if configured."
            },
            {
              "name": "::SessionPolicy::task_routing_rules",
              "line": 199,
              "signature": "pub fn task_routing_rules(&self) -> &[TaskRoutingRule];",
              "documentation": "Returns the task routing rules."
            },
            {
              "name": "::SessionPolicy::allowed_providers",
              "line": 204,
              "signature": "pub fn allowed_providers(&self) -> &[String];",
              "documentation": "Returns the list of allowed providers."
            },
            {
              "name": "::SessionPolicy::open",
              "line": 219,
              "signature": "pub fn open(name: impl Into<String>) -> Self;",
              "documentation": "Creates a permissive policy that allows all providers with no restrictions.\n\n# Examples\n\n```\nuse forge_provider_session::SessionPolicy;\n\nlet policy = SessionPolicy::open(\"development\");\nassert!(policy.is_provider_allowed(\"anything:goes\"));\nassert!(policy.allow_runtime_swap());\n```"
            },
            {
              "name": "::SessionPolicyBuilder",
              "line": 246,
              "signature": "#[derive(Debug, Default)]\npub struct SessionPolicyBuilder {\n\n}",
              "documentation": "Builder for [`SessionPolicy`].\n\n# Examples\n\n```\nuse forge_provider_session::SessionPolicy;\n\nlet policy = SessionPolicy::builder()\n    .name(\"my-policy\")\n    .default_provider(\"openai:gpt-4o\")\n    .allow_runtime_swap(false)\n    .build()\n    .unwrap();\n```"
            },
            {
              "name": "::SessionPolicyBuilder::new",
              "line": 257,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new builder with default values."
            },
            {
              "name": "::SessionPolicyBuilder::name",
              "line": 262,
              "signature": "pub fn name(mut self, name: impl Into<String>) -> Self;",
              "documentation": "Sets the policy name."
            },
            {
              "name": "::SessionPolicyBuilder::default_provider",
              "line": 268,
              "signature": "pub fn default_provider(mut self, provider_ref: impl Into<String>) -> Self;",
              "documentation": "Sets the default provider reference."
            },
            {
              "name": "::SessionPolicyBuilder::allowed_provider",
              "line": 274,
              "signature": "pub fn allowed_provider(mut self, provider_ref: impl Into<String>) -> Self;",
              "documentation": "Adds a provider to the allowed list."
            },
            {
              "name": "::SessionPolicyBuilder::task_route",
              "line": 280,
              "signature": "pub fn task_route(mut self, rule: TaskRoutingRule) -> Self;",
              "documentation": "Adds a task routing rule."
            },
            {
              "name": "::SessionPolicyBuilder::allow_runtime_swap",
              "line": 286,
              "signature": "pub fn allow_runtime_swap(mut self, allowed: bool) -> Self;",
              "documentation": "Sets whether runtime provider swapping is allowed."
            },
            {
              "name": "::SessionPolicyBuilder::session_ttl_seconds",
              "line": 292,
              "signature": "pub fn session_ttl_seconds(mut self, ttl: u64) -> Self;",
              "documentation": "Sets the session TTL in seconds."
            },
            {
              "name": "::SessionPolicyBuilder::build",
              "line": 307,
              "signature": "pub fn build(self) -> ProviderSessionResult<SessionPolicy>;",
              "documentation": "Builds the `SessionPolicy`, validating all fields.\n\n# Errors\n\nReturns `ProviderSessionError::InvalidPolicy` if:\n- The policy name is missing or empty.\n- The default provider is set but not in the allowed list (when the\n  allowed list is non-empty).\n- A task routing rule references a provider not in the allowed list\n  (when the allowed list is non-empty)."
            },
            {
              "name": "::PolicyDecision",
              "line": 372,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PolicyDecision {\n/// The selected provider reference.\n\npub provider_ref: String,\n/// Human-readable explanation of why this provider was selected.\n\npub reason: String,\n/// Whether runtime swapping is allowed under the current policy.\n\npub runtime_swap_allowed: bool\n}",
              "documentation": "The output of a policy evaluation: which provider to use and why.\n\n# Examples\n\n```\nuse forge_provider_session::{PolicyDecision, PolicyEngine, SessionPolicy};\n\nlet policy = SessionPolicy::builder()\n    .default_provider(\"openai:gpt-4o\")\n    .build()\n    .unwrap();\nlet engine = PolicyEngine::new(policy);\nlet decision = engine.evaluate_default();\nassert_eq!(decision.provider_ref, \"openai:gpt-4o\");\nassert_eq!(decision.reason, \"default provider from policy\");\n```"
            },
            {
              "name": "::PolicyEngine",
              "line": 413,
              "signature": "pub struct PolicyEngine {\n\n}",
              "documentation": "Evaluates [`SessionPolicy`] rules against routing context.\n\nThe policy engine is the decision-maker for provider selection. It\ntakes a policy and context (task mode, domain, etc.) and produces\na [`PolicyDecision`].\n\n# Examples\n\n```\nuse forge_provider_session::{PolicyEngine, SessionPolicy, TaskRoutingRule};\nuse forge_core::routing::TaskMode;\n\nlet policy = SessionPolicy::builder()\n    .default_provider(\"openai:gpt-4o\")\n    .task_route(TaskRoutingRule {\n        task_mode: Some(TaskMode::Planning),\n        domain: None,\n        provider_ref: \"anthropic:claude-opus-4\".to_string(),\n    })\n    .build()\n    .unwrap();\n\nlet engine = PolicyEngine::new(policy);\n\n// Task-level routing overrides default\nlet decision = engine.evaluate(Some(&TaskMode::Planning), None);\nassert_eq!(decision.provider_ref, \"anthropic:claude-opus-4\");\n\n// Falls back to default for unmatched task modes\nlet decision = engine.evaluate(Some(&TaskMode::Execution), None);\nassert_eq!(decision.provider_ref, \"openai:gpt-4o\");\n```"
            },
            {
              "name": "::PolicyEngine::new",
              "line": 419,
              "signature": "pub fn new(policy: SessionPolicy) -> Self;",
              "documentation": "Creates a new policy engine with the given policy."
            },
            {
              "name": "::PolicyEngine::policy",
              "line": 424,
              "signature": "pub fn policy(&self) -> &SessionPolicy;",
              "documentation": "Returns a reference to the underlying policy."
            },
            {
              "name": "::PolicyEngine::evaluate_default",
              "line": 434,
              "signature": "pub fn evaluate_default(&self) -> PolicyDecision;",
              "documentation": "Evaluates the policy with the default context (no task mode, no domain).\n\n# Returns\n\nA `PolicyDecision` with the default provider, or a fallback decision\nif no default is configured."
            },
            {
              "name": "::PolicyEngine::evaluate",
              "line": 453,
              "signature": "pub fn evaluate(&self, task_mode: Option<&TaskMode>, domain: Option<&str>) -> PolicyDecision;",
              "documentation": "Evaluates the policy against the given task mode and domain.\n\nEvaluation order:\n1. Task routing rules (first match wins)\n2. Default provider\n3. Fallback (first allowed provider, or error sentinel)\n\n# Arguments\n\n* `task_mode` - The current task mode, if known.\n* `domain` - The current domain, if known.\n\n# Returns\n\nA `PolicyDecision` identifying the provider to use and why."
            },
            {
              "name": "::PolicyEngine::check_provider_allowed",
              "line": 505,
              "signature": "pub fn check_provider_allowed(&self, provider_ref: &str) -> ProviderSessionResult<()>;",
              "documentation": "Checks whether a specific provider is allowed by the policy.\n\n# Arguments\n\n* `provider_ref` - The provider reference to check.\n\n# Errors\n\nReturns `ProviderSessionError::ProviderNotAllowed` if the provider\nis not in the allowed list."
            },
            {
              "name": "::PolicyEngine::check_runtime_swap_allowed",
              "line": 526,
              "signature": "pub fn check_runtime_swap_allowed(\n        &self,\n        from_provider: &str,\n        to_provider: &str,\n    ) -> ProviderSessionResult<()>;",
              "documentation": "Checks whether a runtime swap is allowed by the policy.\n\n# Errors\n\nReturns `ProviderSessionError::RuntimeSwapDenied` if runtime swapping\nis disabled."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-provider-session/src/session.rs",
          "sha256": "507109decb20f63767993e720adfa674b1081f1dfa95df911529b717efd74f55",
          "artifactSha256": "e9f883a45a033443ec0dbe3fc90c888a9ae35edc6c672df95a8bf131b2d44215",
          "url": "/reference/source/forge-rs/crates/forge-provider-session/src/session.rs.txt",
          "declarations": [
            {
              "name": "::SessionId",
              "line": 37,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct SessionId(String);",
              "documentation": "Unique identifier for a provider session.\n\n# Examples\n\n```\nuse forge_provider_session::SessionId;\n\nlet id = SessionId::new();\nassert!(!id.as_str().is_empty());\n```"
            },
            {
              "name": "::SessionId::new",
              "line": 41,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new random session ID."
            },
            {
              "name": "::SessionId::from_string",
              "line": 46,
              "signature": "pub fn from_string(id: impl Into<String>) -> Self;",
              "documentation": "Creates a session ID from an existing string."
            },
            {
              "name": "::SessionId::as_str",
              "line": 51,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the session ID as a string slice."
            },
            {
              "name": "::SessionState",
              "line": 81,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SessionState {\n    /// Session has been created but not yet activated.\n    Created,\n    /// Session is active and accepting requests.\n    Active,\n    /// Session is temporarily paused (e.g., agent idle).\n    Paused,\n    /// Session is mid-swap to a different provider.\n    Switching,\n    /// Session has expired due to TTL or provider timeout.\n    Expired,\n    /// Session has been cleanly closed.\n    Closed,\n}",
              "documentation": "Lifecycle state of a provider session.\n\n# Valid Transitions\n\n```text\nCreated -> Active -> Paused -> Active (resume)\n                  -> Switching -> Active (new provider)\n                  -> Expired\n                  -> Closed\nCreated -> Closed (abort before activation)\n```"
            },
            {
              "name": "::SessionState::can_transition_to",
              "line": 98,
              "signature": "pub fn can_transition_to(&self, target: SessionState) -> bool;",
              "documentation": "Returns `true` if the transition from `self` to `target` is valid."
            },
            {
              "name": "::SessionConfig",
              "line": 132,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SessionConfig {\n/// The agent that owns this session.\n\npub agent_id: String,\n/// The initial provider to bind to.\n\npub initial_provider_ref: String,\n/// Session TTL in seconds (overrides policy TTL if set).\n\npub ttl_seconds: Option<u64>,\n/// Arbitrary metadata attached to the session.\n\npub metadata: HashMap<String, String>\n}",
              "documentation": "Configuration for creating a new provider session.\n\n# Examples\n\n```\nuse forge_provider_session::SessionConfig;\n\nlet config = SessionConfig {\n    agent_id: \"agent-123\".to_string(),\n    initial_provider_ref: \"openai:gpt-4o\".to_string(),\n    ttl_seconds: Some(3600),\n    metadata: Default::default(),\n};\nassert_eq!(config.agent_id, \"agent-123\");\n```"
            },
            {
              "name": "::ProviderSession",
              "line": 163,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ProviderSession {\n\n}",
              "documentation": "A provider session: a long-lived binding between an agent and a provider.\n\nSessions track usage, state, and support graceful provider switching.\n\n# Examples\n\n```\nuse forge_provider_session::{ProviderSession, SessionConfig, SessionState};\n\nlet config = SessionConfig {\n    agent_id: \"agent-1\".to_string(),\n    initial_provider_ref: \"openai:gpt-4o\".to_string(),\n    ttl_seconds: None,\n    metadata: Default::default(),\n};\nlet session = ProviderSession::new(config);\nassert_eq!(session.state(), SessionState::Created);\nassert_eq!(session.provider_ref(), \"openai:gpt-4o\");\n```"
            },
            {
              "name": "::ProviderSwapRecord",
              "line": 180,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ProviderSwapRecord {\n/// The provider that was replaced.\n\npub from_provider: String,\n/// The provider that replaced it.\n\npub to_provider: String,\n/// When the swap occurred.\n\npub swapped_at: DateTime<Utc>,\n/// Why the swap was initiated.\n\npub reason: String\n}",
              "documentation": "A record of a provider swap that occurred during a session."
            },
            {
              "name": "::SwapOutcome",
              "line": 206,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct SwapOutcome {\n/// The provider that was replaced.\n\npub previous_provider: String,\n/// The new active provider.\n\npub new_provider: String,\n/// Total number of swaps in this session's lifetime.\n\npub swap_count: usize\n}",
              "documentation": "The outcome of a provider swap operation.\n\n# Examples\n\n```\nuse forge_provider_session::SwapOutcome;\n\nlet outcome = SwapOutcome {\n    previous_provider: \"openai:gpt-4o\".to_string(),\n    new_provider: \"anthropic:claude-opus-4\".to_string(),\n    swap_count: 1,\n};\nassert_eq!(outcome.swap_count, 1);\n```"
            },
            {
              "name": "::ProviderSession::new",
              "line": 217,
              "signature": "pub fn new(config: SessionConfig) -> Self;",
              "documentation": "Creates a new session in the `Created` state."
            },
            {
              "name": "::ProviderSession::id",
              "line": 240,
              "signature": "pub fn id(&self) -> &SessionId;",
              "documentation": "Returns the session ID."
            },
            {
              "name": "::ProviderSession::agent_id",
              "line": 245,
              "signature": "pub fn agent_id(&self) -> &str;",
              "documentation": "Returns the agent ID that owns this session."
            },
            {
              "name": "::ProviderSession::provider_ref",
              "line": 250,
              "signature": "pub fn provider_ref(&self) -> &str;",
              "documentation": "Returns the current provider reference."
            },
            {
              "name": "::ProviderSession::state",
              "line": 255,
              "signature": "pub fn state(&self) -> SessionState;",
              "documentation": "Returns the current session state."
            },
            {
              "name": "::ProviderSession::created_at",
              "line": 260,
              "signature": "pub fn created_at(&self) -> DateTime<Utc>;",
              "documentation": "Returns when the session was created."
            },
            {
              "name": "::ProviderSession::last_active_at",
              "line": 265,
              "signature": "pub fn last_active_at(&self) -> DateTime<Utc>;",
              "documentation": "Returns when the session was last active."
            },
            {
              "name": "::ProviderSession::expires_at",
              "line": 270,
              "signature": "pub fn expires_at(&self) -> Option<DateTime<Utc>>;",
              "documentation": "Returns when the session expires, if configured."
            },
            {
              "name": "::ProviderSession::total_requests",
              "line": 275,
              "signature": "pub fn total_requests(&self) -> u64;",
              "documentation": "Returns the total number of requests in this session."
            },
            {
              "name": "::ProviderSession::total_input_tokens",
              "line": 280,
              "signature": "pub fn total_input_tokens(&self) -> u64;",
              "documentation": "Returns the total number of input tokens in this session."
            },
            {
              "name": "::ProviderSession::total_output_tokens",
              "line": 285,
              "signature": "pub fn total_output_tokens(&self) -> u64;",
              "documentation": "Returns the total number of output tokens in this session."
            },
            {
              "name": "::ProviderSession::provider_history",
              "line": 290,
              "signature": "pub fn provider_history(&self) -> &[ProviderSwapRecord];",
              "documentation": "Returns the provider swap history."
            },
            {
              "name": "::ProviderSession::is_expired",
              "line": 295,
              "signature": "pub fn is_expired(&self) -> bool;",
              "documentation": "Returns `true` if the session has expired."
            },
            {
              "name": "::ProviderSession::transition_to",
              "line": 309,
              "signature": "pub fn transition_to(&mut self, target: SessionState) -> ProviderSessionResult<()>;",
              "documentation": "Transitions the session to a new state.\n\n# Errors\n\nReturns `ProviderSessionError::InvalidSessionTransition` if the\ntransition is not valid."
            },
            {
              "name": "::ProviderSession::activate",
              "line": 331,
              "signature": "pub fn activate(&mut self) -> ProviderSessionResult<()>;",
              "documentation": "Activates the session (transitions from Created to Active).\n\n# Errors\n\nReturns an error if the session is not in the `Created` state."
            },
            {
              "name": "::ProviderSession::record_request",
              "line": 336,
              "signature": "pub fn record_request(&mut self, input_tokens: u64, output_tokens: u64);",
              "documentation": "Records a completed request against this session."
            },
            {
              "name": "::ProviderSession::swap_provider",
              "line": 356,
              "signature": "pub fn swap_provider(\n        &mut self,\n        new_provider: impl Into<String>,\n        reason: impl Into<String>,\n    ) -> ProviderSessionResult<SwapOutcome>;",
              "documentation": "Swaps the active provider mid-session.\n\nThis transitions the session through `Switching` and back to `Active`\nwith the new provider.\n\n# Arguments\n\n* `new_provider` - The provider to swap to.\n* `reason` - Why the swap is being initiated.\n\n# Errors\n\nReturns an error if the session cannot enter the `Switching` state."
            },
            {
              "name": "::ProviderSession::close",
              "line": 389,
              "signature": "pub fn close(&mut self) -> ProviderSessionResult<()>;",
              "documentation": "Closes the session cleanly.\n\n# Errors\n\nReturns an error if the session cannot transition to `Closed`."
            },
            {
              "name": "::SessionManager",
              "line": 423,
              "signature": "pub struct SessionManager {\n\n}",
              "documentation": "Manages the lifecycle of multiple provider sessions.\n\nThe session manager creates sessions using a [`PolicyEngine`] for\nprovider selection, tracks active sessions, and handles expiration.\n\n# Examples\n\n```\nuse forge_provider_session::{\n    SessionManager, SessionConfig, SessionPolicy, PolicyEngine,\n};\n\nlet policy = SessionPolicy::builder()\n    .default_provider(\"openai:gpt-4o\")\n    .allow_runtime_swap(true)\n    .build()\n    .unwrap();\nlet engine = PolicyEngine::new(policy);\nlet mut manager = SessionManager::new(engine);\n\nlet config = SessionConfig {\n    agent_id: \"agent-1\".to_string(),\n    initial_provider_ref: \"openai:gpt-4o\".to_string(),\n    ttl_seconds: None,\n    metadata: Default::default(),\n};\nlet session_id = manager.create_session(config).unwrap();\nassert!(manager.get_session(session_id.as_str()).is_some());\n```"
            },
            {
              "name": "::SessionManager::new",
              "line": 430,
              "signature": "pub fn new(engine: PolicyEngine) -> Self;",
              "documentation": "Creates a new session manager with the given policy engine."
            },
            {
              "name": "::SessionManager::engine",
              "line": 438,
              "signature": "pub fn engine(&self) -> &PolicyEngine;",
              "documentation": "Returns a reference to the underlying policy engine."
            },
            {
              "name": "::SessionManager::create_session",
              "line": 448,
              "signature": "pub fn create_session(&mut self, config: SessionConfig) -> ProviderSessionResult<SessionId>;",
              "documentation": "Creates a new session, validating the initial provider against policy.\n\n# Errors\n\nReturns `ProviderSessionError::ProviderNotAllowed` if the initial\nprovider is not allowed by the policy."
            },
            {
              "name": "::SessionManager::create_default_session",
              "line": 464,
              "signature": "pub fn create_default_session(\n        &mut self,\n        agent_id: impl Into<String>,\n    ) -> ProviderSessionResult<SessionId>;",
              "documentation": "Creates a new session using the policy engine's default provider.\n\n# Errors\n\nReturns `ProviderSessionError::NoDefaultProvider` if no default\nprovider is configured."
            },
            {
              "name": "::SessionManager::create_routed_session",
              "line": 491,
              "signature": "pub fn create_routed_session(\n        &mut self,\n        agent_id: impl Into<String>,\n        task_mode: Option<&TaskMode>,\n        domain: Option<&str>,\n    ) -> ProviderSessionResult<(SessionId, PolicyDecision)>;",
              "documentation": "Creates a session routed by task mode and domain.\n\nUses the policy engine to select the best provider for the given\ntask characteristics.\n\n# Errors\n\nReturns an error if the policy engine cannot produce a valid decision."
            },
            {
              "name": "::SessionManager::get_session",
              "line": 514,
              "signature": "pub fn get_session(&self, session_id: &str) -> Option<&ProviderSession>;",
              "documentation": "Retrieves a session by ID."
            },
            {
              "name": "::SessionManager::get_session_mut",
              "line": 519,
              "signature": "pub fn get_session_mut(&mut self, session_id: &str) -> Option<&mut ProviderSession>;",
              "documentation": "Retrieves a mutable session by ID."
            },
            {
              "name": "::SessionManager::activate_session",
              "line": 529,
              "signature": "pub fn activate_session(&mut self, session_id: &str) -> ProviderSessionResult<()>;",
              "documentation": "Activates a session (transitions from Created to Active).\n\n# Errors\n\nReturns `ProviderSessionError::SessionNotFound` if the session\ndoes not exist, or an error if the transition is invalid."
            },
            {
              "name": "::SessionManager::swap_provider",
              "line": 555,
              "signature": "pub fn swap_provider(\n        &mut self,\n        session_id: &str,\n        new_provider: &str,\n        reason: &str,\n    ) -> ProviderSessionResult<SwapOutcome>;",
              "documentation": "Swaps the provider for an active session.\n\n# Errors\n\nReturns errors if the session is not found, the swap is not allowed\nby policy, or the new provider is not in the allowed list."
            },
            {
              "name": "::SessionManager::close_session",
              "line": 587,
              "signature": "pub fn close_session(&mut self, session_id: &str) -> ProviderSessionResult<()>;",
              "documentation": "Closes a session.\n\n# Errors\n\nReturns `ProviderSessionError::SessionNotFound` if the session\ndoes not exist."
            },
            {
              "name": "::SessionManager::active_session_ids",
              "line": 597,
              "signature": "pub fn active_session_ids(&self) -> Vec<&str>;",
              "documentation": "Returns all active session IDs."
            },
            {
              "name": "::SessionManager::session_count",
              "line": 606,
              "signature": "pub fn session_count(&self) -> usize;",
              "documentation": "Returns the number of tracked sessions (all states)."
            },
            {
              "name": "::SessionManager::gc_sessions",
              "line": 611,
              "signature": "pub fn gc_sessions(&mut self) -> usize;",
              "documentation": "Removes all closed and expired sessions."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-litellm",
      "language": "rust",
      "version": "0.2.0",
      "description": "Optional LiteLLM compatibility adapter for the Forge SDK",
      "manifest": "forge-rs/crates/forge-litellm/Cargo.toml",
      "manifestSha256": "5f1c9b71d0211205553ac161708bd941c6bbce041ce380f35a73837fc561ae83",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-litellm",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-litellm/src/error.rs",
          "sha256": "a68a8793bb1766a37d954f8df1ce5714b2eadf2b90c31625ab808a62509d09be",
          "artifactSha256": "6a9209d4ed330370541d153e9818ae7c5797e70346d1cb2c17a330d132a192be",
          "url": "/reference/source/forge-rs/crates/forge-litellm/src/error.rs.txt",
          "declarations": [
            {
              "name": "::LiteLlmError",
              "line": 9,
              "signature": "#[derive(Debug, Error)]\npub enum LiteLlmError {\n    /// The LiteLLM proxy returned an error response.\n    #[error(\"LiteLLM proxy at '{base_url}' returned error for model '{model}': {status} \u2014 {body}\")]\n    ProxyError {\n        /// The LiteLLM proxy base URL.\n        base_url: String,\n        /// The model that was requested.\n        model: String,\n        /// The HTTP status code.\n        status: u16,\n        /// The response body (truncated if large).\n        body: String,\n    },\n\n    /// The LiteLLM proxy is unreachable.\n    #[error(\"LiteLLM proxy at '{base_url}' is unreachable: {reason}\")]\n    ProxyUnreachable {\n        /// The LiteLLM proxy base URL.\n        base_url: String,\n        /// Human-readable connection error.\n        reason: String,\n    },\n\n    /// The LiteLLM proxy returned a response that could not be parsed.\n    #[error(\n        \"LiteLLM proxy at '{base_url}' returned unparseable response for model '{model}': {reason}\"\n    )]\n    InvalidResponse {\n        /// The LiteLLM proxy base URL.\n        base_url: String,\n        /// The model that was requested.\n        model: String,\n        /// What failed during parsing.\n        reason: String,\n    },\n\n    /// LiteLLM configuration is invalid.\n    #[error(\"invalid LiteLLM configuration: {reason}\")]\n    InvalidConfig {\n        /// What is wrong with the configuration.\n        reason: String,\n    },\n\n    /// A Forge core error occurred during translation.\n    #[error(\"forge core error: {0}\")]\n    ForgeCore(#[from] forge_core::error::ForgeError),\n}",
              "documentation": "Errors that can occur during LiteLLM adapter operations."
            },
            {
              "name": "::LiteLlmResult",
              "line": 58,
              "signature": "pub type LiteLlmResult<T> = Result<T, LiteLlmError>;",
              "documentation": "A specialized `Result` type for LiteLLM adapter operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-litellm/src/lib.rs",
          "sha256": "e10121039823f832ff939a3a9b8adde53c758cbefa4f4edfad614030d593eec2",
          "artifactSha256": "34bdfa1863946c729431cb7e6629f7175d46331fc862e9c4a38e46b465cbe760",
          "url": "/reference/source/forge-rs/crates/forge-litellm/src/lib.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 44,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "model",
              "line": 46,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod model;",
              "documentation": ""
            },
            {
              "name": "pub use error::{LiteLlmError, LiteLlmResult};",
              "line": 48,
              "signature": "pub use error::{LiteLlmError, LiteLlmResult};",
              "documentation": ""
            },
            {
              "name": "pub use model::{register_litellm_model, LiteLlmConfig, LiteLlmModel};",
              "line": 50,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use model::{register_litellm_model, LiteLlmConfig, LiteLlmModel};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-litellm/src/model.rs",
          "sha256": "53c2ffb55a95b65f21ae0626c7245099ce53b20a0b9f34a8e7a6b356098134cb",
          "artifactSha256": "9fce3003077d347834278b689d2ef37e61f946fdbaf3235132a7429c6155ebbd",
          "url": "/reference/source/forge-rs/crates/forge-litellm/src/model.rs.txt",
          "declarations": [
            {
              "name": "::LiteLlmConfig",
              "line": 34,
              "signature": "#[derive(Debug, Clone)]\npub struct LiteLlmConfig {\n\n}",
              "documentation": "Configuration for connecting to a LiteLLM proxy.\n\n# Examples\n\n```\nuse forge_litellm::LiteLlmConfig;\n\nlet config = LiteLlmConfig::new(\"http://localhost:4000\", \"sk-litellm-key\");\nassert_eq!(config.base_url(), \"http://localhost:4000\");\n```"
            },
            {
              "name": "::LiteLlmConfig::new",
              "line": 47,
              "signature": "pub fn new(base_url: impl Into<String>, api_key: impl Into<String>) -> Self;",
              "documentation": "Creates a new LiteLLM configuration.\n\n# Arguments\n\n* `base_url` - The LiteLLM proxy base URL (e.g., \"http://localhost:4000\").\n* `api_key` - The API key for authenticating with the LiteLLM proxy."
            },
            {
              "name": "::LiteLlmConfig::with_timeout",
              "line": 56,
              "signature": "pub fn with_timeout(mut self, seconds: u64) -> Self;",
              "documentation": "Sets the request timeout in seconds."
            },
            {
              "name": "::LiteLlmConfig::base_url",
              "line": 62,
              "signature": "pub fn base_url(&self) -> &str;",
              "documentation": "Returns the base URL."
            },
            {
              "name": "::LiteLlmConfig::timeout_seconds",
              "line": 67,
              "signature": "pub fn timeout_seconds(&self) -> u64;",
              "documentation": "Returns the timeout in seconds."
            },
            {
              "name": "::LiteLlmConfig::validate",
              "line": 76,
              "signature": "pub fn validate(&self) -> LiteLlmResult<()>;",
              "documentation": "Validates the configuration.\n\n# Errors\n\nReturns `LiteLlmError::InvalidConfig` if the base URL is empty."
            },
            {
              "name": "::LiteLlmModel",
              "line": 158,
              "signature": "#[derive(Debug, Clone)]\npub struct LiteLlmModel {\n\n}",
              "documentation": "A `LanguageModel` implementation that routes through a LiteLLM proxy.\n\nThis adapter translates Forge model calls to LiteLLM's OpenAI-compatible\nHTTP endpoint. It is intentionally thin: no caching, no retry logic,\nno special features. The LiteLLM proxy handles routing, caching, and\nload balancing.\n\n# Examples\n\n```no_run\nuse forge_litellm::{LiteLlmConfig, LiteLlmModel};\n\nlet config = LiteLlmConfig::new(\"http://localhost:4000\", \"sk-litellm-key\");\nlet model = LiteLlmModel::new(\"gpt-4o\", config);\n// Use as any LanguageModel via the Forge provider registry\n```"
            },
            {
              "name": "::LiteLlmModel::new",
              "line": 171,
              "signature": "pub fn new(model_id: impl Into<String>, config: LiteLlmConfig) -> Self;",
              "documentation": "Creates a new LiteLLM model adapter.\n\n# Arguments\n\n* `model_id` - The model identifier as known to LiteLLM (e.g., \"gpt-4o\",\n  \"claude-3-opus\", or any model LiteLLM is configured to route).\n* `config` - The LiteLLM proxy configuration."
            },
            {
              "name": "::LiteLlmModel::model",
              "line": 179,
              "signature": "pub fn model(&self) -> &str;",
              "documentation": "Returns the model ID."
            },
            {
              "name": "::LiteLlmModel::config",
              "line": 184,
              "signature": "pub fn config(&self) -> &LiteLlmConfig;",
              "documentation": "Returns the LiteLLM config."
            },
            {
              "name": "::register_litellm_model",
              "line": 412,
              "signature": "pub fn register_litellm_model(\n    registry: &mut ProviderRegistry,\n    model_id: impl Into<String>,\n    config: LiteLlmConfig,\n) -> ForgeResult<String>;",
              "documentation": "Registers a LiteLLM-routed model in a `ProviderRegistry`.\n\nThe model is registered under the `litellm` namespace:\n`litellm:<model_id>`.\n\n# Arguments\n\n* `registry` - The provider registry to register with.\n* `model_id` - The model identifier as known to LiteLLM.\n* `config` - The LiteLLM proxy configuration.\n\n# Returns\n\nThe full provider reference string (e.g., `\"litellm:gpt-4o\"`).\n\n# Errors\n\nReturns `ForgeError` if registration fails.\n\n# Examples\n\n```no_run\nuse forge_litellm::{LiteLlmConfig, register_litellm_model};\nuse forge_core::provider::ProviderRegistry;\n\nlet mut registry = ProviderRegistry::new();\nlet config = LiteLlmConfig::new(\"http://localhost:4000\", \"sk-litellm-key\");\nlet provider_ref = register_litellm_model(&mut registry, \"gpt-4o\", config).unwrap();\nassert_eq!(provider_ref, \"litellm:gpt-4o\");\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-memory",
      "language": "rust",
      "version": "0.2.0",
      "description": "Native Akasha-backed memory integration for the Forge SDK",
      "manifest": "forge-rs/crates/forge-memory/Cargo.toml",
      "manifestSha256": "a9dbe6a41bcd53c8fba8f00add3a3e03d7b5f7e06b53553fbf31d6a15692e72a",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-memory",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-memory/src/error.rs",
          "sha256": "74763802b154c88707491bacd70ddb025f019812cb86fc2c2821f77e3cabb58e",
          "artifactSha256": "d40c37a93d2cd4d52785c65990f3717841dd12fede07b92329dd60a9da3fc518",
          "url": "/reference/source/forge-rs/crates/forge-memory/src/error.rs.txt",
          "declarations": [
            {
              "name": "::MemoryError",
              "line": 9,
              "signature": "#[derive(Debug, Error)]\npub enum MemoryError {\n    /// A memory entry was not found.\n    #[error(\"memory entry '{memory_id}' not found in scope '{scope}'\")]\n    NotFound {\n        /// The memory ID that was looked up.\n        memory_id: String,\n        /// The scope that was searched.\n        scope: String,\n    },\n\n    /// Access to a memory scope was denied.\n    #[error(\"agent '{agent_id}' denied access to memory scope '{scope}': {reason}\")]\n    AccessDenied {\n        /// The agent that was denied.\n        agent_id: String,\n        /// The scope that was requested.\n        scope: String,\n        /// Why access was denied.\n        reason: String,\n    },\n\n    /// A write-back operation failed.\n    #[error(\"write-back failed for entry '{memory_id}' in scope '{scope}': {reason}\")]\n    WriteBackFailed {\n        /// The memory ID that failed to persist.\n        memory_id: String,\n        /// The scope the entry was in.\n        scope: String,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// The memory store backend returned an error.\n    #[error(\"memory store error: {reason}\")]\n    StoreError {\n        /// The backend error description.\n        reason: String,\n    },\n\n    /// A memory query was invalid.\n    #[error(\"invalid memory query: {reason}\")]\n    InvalidQuery {\n        /// What is wrong with the query.\n        reason: String,\n    },\n\n    /// Serialization or deserialization failed.\n    #[error(\"memory serialization error: {0}\")]\n    Serialization(#[from] serde_json::Error),\n}",
              "documentation": "Errors that can occur during memory operations."
            },
            {
              "name": "::MemoryResult",
              "line": 61,
              "signature": "pub type MemoryResult<T> = Result<T, MemoryError>;",
              "documentation": "A specialized `Result` type for memory operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-memory/src/lib.rs",
          "sha256": "112c7cb0f1bf84cbe61dbf1a45c6d453008dbf93346ac2bd50e0b0bd9a954d32",
          "artifactSha256": "39de29a1a41f422b9a4f18142bc801bfc4a7550b858f159009861a996127de6b",
          "url": "/reference/source/forge-rs/crates/forge-memory/src/lib.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 74,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "policy",
              "line": 75,
              "signature": "pub mod policy;",
              "documentation": ""
            },
            {
              "name": "scope",
              "line": 76,
              "signature": "pub mod scope;",
              "documentation": ""
            },
            {
              "name": "store",
              "line": 77,
              "signature": "pub mod store;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 78,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "pub use error::{MemoryError, MemoryResult};",
              "line": 80,
              "signature": "pub use error::{MemoryError, MemoryResult};",
              "documentation": ""
            },
            {
              "name": "pub use policy::{RetrievalPolicy, WriteBackPolicy, WriteBackTrigger};",
              "line": 81,
              "signature": "pub use policy::{RetrievalPolicy, WriteBackPolicy, WriteBackTrigger};",
              "documentation": ""
            },
            {
              "name": "pub use scope::MemoryScope;",
              "line": 82,
              "signature": "pub use scope::MemoryScope;",
              "documentation": ""
            },
            {
              "name": "pub use store::{AgentMemory, InMemoryStore, MemoryStore};",
              "line": 83,
              "signature": "pub use store::{AgentMemory, InMemoryStore, MemoryStore};",
              "documentation": ""
            },
            {
              "name": "pub use types::{MemoryEntry, MemoryEntryBuilder, MemoryId, MemoryQuery, MemoryType};",
              "line": 84,
              "signature": "pub use types::{MemoryEntry, MemoryEntryBuilder, MemoryId, MemoryQuery, MemoryType};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-memory/src/policy.rs",
          "sha256": "a0eda999bc0b6b80fe78d40c72c67f4406da25d6495a821a01ae933028736de1",
          "artifactSha256": "59d3d70f2b50a4df0af33fe7a1778763fb6429fd7270f5e6f28de88481e25940",
          "url": "/reference/source/forge-rs/crates/forge-memory/src/policy.rs.txt",
          "declarations": [
            {
              "name": "::RetrievalPolicy",
              "line": 35,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct RetrievalPolicy {\n\n}",
              "documentation": "Controls what memory can be read, by whom.\n\nThe retrieval policy defines which scopes an agent is allowed to read\nfrom and which memory types are accessible. It also supports minimum\nconfidence thresholds to filter out low-quality memories.\n\n# Examples\n\n```\nuse forge_memory::{RetrievalPolicy, MemoryScope, MemoryType};\n\nlet policy = RetrievalPolicy::builder()\n    .allow_scope(MemoryScope::Agent)\n    .allow_scope(MemoryScope::Team)\n    .allow_type(MemoryType::Semantic)\n    .allow_type(MemoryType::Episodic)\n    .min_confidence(0.5)\n    .build();\n\nassert!(policy.can_read_scope(&MemoryScope::Agent));\nassert!(policy.can_read_scope(&MemoryScope::Team));\nassert!(!policy.can_read_scope(&MemoryScope::Org));\n```"
            },
            {
              "name": "::RetrievalPolicy::builder",
              "line": 44,
              "signature": "pub fn builder() -> RetrievalPolicyBuilder;",
              "documentation": "Returns a builder for constructing a `RetrievalPolicy`."
            },
            {
              "name": "::RetrievalPolicy::can_read_scope",
              "line": 51,
              "signature": "pub fn can_read_scope(&self, scope: &MemoryScope) -> bool;",
              "documentation": "Returns `true` if the given scope is allowed for reading.\n\nAn empty `allowed_scopes` list means all scopes are allowed."
            },
            {
              "name": "::RetrievalPolicy::can_read_type",
              "line": 61,
              "signature": "pub fn can_read_type(&self, memory_type: &MemoryType) -> bool;",
              "documentation": "Returns `true` if the given memory type is allowed for reading.\n\nAn empty `allowed_types` list means all types are allowed."
            },
            {
              "name": "::RetrievalPolicy::min_confidence",
              "line": 69,
              "signature": "pub fn min_confidence(&self) -> f32;",
              "documentation": "Returns the minimum confidence threshold."
            },
            {
              "name": "::RetrievalPolicy::max_results",
              "line": 74,
              "signature": "pub fn max_results(&self) -> usize;",
              "documentation": "Returns the maximum number of results per query."
            },
            {
              "name": "::RetrievalPolicyBuilder",
              "line": 94,
              "signature": "#[derive(Debug, Default)]\npub struct RetrievalPolicyBuilder {\n\n}",
              "documentation": "Builder for [`RetrievalPolicy`]."
            },
            {
              "name": "::RetrievalPolicyBuilder::new",
              "line": 103,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new builder."
            },
            {
              "name": "::RetrievalPolicyBuilder::allow_scope",
              "line": 111,
              "signature": "pub fn allow_scope(mut self, scope: MemoryScope) -> Self;",
              "documentation": "Adds an allowed scope."
            },
            {
              "name": "::RetrievalPolicyBuilder::allow_type",
              "line": 117,
              "signature": "pub fn allow_type(mut self, memory_type: MemoryType) -> Self;",
              "documentation": "Adds an allowed memory type."
            },
            {
              "name": "::RetrievalPolicyBuilder::min_confidence",
              "line": 123,
              "signature": "pub fn min_confidence(mut self, min: f32) -> Self;",
              "documentation": "Sets the minimum confidence threshold."
            },
            {
              "name": "::RetrievalPolicyBuilder::max_results",
              "line": 129,
              "signature": "pub fn max_results(mut self, max: usize) -> Self;",
              "documentation": "Sets the maximum number of results per query."
            },
            {
              "name": "::RetrievalPolicyBuilder::build",
              "line": 135,
              "signature": "pub fn build(self) -> RetrievalPolicy;",
              "documentation": "Builds the `RetrievalPolicy`."
            },
            {
              "name": "::WriteBackTrigger",
              "line": 157,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum WriteBackTrigger {\n    /// Write immediately when store() is called.\n    Immediate,\n    /// Batch writes and flush periodically.\n    Batched,\n    /// Only write back on explicit flush or session close.\n    OnFlush,\n    /// Never persist (task-scoped, discarded on completion).\n    Never,\n}",
              "documentation": "When a write-back should be triggered.\n\n# Examples\n\n```\nuse forge_memory::WriteBackTrigger;\n\nlet trigger = WriteBackTrigger::Immediate;\nassert_eq!(format!(\"{trigger:?}\"), \"Immediate\");\n```"
            },
            {
              "name": "::WriteBackPolicy",
              "line": 189,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct WriteBackPolicy {\n\n}",
              "documentation": "Controls what gets persisted and when.\n\nThe write-back policy defines which scopes can be written to,\nthe persistence trigger, and minimum confidence for persistence.\n\n# Examples\n\n```\nuse forge_memory::{WriteBackPolicy, WriteBackTrigger, MemoryScope};\n\nlet policy = WriteBackPolicy::builder()\n    .trigger(WriteBackTrigger::Immediate)\n    .allow_scope(MemoryScope::Agent)\n    .allow_scope(MemoryScope::Team)\n    .min_confidence_for_persistence(0.7)\n    .build();\n\nassert!(policy.can_write_scope(&MemoryScope::Agent));\nassert!(!policy.can_write_scope(&MemoryScope::Org));\n```"
            },
            {
              "name": "::WriteBackPolicy::builder",
              "line": 199,
              "signature": "pub fn builder() -> WriteBackPolicyBuilder;",
              "documentation": "Returns a builder for constructing a `WriteBackPolicy`."
            },
            {
              "name": "::WriteBackPolicy::trigger",
              "line": 204,
              "signature": "pub fn trigger(&self) -> WriteBackTrigger;",
              "documentation": "Returns the write-back trigger."
            },
            {
              "name": "::WriteBackPolicy::can_write_scope",
              "line": 211,
              "signature": "pub fn can_write_scope(&self, scope: &MemoryScope) -> bool;",
              "documentation": "Returns `true` if the given scope is allowed for writing.\n\nAn empty `allowed_scopes` list means all scopes are allowed."
            },
            {
              "name": "::WriteBackPolicy::min_confidence_for_persistence",
              "line": 219,
              "signature": "pub fn min_confidence_for_persistence(&self) -> f32;",
              "documentation": "Returns the minimum confidence required for persistence."
            },
            {
              "name": "::WriteBackPolicy::batch_size",
              "line": 224,
              "signature": "pub fn batch_size(&self) -> usize;",
              "documentation": "Returns the batch size for batched writes."
            },
            {
              "name": "::WriteBackPolicy::batch_interval_seconds",
              "line": 229,
              "signature": "pub fn batch_interval_seconds(&self) -> u64;",
              "documentation": "Returns the batch interval in seconds."
            },
            {
              "name": "::WriteBackPolicyBuilder",
              "line": 250,
              "signature": "#[derive(Debug, Default)]\npub struct WriteBackPolicyBuilder {\n\n}",
              "documentation": "Builder for [`WriteBackPolicy`]."
            },
            {
              "name": "::WriteBackPolicyBuilder::new",
              "line": 260,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new builder."
            },
            {
              "name": "::WriteBackPolicyBuilder::trigger",
              "line": 269,
              "signature": "pub fn trigger(mut self, trigger: WriteBackTrigger) -> Self;",
              "documentation": "Sets the write-back trigger."
            },
            {
              "name": "::WriteBackPolicyBuilder::allow_scope",
              "line": 275,
              "signature": "pub fn allow_scope(mut self, scope: MemoryScope) -> Self;",
              "documentation": "Adds an allowed scope for writing."
            },
            {
              "name": "::WriteBackPolicyBuilder::min_confidence_for_persistence",
              "line": 281,
              "signature": "pub fn min_confidence_for_persistence(mut self, min: f32) -> Self;",
              "documentation": "Sets the minimum confidence for persistence."
            },
            {
              "name": "::WriteBackPolicyBuilder::batch_size",
              "line": 287,
              "signature": "pub fn batch_size(mut self, size: usize) -> Self;",
              "documentation": "Sets the batch size."
            },
            {
              "name": "::WriteBackPolicyBuilder::batch_interval_seconds",
              "line": 293,
              "signature": "pub fn batch_interval_seconds(mut self, seconds: u64) -> Self;",
              "documentation": "Sets the batch interval in seconds."
            },
            {
              "name": "::WriteBackPolicyBuilder::build",
              "line": 299,
              "signature": "pub fn build(self) -> WriteBackPolicy;",
              "documentation": "Builds the `WriteBackPolicy`."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-memory/src/scope.rs",
          "sha256": "868c632f92c6c554919bf78164c128321843047ccb0704fb51627285ecbacaa0",
          "artifactSha256": "9a317dd59fd71fade008f3eb66dbb323bfd441b5cba2b58fc25359545ef1fa26",
          "url": "/reference/source/forge-rs/crates/forge-memory/src/scope.rs.txt",
          "declarations": [
            {
              "name": "::MemoryScope",
              "line": 24,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, PartialOrd, Ord)]\n#[serde(rename_all = \"snake_case\")]\npub enum MemoryScope {\n    /// Agent-local memory. Private to the agent instance.\n    Agent,\n    /// Task-scoped memory. Discarded when the task completes.\n    Task,\n    /// Team/project-scoped memory. Shared within a team.\n    Team,\n    /// Organization-wide memory. Accessible by all authorized agents.\n    Org,\n}",
              "documentation": "The visibility boundary for memory operations.\n\nScopes control who can read and write memory entries. They form a\nhierarchy: Agent < Task < Team < Org.\n\n# Examples\n\n```\nuse forge_memory::MemoryScope;\n\nlet scope = MemoryScope::Agent;\nassert_eq!(scope.as_str(), \"agent\");\nassert!(scope.is_narrower_than(&MemoryScope::Team));\n```"
            },
            {
              "name": "::MemoryScope::as_str",
              "line": 37,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the scope as a string slice."
            },
            {
              "name": "::MemoryScope::is_narrower_than",
              "line": 49,
              "signature": "pub fn is_narrower_than(&self, other: &MemoryScope) -> bool;",
              "documentation": "Returns `true` if this scope is narrower than (contained within) the other.\n\nAgent < Task < Team < Org."
            },
            {
              "name": "::MemoryScope::is_wider_than",
              "line": 54,
              "signature": "pub fn is_wider_than(&self, other: &MemoryScope) -> bool;",
              "documentation": "Returns `true` if this scope is wider than (contains) the other."
            },
            {
              "name": "::MemoryScope::namespace",
              "line": 72,
              "signature": "pub fn namespace(&self, owner_id: &str) -> String;",
              "documentation": "Returns the Akasha namespace prefix for this scope and owner.\n\n# Arguments\n\n* `owner_id` - The owner identifier (agent ID, task ID, team ID, or org ID).\n\n# Examples\n\n```\nuse forge_memory::MemoryScope;\n\nlet ns = MemoryScope::Agent.namespace(\"agent-123\");\nassert_eq!(ns, \"forge:agent:agent-123\");\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-memory/src/store.rs",
          "sha256": "891a698c5a2bd9f1286b7d5ad5e05203c91f48c9f225d66d16bde5acb5732477",
          "artifactSha256": "27ef314f311e0751b29926accc19d2d2b1d62e4c9584d80a443bd773637e36fd",
          "url": "/reference/source/forge-rs/crates/forge-memory/src/store.rs.txt",
          "declarations": [
            {
              "name": "::MemoryStore",
              "line": 37,
              "signature": "#[async_trait]\npub trait MemoryStore: Send + Sync {\n    /// Stores a memory entry and returns its ID.\n    ///\n    /// # Errors\n    ///\n    /// Returns `MemoryError::StoreError` if the backend fails.\n    async fn store(&self, entry: MemoryEntry) -> MemoryResult<MemoryId>;\n\n    /// Searches for memories matching the query.\n    ///\n    /// Returns entries sorted by relevance (best match first).\n    ///\n    /// # Errors\n    ///\n    /// Returns `MemoryError::StoreError` if the backend fails.\n    async fn recall(&self, query: &MemoryQuery) -> MemoryResult<Vec<MemoryEntry>>;\n\n    /// Retrieves a specific memory entry by ID.\n    ///\n    /// # Errors\n    ///\n    /// Returns `MemoryError::NotFound` if the entry does not exist.\n    async fn get(&self, id: &MemoryId) -> MemoryResult<MemoryEntry>;\n\n    /// Deletes a memory entry by ID.\n    ///\n    /// # Errors\n    ///\n    /// Returns `MemoryError::NotFound` if the entry does not exist.\n    async fn delete(&self, id: &MemoryId) -> MemoryResult<()>;\n\n    /// Lists all memories in a given scope.\n    ///\n    /// # Errors\n    ///\n    /// Returns `MemoryError::StoreError` if the backend fails.\n    async fn list_by_scope(&self, scope: MemoryScope) -> MemoryResult<Vec<MemoryEntry>>;\n\n    /// Returns the total number of stored entries.\n    async fn count(&self) -> MemoryResult<usize>;\n}",
              "documentation": "The async trait that memory backends implement.\n\nThis trait provides the storage and retrieval surface for memory entries.\nImplementations can back onto Akasha, a local in-memory store, or any\nother storage system.\n\n# Contract\n\n- `store()` persists a memory entry and returns its ID.\n- `recall()` searches for memories matching a query.\n- `get()` retrieves a specific memory by ID.\n- `delete()` removes a memory by ID.\n- `list_by_scope()` lists all memories in a scope.\n\n# ANVIL Spec Reference\n\nANVIL Spec \u00a79 \u2014 Memory Integration."
            },
            {
              "name": "::InMemoryStore",
              "line": 104,
              "signature": "pub struct InMemoryStore {\n\n}",
              "documentation": "A local in-process memory store for testing and standalone agents.\n\nThis implementation stores entries in a `HashMap` protected by a `RwLock`.\nIt supports basic text matching for recall queries. It is NOT suitable\nfor production use with large memory volumes \u2014 use an Akasha-backed\nimplementation for that.\n\n# Examples\n\n```\nuse forge_memory::{InMemoryStore, MemoryStore, MemoryEntry, MemoryType, MemoryScope, MemoryQuery};\n\n# tokio_test::block_on(async {\nlet store = InMemoryStore::new();\nlet entry = MemoryEntry::builder()\n    .content(\"test memory\")\n    .memory_type(MemoryType::Semantic)\n    .scope(MemoryScope::Agent)\n    .build();\nlet id = store.store(entry).await.unwrap();\n\nlet results = store.recall(&MemoryQuery::new(\"test\")).await.unwrap();\nassert_eq!(results.len(), 1);\n# });\n```"
            },
            {
              "name": "::InMemoryStore::new",
              "line": 110,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new empty in-memory store."
            },
            {
              "name": "::AgentMemory",
              "line": 276,
              "signature": "pub struct AgentMemory {\n\n}",
              "documentation": "The primary interface for agents to interact with memory.\n\n`AgentMemory` wraps a [`MemoryStore`] with retrieval and write-back\npolicies. It enforces access control and persistence rules at the\nagent level.\n\n# Examples\n\n```\nuse forge_memory::{\n    AgentMemory, InMemoryStore, MemoryScope, MemoryType, MemoryEntry,\n    RetrievalPolicy, WriteBackPolicy,\n};\n\n# tokio_test::block_on(async {\nlet store = InMemoryStore::new();\nlet mut memory = AgentMemory::new(\n    \"agent-1\",\n    Box::new(store),\n    RetrievalPolicy::default(),\n    WriteBackPolicy::default(),\n);\n\n// Store an episodic memory\nlet entry = MemoryEntry::builder()\n    .content(\"User asked about Rust ownership\")\n    .memory_type(MemoryType::Episodic)\n    .scope(MemoryScope::Agent)\n    .build();\nmemory.store(entry).await.unwrap();\n\n// Recall relevant memories\nlet results = memory.recall(\"Rust ownership\", 5).await.unwrap();\nassert_eq!(results.len(), 1);\n# });\n```"
            },
            {
              "name": "::AgentMemory::new",
              "line": 292,
              "signature": "pub fn new(\n        agent_id: impl Into<String>,\n        store: Box<dyn MemoryStore>,\n        retrieval_policy: RetrievalPolicy,\n        write_back_policy: WriteBackPolicy,\n    ) -> Self;",
              "documentation": "Creates a new agent memory interface.\n\n# Arguments\n\n* `agent_id` - The agent's identifier.\n* `store` - The memory store backend.\n* `retrieval_policy` - Controls what can be read.\n* `write_back_policy` - Controls what gets persisted."
            },
            {
              "name": "::AgentMemory::agent_id",
              "line": 307,
              "signature": "pub fn agent_id(&self) -> &str;",
              "documentation": "Returns the agent ID."
            },
            {
              "name": "::AgentMemory::retrieval_policy",
              "line": 312,
              "signature": "pub fn retrieval_policy(&self) -> &RetrievalPolicy;",
              "documentation": "Returns a reference to the retrieval policy."
            },
            {
              "name": "::AgentMemory::write_back_policy",
              "line": 317,
              "signature": "pub fn write_back_policy(&self) -> &WriteBackPolicy;",
              "documentation": "Returns a reference to the write-back policy."
            },
            {
              "name": "::AgentMemory::store",
              "line": 327,
              "signature": "pub async fn store(&mut self, entry: MemoryEntry) -> MemoryResult<MemoryId>;",
              "documentation": "Stores a memory entry, subject to the write-back policy.\n\n# Errors\n\nReturns `MemoryError::AccessDenied` if the entry's scope is not\nallowed by the write-back policy."
            },
            {
              "name": "::AgentMemory::recall",
              "line": 365,
              "signature": "pub async fn recall(&self, query_text: &str, limit: usize) -> MemoryResult<Vec<MemoryEntry>>;",
              "documentation": "Recalls memories matching the given text query.\n\nResults are filtered by the retrieval policy.\n\n# Arguments\n\n* `query_text` - The text to search for.\n* `limit` - Maximum number of results.\n\n# Errors\n\nReturns errors from the underlying store."
            },
            {
              "name": "::AgentMemory::recall_with_query",
              "line": 390,
              "signature": "pub async fn recall_with_query(&self, query: &MemoryQuery) -> MemoryResult<Vec<MemoryEntry>>;",
              "documentation": "Recalls memories with a full query specification.\n\n# Errors\n\nReturns errors from the underlying store."
            },
            {
              "name": "::AgentMemory::get",
              "line": 411,
              "signature": "pub async fn get(&self, id: &MemoryId) -> MemoryResult<MemoryEntry>;",
              "documentation": "Retrieves a specific memory entry by ID.\n\n# Errors\n\nReturns `MemoryError::NotFound` if the entry does not exist,\nor `MemoryError::AccessDenied` if the policy denies access."
            },
            {
              "name": "::AgentMemory::delete",
              "line": 440,
              "signature": "pub async fn delete(&self, id: &MemoryId) -> MemoryResult<()>;",
              "documentation": "Deletes a memory entry by ID.\n\n# Errors\n\nReturns `MemoryError::NotFound` if the entry does not exist."
            },
            {
              "name": "::AgentMemory::count",
              "line": 445,
              "signature": "pub async fn count(&self) -> MemoryResult<usize>;",
              "documentation": "Returns the total number of stored entries."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-memory/src/types.rs",
          "sha256": "1fd6602bfe1f13abc801fe82604b3637556ac850930668ce82298ca24cba4d5b",
          "artifactSha256": "b2f305e025c88c12195da5e3fec6af554804d94f1f5a49781b8d8c750bc5635f",
          "url": "/reference/source/forge-rs/crates/forge-memory/src/types.rs.txt",
          "declarations": [
            {
              "name": "::MemoryId",
              "line": 23,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct MemoryId(String);",
              "documentation": "Unique identifier for a memory entry.\n\n# Examples\n\n```\nuse forge_memory::MemoryId;\n\nlet id = MemoryId::new();\nassert!(!id.as_str().is_empty());\n```"
            },
            {
              "name": "::MemoryId::new",
              "line": 27,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new random memory ID."
            },
            {
              "name": "::MemoryId::from_string",
              "line": 32,
              "signature": "pub fn from_string(id: impl Into<String>) -> Self;",
              "documentation": "Creates a memory ID from an existing string."
            },
            {
              "name": "::MemoryId::as_str",
              "line": 37,
              "signature": "pub fn as_str(&self) -> &str;",
              "documentation": "Returns the memory ID as a string slice."
            },
            {
              "name": "::MemoryType",
              "line": 72,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum MemoryType {\n    /// Episodic memory \u2014 temporal events, interactions, experiences.\n    Episodic,\n    /// Semantic memory \u2014 facts, knowledge, relationships.\n    Semantic,\n    /// Procedural memory \u2014 skills, workflows, executable procedures.\n    Procedural,\n    /// Associative memory \u2014 pattern completion, content-addressable recall.\n    Associative,\n}",
              "documentation": "The four Akasha memory types.\n\nThese map directly to Akasha's cognitive memory architecture:\n- Episodic = temporal events\n- Semantic = facts and knowledge\n- Procedural = skills and workflows\n- Associative = pattern completion\n\n# Examples\n\n```\nuse forge_memory::MemoryType;\n\nlet mt = MemoryType::Episodic;\nassert_eq!(mt.as_str(), \"episodic\");\n```"
            },
            {
              "name": "::MemoryType::as_str",
              "line": 85,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the memory type as a string slice."
            },
            {
              "name": "::MemoryEntry",
              "line": 120,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MemoryEntry {\n\n}",
              "documentation": "A single memory entry with content, metadata, and provenance.\n\n# Examples\n\n```\nuse forge_memory::{MemoryEntry, MemoryType, MemoryScope};\n\nlet entry = MemoryEntry::builder()\n    .content(\"User prefers detailed explanations\")\n    .memory_type(MemoryType::Semantic)\n    .scope(MemoryScope::Agent)\n    .confidence(0.9)\n    .build();\n\nassert_eq!(entry.content(), \"User prefers detailed explanations\");\nassert_eq!(entry.memory_type(), MemoryType::Semantic);\nassert_eq!(entry.scope(), MemoryScope::Agent);\n```"
            },
            {
              "name": "::MemoryEntry::builder",
              "line": 136,
              "signature": "pub fn builder() -> MemoryEntryBuilder;",
              "documentation": "Returns a builder for constructing a `MemoryEntry`."
            },
            {
              "name": "::MemoryEntry::id",
              "line": 141,
              "signature": "pub fn id(&self) -> &MemoryId;",
              "documentation": "Returns the memory ID."
            },
            {
              "name": "::MemoryEntry::content",
              "line": 146,
              "signature": "pub fn content(&self) -> &str;",
              "documentation": "Returns the content text."
            },
            {
              "name": "::MemoryEntry::memory_type",
              "line": 151,
              "signature": "pub fn memory_type(&self) -> MemoryType;",
              "documentation": "Returns the memory type."
            },
            {
              "name": "::MemoryEntry::scope",
              "line": 156,
              "signature": "pub fn scope(&self) -> MemoryScope;",
              "documentation": "Returns the memory scope."
            },
            {
              "name": "::MemoryEntry::confidence",
              "line": 161,
              "signature": "pub fn confidence(&self) -> f32;",
              "documentation": "Returns the confidence score (0.0 to 1.0)."
            },
            {
              "name": "::MemoryEntry::importance",
              "line": 166,
              "signature": "pub fn importance(&self) -> f32;",
              "documentation": "Returns the importance score (0.0 to 1.0)."
            },
            {
              "name": "::MemoryEntry::created_at",
              "line": 171,
              "signature": "pub fn created_at(&self) -> DateTime<Utc>;",
              "documentation": "Returns when the entry was created."
            },
            {
              "name": "::MemoryEntry::updated_at",
              "line": 176,
              "signature": "pub fn updated_at(&self) -> DateTime<Utc>;",
              "documentation": "Returns when the entry was last updated."
            },
            {
              "name": "::MemoryEntry::source",
              "line": 181,
              "signature": "pub fn source(&self) -> Option<&str>;",
              "documentation": "Returns the source attribution."
            },
            {
              "name": "::MemoryEntry::tags",
              "line": 186,
              "signature": "pub fn tags(&self) -> &[String];",
              "documentation": "Returns the tags."
            },
            {
              "name": "::MemoryEntry::metadata",
              "line": 191,
              "signature": "pub fn metadata(&self) -> &HashMap<String, serde_json::Value>;",
              "documentation": "Returns the metadata map."
            },
            {
              "name": "::MemoryEntryBuilder",
              "line": 214,
              "signature": "#[derive(Debug)]\npub struct MemoryEntryBuilder {\n\n}",
              "documentation": "Builder for [`MemoryEntry`].\n\n# Examples\n\n```\nuse forge_memory::{MemoryEntry, MemoryType, MemoryScope};\n\nlet entry = MemoryEntry::builder()\n    .content(\"learned fact\")\n    .memory_type(MemoryType::Semantic)\n    .scope(MemoryScope::Team)\n    .source(\"user-input\")\n    .tag(\"rust\")\n    .tag(\"ownership\")\n    .build();\nassert_eq!(entry.tags().len(), 2);\n```"
            },
            {
              "name": "::MemoryEntryBuilder::new",
              "line": 227,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new builder with defaults."
            },
            {
              "name": "::MemoryEntryBuilder::content",
              "line": 241,
              "signature": "pub fn content(mut self, content: impl Into<String>) -> Self;",
              "documentation": "Sets the content text."
            },
            {
              "name": "::MemoryEntryBuilder::memory_type",
              "line": 247,
              "signature": "pub fn memory_type(mut self, memory_type: MemoryType) -> Self;",
              "documentation": "Sets the memory type."
            },
            {
              "name": "::MemoryEntryBuilder::scope",
              "line": 253,
              "signature": "pub fn scope(mut self, scope: MemoryScope) -> Self;",
              "documentation": "Sets the memory scope."
            },
            {
              "name": "::MemoryEntryBuilder::confidence",
              "line": 259,
              "signature": "pub fn confidence(mut self, confidence: f32) -> Self;",
              "documentation": "Sets the confidence score (clamped to 0.0..=1.0)."
            },
            {
              "name": "::MemoryEntryBuilder::importance",
              "line": 265,
              "signature": "pub fn importance(mut self, importance: f32) -> Self;",
              "documentation": "Sets the importance score (clamped to 0.0..=1.0)."
            },
            {
              "name": "::MemoryEntryBuilder::source",
              "line": 271,
              "signature": "pub fn source(mut self, source: impl Into<String>) -> Self;",
              "documentation": "Sets the source attribution."
            },
            {
              "name": "::MemoryEntryBuilder::tag",
              "line": 277,
              "signature": "pub fn tag(mut self, tag: impl Into<String>) -> Self;",
              "documentation": "Adds a tag."
            },
            {
              "name": "::MemoryEntryBuilder::meta",
              "line": 283,
              "signature": "pub fn meta(mut self, key: impl Into<String>, value: serde_json::Value) -> Self;",
              "documentation": "Adds a metadata key-value pair."
            },
            {
              "name": "::MemoryEntryBuilder::build",
              "line": 289,
              "signature": "pub fn build(self) -> MemoryEntry;",
              "documentation": "Builds the `MemoryEntry`."
            },
            {
              "name": "::MemoryQuery",
              "line": 330,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MemoryQuery {\n\n}",
              "documentation": "A query against the memory store.\n\nQueries support filtering by scope, type, tags, and text similarity.\n\n# Examples\n\n```\nuse forge_memory::{MemoryQuery, MemoryType, MemoryScope};\n\nlet query = MemoryQuery::new(\"Rust ownership\")\n    .with_scope(MemoryScope::Agent)\n    .with_type(MemoryType::Semantic)\n    .with_limit(10);\nassert_eq!(query.text(), \"Rust ownership\");\nassert_eq!(query.limit(), 10);\n```"
            },
            {
              "name": "::MemoryQuery::new",
              "line": 341,
              "signature": "pub fn new(text: impl Into<String>) -> Self;",
              "documentation": "Creates a new query with the given text."
            },
            {
              "name": "::MemoryQuery::with_scope",
              "line": 353,
              "signature": "pub fn with_scope(mut self, scope: MemoryScope) -> Self;",
              "documentation": "Filters by memory scope."
            },
            {
              "name": "::MemoryQuery::with_type",
              "line": 359,
              "signature": "pub fn with_type(mut self, memory_type: MemoryType) -> Self;",
              "documentation": "Filters by memory type."
            },
            {
              "name": "::MemoryQuery::with_tag",
              "line": 365,
              "signature": "pub fn with_tag(mut self, tag: impl Into<String>) -> Self;",
              "documentation": "Adds a tag filter."
            },
            {
              "name": "::MemoryQuery::with_limit",
              "line": 371,
              "signature": "pub fn with_limit(mut self, limit: usize) -> Self;",
              "documentation": "Sets the maximum number of results."
            },
            {
              "name": "::MemoryQuery::with_min_confidence",
              "line": 377,
              "signature": "pub fn with_min_confidence(mut self, min: f32) -> Self;",
              "documentation": "Sets the minimum confidence threshold."
            },
            {
              "name": "::MemoryQuery::text",
              "line": 383,
              "signature": "pub fn text(&self) -> &str;",
              "documentation": "Returns the query text."
            },
            {
              "name": "::MemoryQuery::scope",
              "line": 388,
              "signature": "pub fn scope(&self) -> Option<MemoryScope>;",
              "documentation": "Returns the scope filter."
            },
            {
              "name": "::MemoryQuery::memory_type",
              "line": 393,
              "signature": "pub fn memory_type(&self) -> Option<MemoryType>;",
              "documentation": "Returns the memory type filter."
            },
            {
              "name": "::MemoryQuery::tags",
              "line": 398,
              "signature": "pub fn tags(&self) -> &[String];",
              "documentation": "Returns the tag filters."
            },
            {
              "name": "::MemoryQuery::limit",
              "line": 403,
              "signature": "pub fn limit(&self) -> usize;",
              "documentation": "Returns the result limit."
            },
            {
              "name": "::MemoryQuery::min_confidence",
              "line": 408,
              "signature": "pub fn min_confidence(&self) -> Option<f32>;",
              "documentation": "Returns the minimum confidence threshold."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-search",
      "language": "rust",
      "version": "0.2.0",
      "description": "OneSearch integration as the default research runtime for Forge SDK agents",
      "manifest": "forge-rs/crates/forge-search/Cargo.toml",
      "manifestSha256": "f269cf64f3769f491531b3befa64de1a28a9ee84e7336a73888fd6f64c7b2963",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-search",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-search/src/config.rs",
          "sha256": "051b1817e170d5b8bfc77144e5c2cb162b13a878ad42c713cffcbd070b8d9cb9",
          "artifactSha256": "44dd3f27820c78c160574ccf2868bfb638a2b3701b128936c5eb3bdd607a4b90",
          "url": "/reference/source/forge-rs/crates/forge-search/src/config.rs.txt",
          "declarations": [
            {
              "name": "::SearchConfig",
              "line": 42,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchConfig {\n\n}",
              "documentation": "Configuration for the OneSearch integration.\n\nControls how the search tools connect to the OneSearch API, which engines\nto use, and default parameters for search operations.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\n\nlet config = SearchConfig::default();\nassert_eq!(config.default_max_results(), 5);\nassert_eq!(config.request_timeout_ms(), 60_000);\n```"
            },
            {
              "name": "::SearchDepth",
              "line": 84,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum SearchDepth {\n    /// Fast search using SERP snippets.\n    Basic,\n    /// Deeper search that fetches and processes page content.\n    Advanced,\n}",
              "documentation": "Search depth controls the quality/speed tradeoff.\n\n- `Basic`: Fast, returns snippets from search engine result pages.\n- `Advanced`: Slower, fetches and processes actual page content."
            },
            {
              "name": "::SearchDepth::as_str",
              "line": 97,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the string representation for API requests.\n\n# Returns\n\n`\"basic\"` or `\"advanced\"`."
            },
            {
              "name": "::ContentFormat",
              "line": 114,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum ContentFormat {\n    /// Markdown format (preserves structure).\n    Markdown,\n    /// Plain text (no formatting).\n    Text,\n}",
              "documentation": "Content format for extracted web content."
            },
            {
              "name": "::ContentFormat::as_str",
              "line": 123,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the string representation for API requests."
            },
            {
              "name": "::SearchConfig::builder",
              "line": 181,
              "signature": "pub fn builder() -> SearchConfigBuilder;",
              "documentation": "Creates a new [`SearchConfigBuilder`] for constructing a custom config.\n\n# Returns\n\nA builder initialized with default values.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\n\nlet config = SearchConfig::builder()\n    .endpoint(\"https://search.example.com\")\n    .build();\nassert_eq!(config.endpoint(), \"https://search.example.com\");\n```"
            },
            {
              "name": "::SearchConfig::endpoint",
              "line": 188,
              "signature": "pub fn endpoint(&self) -> &str;",
              "documentation": "Returns the OneSearch API endpoint URL."
            },
            {
              "name": "::SearchConfig::api_key",
              "line": 193,
              "signature": "pub fn api_key(&self) -> Option<&str>;",
              "documentation": "Returns the API key if configured."
            },
            {
              "name": "::SearchConfig::engines",
              "line": 200,
              "signature": "pub fn engines(&self) -> &[String];",
              "documentation": "Returns the configured search engines.\n\nAn empty list means \"use all available engines.\""
            },
            {
              "name": "::SearchConfig::default_max_results",
              "line": 205,
              "signature": "pub fn default_max_results(&self) -> u32;",
              "documentation": "Returns the default maximum number of search results."
            },
            {
              "name": "::SearchConfig::default_search_depth",
              "line": 210,
              "signature": "pub fn default_search_depth(&self) -> SearchDepth;",
              "documentation": "Returns the default search depth."
            },
            {
              "name": "::SearchConfig::default_content_format",
              "line": 215,
              "signature": "pub fn default_content_format(&self) -> ContentFormat;",
              "documentation": "Returns the default content format for extraction."
            },
            {
              "name": "::SearchConfig::request_timeout_ms",
              "line": 220,
              "signature": "pub fn request_timeout_ms(&self) -> u64;",
              "documentation": "Returns the request timeout in milliseconds."
            },
            {
              "name": "::SearchConfig::max_extract_urls",
              "line": 225,
              "signature": "pub fn max_extract_urls(&self) -> usize;",
              "documentation": "Returns the maximum number of URLs per extract request."
            },
            {
              "name": "::SearchConfig::max_crawl_depth",
              "line": 230,
              "signature": "pub fn max_crawl_depth(&self) -> u32;",
              "documentation": "Returns the maximum crawl depth."
            },
            {
              "name": "::SearchConfig::max_crawl_breadth",
              "line": 235,
              "signature": "pub fn max_crawl_breadth(&self) -> u32;",
              "documentation": "Returns the maximum crawl breadth."
            },
            {
              "name": "::SearchConfig::max_crawl_pages",
              "line": 240,
              "signature": "pub fn max_crawl_pages(&self) -> u32;",
              "documentation": "Returns the maximum total crawled pages."
            },
            {
              "name": "::SearchConfigBuilder",
              "line": 262,
              "signature": "pub struct SearchConfigBuilder {\n\n}",
              "documentation": "Builder for constructing [`SearchConfig`] instances.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\n\nlet config = SearchConfig::builder()\n    .endpoint(\"https://search.internal.example.com\")\n    .api_key(\"sk-test-key\")\n    .engines(vec![\"google\".to_string(), \"bing\".to_string()])\n    .default_max_results(10)\n    .build();\n\nassert_eq!(config.endpoint(), \"https://search.internal.example.com\");\nassert_eq!(config.engines().len(), 2);\n```"
            },
            {
              "name": "::SearchConfigBuilder::endpoint",
              "line": 268,
              "signature": "pub fn endpoint(mut self, endpoint: impl Into<String>) -> Self;",
              "documentation": "Sets the OneSearch API endpoint URL."
            },
            {
              "name": "::SearchConfigBuilder::api_key",
              "line": 274,
              "signature": "pub fn api_key(mut self, key: impl Into<String>) -> Self;",
              "documentation": "Sets the API key for authentication."
            },
            {
              "name": "::SearchConfigBuilder::engines",
              "line": 280,
              "signature": "pub fn engines(mut self, engines: Vec<String>) -> Self;",
              "documentation": "Sets which search engines to use."
            },
            {
              "name": "::SearchConfigBuilder::default_max_results",
              "line": 286,
              "signature": "pub fn default_max_results(mut self, max: u32) -> Self;",
              "documentation": "Sets the default maximum number of search results."
            },
            {
              "name": "::SearchConfigBuilder::default_search_depth",
              "line": 292,
              "signature": "pub fn default_search_depth(mut self, depth: SearchDepth) -> Self;",
              "documentation": "Sets the default search depth."
            },
            {
              "name": "::SearchConfigBuilder::default_content_format",
              "line": 298,
              "signature": "pub fn default_content_format(mut self, format: ContentFormat) -> Self;",
              "documentation": "Sets the default content format for extraction."
            },
            {
              "name": "::SearchConfigBuilder::request_timeout_ms",
              "line": 304,
              "signature": "pub fn request_timeout_ms(mut self, ms: u64) -> Self;",
              "documentation": "Sets the request timeout in milliseconds."
            },
            {
              "name": "::SearchConfigBuilder::max_crawl_depth",
              "line": 310,
              "signature": "pub fn max_crawl_depth(mut self, depth: u32) -> Self;",
              "documentation": "Sets the maximum crawl depth."
            },
            {
              "name": "::SearchConfigBuilder::build",
              "line": 316,
              "signature": "pub fn build(self) -> SearchConfig;",
              "documentation": "Consumes the builder and returns the configured [`SearchConfig`]."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-search/src/error.rs",
          "sha256": "b783a82cb5a034464420fcd3225d01665f1db3cb724715d7a18e950caa09664e",
          "artifactSha256": "f26f9961289200b312203e295664c321d9d8ce9634c388fad4ed79002b2ae454",
          "url": "/reference/source/forge-rs/crates/forge-search/src/error.rs.txt",
          "declarations": [
            {
              "name": "::SearchError",
              "line": 22,
              "signature": "#[derive(Debug, Error)]\npub enum SearchError {\n    /// The search query was empty or blank.\n    #[error(\"search query must not be empty; provide a non-blank query string\")]\n    EmptyQuery,\n\n    /// The OneSearch API endpoint is not configured or unreachable.\n    #[error(\n        \"OneSearch API endpoint '{endpoint}' is not reachable: {reason}; \\\n         verify the endpoint URL and that the OneSearch service is running\"\n    )]\n    EndpointUnreachable {\n        /// The endpoint URL that was attempted.\n        endpoint: String,\n        /// The reason the endpoint could not be reached.\n        reason: String,\n    },\n\n    /// The OneSearch API returned an error response.\n    #[error(\n        \"OneSearch API error (HTTP {status}): {message}; \\\n         request_id={request_id}\"\n    )]\n    ApiError {\n        /// The HTTP status code returned.\n        status: u16,\n        /// The error message from the API.\n        message: String,\n        /// The request ID for correlation.\n        request_id: String,\n    },\n\n    /// A URL provided for extraction or crawling was invalid.\n    #[error(\"invalid URL '{url}': {reason}\")]\n    InvalidUrl {\n        /// The invalid URL.\n        url: String,\n        /// Why the URL is invalid.\n        reason: String,\n    },\n\n    /// Too many URLs provided for extraction.\n    #[error(\n        \"too many URLs for extraction: {count} provided but maximum is {max}; \\\n         reduce the number of URLs per request\"\n    )]\n    TooManyUrls {\n        /// The number of URLs provided.\n        count: usize,\n        /// The maximum allowed.\n        max: usize,\n    },\n\n    /// The crawl depth or breadth exceeded configured limits.\n    #[error(\"crawl parameter out of range: {param}={value} but allowed range is [{min}, {max}]\")]\n    CrawlParameterOutOfRange {\n        /// The parameter name (e.g., \"max_depth\", \"max_breadth\").\n        param: String,\n        /// The value that was provided.\n        value: i64,\n        /// The minimum allowed value.\n        min: i64,\n        /// The maximum allowed value.\n        max: i64,\n    },\n\n    /// Request timed out.\n    #[error(\"search request timed out after {timeout_ms}ms\")]\n    Timeout {\n        /// The timeout in milliseconds.\n        timeout_ms: u64,\n    },\n\n    /// Serialization or deserialization of request/response failed.\n    #[error(\"serialization error: {reason}\")]\n    SerializationError {\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// Search is disabled or not configured in this toolbelt instance.\n    #[error(\n        \"search tool '{tool_name}' is not configured; set the OneSearch endpoint in \\\n         SearchConfig or provide an API key to enable search capabilities\"\n    )]\n    NotConfigured {\n        /// The tool name that was invoked.\n        tool_name: String,\n    },\n}",
              "documentation": "Errors that can occur during search, extraction, crawling, and site mapping.\n\nEvery variant includes actionable context: what failed, why, and what the\ndeveloper should check.\n\n# Examples\n\n```\nuse forge_search::error::SearchError;\n\nlet err = SearchError::EmptyQuery;\nassert!(err.to_string().contains(\"empty\"));\n```"
            },
            {
              "name": "::SearchResult",
              "line": 113,
              "signature": "pub type SearchResult<T> = Result<T, SearchError>;",
              "documentation": "A specialized `Result` type for `forge-search` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-search/src/lib.rs",
          "sha256": "69e6b3dc99660cae7374682b2bb41a8d48bef34f0636fe132a936362ba06e6f8",
          "artifactSha256": "7f4e5d73c9f4fd7bc1591c79901bb9048f25df81918f2cdc54a5a8faff22d728",
          "url": "/reference/source/forge-rs/crates/forge-search/src/lib.rs.txt",
          "declarations": [
            {
              "name": "config",
              "line": 62,
              "signature": "pub mod config;",
              "documentation": "# forge-search\n\nOneSearch integration as the default research runtime for the Forge SDK.\n\nThis crate standardizes multi-engine web search, content extraction, web\ncrawling, site mapping, markdown/text transforms, and AI answer generation\nas first-class Forge tools. It wraps the OneSearch API (a Go-based\nmulti-engine search service) and exposes each capability as a registered\ntool conforming to the forge-tool `ToolDefinition` + `ToolExecutor` model.\n\n# Capabilities\n\n| Tool | Description | ANVIL Tier |\n|------|-------------|-----------|\n| `search` | Multi-engine web search with deduplication | External (Tier 2) |\n| `search_images` | Multi-engine image search | External (Tier 2) |\n| `extract_content` | Extract structured content from URLs | External (Tier 2) |\n| `crawl_site` | Breadth-first site crawl with depth/breadth limits | External (Tier 2) |\n| `map_site` | Discover site URL structure | External (Tier 2) |\n| `summarize_text` | Summarize text content for LLM consumption | Platform (Tier 1) |\n\n# Architecture\n\n```text\nSearchConfig (OneSearch endpoint, API key, engines, defaults)\n      |\n      v\n  Search tool executors (POST through forge-web fetch controls)\n      |\n      +--> search()       --> SearchResponse\n      +--> search_images() --> ImageSearchResponse\n      +--> extract()      --> ExtractResponse\n      +--> crawl()        --> CrawlResponse\n      +--> map_site()     --> MapResponse\n      |\n      v\n  Tool Registration (register_search_tools)\n```\n\n# OneSearch Compatibility\n\nThis crate communicates with the OneSearch API (Go service at\n`aut0/onesearch-api/`). The API supports multiple search engines\n(Google, Bing, DuckDuckGo, Yandex, Baidu) and a Tavily-compatible\ninterface for search, extract, crawl, and map operations.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\nuse forge_search::tools::register_search_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet config = SearchConfig::default();\nlet mut registry = ToolRegistry::new();\nregister_search_tools(&mut registry, &config).unwrap();\nassert!(registry.contains(\"search\"));\nassert!(registry.contains(\"extract_content\"));\n```"
            },
            {
              "name": "error",
              "line": 63,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "tools",
              "line": 64,
              "signature": "pub mod tools;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 65,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 68,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::config::SearchConfig;",
              "line": 69,
              "signature": "pub use crate::config::SearchConfig;",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{SearchError, SearchResult};",
              "line": 70,
              "signature": "pub use crate::error::{SearchError, SearchResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::tools::{register_search_tools, SEARCH_TOOL_NAMES};",
              "line": 71,
              "signature": "pub use crate::tools::{register_search_tools, SEARCH_TOOL_NAMES};",
              "documentation": ""
            },
            {
              "name": "pub use crate::types::{\n        CrawlRequest, CrawlResponse, ExtractRequest, ExtractResponse, MapRequest, MapResponse,\n        SearchRequest, SearchResponse, SearchResultEntry,\n    };",
              "line": 72,
              "signature": "pub use crate::types::{\n        CrawlRequest, CrawlResponse, ExtractRequest, ExtractResponse, MapRequest, MapResponse,\n        SearchRequest, SearchResponse, SearchResultEntry,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-search/src/tools.rs",
          "sha256": "f99c3a8f4fd3c6a31219707ca260c214e51ae0ff7c16e0e7d6c7781bf5ed3188",
          "artifactSha256": "ec4fd38e73e19fb4e968a28a887be5f6ecb0831d8c193d918980ab091df8c2b9",
          "url": "/reference/source/forge-rs/crates/forge-search/src/tools.rs.txt",
          "declarations": [
            {
              "name": "::SEARCH_TOOL_NAMES",
              "line": 50,
              "signature": "pub const SEARCH_TOOL_NAMES: &[&str];",
              "documentation": "The names of all search tools registered by [`register_search_tools`]."
            },
            {
              "name": "::search_tool_definitions",
              "line": 80,
              "signature": "pub fn search_tool_definitions(config: &SearchConfig) -> Vec<ToolDefinition>;",
              "documentation": "Returns the tool definitions for all search tools.\n\n# Arguments\n\n* `config` - The search configuration (used for setting default values\n  in tool descriptions).\n\n# Returns\n\nA `Vec` of [`ToolDefinition`] values, one for each search tool.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\nuse forge_search::tools::search_tool_definitions;\n\nlet config = SearchConfig::default();\nlet defs = search_tool_definitions(&config);\nassert_eq!(defs.len(), 6);\n```"
            },
            {
              "name": "::register_search_tools",
              "line": 124,
              "signature": "pub fn register_search_tools(\n    registry: &mut ToolRegistry,\n    config: &SearchConfig,\n) -> Result<(), ForgeToolError>;",
              "documentation": "Registers all search tools into the given [`ToolRegistry`].\n\nEach tool is registered with its definition and an executor that posts to\nthe configured OneSearch API. The executors validate parameters and return\nstructured JSON results.\n\n# Arguments\n\n* `registry` - The tool registry to register search tools into.\n* `config` - The search configuration.\n\n# Returns\n\n`Ok(())` if all tools are registered successfully.\n\n# Errors\n\nReturns [`ForgeToolError::RegistryError`] if any tool name is already\nregistered in the registry.\n\n# Examples\n\n```\nuse forge_search::config::SearchConfig;\nuse forge_search::tools::register_search_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet config = SearchConfig::default();\nlet mut registry = ToolRegistry::new();\nregister_search_tools(&mut registry, &config).unwrap();\nassert!(registry.contains(\"search\"));\nassert!(registry.contains(\"extract_content\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-search/src/types.rs",
          "sha256": "3b9087c879f481d381b8faa0ad99c8f9e009423e589ec4ff5bc70018d1c6de94",
          "artifactSha256": "9c130fae89f63fd9d4b41df440b6eb95ba336bc9f0046f238fd3c408578a99e7",
          "url": "/reference/source/forge-rs/crates/forge-search/src/types.rs.txt",
          "declarations": [
            {
              "name": "::SearchRequest",
              "line": 20,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchRequest {\n\n}",
              "documentation": "A web search request.\n\n# Examples\n\n```\nuse forge_search::types::SearchRequest;\n\nlet req = SearchRequest::new(\"rust programming language\");\nassert_eq!(req.query(), \"rust programming language\");\nassert_eq!(req.max_results(), 5);\n```"
            },
            {
              "name": "::SearchRequest::new",
              "line": 52,
              "signature": "pub fn new(query: impl Into<String>) -> Self;",
              "documentation": "Creates a new search request with default parameters.\n\n# Arguments\n\n* `query` - The search query text.\n\n# Returns\n\nA new `SearchRequest` with the given query and default settings\n(5 max results, basic depth, general topic)."
            },
            {
              "name": "::SearchRequest::query",
              "line": 67,
              "signature": "pub fn query(&self) -> &str;",
              "documentation": "Returns the search query text."
            },
            {
              "name": "::SearchRequest::max_results",
              "line": 72,
              "signature": "pub fn max_results(&self) -> u32;",
              "documentation": "Returns the maximum number of results."
            },
            {
              "name": "::SearchRequest::with_max_results",
              "line": 77,
              "signature": "pub fn with_max_results(mut self, max: u32) -> Self;",
              "documentation": "Sets the maximum number of results to return."
            },
            {
              "name": "::SearchRequest::with_search_depth",
              "line": 83,
              "signature": "pub fn with_search_depth(mut self, depth: &str) -> Self;",
              "documentation": "Sets the search depth."
            },
            {
              "name": "::SearchRequest::with_topic",
              "line": 89,
              "signature": "pub fn with_topic(mut self, topic: &str) -> Self;",
              "documentation": "Sets the topic filter."
            },
            {
              "name": "::SearchRequest::with_answer",
              "line": 95,
              "signature": "pub fn with_answer(mut self) -> Self;",
              "documentation": "Enables AI-generated answer in the response."
            },
            {
              "name": "::SearchRequest::with_raw_content",
              "line": 101,
              "signature": "pub fn with_raw_content(mut self) -> Self;",
              "documentation": "Enables raw content in results."
            },
            {
              "name": "::SearchRequest::with_engines",
              "line": 107,
              "signature": "pub fn with_engines(mut self, engines: Vec<String>) -> Self;",
              "documentation": "Sets the engines to use for mega-search."
            },
            {
              "name": "::SearchRequest::with_include_domains",
              "line": 113,
              "signature": "pub fn with_include_domains(mut self, domains: Vec<String>) -> Self;",
              "documentation": "Limits results to specific domains."
            },
            {
              "name": "::SearchRequest::with_exclude_domains",
              "line": 119,
              "signature": "pub fn with_exclude_domains(mut self, domains: Vec<String>) -> Self;",
              "documentation": "Excludes results from specific domains."
            },
            {
              "name": "::SearchResultEntry",
              "line": 143,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchResultEntry {\n/// The page title.\n\npub title: String,\n/// The page URL.\n\npub url: String,\n/// A content snippet or summary.\n\npub content: String,\n/// Relevance score (0.0 to 1.0).\n\npub score: f64,\n/// Full raw content of the page, if requested.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub raw_content: Option<String>,\n/// Publication date, if available.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub published_date: Option<String>\n}",
              "documentation": "A single search result entry.\n\n# Examples\n\n```\nuse forge_search::types::SearchResultEntry;\n\nlet entry = SearchResultEntry {\n    title: \"Rust Programming\".to_string(),\n    url: \"https://www.rust-lang.org/\".to_string(),\n    content: \"A language empowering everyone...\".to_string(),\n    score: 0.95,\n    raw_content: None,\n    published_date: None,\n};\nassert_eq!(entry.title, \"Rust Programming\");\n```"
            },
            {
              "name": "::SearchResponse",
              "line": 177,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SearchResponse {\n/// The original query.\n\npub query: String,\n/// The search results.\n\npub results: Vec<SearchResultEntry>,\n/// AI-generated answer, if requested.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub answer: Option<String>,\n/// Time taken to process the search, in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
              "documentation": "The response from a search operation.\n\n# Examples\n\n```\nuse forge_search::types::SearchResponse;\n\nlet response = SearchResponse {\n    query: \"test\".to_string(),\n    results: vec![],\n    answer: None,\n    response_time: 0.5,\n    request_id: \"req-1\".to_string(),\n};\nassert_eq!(response.results.len(), 0);\n```"
            },
            {
              "name": "::ExtractRequest",
              "line": 202,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractRequest {\n\n}",
              "documentation": "A content extraction request.\n\n# Examples\n\n```\nuse forge_search::types::ExtractRequest;\n\nlet req = ExtractRequest::new(vec![\"https://example.com\".to_string()]);\nassert_eq!(req.urls().len(), 1);\n```"
            },
            {
              "name": "::ExtractRequest::new",
              "line": 214,
              "signature": "pub fn new(urls: Vec<String>) -> Self;",
              "documentation": "Creates a new extraction request for the given URLs."
            },
            {
              "name": "::ExtractRequest::urls",
              "line": 224,
              "signature": "pub fn urls(&self) -> &[String];",
              "documentation": "Returns the URLs to extract."
            },
            {
              "name": "::ExtractRequest::with_depth",
              "line": 229,
              "signature": "pub fn with_depth(mut self, depth: &str) -> Self;",
              "documentation": "Sets the extraction depth."
            },
            {
              "name": "::ExtractRequest::with_format",
              "line": 235,
              "signature": "pub fn with_format(mut self, format: &str) -> Self;",
              "documentation": "Sets the output format."
            },
            {
              "name": "::ExtractRequest::with_timeout",
              "line": 241,
              "signature": "pub fn with_timeout(mut self, timeout: f64) -> Self;",
              "documentation": "Sets the timeout in seconds."
            },
            {
              "name": "::ExtractResultEntry",
              "line": 249,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractResultEntry {\n/// The URL that was extracted.\n\npub url: String,\n/// The extracted raw content.\n\npub raw_content: String,\n/// Images found on the page.\n\n#[serde(default)]\npub images: Vec<String>\n}",
              "documentation": "A single extraction result."
            },
            {
              "name": "::ExtractFailedEntry",
              "line": 261,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractFailedEntry {\n/// The URL that failed.\n\npub url: String,\n/// The error message.\n\npub error: String\n}",
              "documentation": "A failed extraction."
            },
            {
              "name": "::ExtractResponse",
              "line": 270,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ExtractResponse {\n/// Successfully extracted results.\n\npub results: Vec<ExtractResultEntry>,\n/// URLs that failed to extract.\n\n#[serde(default)]\npub failed_results: Vec<ExtractFailedEntry>,\n/// Time taken in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
              "documentation": "The response from an extraction operation."
            },
            {
              "name": "::CrawlRequest",
              "line": 293,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CrawlRequest {\n\n}",
              "documentation": "A site crawl request.\n\n# Examples\n\n```\nuse forge_search::types::CrawlRequest;\n\nlet req = CrawlRequest::new(\"https://docs.example.com\");\nassert_eq!(req.url(), \"https://docs.example.com\");\n```"
            },
            {
              "name": "::CrawlRequest::new",
              "line": 313,
              "signature": "pub fn new(url: impl Into<String>) -> Self;",
              "documentation": "Creates a new crawl request for the given root URL."
            },
            {
              "name": "::CrawlRequest::url",
              "line": 327,
              "signature": "pub fn url(&self) -> &str;",
              "documentation": "Returns the root URL."
            },
            {
              "name": "::CrawlRequest::with_max_depth",
              "line": 332,
              "signature": "pub fn with_max_depth(mut self, depth: u32) -> Self;",
              "documentation": "Sets the maximum crawl depth."
            },
            {
              "name": "::CrawlRequest::with_max_breadth",
              "line": 338,
              "signature": "pub fn with_max_breadth(mut self, breadth: u32) -> Self;",
              "documentation": "Sets the maximum breadth per level."
            },
            {
              "name": "::CrawlRequest::with_limit",
              "line": 344,
              "signature": "pub fn with_limit(mut self, limit: u32) -> Self;",
              "documentation": "Sets the maximum total pages to crawl."
            },
            {
              "name": "::CrawlRequest::with_select_paths",
              "line": 350,
              "signature": "pub fn with_select_paths(mut self, paths: Vec<String>) -> Self;",
              "documentation": "Sets path patterns to include."
            },
            {
              "name": "::CrawlRequest::with_exclude_paths",
              "line": 356,
              "signature": "pub fn with_exclude_paths(mut self, paths: Vec<String>) -> Self;",
              "documentation": "Sets path patterns to exclude."
            },
            {
              "name": "::CrawlResultEntry",
              "line": 364,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CrawlResultEntry {\n/// The page URL.\n\npub url: String,\n/// The page content (in the requested format).\n\npub raw_content: String,\n/// Images found on the page.\n\n#[serde(default)]\npub images: Vec<String>\n}",
              "documentation": "A single crawled page result."
            },
            {
              "name": "::CrawlResponse",
              "line": 376,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CrawlResponse {\n/// The base URL that was crawled.\n\npub base_url: String,\n/// The crawled page results.\n\npub results: Vec<CrawlResultEntry>,\n/// Time taken in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
              "documentation": "The response from a crawl operation."
            },
            {
              "name": "::MapRequest",
              "line": 398,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MapRequest {\n\n}",
              "documentation": "A site mapping request.\n\n# Examples\n\n```\nuse forge_search::types::MapRequest;\n\nlet req = MapRequest::new(\"https://docs.example.com\");\nassert_eq!(req.url(), \"https://docs.example.com\");\n```"
            },
            {
              "name": "::MapRequest::new",
              "line": 412,
              "signature": "pub fn new(url: impl Into<String>) -> Self;",
              "documentation": "Creates a new site map request for the given URL."
            },
            {
              "name": "::MapRequest::url",
              "line": 423,
              "signature": "pub fn url(&self) -> &str;",
              "documentation": "Returns the root URL."
            },
            {
              "name": "::MapRequest::with_max_depth",
              "line": 428,
              "signature": "pub fn with_max_depth(mut self, depth: u32) -> Self;",
              "documentation": "Sets the maximum depth."
            },
            {
              "name": "::MapRequest::with_max_breadth",
              "line": 434,
              "signature": "pub fn with_max_breadth(mut self, breadth: u32) -> Self;",
              "documentation": "Sets the maximum breadth."
            },
            {
              "name": "::MapRequest::with_limit",
              "line": 440,
              "signature": "pub fn with_limit(mut self, limit: u32) -> Self;",
              "documentation": "Sets the maximum total URLs to discover."
            },
            {
              "name": "::MapResponse",
              "line": 448,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MapResponse {\n/// The base URL that was mapped.\n\npub base_url: String,\n/// The discovered URLs.\n\npub results: Vec<String>,\n/// Time taken in seconds.\n\npub response_time: f64,\n/// Unique request identifier.\n\npub request_id: String\n}",
              "documentation": "The response from a site mapping operation."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-codebase",
      "language": "rust",
      "version": "0.2.0",
      "description": "Codebase intelligence primitives for the Forge SDK \u2014 repo understanding, dependency graphs, file relevance, and change impact analysis",
      "manifest": "forge-rs/crates/forge-codebase/Cargo.toml",
      "manifestSha256": "fde21c62cb34a37605a069b89d910814c08e98c469873fd0df626096f22b86a1",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-codebase",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-codebase/src/error.rs",
          "sha256": "116abd8a59ff4af2837a5c1776d07b4f081a92664dc0651e2085b3958d261e17",
          "artifactSha256": "d3efd22af2d1233a4bcdc4444fc3223a91aea44ff2aa840182cd7b08d3964328",
          "url": "/reference/source/forge-rs/crates/forge-codebase/src/error.rs.txt",
          "declarations": [
            {
              "name": "::CodebaseError",
              "line": 9,
              "signature": "#[derive(Debug, Error)]\npub enum CodebaseError {\n    /// The repository path does not exist or is not a directory.\n    #[error(\n        \"repository path '{path}' does not exist or is not a directory; \\\n         provide an absolute path to a valid repository root\"\n    )]\n    InvalidRepoPath {\n        /// The path that was provided.\n        path: String,\n    },\n\n    /// A file could not be read.\n    #[error(\"failed to read file '{path}': {reason}\")]\n    FileReadFailed {\n        /// The file path.\n        path: String,\n        /// Why the read failed.\n        reason: String,\n    },\n\n    /// Dependency manifest parsing failed.\n    #[error(\"failed to parse dependency manifest '{path}': {reason}\")]\n    ManifestParseFailed {\n        /// The manifest file path.\n        path: String,\n        /// The parse error.\n        reason: String,\n    },\n\n    /// The task description for file ranking was empty.\n    #[error(\"task description must not be empty for file relevance ranking\")]\n    EmptyTaskDescription,\n\n    /// The file path for impact prediction was empty or invalid.\n    #[error(\"changed file path must not be empty for impact prediction\")]\n    EmptyChangedFile,\n\n    /// The crate/package name for context assembly was not found.\n    #[error(\n        \"crate or package '{name}' not found in repository at '{repo_path}'; \\\n         verify the name matches a Cargo.toml [package] name or package.json name\"\n    )]\n    CrateNotFound {\n        /// The crate/package name.\n        name: String,\n        /// The repository path.\n        repo_path: String,\n    },\n\n    /// An I/O error occurred.\n    #[error(\"I/O error during codebase analysis: {reason}\")]\n    IoError {\n        /// What went wrong.\n        reason: String,\n    },\n}",
              "documentation": "Errors that can occur during codebase analysis operations."
            },
            {
              "name": "::CodebaseResult",
              "line": 67,
              "signature": "pub type CodebaseResult<T> = Result<T, CodebaseError>;",
              "documentation": "A specialized `Result` type for `forge-codebase` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-codebase/src/lib.rs",
          "sha256": "64387f04a8c463e9be44a15914db583030763984b98f863a5cdb22712257f2e1",
          "artifactSha256": "d54bb78380aeabd32b8f647c7f2cfb520c1757d92b0354e3e987296ec7c3ee4a",
          "url": "/reference/source/forge-rs/crates/forge-codebase/src/lib.rs.txt",
          "declarations": [
            {
              "name": "error",
              "line": 61,
              "signature": "pub mod error;",
              "documentation": "# forge-codebase\n\nCodebase intelligence primitives for the Forge SDK.\n\nThis crate provides reusable runtime services for understanding codebases:\nrepository structure analysis, dependency graph awareness, file relevance\nranking, change impact heuristics, and crate/package-level context assembly.\n\nThese are **runtime services** -- not one-off prompt tricks. They produce\nstructured data that agents can consume for planning, implementation,\nreview, and impact analysis.\n\n# Capabilities\n\n| Service | Description |\n|---------|-------------|\n| **Repo Structure** | Directory tree, file classification, language detection |\n| **Dependency Graph** | Parse Cargo.toml, package.json, go.mod for dependency relationships |\n| **File Relevance** | Given a task description, rank files by likely relevance |\n| **Change Impact** | Given a changed file, predict what else is affected |\n| **Context Assembly** | Gather all relevant context for a crate/package |\n\n# Architecture\n\n```text\nRepoRoot (path to repository)\n    |\n    v\nRepoAnalyzer\n    +--> analyze_structure()    --> RepoStructure\n    +--> parse_dependencies()   --> DependencyGraph\n    +--> rank_files()           --> Vec<RankedFile>\n    +--> predict_impact()       --> ImpactReport\n    +--> assemble_context()     --> CrateContext\n    |\n    v\nTool Registration (register_codebase_tools)\n```\n\n# Tool Classification\n\nAll codebase tools are classified as `ToolTier::External` (Tier 2) because\nthey access the filesystem outside the WASM sandbox.\n\n# Examples\n\n```\nuse forge_codebase::tools::register_codebase_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet mut registry = ToolRegistry::new();\nregister_codebase_tools(&mut registry).unwrap();\nassert!(registry.contains(\"repo_structure\"));\nassert!(registry.contains(\"dependency_graph\"));\nassert!(registry.contains(\"rank_files\"));\nassert!(registry.contains(\"predict_impact\"));\nassert!(registry.contains(\"assemble_context\"));\n```"
            },
            {
              "name": "structure",
              "line": 62,
              "signature": "pub mod structure;",
              "documentation": ""
            },
            {
              "name": "tools",
              "line": 63,
              "signature": "pub mod tools;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 64,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 67,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::error::{CodebaseError, CodebaseResult};",
              "line": 68,
              "signature": "pub use crate::error::{CodebaseError, CodebaseResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::structure::{classify_file, detect_language, FileClassification, Language};",
              "line": 69,
              "signature": "pub use crate::structure::{classify_file, detect_language, FileClassification, Language};",
              "documentation": ""
            },
            {
              "name": "pub use crate::tools::{register_codebase_tools, CODEBASE_TOOL_NAMES};",
              "line": 70,
              "signature": "pub use crate::tools::{register_codebase_tools, CODEBASE_TOOL_NAMES};",
              "documentation": ""
            },
            {
              "name": "pub use crate::types::{\n        CrateContext, DependencyEntry, DependencyGraph, FileEntry, ImpactReport, RankedFile,\n        RepoStructure,\n    };",
              "line": 71,
              "signature": "pub use crate::types::{\n        CrateContext, DependencyEntry, DependencyGraph, FileEntry, ImpactReport, RankedFile,\n        RepoStructure,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-codebase/src/structure.rs",
          "sha256": "400b2cb202ba288730043722575a531691282f55e11bb9efd584bf52fbc4b03f",
          "artifactSha256": "6c28044115719b634654deb46f4f18b0fad8eacf44d00c1e1742a82fa5173f7e",
          "url": "/reference/source/forge-rs/crates/forge-codebase/src/structure.rs.txt",
          "declarations": [
            {
              "name": "::FileClassification",
              "line": 33,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum FileClassification {\n    /// Source code files (.rs, .ts, .go, .py, etc.)\n    Source,\n    /// Test files (files in test directories or with test suffixes)\n    Test,\n    /// Configuration files (Cargo.toml, package.json, .env, etc.)\n    Config,\n    /// Documentation files (.md, .txt, .rst, etc.)\n    Documentation,\n    /// Build artifacts and generated files\n    Generated,\n    /// CI/CD configuration (.github/workflows, .gitlab-ci.yml, etc.)\n    Ci,\n    /// Data files (.json, .yaml, .csv, .sql, etc.)\n    Data,\n    /// Media files (images, fonts, etc.)\n    Media,\n    /// Lock files (Cargo.lock, package-lock.json, etc.)\n    Lock,\n    /// Schema files (.json schema, .proto, .graphql, etc.)\n    Schema,\n    /// Unknown file type\n    Unknown,\n}",
              "documentation": "Classification of a file's role in a codebase.\n\n# Examples\n\n```\nuse forge_codebase::structure::FileClassification;\n\nlet cls = FileClassification::Source;\nassert_eq!(cls.as_str(), \"source\");\n```"
            },
            {
              "name": "::FileClassification::as_str",
              "line": 60,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the string representation of this classification."
            },
            {
              "name": "::Language",
              "line": 95,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Language {\n    /// Rust (.rs)\n    Rust,\n    /// TypeScript (.ts, .tsx)\n    TypeScript,\n    /// JavaScript (.js, .jsx, .mjs, .cjs)\n    JavaScript,\n    /// Go (.go)\n    Go,\n    /// Python (.py)\n    Python,\n    /// Swift (.swift)\n    Swift,\n    /// Kotlin (.kt, .kts)\n    Kotlin,\n    /// Java (.java)\n    Java,\n    /// C (.c, .h)\n    C,\n    /// C++ (.cpp, .cc, .cxx, .hpp, .hh)\n    Cpp,\n    /// Shell (.sh, .bash, .zsh)\n    Shell,\n    /// SQL (.sql)\n    Sql,\n    /// HTML (.html, .htm)\n    Html,\n    /// CSS (.css, .scss, .sass, .less)\n    Css,\n    /// TOML (.toml)\n    Toml,\n    /// YAML (.yaml, .yml)\n    Yaml,\n    /// JSON (.json)\n    Json,\n    /// Markdown (.md)\n    Markdown,\n    /// Protocol Buffers (.proto)\n    Protobuf,\n    /// GraphQL (.graphql, .gql)\n    GraphQL,\n    /// Zig (.zig)\n    Zig,\n}",
              "documentation": "Programming language detected from a file path.\n\n# Examples\n\n```\nuse forge_codebase::structure::Language;\n\nlet lang = Language::Rust;\nassert_eq!(lang.as_str(), \"rust\");\n```"
            },
            {
              "name": "::Language::as_str",
              "line": 142,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the string representation of this language."
            },
            {
              "name": "::classify_file",
              "line": 200,
              "signature": "pub fn classify_file(path: &str) -> FileClassification;",
              "documentation": "Classifies a file based on its path and name.\n\nUses extension, directory patterns, and well-known file names to determine\nthe file's role in the codebase.\n\n# Arguments\n\n* `path` - The file path (relative or absolute).\n\n# Returns\n\nA [`FileClassification`] indicating the file's role.\n\n# Examples\n\n```\nuse forge_codebase::structure::{classify_file, FileClassification};\n\nassert_eq!(classify_file(\"src/main.rs\"), FileClassification::Source);\nassert_eq!(classify_file(\"tests/unit_test.rs\"), FileClassification::Test);\nassert_eq!(classify_file(\"Cargo.toml\"), FileClassification::Config);\nassert_eq!(classify_file(\"README.md\"), FileClassification::Documentation);\nassert_eq!(classify_file(\"Cargo.lock\"), FileClassification::Lock);\nassert_eq!(classify_file(\".github/workflows/ci.yml\"), FileClassification::Ci);\n```"
            },
            {
              "name": "::detect_language",
              "line": 368,
              "signature": "pub fn detect_language(path: &str) -> Option<Language>;",
              "documentation": "Detects the programming language of a file from its path.\n\n# Arguments\n\n* `path` - The file path (relative or absolute).\n\n# Returns\n\n`Some(Language)` if the language could be detected, `None` otherwise.\n\n# Examples\n\n```\nuse forge_codebase::structure::{detect_language, Language};\n\nassert_eq!(detect_language(\"main.rs\"), Some(Language::Rust));\nassert_eq!(detect_language(\"app.tsx\"), Some(Language::TypeScript));\nassert_eq!(detect_language(\"go.mod\"), Some(Language::Go));\nassert_eq!(detect_language(\"image.png\"), None);\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-codebase/src/tools.rs",
          "sha256": "c29d39239e7e6ff55f0934e9d3f10955989e5077e316f0951e34cbef28234f93",
          "artifactSha256": "8a4e0b2aa2f6eede939a177dbb9fb840a88f8bb97ab53fc06b4d99d2996b55d4",
          "url": "/reference/source/forge-rs/crates/forge-codebase/src/tools.rs.txt",
          "declarations": [
            {
              "name": "::CODEBASE_TOOL_NAMES",
              "line": 38,
              "signature": "pub const CODEBASE_TOOL_NAMES: &[&str];",
              "documentation": "The names of all codebase intelligence tools."
            },
            {
              "name": "::codebase_tool_definitions",
              "line": 60,
              "signature": "pub fn codebase_tool_definitions() -> Vec<ToolDefinition>;",
              "documentation": "Returns the tool definitions for all codebase intelligence tools.\n\n# Returns\n\nA `Vec` of 5 [`ToolDefinition`] values.\n\n# Examples\n\n```\nuse forge_codebase::tools::codebase_tool_definitions;\n\nlet defs = codebase_tool_definitions();\nassert_eq!(defs.len(), 5);\n```"
            },
            {
              "name": "::register_codebase_tools",
              "line": 94,
              "signature": "pub fn register_codebase_tools(registry: &mut ToolRegistry) -> Result<(), ForgeToolError>;",
              "documentation": "Registers all 5 codebase intelligence tools into the given [`ToolRegistry`].\n\n# Arguments\n\n* `registry` - The tool registry to register tools into.\n\n# Returns\n\n`Ok(())` if all tools are registered successfully.\n\n# Errors\n\nReturns [`ForgeToolError::RegistryError`] if any tool name is already registered.\n\n# Examples\n\n```\nuse forge_codebase::tools::register_codebase_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet mut registry = ToolRegistry::new();\nregister_codebase_tools(&mut registry).unwrap();\nassert!(registry.contains(\"repo_structure\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-codebase/src/types.rs",
          "sha256": "5af4d4780007cb40ca7487484c243707a317bc76178ae5a0c565e5527efd7c5e",
          "artifactSha256": "75f1f7f6c793fb7e5f18c9ce7f859e3a5ffc0a05b2e92d1a4c66c71673727ee7",
          "url": "/reference/source/forge-rs/crates/forge-codebase/src/types.rs.txt",
          "declarations": [
            {
              "name": "::FileEntry",
              "line": 27,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FileEntry {\n/// Relative path from the repository root.\n\npub path: String,\n/// Classification of the file's role.\n\npub classification: FileClassification,\n/// Programming language, if detected.\n\npub language: Option<Language>,\n/// File size in bytes.\n\npub size_bytes: u64\n}",
              "documentation": "A single file entry in the repository structure.\n\n# Examples\n\n```\nuse forge_codebase::types::FileEntry;\nuse forge_codebase::structure::{FileClassification, Language};\n\nlet entry = FileEntry {\n    path: \"src/main.rs\".to_string(),\n    classification: FileClassification::Source,\n    language: Some(Language::Rust),\n    size_bytes: 1024,\n};\nassert_eq!(entry.path, \"src/main.rs\");\n```"
            },
            {
              "name": "::RepoStructure",
              "line": 60,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct RepoStructure {\n/// Absolute path to the repository root.\n\npub root_path: String,\n/// All files in the repository.\n\npub files: Vec<FileEntry>,\n/// Total number of files.\n\npub total_files: usize,\n/// Total size of all files in bytes.\n\npub total_size_bytes: u64,\n/// Count of files per detected language.\n\npub language_counts: std::collections::BTreeMap<String, usize>,\n/// Count of files per classification.\n\npub classification_counts: std::collections::BTreeMap<String, usize>,\n/// Top-level directories.\n\npub directories: Vec<String>\n}",
              "documentation": "The complete structure of a repository.\n\nContains all files organized by classification, with language statistics\nand directory structure.\n\n# Examples\n\n```\nuse forge_codebase::types::RepoStructure;\n\nlet structure = RepoStructure {\n    root_path: \"/repo\".to_string(),\n    files: vec![],\n    total_files: 0,\n    total_size_bytes: 0,\n    language_counts: std::collections::BTreeMap::new(),\n    classification_counts: std::collections::BTreeMap::new(),\n    directories: vec![],\n};\nassert_eq!(structure.total_files, 0);\n```"
            },
            {
              "name": "::DependencyEntry",
              "line": 95,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DependencyEntry {\n/// The dependency name.\n\npub name: String,\n/// The version requirement or resolved version.\n\npub version: Option<String>,\n/// The source (e.g., \"crates.io\", \"npm\", \"path\", \"git\").\n\npub source: String,\n/// Whether this is a dev-only dependency.\n\npub is_dev: bool,\n/// Whether this comes from a workspace declaration.\n\npub is_workspace: bool,\n/// Path dependency location, if applicable.\n\npub path: Option<String>\n}",
              "documentation": "A dependency entry parsed from a manifest file.\n\n# Examples\n\n```\nuse forge_codebase::types::DependencyEntry;\n\nlet dep = DependencyEntry {\n    name: \"serde\".to_string(),\n    version: Some(\"1.0\".to_string()),\n    source: \"crates.io\".to_string(),\n    is_dev: false,\n    is_workspace: false,\n    path: None,\n};\nassert_eq!(dep.name, \"serde\");\n```"
            },
            {
              "name": "::DependencyGraph",
              "line": 127,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DependencyGraph {\n/// Path to the manifest file.\n\npub manifest_path: String,\n/// Type of manifest (\"cargo\", \"npm\", \"go\", \"python\").\n\npub manifest_type: String,\n/// The package/crate name from the manifest.\n\npub package_name: Option<String>,\n/// All declared dependencies.\n\npub dependencies: Vec<DependencyEntry>,\n/// Workspace members (for Cargo workspaces or npm workspaces).\n\npub workspace_members: Vec<String>\n}",
              "documentation": "A dependency graph parsed from manifest files.\n\n# Examples\n\n```\nuse forge_codebase::types::DependencyGraph;\n\nlet graph = DependencyGraph {\n    manifest_path: \"Cargo.toml\".to_string(),\n    manifest_type: \"cargo\".to_string(),\n    package_name: Some(\"my-crate\".to_string()),\n    dependencies: vec![],\n    workspace_members: vec![],\n};\nassert_eq!(graph.manifest_type, \"cargo\");\n```"
            },
            {
              "name": "::RankedFile",
              "line": 155,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct RankedFile {\n/// The file path relative to the repository root.\n\npub path: String,\n/// Relevance score (0.0 to 1.0, higher = more relevant).\n\npub relevance_score: f64,\n/// Human-readable reasons for the ranking.\n\npub reasons: Vec<String>\n}",
              "documentation": "A file ranked by relevance to a given task.\n\n# Examples\n\n```\nuse forge_codebase::types::RankedFile;\n\nlet ranked = RankedFile {\n    path: \"src/auth.rs\".to_string(),\n    relevance_score: 0.85,\n    reasons: vec![\"filename matches task keyword 'auth'\".to_string()],\n};\nassert!(ranked.relevance_score > 0.5);\n```"
            },
            {
              "name": "::ImpactReport",
              "line": 182,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ImpactReport {\n/// The file that was changed.\n\npub changed_file: String,\n/// Files that directly import/use the changed file.\n\npub directly_affected: Vec<String>,\n/// Files that are transitively affected.\n\npub transitively_affected: Vec<String>,\n/// Test files that should be re-run.\n\npub affected_tests: Vec<String>,\n/// Risk level: \"low\", \"medium\", \"high\", \"critical\".\n\npub risk_level: String,\n/// Human-readable summary of the impact.\n\npub summary: String\n}",
              "documentation": "An impact report predicting what is affected by a change.\n\n# Examples\n\n```\nuse forge_codebase::types::ImpactReport;\n\nlet report = ImpactReport {\n    changed_file: \"src/auth.rs\".to_string(),\n    directly_affected: vec![\"src/api/handler.rs\".to_string()],\n    transitively_affected: vec![],\n    affected_tests: vec![\"tests/auth_test.rs\".to_string()],\n    risk_level: \"medium\".to_string(),\n    summary: \"Changes to auth.rs affect 1 direct dependent\".to_string(),\n};\nassert_eq!(report.risk_level, \"medium\");\n```"
            },
            {
              "name": "::CrateContext",
              "line": 221,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CrateContext {\n/// The crate/package name.\n\npub name: String,\n/// Path to the crate root directory.\n\npub root_path: String,\n/// Path to the manifest file (Cargo.toml, package.json, etc.).\n\npub manifest_path: String,\n/// Source code files in this crate.\n\npub source_files: Vec<String>,\n/// Test files for this crate.\n\npub test_files: Vec<String>,\n/// Documentation files for this crate.\n\npub doc_files: Vec<String>,\n/// Dependencies of this crate.\n\npub dependencies: Vec<DependencyEntry>,\n/// Other crates/packages that depend on this one.\n\npub dependents: Vec<String>,\n/// Approximate total lines of source code.\n\npub total_lines: u64\n}",
              "documentation": "Assembled context for a specific crate or package.\n\nContains everything an agent needs to understand a crate: its manifest,\nsource files, tests, dependencies, and documentation.\n\n# Examples\n\n```\nuse forge_codebase::types::CrateContext;\n\nlet ctx = CrateContext {\n    name: \"forge-tool\".to_string(),\n    root_path: \"crates/forge-tool\".to_string(),\n    manifest_path: \"crates/forge-tool/Cargo.toml\".to_string(),\n    source_files: vec![\"src/lib.rs\".to_string()],\n    test_files: vec![],\n    doc_files: vec![\"README.md\".to_string()],\n    dependencies: vec![],\n    dependents: vec![],\n    total_lines: 500,\n};\nassert_eq!(ctx.name, \"forge-tool\");\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-toolbelt",
      "language": "rust",
      "version": "0.2.0",
      "description": "First-class default toolbelt for Forge SDK agents \u2014 search, crawl, code intelligence, file ops, shell, memory hooks",
      "manifest": "forge-rs/crates/forge-toolbelt/Cargo.toml",
      "manifestSha256": "29c41d237c76961ffc4e8bfc94699758a702f03396e9a26dd45df3380ee6739b",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-toolbelt",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-toolbelt/src/config.rs",
          "sha256": "54faac2a8ca61f87f21a32c5cab2b05f02cdc716724c14475d8b3f7f7e311cc2",
          "artifactSha256": "44a65b5493f84bf0e391107d134301fa9fcbe8896b9a26be56c78adfdea5e695",
          "url": "/reference/source/forge-rs/crates/forge-toolbelt/src/config.rs.txt",
          "declarations": [
            {
              "name": "::ToolGroup",
              "line": 42,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ToolGroup {\n    /// Search tools (OneSearch integration): search, search_images, extract_content,\n    /// crawl_site, map_site, summarize_text.\n    Search,\n    /// Web substrate tools: web_fetch, web_parse, web_extract, etc.\n    Web,\n    /// Codebase intelligence: repo_structure, dependency_graph, rank_files,\n    /// predict_impact, assemble_context.\n    Codebase,\n    /// File operations: file_read, file_stat, file_type.\n    FileOps,\n    /// Shell execution (policy-gated): shell_exec.\n    Shell,\n    /// Utility tools: current_time, uuid_generate.\n    Utility,\n}",
              "documentation": "A group of related tools that can be independently enabled or disabled.\n\n# Examples\n\n```\nuse forge_toolbelt::config::ToolGroup;\n\nlet group = ToolGroup::Search;\nassert_eq!(group.as_str(), \"search\");\n```"
            },
            {
              "name": "::ToolGroup::as_str",
              "line": 61,
              "signature": "pub fn as_str(&self) -> &'static str;",
              "documentation": "Returns the string representation of this tool group."
            },
            {
              "name": "::ToolGroup::all",
              "line": 73,
              "signature": "pub fn all() -> &'static [ToolGroup];",
              "documentation": "Returns all available tool groups."
            },
            {
              "name": "::ShellPolicy",
              "line": 106,
              "signature": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ShellPolicy {\n    /// Shell execution is completely disabled.\n    Disabled,\n    /// Only read-only commands are allowed (ls, cat, find, grep, etc.).\n    #[default]\n    ReadOnly,\n    /// Read and write commands are allowed, but destructive operations\n    /// (rm, chmod, chown, etc.) require approval.\n    ReadWrite,\n    /// All commands are allowed. Use with extreme caution.\n    Unrestricted,\n}",
              "documentation": "Policy for shell command execution.\n\nControls what shell commands agents are allowed to execute.\n\n# Examples\n\n```\nuse forge_toolbelt::config::ShellPolicy;\n\nlet policy = ShellPolicy::ReadOnly;\nassert!(policy.allows_reads());\nassert!(!policy.allows_writes());\n```"
            },
            {
              "name": "::ShellPolicy::allows_reads",
              "line": 121,
              "signature": "pub fn allows_reads(&self) -> bool;",
              "documentation": "Returns whether this policy allows read operations."
            },
            {
              "name": "::ShellPolicy::allows_writes",
              "line": 126,
              "signature": "pub fn allows_writes(&self) -> bool;",
              "documentation": "Returns whether this policy allows write operations."
            },
            {
              "name": "::ShellPolicy::allows_destructive",
              "line": 131,
              "signature": "pub fn allows_destructive(&self) -> bool;",
              "documentation": "Returns whether this policy allows destructive operations."
            },
            {
              "name": "::ToolbeltConfig",
              "line": 149,
              "signature": "#[derive(Debug, Clone)]\npub struct ToolbeltConfig {\n\n}",
              "documentation": "Configuration for the Forge toolbelt.\n\nControls which tool groups are enabled and how they behave.\n\n# Examples\n\n```\nuse forge_toolbelt::config::{ToolbeltConfig, ToolGroup};\n\nlet config = ToolbeltConfig::default();\nassert!(config.is_enabled(ToolGroup::Utility));\n```"
            },
            {
              "name": "::ToolbeltConfig::builder",
              "line": 179,
              "signature": "pub fn builder() -> ToolbeltConfigBuilder;",
              "documentation": "Creates a new [`ToolbeltConfigBuilder`].\n\nThe builder starts with NO groups enabled. Call `.enable()` to\nadd specific groups.\n\n# Returns\n\nA builder for constructing a custom config."
            },
            {
              "name": "::ToolbeltConfig::is_enabled",
              "line": 188,
              "signature": "pub fn is_enabled(&self, group: ToolGroup) -> bool;",
              "documentation": "Returns whether the given tool group is enabled."
            },
            {
              "name": "::ToolbeltConfig::search_config",
              "line": 193,
              "signature": "pub fn search_config(&self) -> &SearchConfig;",
              "documentation": "Returns the search configuration."
            },
            {
              "name": "::ToolbeltConfig::shell_policy",
              "line": 198,
              "signature": "pub fn shell_policy(&self) -> &ShellPolicy;",
              "documentation": "Returns the shell execution policy."
            },
            {
              "name": "::ToolbeltConfig::enabled_groups",
              "line": 203,
              "signature": "pub fn enabled_groups(&self) -> Vec<ToolGroup>;",
              "documentation": "Returns all enabled tool groups."
            },
            {
              "name": "::ToolbeltConfigBuilder",
              "line": 225,
              "signature": "pub struct ToolbeltConfigBuilder {\n\n}",
              "documentation": "Builder for [`ToolbeltConfig`].\n\n# Examples\n\n```\nuse forge_toolbelt::config::{ToolbeltConfig, ToolGroup, ShellPolicy};\n\nlet config = ToolbeltConfig::builder()\n    .enable(ToolGroup::Search)\n    .enable(ToolGroup::Utility)\n    .shell_policy(ShellPolicy::Disabled)\n    .build();\nassert!(config.is_enabled(ToolGroup::Search));\nassert!(!config.is_enabled(ToolGroup::Shell));\n```"
            },
            {
              "name": "::ToolbeltConfigBuilder::enable",
              "line": 233,
              "signature": "pub fn enable(mut self, group: ToolGroup) -> Self;",
              "documentation": "Enables a tool group."
            },
            {
              "name": "::ToolbeltConfigBuilder::enable_all",
              "line": 239,
              "signature": "pub fn enable_all(mut self) -> Self;",
              "documentation": "Enables all tool groups."
            },
            {
              "name": "::ToolbeltConfigBuilder::search_config",
              "line": 247,
              "signature": "pub fn search_config(mut self, config: SearchConfig) -> Self;",
              "documentation": "Sets the search configuration."
            },
            {
              "name": "::ToolbeltConfigBuilder::shell_policy",
              "line": 253,
              "signature": "pub fn shell_policy(mut self, policy: ShellPolicy) -> Self;",
              "documentation": "Sets the shell execution policy."
            },
            {
              "name": "::ToolbeltConfigBuilder::build",
              "line": 259,
              "signature": "pub fn build(self) -> ToolbeltConfig;",
              "documentation": "Consumes the builder and returns the configured [`ToolbeltConfig`]."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-toolbelt/src/error.rs",
          "sha256": "28c734e90e4ed21e68cbe303ddb2c089455472425286e8403a5ddd67479eb60e",
          "artifactSha256": "c90bdfb418040f0a602d2199f4329efb2329f7a7641deaf685c667e273307976",
          "url": "/reference/source/forge-rs/crates/forge-toolbelt/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ToolbeltError",
              "line": 7,
              "signature": "#[derive(Debug, Error)]\npub enum ToolbeltError {\n    /// A tool group is not enabled in the current configuration.\n    #[error(\"tool group '{group}' is not enabled in the toolbelt configuration\")]\n    GroupNotEnabled {\n        /// The disabled group.\n        group: String,\n    },\n\n    /// Shell command execution was denied by policy.\n    #[error(\"shell command '{command}' denied by policy '{policy}': {reason}\")]\n    ShellDenied {\n        /// The command that was denied.\n        command: String,\n        /// The active policy.\n        policy: String,\n        /// Why the command was denied.\n        reason: String,\n    },\n\n    /// File operation failed.\n    #[error(\"file operation failed on '{path}': {reason}\")]\n    FileOpFailed {\n        /// The file path.\n        path: String,\n        /// What went wrong.\n        reason: String,\n    },\n}",
              "documentation": "Errors that can occur during toolbelt operations."
            },
            {
              "name": "::ToolbeltResult",
              "line": 37,
              "signature": "pub type ToolbeltResult<T> = Result<T, ToolbeltError>;",
              "documentation": "A specialized `Result` type for `forge-toolbelt` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-toolbelt/src/file_ops.rs",
          "sha256": "36e100650d8ecc59bfb4a4654a1593b1119701ecce68435dc3ea31784ccc8a1e",
          "artifactSha256": "591870d7a20322e1a656a8243ec58f6ea29124fd98106387962aa5abaf0a6ce9",
          "url": "/reference/source/forge-rs/crates/forge-toolbelt/src/file_ops.rs.txt",
          "declarations": [
            {
              "name": "::register_file_ops_tools",
              "line": 34,
              "signature": "pub fn register_file_ops_tools(registry: &mut ToolRegistry) -> Result<(), ForgeToolError>;",
              "documentation": "Registers file operation tools into the registry.\n\n# Tools\n\n- `file_read`: Read the contents of a file.\n- `file_stat`: Get file metadata (size, modified, permissions).\n- `file_type`: Detect the file type (language, classification).\n\n# Examples\n\n```\nuse forge_toolbelt::file_ops::register_file_ops_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet mut registry = ToolRegistry::new();\nregister_file_ops_tools(&mut registry).unwrap();\nassert!(registry.contains(\"file_read\"));\nassert!(registry.contains(\"file_stat\"));\nassert!(registry.contains(\"file_type\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-toolbelt/src/lib.rs",
          "sha256": "037f6899e763bad663f24aa4bc08770eafc57ebf9519d1475565300b441b5fc2",
          "artifactSha256": "295a3c5d47834932245e1288dbf412b6d7e5d440d83c4ad6aaeb70c698835dcb",
          "url": "/reference/source/forge-rs/crates/forge-toolbelt/src/lib.rs.txt",
          "declarations": [
            {
              "name": "config",
              "line": 69,
              "signature": "pub mod config;",
              "documentation": "# forge-toolbelt\n\nFirst-class default toolbelt for the Forge SDK.\n\nAgents should not have to assemble basic operational tools from scratch.\nThis crate provides a curated, selectively enableable, scopable, and\noverridable set of default tools that every Forge agent can use.\n\n# Architecture\n\nThe toolbelt is organized into **tool groups** that can be independently\nenabled or disabled via [`ToolbeltConfig`]:\n\n| Group | Tools | Tier | Source |\n|-------|-------|------|--------|\n| **Search** | search, search_images, extract_content, crawl_site, map_site, summarize_text | External/Platform | `forge-search` |\n| **Web** | web_fetch, web_parse, web_extract, web_to_markdown, web_crawl, web_inspect_site, web_compact_site, web_search | External | `forge-web` |\n| **Codebase** | repo_structure, dependency_graph, rank_files, predict_impact, assemble_context | External | `forge-codebase` |\n| **File Ops** | file_read, file_stat, file_type | External | built-in |\n| **Shell** | shell_exec | External | built-in (policy-gated) |\n| **Utility** | current_time, uuid_generate | Platform | built-in |\n\n# ANVIL Tier Classification\n\n- **Platform (Tier 1)**: In-sandbox, always available. `current_time`, `uuid_generate`, `summarize_text`.\n- **External (Tier 2)**: Out-of-sandbox, Arsenal ACT required. All search, web, codebase, file, and shell tools.\n- **Embedded (Tier 3)**: Compiled into WASM module. Not used by the toolbelt.\n\n# Selective Enable / Disable\n\n```\nuse forge_toolbelt::config::{ToolbeltConfig, ToolGroup};\n\n// Enable only search and codebase tools\nlet config = ToolbeltConfig::builder()\n    .enable(ToolGroup::Search)\n    .enable(ToolGroup::Codebase)\n    .build();\n\nassert!(config.is_enabled(ToolGroup::Search));\nassert!(config.is_enabled(ToolGroup::Codebase));\nassert!(!config.is_enabled(ToolGroup::Shell));\n```\n\n# Override Support\n\nAny tool from the toolbelt can be overridden by registering a tool with\nthe same name before calling [`register_toolbelt`]. The toolbelt will\nskip already-registered tools.\n\n# Examples\n\n```\nuse forge_toolbelt::config::ToolbeltConfig;\nuse forge_toolbelt::register_toolbelt;\nuse forge_tool::registry::ToolRegistry;\n\nlet config = ToolbeltConfig::default();\nlet mut registry = ToolRegistry::new();\nregister_toolbelt(&mut registry, &config).unwrap();\n\n// All default tools are now registered\nassert!(registry.contains(\"current_time\"));\nassert!(registry.contains(\"search\"));\nassert!(registry.contains(\"repo_structure\"));\n```"
            },
            {
              "name": "error",
              "line": 70,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "file_ops",
              "line": 71,
              "signature": "pub mod file_ops;",
              "documentation": ""
            },
            {
              "name": "shell",
              "line": 72,
              "signature": "pub mod shell;",
              "documentation": ""
            },
            {
              "name": "utility",
              "line": 73,
              "signature": "pub mod utility;",
              "documentation": ""
            },
            {
              "name": "::register_toolbelt",
              "line": 113,
              "signature": "pub fn register_toolbelt(\n    registry: &mut ToolRegistry,\n    config: &ToolbeltConfig,\n) -> Result<(), ForgeToolError>;",
              "documentation": "Registers the default toolbelt into the given [`ToolRegistry`].\n\nRespects the [`ToolbeltConfig`] for which tool groups are enabled.\nTools that are already registered in the registry are skipped (not\noverwritten), enabling callers to override specific tools before\ncalling this function.\n\n# Arguments\n\n* `registry` - The tool registry to populate.\n* `config` - The toolbelt configuration controlling which groups are enabled.\n\n# Returns\n\n`Ok(())` if all enabled tools are registered (or skipped if already present).\n\n# Errors\n\nReturns [`ForgeToolError::RegistryError`] if registration fails for a\nreason other than duplicate names.\n\n# Examples\n\n```\nuse forge_toolbelt::config::ToolbeltConfig;\nuse forge_toolbelt::register_toolbelt;\nuse forge_tool::registry::ToolRegistry;\n\nlet config = ToolbeltConfig::default();\nlet mut registry = ToolRegistry::new();\nregister_toolbelt(&mut registry, &config).unwrap();\nassert!(registry.contains(\"current_time\"));\n```"
            },
            {
              "name": "prelude",
              "line": 201,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports for convenience."
            },
            {
              "name": "pub use crate::config::{ShellPolicy, ToolGroup, ToolbeltConfig};",
              "line": 202,
              "signature": "pub use crate::config::{ShellPolicy, ToolGroup, ToolbeltConfig};",
              "documentation": ""
            },
            {
              "name": "pub use crate::register_toolbelt;",
              "line": 203,
              "signature": "pub use crate::register_toolbelt;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-toolbelt/src/shell.rs",
          "sha256": "4d2ca08f89559ae1f70d94c9208d937ec70a7307bdb35e6db40f8079fa5bd917",
          "artifactSha256": "c3cdbf2103fc9f7f8043fe69a1288a2164551387f87013e80d474a81a08a1a02",
          "url": "/reference/source/forge-rs/crates/forge-toolbelt/src/shell.rs.txt",
          "declarations": [
            {
              "name": "::register_shell_tools",
              "line": 64,
              "signature": "pub fn register_shell_tools(\n    registry: &mut ToolRegistry,\n    policy: &ShellPolicy,\n) -> Result<(), ForgeToolError>;",
              "documentation": "Registers the shell execution tool into the registry.\n\nThe tool is gated by the provided [`ShellPolicy`]. If the policy is\n`Disabled`, no tool is registered.\n\n# Arguments\n\n* `registry` - The tool registry.\n* `policy` - The shell execution policy.\n\n# Examples\n\n```\nuse forge_toolbelt::shell::register_shell_tools;\nuse forge_toolbelt::config::ShellPolicy;\nuse forge_tool::registry::ToolRegistry;\n\nlet mut registry = ToolRegistry::new();\nregister_shell_tools(&mut registry, &ShellPolicy::ReadOnly).unwrap();\nassert!(registry.contains(\"shell_exec\"));\n```"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-toolbelt/src/utility.rs",
          "sha256": "75111419a76080ffbe40d3c7aec91cb673f95969c4b9957621fd50443b71b789",
          "artifactSha256": "7b99f716563cad718b012eb83914c981f99a4fa61aa9245012d041d5e06643cc",
          "url": "/reference/source/forge-rs/crates/forge-toolbelt/src/utility.rs.txt",
          "declarations": [
            {
              "name": "::register_utility_tools",
              "line": 31,
              "signature": "pub fn register_utility_tools(registry: &mut ToolRegistry) -> Result<(), ForgeToolError>;",
              "documentation": "Registers utility tools into the registry.\n\n# Tools\n\n- `current_time`: Returns the current UTC time in ISO 8601 format.\n- `uuid_generate`: Generates a new UUIDv4.\n\n# Examples\n\n```\nuse forge_toolbelt::utility::register_utility_tools;\nuse forge_tool::registry::ToolRegistry;\n\nlet mut registry = ToolRegistry::new();\nregister_utility_tools(&mut registry).unwrap();\nassert!(registry.contains(\"current_time\"));\nassert!(registry.contains(\"uuid_generate\"));\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-code-safety",
      "language": "rust",
      "version": "0.2.0",
      "description": "Runtime safety primitives for coding agents \u2014 worktree isolation, write scoping, delete prevention, approval gates, and audit logging",
      "manifest": "forge-rs/crates/forge-code-safety/Cargo.toml",
      "manifestSha256": "543c3a46f92b916a032cb2802d19a0291120cd0ab306b30cd0c4eb45160b699e",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-code-safety",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-code-safety/src/approval.rs",
          "sha256": "a0eb59fe0fcba3cbe2cf6385565358fea5dfad1003a1ea3357c54cd316a7c592",
          "artifactSha256": "c3683edf06296f75457f7598fb6a51197644c98e6fcdbb19389e0f5edfad5cc0",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/approval.rs.txt",
          "declarations": [
            {
              "name": "::ApprovalRequest",
              "line": 49,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ApprovalRequest {\n/// The DID of the agent requesting approval.\n\npub agent_did: String,\n/// The operation type (e.g., \"delete\", \"modify_protected\", \"force_push\").\n\npub operation: String,\n/// The file or directory path the operation targets.\n\npub path: PathBuf,\n/// The assessed risk level of the operation.\n\npub risk_level: RiskLevel,\n/// The agent's justification for why the operation is needed.\n\npub justification: String\n}",
              "documentation": "A request for approval of a file operation."
            },
            {
              "name": "::ApprovalResponse",
              "line": 64,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ApprovalResponse {\n/// Unique identifier for this approval decision.\n\npub decision_id: String,\n/// Whether the operation was approved.\n\npub approved: bool,\n/// The entity that made the approval decision.\n\npub reviewer: String,\n/// Why the decision was made.\n\npub reason: String,\n/// When the decision was made.\n\npub decided_at: DateTime<Utc>,\n/// Optional conditions attached to the approval.\n\npub conditions: Vec<String>\n}",
              "documentation": "The response to an approval request."
            },
            {
              "name": "::ApprovalGate",
              "line": 89,
              "signature": "#[async_trait]\npub trait ApprovalGate: Send + Sync {\n    /// Requests approval for a file operation.\n    ///\n    /// # Arguments\n    ///\n    /// * `request` - The approval request with details about the operation.\n    ///\n    /// # Returns\n    ///\n    /// An [`ApprovalResponse`] indicating whether the operation was approved.\n    async fn request_approval(&self, request: &ApprovalRequest) -> ApprovalResponse;\n}",
              "documentation": "Trait for approval gate implementations.\n\nApproval gates are called before executing high-risk file operations.\nImplementations may be synchronous (auto-approve/deny), or asynchronous\n(queue for human review, send notification).\n\n# Thread Safety\n\nImplementations must be `Send + Sync` for use across async agent tasks."
            },
            {
              "name": "::AutoDenyGate",
              "line": 106,
              "signature": "pub struct AutoDenyGate;",
              "documentation": "An approval gate that automatically denies all requests.\n\nThis is the default gate and the safest option. It ensures no destructive\noperations proceed without explicit configuration of a more permissive gate."
            },
            {
              "name": "::AutoApproveGate",
              "line": 130,
              "signature": "pub struct AutoApproveGate;",
              "documentation": "An approval gate for testing that automatically approves all requests.\n\n**WARNING**: This gate should NEVER be used in production. It is provided\nonly for testing purposes. Using it in production bypasses all safety checks."
            },
            {
              "name": "::RiskBasedGate",
              "line": 155,
              "signature": "pub struct RiskBasedGate {\n\n}",
              "documentation": "An approval gate that auto-approves low-risk operations and denies others.\n\nThis gate is suitable for development environments where low-risk operations\n(deleting build artifacts, generated files) should proceed automatically,\nbut higher-risk operations still require escalation."
            },
            {
              "name": "::RiskBasedGate::new",
              "line": 167,
              "signature": "pub fn new(max_auto_approve: RiskLevel) -> Self;",
              "documentation": "Creates a new risk-based gate that auto-approves up to the given risk level.\n\n# Arguments\n\n* `max_auto_approve` - The maximum risk level to auto-approve. Operations\n  with higher risk will be denied."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-code-safety/src/audit.rs",
          "sha256": "46a6ccac555e715e99dfb328174cbf05b60b7070099f1cae1e0bb672f9745782",
          "artifactSha256": "61e0afefcf4c980480bc1189965cd8c76b74b948805093a26101e4b4b5080dc7",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/audit.rs.txt",
          "declarations": [
            {
              "name": "::FileOperation",
              "line": 45,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub enum FileOperation {\n    /// Creating a new file.\n    Create,\n    /// Reading a file's contents.\n    Read,\n    /// Modifying an existing file.\n    Modify,\n    /// Deleting a file.\n    Delete,\n    /// Renaming or moving a file.\n    Rename,\n    /// Changing file permissions.\n    Chmod,\n    /// Creating a directory.\n    CreateDir,\n    /// Removing a directory.\n    RemoveDir,\n}",
              "documentation": "The type of file operation being performed."
            },
            {
              "name": "::OperationResult",
              "line": 81,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum OperationResult {\n    /// The operation succeeded.\n    Success,\n    /// The operation was denied by policy.\n    Denied {\n        /// Why it was denied.\n        reason: String,\n    },\n    /// The operation failed due to an error.\n    Failed {\n        /// What went wrong.\n        reason: String,\n    },\n}",
              "documentation": "The result of a file operation."
            },
            {
              "name": "::AuditEntry",
              "line": 108,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AuditEntry {\n/// Unique identifier for this entry.\n\npub id: String,\n/// When the operation occurred.\n\npub timestamp: DateTime<Utc>,\n/// The DID of the agent that performed the operation.\n\npub agent_did: String,\n/// The type of operation.\n\npub operation: FileOperation,\n/// The file path targeted by the operation.\n\npub path: PathBuf,\n/// The result of the operation.\n\npub result: OperationResult,\n/// Optional additional context or notes.\n\npub context: Option<String>,\n/// BLAKE3 hash of the previous entry for chain integrity.\n\npub previous_hash: String,\n/// BLAKE3 hash of this entry's content.\n\npub entry_hash: String\n}",
              "documentation": "A single audit log entry recording a file operation."
            },
            {
              "name": "::FileAuditLog",
              "line": 137,
              "signature": "pub struct FileAuditLog {\n\n}",
              "documentation": "An append-only audit log for file operations.\n\nThe log maintains a hash chain where each entry references the hash of\nthe previous entry, enabling tamper detection.\n\n# Thread Safety\n\nUses `RwLock` for safe concurrent access from multiple agent tasks."
            },
            {
              "name": "::FileAuditLog::new",
              "line": 143,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new empty audit log."
            },
            {
              "name": "::FileAuditLog::record",
              "line": 158,
              "signature": "pub async fn record(\n        &self,\n        agent_did: &str,\n        operation: FileOperation,\n        path: PathBuf,\n        result: OperationResult,\n        context: Option<String>,\n    );",
              "documentation": "Records a file operation in the audit log.\n\n# Arguments\n\n* `agent_did` - The DID of the agent performing the operation.\n* `operation` - The type of file operation.\n* `path` - The file path being operated on.\n* `result` - The result of the operation.\n* `context` - Optional additional context."
            },
            {
              "name": "::FileAuditLog::entries",
              "line": 204,
              "signature": "pub async fn entries(&self) -> Vec<AuditEntry>;",
              "documentation": "Returns all entries in the audit log."
            },
            {
              "name": "::FileAuditLog::len",
              "line": 210,
              "signature": "pub async fn len(&self) -> usize;",
              "documentation": "Returns the number of entries in the audit log."
            },
            {
              "name": "::FileAuditLog::is_empty",
              "line": 216,
              "signature": "pub async fn is_empty(&self) -> bool;",
              "documentation": "Returns true if the audit log is empty."
            },
            {
              "name": "::FileAuditLog::entries_by_agent",
              "line": 222,
              "signature": "pub async fn entries_by_agent(&self, agent_did: &str) -> Vec<AuditEntry>;",
              "documentation": "Returns entries filtered by agent DID."
            },
            {
              "name": "::FileAuditLog::entries_by_operation",
              "line": 232,
              "signature": "pub async fn entries_by_operation(&self, operation: FileOperation) -> Vec<AuditEntry>;",
              "documentation": "Returns entries filtered by operation type."
            },
            {
              "name": "::FileAuditLog::verify_chain",
              "line": 245,
              "signature": "pub async fn verify_chain(&self) -> Result<(), String>;",
              "documentation": "Verifies the hash chain integrity of the audit log.\n\nReturns `Ok(())` if the chain is valid, or an error describing where\nthe chain was broken."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-code-safety/src/delete_policy.rs",
          "sha256": "87def6eaf052e64c6979fd63beab1330a136c5807ad3e2a5012242b460a24c95",
          "artifactSha256": "f32284908be22611230122091ed78eea7aaf7ecbd12db9f456953a546ad739f5",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/delete_policy.rs.txt",
          "declarations": [
            {
              "name": "::DeleteDecision",
              "line": 43,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum DeleteDecision {\n    /// The delete is denied.\n    Denied {\n        /// The path that was denied.\n        path: PathBuf,\n        /// Why it was denied.\n        reason: String,\n    },\n    /// The delete requires explicit approval before it can proceed.\n    RequiresApproval {\n        /// The path requiring approval.\n        path: PathBuf,\n        /// The risk level of the delete.\n        risk_level: RiskLevel,\n    },\n    /// The delete is allowed (matches an approved pattern).\n    Allowed {\n        /// The path that was allowed.\n        path: PathBuf,\n        /// The pattern that matched.\n        matched_pattern: String,\n    },\n}",
              "documentation": "The result of evaluating a delete operation against the policy."
            },
            {
              "name": "::RiskLevel",
              "line": 69,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\npub enum RiskLevel {\n    /// Low risk: generated files, build artifacts, temporary files.\n    Low,\n    /// Medium risk: test files, documentation, configuration.\n    Medium,\n    /// High risk: source code, production configuration, data.\n    High,\n    /// Critical risk: security files, keys, critical infrastructure.\n    Critical,\n}",
              "documentation": "Risk levels for delete operations."
            },
            {
              "name": "::DeletePolicy",
              "line": 96,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DeletePolicy {\n\n}",
              "documentation": "Policy that governs whether delete operations are allowed.\n\nThe default is to deny all deletes. More permissive policies can be\nconfigured for specific file patterns (e.g., generated files)."
            },
            {
              "name": "::DeletePolicyMode",
              "line": 109,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum DeletePolicyMode {\n    /// All deletes are denied.\n    DenyAll,\n    /// Deletes require explicit approval.\n    RequireApproval,\n    /// Deletes matching specific patterns are allowed.\n    AllowPattern,\n}",
              "documentation": "The operational mode of the delete policy."
            },
            {
              "name": "::DeletePolicy::deny_all",
              "line": 122,
              "signature": "pub fn deny_all(agent_did: impl Into<String>) -> Self;",
              "documentation": "Creates a deny-all delete policy. This is the default.\n\nNo delete operations will be allowed under this policy."
            },
            {
              "name": "::DeletePolicy::require_approval",
              "line": 135,
              "signature": "pub fn require_approval(agent_did: impl Into<String>) -> Self;",
              "documentation": "Creates a require-approval delete policy.\n\nAll deletes will be blocked with a `RequiresApproval` decision until\nan external approval handler grants permission."
            },
            {
              "name": "::DeletePolicy::with_allowed_patterns",
              "line": 151,
              "signature": "pub fn with_allowed_patterns(agent_did: impl Into<String>, patterns: Vec<String>) -> Self;",
              "documentation": "Creates a delete policy that allows deletes matching specific patterns.\n\n# Arguments\n\n* `agent_did` - The DID of the agent.\n* `patterns` - Suffix or prefix patterns to allow (e.g., \"*.generated.rs\",\n  \"target/\", \".cache/\")."
            },
            {
              "name": "::DeletePolicy::protect_path",
              "line": 161,
              "signature": "pub fn protect_path(mut self, path: impl Into<PathBuf>) -> Self;",
              "documentation": "Adds a path that is always protected from deletion."
            },
            {
              "name": "::DeletePolicy::evaluate",
              "line": 176,
              "signature": "pub fn evaluate(&self, path: &Path) -> DeleteDecision;",
              "documentation": "Evaluates whether a delete operation should be allowed.\n\n# Arguments\n\n* `path` - The file path to evaluate for deletion.\n\n# Returns\n\nA [`DeleteDecision`] indicating whether the delete is denied, requires\napproval, or is allowed."
            },
            {
              "name": "::DeletePolicy::enforce",
              "line": 230,
              "signature": "pub fn enforce(&self, path: &Path) -> CodeSafetyResult<()>;",
              "documentation": "Enforces the delete policy, returning an error if the delete is not allowed.\n\nThis is a convenience method that wraps `evaluate` and converts non-allowed\ndecisions into errors."
            },
            {
              "name": "::DeletePolicy::agent_did",
              "line": 249,
              "signature": "pub fn agent_did(&self) -> &str;",
              "documentation": "Returns the agent DID this policy applies to."
            },
            {
              "name": "::DeletePolicy::mode",
              "line": 254,
              "signature": "pub fn mode(&self) -> &DeletePolicyMode;",
              "documentation": "Returns the policy mode."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-code-safety/src/error.rs",
          "sha256": "9a6d7c0f17f960a2ce9d6d6f5972be6c5e7108ce8048e0c73ca9a45fb962d92e",
          "artifactSha256": "824a848060c9eb9ed323313aedcb85a8705cc9da9f669c432a7920ff10e15a44",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/error.rs.txt",
          "declarations": [
            {
              "name": "::CodeSafetyError",
              "line": 32,
              "signature": "#[derive(Debug, Error)]\npub enum CodeSafetyError {\n    /// The agent attempted to write to a file outside its assigned write scope.\n    ///\n    /// Every coding agent is assigned an explicit write scope (a set of paths\n    /// and glob patterns). Writes to files outside that scope are denied.\n    #[error(\"write denied: agent '{agent_did}' attempted to write '{path}' which is outside assigned scope '{scope}'\")]\n    WriteOutsideScope {\n        /// The path the agent tried to write to.\n        path: PathBuf,\n        /// The assigned write scope that was violated.\n        scope: PathBuf,\n        /// The DID of the agent that attempted the write.\n        agent_did: String,\n    },\n\n    /// The agent attempted to delete a file, which is forbidden by default.\n    ///\n    /// Delete operations require explicit escalation and approval. The default\n    /// policy is deny-all for deletes.\n    #[error(\"delete denied: agent '{agent_did}' attempted to delete '{path}'; delete operations require explicit escalation (set escalation_policy to allow)\")]\n    DeleteDenied {\n        /// The path the agent tried to delete.\n        path: PathBuf,\n        /// The DID of the agent that attempted the delete.\n        agent_did: String,\n    },\n\n    /// The worktree does not exist or is not accessible.\n    #[error(\n        \"worktree '{worktree_path}' not found or not accessible for agent '{agent_did}': {reason}\"\n    )]\n    WorktreeNotFound {\n        /// The worktree path that was expected.\n        worktree_path: PathBuf,\n        /// The DID of the agent that tried to use the worktree.\n        agent_did: String,\n        /// Why the worktree was not found.\n        reason: String,\n    },\n\n    /// The worktree has already been leased to another agent.\n    #[error(\"worktree '{worktree_path}' is already leased to agent '{existing_lessee}'; agent '{requesting_agent}' cannot acquire a concurrent lease\")]\n    WorktreeAlreadyLeased {\n        /// The path of the contested worktree.\n        worktree_path: PathBuf,\n        /// The DID of the agent that currently holds the lease.\n        existing_lessee: String,\n        /// The DID of the agent that tried to acquire the lease.\n        requesting_agent: String,\n    },\n\n    /// The agent does not hold a valid lease for the requested repo.\n    #[error(\"no active lease: agent '{agent_did}' does not hold a lease for repo '{repo_path}'; acquire a lease with RepoLeaseManager::acquire() first\")]\n    NoActiveLease {\n        /// The DID of the agent missing a lease.\n        agent_did: String,\n        /// The repo path that required a lease.\n        repo_path: PathBuf,\n    },\n\n    /// The lease has expired.\n    #[error(\"lease expired: agent '{agent_did}' lease for worktree '{worktree_path}' expired at {expired_at}; renew or release the lease\")]\n    LeaseExpired {\n        /// The DID of the agent whose lease expired.\n        agent_did: String,\n        /// The worktree path with the expired lease.\n        worktree_path: PathBuf,\n        /// When the lease expired (ISO 8601 string).\n        expired_at: String,\n    },\n\n    /// An approval was required but not granted.\n    #[error(\"approval required: operation '{operation}' on '{path}' by agent '{agent_did}' requires approval (risk_level={risk_level})\")]\n    ApprovalRequired {\n        /// The operation that required approval.\n        operation: String,\n        /// The path the operation targets.\n        path: PathBuf,\n        /// The DID of the agent requesting the operation.\n        agent_did: String,\n        /// The risk level of the operation.\n        risk_level: String,\n    },\n\n    /// An approval was explicitly denied.\n    #[error(\"approval denied: operation '{operation}' on '{path}' by agent '{agent_did}' was denied by reviewer '{reviewer}': {reason}\")]\n    ApprovalDenied {\n        /// The operation that was denied.\n        operation: String,\n        /// The path the operation targets.\n        path: PathBuf,\n        /// The DID of the agent whose request was denied.\n        agent_did: String,\n        /// The reviewer who denied the request.\n        reviewer: String,\n        /// Why the approval was denied.\n        reason: String,\n    },\n\n    /// A file operation was attempted on the main/default branch directly.\n    #[error(\"direct main branch modification denied: agent '{agent_did}' attempted to modify '{path}' on branch '{branch}'; all modifications must be made in worktrees\")]\n    MainBranchModification {\n        /// The DID of the agent that attempted the modification.\n        agent_did: String,\n        /// The path that was targeted.\n        path: PathBuf,\n        /// The protected branch name.\n        branch: String,\n    },\n\n    /// The audit log write failed.\n    #[error(\"audit log write failed for operation '{operation}' by agent '{agent_did}': {reason}\")]\n    AuditLogFailed {\n        /// The operation that was being audited.\n        operation: String,\n        /// The DID of the agent.\n        agent_did: String,\n        /// Why the audit log write failed.\n        reason: String,\n    },\n\n    /// I/O error during file operations.\n    #[error(\"file I/O error at '{path}': {reason}\")]\n    IoError {\n        /// The path where the I/O error occurred.\n        path: PathBuf,\n        /// What went wrong.\n        reason: String,\n    },\n\n    /// Git operation failed.\n    #[error(\"git operation failed in '{repo_path}': {reason}\")]\n    GitError {\n        /// The repository where the git operation failed.\n        repo_path: PathBuf,\n        /// What went wrong.\n        reason: String,\n    },\n}",
              "documentation": "Error type for coding runtime safety 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_code_safety::error::CodeSafetyError;\nuse std::path::PathBuf;\n\nlet err = CodeSafetyError::WriteOutsideScope {\n    path: PathBuf::from(\"/repo/src/main.rs\"),\n    scope: PathBuf::from(\"/repo/src/module/\"),\n    agent_did: \"did:oas:agent:abc123\".to_string(),\n};\nlet msg = err.to_string();\nassert!(msg.contains(\"main.rs\"));\nassert!(msg.contains(\"module\"));\n```"
            },
            {
              "name": "::CodeSafetyResult",
              "line": 173,
              "signature": "pub type CodeSafetyResult<T> = Result<T, CodeSafetyError>;",
              "documentation": "A specialized `Result` type for `forge-code-safety` operations."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-code-safety/src/lease.rs",
          "sha256": "5c16969d1f368e8013fb1aa77630d4155f41f53a8b48145143c15b8546b1b5ee",
          "artifactSha256": "3bc6bb9da731b6b3921f1968f6cc3dc0584e392ac61d45ea3457ea93ef5b8762",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/lease.rs.txt",
          "declarations": [
            {
              "name": "::LeaseRequest",
              "line": 58,
              "signature": "#[derive(Debug, Clone)]\npub struct LeaseRequest {\n/// The DID of the agent requesting the lease.\n\npub agent_did: String,\n/// The worktree path to lease.\n\npub worktree_path: PathBuf,\n/// The write scope the agent is granted.\n\npub write_scope: WriteScope,\n/// How long the lease should be valid for.\n\npub duration: Duration\n}",
              "documentation": "A request to acquire a lease on a worktree."
            },
            {
              "name": "::RepoLease",
              "line": 74,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct RepoLease {\n/// Unique identifier for this lease.\n\npub id: String,\n/// The DID of the agent holding this lease.\n\npub agent_did: String,\n/// The worktree path this lease covers.\n\npub worktree_path: PathBuf,\n/// The write scope granted by this lease.\n\npub write_scope: WriteScope,\n/// When the lease was acquired.\n\npub acquired_at: DateTime<Utc>,\n/// When the lease expires.\n\npub expires_at: DateTime<Utc>\n}",
              "documentation": "An active lease granting an agent write access to a worktree.\n\nThe lease carries the write scope and expiration. All file write operations\nmust be validated against the lease before execution."
            },
            {
              "name": "::RepoLease::is_expired",
              "line": 91,
              "signature": "pub fn is_expired(&self) -> bool;",
              "documentation": "Returns true if the lease has expired."
            },
            {
              "name": "::RepoLease::remaining",
              "line": 96,
              "signature": "pub fn remaining(&self) -> Duration;",
              "documentation": "Returns the remaining duration of the lease, or zero if expired."
            },
            {
              "name": "::RepoLeaseManager",
              "line": 119,
              "signature": "pub struct RepoLeaseManager {\n\n}",
              "documentation": "Manages repo leases for coding agents.\n\nThe `RepoLeaseManager` ensures exclusive write access to worktrees by\nmaintaining a registry of active leases. Only one agent may hold a lease\nfor a given worktree at any time.\n\n# Thread Safety\n\nUses `RwLock` for safe concurrent access from multiple agent tasks."
            },
            {
              "name": "::RepoLeaseManager::new",
              "line": 128,
              "signature": "pub fn new() -> Self;",
              "documentation": "Creates a new empty `RepoLeaseManager`."
            },
            {
              "name": "::RepoLeaseManager::acquire",
              "line": 145,
              "signature": "pub async fn acquire(&self, request: LeaseRequest) -> CodeSafetyResult<RepoLease>;",
              "documentation": "Acquires a lease for the given agent on the specified worktree.\n\n# Arguments\n\n* `request` - The lease request specifying the agent, worktree, scope, and duration.\n\n# Errors\n\nReturns [`CodeSafetyError::WorktreeAlreadyLeased`] if another agent\nalready holds an active (non-expired) lease for the worktree."
            },
            {
              "name": "::RepoLeaseManager::release",
              "line": 195,
              "signature": "pub async fn release(&self, lease_id: &str) -> CodeSafetyResult<()>;",
              "documentation": "Releases a lease, allowing another agent to acquire the worktree.\n\n# Arguments\n\n* `lease_id` - The ID of the lease to release.\n\n# Errors\n\nReturns [`CodeSafetyError::NoActiveLease`] if the lease does not exist."
            },
            {
              "name": "::RepoLeaseManager::renew",
              "line": 221,
              "signature": "pub async fn renew(\n        &self,\n        lease_id: &str,\n        additional_duration: Duration,\n    ) -> CodeSafetyResult<RepoLease>;",
              "documentation": "Renews an existing lease with a new duration.\n\n# Arguments\n\n* `lease_id` - The ID of the lease to renew.\n* `additional_duration` - The additional time to add to the lease.\n\n# Errors\n\nReturns [`CodeSafetyError::NoActiveLease`] if the lease does not exist."
            },
            {
              "name": "::RepoLeaseManager::is_active",
              "line": 243,
              "signature": "pub async fn is_active(&self, lease_id: &str) -> bool;",
              "documentation": "Returns true if the given lease ID is active and not expired."
            },
            {
              "name": "::RepoLeaseManager::get_by_agent",
              "line": 252,
              "signature": "pub async fn get_by_agent(&self, agent_did: &str) -> Option<RepoLease>;",
              "documentation": "Gets the lease for a specific agent, if any."
            },
            {
              "name": "::RepoLeaseManager::get_by_path",
              "line": 261,
              "signature": "pub async fn get_by_path(&self, worktree_path: &PathBuf) -> Option<RepoLease>;",
              "documentation": "Gets the lease for a specific worktree path, if any."
            },
            {
              "name": "::RepoLeaseManager::list_active",
              "line": 273,
              "signature": "pub async fn list_active(&self) -> Vec<RepoLease>;",
              "documentation": "Returns all active (non-expired) leases."
            },
            {
              "name": "::RepoLeaseManager::cleanup_expired",
              "line": 285,
              "signature": "pub async fn cleanup_expired(&self) -> usize;",
              "documentation": "Removes all expired leases from the manager.\n\nReturns the number of leases that were cleaned up."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-code-safety/src/lib.rs",
          "sha256": "6b10fe5becb97c8f713ce67b145975614a6922cc0f43b6ca65e9f1eedf1fb27c",
          "artifactSha256": "eea948f0c80f1a4b9865035f8caf5b925f49bc65b52e0f1ca688fa16bf223c92",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/lib.rs.txt",
          "declarations": [
            {
              "name": "approval",
              "line": 106,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod approval;",
              "documentation": ""
            },
            {
              "name": "audit",
              "line": 108,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod audit;",
              "documentation": ""
            },
            {
              "name": "delete_policy",
              "line": 110,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod delete_policy;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 111,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "lease",
              "line": 113,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod lease;",
              "documentation": ""
            },
            {
              "name": "worktree",
              "line": 115,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod worktree;",
              "documentation": ""
            },
            {
              "name": "write_scope",
              "line": 117,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub mod write_scope;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 120,
              "signature": "pub mod prelude;",
              "documentation": "Re-exports of the most commonly used types."
            },
            {
              "name": "pub use crate::approval::{ApprovalGate, ApprovalRequest, ApprovalResponse, AutoDenyGate};",
              "line": 122,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::approval::{ApprovalGate, ApprovalRequest, ApprovalResponse, AutoDenyGate};",
              "documentation": ""
            },
            {
              "name": "pub use crate::audit::{AuditEntry, FileAuditLog, FileOperation, OperationResult};",
              "line": 124,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::audit::{AuditEntry, FileAuditLog, FileOperation, OperationResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::delete_policy::{DeleteDecision, DeletePolicy, DeletePolicyMode, RiskLevel};",
              "line": 126,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::delete_policy::{DeleteDecision, DeletePolicy, DeletePolicyMode, RiskLevel};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::{CodeSafetyError, CodeSafetyResult};",
              "line": 127,
              "signature": "pub use crate::error::{CodeSafetyError, CodeSafetyResult};",
              "documentation": ""
            },
            {
              "name": "pub use crate::lease::{LeaseRequest, RepoLease, RepoLeaseManager};",
              "line": 129,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::lease::{LeaseRequest, RepoLease, RepoLeaseManager};",
              "documentation": ""
            },
            {
              "name": "pub use crate::worktree::{WorktreeGuard, WorktreeInfo, WorktreeManager};",
              "line": 131,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::worktree::{WorktreeGuard, WorktreeInfo, WorktreeManager};",
              "documentation": ""
            },
            {
              "name": "pub use crate::write_scope::WriteScope;",
              "line": 133,
              "signature": "#[cfg(not(target_arch = \"wasm32\"))]\npub use crate::write_scope::WriteScope;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-code-safety/src/worktree.rs",
          "sha256": "d2fb48b09bf630fba3d8977a508dbf16947070c255892ad4e608df6805b618bc",
          "artifactSha256": "db9f445ba483697af82985e446a13c5ba9775e062dc525c641bfa39f56ce07b1",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/worktree.rs.txt",
          "declarations": [
            {
              "name": "::WorktreeInfo",
              "line": 53,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct WorktreeInfo {\n\n}",
              "documentation": "Represents an active git worktree created for an agent.\n\nA `WorktreeInfo` tracks the association between a worktree path, the agent\nthat owns it, and the branch it was created from."
            },
            {
              "name": "::WorktreeInfo::id",
              "line": 70,
              "signature": "pub fn id(&self) -> &str;",
              "documentation": "Returns the unique identifier for this worktree."
            },
            {
              "name": "::WorktreeInfo::path",
              "line": 75,
              "signature": "pub fn path(&self) -> &Path;",
              "documentation": "Returns the filesystem path of the worktree."
            },
            {
              "name": "::WorktreeInfo::branch",
              "line": 80,
              "signature": "pub fn branch(&self) -> &str;",
              "documentation": "Returns the branch name in the worktree."
            },
            {
              "name": "::WorktreeInfo::agent_did",
              "line": 85,
              "signature": "pub fn agent_did(&self) -> &str;",
              "documentation": "Returns the DID of the agent that owns this worktree."
            },
            {
              "name": "::WorktreeInfo::repo_root",
              "line": 90,
              "signature": "pub fn repo_root(&self) -> &Path;",
              "documentation": "Returns the root repository path."
            },
            {
              "name": "::WorktreeInfo::created_at",
              "line": 95,
              "signature": "pub fn created_at(&self) -> DateTime<Utc>;",
              "documentation": "Returns when the worktree was created."
            },
            {
              "name": "::WorktreeManager",
              "line": 109,
              "signature": "pub struct WorktreeManager {\n\n}",
              "documentation": "Manages git worktrees for coding agents.\n\nThe `WorktreeManager` creates isolated worktrees for each agent task,\nensuring that all modifications happen in isolation from the main branch.\n\n# Thread Safety\n\nThe manager uses an internal `RwLock` to safely track worktrees across\nconcurrent agent operations."
            },
            {
              "name": "::WorktreeManager::new",
              "line": 126,
              "signature": "pub fn new(repo_root: &Path) -> Self;",
              "documentation": "Creates a new `WorktreeManager` for the given repository.\n\nWorktrees will be stored under `{repo_root}/.forge-worktrees/`.\n\n# Arguments\n\n* `repo_root` - The root path of the git repository."
            },
            {
              "name": "::WorktreeManager::with_base",
              "line": 141,
              "signature": "pub fn with_base(repo_root: &Path, worktree_base: &Path) -> Self;",
              "documentation": "Creates a new `WorktreeManager` with a custom worktree base directory.\n\n# Arguments\n\n* `repo_root` - The root path of the git repository.\n* `worktree_base` - The directory where worktrees will be stored."
            },
            {
              "name": "::WorktreeManager::create",
              "line": 164,
              "signature": "pub async fn create(\n        &self,\n        agent_did: &str,\n        branch_name: &str,\n    ) -> CodeSafetyResult<WorktreeInfo>;",
              "documentation": "Creates a new worktree for the given agent and branch.\n\nThe worktree is created as a new branch from the current HEAD. The branch\nname will be sanitized to be a valid git branch name.\n\n# Arguments\n\n* `agent_did` - The DID of the agent that will own this worktree.\n* `branch_name` - The desired branch name for the worktree.\n\n# Errors\n\nReturns [`CodeSafetyError::GitError`] if the git worktree creation fails.\nReturns [`CodeSafetyError::MainBranchModification`] if the branch name is\na protected branch."
            },
            {
              "name": "::WorktreeManager::remove",
              "line": 243,
              "signature": "pub async fn remove(&self, worktree: &WorktreeInfo) -> CodeSafetyResult<()>;",
              "documentation": "Removes a worktree and its associated branch.\n\nThe worktree directory is removed from disk and the tracking record is\ndeleted. The git branch is NOT deleted (changes may need review).\n\n# Arguments\n\n* `worktree` - The worktree info to remove.\n\n# Errors\n\nReturns [`CodeSafetyError::GitError`] if the git worktree removal fails."
            },
            {
              "name": "::WorktreeManager::list",
              "line": 273,
              "signature": "pub async fn list(&self) -> Vec<WorktreeInfo>;",
              "documentation": "Lists all active worktrees managed by this manager."
            },
            {
              "name": "::WorktreeManager::find_by_agent",
              "line": 281,
              "signature": "pub async fn find_by_agent(&self, agent_did: &str) -> Option<WorktreeInfo>;",
              "documentation": "Finds a worktree by agent DID.\n\nReturns the first worktree owned by the given agent, if any."
            },
            {
              "name": "::WorktreeManager::worktree_for_path",
              "line": 293,
              "signature": "pub async fn worktree_for_path(&self, path: &Path) -> Option<WorktreeInfo>;",
              "documentation": "Checks if a path is inside any active worktree.\n\nReturns the owning worktree info if the path is within an active worktree,\nor `None` if the path is not inside any worktree."
            },
            {
              "name": "::WorktreeManager::repo_root",
              "line": 302,
              "signature": "pub fn repo_root(&self) -> &Path;",
              "documentation": "Returns the repo root path."
            },
            {
              "name": "::WorktreeGuard",
              "line": 327,
              "signature": "#[derive(Debug, Clone)]\npub struct WorktreeGuard {\n\n}",
              "documentation": "A guard that validates file operations happen within a worktree.\n\nThe `WorktreeGuard` wraps a `WorktreeInfo` and provides methods for\nperforming file operations that are automatically scoped to the worktree.\nIt prevents operations on protected branches.\n\n# Examples\n\n```no_run\nuse forge_code_safety::worktree::{WorktreeGuard, WorktreeInfo};\nuse std::path::Path;\n\n# async fn demo(info: WorktreeInfo) -> Result<(), Box<dyn std::error::Error>> {\nlet guard = WorktreeGuard::new(info);\n// This will verify the path is inside the worktree before allowing the operation.\nguard.validate_path(Path::new(\"/worktree/path/src/lib.rs\"))?;\n# Ok(())\n# }\n```"
            },
            {
              "name": "::WorktreeGuard::new",
              "line": 333,
              "signature": "pub fn new(info: WorktreeInfo) -> Self;",
              "documentation": "Creates a new `WorktreeGuard` for the given worktree."
            },
            {
              "name": "::WorktreeGuard::info",
              "line": 338,
              "signature": "pub fn info(&self) -> &WorktreeInfo;",
              "documentation": "Returns the underlying worktree info."
            },
            {
              "name": "::WorktreeGuard::validate_path",
              "line": 352,
              "signature": "pub fn validate_path(&self, path: &Path) -> CodeSafetyResult<()>;",
              "documentation": "Validates that a path is within this worktree.\n\n# Arguments\n\n* `path` - The path to validate.\n\n# Errors\n\nReturns [`CodeSafetyError::WriteOutsideScope`] if the path is not within\nthe worktree directory."
            },
            {
              "name": "::WorktreeGuard::validate_branch",
              "line": 373,
              "signature": "pub fn validate_branch(&self, branch: &str) -> CodeSafetyResult<()>;",
              "documentation": "Validates that the target branch is not a protected branch.\n\n# Arguments\n\n* `branch` - The branch name to check.\n\n# Errors\n\nReturns [`CodeSafetyError::MainBranchModification`] if the branch is protected."
            },
            {
              "name": "::is_protected_branch",
              "line": 418,
              "signature": "pub fn is_protected_branch(branch: &str) -> bool;",
              "documentation": "Checks whether a branch name is a protected branch.\n\n# Arguments\n\n* `branch` - The branch name to check.\n\n# Returns\n\n`true` if the branch is protected (main, master, develop)."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-code-safety/src/write_scope.rs",
          "sha256": "ffa2123452a0da347aa105913ed97b2e653598c50a294031addcb24ecd5ee220",
          "artifactSha256": "15963d41efab5fd11cdba964ab21ff68685aed33ea081f0f4384b9d2ba265cb7",
          "url": "/reference/source/forge-rs/crates/forge-code-safety/src/write_scope.rs.txt",
          "declarations": [
            {
              "name": "::WriteScope",
              "line": 51,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct WriteScope {\n\n}",
              "documentation": "Defines the set of files an agent is permitted to write to.\n\nA `WriteScope` is assigned when an agent acquires a repo lease or worktree.\nAll file write operations are checked against the scope before execution.\n\n# Security\n\nThis is a fail-closed system. If a path does not match any allowed rule,\nthe write is denied. Denied paths take precedence over allowed paths."
            },
            {
              "name": "::WriteScope::builder",
              "line": 76,
              "signature": "pub fn builder(agent_did: impl Into<String>) -> WriteScopeBuilder;",
              "documentation": "Creates a new [`WriteScopeBuilder`] for the given agent DID.\n\n# Arguments\n\n* `agent_did` - The OAS DID of the agent this scope will be assigned to.\n\n# Returns\n\nA builder for constructing a `WriteScope`."
            },
            {
              "name": "::WriteScope::agent_did",
              "line": 88,
              "signature": "pub fn agent_did(&self) -> &str;",
              "documentation": "Returns the DID of the agent this scope is assigned to."
            },
            {
              "name": "::WriteScope::is_allowed",
              "line": 108,
              "signature": "pub fn is_allowed(&self, path: &Path) -> CodeSafetyResult<()>;",
              "documentation": "Checks whether the given path is within the write scope.\n\n# Arguments\n\n* `path` - The file path to check.\n\n# Returns\n\n`Ok(())` if the path is within scope, or a [`CodeSafetyError::WriteOutsideScope`]\nif it is not.\n\n# Evaluation Order\n\n1. If the path matches any denied path or denied directory, return error.\n2. If the path matches any allowed directory, allowed file, or allowed extension, return Ok.\n3. Otherwise, return error (fail-closed)."
            },
            {
              "name": "::WriteScope::allowed_directories",
              "line": 169,
              "signature": "pub fn allowed_directories(&self) -> &[PathBuf];",
              "documentation": "Returns all allowed directories in this scope."
            },
            {
              "name": "::WriteScope::denied_paths",
              "line": 174,
              "signature": "pub fn denied_paths(&self) -> &[PathBuf];",
              "documentation": "Returns all denied paths in this scope."
            },
            {
              "name": "::WriteScope::has_any_allowed",
              "line": 179,
              "signature": "pub fn has_any_allowed(&self) -> bool;",
              "documentation": "Returns true if this scope has any allowed rules at all."
            },
            {
              "name": "::WriteScopeBuilder",
              "line": 200,
              "signature": "pub struct WriteScopeBuilder {\n\n}",
              "documentation": "Builder for constructing a [`WriteScope`].\n\n# Examples\n\n```\nuse forge_code_safety::write_scope::WriteScope;\n\nlet scope = WriteScope::builder(\"did:oas:agent:impl-1\")\n    .allow_directory(\"/repo/crates/my-crate/src/\")\n    .allow_directory(\"/repo/crates/my-crate/tests/\")\n    .allow_file(\"/repo/crates/my-crate/Cargo.toml\")\n    .deny_directory(\"/repo/crates/my-crate/src/generated/\")\n    .build();\n```"
            },
            {
              "name": "::WriteScopeBuilder::allow_directory",
              "line": 213,
              "signature": "pub fn allow_directory(mut self, path: impl Into<PathBuf>) -> Self;",
              "documentation": "Adds a directory prefix to the allowed write set.\n\nAll files under this directory (recursively) will be writable."
            },
            {
              "name": "::WriteScopeBuilder::allow_file",
              "line": 219,
              "signature": "pub fn allow_file(mut self, path: impl Into<PathBuf>) -> Self;",
              "documentation": "Adds an exact file path to the allowed write set."
            },
            {
              "name": "::WriteScopeBuilder::allow_extension",
              "line": 228,
              "signature": "pub fn allow_extension(mut self, pattern: impl Into<String>) -> Self;",
              "documentation": "Adds a file extension pattern to the allowed write set.\n\nThe pattern should be an extension like \"rs\", \"*.rs\", or \".rs\" \u2014 all\nforms are normalized internally."
            },
            {
              "name": "::WriteScopeBuilder::deny_path",
              "line": 236,
              "signature": "pub fn deny_path(mut self, path: impl Into<PathBuf>) -> Self;",
              "documentation": "Adds an exact file path to the denied set.\n\nDenied paths override allowed rules."
            },
            {
              "name": "::WriteScopeBuilder::deny_directory",
              "line": 245,
              "signature": "pub fn deny_directory(mut self, path: impl Into<PathBuf>) -> Self;",
              "documentation": "Adds a directory prefix to the denied set.\n\nAll files under this directory (recursively) will be denied, even if\nthey match an allowed rule."
            },
            {
              "name": "::WriteScopeBuilder::build",
              "line": 251,
              "signature": "pub fn build(self) -> WriteScope;",
              "documentation": "Builds the [`WriteScope`]."
            }
          ]
        }
      ]
    },
    {
      "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."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-contracts",
      "language": "rust",
      "version": "0.2.0",
      "description": "Formal interface contracts between Forge (agent substrate) and Aut0 (organization platform)",
      "manifest": "forge-rs/crates/forge-contracts/Cargo.toml",
      "manifestSha256": "868abb63d997659c6e741835e2cca5a2b691582da86d3e47f0e0d7f15af0dad0",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-contracts",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-contracts/src/auth.rs",
          "sha256": "98c9b6c97f10338f266df9de07417771d9ba69e3bcd6c52e87e56a4945e34106",
          "artifactSha256": "6fc991e73d0df3031a626b57e43502491f73e951ac6a1fec23218bc91b511375",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/auth.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 55,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-03."
            },
            {
              "name": "::AuthDecision",
              "line": 71,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub enum AuthDecision {\n    /// Authorization was granted.\n    Allowed {\n        /// The specific scope that was matched.\n        scope: String,\n        /// When this authorization expires, if applicable.\n        expires_at: Option<DateTime<Utc>>,\n    },\n    /// Authorization was denied.\n    Denied {\n        /// The scope that was requested.\n        requested_scope: String,\n        /// The reason for denial.\n        reason: String,\n    },\n}",
              "documentation": "The result of an authorization check.\n\n# Examples\n\n```\nuse forge_contracts::auth::AuthDecision;\n\nlet decision = AuthDecision::Allowed {\n    scope: \"tool:web_search\".to_string(),\n    expires_at: None,\n};\nassert!(decision.is_allowed());\n```"
            },
            {
              "name": "::AuthDecision::is_allowed",
              "line": 90,
              "signature": "pub fn is_allowed(&self) -> bool;",
              "documentation": "Returns `true` if authorization was granted."
            },
            {
              "name": "::AuthDecision::is_denied",
              "line": 95,
              "signature": "pub fn is_denied(&self) -> bool;",
              "documentation": "Returns `true` if authorization was denied."
            },
            {
              "name": "::CapabilityNarrowingRequest",
              "line": 123,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CapabilityNarrowingRequest {\n/// The parent agent's DID (must have a valid ACT).\n\npub parent_did: String,\n/// The child agent's DID (will receive the narrowed ACT).\n\npub child_did: String,\n/// The scopes to grant to the child. Must be a subset of parent's scopes.\n\npub requested_scopes: Vec<String>,\n/// Optional time-to-live in seconds for the child's token.\n\n/// If `None`, inherits the parent's expiration.\n\npub ttl_seconds: Option<u64>,\n/// Maximum delegation chain depth. If the parent is already at\n\n/// this depth, delegation fails.\n\npub max_delegation_depth: u32\n}",
              "documentation": "Request to narrow capabilities for a child agent.\n\nThe requested scopes must be a subset of the parent's scopes.\nIf any requested scope exceeds the parent's grant, the entire\nnarrowing operation fails.\n\n# Examples\n\n```\nuse forge_contracts::auth::CapabilityNarrowingRequest;\n\nlet req = CapabilityNarrowingRequest {\n    parent_did: \"did:oas:l1fe:agent:eng-director\".to_string(),\n    child_did: \"did:oas:l1fe:agent:code-reviewer\".to_string(),\n    requested_scopes: vec![\n        \"tool:code_search\".to_string(),\n        \"tool:file_read\".to_string(),\n    ],\n    ttl_seconds: Some(3600),\n    max_delegation_depth: 8,\n};\n```"
            },
            {
              "name": "::DelegationChainEntry",
              "line": 146,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DelegationChainEntry {\n/// The delegator's DID.\n\npub delegator_did: String,\n/// The delegatee's DID.\n\npub delegatee_did: String,\n/// The scopes that were delegated.\n\npub scopes: Vec<String>,\n/// When the delegation was created.\n\npub created_at: DateTime<Utc>,\n/// When the delegation expires.\n\npub expires_at: Option<DateTime<Utc>>,\n/// Depth in the delegation chain (0 = root grant).\n\npub depth: u32\n}",
              "documentation": "A single entry in a delegation chain, showing who delegated what to whom.\n\nUsed for audit trail inspection and governance reviews."
            },
            {
              "name": "::CapabilityTokenHandle",
              "line": 171,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct CapabilityTokenHandle {\n/// Unique identifier for this token.\n\npub token_id: String,\n/// The agent DID this token belongs to.\n\npub agent_did: String,\n/// The scopes granted by this token.\n\npub scopes: Vec<String>,\n/// When this token expires, if applicable.\n\npub expires_at: Option<DateTime<Utc>>,\n/// Depth in the delegation chain.\n\npub delegation_depth: u32\n}",
              "documentation": "An opaque handle to a capability token.\n\nAut0 holds these and passes them to contract methods. The actual\ntoken contents (signatures, claims) are managed by Forge."
            },
            {
              "name": "::AuthContract",
              "line": 210,
              "signature": "#[async_trait]\npub trait AuthContract: Send + Sync {\n    /// Checks whether an agent is authorized for a specific scope.\n    ///\n    /// # Arguments\n    ///\n    /// * `agent_did` - The agent requesting authorization.\n    /// * `scope` - The scope to check (e.g., \"tool:web_search\",\n    ///   \"memory:write:department:engineering\").\n    ///\n    /// # Returns\n    ///\n    /// An `AuthDecision` indicating whether access is granted or denied.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::DidResolutionFailed` if the agent's DID cannot\n    ///   be resolved to find its ACT.\n    async fn check_authorization(\n        &self,\n        agent_did: &str,\n        scope: &str,\n    ) -> ContractResult<AuthDecision>;\n\n    /// Creates a narrowed capability token for a child agent.\n    ///\n    /// # Arguments\n    ///\n    /// * `request` - The narrowing parameters.\n    ///\n    /// # Returns\n    ///\n    /// A handle to the newly created child token.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::CapabilityEscalation` if any requested scope\n    ///   exceeds the parent's grants.\n    /// - `ContractError::TokenExpired` if the parent's token has expired.\n    async fn delegate_capabilities(\n        &self,\n        request: CapabilityNarrowingRequest,\n    ) -> ContractResult<CapabilityTokenHandle>;\n\n    /// Revokes a capability token, immediately invalidating it.\n    ///\n    /// Revocation cascades: revoking a parent token also revokes all\n    /// tokens derived from it.\n    ///\n    /// # Arguments\n    ///\n    /// * `token_id` - The token to revoke.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::AuthorizationDenied` if the caller does not\n    ///   have authority to revoke this token.\n    async fn revoke_token(&self, token_id: &str) -> ContractResult<()>;\n\n    /// Returns the full delegation chain for an agent's current token.\n    ///\n    /// # Arguments\n    ///\n    /// * `agent_did` - The agent whose delegation chain to retrieve.\n    ///\n    /// # Returns\n    ///\n    /// The chain of delegations from root to the agent, ordered by depth.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::DidResolutionFailed` if the agent DID cannot\n    ///   be resolved.\n    async fn get_delegation_chain(\n        &self,\n        agent_did: &str,\n    ) -> ContractResult<Vec<DelegationChainEntry>>;\n\n    /// Lists all scopes currently granted to an agent.\n    ///\n    /// # Arguments\n    ///\n    /// * `agent_did` - The agent to query.\n    ///\n    /// # Returns\n    ///\n    /// The list of scope strings currently active for this agent.\n    async fn list_scopes(&self, agent_did: &str) -> ContractResult<Vec<String>>;\n}",
              "documentation": "The primary contract for authorization and delegation.\n\nForge implements this trait in `forge-auth`. Aut0 consumes it to\nenforce organizational access policies.\n\n# Implementor Notes (Forge)\n\n- `check_authorization` MUST be constant-time with respect to secret data.\n- `delegate_capabilities` MUST verify that requested scopes are a strict\n  subset of the parent's scopes before creating the child token.\n- Expired tokens MUST always return `Denied`.\n- All decisions MUST be deterministic given the same inputs.\n\n# Consumer Notes (Aut0)\n\n- Call `check_authorization` before every privileged operation.\n- Use `delegate_capabilities` when creating sub-agents or assigning\n  tasks to team members.\n- Periodically call `revoke_token` for agents that leave a department\n  or have their role changed.\n- Use `get_delegation_chain` for governance audits."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/brew.rs",
          "sha256": "9ffac728e785247fa8415b577a2d9809b646d2d2d00d78d1e8fcd9157b521680",
          "artifactSha256": "db84410915d747839c79b0b30f53d4f07362c9fe698434c574434855e6923c6c",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/brew.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 41,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-05."
            },
            {
              "name": "::PlanHandle",
              "line": 48,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PlanHandle {\n/// Unique plan identifier.\n\npub plan_id: String,\n/// The Brew graph identifier this plan was frozen from.\n\npub brew_id: String,\n/// Number of nodes in the plan.\n\npub node_count: u32,\n/// Number of edges in the plan.\n\npub edge_count: u32,\n/// Whether this plan is currently executing.\n\npub executing: bool\n}",
              "documentation": "An opaque handle to a frozen, resolved Brew plan.\n\nThe plan has been validated and all symbols resolved. It is ready\nfor execution."
            },
            {
              "name": "::BrewNodeSpec",
              "line": 69,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct BrewNodeSpec {\n/// Unique node identifier within the brew.\n\npub node_id: String,\n/// The type of node.\n\npub node_type: BrewNodeType,\n/// Input mapping: key is parameter name, value is source expression.\n\npub inputs: BTreeMap<String, String>,\n/// Configuration specific to the node type.\n\npub config: serde_json::Value\n}",
              "documentation": "A node specification for building a Brew graph.\n\nAut0 uses these to construct the graph before freezing."
            },
            {
              "name": "::BrewNodeType",
              "line": 85,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum BrewNodeType {\n    /// An agent execution node (runs a tool loop).\n    Agent,\n    /// A tool invocation node (calls a single tool).\n    Tool,\n    /// A provider call node (single LLM inference).\n    Inference,\n    /// A conditional branch node.\n    Condition,\n    /// A data transformation node.\n    Transform,\n    /// A sub-brew reference node.\n    SubBrew,\n}",
              "documentation": "The type of a node in a Brew graph."
            },
            {
              "name": "::BrewEdgeSpec",
              "line": 102,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct BrewEdgeSpec {\n/// Source node ID.\n\npub from_node: String,\n/// Target node ID.\n\npub to_node: String,\n/// The type of edge.\n\npub edge_type: BrewEdgeType,\n/// Optional condition expression for conditional edges.\n\npub condition: Option<String>\n}",
              "documentation": "An edge specification connecting two nodes in a Brew graph."
            },
            {
              "name": "::BrewEdgeType",
              "line": 118,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum BrewEdgeType {\n    /// Data flows from source output to target input.\n    Data,\n    /// Control flow: target executes after source completes.\n    Control,\n    /// Error flow: target executes if source fails.\n    Error,\n}",
              "documentation": "The type of an edge in a Brew graph."
            },
            {
              "name": "::PlanExecutionResult",
              "line": 129,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PlanExecutionResult {\n/// The plan that was executed.\n\npub plan_id: String,\n/// Whether the plan completed successfully.\n\npub success: bool,\n/// Results from each node, keyed by node ID.\n\npub node_results: BTreeMap<String, NodeResult>,\n/// Total execution time in milliseconds.\n\npub duration_ms: u64,\n/// Total tokens consumed across all nodes.\n\npub total_tokens: u64\n}",
              "documentation": "The result of executing a complete plan."
            },
            {
              "name": "::NodeResult",
              "line": 148,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct NodeResult {\n/// The node identifier.\n\npub node_id: String,\n/// Whether this node succeeded.\n\npub success: bool,\n/// The node's output as JSON.\n\npub output: Option<serde_json::Value>,\n/// Error message if the node failed.\n\npub error: Option<String>,\n/// Execution time for this node in milliseconds.\n\npub duration_ms: u64\n}",
              "documentation": "The result of executing a single node."
            },
            {
              "name": "::BrewContract",
              "line": 185,
              "signature": "#[async_trait]\npub trait BrewContract: Send + Sync {\n    /// Creates a new empty Brew graph.\n    ///\n    /// # Arguments\n    ///\n    /// * `brew_id` - Unique identifier for this brew.\n    /// * `description` - Human-readable description of the plan's purpose.\n    ///\n    /// # Returns\n    ///\n    /// A handle to the unfrozen plan.\n    async fn create_plan(&self, brew_id: &str, description: &str) -> ContractResult<PlanHandle>;\n\n    /// Adds a node to an unfrozen plan.\n    ///\n    /// # Arguments\n    ///\n    /// * `plan_id` - The plan to modify.\n    /// * `node` - The node specification.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::PlanResolutionFailed` if the plan is already frozen.\n    async fn add_node(&self, plan_id: &str, node: BrewNodeSpec) -> ContractResult<()>;\n\n    /// Adds an edge to an unfrozen plan.\n    ///\n    /// # Arguments\n    ///\n    /// * `plan_id` - The plan to modify.\n    /// * `edge` - The edge specification.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::PlanResolutionFailed` if the plan is already frozen\n    ///   or if referenced nodes do not exist.\n    async fn add_edge(&self, plan_id: &str, edge: BrewEdgeSpec) -> ContractResult<()>;\n\n    /// Freezes a plan, validating and resolving all symbols.\n    ///\n    /// After freezing, no modifications are allowed. The plan is ready\n    /// for execution.\n    ///\n    /// # Arguments\n    ///\n    /// * `plan_id` - The plan to freeze.\n    ///\n    /// # Returns\n    ///\n    /// The updated plan handle with `executing: false`.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::PlanResolutionFailed` if validation fails.\n    async fn freeze_plan(&self, plan_id: &str) -> ContractResult<PlanHandle>;\n\n    /// Executes a frozen plan.\n    ///\n    /// # Arguments\n    ///\n    /// * `plan_id` - The frozen plan to execute.\n    /// * `inputs` - Input values keyed by parameter name.\n    ///\n    /// # Returns\n    ///\n    /// The execution result with outputs from all nodes.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::PlanExecutionFailed` if execution fails.\n    async fn execute_plan(\n        &self,\n        plan_id: &str,\n        inputs: BTreeMap<String, serde_json::Value>,\n    ) -> ContractResult<PlanExecutionResult>;\n\n    /// Queries the current status of a plan.\n    ///\n    /// # Arguments\n    ///\n    /// * `plan_id` - The plan to query.\n    async fn get_plan_status(&self, plan_id: &str) -> ContractResult<PlanHandle>;\n}",
              "documentation": "The primary contract for Brew plan operations.\n\nForge implements this trait. Aut0 consumes it to build, freeze,\nexecute, and inspect multi-agent execution plans.\n\n# Implementor Notes (Forge)\n\n- `freeze_plan` MUST validate the graph (no cycles in control edges,\n  all referenced nodes exist, all provider refs resolvable).\n- `execute_plan` SHOULD use Flowers for crash-recoverable execution\n  of frozen plans.\n- Node results MUST be collected even if the plan partially fails.\n\n# Consumer Notes (Aut0)\n\n- Build the Brew graph incrementally using `create_plan` + `add_node` +\n  `add_edge`, then call `freeze_plan` to validate and lock.\n- Once frozen, a plan can be executed multiple times with different inputs.\n- Use `get_plan_status` to poll for completion on async executions."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/comm.rs",
          "sha256": "b2ca753341613777994e11f61a31dcf8444039ef1277e999d03da8ef7dd4219b",
          "artifactSha256": "b885b6503c710878669beae78d43e805304c122a9c55201150631e2c94540992",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/comm.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 45,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-06."
            },
            {
              "name": "::ChannelConfig",
              "line": 71,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChannelConfig {\n/// Human-readable channel name.\n\npub channel_name: String,\n/// The type of channel (maps to different session semantics).\n\npub channel_type: ChannelType,\n/// The organization this channel belongs to.\n\npub org_id: String,\n/// Optional department scope.\n\npub department_id: Option<String>,\n/// DIDs of agents allowed in this channel.\n\npub participants: Vec<String>,\n/// Maximum message payload size in bytes.\n\npub max_message_size_bytes: u32,\n/// How long to retain message history, in hours. `None` = forever.\n\npub history_retention_hours: Option<u32>\n}",
              "documentation": "Configuration for creating a communication channel.\n\nAut0 maps its organizational channel concepts (department channels,\nDMs, executive chat) to Forge's session-based communication model.\n\n# Examples\n\n```\nuse forge_contracts::comm::{ChannelConfig, ChannelType};\n\nlet config = ChannelConfig {\n    channel_name: \"eng-general\".to_string(),\n    channel_type: ChannelType::Department,\n    org_id: \"l1fe-ai-inc\".to_string(),\n    department_id: Some(\"engineering\".to_string()),\n    participants: vec![\n        \"did:oas:l1fe:agent:eng-director\".to_string(),\n        \"did:oas:l1fe:agent:code-reviewer\".to_string(),\n    ],\n    max_message_size_bytes: 65536,\n    history_retention_hours: Some(720),\n};\n```"
            },
            {
              "name": "::ChannelType",
              "line": 96,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum ChannelType {\n    /// Organization-wide broadcast channel.\n    OrgWide,\n    /// Department-scoped channel.\n    Department,\n    /// Direct message between two agents.\n    DirectMessage,\n    /// Executive channel (Company Director + root-holder).\n    Executive,\n    /// Root-holder secure channel.\n    RootHolder,\n    /// Custom channel type.\n    Custom(String),\n}",
              "documentation": "The type of organizational channel."
            },
            {
              "name": "::ChannelHandle",
              "line": 113,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ChannelHandle {\n/// Unique channel identifier.\n\npub channel_id: String,\n/// The underlying Forge session identifier.\n\npub session_id: String,\n/// The channel name.\n\npub name: String,\n/// The channel type.\n\npub channel_type: ChannelType,\n/// Number of participants.\n\npub participant_count: u32\n}",
              "documentation": "An opaque handle to an active channel."
            },
            {
              "name": "::SessionConfig",
              "line": 134,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SessionConfig {\n/// Human-readable session name.\n\npub session_name: String,\n/// The coordinator agent's DID.\n\npub coordinator_did: String,\n/// Worker agent DIDs.\n\npub worker_dids: Vec<String>,\n/// Optional timeout for the session in seconds.\n\npub timeout_seconds: Option<u64>,\n/// Whether to enable shared context for this session.\n\npub shared_context_enabled: bool\n}",
              "documentation": "Configuration for a collaboration session.\n\nSessions wrap Forge's `CollaborationSession` with org-level semantics."
            },
            {
              "name": "::ChannelMessage",
              "line": 153,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ChannelMessage {\n/// The sender's DID.\n\npub sender_did: String,\n/// The message content type.\n\npub content_type: MessageContentType,\n/// The message payload as JSON.\n\npub payload: serde_json::Value,\n/// Optional correlation ID for threading.\n\npub correlation_id: Option<String>,\n/// Optional reply-to message ID.\n\npub reply_to: Option<String>\n}",
              "documentation": "A message to send through a channel."
            },
            {
              "name": "::MessageContentType",
              "line": 172,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum MessageContentType {\n    /// Plain text message.\n    Text,\n    /// Structured data message.\n    Structured,\n    /// Task delegation message.\n    TaskDelegation,\n    /// Task result message.\n    TaskResult,\n    /// Interrupt/signal message.\n    Interrupt,\n    /// Status update message.\n    StatusUpdate,\n}",
              "documentation": "Content type for channel messages."
            },
            {
              "name": "::ReceivedMessage",
              "line": 189,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ReceivedMessage {\n/// Unique message identifier.\n\npub message_id: String,\n/// The sender's DID.\n\npub sender_did: String,\n/// The message content type.\n\npub content_type: MessageContentType,\n/// The message payload.\n\npub payload: serde_json::Value,\n/// When the message was sent.\n\npub sent_at: DateTime<Utc>,\n/// Ed25519 signature from the sender (base64-encoded).\n\npub signature: Option<String>,\n/// Correlation ID for threading.\n\npub correlation_id: Option<String>\n}",
              "documentation": "A received message from a channel."
            },
            {
              "name": "::CommContract",
              "line": 231,
              "signature": "#[async_trait]\npub trait CommContract: Send + Sync {\n    /// Creates a new communication channel.\n    ///\n    /// # Arguments\n    ///\n    /// * `config` - The channel configuration.\n    ///\n    /// # Returns\n    ///\n    /// A handle to the created channel.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::ChannelError` if creation fails.\n    /// - `ContractError::DidResolutionFailed` if any participant DID\n    ///   cannot be resolved.\n    async fn create_channel(&self, config: ChannelConfig) -> ContractResult<ChannelHandle>;\n\n    /// Sends a message to a channel.\n    ///\n    /// The message is automatically wrapped in an `AgentMessage` envelope,\n    /// signed by the sender, and delivered to all channel participants.\n    ///\n    /// # Arguments\n    ///\n    /// * `channel_id` - The target channel.\n    /// * `message` - The message to send.\n    ///\n    /// # Returns\n    ///\n    /// The message ID assigned by the transport.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::ChannelError` if the channel does not exist.\n    /// - `ContractError::AuthorizationDenied` if the sender is not a\n    ///   participant.\n    async fn send_message(\n        &self,\n        channel_id: &str,\n        message: ChannelMessage,\n    ) -> ContractResult<String>;\n\n    /// Receives the next message from a channel.\n    ///\n    /// This is a pull-based interface. For push-based delivery, use\n    /// `subscribe`.\n    ///\n    /// # Arguments\n    ///\n    /// * `channel_id` - The channel to receive from.\n    /// * `agent_did` - The receiving agent's DID.\n    ///\n    /// # Returns\n    ///\n    /// The next unread message, or `None` if no messages are pending.\n    async fn receive_message(\n        &self,\n        channel_id: &str,\n        agent_did: &str,\n    ) -> ContractResult<Option<ReceivedMessage>>;\n\n    /// Closes a channel, cleaning up resources.\n    ///\n    /// # Arguments\n    ///\n    /// * `channel_id` - The channel to close.\n    async fn close_channel(&self, channel_id: &str) -> ContractResult<()>;\n\n    /// Lists all channels for an organization.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization to query.\n    /// * `department_id` - Optional department filter.\n    async fn list_channels(\n        &self,\n        org_id: &str,\n        department_id: Option<&str>,\n    ) -> ContractResult<Vec<ChannelHandle>>;\n}",
              "documentation": "The primary contract for communication and collaboration.\n\nForge implements this trait in `forge-comm` and `forge-collab`. Aut0\nconsumes it to build organizational channels and collaboration sessions.\n\n# Implementor Notes (Forge)\n\n- `create_channel` MUST create an underlying Forge session with the\n  appropriate transport (channel, network, etc.).\n- Messages MUST be signed by the sender's Ed25519 key if the sender\n  has an identity.\n- `subscribe` MUST deliver messages in order within a channel.\n\n# Consumer Notes (Aut0)\n\n- Map organizational channel concepts to `ChannelConfig` entries.\n- Use `subscribe` for real-time message delivery to channel UIs.\n- Store `ChannelHandle` for channel lifetime management."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/error.rs",
          "sha256": "c1307a34bfd4e038c912a6bc4d7675b50595b2545f46ef4a243ba80c4f49b60e",
          "artifactSha256": "27cfd7aa75a589d9a84e40f585d47e4859da7490bc425a0d3a082e0fd46c892f",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/error.rs.txt",
          "declarations": [
            {
              "name": "::ContractError",
              "line": 25,
              "signature": "#[derive(Debug, Error)]\npub enum ContractError {\n    // -----------------------------------------------------------------------\n    // S-01: Agent Runtime\n    // -----------------------------------------------------------------------\n    /// The requested agent does not exist or has been terminated.\n    #[error(\"agent '{agent_id}' not found in runtime\")]\n    AgentNotFound {\n        /// The agent identifier that was not found.\n        agent_id: String,\n    },\n\n    /// Agent creation failed due to invalid configuration.\n    #[error(\"agent creation failed: {reason}\")]\n    AgentCreationFailed {\n        /// Human-readable explanation of why creation failed.\n        reason: String,\n    },\n\n    /// An invalid lifecycle transition was attempted.\n    #[error(\"invalid lifecycle transition from {from} to {to} for agent '{agent_id}'\")]\n    InvalidLifecycleTransition {\n        /// The agent that owns the lifecycle.\n        agent_id: String,\n        /// The current state name.\n        from: String,\n        /// The requested target state name.\n        to: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-02: Identity & Lineage\n    // -----------------------------------------------------------------------\n    /// Identity derivation failed.\n    #[error(\"identity derivation failed for path '{path}' from parent '{parent_did}': {reason}\")]\n    IdentityDerivationFailed {\n        /// The parent DID from which derivation was attempted.\n        parent_did: String,\n        /// The derivation path that failed.\n        path: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    /// Lineage verification failed at the specified depth.\n    #[error(\"lineage verification failed at depth {depth} for '{did}': {reason}\")]\n    LineageVerificationFailed {\n        /// The DID whose lineage failed verification.\n        did: String,\n        /// The depth at which verification failed.\n        depth: u32,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    /// DID resolution failed.\n    #[error(\"DID resolution failed for '{did}': {reason}\")]\n    DidResolutionFailed {\n        /// The DID that could not be resolved.\n        did: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-03: Auth & Delegation\n    // -----------------------------------------------------------------------\n    /// Capability escalation denied: child requested more than parent has.\n    #[error(\"capability escalation denied: agent '{agent_did}' requested scope '{requested}' but parent ACT only grants {available:?}\")]\n    CapabilityEscalation {\n        /// The agent DID that attempted escalation.\n        agent_did: String,\n        /// The scope that was requested.\n        requested: String,\n        /// The scopes available to the parent.\n        available: Vec<String>,\n    },\n\n    /// A capability token has expired.\n    #[error(\"capability token '{token_id}' for agent '{agent_did}' expired at {expired_at}\")]\n    TokenExpired {\n        /// The token identifier.\n        token_id: String,\n        /// The agent DID that owns the token.\n        agent_did: String,\n        /// ISO 8601 timestamp when the token expired.\n        expired_at: String,\n    },\n\n    /// Authorization check failed.\n    #[error(\"authorization denied for agent '{agent_did}' on scope '{scope}': {reason}\")]\n    AuthorizationDenied {\n        /// The agent DID that was denied.\n        agent_did: String,\n        /// The scope that was requested.\n        scope: String,\n        /// Explanation of why authorization was denied.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-04: Provider Routing\n    // -----------------------------------------------------------------------\n    /// No provider matched the routing policy.\n    #[error(\"no provider matched routing policy for org '{org_id}': {reason}\")]\n    NoProviderAvailable {\n        /// The organization identifier.\n        org_id: String,\n        /// Explanation of why no provider matched.\n        reason: String,\n    },\n\n    /// Provider session creation or management failed.\n    #[error(\"provider session error for '{provider_ref}': {reason}\")]\n    ProviderSessionError {\n        /// The provider reference string.\n        provider_ref: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-05: Brew Plans\n    // -----------------------------------------------------------------------\n    /// Plan resolution failed (unresolved symbols, cycles, etc.).\n    #[error(\"brew plan '{plan_id}' resolution failed: {reason}\")]\n    PlanResolutionFailed {\n        /// The plan identifier.\n        plan_id: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    /// Plan execution failed at a specific node.\n    #[error(\"brew plan '{plan_id}' failed at node '{node_id}': {reason}\")]\n    PlanExecutionFailed {\n        /// The plan identifier.\n        plan_id: String,\n        /// The node that failed.\n        node_id: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-06: Comm/Collab\n    // -----------------------------------------------------------------------\n    /// Channel creation or operation failed.\n    #[error(\"channel '{channel_id}' error: {reason}\")]\n    ChannelError {\n        /// The channel identifier.\n        channel_id: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-07: MCP\n    // -----------------------------------------------------------------------\n    /// MCP server connection or operation failed.\n    #[error(\"MCP server '{server_name}' error: {reason}\")]\n    McpError {\n        /// The MCP server name.\n        server_name: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-08: Telemetry & Health\n    // -----------------------------------------------------------------------\n    /// Telemetry collection or aggregation failed.\n    #[error(\"telemetry error: {reason}\")]\n    TelemetryError {\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-09: Flowers Bridge\n    // -----------------------------------------------------------------------\n    /// Durable execution checkpoint or resume failed.\n    #[error(\"flowers execution '{execution_id}' error: {reason}\")]\n    FlowersError {\n        /// The Flowers execution identifier.\n        execution_id: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // S-10: Memory\n    // -----------------------------------------------------------------------\n    /// Memory read or write operation failed.\n    #[error(\"memory error in scope '{scope}': {reason}\")]\n    MemoryError {\n        /// The memory scope where the error occurred.\n        scope: String,\n        /// Explanation of the failure.\n        reason: String,\n    },\n\n    /// Memory access denied by policy.\n    #[error(\"memory access denied for agent '{agent_did}' in scope '{scope}': {reason}\")]\n    MemoryAccessDenied {\n        /// The agent DID that was denied.\n        agent_did: String,\n        /// The memory scope.\n        scope: String,\n        /// Explanation of the denial.\n        reason: String,\n    },\n\n    // -----------------------------------------------------------------------\n    // Cross-cutting\n    // -----------------------------------------------------------------------\n    /// Contract version mismatch between Forge and Aut0.\n    #[error(\"contract version mismatch: Forge has {forge_version}, Aut0 expects {aut0_version}\")]\n    VersionMismatch {\n        /// The version Forge compiled against.\n        forge_version: String,\n        /// The version Aut0 compiled against.\n        aut0_version: String,\n    },\n\n    /// A required configuration field was missing or invalid.\n    #[error(\"configuration error: {reason}\")]\n    ConfigurationError {\n        /// Explanation of the configuration problem.\n        reason: String,\n    },\n\n    /// An internal Forge error that Aut0 should not need to handle in detail.\n    #[error(\"internal error: {reason}\")]\n    Internal {\n        /// Explanation for diagnostic purposes.\n        reason: String,\n    },\n}",
              "documentation": "The unified error type for all contract operations.\n\nEach variant includes enough context for Aut0 to take corrective action\nwithout inspecting Forge internals.\n\n# Examples\n\n```\nuse forge_contracts::error::ContractError;\n\nlet err = ContractError::AgentNotFound {\n    agent_id: \"agent-42\".to_string(),\n};\nassert!(err.to_string().contains(\"agent-42\"));\n```"
            },
            {
              "name": "::ContractResult",
              "line": 265,
              "signature": "pub type ContractResult<T> = Result<T, ContractError>;",
              "documentation": "Convenience type alias for contract results."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/flowers.rs",
          "sha256": "e5196f463a87e82ce1b45d7a258dc27a41432995c8c11432ab7f1a4694d7c004",
          "artifactSha256": "c20b8ce302389748370f0e021098659d83fda175611488ac975a6270a1806f4e",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/flowers.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 60,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-09."
            },
            {
              "name": "::FlowersExecutionHandle",
              "line": 64,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct FlowersExecutionHandle {\n/// Unique execution identifier.\n\npub execution_id: String,\n/// The workflow definition this execution instantiates.\n\npub workflow_id: String,\n/// Current execution state.\n\npub state: FlowersExecutionState,\n/// When the execution was created.\n\npub created_at: DateTime<Utc>,\n/// When the execution last changed state.\n\npub updated_at: DateTime<Utc>\n}",
              "documentation": "An opaque handle to a Flowers durable execution."
            },
            {
              "name": "::FlowersExecutionState",
              "line": 83,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum FlowersExecutionState {\n    /// Execution is queued but not yet started.\n    Queued,\n    /// Execution is actively running.\n    Running,\n    /// Execution is paused (awaiting signal or timer).\n    Suspended,\n    /// Execution completed successfully.\n    Completed,\n    /// Execution failed with an error.\n    Failed,\n    /// Execution was cancelled.\n    Cancelled,\n    /// Execution is being compensated (saga rollback).\n    Compensating,\n}",
              "documentation": "State of a Flowers execution (maps to Flowers' 7-state model)."
            },
            {
              "name": "::FlowersJournalEntry",
              "line": 105,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FlowersJournalEntry {\n/// Sequential event index within the execution.\n\npub index: u64,\n/// The event type.\n\npub event_type: JournalEntryType,\n/// The operation name (e.g., \"agent.invoke\", \"tool.execute\").\n\npub operation: String,\n/// Input data for this operation (JSON-serialized).\n\npub input: serde_json::Value,\n/// Output data from this operation (JSON-serialized), if completed.\n\npub output: Option<serde_json::Value>,\n/// When this event was recorded.\n\npub timestamp: DateTime<Utc>,\n/// Hash for integrity verification.\n\npub hash: String\n}",
              "documentation": "A journal event from a Flowers execution.\n\nJournal events are the immutable record of all side effects during\ndurable execution. They enable crash recovery and deterministic replay."
            },
            {
              "name": "::JournalEntryType",
              "line": 130,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum JournalEntryType {\n    /// A provider (LLM) call.\n    ProviderCall,\n    /// A tool execution.\n    ToolExecution,\n    /// A timer event.\n    Timer,\n    /// A signal received.\n    Signal,\n    /// A checkpoint created.\n    Checkpoint,\n    /// A compensation (rollback) action.\n    Compensation,\n    /// An arbitrary side effect.\n    SideEffect,\n}",
              "documentation": "The type of journal entry."
            },
            {
              "name": "::CheckpointData",
              "line": 149,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CheckpointData {\n/// Unique checkpoint identifier.\n\npub checkpoint_id: String,\n/// The execution this checkpoint belongs to.\n\npub execution_id: String,\n/// The journal index at which this checkpoint was taken.\n\npub journal_index: u64,\n/// Serialized execution state.\n\npub state: serde_json::Value,\n/// When the checkpoint was created.\n\npub created_at: DateTime<Utc>\n}",
              "documentation": "Data for a checkpoint (snapshot of execution state)."
            },
            {
              "name": "::FlowersSignal",
              "line": 168,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FlowersSignal {\n/// Signal name.\n\npub name: String,\n/// Signal payload.\n\npub payload: serde_json::Value\n}",
              "documentation": "A signal to deliver to a Flowers execution."
            },
            {
              "name": "::FlowersSubmitRequest",
              "line": 178,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct FlowersSubmitRequest {\n/// The agent to run (referenced by handle from S-01).\n\npub agent_id: String,\n/// The input to pass to the agent.\n\npub input: String,\n/// Optional workflow ID override (for resume scenarios).\n\npub workflow_id: Option<String>,\n/// Optional checkpoint to resume from.\n\npub resume_from_checkpoint: Option<String>,\n/// Maximum execution time in seconds.\n\npub timeout_seconds: Option<u64>,\n/// Organization context.\n\npub org_id: Option<String>,\n/// Department context.\n\npub department_id: Option<String>\n}",
              "documentation": "Request to submit an agent as a durable workflow."
            },
            {
              "name": "::FlowersBridgeContract",
              "line": 224,
              "signature": "#[async_trait]\npub trait FlowersBridgeContract: Send + Sync {\n    /// Submits an agent for durable execution.\n    ///\n    /// The agent's LLM and tool calls will be journaled for crash\n    /// recovery. On process restart, the execution resumes from the\n    /// last committed journal entry.\n    ///\n    /// # Arguments\n    ///\n    /// * `request` - The submission parameters.\n    ///\n    /// # Returns\n    ///\n    /// A handle to the created execution.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::FlowersError` if submission fails.\n    /// - `ContractError::AgentNotFound` if the agent_id is invalid.\n    async fn submit_agent(\n        &self,\n        request: FlowersSubmitRequest,\n    ) -> ContractResult<FlowersExecutionHandle>;\n\n    /// Sends a signal to a running or suspended execution.\n    ///\n    /// # Arguments\n    ///\n    /// * `execution_id` - The target execution.\n    /// * `signal` - The signal to deliver.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::FlowersError` if the execution does not exist\n    ///   or cannot receive signals.\n    async fn send_signal(&self, execution_id: &str, signal: FlowersSignal) -> ContractResult<()>;\n\n    /// Cancels a running or suspended execution.\n    ///\n    /// Cancellation triggers compensation if a `CompensationStack` is\n    /// registered for the execution.\n    ///\n    /// # Arguments\n    ///\n    /// * `execution_id` - The execution to cancel.\n    /// * `reason` - Optional cancellation reason.\n    async fn cancel_execution(\n        &self,\n        execution_id: &str,\n        reason: Option<&str>,\n    ) -> ContractResult<()>;\n\n    /// Returns the journal entries for an execution.\n    ///\n    /// # Arguments\n    ///\n    /// * `execution_id` - The execution to query.\n    /// * `from_index` - Start reading from this index.\n    /// * `limit` - Maximum entries to return.\n    ///\n    /// # Returns\n    ///\n    /// Journal entries in sequential order.\n    async fn get_journal(\n        &self,\n        execution_id: &str,\n        from_index: u64,\n        limit: u32,\n    ) -> ContractResult<Vec<FlowersJournalEntry>>;\n\n    /// Creates a checkpoint of the current execution state.\n    ///\n    /// # Arguments\n    ///\n    /// * `execution_id` - The execution to checkpoint.\n    ///\n    /// # Returns\n    ///\n    /// The checkpoint data.\n    async fn create_checkpoint(&self, execution_id: &str) -> ContractResult<CheckpointData>;\n\n    /// Returns the current status of an execution.\n    ///\n    /// # Arguments\n    ///\n    /// * `execution_id` - The execution to query.\n    async fn get_execution_status(\n        &self,\n        execution_id: &str,\n    ) -> ContractResult<FlowersExecutionHandle>;\n\n    /// Lists all executions for an organization.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization to query.\n    /// * `state_filter` - Optional state filter.\n    /// * `limit` - Maximum results.\n    async fn list_executions(\n        &self,\n        org_id: &str,\n        state_filter: Option<FlowersExecutionState>,\n        limit: u32,\n    ) -> ContractResult<Vec<FlowersExecutionHandle>>;\n}",
              "documentation": "The primary contract for the Flowers durable execution bridge.\n\nForge implements this trait in `forge-flowers`. Aut0 consumes it to\nrun agents as crash-recoverable workflows.\n\n# Implementor Notes (Forge)\n\n- `submit_agent` MUST wrap the agent's provider calls and tool\n  executions in journal entries via `JournaledProvider` and\n  `JournaledToolExecutor`.\n- Journal events MUST be hash-chained for integrity verification.\n- Replay MUST be deterministic given the same journal.\n- Checkpoint data MUST be sufficient to resume execution.\n\n# Consumer Notes (Aut0)\n\n- Use `submit_agent` for any long-running or critical agent execution.\n- Use `send_signal` for external event delivery (human approval,\n  timer expiration, cancellation).\n- Use `get_journal` for the Flowers Console execution inspector.\n- Use `create_checkpoint` + `submit_agent` with `resume_from_checkpoint`\n  for manual recovery."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/identity.rs",
          "sha256": "58c5e34cd14b4451e3a60dead538762779e9dcee7117e3802069b64877fe620f",
          "artifactSha256": "c77d7c192e507feaf01f955bbcd58ad3fc2453abdd883da10571524c6eceefcf",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/identity.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 56,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-02."
            },
            {
              "name": "::IdentityHandle",
              "line": 78,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct IdentityHandle {\n/// The OAS DID string (e.g., \"did:oas:l1fe:agent:code-reviewer\").\n\npub did: String,\n/// Depth in the lineage chain (0 = HMR root, 1 = direct child, etc.).\n\npub lineage_depth: u32,\n/// The OAS namespace (e.g., \"l1fe\").\n\npub namespace: String,\n/// The entity name within the DID (e.g., \"code-reviewer\").\n\npub entity_name: String\n}",
              "documentation": "An opaque handle to an agent's identity within the Forge runtime.\n\nAut0 holds `IdentityHandle` values and passes them to contract methods.\nThe handle exposes the agent's DID and lineage depth but not the private\nkey material.\n\n# Examples\n\n```\nuse forge_contracts::identity::IdentityHandle;\n\nlet handle = IdentityHandle {\n    did: \"did:oas:l1fe:agent:code-reviewer\".to_string(),\n    lineage_depth: 3,\n    namespace: \"l1fe\".to_string(),\n    entity_name: \"code-reviewer\".to_string(),\n};\nassert_eq!(handle.did, \"did:oas:l1fe:agent:code-reviewer\");\n```"
            },
            {
              "name": "::DerivedIdentityRequest",
              "line": 111,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DerivedIdentityRequest {\n/// The parent agent's DID from which to derive.\n\npub parent_did: String,\n/// The name for the child agent identity.\n\npub child_name: String,\n/// The OAS namespace for the child DID.\n\npub namespace: String,\n/// Optional org ID for organizational context.\n\npub org_id: Option<String>,\n/// Optional department ID for organizational context.\n\npub department_id: Option<String>,\n/// Maximum allowed lineage depth. Derivation fails if this would\n\n/// be exceeded. Default: 16.\n\npub max_lineage_depth: u32\n}",
              "documentation": "Request to derive a new agent identity from an existing parent.\n\nAut0 uses this to create identity hierarchies that mirror org structure.\n\n# Examples\n\n```\nuse forge_contracts::identity::DerivedIdentityRequest;\n\nlet req = DerivedIdentityRequest {\n    parent_did: \"did:oas:l1fe:agent:eng-director\".to_string(),\n    child_name: \"code-reviewer\".to_string(),\n    namespace: \"l1fe\".to_string(),\n    org_id: Some(\"l1fe-ai-inc\".to_string()),\n    department_id: Some(\"engineering\".to_string()),\n    max_lineage_depth: 16,\n};\n```"
            },
            {
              "name": "::LineageInfo",
              "line": 137,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct LineageInfo {\n/// The DID of the identity being verified.\n\npub did: String,\n/// Depth in the lineage chain (0 = root).\n\npub depth: u32,\n/// The root DID at the top of the chain (usually an HMR/MHR).\n\npub root_did: String,\n/// Whether the full chain from root to this identity verifies.\n\npub chain_valid: bool,\n/// Each hop in the chain from root to this identity.\n\npub chain: Vec<LineageHop>\n}",
              "documentation": "Information about an identity's lineage chain.\n\nReturned by `verify_lineage` to give Aut0 visibility into the\ncryptographic proof chain without exposing key material."
            },
            {
              "name": "::LineageHop",
              "line": 156,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct LineageHop {\n/// The parent DID at this hop.\n\npub parent_did: String,\n/// The child DID derived at this hop.\n\npub child_did: String,\n/// The derivation path used.\n\npub derivation_path: String,\n/// Whether this individual hop's signature verifies.\n\npub signature_valid: bool\n}",
              "documentation": "A single hop in a lineage chain."
            },
            {
              "name": "::IdentityContract",
              "line": 189,
              "signature": "#[async_trait]\npub trait IdentityContract: Send + Sync {\n    /// Creates a new root identity (HMR) for an organization.\n    ///\n    /// This is called once per organization founding. The HMR is the\n    /// cryptographic root from which all agent identities are derived.\n    ///\n    /// # Arguments\n    ///\n    /// * `namespace` - The OAS namespace (e.g., \"l1fe\").\n    /// * `root_name` - The root identity name (e.g., \"root-holder\").\n    ///\n    /// # Returns\n    ///\n    /// A handle to the created root identity.\n    async fn create_root_identity(\n        &self,\n        namespace: &str,\n        root_name: &str,\n    ) -> ContractResult<IdentityHandle>;\n\n    /// Derives a child identity from an existing parent.\n    ///\n    /// The child's Ed25519 keypair is deterministically derived via\n    /// HKDF-SHA256 from the parent's keypair and the derivation path.\n    ///\n    /// # Arguments\n    ///\n    /// * `request` - The derivation parameters.\n    ///\n    /// # Returns\n    ///\n    /// A handle to the derived child identity.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::IdentityDerivationFailed` if derivation fails.\n    /// - `ContractError::IdentityDerivationFailed` if max lineage depth\n    ///   would be exceeded.\n    async fn derive_identity(\n        &self,\n        request: DerivedIdentityRequest,\n    ) -> ContractResult<IdentityHandle>;\n\n    /// Verifies the lineage chain of an identity.\n    ///\n    /// Walks the chain from the given DID back to its root and verifies\n    /// every hop's cryptographic proof.\n    ///\n    /// # Arguments\n    ///\n    /// * `did` - The DID to verify.\n    ///\n    /// # Returns\n    ///\n    /// Lineage information including chain validity.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::DidResolutionFailed` if the DID cannot be resolved.\n    /// - `ContractError::LineageVerificationFailed` if any hop fails.\n    async fn verify_lineage(&self, did: &str) -> ContractResult<LineageInfo>;\n\n    /// Resolves a DID to its public identity information.\n    ///\n    /// For local identities, this is immediate. For remote identities,\n    /// this may involve network resolution.\n    ///\n    /// # Arguments\n    ///\n    /// * `did` - The DID string to resolve.\n    ///\n    /// # Returns\n    ///\n    /// The identity handle with public information.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::DidResolutionFailed` if resolution fails.\n    async fn resolve_did(&self, did: &str) -> ContractResult<IdentityHandle>;\n\n    /// Signs arbitrary data with the specified identity's private key.\n    ///\n    /// # Arguments\n    ///\n    /// * `did` - The DID of the signing identity.\n    /// * `data` - The data to sign.\n    ///\n    /// # Returns\n    ///\n    /// The Ed25519 signature bytes.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::DidResolutionFailed` if the DID is not local.\n    async fn sign(&self, did: &str, data: &[u8]) -> ContractResult<Vec<u8>>;\n\n    /// Verifies a signature against a DID's public key.\n    ///\n    /// # Arguments\n    ///\n    /// * `did` - The DID of the alleged signer.\n    /// * `data` - The data that was signed.\n    /// * `signature` - The signature to verify.\n    ///\n    /// # Returns\n    ///\n    /// `true` if the signature is valid.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::DidResolutionFailed` if the DID cannot be resolved.\n    async fn verify(&self, did: &str, data: &[u8], signature: &[u8]) -> ContractResult<bool>;\n}",
              "documentation": "The primary contract for identity and lineage operations.\n\nForge implements this trait in `forge-identity`. Aut0 consumes it to\nbuild organizational identity hierarchies.\n\n# Implementor Notes (Forge)\n\n- All derivation MUST use HKDF-SHA256 with Ed25519 keys.\n- Private key material MUST never appear in any return type.\n- Lineage verification MUST be possible without network access.\n- The `sign` method MUST use the identity's Ed25519 private key.\n\n# Consumer Notes (Aut0)\n\n- Cache `IdentityHandle` values; they are lightweight.\n- Use `verify_lineage` before trusting an identity from outside\n  the local runtime (e.g., from a remote agent).\n- The `resolve_did` method may perform network I/O for remote DIDs."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/lib.rs",
          "sha256": "f2277b6f71636b7d41f4997ba32c39181493c2faa106c759c270ae76b1e62385",
          "artifactSha256": "762ca33ca91d0b3d047aa5abcfaafe761d63ca500f6b279e5b4b6d6517341dc7",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/lib.rs.txt",
          "declarations": [
            {
              "name": "auth",
              "line": 69,
              "signature": "pub mod auth;",
              "documentation": "# forge-contracts\n\nFormal interface contracts between Forge (agent substrate) and Aut0\n(autonomous organization platform).\n\nThis crate defines the ten shared contracts (S-01 through S-10) from the\nAut0 + Forge Master Engineering Plan. Each contract is a Rust trait plus\nsupporting types that establish the **exact interface boundary** between\nForge and Aut0.\n\n# Design Principles\n\n1. **Forge owns the implementation.** Every contract trait is implemented\n   by a Forge crate. Aut0 consumes these implementations but never\n   reimplements the underlying logic.\n\n2. **Aut0 owns the policy.** Contracts accept policy parameters (org\n   scopes, department constraints, routing rules) that Aut0 provides at\n   the organization level.\n\n3. **No circular dependencies.** This crate depends only on `forge-core`,\n   `forge-health`, `oas-did`, and `arsenal-core` for shared types. It\n   does NOT depend on `forge-agent`, `forge-identity`, `forge-auth`, or\n   any Aut0 crate.\n\n4. **Version compatibility.** Every contract carries a `CONTRACT_VERSION`\n   constant. Breaking changes require a major version bump. Aut0 and Forge\n   must agree on the contract version at startup.\n\n# Contract Index\n\n| Contract | Module | Priority | Phase |\n|----------|--------|----------|-------|\n| S-01 Agent Runtime | [`runtime`] | P1 Critical | 1 |\n| S-02 Identity & Lineage | [`identity`] | P1 Critical | 1 |\n| S-03 Auth & Delegation | [`auth`] | P1 Critical | 1 |\n| S-04 Provider Routing | [`provider`] | P1 High | 2 |\n| S-05 Brew Plans | [`brew`] | P2 High | 3 |\n| S-06 Comm/Collab Envelopes | [`comm`] | P2 High | 3 |\n| S-07 MCP Integration | [`mcp`] | P2 High | 3 |\n| S-08 Telemetry & Health | [`telemetry`] | P2 High | 3 |\n| S-09 Flowers Runtime Bridge | [`flowers`] | P1 High | 2 |\n| S-10 Memory Integration | [`memory`] | P2 High | 2 |\n\n# Usage\n\n```\nuse forge_contracts::runtime::{AgentRuntimeContract, AgentHandle};\nuse forge_contracts::identity::IdentityContract;\nuse forge_contracts::auth::AuthContract;\n```\n\n# Version Compatibility\n\nAll contracts in this crate share a single version. The version follows\nsemantic versioning:\n\n- **Patch**: Documentation, error message improvements, new optional fields\n  with defaults.\n- **Minor**: New methods with default implementations, new non-breaking\n  types.\n- **Major**: Changed method signatures, removed methods, changed semantics.\n\nBoth Forge and Aut0 must compile against the same major version of\n`forge-contracts`. The [`CONTRACTS_VERSION`] constant is checked at\nruntime initialization."
            },
            {
              "name": "brew",
              "line": 70,
              "signature": "pub mod brew;",
              "documentation": ""
            },
            {
              "name": "comm",
              "line": 71,
              "signature": "pub mod comm;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 72,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "flowers",
              "line": 73,
              "signature": "pub mod flowers;",
              "documentation": ""
            },
            {
              "name": "identity",
              "line": 74,
              "signature": "pub mod identity;",
              "documentation": ""
            },
            {
              "name": "mcp",
              "line": 75,
              "signature": "pub mod mcp;",
              "documentation": ""
            },
            {
              "name": "memory",
              "line": 76,
              "signature": "pub mod memory;",
              "documentation": ""
            },
            {
              "name": "provider",
              "line": 77,
              "signature": "pub mod provider;",
              "documentation": ""
            },
            {
              "name": "runtime",
              "line": 78,
              "signature": "pub mod runtime;",
              "documentation": ""
            },
            {
              "name": "telemetry",
              "line": 79,
              "signature": "pub mod telemetry;",
              "documentation": ""
            },
            {
              "name": "::CONTRACTS_VERSION",
              "line": 85,
              "signature": "pub const CONTRACTS_VERSION: &str;",
              "documentation": "The semantic version of all contracts in this crate.\n\nBoth Forge and Aut0 must agree on the major version at initialization.\nA mismatch in major version is a fatal startup error."
            },
            {
              "name": "::contracts_major_version",
              "line": 95,
              "signature": "pub fn contracts_major_version() -> u32;",
              "documentation": "Returns the major version number for compatibility checking.\n\n# Examples\n\n```\nlet major = forge_contracts::contracts_major_version();\nassert_eq!(major, 0);\n```"
            },
            {
              "name": "prelude",
              "line": 109,
              "signature": "pub mod prelude;",
              "documentation": "Prelude module for convenient imports.\n\n```\nuse forge_contracts::prelude::*;\n```"
            },
            {
              "name": "pub use crate::auth::{\n        AuthContract, AuthDecision, CapabilityNarrowingRequest, DelegationChainEntry,\n    };",
              "line": 110,
              "signature": "pub use crate::auth::{\n        AuthContract, AuthDecision, CapabilityNarrowingRequest, DelegationChainEntry,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::brew::{BrewContract, PlanExecutionResult, PlanHandle};",
              "line": 113,
              "signature": "pub use crate::brew::{BrewContract, PlanExecutionResult, PlanHandle};",
              "documentation": ""
            },
            {
              "name": "pub use crate::comm::{ChannelConfig, ChannelHandle, CommContract, SessionConfig};",
              "line": 114,
              "signature": "pub use crate::comm::{ChannelConfig, ChannelHandle, CommContract, SessionConfig};",
              "documentation": ""
            },
            {
              "name": "pub use crate::error::ContractError;",
              "line": 115,
              "signature": "pub use crate::error::ContractError;",
              "documentation": ""
            },
            {
              "name": "pub use crate::flowers::{CheckpointData, FlowersBridgeContract, FlowersExecutionHandle};",
              "line": 116,
              "signature": "pub use crate::flowers::{CheckpointData, FlowersBridgeContract, FlowersExecutionHandle};",
              "documentation": ""
            },
            {
              "name": "pub use crate::identity::{\n        DerivedIdentityRequest, IdentityContract, IdentityHandle, LineageInfo,\n    };",
              "line": 117,
              "signature": "pub use crate::identity::{\n        DerivedIdentityRequest, IdentityContract, IdentityHandle, LineageInfo,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::mcp::{McpContract, McpServerHandle, McpToolDescriptor};",
              "line": 120,
              "signature": "pub use crate::mcp::{McpContract, McpServerHandle, McpToolDescriptor};",
              "documentation": ""
            },
            {
              "name": "pub use crate::memory::{\n        MemoryContract, MemoryQuery, MemoryRecord, MemoryScope, MemoryWritePolicy,\n    };",
              "line": 121,
              "signature": "pub use crate::memory::{\n        MemoryContract, MemoryQuery, MemoryRecord, MemoryScope, MemoryWritePolicy,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::provider::{\n        OrgProviderPolicy, ProviderContract, ProviderFallbackStrategy, ProviderSessionHandle,\n    };",
              "line": 124,
              "signature": "pub use crate::provider::{\n        OrgProviderPolicy, ProviderContract, ProviderFallbackStrategy, ProviderSessionHandle,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::runtime::{\n        AgentCreateRequest, AgentHandle, AgentLifecycleCommand, AgentRuntimeContract, AgentStatus,\n    };",
              "line": 127,
              "signature": "pub use crate::runtime::{\n        AgentCreateRequest, AgentHandle, AgentLifecycleCommand, AgentRuntimeContract, AgentStatus,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use crate::telemetry::{\n        HealthSummary, OrgHealthContract, OrgTelemetryContract, SpanFilter,\n    };",
              "line": 130,
              "signature": "pub use crate::telemetry::{\n        HealthSummary, OrgHealthContract, OrgTelemetryContract, SpanFilter,\n    };",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/mcp.rs",
          "sha256": "5dae19a0099171cb5a7b7817cb283b09820dc747ef813e373c21b34e9c83b62d",
          "artifactSha256": "c78761a32733e21db1fd62ce7070180285ab2936c850aad92b3138d4d8664d59",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/mcp.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 45,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-07."
            },
            {
              "name": "::McpServerConfig",
              "line": 49,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct McpServerConfig {\n/// Unique name for this MCP server connection.\n\npub server_name: String,\n/// The transport type for connecting to the server.\n\npub transport: McpTransportType,\n/// Optional authentication configuration.\n\npub auth: Option<McpAuthConfig>,\n/// Organization that owns this connection.\n\npub org_id: String,\n/// Optional department scope (only agents in this department can use).\n\npub department_id: Option<String>\n}",
              "documentation": "Configuration for connecting to an external MCP server."
            },
            {
              "name": "::McpTransportType",
              "line": 68,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum McpTransportType {\n    /// Standard I/O transport (subprocess).\n    Stdio {\n        /// Command to execute.\n        command: String,\n        /// Command arguments.\n        args: Vec<String>,\n    },\n    /// Server-Sent Events over HTTP.\n    Sse {\n        /// The SSE endpoint URL.\n        url: String,\n    },\n    /// Streamable HTTP transport.\n    Http {\n        /// The HTTP endpoint URL.\n        url: String,\n    },\n}",
              "documentation": "The transport type for an MCP connection."
            },
            {
              "name": "::McpAuthConfig",
              "line": 90,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct McpAuthConfig {\n/// The authentication method.\n\npub method: McpAuthMethod\n}",
              "documentation": "Authentication configuration for MCP connections."
            },
            {
              "name": "::McpAuthMethod",
              "line": 97,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum McpAuthMethod {\n    /// No authentication.\n    None,\n    /// API key authentication.\n    ApiKey {\n        /// Header name for the API key.\n        header: String,\n    },\n    /// OAuth 2.0 with PKCE.\n    OAuth {\n        /// Authorization endpoint URL.\n        auth_url: String,\n        /// Token endpoint URL.\n        token_url: String,\n        /// Client ID.\n        client_id: String,\n        /// Scopes to request.\n        scopes: Vec<String>,\n    },\n}",
              "documentation": "Authentication method for MCP connections."
            },
            {
              "name": "::McpServerHandle",
              "line": 120,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct McpServerHandle {\n/// Unique connection identifier.\n\npub connection_id: String,\n/// The server name.\n\npub server_name: String,\n/// Whether the connection is currently alive.\n\npub connected: bool,\n/// Number of tools available from this server.\n\npub tool_count: u32,\n/// Number of resources available from this server.\n\npub resource_count: u32\n}",
              "documentation": "An opaque handle to a connected MCP server."
            },
            {
              "name": "::McpToolDescriptor",
              "line": 139,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct McpToolDescriptor {\n/// The tool name.\n\npub name: String,\n/// Human-readable description.\n\npub description: String,\n/// JSON Schema for the tool's input parameters.\n\npub input_schema: serde_json::Value,\n/// The MCP server that provides this tool.\n\npub server_name: String\n}",
              "documentation": "A tool descriptor discovered from an MCP server."
            },
            {
              "name": "::McpResourceDescriptor",
              "line": 155,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct McpResourceDescriptor {\n/// The resource URI.\n\npub uri: String,\n/// Human-readable name.\n\npub name: String,\n/// Resource description.\n\npub description: Option<String>,\n/// MIME type of the resource.\n\npub mime_type: Option<String>,\n/// The MCP server that provides this resource.\n\npub server_name: String\n}",
              "documentation": "A resource descriptor discovered from an MCP server."
            },
            {
              "name": "::McpContract",
              "line": 190,
              "signature": "#[async_trait]\npub trait McpContract: Send + Sync {\n    /// Connects to an external MCP server.\n    ///\n    /// # Arguments\n    ///\n    /// * `config` - The server connection configuration.\n    ///\n    /// # Returns\n    ///\n    /// A handle to the connected server.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::McpError` if the connection or handshake fails.\n    async fn connect_server(&self, config: McpServerConfig) -> ContractResult<McpServerHandle>;\n\n    /// Disconnects from an MCP server.\n    ///\n    /// # Arguments\n    ///\n    /// * `connection_id` - The connection to close.\n    async fn disconnect_server(&self, connection_id: &str) -> ContractResult<()>;\n\n    /// Discovers all tools available from a connected server.\n    ///\n    /// # Arguments\n    ///\n    /// * `connection_id` - The server to query.\n    ///\n    /// # Returns\n    ///\n    /// Tool descriptors from the server.\n    async fn discover_tools(&self, connection_id: &str) -> ContractResult<Vec<McpToolDescriptor>>;\n\n    /// Discovers all resources available from a connected server.\n    ///\n    /// # Arguments\n    ///\n    /// * `connection_id` - The server to query.\n    ///\n    /// # Returns\n    ///\n    /// Resource descriptors from the server.\n    async fn discover_resources(\n        &self,\n        connection_id: &str,\n    ) -> ContractResult<Vec<McpResourceDescriptor>>;\n\n    /// Invokes a tool on a connected MCP server.\n    ///\n    /// # Arguments\n    ///\n    /// * `connection_id` - The server hosting the tool.\n    /// * `tool_name` - The tool to invoke.\n    /// * `arguments` - The tool's input arguments as JSON.\n    /// * `agent_did` - The agent invoking the tool (for ACT checks).\n    ///\n    /// # Returns\n    ///\n    /// The tool's output as JSON.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::McpError` if the tool invocation fails.\n    /// - `ContractError::AuthorizationDenied` if the agent lacks the\n    ///   required tool scope.\n    async fn invoke_tool(\n        &self,\n        connection_id: &str,\n        tool_name: &str,\n        arguments: serde_json::Value,\n        agent_did: &str,\n    ) -> ContractResult<serde_json::Value>;\n\n    /// Reads a resource from a connected MCP server.\n    ///\n    /// # Arguments\n    ///\n    /// * `connection_id` - The server hosting the resource.\n    /// * `uri` - The resource URI.\n    ///\n    /// # Returns\n    ///\n    /// The resource content as JSON.\n    async fn read_resource(\n        &self,\n        connection_id: &str,\n        uri: &str,\n    ) -> ContractResult<serde_json::Value>;\n\n    /// Lists all connected MCP servers for an organization.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization to query.\n    async fn list_servers(&self, org_id: &str) -> ContractResult<Vec<McpServerHandle>>;\n}",
              "documentation": "The primary contract for MCP integration.\n\nForge implements this trait in `forge-mcp`. Aut0 consumes it to\nmanage MCP server connections and discover tools for agents.\n\n# Implementor Notes (Forge)\n\n- `connect_server` MUST perform the MCP initialization handshake.\n- Tool discovery MUST be cached after initial connection.\n- Tool invocations MUST go through the agent's ACT scope checks.\n\n# Consumer Notes (Aut0)\n\n- Connect MCP servers at org startup via `connect_server`.\n- Use `discover_tools` to populate agent toolbelts.\n- Use `invoke_tool` for direct tool calls (or let the agent\n  runtime handle it through the tool loop)."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/memory.rs",
          "sha256": "16cfc8a37e876cfdc39b672a1fcbb1dbbbde1baa37890dd165f913e25782e530",
          "artifactSha256": "965509576adc705109585e82164160ce3ed357852234ff230a68baa8487563d2",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/memory.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 60,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-10."
            },
            {
              "name": "::MemoryScope",
              "line": 79,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum MemoryScope {\n    /// Organization-wide scope (all agents can read).\n    Organization {\n        /// The organization identifier.\n        org_id: String,\n    },\n    /// Department-level scope.\n    Department {\n        /// The organization identifier.\n        org_id: String,\n        /// The department identifier.\n        department_id: String,\n    },\n    /// Team-level scope.\n    Team {\n        /// The organization identifier.\n        org_id: String,\n        /// The department identifier.\n        department_id: String,\n        /// The team identifier.\n        team_id: String,\n    },\n    /// Agent-private scope.\n    Agent {\n        /// The agent's DID.\n        agent_did: String,\n    },\n}",
              "documentation": "A memory scope within the organizational hierarchy.\n\nScopes form a tree: org -> department -> team -> agent. Read access\nflows upward (child can read parent). Write access flows downward\n(parent can write to child).\n\n# Examples\n\n```\nuse forge_contracts::memory::MemoryScope;\n\nlet scope = MemoryScope::Department {\n    org_id: \"l1fe-ai-inc\".to_string(),\n    department_id: \"engineering\".to_string(),\n};\n```"
            },
            {
              "name": "::MemoryScope::org_id",
              "line": 110,
              "signature": "pub fn org_id(&self) -> Option<&str>;",
              "documentation": "Returns the org ID for this scope, if applicable."
            },
            {
              "name": "::MemoryScope::display_scope",
              "line": 120,
              "signature": "pub fn display_scope(&self) -> String;",
              "documentation": "Returns a human-readable scope string for error messages."
            },
            {
              "name": "::MemoryType",
              "line": 139,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum MemoryType {\n    /// Temporal events and interaction histories.\n    Episodic,\n    /// Facts, relationships, and knowledge.\n    Semantic,\n    /// Workflows, runbooks, and procedures.\n    Procedural,\n    /// Documents, artifacts, and code snippets.\n    Resource,\n}",
              "documentation": "The type of memory to store or retrieve."
            },
            {
              "name": "::MemoryRecord",
              "line": 172,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MemoryRecord {\n/// The scope where this record should be stored.\n\npub scope: MemoryScope,\n/// The type of memory.\n\npub memory_type: MemoryType,\n/// A unique key within the scope (for retrieval and updates).\n\npub key: String,\n/// The memory content as JSON.\n\npub content: serde_json::Value,\n/// Tags for discovery and filtering.\n\npub tags: Vec<String>,\n/// The DID of the agent that authored this record.\n\npub author_did: String\n}",
              "documentation": "A memory record to store.\n\n# Examples\n\n```\nuse forge_contracts::memory::{MemoryRecord, MemoryScope, MemoryType};\n\nlet record = MemoryRecord {\n    scope: MemoryScope::Department {\n        org_id: \"l1fe-ai-inc\".to_string(),\n        department_id: \"engineering\".to_string(),\n    },\n    memory_type: MemoryType::Procedural,\n    key: \"code-review-checklist\".to_string(),\n    content: serde_json::json!({\n        \"steps\": [\"lint\", \"test\", \"security review\", \"approve\"]\n    }),\n    tags: vec![\"review\".to_string(), \"process\".to_string()],\n    author_did: \"did:oas:l1fe:agent:eng-director\".to_string(),\n};\n```"
            },
            {
              "name": "::MemoryQuery",
              "line": 194,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct MemoryQuery {\n/// The scope to query. The query also includes all parent scopes\n\n/// (unless `include_parents` is `false`).\n\npub scope: Option<MemoryScope>,\n/// Filter by memory type.\n\npub memory_type: Option<MemoryType>,\n/// Filter by key prefix.\n\npub key_prefix: Option<String>,\n/// Filter by tags (records must have ALL specified tags).\n\npub tags: Vec<String>,\n/// Semantic search query (uses vector similarity).\n\npub semantic_query: Option<String>,\n/// Maximum results to return.\n\npub limit: Option<u32>,\n/// Whether to include records from parent scopes. Default: true.\n\npub include_parents: bool\n}",
              "documentation": "A query for retrieving memory records."
            },
            {
              "name": "::MemoryResult",
              "line": 220,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MemoryResult {\n/// The record's unique key.\n\npub key: String,\n/// The scope this record belongs to.\n\npub scope: MemoryScope,\n/// The memory type.\n\npub memory_type: MemoryType,\n/// The record content.\n\npub content: serde_json::Value,\n/// Tags on this record.\n\npub tags: Vec<String>,\n/// Who authored this record.\n\npub author_did: String,\n/// When this record was created.\n\npub created_at: DateTime<Utc>,\n/// When this record was last updated.\n\npub updated_at: DateTime<Utc>,\n/// Similarity score (0.0 to 1.0) when using semantic search.\n\npub similarity: Option<f64>\n}",
              "documentation": "A memory record returned from a query."
            },
            {
              "name": "::MemoryWritePolicy",
              "line": 251,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct MemoryWritePolicy {\n/// The scope this policy applies to.\n\npub scope: MemoryScope,\n/// Whether writes are allowed to this scope.\n\npub writes_allowed: bool,\n/// DIDs allowed to write (empty = all agents in scope can write).\n\npub allowed_writers: Vec<String>,\n/// Memory types that are writable (empty = all types).\n\npub writable_types: Vec<MemoryType>,\n/// Whether writes require approval from a parent scope agent.\n\npub requires_approval: bool,\n/// Maximum record size in bytes.\n\npub max_record_size_bytes: Option<u64>\n}",
              "documentation": "Policy governing write access to a memory scope."
            },
            {
              "name": "::MemoryContract",
              "line": 292,
              "signature": "#[async_trait]\npub trait MemoryContract: Send + Sync {\n    /// Stores a memory record.\n    ///\n    /// # Arguments\n    ///\n    /// * `record` - The record to store.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::MemoryAccessDenied` if the author lacks write\n    ///   access to the specified scope.\n    /// - `ContractError::MemoryError` if storage fails.\n    async fn store(&self, record: MemoryRecord) -> ContractResult<()>;\n\n    /// Retrieves memory records matching a query.\n    ///\n    /// # Arguments\n    ///\n    /// * `query` - The query criteria.\n    /// * `requester_did` - The agent requesting the records (for access\n    ///   control).\n    ///\n    /// # Returns\n    ///\n    /// Matching records ordered by relevance (semantic search) or\n    /// recency (non-semantic queries).\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::MemoryAccessDenied` if the requester lacks\n    ///   read access.\n    async fn retrieve(\n        &self,\n        query: MemoryQuery,\n        requester_did: &str,\n    ) -> ContractResult<Vec<MemoryResult>>;\n\n    /// Deletes a memory record.\n    ///\n    /// # Arguments\n    ///\n    /// * `scope` - The scope containing the record.\n    /// * `key` - The record key.\n    /// * `requester_did` - The agent requesting deletion (for access\n    ///   control).\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::MemoryAccessDenied` if the requester lacks\n    ///   write access.\n    async fn delete(\n        &self,\n        scope: &MemoryScope,\n        key: &str,\n        requester_did: &str,\n    ) -> ContractResult<()>;\n\n    /// Sets the write policy for a memory scope.\n    ///\n    /// # Arguments\n    ///\n    /// * `policy` - The write policy to set.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::AuthorizationDenied` if the caller lacks\n    ///   authority to set policies for this scope.\n    async fn set_write_policy(&self, policy: MemoryWritePolicy) -> ContractResult<()>;\n\n    /// Returns the current write policy for a scope.\n    ///\n    /// # Arguments\n    ///\n    /// * `scope` - The scope to query.\n    async fn get_write_policy(\n        &self,\n        scope: &MemoryScope,\n    ) -> ContractResult<Option<MemoryWritePolicy>>;\n}",
              "documentation": "The primary contract for memory integration.\n\nForge implements this trait with Akasha-backed storage. Aut0 consumes\nit to manage organizational knowledge hierarchies.\n\n# Implementor Notes (Forge)\n\n- `store` MUST enforce write policies before persisting.\n- `retrieve` MUST respect scope hierarchy (child can read parent).\n- `semantic_search` MUST use Akasha's vector operations.\n- `delete` MUST check that the requesting agent has write access.\n\n# Consumer Notes (Aut0)\n\n- Set write policies per scope at org startup.\n- Use `store` for organizational knowledge (policies, procedures,\n  mission statements, runbooks).\n- Use `retrieve` with semantic search for context-aware agent memory.\n- Memory is the primary mechanism for org-level skill packs and\n  crate-specific knowledge."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/provider.rs",
          "sha256": "355b623ad051e61df4fab522299d8eb79870ec62fbb3b2f02f709124f4ebe530",
          "artifactSha256": "965831d339d503adb72ef97ddd6201dc17576829d074ff4d6cede1c1d94c30d2",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/provider.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 51,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-04."
            },
            {
              "name": "::OrgProviderPolicy",
              "line": 80,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct OrgProviderPolicy {\n/// The organization this policy applies to.\n\npub org_id: String,\n/// Ordered list of available providers. Lower priority number = preferred.\n\npub providers: Vec<ProviderEntry>,\n/// Strategy for handling provider failures.\n\npub fallback_strategy: ProviderFallbackStrategy,\n/// Department-level overrides. Key is department ID.\n\n/// Overrides merge with (not replace) the org-level policy.\n\npub department_overrides: BTreeMap<String, DepartmentProviderOverride>\n}",
              "documentation": "Organization-level provider policy set by Aut0.\n\nThis defines which providers are available to agents within an\norganization, with optional department-level overrides.\n\n# Examples\n\n```\nuse forge_contracts::provider::{OrgProviderPolicy, ProviderEntry, ProviderFallbackStrategy};\n\nlet policy = OrgProviderPolicy {\n    org_id: \"l1fe-ai-inc\".to_string(),\n    providers: vec![\n        ProviderEntry {\n            namespace: \"anthropic\".to_string(),\n            enabled: true,\n            priority: 1,\n            max_tokens_per_minute: Some(100_000),\n            max_cost_per_hour_usd: Some(10.0),\n            allowed_models: vec![\"claude-sonnet-4-5-20250929\".to_string()],\n        },\n    ],\n    fallback_strategy: ProviderFallbackStrategy::NextPriority,\n    department_overrides: Default::default(),\n};\n```"
            },
            {
              "name": "::ProviderEntry",
              "line": 97,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct ProviderEntry {\n/// Provider namespace (e.g., \"openai\", \"anthropic\", \"local\").\n\npub namespace: String,\n/// Whether this provider is currently enabled.\n\npub enabled: bool,\n/// Priority for routing (lower = preferred).\n\npub priority: u32,\n/// Optional rate limit: max tokens per minute across all agents.\n\npub max_tokens_per_minute: Option<u64>,\n/// Optional cost limit: max USD per hour.\n\npub max_cost_per_hour_usd: Option<f64>,\n/// Allowed model names within this provider. Empty = all models.\n\npub allowed_models: Vec<String>\n}",
              "documentation": "A single provider entry in the policy."
            },
            {
              "name": "::DepartmentProviderOverride",
              "line": 119,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct DepartmentProviderOverride {\n/// Department identifier.\n\npub department_id: String,\n/// Provider namespaces explicitly allowed for this department.\n\n/// Empty means \"inherit org policy.\"\n\npub allowed_providers: Vec<String>,\n/// Provider namespaces explicitly blocked for this department.\n\npub blocked_providers: Vec<String>,\n/// Optional department-level cost cap (USD per hour).\n\npub max_cost_per_hour_usd: Option<f64>\n}",
              "documentation": "Department-level override to the org provider policy."
            },
            {
              "name": "::ProviderFallbackStrategy",
              "line": 136,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum ProviderFallbackStrategy {\n    /// Try the next provider in priority order.\n    NextPriority,\n    /// Fail immediately without trying alternatives.\n    FailFast,\n    /// Retry the same provider up to N times, then fail.\n    RetryThenFail {\n        /// Maximum number of retries.\n        max_retries: u32,\n    },\n    /// Retry the same provider, then fall back to next priority.\n    RetryThenFallback {\n        /// Maximum retries before fallback.\n        max_retries: u32,\n    },\n}",
              "documentation": "Strategy for handling provider failures."
            },
            {
              "name": "::ProviderSessionHandle",
              "line": 158,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ProviderSessionHandle {\n/// Unique session identifier.\n\npub session_id: String,\n/// The provider namespace for this session.\n\npub provider_namespace: String,\n/// The specific model in use.\n\npub model: String,\n/// Tokens consumed in this session so far.\n\npub tokens_consumed: u64,\n/// Estimated cost in USD so far.\n\npub estimated_cost_usd: f64\n}",
              "documentation": "An opaque handle to an active provider session.\n\nProvider sessions track state across multiple LLM calls (e.g.,\nconversation history, rate limit windows, cost accumulation)."
            },
            {
              "name": "::ProviderContract",
              "line": 196,
              "signature": "#[async_trait]\npub trait ProviderContract: Send + Sync {\n    /// Sets or updates the organization-level provider policy.\n    ///\n    /// This replaces the entire policy for the given organization.\n    ///\n    /// # Arguments\n    ///\n    /// * `policy` - The complete provider policy.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::ConfigurationError` if the policy is invalid.\n    async fn set_org_policy(&self, policy: OrgProviderPolicy) -> ContractResult<()>;\n\n    /// Resolves the best provider for a given request.\n    ///\n    /// Considers org policy, department overrides, agent capabilities,\n    /// current rate limits, and cost budgets.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization making the request.\n    /// * `department_id` - Optional department for override lookup.\n    /// * `agent_did` - The requesting agent (for ACT scope checks).\n    /// * `requested_provider` - Optional provider preference (e.g., \"anthropic:claude-sonnet-4-5-20250929\").\n    ///\n    /// # Returns\n    ///\n    /// A handle to the created provider session.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::NoProviderAvailable` if no provider matches.\n    /// - `ContractError::AuthorizationDenied` if the agent lacks provider scopes.\n    async fn resolve_provider(\n        &self,\n        org_id: &str,\n        department_id: Option<&str>,\n        agent_did: &str,\n        requested_provider: Option<&str>,\n    ) -> ContractResult<ProviderSessionHandle>;\n\n    /// Returns the current status of a provider session.\n    ///\n    /// # Arguments\n    ///\n    /// * `session_id` - The session to query.\n    ///\n    /// # Returns\n    ///\n    /// The session handle with current usage statistics.\n    async fn get_session(&self, session_id: &str) -> ContractResult<ProviderSessionHandle>;\n\n    /// Closes a provider session, releasing resources.\n    ///\n    /// # Arguments\n    ///\n    /// * `session_id` - The session to close.\n    async fn close_session(&self, session_id: &str) -> ContractResult<()>;\n\n    /// Returns usage statistics for an organization.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization to query.\n    ///\n    /// # Returns\n    ///\n    /// Aggregate usage per provider namespace.\n    async fn get_org_usage(\n        &self,\n        org_id: &str,\n    ) -> ContractResult<BTreeMap<String, ProviderUsageStats>>;\n}",
              "documentation": "The primary contract for provider routing and session management.\n\nForge implements this trait. Aut0 consumes it to set organizational\nprovider policies and manage provider sessions for agents.\n\n# Implementor Notes (Forge)\n\n- `set_org_policy` MUST validate provider entries and reject invalid\n  configurations immediately.\n- `resolve_provider` MUST check org policy, department overrides, and\n  agent ACT scopes before selecting a provider.\n- Provider sessions MUST track token usage and cost for org-level billing.\n\n# Consumer Notes (Aut0)\n\n- Call `set_org_policy` at org startup and whenever provider\n  configuration changes.\n- Use `get_session` to monitor active provider usage for cost tracking.\n- The `department_overrides` in `OrgProviderPolicy` allow fine-grained\n  control per department without modifying the org-wide policy."
            },
            {
              "name": "::ProviderUsageStats",
              "line": 273,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct ProviderUsageStats {\n/// Total tokens consumed.\n\npub total_tokens: u64,\n/// Total estimated cost in USD.\n\npub total_cost_usd: f64,\n/// Number of active sessions.\n\npub active_sessions: u32,\n/// Number of requests in the current rate limit window.\n\npub requests_this_window: u64,\n/// Number of requests that were rate-limited.\n\npub rate_limited_count: u64,\n/// Number of requests that failed.\n\npub failure_count: u64\n}",
              "documentation": "Aggregate usage statistics for a provider namespace within an org."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/runtime.rs",
          "sha256": "4dbb8f13325f3c7f0ba99318e6c9fef05643056919ee22fc53f011f00cc25230",
          "artifactSha256": "19f530b03860d54a92cc6666e7e691d20115dea465dc0c35ea6f982180c53ca8",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/runtime.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 60,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-01."
            },
            {
              "name": "::AgentCreateRequest",
              "line": 88,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AgentCreateRequest {\n/// Human-readable name for the agent (e.g., \"code-reviewer\").\n\npub agent_name: String,\n/// The provider:model reference (e.g., \"anthropic:claude-sonnet-4-5-20250929\").\n\npub provider_ref: String,\n/// Optional system prompt prepended to every LLM call.\n\npub system_prompt: Option<String>,\n/// Tool definitions available to this agent.\n\npub tools: Vec<ToolDefinition>,\n/// Maximum tool loop steps before forced termination.\n\npub max_steps: u32,\n/// Aut0 organization ID (org-level context).\n\npub org_id: Option<String>,\n/// Aut0 department ID (department-level context).\n\npub department_id: Option<String>,\n/// Role within the organization (e.g., \"senior-reviewer\", \"pm\").\n\npub role: Option<String>,\n/// Parent agent DID for sub-agent derivation. When `None`, the agent\n\n/// is a root-level agent derived from an HMR/MHR.\n\npub parent_agent_did: Option<String>,\n/// Arbitrary key-value metadata for Aut0-specific context.\n\npub metadata: std::collections::BTreeMap<String, String>\n}",
              "documentation": "Request to create a new agent within the Forge runtime.\n\nAut0 populates this struct with organization-level context (department,\nrole, task assignment) plus the Forge-level agent configuration (model,\ntools, system prompt).\n\n# Examples\n\n```\nuse forge_contracts::runtime::AgentCreateRequest;\n\nlet req = AgentCreateRequest {\n    agent_name: \"code-reviewer\".to_string(),\n    provider_ref: \"anthropic:claude-sonnet-4-5-20250929\".to_string(),\n    system_prompt: Some(\"You are a senior code reviewer.\".to_string()),\n    tools: vec![],\n    max_steps: 25,\n    org_id: Some(\"l1fe-ai-inc\".to_string()),\n    department_id: Some(\"engineering\".to_string()),\n    role: Some(\"senior-reviewer\".to_string()),\n    parent_agent_did: None,\n    metadata: Default::default(),\n};\nassert_eq!(req.agent_name, \"code-reviewer\");\n```"
            },
            {
              "name": "::AgentHandle",
              "line": 138,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash)]\npub struct AgentHandle {\n\n}",
              "documentation": "Opaque handle to a running agent within the Forge runtime.\n\nAut0 holds `AgentHandle` values and passes them back to the contract\nmethods to reference specific agents. The handle is not serializable\nacross process boundaries -- it is valid only within the creating\nruntime instance.\n\n# Examples\n\n```\nuse forge_contracts::runtime::AgentHandle;\n\nlet handle = AgentHandle::new(\"agent-001\", \"did:oas:l1fe:agent:code-reviewer\");\nassert_eq!(handle.id(), \"agent-001\");\nassert_eq!(handle.did(), \"did:oas:l1fe:agent:code-reviewer\");\n```"
            },
            {
              "name": "::AgentHandle::new",
              "line": 147,
              "signature": "pub fn new(id: impl Into<String>, did: impl Into<String>) -> Self;",
              "documentation": "Creates a new agent handle."
            },
            {
              "name": "::AgentHandle::id",
              "line": 155,
              "signature": "pub fn id(&self) -> &str;",
              "documentation": "Returns the internal runtime identifier."
            },
            {
              "name": "::AgentHandle::did",
              "line": 160,
              "signature": "pub fn did(&self) -> &str;",
              "documentation": "Returns the agent's OAS DID."
            },
            {
              "name": "::AgentLifecycleCommand",
              "line": 169,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum AgentLifecycleCommand {\n    /// Transition from Initializing to Ready, then to Running.\n    Start,\n    /// Transition from Running to Paused.\n    Pause,\n    /// Transition from Paused to Running.\n    Resume,\n    /// Transition from any state to Terminated.\n    Terminate {\n        /// Optional reason for termination.\n        reason: Option<String>,\n    },\n}",
              "documentation": "Commands that Aut0 can issue to manage an agent's lifecycle.\n\nThese map to the ANVIL 6-state lifecycle state machine transitions."
            },
            {
              "name": "::AgentStatus",
              "line": 187,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AgentStatus {\n/// The agent's OAS DID.\n\npub did: String,\n/// Current ANVIL lifecycle state.\n\npub lifecycle_state: LifecycleState,\n/// Current health profile snapshot.\n\npub health: HealthProfile,\n/// Number of tool loop steps completed.\n\npub steps_completed: u32,\n/// Number of tool loop steps remaining before max_steps.\n\npub steps_remaining: u32,\n/// Whether the agent is currently executing a tool call.\n\npub executing_tool: bool,\n/// The provider:model reference the agent is using.\n\npub provider_ref: String,\n/// Aut0 metadata passed at creation.\n\npub metadata: std::collections::BTreeMap<String, String>\n}",
              "documentation": "Current status of an agent, returned by `get_status`.\n\nCombines lifecycle state with health profile for a complete snapshot."
            },
            {
              "name": "::AgentRunResult",
              "line": 215,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AgentRunResult {\n/// The final text output from the agent, if any.\n\npub output_text: Option<String>,\n/// Structured output as JSON, if the agent produced structured output.\n\npub output_json: Option<serde_json::Value>,\n/// Total tool invocations during the run.\n\npub tool_invocations: u32,\n/// Total LLM inference calls during the run.\n\npub inference_calls: u32,\n/// Total tokens consumed (input + output).\n\npub total_tokens: u64,\n/// Whether the agent terminated normally or was force-stopped.\n\npub terminated_normally: bool,\n/// The final lifecycle state.\n\npub final_state: LifecycleState\n}",
              "documentation": "The result of an agent's execution run."
            },
            {
              "name": "::AgentRuntimeContract",
              "line": 262,
              "signature": "#[async_trait]\npub trait AgentRuntimeContract: Send + Sync {\n    /// Creates a new agent in the Forge runtime.\n    ///\n    /// The agent starts in `Initializing` state. Call `lifecycle_command`\n    /// with `Start` to advance it to `Running`.\n    ///\n    /// # Arguments\n    ///\n    /// * `request` - The agent creation parameters including identity,\n    ///   provider, tools, and Aut0-specific metadata.\n    ///\n    /// # Returns\n    ///\n    /// An opaque handle to the created agent.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::AgentCreationFailed` if the configuration is invalid.\n    /// - `ContractError::IdentityDerivationFailed` if identity cannot be derived.\n    /// - `ContractError::NoProviderAvailable` if the provider ref cannot be resolved.\n    async fn create_agent(&self, request: AgentCreateRequest) -> ContractResult<AgentHandle>;\n\n    /// Issues a lifecycle command to an existing agent.\n    ///\n    /// # Arguments\n    ///\n    /// * `handle` - The agent to command.\n    /// * `command` - The lifecycle transition to perform.\n    ///\n    /// # Returns\n    ///\n    /// The new status after the transition.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::AgentNotFound` if the handle is invalid.\n    /// - `ContractError::InvalidLifecycleTransition` if the transition\n    ///   violates the ANVIL state machine.\n    async fn lifecycle_command(\n        &self,\n        handle: &AgentHandle,\n        command: AgentLifecycleCommand,\n    ) -> ContractResult<AgentStatus>;\n\n    /// Queries the current status of an agent.\n    ///\n    /// # Arguments\n    ///\n    /// * `handle` - The agent to query.\n    ///\n    /// # Returns\n    ///\n    /// A snapshot of the agent's lifecycle, health, and execution state.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::AgentNotFound` if the handle is invalid.\n    async fn get_status(&self, handle: &AgentHandle) -> ContractResult<AgentStatus>;\n\n    /// Runs an agent to completion with the given input.\n    ///\n    /// This is a convenience method that starts the agent (if not already\n    /// running), sends the input through the tool loop, and blocks until\n    /// termination or max_steps.\n    ///\n    /// # Arguments\n    ///\n    /// * `handle` - The agent to run.\n    /// * `input` - The user/task input string.\n    ///\n    /// # Returns\n    ///\n    /// The execution result including output, tool counts, and token usage.\n    ///\n    /// # Errors\n    ///\n    /// - `ContractError::AgentNotFound` if the handle is invalid.\n    /// - `ContractError::InvalidLifecycleTransition` if the agent is in\n    ///   a state that cannot transition to Running.\n    async fn run_to_completion(\n        &self,\n        handle: &AgentHandle,\n        input: &str,\n    ) -> ContractResult<AgentRunResult>;\n\n    /// Lists all active agents matching an optional filter.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - Filter by organization. `None` returns all.\n    /// * `department_id` - Filter by department. `None` returns all in org.\n    ///\n    /// # Returns\n    ///\n    /// Handles for all matching agents.\n    async fn list_agents(\n        &self,\n        org_id: Option<&str>,\n        department_id: Option<&str>,\n    ) -> ContractResult<Vec<AgentHandle>>;\n}",
              "documentation": "The primary contract for agent lifecycle management.\n\nForge implements this trait. Aut0 consumes it to create and manage agents\nwithin organization departments, workflows, and tasks.\n\n# Implementor Notes (Forge)\n\n- `create_agent` MUST assign an OAS identity to the agent. If\n  `parent_agent_did` is provided, derive identity via HKDF. Otherwise,\n  derive from the organization's HMR/MHR root.\n- `lifecycle_command` MUST enforce the ANVIL 6-state transition table.\n  Invalid transitions return `ContractError::InvalidLifecycleTransition`.\n- `run_to_completion` executes the agent's tool loop and blocks until\n  the agent terminates or reaches max_steps.\n\n# Consumer Notes (Aut0)\n\n- Always check `get_status` before issuing lifecycle commands.\n- Store the `AgentHandle` for the lifetime of the agent. Dropping the\n  handle does NOT terminate the agent -- call `lifecycle_command` with\n  `Terminate` explicitly.\n- The `metadata` field on `AgentCreateRequest` is the place to attach\n  Aut0-specific context (task ID, workflow run ID, department)."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-contracts/src/telemetry.rs",
          "sha256": "79c60c491d207d88c22a813f3472bd9ad5f4374cbbc3c4b833d3e6d1fcd82be3",
          "artifactSha256": "51b9e0cbbb5b555a87f495f8618a8bbe6af0929164de9ca6660f258be39a8a16",
          "url": "/reference/source/forge-rs/crates/forge-contracts/src/telemetry.rs.txt",
          "declarations": [
            {
              "name": "::CONTRACT_VERSION",
              "line": 46,
              "signature": "pub const CONTRACT_VERSION: &str;",
              "documentation": "Contract version for S-08."
            },
            {
              "name": "::SpanFilter",
              "line": 50,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct SpanFilter {\n/// Filter by agent DID.\n\npub agent_did: Option<String>,\n/// Filter by span name prefix (e.g., \"anvil.tool.\").\n\npub name_prefix: Option<String>,\n/// Filter by time range start (inclusive).\n\npub from: Option<DateTime<Utc>>,\n/// Filter by time range end (exclusive).\n\npub to: Option<DateTime<Utc>>,\n/// Filter by organization.\n\npub org_id: Option<String>,\n/// Filter by department.\n\npub department_id: Option<String>,\n/// Maximum number of spans to return.\n\npub limit: Option<u32>\n}",
              "documentation": "Filter criteria for querying spans."
            },
            {
              "name": "::CollectedSpan",
              "line": 75,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct CollectedSpan {\n/// Unique span identifier.\n\npub span_id: String,\n/// Optional parent span ID.\n\npub parent_span_id: Option<String>,\n/// The span name (e.g., \"anvil.generate\", \"anvil.tool.invoke\").\n\npub name: String,\n/// The agent DID that emitted this span.\n\npub agent_did: String,\n/// Start timestamp.\n\npub started_at: DateTime<Utc>,\n/// End timestamp.\n\npub ended_at: Option<DateTime<Utc>>,\n/// Duration in microseconds.\n\npub duration_us: Option<u64>,\n/// Span attributes as key-value pairs.\n\npub attributes: BTreeMap<String, String>\n}",
              "documentation": "A telemetry span collected from agent execution."
            },
            {
              "name": "::AuditEntry",
              "line": 103,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct AuditEntry {\n/// Sequential entry index.\n\npub index: u64,\n/// The agent DID that created this entry.\n\npub agent_did: String,\n/// The event kind.\n\npub event_kind: String,\n/// The event payload as JSON.\n\npub payload: serde_json::Value,\n/// ISO 8601 timestamp.\n\npub timestamp: DateTime<Utc>,\n/// Ed25519 signature (base64-encoded).\n\npub signature: String\n}",
              "documentation": "A signed audit trail entry."
            },
            {
              "name": "::HealthSummary",
              "line": 125,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct HealthSummary {\n/// The scope identifier (org ID, department ID, or team ID).\n\npub scope_id: String,\n/// The scope type.\n\npub scope_type: HealthScopeType,\n/// Overall health status for this scope.\n\npub overall_status: HealthStatus,\n/// Number of agents in each lifecycle state.\n\npub lifecycle_counts: BTreeMap<String, u32>,\n/// Number of agents at each health level.\n\npub health_counts: HealthCounts,\n/// Total active agents in this scope.\n\npub total_agents: u32,\n/// Total tool invocations across all agents.\n\npub total_tool_invocations: u64,\n/// Total inference calls across all agents.\n\npub total_inference_calls: u64,\n/// Total tokens consumed across all agents.\n\npub total_tokens: u64,\n/// Estimated total cost in USD.\n\npub estimated_cost_usd: f64,\n/// When this summary was last computed.\n\npub computed_at: DateTime<Utc>\n}",
              "documentation": "Health summary for an organizational unit (org, department, or team)."
            },
            {
              "name": "::HealthScopeType",
              "line": 162,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub enum HealthScopeType {\n    /// Organization-wide summary.\n    Organization,\n    /// Department-level summary.\n    Department,\n    /// Team-level summary.\n    Team,\n}",
              "documentation": "The type of scope a health summary covers."
            },
            {
              "name": "::HealthCounts",
              "line": 173,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct HealthCounts {\n/// Number of agents in Healthy state.\n\npub healthy: u32,\n/// Number of agents in Degraded state.\n\npub degraded: u32,\n/// Number of agents in Critical state.\n\npub critical: u32\n}",
              "documentation": "Counts of agents at each health level."
            },
            {
              "name": "::OrgTelemetryContract",
              "line": 199,
              "signature": "#[async_trait]\npub trait OrgTelemetryContract: Send + Sync {\n    /// Queries collected spans with filtering.\n    ///\n    /// # Arguments\n    ///\n    /// * `filter` - Criteria for filtering spans.\n    ///\n    /// # Returns\n    ///\n    /// Matching spans ordered by start time.\n    async fn query_spans(&self, filter: SpanFilter) -> ContractResult<Vec<CollectedSpan>>;\n\n    /// Returns the audit trail for an agent.\n    ///\n    /// # Arguments\n    ///\n    /// * `agent_did` - The agent whose audit trail to retrieve.\n    /// * `from_index` - Start reading from this entry index.\n    /// * `limit` - Maximum entries to return.\n    ///\n    /// # Returns\n    ///\n    /// Audit entries in sequential order.\n    async fn get_audit_trail(\n        &self,\n        agent_did: &str,\n        from_index: u64,\n        limit: u32,\n    ) -> ContractResult<Vec<AuditEntry>>;\n\n    /// Returns the audit trail for an entire organization.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization to query.\n    /// * `from` - Start time (inclusive).\n    /// * `to` - End time (exclusive).\n    /// * `limit` - Maximum entries to return.\n    async fn get_org_audit_trail(\n        &self,\n        org_id: &str,\n        from: DateTime<Utc>,\n        to: DateTime<Utc>,\n        limit: u32,\n    ) -> ContractResult<Vec<AuditEntry>>;\n}",
              "documentation": "The primary contract for telemetry aggregation.\n\nForge implements this trait. Aut0 consumes it to aggregate per-agent\ntelemetry into organizational views.\n\n# Implementor Notes (Forge)\n\n- `query_spans` MUST support all filter criteria.\n- Spans MUST include the agent's DID for org-level aggregation.\n- The implementation SHOULD use efficient indexing for time-range queries.\n\n# Consumer Notes (Aut0)\n\n- Use `query_spans` for debugging and performance analysis.\n- Use `get_audit_trail` for compliance and governance audits.\n- Cache span data in Aut0's own storage for long-term analytics."
            },
            {
              "name": "::OrgHealthContract",
              "line": 261,
              "signature": "#[async_trait]\npub trait OrgHealthContract: Send + Sync {\n    /// Returns a health summary for an organizational scope.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization.\n    /// * `scope_type` - The scope level (org, department, or team).\n    /// * `scope_id` - The scope identifier. For `Organization`, this\n    ///   is the org ID. For `Department`, the department ID, etc.\n    ///\n    /// # Returns\n    ///\n    /// Aggregated health summary for all agents in the scope.\n    async fn get_health_summary(\n        &self,\n        org_id: &str,\n        scope_type: HealthScopeType,\n        scope_id: &str,\n    ) -> ContractResult<HealthSummary>;\n\n    /// Returns health summaries for all departments in an organization.\n    ///\n    /// # Arguments\n    ///\n    /// * `org_id` - The organization to query.\n    ///\n    /// # Returns\n    ///\n    /// One summary per department.\n    async fn get_all_department_health(&self, org_id: &str) -> ContractResult<Vec<HealthSummary>>;\n\n    /// Returns the health status of a specific agent.\n    ///\n    /// # Arguments\n    ///\n    /// * `agent_did` - The agent to query.\n    async fn get_agent_health(&self, agent_did: &str) -> ContractResult<HealthSummary>;\n}",
              "documentation": "The primary contract for health aggregation.\n\nForge implements this trait. Aut0 consumes it for org-level health\ndashboards and incident detection.\n\n# Implementor Notes (Forge)\n\n- `get_health_summary` MUST aggregate across all agents in the scope.\n- The `overall_status` MUST be the worst status among all agents.\n\n# Consumer Notes (Aut0)\n\n- Poll `get_health_summary` periodically for dashboard updates.\n- Trigger incident flows when `overall_status` is Critical."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-agent402",
      "language": "rust",
      "version": "0.2.0",
      "description": "Agent-native identity + payment middleware \u2014 wraps OpenAgent challenge-response, x402 micropayments, and Arsenal capability grants into agent402::serve() and agent402::connect()",
      "manifest": "forge-rs/crates/forge-agent402/Cargo.toml",
      "manifestSha256": "7a2fba02511afaadd75b288ec9daaa339c4747d51b8e8d827983801641bf9379",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-agent402",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-agent402/src/client.rs",
          "sha256": "a58f88f7890f51c2e30c69f96930625a431aadab5344e92614b7dfbd2b33a51d",
          "artifactSha256": "f2c41bd50e512f060bcd25d383d8a8c01f74c0fb7a21c8c610f58a35de383e7d",
          "url": "/reference/source/forge-rs/crates/forge-agent402/src/client.rs.txt",
          "declarations": [
            {
              "name": "::AgentConfig",
              "line": 41,
              "signature": "#[derive(Zeroize, ZeroizeOnDrop)]\npub struct AgentConfig {\n/// Ed25519 secret key (32 bytes). The agent's identity key.\n\npub secret_key: [u8; 32]\n}",
              "documentation": "Configuration for an agent402 client.\n\nThe `secret_key` field is zeroed from memory on drop."
            },
            {
              "name": "::Agent",
              "line": 61,
              "signature": "pub struct Agent {\n\n}",
              "documentation": "An agent that can fetch from OpenAgent-protected + x402-priced endpoints.\n\nHandles the full protocol flow transparently:\n1. Sends request \u2192 if 401, signs challenge, retries\n2. If 402, constructs payment proof, signs, retries\n3. Caches session tokens for subsequent requests"
            },
            {
              "name": "::FetchResponse",
              "line": 100,
              "signature": "#[derive(Debug)]\npub struct FetchResponse {\n/// HTTP status code.\n\npub status: u16,\n/// Agent's DID as assigned by the server.\n\npub did: Option<String>,\n/// Trust tier assigned by the server.\n\npub trust_tier: Option<u8>,\n/// Response body bytes.\n\npub body: Vec<u8>\n}",
              "documentation": "Response from an agent402 fetch."
            },
            {
              "name": "::Agent::new",
              "line": 129,
              "signature": "pub fn new(config: AgentConfig) -> Self;",
              "documentation": "Creates a new agent from config.\n\nThe secret key is used for both OpenAgent identity challenges and\nx402 payment signing. Self-custody: the key stays in this process."
            },
            {
              "name": "::Agent::public_key_bytes",
              "line": 142,
              "signature": "pub fn public_key_bytes(&self) -> [u8; 32];",
              "documentation": "Returns the agent's Ed25519 public key bytes."
            },
            {
              "name": "::Agent::public_key_hex",
              "line": 147,
              "signature": "pub fn public_key_hex(&self) -> String;",
              "documentation": "Returns the agent's public key as hex string."
            },
            {
              "name": "::Agent::fetch",
              "line": 157,
              "signature": "pub async fn fetch(\n        &self,\n        url: &str,\n        body: Option<&[u8]>,\n    ) -> Result<FetchResponse, Agent402Error>;",
              "documentation": "Fetches a URL with automatic identity + payment handling.\n\nFlow:\n1. Delegate to `OpenAgentClient::fetch()` for challenge-response\n2. If response is 402, parse `PaymentRequirement`, sign proof, retry\n3. Return final response"
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent402/src/error.rs",
          "sha256": "05559050bcf2cfc6e9912adc1062412243aa0e752fbb64c652538de76db7e554",
          "artifactSha256": "2159f7377ceb8324828f8a4dd56eaf3559b40b875224e7bcb1edce93d890d455",
          "url": "/reference/source/forge-rs/crates/forge-agent402/src/error.rs.txt",
          "declarations": [
            {
              "name": "::Agent402Error",
              "line": 7,
              "signature": "#[derive(Debug, Error)]\npub enum Agent402Error {\n    /// OpenAgent challenge-response authentication failed.\n    #[error(\"authentication failed: {reason}\")]\n    AuthFailed { reason: String },\n\n    /// x402 payment required but not provided or invalid.\n    #[error(\"payment failed: {reason}\")]\n    PaymentFailed { reason: String },\n\n    /// Session token expired or invalid.\n    #[error(\"session expired\")]\n    SessionExpired,\n\n    /// Network or transport error.\n    #[error(\"network error: {0}\")]\n    Network(String),\n\n    /// Configuration error.\n    #[error(\"configuration error: {0}\")]\n    Config(String),\n\n    /// Internal error.\n    #[error(\"internal error: {0}\")]\n    Internal(String),\n}",
              "documentation": "Errors from the agent402 layer."
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent402/src/lib.rs",
          "sha256": "6accec35e3e6fc19062ebdb95a0ce58890e293914ac365ee4993f2b156548b8b",
          "artifactSha256": "609f03637d525ba6750c21625f337695efeebcd6d6e96cba42982545ea0c162f",
          "url": "/reference/source/forge-rs/crates/forge-agent402/src/lib.rs.txt",
          "declarations": [
            {
              "name": "client",
              "line": 46,
              "signature": "pub mod client;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 47,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "server",
              "line": 48,
              "signature": "pub mod server;",
              "documentation": ""
            },
            {
              "name": "pub use client::{Agent, AgentConfig};",
              "line": 50,
              "signature": "pub use client::{Agent, AgentConfig};",
              "documentation": ""
            },
            {
              "name": "pub use server::{CapabilityConfig, GrantCondition, ServeConfig, ServeLayer};",
              "line": 51,
              "signature": "pub use server::{CapabilityConfig, GrantCondition, ServeConfig, ServeLayer};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/crates/forge-agent402/src/server.rs",
          "sha256": "667d0ff36cf1134a0f6c01de83530e4e7697745232b6e19260d1eafe56e07fca",
          "artifactSha256": "502462601a7df76c57e775868b5305c38b59492f4e7bd1e3ffdd3d6e6a90c112",
          "url": "/reference/source/forge-rs/crates/forge-agent402/src/server.rs.txt",
          "declarations": [
            {
              "name": "::ServeConfig",
              "line": 31,
              "signature": "#[derive(Debug, Clone)]\npub struct ServeConfig {\n/// Server origin (e.g., \"https://api.example.com\").\n\npub origin: String,\n/// Optional realm for the OpenAgent challenge.\n\npub realm: Option<String>,\n/// HMAC secret for session JWTs. Must be at least 32 bytes.\n\npub session_secret: Vec<u8>,\n/// Session TTL in seconds (default: 900 = 15 minutes).\n\npub session_ttl_secs: i64,\n/// Minimum trust tier (default: 0 = Anonymous).\n\npub min_trust_tier: u8,\n/// Priced routes (empty = identity-only, no payment required).\n\npub priced_routes: Vec<RouteConfig>,\n/// Wallet address for receiving payments.\n\npub recipient_address: Option<String>,\n/// Facilitator URL for x402 settlement.\n\npub facilitator_url: Option<String>,\n/// Capability requirements per route (Arsenal scopes).\n\npub capabilities: Vec<CapabilityConfig>\n}",
              "documentation": "Configuration for the agent402 server middleware.\n\nCombines OpenAgent identity config with optional x402 route pricing."
            },
            {
              "name": "::RouteConfig",
              "line": 62,
              "signature": "#[derive(Debug, Clone)]\npub struct RouteConfig {\n/// Route path pattern (prefix match).\n\npub path: String,\n/// HTTP method (None = all methods).\n\npub method: Option<String>,\n/// Price per request as decimal string (e.g., \"0.002\").\n\npub price: String,\n/// Currency (default: \"USDC\").\n\npub currency: String\n}",
              "documentation": "Configuration for a priced route."
            },
            {
              "name": "::ServeConfig::new",
              "line": 77,
              "signature": "pub fn new(origin: impl Into<String>, session_secret: impl AsRef<[u8]>) -> Self;",
              "documentation": "Creates a new server config with the given origin and session secret.\n\nDefaults to identity-only (no payment) with Anonymous minimum trust tier."
            },
            {
              "name": "::ServeConfig::with_priced_route",
              "line": 92,
              "signature": "pub fn with_priced_route(\n        mut self,\n        path: impl Into<String>,\n        method: impl Into<String>,\n        price: impl Into<String>,\n    ) -> Self;",
              "documentation": "Adds a priced route. Requires `recipient_address` and `facilitator_url`."
            },
            {
              "name": "::ServeConfig::with_recipient",
              "line": 108,
              "signature": "pub fn with_recipient(mut self, address: impl Into<String>) -> Self;",
              "documentation": "Sets the recipient wallet address for x402 payments."
            },
            {
              "name": "::ServeConfig::with_facilitator",
              "line": 114,
              "signature": "pub fn with_facilitator(mut self, url: impl Into<String>) -> Self;",
              "documentation": "Sets the facilitator URL for x402 settlement."
            },
            {
              "name": "::ServeConfig::with_min_trust_tier",
              "line": 120,
              "signature": "pub fn with_min_trust_tier(mut self, tier: u8) -> Self;",
              "documentation": "Sets the minimum trust tier."
            },
            {
              "name": "::ServeConfig::with_realm",
              "line": 126,
              "signature": "pub fn with_realm(mut self, realm: impl Into<String>) -> Self;",
              "documentation": "Sets the optional realm."
            },
            {
              "name": "::ServeConfig::with_capability",
              "line": 136,
              "signature": "pub fn with_capability(\n        mut self,\n        path: impl Into<String>,\n        method: impl Into<String>,\n        scopes: &[&str],\n        condition: GrantCondition,\n    ) -> Self;",
              "documentation": "Adds a capability requirement for a route.\n\nWhen the agent authenticates (and optionally pays), the listed scopes\nare implicitly granted for the request. Scopes use the Arsenal format:\n`service:resource:action`."
            },
            {
              "name": "::CapabilityConfig",
              "line": 175,
              "signature": "#[derive(Debug, Clone)]\npub struct CapabilityConfig {\n/// Route path pattern (prefix match).\n\npub path: String,\n/// HTTP method (None = all methods).\n\npub method: Option<String>,\n/// Required Arsenal scopes (format: `service:resource:action`).\n\npub scopes: Vec<String>,\n/// Grant condition: \"verified\" or \"verified_and_paid\".\n\npub condition: GrantCondition\n}",
              "documentation": "Capability configuration for a route.\n\nDefines what Arsenal scopes are required for a route. When the agent\nauthenticates and (optionally) pays, these scopes are implicitly granted.\n\nFor cross-server ACT portability (Phase 2), the server would issue a\nCBOR-signed ACT via Arsenal broker. Day-one, the grant is implicit:\nauth + payment = capability granted for the request's route."
            },
            {
              "name": "::GrantCondition",
              "line": 188,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum GrantCondition {\n    /// Grant after identity verification succeeds (any trust tier).\n    Verified,\n    /// Grant after identity verification AND x402 payment succeeds.\n    VerifiedAndPaid,\n    /// Grant only if trust tier meets minimum.\n    TrustMinimum(u8),\n}",
              "documentation": "When Arsenal capabilities are granted."
            },
            {
              "name": "::ServeLayer",
              "line": 228,
              "signature": "#[derive(Clone)]\npub struct ServeLayer {\n\n}",
              "documentation": "The agent402 Axum middleware layer.\n\nComposes the OpenAgent challenge-response layer for identity verification.\n\n# Capability Model (Day-One)\n\nDay-one capabilities are **implicit**: once the agent authenticates (and\npays if the route is priced), the route's configured capabilities are\ngranted for the duration of the request. Handlers can read the agent's\nDID from the `X-OpenAgent-DID` response header.\n\nFor cross-server ACT portability (Phase 2), the server would call Arsenal\nbroker to issue a CBOR-signed ACT token.\n\n# x402 Composition\n\nWhen `ServeConfig` has priced routes, the service operator composes the\nMints `x402_payment_gate` middleware in the router stack *after* the\n`ServeLayer`. The x402 gate reads the authenticated session and returns\n402 with `PaymentRequirement` for priced routes.\n\n```rust,ignore\nlet app = Router::new()\n    .route(\"/api/analyze\", post(handler))\n    .layer(axum::middleware::from_fn_with_state(x402_gate, x402_payment_gate))\n    .layer(ServeLayer::new(config));\n```\n\nLayer order: requests flow through `ServeLayer` (identity) first,\nthen `x402_payment_gate` (payment)."
            },
            {
              "name": "::ServeLayer::new",
              "line": 235,
              "signature": "pub fn new(config: ServeConfig) -> Self;",
              "documentation": "Creates a new agent402 server layer from the given config."
            },
            {
              "name": "::ServeLayer::config",
              "line": 246,
              "signature": "pub fn config(&self) -> &ServeConfig;",
              "documentation": "Returns the serve config (for x402 gate setup)."
            },
            {
              "name": "::serve",
              "line": 275,
              "signature": "pub fn serve(config: ServeConfig) -> ServeLayer;",
              "documentation": "Convenience function to create the agent402 server layer.\n\n# Example\n\n```rust,ignore\nuse forge_agent402::server::serve;\n\nlet layer = serve(ServeConfig::new(\n    \"https://api.example.com\",\n    b\"secret-key-at-least-32-bytes!!!!\"\n));\n\nlet app = Router::new()\n    .route(\"/api/data\", get(handler))\n    .layer(layer);\n```"
            }
          ]
        }
      ]
    },
    {
      "name": "forge-settings",
      "language": "rust",
      "version": "0.2.0",
      "description": "Forge \u2014 provider settings introspection. Each provider crate exposes its configurable fields through `ProviderSettings`, letting external runtimes (TUIs, dashboards) render and edit those fields without coupling to each provider's concrete `Config` type.",
      "manifest": "forge-rs/crates/forge-settings/Cargo.toml",
      "manifestSha256": "06fc4b4ee642368b8bf75905b0ca93074258925db46b763f3fe412ca20fd7511",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-settings",
      "features": {},
      "files": [
        {
          "path": "forge-rs/crates/forge-settings/src/lib.rs",
          "sha256": "52dd3b7cafa5724a3d1ffa5c9792ae487221de94cec38aa107d1289e54d9dc69",
          "artifactSha256": "fd13b2c68eb7e6f6c385263149940d6ed731ae04a75f3fdf01ff3cb01a0443ce",
          "url": "/reference/source/forge-rs/crates/forge-settings/src/lib.rs.txt",
          "declarations": [
            {
              "name": "::ProviderSettingField",
              "line": 72,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderSettingField {\n/// Stable identifier (e.g. `\"api_key\"`, `\"base_url\"`).\n\npub id: String,\n/// User-visible label.\n\npub label: String,\n/// One-line description.\n\npub description: String,\n/// What kind of value the field holds.\n\npub kind: ProviderSettingKind,\n/// Current value, already redacted for secret fields.\n\npub value: String,\n/// `true` when the value is sensitive \u2014 runtimes should never\n\n/// log it and should display it as `\u2022\u2022\u2022\u2022\u2022\u2022` by default.\n\npub secret: bool,\n/// `true` when this field is the currently-active enum / picker\n\n/// selection.\n\npub active: bool\n}",
              "documentation": "One configurable field surfaced by a provider."
            },
            {
              "name": "::ProviderSettingField::text",
              "line": 94,
              "signature": "#[must_use]\npub fn text(id: impl Into<String>, label: impl Into<String>, value: impl Into<String>) -> Self;",
              "documentation": "Convenience: text field with the given current value."
            },
            {
              "name": "::ProviderSettingField::secret_text",
              "line": 110,
              "signature": "#[must_use]\npub fn secret_text(\n        id: impl Into<String>,\n        label: impl Into<String>,\n        value: impl Into<String>,\n    ) -> Self;",
              "documentation": "Convenience: secret text field. The supplied value is\nreturned verbatim \u2014 runtimes are expected to redact it on\ndisplay. Pass an empty string when the value is unset."
            },
            {
              "name": "::ProviderSettingField::integer",
              "line": 128,
              "signature": "#[must_use]\npub fn integer(id: impl Into<String>, label: impl Into<String>, value: i64) -> Self;",
              "documentation": "Convenience: integer field."
            },
            {
              "name": "::ProviderSettingField::boolean",
              "line": 142,
              "signature": "#[must_use]\npub fn boolean(id: impl Into<String>, label: impl Into<String>, value: bool) -> Self;",
              "documentation": "Convenience: boolean toggle field."
            },
            {
              "name": "::ProviderSettingField::picker",
              "line": 157,
              "signature": "#[must_use]\npub fn picker(\n        id: impl Into<String>,\n        label: impl Into<String>,\n        current_id: impl Into<String>,\n        options: Vec<ProviderSettingOption>,\n    ) -> Self;",
              "documentation": "Convenience: enum/picker field with a fixed set of options.\n`current_id` is the id of the currently-selected option."
            },
            {
              "name": "::ProviderSettingField::description",
              "line": 177,
              "signature": "#[must_use]\npub fn description(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Builder-style description."
            },
            {
              "name": "::ProviderSettingField::active",
              "line": 184,
              "signature": "#[must_use]\npub fn active(mut self, on: bool) -> Self;",
              "documentation": "Builder-style active flag."
            },
            {
              "name": "::ProviderSettingKind",
              "line": 193,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"kebab-case\")]\npub enum ProviderSettingKind {\n    /// Free-form string (api keys, urls, region names).\n    Text,\n    /// Whole-number integer (timeouts, retries).\n    Integer,\n    /// Boolean toggle.\n    Bool,\n    /// Enum picker with a fixed option list.\n    Picker {\n        /// Available choices \u2014 the runtime renders these as a sub-page.\n        options: Vec<ProviderSettingOption>,\n    },\n}",
              "documentation": "Kind of value a field holds."
            },
            {
              "name": "::ProviderSettingOption",
              "line": 209,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderSettingOption {\n/// Stable identifier of the option.\n\npub id: String,\n/// User-visible label.\n\npub label: String,\n/// Optional one-line description.\n\npub description: String\n}",
              "documentation": "One option of a [`ProviderSettingKind::Picker`] field."
            },
            {
              "name": "::ProviderSettingOption::new",
              "line": 221,
              "signature": "#[must_use]\npub fn new(id: impl Into<String>, label: impl Into<String>) -> Self;",
              "documentation": "Convenience constructor."
            },
            {
              "name": "::ProviderSettingOption::description",
              "line": 231,
              "signature": "#[must_use]\npub fn description(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Builder-style description."
            },
            {
              "name": "::FieldError",
              "line": 240,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"kebab-case\")]\npub enum FieldError {\n    /// The field id is not recognized by this provider.\n    UnknownField(String),\n    /// The supplied value failed validation.\n    InvalidValue(String),\n    /// The field is read-only.\n    ReadOnly(String),\n}",
              "documentation": "Errors returned by [`ProviderSettings::set_field`]."
            },
            {
              "name": "::ProviderSettings",
              "line": 263,
              "signature": "pub trait ProviderSettings {\n    /// Stable provider identifier (e.g. `\"anthropic\"`, `\"openai\"`).\n    fn provider_id(&self) -> &str;\n\n    /// All fields the runtime should display, in render order.\n    fn fields(&self) -> Vec<ProviderSettingField>;\n\n    /// Update one field. The provider validates the value and\n    /// returns [`FieldError`] on rejection. Default implementation\n    /// returns `ReadOnly` for every field \u2014 providers that want to\n    /// support editing must override.\n    ///\n    /// # Errors\n    ///\n    /// Returns [`FieldError`] for unknown fields, invalid values, or\n    /// read-only fields.\n    fn set_field(&mut self, id: &str, _value: &str) -> Result<(), FieldError> ;\n}",
              "documentation": "Trait every Forge provider config implements so external\nruntimes can render + edit its fields generically."
            }
          ]
        }
      ]
    },
    {
      "name": "forge-conformance-harness",
      "language": "rust",
      "version": "0.2.0",
      "description": "ANVIL conformance test harness for the Forge SDK (Rust reference implementation)",
      "manifest": "forge-rs/conformance/harness/rust/Cargo.toml",
      "manifestSha256": "287b17a00452b1b71a2a4d90f3713f57324834e088aa901b48537202c093bedb",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/forge-conformance-harness",
      "features": {},
      "files": [
        {
          "path": "forge-rs/conformance/harness/rust/src/main.rs",
          "sha256": "a10b63af882bd215efbde017e9bec5a2b9aada3ed9e29a411867d27beaabff79",
          "artifactSha256": "75247bc40badf40e07eb9cf1a672ab3828552fe15ea66c756a4ad01ef6229dba",
          "url": "/reference/source/forge-rs/conformance/harness/rust/src/main.rs.txt",
          "declarations": []
        }
      ]
    },
    {
      "name": "harness-spec",
      "language": "rust",
      "version": "0.1.0",
      "description": "HarnessSpec v0.1 contract layer \u2014 fail-closed TOML manifest parsing, validation, and canonical BLAKE3 hashing (FINAL_SPEC \u00a75)",
      "manifest": "forge-rs/harness-spec/Cargo.toml",
      "manifestSha256": "c9fea2c67ab49cdbd63b59071957911e10151ca42cd9f5ea932901ccfe0a5d51",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/harness-spec",
      "features": {},
      "files": [
        {
          "path": "forge-rs/harness-spec/src/error.rs",
          "sha256": "edf95e0c72d9b41828ce610c46edfbba721e1e744bd5be00659b91de7a08fbfa",
          "artifactSha256": "a10dc94d11f2e8a964c421da552091b47cb182a02d1627c49b6a52bd9c7d5f42",
          "url": "/reference/source/forge-rs/harness-spec/src/error.rs.txt",
          "declarations": [
            {
              "name": "::SpecError",
              "line": 9,
              "signature": "#[derive(Debug, Error)]\npub enum SpecError {\n    /// The manifest is not well-formed TOML or violates the strict serde\n    /// schema (unknown tables, unknown keys, unknown enum variants, wrong\n    /// scalar types). This is the first \u00a75.16 fail-closed layer.\n    #[error(\"manifest parse failed: {0}\")]\n    Parse(#[from] toml::de::Error),\n\n    /// The manifest parsed but violated one or more \u00a75 validation rules.\n    #[error(\"manifest validation failed:\\n{0}\")]\n    Validation(#[from] ValidationError),\n\n    /// The canonical JSON projection could not be produced. Unreachable for\n    /// derive-only manifests; reserved for defensive completeness.\n    #[error(\"canonical projection failed: {0}\")]\n    Canonicalization(#[from] serde_json::Error),\n}",
              "documentation": "Top-level error type for the HarnessSpec contract layer."
            },
            {
              "name": "::ValidationError",
              "line": 31,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct ValidationError {\n\n}",
              "documentation": "A collected set of \u00a75 validation violations.\n\nValidation is fail-closed but not fail-fast: every applicable rule is\nevaluated and all violations are reported together."
            },
            {
              "name": "::ValidationError::violations",
              "line": 42,
              "signature": "pub fn violations(&self) -> &[Violation];",
              "documentation": "All violations, sorted by manifest path."
            },
            {
              "name": "::ValidationError::contains",
              "line": 47,
              "signature": "pub fn contains(&self, code: ViolationCode) -> bool;",
              "documentation": "True when at least one violation carries the given code."
            },
            {
              "name": "::Violation",
              "line": 69,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct Violation {\n/// Machine-checkable rule code.\n\npub code: ViolationCode,\n/// Dotted manifest path of the offending value (e.g. `tools.deny_default`).\n\npub path: String,\n/// Human-readable explanation, including the governing spec section.\n\npub message: String\n}",
              "documentation": "A single \u00a75 validation violation."
            },
            {
              "name": "::ViolationCode",
              "line": 80,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub enum ViolationCode {\n    /// `spec_version` is absent or not `\"0.1\"` (\u00a75.1).\n    InvalidSpecVersion,\n    /// A URI-shaped field is malformed (\u00a75.3, \u00a75.4).\n    InvalidUri,\n    /// An OAS DID field is malformed (\u00a75.3).\n    InvalidDid,\n    /// A `*_env` field is not a valid environment variable name (\u00a75.2\n    /// discipline: env names, never values, live in manifests).\n    InvalidEnvVarName,\n    /// A required string field is empty.\n    EmptyField,\n    /// A tool identifier is not `<interface>/<action>` shaped (\u00a75.9).\n    InvalidToolIdentifier,\n    /// A tool identifier does not resolve against the host registry\n    /// supplied via [`crate::ValidationContext`] (\u00a75.9).\n    UnresolvableToolReference,\n    /// A harness with a non-empty tool allowlist declares no capability\n    /// grants (\u00a75.4).\n    EmptyCapabilityGrants,\n    /// `tools.deny_default` is absent or `false` (\u00a75.9, \u00a75.16).\n    DenyDefaultViolation,\n    /// `tools.approval_required` names a tool absent from `tools.allow`.\n    ApprovalOutsideAllowlist,\n    /// `verification.gates` is empty for a harness with a non-empty tool\n    /// allowlist (\u00a75.10 static approximation of the mutation rule).\n    EmptyVerificationGates,\n    /// A budget is absent, non-finite, or non-positive (\u00a75.8, \u00a75.16).\n    NonFiniteBudget,\n    /// `inference.route_policy` is neither `catalog:live` nor a `model:<id>`\n    /// pin (\u00a75.8).\n    InvalidRoutePolicy,\n    /// A meter key is not exactly two dot-separated segments (\u00a75.11, Garden\n    /// v4 `validate_meter_key`).\n    InvalidMeterKey,\n    /// `telemetry.event_prefix` does not match the Cambium v1 grammar\n    /// (\u00a75.12).\n    InvalidTelemetryPrefix,\n    /// `telemetry.event_prefix` requests a privileged prefix\n    /// (`policy`/`capability`/`approval`/`billing`) that a manifest must\n    /// not claim (\u00a75.12).\n    PrivilegedTelemetryPrefix,\n    /// A `telemetry.emit` entry is not `<subject...>.<verb>` shaped (\u00a75.12).\n    InvalidTelemetryEvent,\n    /// `loop.strategy` names no registered strategy (\u00a75.13).\n    UnregisteredLoopStrategy,\n    /// `spawn.child_budget_fraction_max` is non-finite or outside `(0, 1]`\n    /// (\u00a75.13).\n    InvalidBudgetFraction,\n    /// `identity.max_child_depth` exceeds the runtime maximum derivation\n    /// depth (\u00a75.3).\n    ChildDepthExceedsMaximum,\n    /// `[perception].require_signed_ir` is absent or `false` (\u00a75.14, \u00a75.16).\n    UnsignedPerceptionIr,\n    /// `[perception].modalities` is empty (\u00a75.14).\n    EmptyModalities,\n    /// `[perception].modalities` contains duplicates and is therefore not a\n    /// set (\u00a75.14).\n    DuplicateModalities,\n    /// `[perception].max_media_bytes` exceeds the provider ingest cap\n    /// (\u00a75.14: a manifest may be stricter, never looser).\n    MediaCapExceeded,\n    /// A capability grant or tool binding targets the voice surface,\n    /// violating voice zero-authority (\u00a75.15, \u00a75.16).\n    VoiceAuthorityGrant,\n    /// A `[voice]` rule was violated: `constrained_verbalization` not\n    /// `true`, or another \u00a75.15 MUST (\u00a75.15, \u00a75.16).\n    VoiceRuleViolation,\n    /// `[voice].faithfulness_sampling` is non-finite or outside `[0, 1]`\n    /// (\u00a75.15).\n    InvalidSamplingFraction,\n}",
              "documentation": "Machine-checkable codes for \u00a75 validation rules."
            }
          ]
        },
        {
          "path": "forge-rs/harness-spec/src/hash.rs",
          "sha256": "11a95242d20b94fec88fdae4254be7c313279a7c75b3002c7781e952dd0757af",
          "artifactSha256": "8cbcefc011a6fee8af28a01f97cd2945fce4affbe6b7c30641b2b441197e1697",
          "url": "/reference/source/forge-rs/harness-spec/src/hash.rs.txt",
          "declarations": [
            {
              "name": "::ManifestHash",
              "line": 18,
              "signature": "#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]\npub struct ManifestHash([u8; 32]);",
              "documentation": "BLAKE3 digest of a canonical manifest (\u00a75.16)."
            },
            {
              "name": "::ManifestHash::from_bytes",
              "line": 22,
              "signature": "pub fn from_bytes(bytes: [u8; 32]) -> Self;",
              "documentation": "Wrap a raw 32-byte digest."
            },
            {
              "name": "::ManifestHash::as_bytes",
              "line": 27,
              "signature": "pub fn as_bytes(&self) -> &[u8; 32];",
              "documentation": "The raw digest bytes."
            },
            {
              "name": "::ManifestHash::to_hex",
              "line": 32,
              "signature": "pub fn to_hex(&self) -> String;",
              "documentation": "Lowercase hex encoding (64 characters)."
            }
          ]
        },
        {
          "path": "forge-rs/harness-spec/src/lib.rs",
          "sha256": "1d466a853c5d381ccc3b4dca7af7cb16599b225995bc55d30952d548947a4b85",
          "artifactSha256": "e3b54a23ee0367c8607a2414af397432db14a1d89b7d4f112042011ded79cc2b",
          "url": "/reference/source/forge-rs/harness-spec/src/lib.rs.txt",
          "declarations": [
            {
              "name": "pub use error::{SpecError, ValidationError, Violation, ViolationCode};",
              "line": 51,
              "signature": "pub use error::{SpecError, ValidationError, Violation, ViolationCode};",
              "documentation": ""
            },
            {
              "name": "pub use hash::ManifestHash;",
              "line": 52,
              "signature": "pub use hash::ManifestHash;",
              "documentation": ""
            },
            {
              "name": "pub use manifest::{\n    CapabilitiesTable, ContextScope, ContextTable, EconomicsTable, Gate, HarnessTable,\n    IdentityTable, InferenceTable, LoopTable, Manifest, MemoryTable, PerceptionTable, PolicyTable,\n    SpawnTable, SubstrateTable, TelemetryStream, TelemetryTable, ToolsTable, VerificationTable,\n    VoiceTable,\n};",
              "line": 53,
              "signature": "pub use manifest::{\n    CapabilitiesTable, ContextScope, ContextTable, EconomicsTable, Gate, HarnessTable,\n    IdentityTable, InferenceTable, LoopTable, Manifest, MemoryTable, PerceptionTable, PolicyTable,\n    SpawnTable, SubstrateTable, TelemetryStream, TelemetryTable, ToolsTable, VerificationTable,\n    VoiceTable,\n};",
              "documentation": ""
            },
            {
              "name": "pub use validate::{\n    ToolRegistry, ValidatedManifest, ValidationContext, BUILTIN_LOOP_STRATEGIES,\n    DEFAULT_MAX_DERIVATION_DEPTH, NOUS_INGEST_CAP_BYTES,\n};",
              "line": 59,
              "signature": "pub use validate::{\n    ToolRegistry, ValidatedManifest, ValidationContext, BUILTIN_LOOP_STRATEGIES,\n    DEFAULT_MAX_DERIVATION_DEPTH, NOUS_INGEST_CAP_BYTES,\n};",
              "documentation": ""
            },
            {
              "name": "pub use vocab::{\n    AckPolicy, AsrRouteClass, BargeIn, CacheClass, ContextProvider, DataClass, Enrichment,\n    GateKind, Interjection, Isolation, MediaRetention, MemoryType, Modality, Narrowing,\n    OnBudgetExhausted, PerceptionProvider, PlaneName, PolicyEngine, RouteDecision, Settlement,\n    StreamKind, SubstrateClass, TtsRouteClass, WritePolicy,\n};",
              "line": 63,
              "signature": "pub use vocab::{\n    AckPolicy, AsrRouteClass, BargeIn, CacheClass, ContextProvider, DataClass, Enrichment,\n    GateKind, Interjection, Isolation, MediaRetention, MemoryType, Modality, Narrowing,\n    OnBudgetExhausted, PerceptionProvider, PlaneName, PolicyEngine, RouteDecision, Settlement,\n    StreamKind, SubstrateClass, TtsRouteClass, WritePolicy,\n};",
              "documentation": ""
            },
            {
              "name": "::SPEC_VERSION",
              "line": 71,
              "signature": "pub const SPEC_VERSION: &str;",
              "documentation": "The HarnessSpec revision implemented by this crate (\u00a75.1)."
            }
          ]
        },
        {
          "path": "forge-rs/harness-spec/src/manifest.rs",
          "sha256": "bbf9924ccc3f3d1cb52bb4dbeb076249b8124cf592bb644ded2f7b0414f9d068",
          "artifactSha256": "8d7f8d0dee634566e6375679be7e22984ce02e3c341c59c6264b9b2104d93311",
          "url": "/reference/source/forge-rs/harness-spec/src/manifest.rs.txt",
          "declarations": [
            {
              "name": "::Manifest",
              "line": 29,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct Manifest {\n/// Spec revision; must be `\"0.1\"` for this revision (\u00a75.1).\n\npub spec_version: String,\n/// Harness identity block (\u00a75.3).\n\npub harness: HarnessTable,\n/// Agent identity and lineage block (\u00a75.3).\n\npub identity: IdentityTable,\n/// Capability grants (\u00a75.4).\n\npub capabilities: CapabilitiesTable,\n/// Policy plane binding (\u00a75.5).\n\npub policy: PolicyTable,\n/// Context plane binding (\u00a75.6).\n\npub context: ContextTable,\n/// Optional perception ingress binding (\u00a75.14).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub perception: Option<PerceptionTable>,\n/// Memory plane binding (\u00a75.7).\n\npub memory: MemoryTable,\n/// Inference plane binding (\u00a75.8).\n\npub inference: InferenceTable,\n/// Tool policy (\u00a75.9).\n\npub tools: ToolsTable,\n/// Verification gates (\u00a75.10).\n\npub verification: VerificationTable,\n/// Economics plane binding (\u00a75.11).\n\npub economics: EconomicsTable,\n/// Telemetry plane binding (\u00a75.12).\n\npub telemetry: TelemetryTable,\n/// Execution substrate class (\u00a75.13).\n\npub substrate: SubstrateTable,\n/// Loop strategy configuration (\u00a75.13).\n\npub r#loop: LoopTable,\n/// Child-harness spawn policy (\u00a75.13).\n\npub spawn: SpawnTable,\n/// Optional voice surface binding (\u00a75.15).\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub voice: Option<VoiceTable>\n}",
              "documentation": "A complete HarnessSpec v0.1 manifest (\u00a75.1).\n\n`[perception]` and `[voice]` are the only optional tables: a manifest\nwithout `[perception]` declares a text-only harness; a manifest without\n`[voice]` declares a harness against which hosts must not open a voice\nsession."
            },
            {
              "name": "::Manifest::from_toml",
              "line": 74,
              "signature": "pub fn from_toml(source: &str) -> Result<Self, SpecError>;",
              "documentation": "Parse a TOML manifest, rejecting unknown tables, unknown keys,\nunknown enum variants, and ill-typed values (\u00a75.16 strict mode).\n\nThis is the structural layer only; call [`Manifest::validate`] for\nthe semantic \u00a75 rules."
            },
            {
              "name": "::Manifest::validate",
              "line": 81,
              "signature": "pub fn validate(&self) -> Result<ValidatedManifest, SpecError>;",
              "documentation": "Validate against the \u00a75 semantic rules with the default\n[`ValidationContext`], returning a sealed [`ValidatedManifest`] that\ncarries the canonical form and BLAKE3 manifest hash."
            },
            {
              "name": "::Manifest::validate_with",
              "line": 87,
              "signature": "pub fn validate_with(\n        &self,\n        context: &ValidationContext,\n    ) -> Result<ValidatedManifest, SpecError>;",
              "documentation": "Validate against the \u00a75 semantic rules with an explicit\n[`ValidationContext`]."
            },
            {
              "name": "::HarnessTable",
              "line": 98,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct HarnessTable {\n/// Stable harness URI (e.g. `harness://l1fe/one/brownfield-coder`).\n\npub id: String,\n/// Human-readable name.\n\npub name: String,\n/// Harness version (SemVer).\n\npub version: String,\n/// Human-readable description.\n\npub description: String,\n/// Accountable owner: an OAS DID of kind `hmr`, or an entity whose\n\n/// lineage terminates at one (lineage termination is verified at bind\n\n/// time, not by this crate).\n\npub owner: String\n}",
              "documentation": "`[harness]` \u2014 harness identity (\u00a75.3)."
            },
            {
              "name": "::IdentityTable",
              "line": 116,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct IdentityTable {\n/// The harness's OAS DID.\n\npub did: String,\n/// Lineage proof reference; must resolve to a chain terminating at\n\n/// `[harness].owner`'s human root (resolution is a bind-time concern).\n\npub lineage_proof: String,\n/// Maximum child derivation depth; must not exceed the runtime's\n\n/// configured maximum (ANVIL default 16).\n\npub max_child_depth: u32\n}",
              "documentation": "`[identity]` \u2014 agent identity and lineage (\u00a75.3)."
            },
            {
              "name": "::CapabilitiesTable",
              "line": 132,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct CapabilitiesTable {\n/// ACT grant URIs (e.g. `arsenal://act/one-coder/repo-rw`). Must be\n\n/// non-empty for any harness with a non-empty tool allowlist.\n\npub act_refs: Vec<String>\n}",
              "documentation": "`[capabilities]` \u2014 Arsenal ACT grant references (\u00a75.4).\n\nGrants are references; secret material must never appear in a manifest."
            },
            {
              "name": "::PolicyTable",
              "line": 141,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct PolicyTable {\n/// Policy engine provider.\n\npub engine: PolicyEngine,\n/// Policy document references (e.g. `lanes://policy/source-code-private`).\n\npub policy_refs: Vec<String>,\n/// Allowed Cambium data classes; a subset of the frozen vocabulary.\n\npub data_classes_allowed: Vec<DataClass>\n}",
              "documentation": "`[policy]` \u2014 policy plane binding (\u00a75.5)."
            },
            {
              "name": "::ContextTable",
              "line": 153,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct ContextTable {\n/// Context provider (`lanes` or `static`).\n\npub provider: ContextProvider,\n/// Environment variable holding the provider base URL. Required when\n\n/// `provider = \"lanes\"`; meaningless for `static`.\n\n#[serde(default, skip_serializing_if = \"Option::is_none\")]\npub base_url_env: Option<String>,\n/// Tenant scope for context requests.\n\npub scope: ContextScope,\n/// Hard cap per packed frame, in tokens. Enforced at pack time.\n\npub frame_budget_tokens: u64,\n/// Answer-vs-model-call routing decision owner.\n\npub route_decision: RouteDecision,\n/// Cache classes the context plane may use.\n\n#[serde(default)]\npub cache_classes: Vec<CacheClass>\n}",
              "documentation": "`[context]` \u2014 context plane binding (\u00a75.6)."
            },
            {
              "name": "::ContextScope",
              "line": 174,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\", deny_unknown_fields)]\npub struct ContextScope {\n/// Platform identifier.\n\npub platform_id: String,\n/// Organization identifier.\n\npub organization_id: String,\n/// Project identifier.\n\npub project_id: String\n}",
              "documentation": "Tenant scope carried on context requests (\u00a75.6)."
            },
            {
              "name": "::PerceptionTable",
              "line": 186,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct PerceptionTable {\n/// Perception provider (`nous` in v0.1).\n\npub provider: PerceptionProvider,\n/// Environment variable holding the provider base URL.\n\npub base_url_env: String,\n/// Ingest modalities; a non-empty subset of the Nous ingest surfaces.\n\npub modalities: Vec<Modality>,\n/// Enrichment mode; `deterministic` only in v0.1 (`ml` is reserved for\n\n/// Ring 2 and rejected).\n\npub enrichment: Enrichment,\n/// Fail-closed signed-IR requirement; must be `true` in v0.1.\n\npub require_signed_ir: bool,\n/// Per-artifact media cap in bytes; finite, and never looser than the\n\n/// provider's own ingest cap (Nous ships 64 MiB).\n\npub max_media_bytes: u64,\n/// Route derived IR/embeddings to the `[memory]` mind via the\n\n/// provider's MIND emission path.\n\npub emit_to_memory: bool,\n/// Source-media retention discipline.\n\npub retention: MediaRetention\n}",
              "documentation": "`[perception]` \u2014 OPTIONAL perception ingress binding (\u00a75.14)."
            },
            {
              "name": "::MemoryTable",
              "line": 211,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct MemoryTable {\n/// Memory provider (e.g. `akasha`).\n\npub provider: String,\n/// Mind URI (e.g. `akasha://minds/one-coder`).\n\npub mind: String,\n/// Active memory types; a subset of the Akasha vocabulary.\n\npub types: Vec<MemoryType>,\n/// Write policy governing the memory plane.\n\npub write_policy: WritePolicy\n}",
              "documentation": "`[memory]` \u2014 memory plane binding (\u00a75.7)."
            },
            {
              "name": "::InferenceTable",
              "line": 225,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct InferenceTable {\n/// Inference provider (e.g. `foundry`).\n\npub provider: String,\n/// Environment variable holding the provider base URL.\n\npub base_url_env: String,\n/// Route policy: `catalog:live` (recommended) or a `model:<id>` pin\n\n/// that fails closed when the route is no longer offered.\n\npub route_policy: String,\n/// IAM permission required to invoke inference (frozen wire vocabulary).\n\npub required_permission: String,\n/// Entitlement consumed by inference calls.\n\npub entitlement: String,\n/// USD budget cap; present and finite.\n\npub budget_usd: f64,\n/// Token budget cap; present and finite.\n\npub budget_tokens: u64,\n/// Behavior on budget exhaustion (default `halt_and_settle`).\n\n#[serde(default)]\npub on_budget_exhausted: OnBudgetExhausted\n}",
              "documentation": "`[inference]` \u2014 inference plane binding (\u00a75.8)."
            },
            {
              "name": "::ToolsTable",
              "line": 249,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct ToolsTable {\n/// Must be present and `true` in v0.1: there is no allow-by-default\n\n/// harness.\n\npub deny_default: bool,\n/// Allowlisted `<interface>/<action>` tool identifiers, resolved against\n\n/// the host's interface/tool registry at validation.\n\n#[serde(default)]\npub allow: Vec<String>,\n/// Tools whose every invocation requires a human (or designated\n\n/// approver-harness) decision through the host's approval surface.\n\n#[serde(default)]\npub approval_required: Vec<String>\n}",
              "documentation": "`[tools]` \u2014 tool policy (\u00a75.9)."
            },
            {
              "name": "::VerificationTable",
              "line": 266,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct VerificationTable {\n/// Binds the L1F-8 honesty policy: evidence refs pass through verbatim\n\n/// or are absent \u2014 never synthesized.\n\npub evidence_required: bool,\n/// Verification gates; must be non-empty for any harness that can\n\n/// mutate state outside its own memory plane.\n\npub gates: Vec<Gate>\n}",
              "documentation": "`[verification]` \u2014 verification gates (\u00a75.10)."
            },
            {
              "name": "::Gate",
              "line": 278,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct Gate {\n/// Gate kind (`command` in v0.1).\n\npub kind: GateKind,\n/// The command to execute; exit code plus captured output ref are the\n\n/// minimum machine-checkable evidence.\n\npub run: String\n}",
              "documentation": "A single verification gate (\u00a75.10)."
            },
            {
              "name": "::EconomicsTable",
              "line": 289,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct EconomicsTable {\n/// Settlement provider (`garden` in v0.1).\n\npub settlement: Settlement,\n/// Meter map; every value must satisfy the Garden v4 two-segment\n\n/// meter-key rule (`<platform>.<meter>`).\n\npub meters: BTreeMap<String, String>,\n/// Idempotency key discipline for replay-safe usage events.\n\npub idempotency: String\n}",
              "documentation": "`[economics]` \u2014 economics plane binding (\u00a75.11)."
            },
            {
              "name": "::TelemetryTable",
              "line": 302,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct TelemetryTable {\n/// Telemetry provider (e.g. `cambium`).\n\npub provider: String,\n/// Stream binding; the stream id is derived server-side.\n\npub stream: TelemetryStream,\n/// Event type prefix; must conform to the Cambium v1 grammar\n\n/// (`ai.cambium.<platform>.<subject...>`) and must not request a\n\n/// privileged prefix.\n\npub event_prefix: String,\n/// Event subjects emitted under the prefix (`<subject...>.<verb>`).\n\npub emit: Vec<String>\n}",
              "documentation": "`[telemetry]` \u2014 telemetry plane binding (\u00a75.12)."
            },
            {
              "name": "::TelemetryStream",
              "line": 318,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct TelemetryStream {\n/// Stream kind (`run` in v0.1).\n\npub kind: StreamKind\n}",
              "documentation": "Telemetry stream binding (\u00a75.12)."
            },
            {
              "name": "::SubstrateTable",
              "line": 329,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct SubstrateTable {\n/// Substrate class.\n\npub class: SubstrateClass,\n/// Isolation class.\n\npub isolation: Isolation\n}",
              "documentation": "`[substrate]` \u2014 execution substrate class (\u00a75.13).\n\nSelects a substrate *class*, never a deployment target; infrastructure\nplatforms (Zaps, Silos, Hives, Beacons, Relays) are not valid values."
            },
            {
              "name": "::LoopTable",
              "line": 339,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct LoopTable {\n/// A registered loop strategy (`react`, `microdag`, `plan_execute`, or\n\n/// one registered with the validation context). Strategies receive\n\n/// plane handles already bound and narrowed; they cannot widen\n\n/// authority.\n\npub strategy: String,\n/// Maximum loop steps.\n\npub max_steps: u64,\n/// Human Interjection Protocol toggle.\n\npub interjection: Interjection\n}",
              "documentation": "`[loop]` \u2014 loop strategy configuration (\u00a75.13)."
            },
            {
              "name": "::SpawnTable",
              "line": 354,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct SpawnTable {\n/// Whether this harness may spawn children.\n\npub allowed: bool,\n/// Narrowing mode; `strict` in v0.1 (child authority \u2286 parent).\n\npub narrowing: Narrowing,\n/// Maximum fraction of the parent's remaining budget any child may\n\n/// receive; enforced by the economics plane, not by strategy code.\n\npub child_budget_fraction_max: f64,\n/// Planes whose bindings children inherit.\n\n#[serde(default)]\npub inherit: Vec<PlaneName>\n}",
              "documentation": "`[spawn]` \u2014 child-harness spawn policy (\u00a75.13)."
            },
            {
              "name": "::VoiceTable",
              "line": 374,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(deny_unknown_fields)]\npub struct VoiceTable {\n/// ASR route class, resolved via the `[inference]` live catalog.\n\npub asr_route_class: AsrRouteClass,\n/// TTS route class, resolved via the `[inference]` live catalog.\n\npub tts_route_class: TtsRouteClass,\n/// Acknowledgment track policy.\n\npub ack_policy: AckPolicy,\n/// Barge-in behavior; `interrupt` is the only v0.1 value.\n\npub barge_in: BargeIn,\n/// Spoken-register paraphrase constraint; must be `true` in v0.1.\n\npub constrained_verbalization: bool,\n/// Fraction of TTS utterances round-tripped and semantically diffed;\n\n/// must lie in `[0, 1]`.\n\npub faithfulness_sampling: f64,\n/// Maximum utterance length in seconds; finite.\n\npub max_utterance_seconds: u64,\n/// Voice meter map; values follow the Garden two-segment rule (\u00a75.11).\n\npub meters: BTreeMap<String, String>\n}",
              "documentation": "`[voice]` \u2014 OPTIONAL voice surface binding (\u00a75.15).\n\nVoice is a surface binding, not an authority plane: it binds no\n`act_refs`, appears in no `[tools].allow` entry, and invokes no tool\nother than the host-mediated `ask_brain()`."
            }
          ]
        },
        {
          "path": "forge-rs/harness-spec/src/validate.rs",
          "sha256": "466a41039055a593d337c69a74295556b6317d7ef9e0ae2c85a777446363aa02",
          "artifactSha256": "cb08730c77ef06461a0414cebd1ca40871e54c2e52304a08eeddcfcbe12f6e09",
          "url": "/reference/source/forge-rs/harness-spec/src/validate.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_MAX_DERIVATION_DEPTH",
              "line": 21,
              "signature": "pub const DEFAULT_MAX_DERIVATION_DEPTH: u32;",
              "documentation": "Default runtime maximum derivation depth (ANVIL default, \u00a75.3)."
            },
            {
              "name": "::NOUS_INGEST_CAP_BYTES",
              "line": 25,
              "signature": "pub const NOUS_INGEST_CAP_BYTES: u64;",
              "documentation": "Nous provider ingest cap: 64 MiB (\u00a75.14). A manifest may be stricter\nthan the provider's cap; it must never be looser."
            },
            {
              "name": "::BUILTIN_LOOP_STRATEGIES",
              "line": 28,
              "signature": "pub const BUILTIN_LOOP_STRATEGIES: [&str; 3];",
              "documentation": "Loop strategies registered by default in v0.1 (\u00a75.13)."
            },
            {
              "name": "::ToolRegistry",
              "line": 41,
              "signature": "pub trait ToolRegistry: Send + Sync {\n    /// True when `<interface>/<action>` resolves against the host registry.\n    fn contains(&self, tool: &str) -> bool;\n}",
              "documentation": "Host interface/tool registry used to resolve `[tools].allow` entries at\nvalidation time (\u00a75.9).\n\nThe crate ships no registry of its own \u2014 tool resolution is a host\nobligation. When a registry is supplied via\n[`ValidationContext::with_tool_registry`], unresolvable entries reject\nthe manifest; without one, only the identifier shape is checked."
            },
            {
              "name": "::ValidationContext",
              "line": 49,
              "signature": "#[derive(Clone)]\npub struct ValidationContext {\n\n}",
              "documentation": "Validation inputs that are runtime- or host-supplied rather than\nmanifest-supplied."
            },
            {
              "name": "::ValidationContext::new",
              "line": 71,
              "signature": "pub fn new() -> Self;",
              "documentation": "A context with v0.1 defaults (ANVIL depth 16, builtin strategies, no\ntool registry)."
            },
            {
              "name": "::ValidationContext::with_max_derivation_depth",
              "line": 76,
              "signature": "pub fn with_max_derivation_depth(mut self, max: u32) -> Self;",
              "documentation": "Override the runtime maximum derivation depth (\u00a75.3)."
            },
            {
              "name": "::ValidationContext::with_additional_loop_strategies",
              "line": 82,
              "signature": "pub fn with_additional_loop_strategies<I, S>(mut self, strategies: I) -> Self\n    where\n        I: IntoIterator<Item = S>,\n        S: Into<String>,;",
              "documentation": "Register additional loop strategies beyond the v0.1 builtins (\u00a75.13)."
            },
            {
              "name": "::ValidationContext::with_tool_registry",
              "line": 93,
              "signature": "pub fn with_tool_registry(mut self, registry: Arc<dyn ToolRegistry>) -> Self;",
              "documentation": "Supply the host interface/tool registry for \u00a75.9 ref resolution."
            },
            {
              "name": "::ValidationContext::max_derivation_depth",
              "line": 99,
              "signature": "pub fn max_derivation_depth(&self) -> u32;",
              "documentation": "The configured runtime maximum derivation depth."
            },
            {
              "name": "::ValidatedManifest",
              "line": 123,
              "signature": "#[derive(Debug, Clone)]\npub struct ValidatedManifest {\n\n}",
              "documentation": "A manifest that passed \u00a75 structural and semantic validation.\n\nSealing computes the canonical form and BLAKE3 manifest hash once, so\ndownstream consumers (telemetry, settlement, archives) always see the\nsame contract identity (\u00a75.16)."
            },
            {
              "name": "::ValidatedManifest::from_toml",
              "line": 132,
              "signature": "pub fn from_toml(source: &str) -> Result<Self, SpecError>;",
              "documentation": "Parse and validate a TOML manifest with the default\n[`ValidationContext`]."
            },
            {
              "name": "::ValidatedManifest::from_toml_with",
              "line": 138,
              "signature": "pub fn from_toml_with(source: &str, context: &ValidationContext) -> Result<Self, SpecError>;",
              "documentation": "Parse and validate a TOML manifest with an explicit\n[`ValidationContext`]."
            },
            {
              "name": "::ValidatedManifest::manifest",
              "line": 143,
              "signature": "pub fn manifest(&self) -> &Manifest;",
              "documentation": "The validated manifest."
            },
            {
              "name": "::ValidatedManifest::into_manifest",
              "line": 148,
              "signature": "pub fn into_manifest(self) -> Manifest;",
              "documentation": "Consume the seal and return the manifest."
            },
            {
              "name": "::ValidatedManifest::canonical_json",
              "line": 154,
              "signature": "pub fn canonical_json(&self) -> &str;",
              "documentation": "Canonical JSON projection (sorted keys, no whitespace, no env\nresolution) \u2014 the hashed byte form (\u00a75.16)."
            },
            {
              "name": "::ValidatedManifest::manifest_hash",
              "line": 160,
              "signature": "pub fn manifest_hash(&self) -> ManifestHash;",
              "documentation": "BLAKE3 hash of the canonical form; identifies the harness contract\nin telemetry, settlement, and archives (\u00a75.16)."
            }
          ]
        },
        {
          "path": "forge-rs/harness-spec/src/vocab.rs",
          "sha256": "249cf3a4fb944ace365a25d0505454f570dde8182be05c497bdca3e747fc81b9",
          "artifactSha256": "e8684435058352b812397bf0fa59314365f5908854896c7643ced166d47d096a",
          "url": "/reference/source/forge-rs/harness-spec/src/vocab.rs.txt",
          "declarations": [
            {
              "name": "::PolicyEngine",
              "line": 11,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PolicyEngine {\n    /// Lanes governed information-flow (builtin evaluator or Cedar backend).\n    Lanes,\n    /// Eden Logos capability/risk evaluation.\n    Logos,\n}",
              "documentation": "Policy plane provider (\u00a75.5)."
            },
            {
              "name": "::DataClass",
              "line": 24,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum DataClass {\n    /// Public information.\n    Public,\n    /// Tenant-internal information.\n    TenantInternal,\n    /// Personal data.\n    PersonalData,\n    /// Credentials and secrets.\n    Credentials,\n    /// Payment data.\n    PaymentData,\n    /// Regulated data.\n    Regulated,\n    /// Customer-secret data.\n    CustomerSecret,\n    /// Private source code.\n    SourceCodePrivate,\n    /// Model-prompt-sensitive data.\n    ModelPromptSensitive,\n    /// Legally privileged material.\n    LegalPrivileged,\n}",
              "documentation": "Frozen Cambium v1 data-class vocabulary (\u00a75.5).\n\n`data_classes_allowed` must be a subset of this set; content carrying a\nclass outside the declared subset must not be delivered into the harness."
            },
            {
              "name": "::ContextProvider",
              "line": 50,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ContextProvider {\n    /// Lanes context plane (cache/local/model routing).\n    Lanes,\n    /// A pinned, hashed context bundle for air-gapped runs.\n    #[serde(rename = \"static\")]\n    Static,\n}",
              "documentation": "Context plane provider (\u00a75.6)."
            },
            {
              "name": "::RouteDecision",
              "line": 63,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum RouteDecision {\n    /// Lanes decides answer-vs-model-call routing.\n    Lanes,\n}",
              "documentation": "Context routing decision (\u00a75.6).\n\nv0.1 defines only `lanes`: the context plane decides cache/local/model."
            },
            {
              "name": "::CacheClass",
              "line": 71,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum CacheClass {\n    /// Exact-match cache.\n    Exact,\n    /// Semantic-similarity cache.\n    Semantic,\n    /// Perceptual cache.\n    Perceptual,\n}",
              "documentation": "Inference cache classes (\u00a75.6), mirroring the Foundry cache layers."
            },
            {
              "name": "::PerceptionProvider",
              "line": 83,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PerceptionProvider {\n    /// Nous perception ingress.\n    Nous,\n}",
              "documentation": "Perception plane provider (\u00a75.14). Only Nous ships in v0.1."
            },
            {
              "name": "::Modality",
              "line": 92,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Modality {\n    /// Text ingest.\n    Text,\n    /// Image ingest.\n    Image,\n    /// Audio ingest.\n    Audio,\n    /// Video ingest.\n    Video,\n    /// OCR ingest.\n    Ocr,\n    /// Sensor ingest.\n    Sensor,\n}",
              "documentation": "Nous ingest modalities (\u00a75.14) \u2014 exactly the ingest surfaces the Nous\nservice ships (`POST /v1/ingest/{text,image,audio,video,ocr,sensor}`)."
            },
            {
              "name": "::Enrichment",
              "line": 114,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Enrichment {\n    /// Deterministic baselines (dHash, STFT, container metadata, OCR\n    /// edge-density, sensor statistics).\n    Deterministic,\n}",
              "documentation": "Perception enrichment mode (\u00a75.14).\n\nOnly `deterministic` ships in v0.1. The reserved value `ml` (Ring 2) is\ndeliberately absent so v0.1 validators reject it instead of silently\ndowngrading."
            },
            {
              "name": "::MediaRetention",
              "line": 123,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum MediaRetention {\n    /// Source bytes evicted from the provider CAS at archive.\n    TaskScoped,\n    /// Source media custody transferred to Lockers.\n    Custodial,\n}",
              "documentation": "Perception source-media retention (\u00a75.14)."
            },
            {
              "name": "::MemoryType",
              "line": 133,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum MemoryType {\n    /// Episodic memory.\n    Episodic,\n    /// Procedural memory.\n    Procedural,\n    /// Resource memory.\n    Resource,\n    /// Knowledge vault.\n    KnowledgeVault,\n}",
              "documentation": "Akasha memory types (\u00a75.7)."
            },
            {
              "name": "::WritePolicy",
              "line": 147,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum WritePolicy {\n    /// Read-only memory plane.\n    None,\n    /// Episodic writes during the run; vault consolidation gated on\n    /// verification.\n    TaskScoped,\n    /// Unrestricted writes (development only; hosts may refuse).\n    Unrestricted,\n}",
              "documentation": "Memory write policy (\u00a75.7)."
            },
            {
              "name": "::OnBudgetExhausted",
              "line": 160,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum OnBudgetExhausted {\n    /// Halt the run and settle usage (default).\n    #[default]\n    HaltAndSettle,\n    /// Surface an approval to extend; extension mints a new budget epoch.\n    RequestApproval,\n}",
              "documentation": "Behavior when an inference budget is exhausted (\u00a75.8)."
            },
            {
              "name": "::GateKind",
              "line": 171,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum GateKind {\n    /// A shell command whose exit code and captured output are the evidence.\n    Command,\n}",
              "documentation": "Verification gate kind (\u00a75.10). v0.1 ships command gates only."
            },
            {
              "name": "::Settlement",
              "line": 179,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Settlement {\n    /// Garden settlement.\n    Garden,\n}",
              "documentation": "Settlement provider (\u00a75.11). Garden is the only v0.1 value."
            },
            {
              "name": "::StreamKind",
              "line": 187,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum StreamKind {\n    /// A run stream; the stream id is derived server-side.\n    Run,\n}",
              "documentation": "Telemetry stream kind (\u00a75.12)."
            },
            {
              "name": "::SubstrateClass",
              "line": 199,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SubstrateClass {\n    /// Flocks agent workload fabric.\n    Flocks,\n    /// Omega WASM/MicroVM orchestration.\n    Omega,\n    /// Stations.\n    Stations,\n    /// Local process (development).\n    LocalProcess,\n}",
              "documentation": "Execution substrate *class* (\u00a75.13) \u2014 never a deployment target.\n\nInfrastructure substrate platforms (Zaps, Silos, Hives, Beacons, Relays)\nare deliberately absent from this vocabulary: naming one is a\nfail-closed parse rejection."
            },
            {
              "name": "::Isolation",
              "line": 213,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Isolation {\n    /// Process isolation.\n    Process,\n    /// Jail isolation.\n    Jail,\n    /// MicroVM isolation.\n    Microvm,\n}",
              "documentation": "Substrate isolation class (\u00a75.13)."
            },
            {
              "name": "::Narrowing",
              "line": 226,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Narrowing {\n    /// Strict narrowing; child authority \u2286 parent authority.\n    Strict,\n}",
              "documentation": "Spawn narrowing mode (\u00a75.13). Only `strict` exists in v0.1: child\nauthority is a subset of parent authority (no-amplification)."
            },
            {
              "name": "::PlaneName",
              "line": 234,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PlaneName {\n    /// Policy plane.\n    Policy,\n    /// Context plane.\n    Context,\n    /// Perception plane.\n    Perception,\n    /// Memory plane.\n    Memory,\n    /// Inference plane.\n    Inference,\n    /// Tools plane.\n    Tools,\n    /// Verification plane.\n    Verification,\n    /// Economics plane.\n    Economics,\n    /// Telemetry plane.\n    Telemetry,\n    /// Substrate plane.\n    Substrate,\n}",
              "documentation": "Plane names a child harness may inherit bindings for (\u00a75.13 `[spawn]`)."
            },
            {
              "name": "::Interjection",
              "line": 260,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Interjection {\n    /// Interjection honored.\n    Enabled,\n    /// Interjection disabled.\n    Disabled,\n}",
              "documentation": "Human Interjection Protocol toggle (\u00a75.13 `[loop]`)."
            },
            {
              "name": "::AckPolicy",
              "line": 270,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum AckPolicy {\n    /// Host/client-side canned audio; never touches inference or economics.\n    ClientLocal,\n    /// Server-templated acknowledgment.\n    Scripted,\n    /// A fast catalog route; metered like any inference call.\n    Model,\n}",
              "documentation": "Voice acknowledgment track (\u00a75.15)."
            },
            {
              "name": "::BargeIn",
              "line": 284,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum BargeIn {\n    /// Cancel TTS and brain streams on user speech.\n    Interrupt,\n}",
              "documentation": "Barge-in behavior (\u00a75.15). `interrupt` is the only v0.1 value: user\nspeech during playback must cancel both the TTS stream and the\nin-flight brain stream."
            },
            {
              "name": "::AsrRouteClass",
              "line": 293,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum AsrRouteClass {\n    /// Audio transcription route class.\n    AudioTranscription,\n}",
              "documentation": "ASR route class resolvable through the inference plane's live catalog\n(\u00a75.15). v0.1 ships `audio_transcription`."
            },
            {
              "name": "::TtsRouteClass",
              "line": 302,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TtsRouteClass {\n    /// Speech synthesis route class.\n    SpeechSynthesis,\n}",
              "documentation": "TTS route class resolvable through the inference plane's live catalog\n(\u00a75.15). v0.1 ships `speech_synthesis`."
            }
          ]
        }
      ]
    },
    {
      "name": "harness-runtime",
      "language": "rust",
      "version": "0.1.0",
      "description": "HarnessSpec v0.1 execution runtime \u2014 plane adapter traits, admission gate, loop strategies, no-amplification child spawning, and serde-stable run records (FINAL_SPEC \u00a74)",
      "manifest": "forge-rs/harness-runtime/Cargo.toml",
      "manifestSha256": "99cb4adcbbfd2cb9fef70641eaeb258bc42de053dfa450bb83477b03b88a294a",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/harness-runtime",
      "features": {},
      "files": [
        {
          "path": "forge-rs/harness-runtime/src/admission.rs",
          "sha256": "ebc19b872afdf0f6f23f6e10adda41d045dae1cc9dfc7767e1f3eeb15e3ccc29",
          "artifactSha256": "567b4faab455c9066434de3893166c963ced5157233807a3ac742d7c87772ae4",
          "url": "/reference/source/forge-rs/harness-runtime/src/admission.rs.txt",
          "declarations": [
            {
              "name": "::RunContext",
              "line": 35,
              "signature": "#[derive(Debug, Clone)]\npub struct RunContext {\n/// Derivation depth (0 for a root harness; \u00a74.5).\n\npub depth: u32,\n/// Parent run id for spawned children.\n\npub parent_run_id: Option<String>,\n/// The run's trace context, propagated to every provider call.\n\npub trace: TraceContext\n}",
              "documentation": "Runtime-scoped run context: where this run sits in the delegation\ntree and which trace it belongs to."
            },
            {
              "name": "::RunContext::root",
              "line": 46,
              "signature": "pub fn root() -> Self;",
              "documentation": "A root run (depth 0, fresh trace)."
            },
            {
              "name": "::RunContext::child",
              "line": 55,
              "signature": "pub fn child(\n        parent_run_id: impl Into<String>,\n        depth: u32,\n        parent_trace: &TraceContext,\n    ) -> Self;",
              "documentation": "A child run (parent run id, depth, fresh span in the parent trace)."
            },
            {
              "name": "::AdmissionRequest",
              "line": 70,
              "signature": "#[derive(Debug)]\npub struct AdmissionRequest {\n/// The sealed manifest (already \u00a75-validated by `harness-spec`).\n\npub manifest: ValidatedManifest,\n/// The plane providers bound for this run.\n\npub planes: PlaneRegistry,\n/// Where this run sits in the delegation tree.\n\npub run_context: RunContext\n}",
              "documentation": "Everything admission needs to decide."
            },
            {
              "name": "::AdmittedHarness",
              "line": 85,
              "signature": "#[derive(Debug)]\npub struct AdmittedHarness {\n\n}",
              "documentation": "A harness that passed admission: contract sealed, planes bound,\nidentity verified, policy authorized, budget reserved.\n\nThe only way to obtain one is [`HarnessAdmission::admit`]; loop\nstrategies consume it and cannot widen its authority (\u00a75.13)."
            },
            {
              "name": "::AdmittedHarness::run_id",
              "line": 97,
              "signature": "pub fn run_id(&self) -> &str;",
              "documentation": "The run id minted at admission."
            },
            {
              "name": "::AdmittedHarness::manifest",
              "line": 102,
              "signature": "pub fn manifest(&self) -> &ValidatedManifest;",
              "documentation": "The sealed manifest."
            },
            {
              "name": "::AdmittedHarness::planes",
              "line": 107,
              "signature": "pub fn planes(&self) -> &PlaneRegistry;",
              "documentation": "The bound planes."
            },
            {
              "name": "::AdmittedHarness::budget",
              "line": 112,
              "signature": "pub fn budget(&self) -> &BudgetLedger;",
              "documentation": "The run budget ledger (opened from the reservation grant)."
            },
            {
              "name": "::AdmittedHarness::budget_mut",
              "line": 117,
              "signature": "pub fn budget_mut(&mut self) -> &mut BudgetLedger;",
              "documentation": "Mutable ledger access for child budget carving (\u00a74.5)."
            },
            {
              "name": "::AdmittedHarness::evidence",
              "line": 122,
              "signature": "pub fn evidence(&self) -> &AdmissionEvidence;",
              "documentation": "Admission evidence."
            },
            {
              "name": "::AdmittedHarness::context",
              "line": 127,
              "signature": "pub fn context(&self) -> &RunContext;",
              "documentation": "The run context (depth, parent, trace)."
            },
            {
              "name": "::AdmittedHarness::started_at",
              "line": 132,
              "signature": "pub fn started_at(&self) -> DateTime<Utc>;",
              "documentation": "Admission time."
            },
            {
              "name": "::AdmittedHarness::execute",
              "line": 138,
              "signature": "pub async fn execute(\n        self,\n        strategies: &StrategyRegistry,\n        task: impl Into<String>,\n    ) -> Result<RunRecord, RuntimeError>;",
              "documentation": "Execute the admitted harness with its manifest's loop strategy,\nproducing the terminal [`RunRecord`] (\u00a74.4 steps 4\u20137)."
            },
            {
              "name": "::AdmittedHarness::into_parts",
              "line": 156,
              "signature": "pub fn into_parts(self) -> AdmittedParts;",
              "documentation": "Consume the admitted harness into its parts (for strategy drivers)."
            },
            {
              "name": "::AdmittedParts",
              "line": 174,
              "signature": "#[derive(Debug)]\npub struct AdmittedParts {\n/// The run id minted at admission.\n\npub run_id: String,\n/// The sealed manifest.\n\npub manifest: ValidatedManifest,\n/// The bound planes.\n\npub planes: PlaneRegistry,\n/// The run budget ledger.\n\npub budget: BudgetLedger,\n/// Admission evidence.\n\npub evidence: AdmissionEvidence,\n/// The run context.\n\npub context: RunContext,\n/// Admission time.\n\npub started_at: DateTime<Utc>\n}",
              "documentation": "The decomposed admitted harness, for strategies that consume it\n([`AdmittedHarness::into_parts`]). Fields are plain data; the strategy\nstill cannot widen authority \u2014 it holds plane handles already bound\nand narrowed (\u00a75.13)."
            },
            {
              "name": "::HarnessAdmission",
              "line": 193,
              "signature": "#[derive(Debug, Clone)]\npub struct HarnessAdmission {\n\n}",
              "documentation": "The admission gate."
            },
            {
              "name": "::HarnessAdmission::new",
              "line": 201,
              "signature": "pub fn new(strategies: StrategyRegistry, context: ValidationContext) -> Self;",
              "documentation": "An admission gate with an explicit strategy registry and\nvalidation context."
            },
            {
              "name": "::HarnessAdmission::with_defaults",
              "line": 210,
              "signature": "pub fn with_defaults() -> Self;",
              "documentation": "An admission gate with the builtin strategies (`react`) and the\ndefault validation context."
            },
            {
              "name": "::HarnessAdmission::validation_context",
              "line": 218,
              "signature": "pub fn validation_context(&self) -> &ValidationContext;",
              "documentation": "The validation context (used for `admit_toml` and child spawning)."
            },
            {
              "name": "::HarnessAdmission::admit_toml",
              "line": 225,
              "signature": "pub async fn admit_toml(\n        &self,\n        source: &str,\n        planes: PlaneRegistry,\n        run_context: RunContext,\n    ) -> Result<AdmittedHarness, AdmissionError>;",
              "documentation": "Parse, validate, and admit a raw TOML manifest. Validation failure\nis denial (\u00a75.16: a conforming runtime must refuse to execute a\nmanifest that fails validation)."
            },
            {
              "name": "::HarnessAdmission::admit",
              "line": 243,
              "signature": "pub async fn admit(\n        &self,\n        request: AdmissionRequest,\n    ) -> Result<AdmittedHarness, AdmissionError>;",
              "documentation": "Admit a sealed manifest: the ordered fail-closed gate described in\nthe module docs."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/budget.rs",
          "sha256": "912ba2f1d2b87b0d48c761457541f8a16bf65595a8a184ab95a98c22f2cdfd61",
          "artifactSha256": "fe6a823d157dc08f1125a98bd619d0091e7a53f72032901f61ac71e5257aad22",
          "url": "/reference/source/forge-rs/harness-runtime/src/budget.rs.txt",
          "declarations": [
            {
              "name": "::BudgetLedger",
              "line": 21,
              "signature": "#[derive(Debug, Clone)]\npub struct BudgetLedger {\n\n}",
              "documentation": "Per-run budget ledger initialized from the admission reservation grant.\n\nThe ledger is deliberately not serializable into the run record: what\narchives is the terminal [`UsageTotals`] snapshot\n([`BudgetLedger::usage`])."
            },
            {
              "name": "::BudgetLedger::new",
              "line": 34,
              "signature": "pub fn new(granted_usd: f64, granted_tokens: u64, on_exhausted: OnBudgetExhausted) -> Self;",
              "documentation": "Open a ledger for the granted reservation."
            },
            {
              "name": "::BudgetLedger::remaining_usd",
              "line": 48,
              "signature": "pub fn remaining_usd(&self) -> f64;",
              "documentation": "Remaining USD."
            },
            {
              "name": "::BudgetLedger::remaining_tokens",
              "line": 53,
              "signature": "pub fn remaining_tokens(&self) -> u64;",
              "documentation": "Remaining tokens."
            },
            {
              "name": "::BudgetLedger::on_exhausted",
              "line": 58,
              "signature": "pub fn on_exhausted(&self) -> OnBudgetExhausted;",
              "documentation": "The configured budget-exhaustion policy (\u00a75.8)."
            },
            {
              "name": "::BudgetLedger::inference_calls",
              "line": 63,
              "signature": "pub fn inference_calls(&self) -> u64;",
              "documentation": "Number of inference calls charged so far."
            },
            {
              "name": "::BudgetLedger::is_exhausted",
              "line": 68,
              "signature": "pub fn is_exhausted(&self) -> bool;",
              "documentation": "True when no further inference call may be attempted."
            },
            {
              "name": "::BudgetLedger::check_can_spend",
              "line": 75,
              "signature": "pub fn check_can_spend(&self) -> Result<(), BudgetError>;",
              "documentation": "Pre-call gate (\u00a74.4 step 4: every model call passes through the\ninference binding and decrements budget \u2014 no call is attempted once\nthe budget is exhausted)."
            },
            {
              "name": "::BudgetLedger::charge",
              "line": 88,
              "signature": "pub fn charge(&mut self, usage: &InferenceUsage);",
              "documentation": "Charge a completed inference call. The call that exhausts the\nbudget is charged in full; the next [`check_can_spend`] then fails,\nso there is no silent overrun (\u00a74.6)."
            },
            {
              "name": "::BudgetLedger::record_tool_invocation",
              "line": 99,
              "signature": "pub fn record_tool_invocation(&mut self);",
              "documentation": "Count a completed tool invocation (usage reporting only; tool\nmetering rides the manifest's meters, not the inference budget)."
            },
            {
              "name": "::BudgetLedger::carve",
              "line": 106,
              "signature": "pub fn carve(&mut self, usd: f64, tokens: u64) -> Result<(), BudgetError>;",
              "documentation": "Carve a child budget out of the remaining budget (\u00a74.5: child\nbudgets are carved out of, not added to, the parent's remaining\nbudgets). The carve is atomic: on failure the ledger is untouched."
            },
            {
              "name": "::BudgetLedger::usage",
              "line": 121,
              "signature": "pub fn usage(&self) -> UsageTotals;",
              "documentation": "Terminal usage snapshot for the run record and settlement."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/error.rs",
          "sha256": "361b9d95989945a863f253ca9e9bc6cf29477d77da98bc65dab84cd6ecd7548b",
          "artifactSha256": "36f7e7c64ba8825fe7f7b896e735f5eaa49fd3798391b0c1064a278ebba5ee56",
          "url": "/reference/source/forge-rs/harness-runtime/src/error.rs.txt",
          "declarations": [
            {
              "name": "::RuntimeError",
              "line": 18,
              "signature": "#[derive(Debug, Error)]\npub enum RuntimeError {\n    /// An operation reached a plane that is not bound to a provider.\n    #[error(transparent)]\n    PlaneUnbound(#[from] PlaneUnbound),\n\n    /// Admission denied the harness (\u00a74.4: denied is a terminal state that\n    /// still settles and archives).\n    #[error(transparent)]\n    Admission(#[from] AdmissionError),\n\n    /// Child spawning violated the spawn policy or the no-amplification\n    /// invariant (\u00a74.5).\n    #[error(transparent)]\n    Spawn(#[from] SpawnError),\n\n    /// The manifest selected a loop strategy the runtime has no driver\n    /// for (\u00a75.13: `loop.strategy` must name a registered strategy).\n    #[error(\"loop strategy {strategy:?} has no registered driver in this runtime\")]\n    StrategyUnavailable {\n        /// The strategy named by `loop.strategy`.\n        strategy: String,\n    },\n}",
              "documentation": "Top-level error type for the harness runtime.\n\nRuntime errors are contract violations: unbound planes, admission\ndenials, spawn amplifications. In-run provider failures do not surface\nhere \u2014 per \u00a74.4 they land in a terminal `halted`/`failed` run outcome\nwith settlement, never in silent continuation."
            },
            {
              "name": "::PlaneUnbound",
              "line": 46,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Error)]\n#[error(\"plane {plane} is unbound: cannot perform {operation}\")]\npub struct PlaneUnbound {\n/// The unbound plane.\n\npub plane: PlaneKind,\n/// The operation that was attempted.\n\npub operation: &'static str\n}",
              "documentation": "A plane operation was attempted against a plane with no provider\nbound (or bound to a `noop` placeholder, which fails closed)."
            },
            {
              "name": "::PlaneUnbound::new",
              "line": 55,
              "signature": "pub fn new(plane: PlaneKind, operation: &'static str) -> Self;",
              "documentation": "Construct a typed unbound-plane error."
            },
            {
              "name": "::PlaneError",
              "line": 65,
              "signature": "#[derive(Debug, Clone, PartialEq, Error)]\npub enum PlaneError {\n    /// The plane has no provider bound (noop fail-closed path).\n    #[error(transparent)]\n    Unbound(#[from] PlaneUnbound),\n\n    /// The provider is unreachable or unavailable. Per \u00a74.6, availability\n    /// is never disguised as success: admission denies, execution halts.\n    #[error(\"provider unavailable: {message}\")]\n    Unavailable {\n        /// Human-readable detail.\n        message: String,\n    },\n\n    /// The provider actively denied the request (e.g. policy miss,\n    /// insufficient entitlement).\n    #[error(\"provider denied the request: {message}\")]\n    Denied {\n        /// Human-readable detail.\n        message: String,\n    },\n\n    /// The provider did not answer within the configured timeout.\n    #[error(\"provider timed out after {timeout_ms} ms: {message}\")]\n    Timeout {\n        /// The configured timeout in milliseconds.\n        timeout_ms: u64,\n        /// Human-readable detail.\n        message: String,\n    },\n\n    /// The provider answered with a response that could not be decoded or\n    /// fails the plane's contract.\n    #[error(\"invalid provider response: {message}\")]\n    InvalidResponse {\n        /// Human-readable detail.\n        message: String,\n    },\n\n    /// Any other provider failure, with an optional upstream status code.\n    #[error(\"provider error{status_suffix}: {message}\")]\n    Provider {\n        /// Upstream status code when the provider is HTTP-backed.\n        status: Option<u16>,\n        /// Human-readable detail.\n        message: String,\n        /// Pre-rendered status suffix for the Display impl.\n        status_suffix: String,\n    },\n}",
              "documentation": "A provider-side plane failure.\n\nPlane traits return these so callers can distinguish unavailability\n(deny/halt per \u00a74.6) from denials and malformed responses."
            },
            {
              "name": "::PlaneError::unavailable",
              "line": 117,
              "signature": "pub fn unavailable(message: impl Into<String>) -> Self;",
              "documentation": "Convenience constructor for [`PlaneError::Unavailable`]."
            },
            {
              "name": "::PlaneError::denied",
              "line": 124,
              "signature": "pub fn denied(message: impl Into<String>) -> Self;",
              "documentation": "Convenience constructor for [`PlaneError::Denied`]."
            },
            {
              "name": "::PlaneError::invalid_response",
              "line": 131,
              "signature": "pub fn invalid_response(message: impl Into<String>) -> Self;",
              "documentation": "Convenience constructor for [`PlaneError::InvalidResponse`]."
            },
            {
              "name": "::PlaneError::provider",
              "line": 138,
              "signature": "pub fn provider(status: Option<u16>, message: impl Into<String>) -> Self;",
              "documentation": "Convenience constructor for [`PlaneError::Provider`]."
            },
            {
              "name": "::AdmissionError",
              "line": 152,
              "signature": "#[derive(Debug, Error)]\npub enum AdmissionError {\n    /// The manifest failed \u00a75 validation when admission was invoked with\n    /// raw TOML (\u00a75.16: a conforming runtime must refuse to execute a\n    /// manifest that fails validation).\n    #[error(\"manifest validation failed: {0}\")]\n    ValidationFailed(#[from] SpecError),\n\n    /// A plane the manifest requires is not bound to a provider.\n    #[error(\"admission requires the {0}\")]\n    PlaneUnbound(#[from] PlaneUnbound),\n\n    /// The identity plane rejected the lineage: the harness DID does not\n    /// chain to the declared human root, or the provider could not verify\n    /// it (\u00a75.3, \u00a74.6).\n    #[error(\"identity verification failed for {did}: {reason}\")]\n    IdentityRejected {\n        /// The harness agent DID.\n        did: String,\n        /// Why verification failed.\n        reason: String,\n    },\n\n    /// The policy plane denied the inference permission/entitlement the\n    /// manifest requires (\u00a75.8, \u00a74.6: a policy engine miss denies\n    /// in-contract).\n    #[error(\"policy denied {permission}: {reason}\")]\n    PolicyDenied {\n        /// The permission that was checked.\n        permission: String,\n        /// Why the policy plane denied it.\n        reason: String,\n    },\n\n    /// The economics plane refused or could not complete the budget\n    /// reservation (\u00a74.4 step 3: metering failure is denial).\n    #[error(\"budget reservation failed: {0}\")]\n    ReservationFailed(#[source] PlaneError),\n\n    /// The identity plane verified the lineage but returned no durable\n    /// evidence reference (\u00a74.4 step 3: an admission allow without a\n    /// durable `evidenceRef` must not exist).\n    #[error(\"identity verification returned no evidence reference\")]\n    MissingEvidenceRef,\n\n    /// The manifest's `loop.strategy` has no registered driver in this\n    /// runtime (\u00a75.13: `loop.strategy` must name a registered strategy).\n    #[error(\"loop strategy {strategy:?} has no registered driver in this runtime\")]\n    StrategyUnavailable {\n        /// The strategy named by `loop.strategy`.\n        strategy: String,\n    },\n}",
              "documentation": "Admission denial reasons (\u00a74.4 step 3: admit).\n\nEvery variant is a fail-closed terminal decision: on any of these the\nharness MUST NOT execute."
            },
            {
              "name": "::SpawnError",
              "line": 208,
              "signature": "#[derive(Debug, Error)]\npub enum SpawnError {\n    /// The parent manifest declares `spawn.allowed = false`.\n    #[error(\"harness {harness_id:?} does not permit child spawning ([spawn].allowed = false)\")]\n    SpawningDisabled {\n        /// The parent harness id.\n        harness_id: String,\n    },\n\n    /// The child would sit deeper than the manifest bound or the runtime\n    /// maximum derivation depth (\u00a74.5, \u00a75.3).\n    #[error(\"child depth {child_depth} exceeds the maximum derivation depth {max}\")]\n    DepthLimitExceeded {\n        /// The depth the child would occupy.\n        child_depth: u32,\n        /// The effective maximum (min of manifest bound, runtime bound).\n        max: u32,\n    },\n\n    /// The child manifest failed \u00a75 validation on its own terms.\n    #[error(\"child manifest invalid: {0}\")]\n    InvalidChildManifest(#[from] SpecError),\n\n    /// The child would widen authority relative to its parent \u2014 the\n    /// no-amplification invariant (\u00a74.5).\n    #[error(\"no-amplification violation: {0}\")]\n    Amplification(#[from] AmplificationViolation),\n\n    /// The child's declared budgets could not be carved out of the\n    /// parent's remaining budget (\u00a74.5: sibling budgets must not overlap).\n    #[error(\"budget carve failed: {0}\")]\n    BudgetCarve(#[from] BudgetError),\n}",
              "documentation": "Child-spawning denial reasons (\u00a74.5: delegation without narrowing is a\nconformance failure, full stop)."
            },
            {
              "name": "::AmplificationViolation",
              "line": 244,
              "signature": "#[derive(Debug, Clone, PartialEq, Error)]\n#[error(\"[{rule}] {path}: {message}\")]\npub struct AmplificationViolation {\n/// Machine-checkable rule code.\n\npub rule: AmplificationRule,\n/// Dotted manifest path of the offending child value.\n\npub path: String,\n/// Human-readable explanation citing the governing spec section.\n\npub message: String\n}",
              "documentation": "A single \u00a74.5 no-amplification violation."
            },
            {
              "name": "::AmplificationViolation::new",
              "line": 255,
              "signature": "pub fn new(\n        rule: AmplificationRule,\n        path: impl Into<String>,\n        message: impl Into<String>,\n    ) -> Self;",
              "documentation": "Construct a violation."
            },
            {
              "name": "::AmplificationRule",
              "line": 270,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub enum AmplificationRule {\n    /// `tools.allow` is not a subset of the parent's (\u00a74.5).\n    ToolSuperset,\n    /// `capabilities.act_refs` is not a subset of the parent's (\u00a74.5).\n    CapabilitySuperset,\n    /// `policy.data_classes_allowed` is not a subset of the parent's\n    /// (\u00a74.5).\n    DataClassSuperset,\n    /// A declared budget exceeds `spawn.child_budget_fraction_max` of the\n    /// parent's remaining budget (\u00a74.5, \u00a75.13).\n    BudgetFractionExceeded,\n    /// `memory.types` is not a subset of the parent's (\u00a74.5: effective\n    /// authority of any subtree node is bounded by the root's).\n    MemoryTypeSuperset,\n    /// The parent is text-only (no `[perception]`) but the child declares\n    /// one (\u00a74.7: perception is authority, narrowed on spawn).\n    PerceptionIntroduced,\n    /// `perception.modalities` is not a subset of the parent's (\u00a74.7.5).\n    ModalitySuperset,\n    /// `perception.max_media_bytes` exceeds the parent's cap (\u00a74.5:\n    /// budgets and caps narrow, they never loosen).\n    MediaCapLoosened,\n    /// `identity.max_child_depth` exceeds the parent's bound (\u00a74.5:\n    /// derivation depth respects the manifest bound).\n    ChildDepthSuperset,\n    /// A parent-required tool approval was dropped by the child for a tool\n    /// it keeps (\u00a75.9: dropping a HITL gate widens effective authority).\n    ApprovalGateDropped,\n}",
              "documentation": "Machine-checkable codes for \u00a74.5 narrowing rules."
            },
            {
              "name": "::BudgetError",
              "line": 321,
              "signature": "#[derive(Debug, Clone, PartialEq, Error)]\npub enum BudgetError {\n    /// A carve or charge exceeded the remaining budget.\n    #[error(\n        \"insufficient budget: requested {requested_usd} USD / {requested_tokens} tokens, \\\n         remaining {remaining_usd} USD / {remaining_tokens} tokens\"\n    )]\n    Insufficient {\n        /// Requested USD.\n        requested_usd: f64,\n        /// Requested tokens.\n        requested_tokens: u64,\n        /// Remaining USD.\n        remaining_usd: f64,\n        /// Remaining tokens.\n        remaining_tokens: u64,\n    },\n\n    /// The budget is exhausted; the configured `on_budget_exhausted`\n    /// policy now applies (\u00a75.8).\n    #[error(\"budget exhausted ({remaining_usd} USD / {remaining_tokens} tokens remaining)\")]\n    Exhausted {\n        /// Remaining USD (may be zero or negative after the final charge).\n        remaining_usd: f64,\n        /// Remaining tokens.\n        remaining_tokens: u64,\n    },\n}",
              "documentation": "Budget accounting failure (\u00a74.6: budget exhaustion halts and settles;\nthere is no silent overrun)."
            },
            {
              "name": "::TraceContextError",
              "line": 352,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Error)]\n#[error(\"invalid W3C traceparent value {value:?}: {reason}\")]\npub struct TraceContextError {\n/// The offending header value.\n\npub value: String,\n/// Why it is invalid.\n\npub reason: String\n}",
              "documentation": "Trace-context parsing failure."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/lib.rs",
          "sha256": "6884c74f96496f4aba387742eaf8ee635c6379b486d0d4dc577b34ed649431c2",
          "artifactSha256": "1fcfd2513833672dc9fe604a68a3fa74ee047809e2c238a2c654e6989a59d24e",
          "url": "/reference/source/forge-rs/harness-runtime/src/lib.rs.txt",
          "declarations": [
            {
              "name": "admission",
              "line": 70,
              "signature": "pub mod admission;",
              "documentation": "# harness-runtime\n\nThe HarnessSpec v0.1 execution runtime: it turns a sealed\n[`ValidatedManifest`](harness_spec::ValidatedManifest) from\n[`harness-spec`] into an executed, settled, archived run, implementing\nthe `one/app/FINAL_SPEC.md` \u00a74 harness lifecycle:\n\n```text\nauthor \u2192 validate \u2192 admit \u2192 execute \u2192 verify \u2192 settle \u2192 archive\n                       \u2502        \u2502        \u2502\n                       \u25bc        \u25bc        \u25bc\n                    denied   halted   failed   (all still settle + archive)\n```\n\n- **Plane adapter traits** ([`planes`]) \u2014 one narrow async trait per\n  authority plane plus the perception ingress, with a\n  [`PlaneRegistry`], a fail-closed [`NoopPlanes`](planes::NoopPlanes)\n  set (typed [`PlaneUnbound`] errors), and an\n  [`HttpPlaneClient`](planes::HttpPlaneClient) base with timeout\n  enforcement and W3C trace-context propagation.\n- **Admission gate** ([`HarnessAdmission`]) \u2014 ordered fail-closed\n  checks: strategy registered \u2192 planes bound \u2192 identity verified with\n  durable evidence \u2192 policy authorized \u2192 economics budget reserved.\n  Any failure denies; a denied harness never executes.\n- **Loop strategies** ([`strategy`]) \u2014 a registry, the\n  [`ReactLoop`](strategy::ReactLoop) driver (budget checks before\n  every model call; allowlist + approval gates before every tool\n  invocation), and the\n  [`MicroDagStrategy`](strategy::MicroDagStrategy) contract with real\n  DAG validation/topological layering for host-registered drivers.\n- **Child spawning** ([`spawn::spawn_child`]) \u2014 programmatic \u00a74.5\n  no-amplification enforcement: subset checks on capabilities, tools,\n  data classes, memory types, and modalities; budget ceilings as a\n  fraction of the parent's *remaining* budget with ledger carving so\n  siblings cannot overlap; depth bounded by manifest and runtime\n  limits; parent-declared approval gates cannot be dropped.\n- **Run record** ([`RunRecord`]) \u2014 the serde-stable evidence payload:\n  manifest hash, admission evidence, plane decisions, gate results,\n  usage totals, settlement, and terminal outcome. This is the future\n  Sigil-anchor payload, so its schema is pinned by test.\n\n## Usage\n\n```no_run\nuse harness_runtime::{\n    HarnessAdmission, PlaneRegistry, RunContext, StrategyRegistry,\n};\nuse harness_spec::ValidatedManifest;\n\n# async fn example(planes: PlaneRegistry) -> Result<(), Box<dyn std::error::Error>> {\nlet admission = HarnessAdmission::with_defaults();\nlet source = include_str!(\"../../harness-spec/tests/fixtures/brownfield-coder.toml\");\nlet admitted = admission\n    .admit_toml(source, planes, RunContext::root())\n    .await?; // denied manifests never reach execution\nlet strategies = StrategyRegistry::with_builtins();\nlet record = admitted.execute(&strategies, \"fix the flaky test\").await?;\nprintln!(\"outcome: {:?}\", record.outcome.kind());\n# Ok(())\n# }\n```\n\nProvider implementations (Foundry, Lanes, Akasha, Garden, Cambium,\nNous, Flocks) live outside this crate; the runtime binds them through\nthe plane traits and fails closed when a required plane is unbound."
            },
            {
              "name": "budget",
              "line": 71,
              "signature": "pub mod budget;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 72,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "planes",
              "line": 73,
              "signature": "pub mod planes;",
              "documentation": ""
            },
            {
              "name": "record",
              "line": 74,
              "signature": "pub mod record;",
              "documentation": ""
            },
            {
              "name": "spawn",
              "line": 75,
              "signature": "pub mod spawn;",
              "documentation": ""
            },
            {
              "name": "spine",
              "line": 76,
              "signature": "pub mod spine;",
              "documentation": ""
            },
            {
              "name": "strategy",
              "line": 77,
              "signature": "pub mod strategy;",
              "documentation": ""
            },
            {
              "name": "trace",
              "line": 78,
              "signature": "pub mod trace;",
              "documentation": ""
            },
            {
              "name": "pub use admission::{\n    AdmissionRequest, AdmittedHarness, AdmittedParts, HarnessAdmission, RunContext,\n};",
              "line": 80,
              "signature": "pub use admission::{\n    AdmissionRequest, AdmittedHarness, AdmittedParts, HarnessAdmission, RunContext,\n};",
              "documentation": ""
            },
            {
              "name": "pub use budget::BudgetLedger;",
              "line": 83,
              "signature": "pub use budget::BudgetLedger;",
              "documentation": ""
            },
            {
              "name": "pub use error::{\n    AdmissionError, AmplificationRule, AmplificationViolation, BudgetError, PlaneError,\n    PlaneUnbound, RuntimeError, SpawnError, TraceContextError,\n};",
              "line": 84,
              "signature": "pub use error::{\n    AdmissionError, AmplificationRule, AmplificationViolation, BudgetError, PlaneError,\n    PlaneUnbound, RuntimeError, SpawnError, TraceContextError,\n};",
              "documentation": ""
            },
            {
              "name": "pub use planes::{\n    ApprovalDecision, ApprovalRequest, BudgetReservation, BudgetReservationRequest, ContextFrame,\n    ContextPlane, ContextRequest, EconomicsPlane, GateRequest, GateResult, HttpPlaneClient,\n    IdentityPlane, InferencePlane, InferenceRequest, InferenceResponse, InferenceUsage,\n    LineageVerification, LineageVerificationRequest, MediaArtifact, MemoryPlane, MemoryWrite,\n    ModelOutput, NoopPlanes, PerceptionPlane, PerceptionRecord, Placement, PlacementRequest, Plane,\n    PlaneKind, PlaneRegistry, PolicyDecision, PolicyPlane, PolicyRequest, SettlementRecord,\n    SettlementRequest, SubstratePlane, TelemetryEvent, TelemetryPlane, ToolInvocation, ToolOutput,\n    ToolsPlane, TranscriptEntry, TranscriptRole, VerificationPlane,\n};",
              "line": 88,
              "signature": "pub use planes::{\n    ApprovalDecision, ApprovalRequest, BudgetReservation, BudgetReservationRequest, ContextFrame,\n    ContextPlane, ContextRequest, EconomicsPlane, GateRequest, GateResult, HttpPlaneClient,\n    IdentityPlane, InferencePlane, InferenceRequest, InferenceResponse, InferenceUsage,\n    LineageVerification, LineageVerificationRequest, MediaArtifact, MemoryPlane, MemoryWrite,\n    ModelOutput, NoopPlanes, PerceptionPlane, PerceptionRecord, Placement, PlacementRequest, Plane,\n    PlaneKind, PlaneRegistry, PolicyDecision, PolicyPlane, PolicyRequest, SettlementRecord,\n    SettlementRequest, SubstratePlane, TelemetryEvent, TelemetryPlane, ToolInvocation, ToolOutput,\n    ToolsPlane, TranscriptEntry, TranscriptRole, VerificationPlane,\n};",
              "documentation": ""
            },
            {
              "name": "pub use record::{\n    AdmissionEvidence, HaltReason, PlaneDecision, RunOutcome, RunOutcomeKind, RunRecord,\n    SettlementEvidence, UsageTotals, RUN_RECORD_SCHEMA_VERSION,\n};",
              "line": 98,
              "signature": "pub use record::{\n    AdmissionEvidence, HaltReason, PlaneDecision, RunOutcome, RunOutcomeKind, RunRecord,\n    SettlementEvidence, UsageTotals, RUN_RECORD_SCHEMA_VERSION,\n};",
              "documentation": ""
            },
            {
              "name": "pub use spawn::{spawn_child, SpawnedChild};",
              "line": 102,
              "signature": "pub use spawn::{spawn_child, SpawnedChild};",
              "documentation": ""
            },
            {
              "name": "pub use spine::{\n    MapContextPlane, MapMemoryPlane, MapSpineClient, MapSpineConfig, SpineDispatchRecord,\n    SpineDispatchStatus,\n};",
              "line": 103,
              "signature": "pub use spine::{\n    MapContextPlane, MapMemoryPlane, MapSpineClient, MapSpineConfig, SpineDispatchRecord,\n    SpineDispatchStatus,\n};",
              "documentation": ""
            },
            {
              "name": "pub use strategy::{\n    DagError, LoopStrategy, MicroDag, MicroDagNode, MicroDagStrategy, ReactLoop, RunPlan,\n    StrategyRegistry,\n};",
              "line": 107,
              "signature": "pub use strategy::{\n    DagError, LoopStrategy, MicroDag, MicroDagNode, MicroDagStrategy, ReactLoop, RunPlan,\n    StrategyRegistry,\n};",
              "documentation": ""
            },
            {
              "name": "pub use trace::{TraceContext, TRACEPARENT_HEADER};",
              "line": 111,
              "signature": "pub use trace::{TraceContext, TRACEPARENT_HEADER};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/context.rs",
          "sha256": "0cedde4816776d414e266e0367e8c78e4102ef04771caf499c2e8b1e39bdd285",
          "artifactSha256": "4cdbf3dbda8545b775db35795d34880116d62d1b59060e30ef80406fbaf59be0",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/context.rs.txt",
          "declarations": [
            {
              "name": "::ContextRequest",
              "line": 15,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ContextRequest {\n/// Tenant scope from `[context].scope`.\n\npub scope: ContextScope,\n/// The task text the frame is packed around.\n\npub task: String,\n/// Hard cap for the packed frame, from `[context].frame_budget_tokens`.\n\npub frame_budget_tokens: u64\n}",
              "documentation": "A frame-pack request (\u00a75.6: `frame_budget_tokens` is enforced at pack\ntime; the runtime rejects oversized frames rather than truncating\nsilently)."
            },
            {
              "name": "::ContextFrame",
              "line": 26,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ContextFrame {\n/// The packed frame content delivered to the inference plane.\n\npub packed: String,\n/// Actual frame size in tokens. The runtime rejects the frame when\n\n/// this exceeds the declared cap (\u00a75.6).\n\npub tokens: u64\n}",
              "documentation": "A packed context frame."
            },
            {
              "name": "::ContextPlane",
              "line": 36,
              "signature": "#[async_trait]\npub trait ContextPlane: Plane {\n    /// Pack the governed context frame for one run.\n    async fn pack_frame(&self, request: ContextRequest) -> Result<ContextFrame, PlaneError>;\n}",
              "documentation": "Context plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/economics.rs",
          "sha256": "198f9a504d5ab8795c3b94f3fa12e74a7c35f6e786c5e7ad950a8b3041158967",
          "artifactSha256": "16be06a73742350a21df3f4c12d797069dfb492488c289408a1957237e8a0818",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/economics.rs.txt",
          "declarations": [
            {
              "name": "::BudgetReservationRequest",
              "line": 16,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct BudgetReservationRequest {\n/// The run id this reservation is tied to.\n\npub run_id: String,\n/// BLAKE3 manifest hash (hex) identifying the harness contract.\n\npub manifest_hash: String,\n/// Requested USD cap (`[inference].budget_usd`).\n\npub budget_usd: f64,\n/// Requested token cap (`[inference].budget_tokens`).\n\npub budget_tokens: u64,\n/// Declared meter map (`[economics].meters`, Garden two-segment keys).\n\npub meters: BTreeMap<String, String>,\n/// Idempotency key per `[economics].idempotency` discipline.\n\npub idempotency_key: String\n}",
              "documentation": "Budget reservation input (\u00a74.4 step 3: Garden metering is part of\nadmission; metering failure is denial)."
            },
            {
              "name": "::BudgetReservation",
              "line": 34,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct BudgetReservation {\n/// Provider-side reservation id, echoed back at settlement.\n\npub reservation_id: String,\n/// Granted USD cap.\n\npub granted_usd: f64,\n/// Granted token cap.\n\npub granted_tokens: u64,\n/// Durable evidence reference for the reservation.\n\npub evidence_ref: Option<String>\n}",
              "documentation": "The granted reservation. The runtime's budget ledger opens with these\namounts, which may be lower than requested (never higher)."
            },
            {
              "name": "::SettlementRequest",
              "line": 48,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SettlementRequest {\n/// The run id.\n\npub run_id: String,\n/// The reservation being settled.\n\npub reservation_id: String,\n/// Terminal usage totals.\n\npub usage: UsageTotals,\n/// Terminal outcome kind.\n\npub outcome: RunOutcomeKind,\n/// Idempotency key (same discipline as the reservation).\n\npub idempotency_key: String\n}",
              "documentation": "Settlement input (\u00a74.4 step 6: usage meters flush idempotently per\ndecision/run keys; the outcome is final and immutable)."
            },
            {
              "name": "::SettlementRecord",
              "line": 63,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SettlementRecord {\n/// Provider-side settlement id.\n\npub settlement_id: String,\n/// Settled USD.\n\npub settled_usd: f64,\n/// Settled tokens.\n\npub settled_tokens: u64,\n/// Durable evidence reference for the settlement.\n\npub evidence_ref: Option<String>\n}",
              "documentation": "The settlement receipt."
            },
            {
              "name": "::EconomicsPlane",
              "line": 76,
              "signature": "#[async_trait]\npub trait EconomicsPlane: Plane {\n    /// Reserve the run budget at admission. Failure is denial (\u00a74.4,\n    /// \u00a74.6): the harness must not execute.\n    async fn reserve_budget(\n        &self,\n        request: BudgetReservationRequest,\n    ) -> Result<BudgetReservation, PlaneError>;\n\n    /// Settle the run exactly once, on every terminal state \u2014 verified,\n    /// failed, halted, denied all still settle (\u00a74.4).\n    async fn settle(&self, request: SettlementRequest) -> Result<SettlementRecord, PlaneError>;\n}",
              "documentation": "Economics plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/http.rs",
          "sha256": "bc8f1f50d78d444a8ed950487b585a3a2f747a3f6f97b7fb0029c3e6325b378a",
          "artifactSha256": "59611c289f25ad49b0c77911cd22c1a843cd799aa4cef6c745341a964b677ab6",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/http.rs.txt",
          "declarations": [
            {
              "name": "::HttpClientError",
              "line": 21,
              "signature": "#[derive(Debug, Error)]\npub enum HttpClientError {\n    /// The base URL is not a valid absolute http(s) URL.\n    #[error(\"invalid plane base URL {url:?}: {reason}\")]\n    InvalidBaseUrl {\n        /// The offending URL.\n        url: String,\n        /// Why it is invalid.\n        reason: String,\n    },\n\n    /// The underlying HTTP client could not be built.\n    #[error(\"http client build failed: {0}\")]\n    BuildFailed(String),\n}",
              "documentation": "HTTP plane client construction failure."
            },
            {
              "name": "::HttpPlaneClient",
              "line": 44,
              "signature": "#[derive(Debug, Clone)]\npub struct HttpPlaneClient {\n\n}",
              "documentation": "Base client for HTTP-backed plane providers.\n\nEvery request carries the run's `traceparent` header and is bounded by\nthe configured timeout; timeouts map to [`PlaneError::Timeout`],\nconnect failures to [`PlaneError::Unavailable`], non-2xx statuses to\n[`PlaneError::Provider`], and undecodable bodies to\n[`PlaneError::InvalidResponse`] \u2014 the \u00a74.6 vocabulary."
            },
            {
              "name": "::HttpPlaneClient::new",
              "line": 57,
              "signature": "pub fn new(\n        plane: PlaneKind,\n        base_url: impl Into<String>,\n        timeout: Duration,\n    ) -> Result<Self, HttpClientError>;",
              "documentation": "Build a client for one plane.\n\n`timeout` bounds each request end-to-end. `base_url` must be an\nabsolute http(s) URL; a trailing slash is normalized away."
            },
            {
              "name": "::HttpPlaneClient::with_default_header",
              "line": 92,
              "signature": "pub fn with_default_header(mut self, name: &str, value: impl Into<String>) -> Self;",
              "documentation": "Attach a default header sent on every request (e.g. an\n`authorization` header for an authenticated provider route).\nHeader names are validated; values are stored as given and never\nlogged by this client."
            },
            {
              "name": "::HttpPlaneClient::plane",
              "line": 99,
              "signature": "pub fn plane(&self) -> PlaneKind;",
              "documentation": "The plane this client serves."
            },
            {
              "name": "::HttpPlaneClient::base_url",
              "line": 104,
              "signature": "pub fn base_url(&self) -> &str;",
              "documentation": "The normalized base URL (no trailing slash)."
            },
            {
              "name": "::HttpPlaneClient::timeout",
              "line": 109,
              "signature": "pub fn timeout(&self) -> Duration;",
              "documentation": "The configured per-request timeout."
            },
            {
              "name": "::HttpPlaneClient::url",
              "line": 114,
              "signature": "pub fn url(&self, path: &str) -> String;",
              "documentation": "Resolve a provider path against the base URL."
            },
            {
              "name": "::HttpPlaneClient::post_json",
              "line": 120,
              "signature": "pub async fn post_json<B, T>(\n        &self,\n        path: &str,\n        body: &B,\n        trace: &TraceContext,\n    ) -> Result<T, PlaneError>\n    where\n        B: Serialize + Sync,\n        T: DeserializeOwned,;",
              "documentation": "POST a JSON body and decode a JSON response, with trace-context\npropagation and \u00a74.6 error mapping."
            },
            {
              "name": "::HttpPlaneClient::get_json",
              "line": 147,
              "signature": "pub async fn get_json<T>(&self, path: &str, trace: &TraceContext) -> Result<T, PlaneError>\n    where\n        T: DeserializeOwned,;",
              "documentation": "GET and decode a JSON response, with trace-context propagation and\n\u00a74.6 error mapping."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/identity.rs",
          "sha256": "4aa7c40c226dd1df517563393552d5b90263d3d9a207c27e47edcd65663802f6",
          "artifactSha256": "31823eaa1bc21b8789eb03b956ee0a96af3d3163a2dbf75f93fd830cca8af393",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/identity.rs.txt",
          "declarations": [
            {
              "name": "::LineageVerificationRequest",
              "line": 13,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct LineageVerificationRequest {\n/// The harness agent DID (`[identity].did`).\n\npub did: String,\n/// The lineage proof reference (`[identity].lineage_proof`).\n\npub lineage_proof: String,\n/// The accountable owner the chain must terminate at\n\n/// (`[harness].owner`).\n\npub expected_owner: String,\n/// Derivation depth of this run (0 for a root harness).\n\npub depth: u32\n}",
              "documentation": "Lineage verification input (\u00a75.3: `lineage_proof` must resolve to a\nchain terminating at `[harness].owner`'s human root)."
            },
            {
              "name": "::LineageVerification",
              "line": 27,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct LineageVerification {\n/// True when the chain resolves and terminates at the expected human\n\n/// root.\n\npub verified: bool,\n/// The human root the chain terminates at, when resolved.\n\npub human_root: Option<String>,\n/// Durable evidence reference for the verification (\u00a74.4 step 3: an\n\n/// admission allow without a durable `evidenceRef` must not exist).\n\npub evidence_ref: Option<String>\n}",
              "documentation": "The identity plane's verdict."
            },
            {
              "name": "::IdentityPlane",
              "line": 40,
              "signature": "#[async_trait]\npub trait IdentityPlane: Plane {\n    /// Verify that `request.did` chains to `request.expected_owner`'s\n    /// human root. Provider unavailability is a typed\n    /// [`PlaneError::Unavailable`], never a silent pass (\u00a74.6).\n    async fn verify_lineage(\n        &self,\n        request: LineageVerificationRequest,\n    ) -> Result<LineageVerification, PlaneError>;\n}",
              "documentation": "Identity plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/inference.rs",
          "sha256": "dbae4a4e743b6d0d814017894549bf2bdb5eaf3d817743ddb99a6aaf8a9ed876",
          "artifactSha256": "75b2a40aec5f8211989c3ccafe1f23b85e7a5c6a3e5ba0828193360e955a4a8f",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/inference.rs.txt",
          "declarations": [
            {
              "name": "::InferenceRequest",
              "line": 12,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct InferenceRequest {\n/// The task (or packed context frame) the call is grounded in.\n\npub task: String,\n/// The loop transcript so far (actions and observations, oldest\n\n/// first).\n\npub transcript: Vec<TranscriptEntry>,\n/// Optional output-token cap for this call.\n\npub max_output_tokens: Option<u64>\n}",
              "documentation": "One model call issued by a loop strategy."
            },
            {
              "name": "::TranscriptEntry",
              "line": 24,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct TranscriptEntry {\n/// Whether this entry is an action the loop took or an observation it\n\n/// received back.\n\npub role: TranscriptRole,\n/// Entry content.\n\npub content: String\n}",
              "documentation": "A transcript entry carried between loop steps."
            },
            {
              "name": "::TranscriptRole",
              "line": 35,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TranscriptRole {\n    /// Something the loop did (a tool call, an answer attempt).\n    Action,\n    /// What came back (tool output, denials, errors).\n    Observation,\n}",
              "documentation": "Transcript entry role."
            },
            {
              "name": "::ModelOutput",
              "line": 48,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"snake_case\")]\npub enum ModelOutput {\n    /// A text completion (the loop's final answer candidate).\n    Completion {\n        /// The completion text.\n        text: String,\n    },\n    /// A request to invoke a tool.\n    ToolCall {\n        /// The `<interface>/<action>` tool identifier.\n        tool: String,\n        /// Opaque tool input (plane-defined encoding).\n        input: String,\n    },\n}",
              "documentation": "The model's structured output for one step.\n\nLoop-neutral: a completion ends the step sequence; a tool call asks\nthe loop to invoke the tools plane and feed the observation back."
            },
            {
              "name": "::InferenceUsage",
              "line": 66,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]\npub struct InferenceUsage {\n/// Prompt/input tokens.\n\npub input_tokens: u64,\n/// Completion/output tokens.\n\npub output_tokens: u64,\n/// USD cost of this call.\n\npub cost_usd: f64\n}",
              "documentation": "Metered usage for one call; the economics book decrements by exactly\nthese amounts."
            },
            {
              "name": "::InferenceUsage::total_tokens",
              "line": 77,
              "signature": "pub fn total_tokens(&self) -> u64;",
              "documentation": "Total tokens (input + output)."
            },
            {
              "name": "::InferenceResponse",
              "line": 84,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct InferenceResponse {\n/// Structured model output.\n\npub output: ModelOutput,\n/// Metered usage for the call.\n\npub usage: InferenceUsage\n}",
              "documentation": "The inference plane's response for one call."
            },
            {
              "name": "::InferencePlane",
              "line": 93,
              "signature": "#[async_trait]\npub trait InferencePlane: Plane {\n    /// Run one model call through the binding. Routes resolve per\n    /// `[inference].route_policy` (\u00a75.8: live catalog by default; pins\n    /// fail closed when no longer offered).\n    async fn complete(&self, request: InferenceRequest) -> Result<InferenceResponse, PlaneError>;\n}",
              "documentation": "Inference plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/memory.rs",
          "sha256": "755e65916c753569218181cc1b70e58894bd5ca8d419d07dfa06f2192d2ac6ea",
          "artifactSha256": "91880167740522b4733f8167b48dd6bb646cc4f8113bdd8cfe1c657bb964541d",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/memory.rs.txt",
          "declarations": [
            {
              "name": "::MemoryWrite",
              "line": 13,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct MemoryWrite {\n/// Which memory type the write targets.\n\npub kind: MemoryType,\n/// Application-defined key.\n\npub key: String,\n/// The content to store.\n\npub content: String\n}",
              "documentation": "A memory-plane write governed by `[memory].write_policy` (\u00a75.7)."
            },
            {
              "name": "::MemoryPlane",
              "line": 24,
              "signature": "#[async_trait]\npub trait MemoryPlane: Plane {\n    /// Write into the bound mind. Returns the provider's evidence\n    /// reference for the write, when it produces one.\n    async fn write(&self, write: MemoryWrite) -> Result<Option<String>, PlaneError>;\n\n    /// Consolidate the run's task-scoped writes into durable memory.\n    /// The runtime invokes this only for `verified` runs (\u00a75.7:\n    /// consolidation must not occur for runs that end `failed`, `halted`,\n    /// or `denied`). Returns the consolidation evidence reference, when\n    /// the provider produces one.\n    async fn consolidate(&self, mind: String) -> Result<Option<String>, PlaneError>;\n}",
              "documentation": "Memory plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/mod.rs",
          "sha256": "2b25f5934078544ef559bfe8d52667fca8af025b2f906627e3ceca1c7cc500da",
          "artifactSha256": "1ca3ec2dccc43c506f81c88af0bbb3069d01184023949033273de2cc0ae80f06",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use context::{ContextFrame, ContextPlane, ContextRequest};",
              "line": 31,
              "signature": "pub use context::{ContextFrame, ContextPlane, ContextRequest};",
              "documentation": ""
            },
            {
              "name": "pub use economics::{\n    BudgetReservation, BudgetReservationRequest, EconomicsPlane, SettlementRecord,\n    SettlementRequest,\n};",
              "line": 32,
              "signature": "pub use economics::{\n    BudgetReservation, BudgetReservationRequest, EconomicsPlane, SettlementRecord,\n    SettlementRequest,\n};",
              "documentation": ""
            },
            {
              "name": "pub use http::HttpPlaneClient;",
              "line": 36,
              "signature": "pub use http::HttpPlaneClient;",
              "documentation": ""
            },
            {
              "name": "pub use identity::{IdentityPlane, LineageVerification, LineageVerificationRequest};",
              "line": 37,
              "signature": "pub use identity::{IdentityPlane, LineageVerification, LineageVerificationRequest};",
              "documentation": ""
            },
            {
              "name": "pub use inference::{\n    InferencePlane, InferenceRequest, InferenceResponse, InferenceUsage, ModelOutput,\n    TranscriptEntry, TranscriptRole,\n};",
              "line": 38,
              "signature": "pub use inference::{\n    InferencePlane, InferenceRequest, InferenceResponse, InferenceUsage, ModelOutput,\n    TranscriptEntry, TranscriptRole,\n};",
              "documentation": ""
            },
            {
              "name": "pub use memory::{MemoryPlane, MemoryWrite};",
              "line": 42,
              "signature": "pub use memory::{MemoryPlane, MemoryWrite};",
              "documentation": ""
            },
            {
              "name": "pub use noop::NoopPlanes;",
              "line": 43,
              "signature": "pub use noop::NoopPlanes;",
              "documentation": ""
            },
            {
              "name": "pub use perception::{MediaArtifact, PerceptionPlane, PerceptionRecord};",
              "line": 44,
              "signature": "pub use perception::{MediaArtifact, PerceptionPlane, PerceptionRecord};",
              "documentation": ""
            },
            {
              "name": "pub use policy::{PolicyDecision, PolicyPlane, PolicyRequest};",
              "line": 45,
              "signature": "pub use policy::{PolicyDecision, PolicyPlane, PolicyRequest};",
              "documentation": ""
            },
            {
              "name": "pub use substrate::{Placement, PlacementRequest, SubstratePlane};",
              "line": 46,
              "signature": "pub use substrate::{Placement, PlacementRequest, SubstratePlane};",
              "documentation": ""
            },
            {
              "name": "pub use telemetry::{TelemetryEvent, TelemetryPlane};",
              "line": 47,
              "signature": "pub use telemetry::{TelemetryEvent, TelemetryPlane};",
              "documentation": ""
            },
            {
              "name": "pub use tools::{ApprovalDecision, ApprovalRequest, ToolInvocation, ToolOutput, ToolsPlane};",
              "line": 48,
              "signature": "pub use tools::{ApprovalDecision, ApprovalRequest, ToolInvocation, ToolOutput, ToolsPlane};",
              "documentation": ""
            },
            {
              "name": "pub use verification::{GateRequest, GateResult, VerificationPlane};",
              "line": 49,
              "signature": "pub use verification::{GateRequest, GateResult, VerificationPlane};",
              "documentation": ""
            },
            {
              "name": "::PlaneKind",
              "line": 55,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PlaneKind {\n    /// Identity plane (OAS DID lineage).\n    Identity,\n    /// Policy plane (information-flow / capability authorization).\n    Policy,\n    /// Context plane (packed governed frames).\n    Context,\n    /// Memory plane (episodic/procedural/resource/vault).\n    Memory,\n    /// Inference plane (model calls through the binding).\n    Inference,\n    /// Tools plane (allowlisted invocation + approvals).\n    Tools,\n    /// Verification plane (declared gates).\n    Verification,\n    /// Economics plane (reservation, metering, settlement).\n    Economics,\n    /// Telemetry plane (event emission).\n    Telemetry,\n    /// Substrate plane (execution placement).\n    Substrate,\n    /// Perception ingress (signed, typed SemanticIR \u2014 optional binding,\n    /// \u00a74.7).\n    Perception,\n}",
              "documentation": "The eleven plane kinds a harness binds (\u00a74.1: nine authority planes\nplus the optional perception ingress)."
            },
            {
              "name": "::Plane",
              "line": 106,
              "signature": "pub trait Plane: Send + Sync {\n    /// Which plane this adapter serves.\n    fn kind(&self) -> PlaneKind;\n\n    /// Stable provider identifier for records and logs (e.g. `foundry`,\n    /// `lanes`, `noop`).\n    fn provider_id(&self) -> &str;\n\n    /// True when a real provider is bound. Noop adapters return false.\n    fn is_bound(&self) -> bool ;\n}",
              "documentation": "Common supertrait for every plane adapter.\n\n`is_bound` separates a real provider from a `noop` placeholder:\nadmission refuses manifests whose required planes are unbound, and any\noperation that still reaches a noop fails closed with\n[`PlaneUnbound`] \u2014 defense in depth (\u00a74.6)."
            },
            {
              "name": "::PlaneRegistry",
              "line": 126,
              "signature": "#[derive(Clone, Default)]\npub struct PlaneRegistry {\n\n}",
              "documentation": "The plane providers bound for one run.\n\nSlots are optional at construction; admission checks every slot the\nmanifest requires via the `bound_*` accessors, which treat a missing\nor noop binding identically: typed [`PlaneUnbound`]."
            },
            {
              "name": "::PlaneRegistry::new",
              "line": 142,
              "signature": "pub fn new() -> Self;",
              "documentation": "An empty registry (nothing bound)."
            },
            {
              "name": "::PlaneRegistry::noop_filled",
              "line": 147,
              "signature": "pub fn noop_filled() -> Self;",
              "documentation": "A registry with every slot filled by fail-closed noop providers."
            },
            {
              "name": "::PlaneRegistry::with_identity",
              "line": 152,
              "signature": "pub fn with_identity(mut self, plane: Arc<dyn IdentityPlane>) -> Self;",
              "documentation": "Bind the identity plane."
            },
            {
              "name": "::PlaneRegistry::with_policy",
              "line": 158,
              "signature": "pub fn with_policy(mut self, plane: Arc<dyn PolicyPlane>) -> Self;",
              "documentation": "Bind the policy plane."
            },
            {
              "name": "::PlaneRegistry::with_context",
              "line": 164,
              "signature": "pub fn with_context(mut self, plane: Arc<dyn ContextPlane>) -> Self;",
              "documentation": "Bind the context plane."
            },
            {
              "name": "::PlaneRegistry::with_memory",
              "line": 170,
              "signature": "pub fn with_memory(mut self, plane: Arc<dyn MemoryPlane>) -> Self;",
              "documentation": "Bind the memory plane."
            },
            {
              "name": "::PlaneRegistry::with_inference",
              "line": 176,
              "signature": "pub fn with_inference(mut self, plane: Arc<dyn InferencePlane>) -> Self;",
              "documentation": "Bind the inference plane."
            },
            {
              "name": "::PlaneRegistry::with_tools",
              "line": 182,
              "signature": "pub fn with_tools(mut self, plane: Arc<dyn ToolsPlane>) -> Self;",
              "documentation": "Bind the tools plane."
            },
            {
              "name": "::PlaneRegistry::with_verification",
              "line": 188,
              "signature": "pub fn with_verification(mut self, plane: Arc<dyn VerificationPlane>) -> Self;",
              "documentation": "Bind the verification plane."
            },
            {
              "name": "::PlaneRegistry::with_economics",
              "line": 194,
              "signature": "pub fn with_economics(mut self, plane: Arc<dyn EconomicsPlane>) -> Self;",
              "documentation": "Bind the economics plane."
            },
            {
              "name": "::PlaneRegistry::with_telemetry",
              "line": 200,
              "signature": "pub fn with_telemetry(mut self, plane: Arc<dyn TelemetryPlane>) -> Self;",
              "documentation": "Bind the telemetry plane."
            },
            {
              "name": "::PlaneRegistry::with_substrate",
              "line": 206,
              "signature": "pub fn with_substrate(mut self, plane: Arc<dyn SubstratePlane>) -> Self;",
              "documentation": "Bind the substrate plane."
            },
            {
              "name": "::PlaneRegistry::with_perception",
              "line": 213,
              "signature": "pub fn with_perception(mut self, plane: Arc<dyn PerceptionPlane>) -> Self;",
              "documentation": "Bind the perception plane (\u00a74.7; required only when the manifest\ndeclares `[perception]`)."
            },
            {
              "name": "::PlaneRegistry::bound_identity",
              "line": 219,
              "signature": "pub fn bound_identity(&self) -> Result<&Arc<dyn IdentityPlane>, PlaneUnbound>;",
              "documentation": "The bound identity plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_policy",
              "line": 224,
              "signature": "pub fn bound_policy(&self) -> Result<&Arc<dyn PolicyPlane>, PlaneUnbound>;",
              "documentation": "The bound policy plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_context",
              "line": 229,
              "signature": "pub fn bound_context(&self) -> Result<&Arc<dyn ContextPlane>, PlaneUnbound>;",
              "documentation": "The bound context plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_memory",
              "line": 234,
              "signature": "pub fn bound_memory(&self) -> Result<&Arc<dyn MemoryPlane>, PlaneUnbound>;",
              "documentation": "The bound memory plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_inference",
              "line": 239,
              "signature": "pub fn bound_inference(&self) -> Result<&Arc<dyn InferencePlane>, PlaneUnbound>;",
              "documentation": "The bound inference plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_tools",
              "line": 244,
              "signature": "pub fn bound_tools(&self) -> Result<&Arc<dyn ToolsPlane>, PlaneUnbound>;",
              "documentation": "The bound tools plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_verification",
              "line": 249,
              "signature": "pub fn bound_verification(&self) -> Result<&Arc<dyn VerificationPlane>, PlaneUnbound>;",
              "documentation": "The bound verification plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_economics",
              "line": 254,
              "signature": "pub fn bound_economics(&self) -> Result<&Arc<dyn EconomicsPlane>, PlaneUnbound>;",
              "documentation": "The bound economics plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_telemetry",
              "line": 259,
              "signature": "pub fn bound_telemetry(&self) -> Result<&Arc<dyn TelemetryPlane>, PlaneUnbound>;",
              "documentation": "The bound telemetry plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_substrate",
              "line": 264,
              "signature": "pub fn bound_substrate(&self) -> Result<&Arc<dyn SubstratePlane>, PlaneUnbound>;",
              "documentation": "The bound substrate plane, or a typed unbound error."
            },
            {
              "name": "::PlaneRegistry::bound_perception",
              "line": 269,
              "signature": "pub fn bound_perception(&self) -> Result<&Arc<dyn PerceptionPlane>, PlaneUnbound>;",
              "documentation": "The bound perception plane, or a typed unbound error."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/noop.rs",
          "sha256": "677d52a4bcb129a91f278fb54965b1021d662c334574c510018ca914c3dc4a1a",
          "artifactSha256": "a81925edced0d7d9693651da470ddb73ef11430476ba75238b19eacb592e93b3",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/noop.rs.txt",
          "declarations": [
            {
              "name": "::NoopPlanes",
              "line": 161,
              "signature": "pub struct NoopPlanes;",
              "documentation": "Constructors for the noop provider set."
            },
            {
              "name": "::NoopPlanes::registry",
              "line": 165,
              "signature": "pub fn registry() -> PlaneRegistry;",
              "documentation": "A registry with every slot filled by a fail-closed noop provider."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/perception.rs",
          "sha256": "7a1f0bd636b04d35cef270cca379f7ab04d2ddf3830832993f3d842c9c694f22",
          "artifactSha256": "ba6b800cadf6c1ee53eff6f9135b2954e8f1ffa9eb9c47dbe6a841a545350f8b",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/perception.rs.txt",
          "declarations": [
            {
              "name": "::MediaArtifact",
              "line": 19,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct MediaArtifact {\n/// Declared modality; must be within `[perception].modalities`.\n\npub modality: Modality,\n/// Raw source bytes (bounded by `[perception].max_media_bytes`).\n\npub bytes: Vec<u8>,\n/// MIME media type hint.\n\npub media_type: String\n}",
              "documentation": "A media artifact offered for ingress (\u00a74.7.2: every artifact must pass\nthrough the bound perception provider before use)."
            },
            {
              "name": "::PerceptionRecord",
              "line": 32,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PerceptionRecord {\n/// Provider perception id; downstream consumers reference this, never\n\n/// the raw bytes.\n\npub perception_id: String,\n/// True when the IR is signed per the provider's signing model\n\n/// (`require_signed_ir = true` makes unsigned records inadmissible).\n\npub signed: bool,\n/// Content-addressed reference to the typed SemanticIR.\n\npub ir_ref: String,\n/// Modalities actually perceived.\n\npub modalities: Vec<Modality>\n}",
              "documentation": "The signed, typed perception record (\u00a74.7.2: a signed\n`PerceptionEvent` plus typed SemanticIR; source bytes stay in the\nprovider's content-addressable store)."
            },
            {
              "name": "::PerceptionPlane",
              "line": 47,
              "signature": "#[async_trait]\npub trait PerceptionPlane: Plane {\n    /// Ingest one media artifact, yielding a signed, typed record.\n    /// \u00a74.7.3: fail-closed \u2014 unsigned, unresolvable, or unverifiable\n    /// artifacts are rejected, never delivered best-effort.\n    async fn ingest(&self, artifact: MediaArtifact) -> Result<PerceptionRecord, PlaneError>;\n}",
              "documentation": "Perception plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/policy.rs",
          "sha256": "a2935b8ccb4d6b25df593bbc43826613eb605e42577670977528269e0e1bdc1e",
          "artifactSha256": "b1b60d7df5886c7fa217e1ab5d4d8643dbe998051013747341b0b43220efa0cd",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/policy.rs.txt",
          "declarations": [
            {
              "name": "::PolicyRequest",
              "line": 14,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PolicyRequest {\n/// The harness agent DID requesting the action.\n\npub subject_did: String,\n/// The permission being checked (`[inference].required_permission`).\n\npub permission: String,\n/// The entitlement consumed (`[inference].entitlement`).\n\npub entitlement: String,\n/// Policy document references from `[policy].policy_refs`.\n\npub policy_refs: Vec<String>\n}",
              "documentation": "An admission-time authorization check against the manifest's policy\nbinding (\u00a75.5, \u00a75.8: the inference `required_permission` and\n`entitlement` are the frozen IAM wire vocabulary)."
            },
            {
              "name": "::PolicyDecision",
              "line": 28,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PolicyDecision {\n/// True when the action is permitted.\n\npub allowed: bool,\n/// Why the decision was made (denials MUST carry a reason).\n\npub reason: String\n}",
              "documentation": "The policy plane's decision (\u00a74.6: a policy engine miss denies\nin-contract, never a 5xx-as-allow)."
            },
            {
              "name": "::PolicyPlane",
              "line": 37,
              "signature": "#[async_trait]\npub trait PolicyPlane: Plane {\n    /// Authorize the requested permission/entitlement for the subject.\n    async fn authorize(&self, request: PolicyRequest) -> Result<PolicyDecision, PlaneError>;\n}",
              "documentation": "Policy plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/substrate.rs",
          "sha256": "79016120ea500ff4a36c1be9e13ee40430f408440238659267dfa7eeeb6574c1",
          "artifactSha256": "814cc92b91b0120482cb73b249593d15c57e8c2109f34ab2e8bb7a61cc54553e",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/substrate.rs.txt",
          "declarations": [
            {
              "name": "::PlacementRequest",
              "line": 14,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PlacementRequest {\n/// The run id.\n\npub run_id: String,\n/// Substrate class (`[substrate].class`).\n\npub class: SubstrateClass,\n/// Isolation class (`[substrate].isolation`).\n\npub isolation: Isolation\n}",
              "documentation": "Placement preparation input (\u00a75.13: `substrate.class` selects an\nexecution substrate *class*, never a deployment target)."
            },
            {
              "name": "::Placement",
              "line": 25,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct Placement {\n/// Provider-side placement id.\n\npub placement_id: String,\n/// Durable evidence reference for the placement, when produced.\n\npub evidence_ref: Option<String>\n}",
              "documentation": "The prepared placement."
            },
            {
              "name": "::SubstratePlane",
              "line": 34,
              "signature": "#[async_trait]\npub trait SubstratePlane: Plane {\n    /// Prepare the execution placement for a run.\n    async fn prepare(&self, request: PlacementRequest) -> Result<Placement, PlaneError>;\n}",
              "documentation": "Substrate plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/telemetry.rs",
          "sha256": "0e0fe06d245160c26ea21cb163708d9b2a2f386ddf908796162e4117050359fe",
          "artifactSha256": "bccf6c14aba8d44b074b59be43ee0b13c9d43a0bcfc813b42f0f2c516cf2487c",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/telemetry.rs.txt",
          "declarations": [
            {
              "name": "::TelemetryEvent",
              "line": 13,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct TelemetryEvent {\n/// Full event type (`<event_prefix>.<declared-subject>`).\n\npub event_type: String,\n/// Event subject (the run id).\n\npub subject: String,\n/// Event payload.\n\npub data: serde_json::Value,\n/// Emission time.\n\npub time: DateTime<Utc>\n}",
              "documentation": "One telemetry event under the manifest's declared prefix (\u00a75.12:\nCambium v1 grammar; the stream id is derived server-side)."
            },
            {
              "name": "::TelemetryPlane",
              "line": 26,
              "signature": "#[async_trait]\npub trait TelemetryPlane: Plane {\n    /// Emit one event. Returns the provider's event receipt reference,\n    /// when it produces one.\n    async fn emit(&self, event: TelemetryEvent) -> Result<Option<String>, PlaneError>;\n}",
              "documentation": "Telemetry plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/tools.rs",
          "sha256": "36ef411f19b9a639c2ef8ac3c013fdaf253025ac97ec003efe57ce9b8d3e8cd9",
          "artifactSha256": "16b6c904b0058c3238ea1c4cea6237b0605a2f57c06ad00f11b5451bd654902f",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/tools.rs.txt",
          "declarations": [
            {
              "name": "::ToolInvocation",
              "line": 13,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ToolInvocation {\n/// The run id the invocation belongs to.\n\npub run_id: String,\n/// The `<interface>/<action>` tool identifier.\n\npub tool: String,\n/// Opaque tool input (plane-defined encoding).\n\npub input: String,\n/// Capability grants offered for authorization\n\n/// (`[capabilities].act_refs`).\n\npub act_refs: Vec<String>\n}",
              "documentation": "One tool invocation (\u00a74.4 step 4: every invocation is checked against\nthe capability grants and the tool allowlist before it reaches the\nplane)."
            },
            {
              "name": "::ToolOutput",
              "line": 27,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ToolOutput {\n/// The tool's result content.\n\npub content: String,\n/// Provider evidence reference for the invocation, when produced.\n\npub evidence_ref: Option<String>\n}",
              "documentation": "Tool output returned to the loop as an observation."
            },
            {
              "name": "::ApprovalRequest",
              "line": 39,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ApprovalRequest {\n/// The run id.\n\npub run_id: String,\n/// The tool awaiting approval.\n\npub tool: String,\n/// The input awaiting approval.\n\npub input: String\n}",
              "documentation": "An approval request for a tool listed in `[tools].approval_required`\n(\u00a75.9: every invocation requires a human \u2014 or designated\napprover-harness \u2014 decision through the host's approval surface;\napprovals must be recorded in telemetry)."
            },
            {
              "name": "::ApprovalDecision",
              "line": 51,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"decision\", rename_all = \"snake_case\")]\npub enum ApprovalDecision {\n    /// Approved; the invocation may proceed.\n    Approved {\n        /// Who approved (human principal or approver-harness DID).\n        approver: String,\n    },\n    /// Denied; the loop receives the denial as an observation.\n    Denied {\n        /// Why the invocation was denied.\n        reason: String,\n    },\n}",
              "documentation": "The approval surface's decision."
            },
            {
              "name": "::ToolsPlane",
              "line": 66,
              "signature": "#[async_trait]\npub trait ToolsPlane: Plane {\n    /// Invoke an allowlisted tool against a covering capability grant.\n    async fn invoke(&self, invocation: ToolInvocation) -> Result<ToolOutput, PlaneError>;\n\n    /// Request approval for a gated invocation. Called only for tools in\n    /// `[tools].approval_required`; the runtime records the decision\n    /// either way (\u00a75.9).\n    async fn request_approval(\n        &self,\n        request: ApprovalRequest,\n    ) -> Result<ApprovalDecision, PlaneError>;\n}",
              "documentation": "Tools plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/planes/verification.rs",
          "sha256": "b1315d349852c3ba4d0fdb34f38a66f1255747197e8a01d36b4afa83027b8310",
          "artifactSha256": "5b43dc0e221b6b9cd26ead0e54f7be69102823eda4fdb5a018e1479a5331002c",
          "url": "/reference/source/forge-rs/harness-runtime/src/planes/verification.rs.txt",
          "declarations": [
            {
              "name": "::GateRequest",
              "line": 12,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct GateRequest {\n/// The run id.\n\npub run_id: String,\n/// The gate as declared in `[verification].gates`.\n\npub gate: Gate\n}",
              "documentation": "A request to run one declared gate."
            },
            {
              "name": "::GateResult",
              "line": 23,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct GateResult {\n/// The gate that was attempted.\n\npub gate: Gate,\n/// Whether the gate actually executed. `passed` is meaningless \u2014\n\n/// and MUST be ignored \u2014 when this is false.\n\npub executed: bool,\n/// Whether the executed gate passed.\n\npub passed: bool,\n/// Exit code for command gates, when executed.\n\npub exit_code: Option<i32>,\n/// Provider evidence reference, passed through verbatim or absent \u2014\n\n/// never synthesized (\u00a75.10).\n\npub evidence_ref: Option<String>,\n/// Human-readable detail (captured output summary, error).\n\npub detail: String\n}",
              "documentation": "A gate result (\u00a74.4 step 5: gate outputs become evidence refs; a gate\nthat did not run must not be reported as passed \u2014 the L1F-8 honesty\npolicy, bound by `[verification].evidence_required`)."
            },
            {
              "name": "::GateResult::counts_as_pass",
              "line": 44,
              "signature": "pub fn counts_as_pass(&self) -> bool;",
              "documentation": "The only way a gate counts toward a `verified` outcome: it ran and\nit passed. A plane that reports `passed: true, executed: false` is\ntreated as failed \u2014 structurally (\u00a74.4 step 5)."
            },
            {
              "name": "::VerificationPlane",
              "line": 51,
              "signature": "#[async_trait]\npub trait VerificationPlane: Plane {\n    /// Execute one declared gate and return its machine-checkable result.\n    async fn run_gate(&self, request: GateRequest) -> Result<GateResult, PlaneError>;\n}",
              "documentation": "Verification plane adapter."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/record.rs",
          "sha256": "663f381e07a61ef9208053cb9d35b43ac2b9b7224e9d2de5ab0b606872090191",
          "artifactSha256": "b04eaa567181ec63f42f7931110af83bb5ef1fc728c3c8db46b1638d70364565",
          "url": "/reference/source/forge-rs/harness-runtime/src/record.rs.txt",
          "declarations": [
            {
              "name": "::RUN_RECORD_SCHEMA_VERSION",
              "line": 17,
              "signature": "pub const RUN_RECORD_SCHEMA_VERSION: &str;",
              "documentation": "Run-record schema version. Bumped only with a migration note, per the\n\u00a75.16 versioning discipline applied to the record contract."
            },
            {
              "name": "::UsageTotals",
              "line": 21,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]\npub struct UsageTotals {\n/// Total input tokens across all inference calls.\n\npub input_tokens: u64,\n/// Total output tokens across all inference calls.\n\npub output_tokens: u64,\n/// `input_tokens + output_tokens`.\n\npub total_tokens: u64,\n/// Total USD charged.\n\npub cost_usd: f64,\n/// Number of inference calls made.\n\npub inference_calls: u64,\n/// Number of tool invocations executed.\n\npub tool_invocations: u64\n}",
              "documentation": "Terminal usage totals for settlement and archive."
            },
            {
              "name": "::RunOutcomeKind",
              "line": 40,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum RunOutcomeKind {\n    /// All declared gates executed and passed.\n    Verified,\n    /// Execution finished but a gate failed, or a gate could not run.\n    Failed,\n    /// The run stopped early (budget, step limit, plane failure).\n    Halted,\n    /// Admission refused the run.\n    Denied,\n}",
              "documentation": "The four terminal outcome kinds (\u00a74.4: the outcome is final and\nimmutable; every terminal state settles and archives)."
            },
            {
              "name": "::HaltReason",
              "line": 54,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"reason\", rename_all = \"snake_case\")]\npub enum HaltReason {\n    /// The inference budget was exhausted (\u00a75.8 `halt_and_settle`).\n    BudgetExhausted,\n    /// The budget was exhausted and the manifest's policy is\n    /// `request_approval` (\u00a75.8): an extension approval was requested and\n    /// the run halted pending it \u2014 extension mints a new budget epoch, it\n    /// never edits the exhausted one.\n    BudgetExhaustedApprovalRequested,\n    /// `[loop].max_steps` was reached without a final answer.\n    StepLimitExceeded,\n    /// A plane call failed in-run (\u00a74.4: any failure lands in a terminal\n    /// state with settlement \u2014 never silent continuation).\n    PlaneFailure {\n        /// The plane that failed.\n        plane: PlaneKind,\n        /// What happened.\n        detail: String,\n    },\n}",
              "documentation": "Why a run halted (\u00a74.6 vocabulary)."
            },
            {
              "name": "::RunOutcome",
              "line": 77,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"state\", rename_all = \"snake_case\")]\npub enum RunOutcome {\n    /// All declared gates executed and passed.\n    Verified {\n        /// The final answer, when the loop produced one.\n        answer: Option<String>,\n    },\n    /// Execution finished but verification failed (\u00a74.6: `failed` is\n    /// terminal with evidence; still settles).\n    Failed {\n        /// Why the run failed.\n        reason: String,\n    },\n    /// The run halted before completion.\n    Halted {\n        /// Why it halted.\n        cause: HaltReason,\n    },\n    /// Admission denied the run (\u00a74.4: denied still settles and archives).\n    Denied {\n        /// Why admission denied the run.\n        reason: String,\n    },\n}",
              "documentation": "The terminal outcome of a run."
            },
            {
              "name": "::RunOutcome::kind",
              "line": 103,
              "signature": "pub fn kind(&self) -> RunOutcomeKind;",
              "documentation": "The outcome kind for settlement."
            },
            {
              "name": "::PlaneDecision",
              "line": 116,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct PlaneDecision {\n/// The plane that made the decision.\n\npub plane: PlaneKind,\n/// The operation decided (e.g. `tool.invoke`, `inference.complete`).\n\npub operation: String,\n/// Whether the operation was allowed to proceed.\n\npub allowed: bool,\n/// Why / what happened (tool id, denial reason, budget state).\n\npub detail: String\n}",
              "documentation": "One recorded plane decision (allowlist checks, approval decisions,\nbudget gates) \u2014 the audit spine of the run."
            },
            {
              "name": "::AdmissionEvidence",
              "line": 130,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct AdmissionEvidence {\n/// The durable admission evidence reference.\n\npub evidence_ref: String,\n/// The identity plane's lineage verification evidence, when produced.\n\npub lineage_evidence_ref: Option<String>,\n/// The economics plane's reservation id.\n\npub reservation_id: String,\n/// The reservation's evidence reference, when produced.\n\npub reservation_evidence_ref: Option<String>,\n/// Granted USD budget.\n\npub granted_usd: f64,\n/// Granted token budget.\n\npub granted_tokens: u64\n}",
              "documentation": "Admission evidence (\u00a74.4 step 3: an admission allow without a durable\n`evidenceRef` must not exist)."
            },
            {
              "name": "::SettlementEvidence",
              "line": 147,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SettlementEvidence {\n/// The provider's settlement id.\n\npub settlement_id: String,\n/// Settled USD.\n\npub settled_usd: f64,\n/// Settled tokens.\n\npub settled_tokens: u64,\n/// The settlement evidence reference, when produced.\n\npub evidence_ref: Option<String>\n}",
              "documentation": "Settlement evidence (\u00a74.4 step 6)."
            },
            {
              "name": "::RunRecord",
              "line": 160,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct RunRecord {\n/// Schema version ([`RUN_RECORD_SCHEMA_VERSION`]).\n\npub schema_version: String,\n/// The run id minted at admission.\n\npub run_id: String,\n/// BLAKE3 manifest hash (hex) identifying the harness contract.\n\npub manifest_hash: String,\n/// Parent run id for spawned children (\u00a74.5).\n\npub parent_run_id: Option<String>,\n/// Derivation depth of this run (0 for a root harness).\n\npub depth: u32,\n/// The harness id (`[harness].id`).\n\npub harness_id: String,\n/// The agent DID (`[identity].did`).\n\npub agent_did: String,\n/// The loop strategy that executed (`[loop].strategy`).\n\npub loop_strategy: String,\n/// Admission evidence.\n\npub admission: AdmissionEvidence,\n/// Ordered plane decisions.\n\npub decisions: Vec<PlaneDecision>,\n/// Declared gate results, in manifest order.\n\npub gate_results: Vec<GateResult>,\n/// Terminal usage totals.\n\npub usage: UsageTotals,\n/// Terminal outcome.\n\npub outcome: RunOutcome,\n/// Settlement evidence; present on every terminal state (\u00a74.4: all\n\n/// still settle). Absent only when settlement itself failed \u2014 which is\n\n/// itself recorded in `telemetry_failures`.\n\npub settlement: Option<SettlementEvidence>,\n/// Telemetry/consolidation failures observed during the run. Recording\n\n/// them here keeps observability honest without silently dropping\n\n/// events or rewriting the terminal outcome.\n\npub telemetry_failures: Vec<String>,\n/// The run's W3C trace id (32 hex chars) propagated to providers.\n\npub trace_id: String,\n/// When the run started (admission time).\n\npub started_at: DateTime<Utc>,\n/// When the run reached its terminal state.\n\npub ended_at: DateTime<Utc>\n}",
              "documentation": "The structured run/evidence record \u2014 the future Sigil-anchor payload."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/spawn.rs",
          "sha256": "fcafd869636cf6034b7c107a068aa0340889205c1ee01bf78caf52614da520b7",
          "artifactSha256": "5bcd6b7c2628693943572d19bf1901072945fd5b5586b4032eedfc40b709b8d3",
          "url": "/reference/source/forge-rs/harness-runtime/src/spawn.rs.txt",
          "declarations": [
            {
              "name": "::SpawnedChild",
              "line": 30,
              "signature": "#[derive(Debug)]\npub struct SpawnedChild {\n\n}",
              "documentation": "The result of a successful spawn: a validated, narrowed child manifest\nplus the budget carved for it from the parent's ledger."
            },
            {
              "name": "::SpawnedChild::manifest",
              "line": 40,
              "signature": "pub fn manifest(&self) -> &ValidatedManifest;",
              "documentation": "The validated, narrowed child manifest."
            },
            {
              "name": "::SpawnedChild::depth",
              "line": 45,
              "signature": "pub fn depth(&self) -> u32;",
              "documentation": "The child's derivation depth (parent depth + 1)."
            },
            {
              "name": "::SpawnedChild::carved_usd",
              "line": 50,
              "signature": "pub fn carved_usd(&self) -> f64;",
              "documentation": "USD carved from the parent's remaining budget."
            },
            {
              "name": "::SpawnedChild::carved_tokens",
              "line": 55,
              "signature": "pub fn carved_tokens(&self) -> u64;",
              "documentation": "Tokens carved from the parent's remaining budget."
            },
            {
              "name": "::SpawnedChild::inherited_planes",
              "line": 60,
              "signature": "pub fn inherited_planes(&self) -> &[PlaneName];",
              "documentation": "Planes whose bindings the child inherits per `[spawn].inherit`."
            },
            {
              "name": "::spawn_child",
              "line": 72,
              "signature": "pub fn spawn_child(\n    parent: &mut AdmittedHarness,\n    child_source: &str,\n    context: &ValidationContext,\n) -> Result<SpawnedChild, SpawnError>;",
              "documentation": "Spawn a child harness: validate the child manifest, enforce every\n\u00a74.5 narrowing rule, and carve the declared budget out of the parent's\nledger. Fail-closed on any violation.\n\nOn success the parent's budget ledger is debited by the child's\ndeclared budgets (not the fraction ceiling \u2014 the child gets what it\ndeclared, never more)."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/spine/client.rs",
          "sha256": "2934108ef2b6c7eca1557d2d7e395946184a1d50f77ec63babac7eeaeaf720c5",
          "artifactSha256": "6eaad6c8f8fab541322f1af10becc4d46aaf49616ffda8c9c0f33d5d1b930e1d",
          "url": "/reference/source/forge-rs/harness-runtime/src/spine/client.rs.txt",
          "declarations": [
            {
              "name": "::MAP_BASE_URL_ENV",
              "line": 38,
              "signature": "pub const MAP_BASE_URL_ENV: &str;",
              "documentation": "Environment variable holding the MAP daemon base URL \u2014 the spine\nswitch. Identical name and semantics to ONE's client\n(`one-adapters::map`): one environment, one spine behavior."
            },
            {
              "name": "::MAP_AUTH_TYPE_ENV",
              "line": 40,
              "signature": "pub const MAP_AUTH_TYPE_ENV: &str;",
              "documentation": "Environment variable for the `x-l1fe-auth-type` header value."
            },
            {
              "name": "::MAP_TENANT_ID_ENV",
              "line": 42,
              "signature": "pub const MAP_TENANT_ID_ENV: &str;",
              "documentation": "Environment variable for the `x-l1fe-tenant-id` header value."
            },
            {
              "name": "::MAP_AGENT_DID_ENV",
              "line": 44,
              "signature": "pub const MAP_AGENT_DID_ENV: &str;",
              "documentation": "Environment variable for the sender DID (`x-l1fe-agent-did`)."
            },
            {
              "name": "::MAP_SCOPES_ENV",
              "line": 46,
              "signature": "pub const MAP_SCOPES_ENV: &str;",
              "documentation": "Environment variable for the dispatch scopes (`x-l1fe-scopes`)."
            },
            {
              "name": "::MAP_TIMEOUT_MS_ENV",
              "line": 48,
              "signature": "pub const MAP_TIMEOUT_MS_ENV: &str;",
              "documentation": "Environment variable for the per-attempt HTTP timeout (milliseconds)."
            },
            {
              "name": "::MAP_MAX_RETRIES_ENV",
              "line": 50,
              "signature": "pub const MAP_MAX_RETRIES_ENV: &str;",
              "documentation": "Environment variable for retries after the first attempt."
            },
            {
              "name": "::MAP_BEARER_TOKEN_ENV",
              "line": 56,
              "signature": "pub const MAP_BEARER_TOKEN_ENV: &str;",
              "documentation": "Environment variable for an optional bearer token\n(`Authorization: Bearer \u2026`). Surface A deployments behind Kong/Auth v4\nauthenticate at the gateway and never set this; a daemon running in\nits local development auth mode requires it. The value is sent on the\nwire only \u2014 it never appears in dispatch records, envelopes, or logs."
            },
            {
              "name": "::MIM_VERSION",
              "line": 59,
              "signature": "pub const MIM_VERSION: &str;",
              "documentation": "MIM protocol version carried in every envelope header."
            },
            {
              "name": "::DEFAULT_MODULE_VERSION",
              "line": 61,
              "signature": "pub const DEFAULT_MODULE_VERSION: &str;",
              "documentation": "Protocol module version requested on every dispatch."
            },
            {
              "name": "::DEFAULT_TIMEOUT",
              "line": 63,
              "signature": "pub const DEFAULT_TIMEOUT: Duration;",
              "documentation": "Default per-attempt HTTP timeout."
            },
            {
              "name": "::DEFAULT_MAX_RETRIES",
              "line": 66,
              "signature": "pub const DEFAULT_MAX_RETRIES: u32;",
              "documentation": "Default retries after the first attempt (transport errors and 5xx\nonly \u2014 4xx answers are real policy responses and are never retried)."
            },
            {
              "name": "::RETRY_BACKOFF",
              "line": 69,
              "signature": "pub const RETRY_BACKOFF: Duration;",
              "documentation": "Fixed backoff between attempts. MAP dispatch is an in-cluster call;\nthe fail-closed error path bounds total latency."
            },
            {
              "name": "::MapSpineConfig",
              "line": 79,
              "signature": "#[derive(Clone, Debug)]\npub struct MapSpineConfig {\n/// MAP daemon base URL (no trailing slash).\n\npub base_url: String,\n/// `x-l1fe-auth-type` header value.\n\npub auth_type: String,\n/// `x-l1fe-tenant-id` header value; omitted when unset.\n\npub tenant_id: Option<String>,\n/// Sender DID (`x-l1fe-agent-did` + envelope sender).\n\npub agent_did: String,\n/// Scopes sent on every dispatch.\n\npub scopes: Vec<String>,\n/// Per-attempt HTTP timeout.\n\npub timeout: Duration,\n/// Retries after the first attempt.\n\npub max_retries: u32,\n/// Protocol module version requested on dispatch.\n\npub module_version: String,\n/// Optional bearer token for daemons in local development auth mode\n\n/// (`MAP_BEARER_TOKEN`). Wire-only; never logged or recorded.\n\npub bearer_token: Option<String>\n}",
              "documentation": "Typed spine client configuration. Every field is env-driven; nothing\nis hardcoded per environment."
            },
            {
              "name": "::MapSpineConfig::from_env",
              "line": 104,
              "signature": "pub fn from_env() -> Option<Self>;",
              "documentation": "Build from the environment. Returns `None` when `MAP_BASE_URL` is\nunset or blank \u2014 the fail-closed signal every caller keys on."
            },
            {
              "name": "::MapSpineConfig::for_base_url",
              "line": 114,
              "signature": "pub fn for_base_url(base_url: impl Into<String>) -> Self;",
              "documentation": "Config with env-driven defaults for a known base URL (test seams\nand composed config loaders use this; env remains the production\nsource)."
            },
            {
              "name": "::SpineDispatchStatus",
              "line": 161,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SpineDispatchStatus {\n    /// The spine answered 2xx with a contract-shaped body.\n    Ok,\n    /// The spine answered a non-success status (a real answer, believed).\n    RemoteStatus,\n    /// The dispatch never reached a MAP answer after retries.\n    Transport,\n    /// A 2xx body broke the response contract.\n    InvalidResponse,\n}",
              "documentation": "Terminal outcome of one dispatch, for the audit log."
            },
            {
              "name": "::SpineDispatchRecord",
              "line": 175,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize)]\npub struct SpineDispatchRecord {\n/// Protocol dispatched to (e.g. `MIND`).\n\npub protocol: String,\n/// Operation dispatched (e.g. `store_memory`).\n\npub operation: String,\n/// The HTTP path the envelope was projected onto.\n\npub endpoint: String,\n/// Local correlation id (the request envelope's id).\n\npub correlation_id: String,\n/// The daemon's `requestId`, when it returned one.\n\npub remote_request_id: Option<String>,\n/// The W3C `traceparent` sent on the wire.\n\npub traceparent: String,\n/// Attempts made (1 + retries).\n\npub attempts: u32,\n/// Terminal outcome of the dispatch.\n\npub status: SpineDispatchStatus,\n/// Upstream HTTP status, when the spine answered.\n\npub http_status: Option<u16>\n}",
              "documentation": "The auditable record of one spine dispatch \u2014 the harness-side\nequivalent of ONE's receipt `map` block."
            },
            {
              "name": "::SpineDispatch",
              "line": 199,
              "signature": "#[derive(Debug, Clone)]\npub struct SpineDispatch {\n/// The protocol module's response payload, passed through verbatim.\n\npub output: Value,\n/// The exact MAP envelope message sent (`{ header, payload }`,\n\n/// mirroring the `map.json` schema) \u2014 the auditable request record,\n\n/// kept for evidence bundles the way ONE's client keeps\n\n/// `request_envelope`.\n\npub request_envelope: Value,\n/// The audit record for this dispatch (also appended to the client's\n\n/// dispatch log).\n\npub record: SpineDispatchRecord\n}",
              "documentation": "A completed MAP dispatch: the protocol module's verbatim `output` plus\nthe auditable request metadata."
            },
            {
              "name": "::MapSpineClient",
              "line": 215,
              "signature": "#[derive(Clone)]\npub struct MapSpineClient {\n\n}",
              "documentation": "Typed MAP spine client. Cheap to clone (shares one connection pool and\none dispatch log)."
            },
            {
              "name": "::MapSpineClient::new",
              "line": 223,
              "signature": "pub fn new(config: MapSpineConfig) -> Result<Self, PlaneError>;",
              "documentation": "Build a client from an explicit config."
            },
            {
              "name": "::MapSpineClient::from_env",
              "line": 236,
              "signature": "pub fn from_env() -> Option<Self>;",
              "documentation": "Build from the environment; `None` when the spine is unconfigured."
            },
            {
              "name": "::MapSpineClient::is_configured",
              "line": 241,
              "signature": "pub fn is_configured() -> bool;",
              "documentation": "`true` when `MAP_BASE_URL` is set \u2014 the spine switch."
            },
            {
              "name": "::MapSpineClient::config",
              "line": 246,
              "signature": "pub fn config(&self) -> &MapSpineConfig;",
              "documentation": "The client configuration."
            },
            {
              "name": "::MapSpineClient::dispatch_log",
              "line": 252,
              "signature": "pub fn dispatch_log(&self) -> Vec<SpineDispatchRecord>;",
              "documentation": "Every dispatch this client has completed, oldest first. Hosts\nattach this log to run evidence so spine traffic is auditable."
            },
            {
              "name": "::MapSpineClient::health_check",
              "line": 266,
              "signature": "pub async fn health_check(&self) -> bool;",
              "documentation": "Liveness probe against the daemon's `/v1/map/health`."
            },
            {
              "name": "::MapSpineClient::invoke",
              "line": 282,
              "signature": "#[instrument(skip(self, input))]\npub async fn invoke(\n        &self,\n        protocol: &str,\n        operation: &str,\n        input: Value,\n    ) -> Result<SpineDispatch, PlaneError>;",
              "documentation": "Dispatch one protocol operation through the spine.\n\nRetry-lite: transport failures and 5xx are retried up to\n`max_retries` times with a fixed backoff; 4xx and malformed\nresponses return immediately. The protocol segment is uppercased\nper the router's normalization; the operation segment is passed\nthrough verbatim."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/spine/context.rs",
          "sha256": "13a3ce4640b12411db20b274128e9fea0aad5422a4d24bdad616e7a3aef4f7b4",
          "artifactSha256": "34a6fb07726091094f7e140227ded41cbfb43814415ef0a27581b88a71187b1d",
          "url": "/reference/source/forge-rs/harness-runtime/src/spine/context.rs.txt",
          "declarations": [
            {
              "name": "::RecallHit",
              "line": 43,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct RecallHit {\n/// The memory's id.\n\npub memory_id: String,\n/// The memory's content (possibly capped at [`RECALL_CONTENT_CAP`]).\n\npub content: String\n}",
              "documentation": "One recalled memory folded into a packed frame."
            },
            {
              "name": "::MapContextPlane",
              "line": 53,
              "signature": "#[derive(Clone)]\npub struct MapContextPlane {\n\n}",
              "documentation": "Context plane adapter dispatching through the MAP spine\n(MIND recall; optional MARC decomposition)."
            },
            {
              "name": "::MapContextPlane::new",
              "line": 68,
              "signature": "pub fn new(client: MapSpineClient, recall_scope: impl Into<String>) -> Self;",
              "documentation": "Bind the context plane to the spine, recalling memories whose\nsymbolic filter object matches `recall_scope`."
            },
            {
              "name": "::MapContextPlane::with_recall_limit",
              "line": 78,
              "signature": "pub fn with_recall_limit(mut self, limit: usize) -> Self;",
              "documentation": "Cap on recalled memories per frame."
            },
            {
              "name": "::MapContextPlane::with_marc_decomposition",
              "line": 87,
              "signature": "pub fn with_marc_decomposition(mut self) -> Self;",
              "documentation": "Enable the MARC `reasoning_task` decomposition section (ONE's\n`one.nous/decompose` mapping). The decomposition runs per pack;\nits real result \u2014 including a \"no deduction possible\" answer \u2014\nlands in the frame."
            },
            {
              "name": "::MapContextPlane::client",
              "line": 93,
              "signature": "pub fn client(&self) -> &MapSpineClient;",
              "documentation": "The underlying spine client (for dispatch-log access)."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/spine/memory.rs",
          "sha256": "87d2c21697d1a7686c4063a4e3cfcd4f1cde815f7c51bbffdd945ace5334f79d",
          "artifactSha256": "93f15a8169934ab86aa26c523820fa6c9169d17a9dd231182ef61dcd498ebe21",
          "url": "/reference/source/forge-rs/harness-runtime/src/spine/memory.rs.txt",
          "declarations": [
            {
              "name": "::MapMemoryPlane",
              "line": 30,
              "signature": "#[derive(Clone)]\npub struct MapMemoryPlane {\n\n}",
              "documentation": "Memory plane adapter dispatching through the MAP spine (MIND).\n\nConstructed only when the spine is configured \u2014 hosts decide the\nbinding (`MAP_BASE_URL` set \u21d2 this plane; unset \u21d2 their local plane),\nso an unbound spine can never masquerade as memory."
            },
            {
              "name": "::MapMemoryPlane::new",
              "line": 41,
              "signature": "pub fn new(client: MapSpineClient, mind: impl Into<String>) -> Self;",
              "documentation": "Bind the memory plane to the spine. `mind` is the manifest's\n`[memory].mind` URI \u2014 it rides as a tag so recalled objects\nattribute to the mind that wrote them."
            },
            {
              "name": "::MapMemoryPlane::client",
              "line": 49,
              "signature": "pub fn client(&self) -> &MapSpineClient;",
              "documentation": "The underlying spine client (for dispatch-log access)."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/spine/mod.rs",
          "sha256": "5ace9c7c4387336337b3e1651e85dcd24773eff21e5e66567f24997eb51f793d",
          "artifactSha256": "346e53a5b96e276273ddbd91680292dfd22992b88f987e7b5f3a3964ed0b12c8",
          "url": "/reference/source/forge-rs/harness-runtime/src/spine/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use client::{\n    MapSpineClient, MapSpineConfig, SpineDispatchRecord, SpineDispatchStatus, MAP_AUTH_TYPE_ENV,\n    MAP_BASE_URL_ENV,\n};",
              "line": 45,
              "signature": "pub use client::{\n    MapSpineClient, MapSpineConfig, SpineDispatchRecord, SpineDispatchStatus, MAP_AUTH_TYPE_ENV,\n    MAP_BASE_URL_ENV,\n};",
              "documentation": ""
            },
            {
              "name": "pub use context::{MapContextPlane, RecallHit};",
              "line": 49,
              "signature": "pub use context::{MapContextPlane, RecallHit};",
              "documentation": ""
            },
            {
              "name": "pub use memory::MapMemoryPlane;",
              "line": 50,
              "signature": "pub use memory::MapMemoryPlane;",
              "documentation": ""
            },
            {
              "name": "pub use payloads::{\n    MarcReasoningTask, MarcTaskResult, MindMemoryMetadata, MindMemoryObject, MindMemoryQuery,\n    MindQueryResult, MindStorageResult, MindSymbolicFilter,\n};",
              "line": 51,
              "signature": "pub use payloads::{\n    MarcReasoningTask, MarcTaskResult, MindMemoryMetadata, MindMemoryObject, MindMemoryQuery,\n    MindQueryResult, MindStorageResult, MindSymbolicFilter,\n};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/spine/payloads.rs",
          "sha256": "5b7ac23fbe7abf6ed32c44c76757d9b11453d7b7acd4442a412e498dae519380",
          "artifactSha256": "bb738751921e32345926ef5b718bed0d310312f55f5c09fa00c5614e70041fe9",
          "url": "/reference/source/forge-rs/harness-runtime/src/spine/payloads.rs.txt",
          "declarations": [
            {
              "name": "::MindMemoryObject",
              "line": 29,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct MindMemoryObject {\n/// MIND protocol version the object conforms to.\n\npub mind_version: String,\n/// UUID identifying the memory.\n\npub memory_id: String,\n/// Core textual content.\n\npub content: String,\n/// Provenance chain entries (opaque to the runtime).\n\n#[serde(default)]\npub provenance_chain: Vec<Value>,\n/// Access control rules (opaque to the runtime).\n\n#[serde(default)]\npub access_control_list: Vec<Value>,\n/// Annotations (opaque to the runtime).\n\n#[serde(default)]\npub annotations: Vec<Value>,\n/// Triggers (opaque to the runtime).\n\n#[serde(default)]\npub triggers: Vec<Value>,\n/// Object metadata (timestamp, source DID, tags).\n\npub metadata: MindMemoryMetadata\n}",
              "documentation": "MIND `MemoryObject` \u2014 the storable unit of memory for `store_memory`.\n\n`mind_version` carries the MIND module's own protocol version\n(`MindProtocol::version()` \u2192 `\"1.0.0\"`), matching ONE's projection.\nNote: `map/schemas/mind/v1/index.json` declares a `const: \"2.0.0\"` that\nthe module itself does not enforce (its Rust type is a plain string) \u2014\na known schema-side drift; the module version is the interop truth."
            },
            {
              "name": "::MindMemoryMetadata",
              "line": 56,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct MindMemoryMetadata {\n/// RFC 3339 timestamp of the write.\n\npub timestamp: String,\n/// DID of the agent the memory is attributed to.\n\npub source_agent_did: String,\n/// Free-form tags.\n\n#[serde(default)]\npub tags: Vec<String>,\n/// Ontology references.\n\n#[serde(default)]\npub ontology_references: Vec<String>\n}",
              "documentation": "MIND `MemoryMetadata` \u2014 the module validates `sourceAgentDid` carries a\n`did:` prefix; the runtime never fabricates one."
            },
            {
              "name": "::MindSymbolicFilter",
              "line": 72,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct MindSymbolicFilter {\n/// Subject pattern.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub subject: Option<String>,\n/// Predicate pattern.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub predicate: Option<String>,\n/// Object pattern.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub object: Option<String>\n}",
              "documentation": "MIND `SymbolicFilter` \u2014 a triple pattern narrowing recall."
            },
            {
              "name": "::MindMemoryQuery",
              "line": 91,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct MindMemoryQuery {\n/// Caller-minted query id.\n\npub query_id: String,\n/// Symbolic triple filter.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub symbolic_filter: Option<MindSymbolicFilter>,\n/// DID of the agent requesting recall (the spine tenant principal).\n\npub requesting_agent_did: String,\n/// Result cap.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub limit: Option<usize>\n}",
              "documentation": "MIND `MemoryQuery` for `recall_memory`.\n\nVector recall requires an embedding the runtime does not compute\nlocally; harness recall is therefore symbolic-filter keyed (the same\nhonest projection ONE documents in `map_spine.rs`)."
            },
            {
              "name": "::MindStorageResult",
              "line": 107,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct MindStorageResult {\n/// The stored memory's id.\n\npub memory_id: String,\n/// Store timestamp (provider-rendered).\n\npub stored_at: String,\n/// Backend that stored the object (`LOCAL` | `AKASHA`).\n\npub backend: String,\n/// Stored version.\n\npub version: u64\n}",
              "documentation": "MIND `StorageResult` \u2014 the `store_memory` response payload."
            },
            {
              "name": "::MindQueryResult",
              "line": 121,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct MindQueryResult {\n/// Echo of the query id.\n\npub query_id: String,\n/// The recalled memory objects.\n\npub results: Vec<MindMemoryObject>,\n/// Provider-measured execution time.\n\npub execution_time_ms: u64,\n/// Provider message (may be empty).\n\npub message: String\n}",
              "documentation": "MIND `MemoryQueryResultPayload` \u2014 the `recall_memory` response payload."
            },
            {
              "name": "::MarcReasoningTask",
              "line": 142,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize)]\npub struct MarcReasoningTask {\n/// Caller-minted task id.\n\npub task_id: String,\n/// Reasoning type (`\"deductive\"` for the context-plane projection).\n\npub reasoning_type: String,\n/// Reasoning mode; the spine projection is always Monolithic.\n\npub mode: Value,\n/// Premise statements. MARC's deductive engine rejects an empty\n\n/// premise list (`InsufficientPremises`) \u2014 callers must supply at\n\n/// least one real premise (recalled memory contents or the task\n\n/// text); a fabricated premise would poison the trace.\n\npub premises: Vec<String>,\n/// The query the engine evaluates.\n\npub query: String,\n/// Optional context string.\n\n#[serde(skip_serializing_if = \"Option::is_none\")]\npub context: Option<String>,\n/// Engine parameters (provenance markers ride here).\n\npub engine_params: Value\n}",
              "documentation": "MARC `ReasoningTaskRequest` for `reasoning_task`.\n\nThe serde shapes mirror `marc-lib` exactly: `reasoning_type` is\nsnake_case, `mode` is internally tagged PascalCase\n(`{\"type\": \"Monolithic\"}`)."
            },
            {
              "name": "::MarcReasoningTask::deductive",
              "line": 166,
              "signature": "pub fn deductive(\n        task_id: impl Into<String>,\n        premises: Vec<String>,\n        query: impl Into<String>,\n        context: Option<String>,\n    ) -> Self;",
              "documentation": "A monolithic deductive task \u2014 the projection ONE uses for\n`one.nous/decompose` / `one.nous/verify_plan`."
            },
            {
              "name": "::MarcTaskResult",
              "line": 191,
              "signature": "#[derive(Debug, Clone, PartialEq, Deserialize)]\npub struct MarcTaskResult {\n/// Echo of the task id.\n\npub task_id: String,\n/// The engine's result value.\n\npub result: Value,\n/// Engine-reported confidence in `[0, 1]`.\n\npub confidence: f64,\n/// The reasoning trace (steps, totals, timing).\n\npub reasoning_trace: Value,\n/// Synthesis details, when the mode produced them.\n\n#[serde(default)]\npub synthesis_details: Option<Value>,\n/// Issues raised by the engine.\n\n#[serde(default)]\npub issues: Vec<Value>\n}",
              "documentation": "MARC `ReasoningTaskResponse` \u2014 the `reasoning_task` response payload.\nFields not needed by the runtime (`synthesis_details`, `issues`) are\nretained as opaque values so nothing the module returned is dropped."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/strategy/microdag.rs",
          "sha256": "c41dc7ae8731c44e70ba0d8775af404b4a51b07e2d8a1bef788dc854e8efdc94",
          "artifactSha256": "1bd1b3de09b7d419f0291dd739fd9ccacbd3b0c3b05925d0e57b1214fa69dc06",
          "url": "/reference/source/forge-rs/harness-runtime/src/strategy/microdag.rs.txt",
          "declarations": [
            {
              "name": "::DagError",
              "line": 18,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Error)]\npub enum DagError {\n    /// Two nodes share an id.\n    #[error(\"duplicate node id {0:?}\")]\n    DuplicateNode(String),\n    /// A `depends_on` edge names a node that does not exist.\n    #[error(\"node {node:?} depends on unknown node {dependency:?}\")]\n    UnknownDependency {\n        /// The node carrying the edge.\n        node: String,\n        /// The missing dependency.\n        dependency: String,\n    },\n    /// The graph contains a dependency cycle.\n    #[error(\"dependency cycle involving {0:?}\")]\n    Cycle(Vec<String>),\n}",
              "documentation": "A MicroDAG validation failure."
            },
            {
              "name": "::MicroDagNode",
              "line": 37,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct MicroDagNode {\n/// Unique step id.\n\npub id: String,\n/// Ids of steps that must complete before this one starts.\n\npub depends_on: Vec<String>\n}",
              "documentation": "One MicroDAG step."
            },
            {
              "name": "::MicroDag",
              "line": 46,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct MicroDag {\n\n}",
              "documentation": "A validated MicroDAG: a small step graph with dependency edges."
            },
            {
              "name": "::MicroDag::new",
              "line": 53,
              "signature": "pub fn new(nodes: Vec<MicroDagNode>) -> Result<Self, DagError>;",
              "documentation": "Build and validate a MicroDAG (unique ids, resolvable edges,\nacyclic)."
            },
            {
              "name": "::MicroDag::nodes",
              "line": 60,
              "signature": "pub fn nodes(&self) -> &[MicroDagNode];",
              "documentation": "The steps, in declaration order."
            },
            {
              "name": "::MicroDag::layers",
              "line": 91,
              "signature": "pub fn layers(&self) -> Result<Vec<Vec<String>>, DagError>;",
              "documentation": "Kahn's-algorithm topological layering: nodes with no outstanding\ndependencies form layer 0, and each later layer unblocks as earlier\nlayers complete. A cycle leaves unprocessed nodes, which is the\ncycle witness."
            },
            {
              "name": "::MicroDagStrategy",
              "line": 147,
              "signature": "pub trait MicroDagStrategy: LoopStrategy {\n    /// Compile a task and admitted manifest into an executable MicroDAG.\n    fn compile(&self, task: &str) -> Result<MicroDag, DagError>;\n}",
              "documentation": "The `microdag` loop strategy contract.\n\nImplementations compile a task into a [`MicroDag`] and drive the layers\nagainst the bound planes. Registered by hosts; the strategy name\nresolves through [`LoopStrategy::name`]."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/strategy/mod.rs",
          "sha256": "28a067d8729995a46cc22759db8b2b6b2b5befea3f1a60f4438499ab00f9224c",
          "artifactSha256": "7cf1c331ede78a1b13e3a124334a4a3316afd9335707dd83ae90458f39649005",
          "url": "/reference/source/forge-rs/harness-runtime/src/strategy/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use microdag::{DagError, MicroDag, MicroDagNode, MicroDagStrategy};",
              "line": 18,
              "signature": "pub use microdag::{DagError, MicroDag, MicroDagNode, MicroDagStrategy};",
              "documentation": ""
            },
            {
              "name": "pub use react::ReactLoop;",
              "line": 19,
              "signature": "pub use react::ReactLoop;",
              "documentation": ""
            },
            {
              "name": "::RunPlan",
              "line": 23,
              "signature": "#[derive(Debug)]\npub struct RunPlan {\n/// The admitted harness (contract sealed, planes bound, budget\n\n/// reserved).\n\npub admitted: AdmittedHarness,\n/// The task to accomplish.\n\npub task: String\n}",
              "documentation": "Everything a strategy needs to drive one run."
            },
            {
              "name": "::LoopStrategy",
              "line": 38,
              "signature": "#[async_trait]\npub trait LoopStrategy: Send + Sync {\n    /// The registered strategy name (`loop.strategy` in the manifest).\n    fn name(&self) -> &'static str;\n\n    /// Drive one run to its terminal state.\n    async fn run(&self, plan: RunPlan) -> Result<RunRecord, RuntimeError>;\n}",
              "documentation": "A loop strategy driver.\n\nImplementations sequence plane calls for one run and produce the\nterminal [`RunRecord`]. Per \u00a74.4, in-run failures land in terminal\n`halted`/`failed` outcomes with settlement \u2014 strategies return `Err`\nonly for runtime-contract violations, not provider failures."
            },
            {
              "name": "::StrategyRegistry",
              "line": 53,
              "signature": "#[derive(Clone, Default)]\npub struct StrategyRegistry {\n\n}",
              "documentation": "The runtime's strategy registry.\n\nShips with `react` registered ([`StrategyRegistry::with_builtins`]).\n`microdag` is a supported strategy *trait* ([`MicroDagStrategy`]) that\nhosts register their driver for; a manifest naming an unregistered\nstrategy is denied at admission (\u00a75.13)."
            },
            {
              "name": "::StrategyRegistry::new",
              "line": 59,
              "signature": "pub fn new() -> Self;",
              "documentation": "An empty registry."
            },
            {
              "name": "::StrategyRegistry::with_builtins",
              "line": 64,
              "signature": "pub fn with_builtins() -> Self;",
              "documentation": "A registry with the builtin drivers (`react`)."
            },
            {
              "name": "::StrategyRegistry::register",
              "line": 71,
              "signature": "pub fn register(&mut self, strategy: Arc<dyn LoopStrategy>);",
              "documentation": "Register a driver under its `name()`."
            },
            {
              "name": "::StrategyRegistry::get",
              "line": 76,
              "signature": "pub fn get(&self, name: &str) -> Option<&Arc<dyn LoopStrategy>>;",
              "documentation": "Look up a driver by manifest `loop.strategy` name."
            },
            {
              "name": "::StrategyRegistry::names",
              "line": 81,
              "signature": "pub fn names(&self) -> Vec<&'static str>;",
              "documentation": "Registered strategy names, sorted."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/strategy/react.rs",
          "sha256": "19ceafc8b2fa8185b9df090c60a48ce7d535d2f881692897cda5872487e796ed",
          "artifactSha256": "54a0cbfbe5f88a54c21c60e7d9d18935086cf008ca54cb74b7dbbe68baa9ffad",
          "url": "/reference/source/forge-rs/harness-runtime/src/strategy/react.rs.txt",
          "declarations": [
            {
              "name": "::ReactLoop",
              "line": 34,
              "signature": "#[derive(Debug, Default)]\npub struct ReactLoop;",
              "documentation": "The `react` loop strategy driver."
            },
            {
              "name": "::ReactLoop::new",
              "line": 38,
              "signature": "pub fn new() -> Self;",
              "documentation": "Construct the driver."
            }
          ]
        },
        {
          "path": "forge-rs/harness-runtime/src/trace.rs",
          "sha256": "42b8a03ffd77a94a0a6d8044bd453eedff899243f013f3e6e85e0ea7d9544932",
          "artifactSha256": "2b25a2317a8ba0bd143845e75fb65630eed96ea95092de5b5cbff709246ce810",
          "url": "/reference/source/forge-rs/harness-runtime/src/trace.rs.txt",
          "declarations": [
            {
              "name": "::TRACEPARENT_HEADER",
              "line": 15,
              "signature": "pub const TRACEPARENT_HEADER: &str;",
              "documentation": "The `traceparent` header name defined by W3C Trace Context."
            },
            {
              "name": "::TraceContext",
              "line": 19,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub struct TraceContext {\n\n}",
              "documentation": "A W3C Trace Context: 128-bit trace id, 64-bit span id, sampled flag."
            },
            {
              "name": "::TraceContext::root",
              "line": 27,
              "signature": "pub fn root() -> Self;",
              "documentation": "Mint a fresh root context (random trace and span ids, sampled)."
            },
            {
              "name": "::TraceContext::child",
              "line": 38,
              "signature": "pub fn child(&self) -> Self;",
              "documentation": "Derive a child context: same trace, fresh span id. Used when one\nplane call logically nests under another within the same run."
            },
            {
              "name": "::TraceContext::trace_id_hex",
              "line": 48,
              "signature": "pub fn trace_id_hex(&self) -> String;",
              "documentation": "The trace id as 32 lowercase hex characters."
            },
            {
              "name": "::TraceContext::span_id_hex",
              "line": 53,
              "signature": "pub fn span_id_hex(&self) -> String;",
              "documentation": "The span id as 16 lowercase hex characters."
            },
            {
              "name": "::TraceContext::sampled",
              "line": 58,
              "signature": "pub fn sampled(&self) -> bool;",
              "documentation": "Whether the sampled flag is set."
            },
            {
              "name": "::TraceContext::traceparent",
              "line": 64,
              "signature": "pub fn traceparent(&self) -> String;",
              "documentation": "Render the W3C `traceparent` header value:\n`00-<trace-id>-<span-id>-<flags>`."
            },
            {
              "name": "::TraceContext::from_traceparent",
              "line": 74,
              "signature": "pub fn from_traceparent(value: &str) -> Result<Self, TraceContextError>;",
              "documentation": "Parse a `traceparent` header value (version `00` only)."
            }
          ]
        }
      ]
    },
    {
      "name": "harness-apd",
      "language": "rust",
      "version": "0.1.0",
      "description": "APD benchmark driver \u2014 binds harness-runtime (HarnessSpec v0.1) to an OpenAI-compatible inference route, local dev planes, and the MAP spine when MAP_BASE_URL is set (WS-11)",
      "manifest": "forge-rs/harness-apd/Cargo.toml",
      "manifestSha256": "9b1cc5d4fbf7f818d531f3524aabefadb257c34249e7deed8b907ca5a70e5846",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/harness-apd",
      "features": {},
      "files": [
        {
          "path": "forge-rs/harness-apd/src/driver.rs",
          "sha256": "7b4af215e5351992fc93637fb11179f5cc6dff75bdec76233a861391862fb9f1",
          "artifactSha256": "ba01958e4b849b56fa248658623274138d1de17ff98b83e1ce00ec30702b868d",
          "url": "/reference/source/forge-rs/harness-apd/src/driver.rs.txt",
          "declarations": [
            {
              "name": "::RunArtifacts",
              "line": 49,
              "signature": "#[derive(Debug)]\npub struct RunArtifacts {\n/// The runner-facing result (`apd-harness-result/1`).\n\npub result: ApdRunResult,\n/// The full HarnessSpec run record (`harness.run.v1`).\n\npub record: RunRecord\n}",
              "documentation": "Everything one executed attempt produces."
            },
            {
              "name": "::DriverError",
              "line": 58,
              "signature": "#[derive(Debug, thiserror::Error)]\npub enum DriverError {\n    /// The spec could not be read or parsed.\n    #[error(\"spec: {0}\")]\n    Spec(String),\n    /// A plane could not be constructed.\n    #[error(\"plane binding: {0}\")]\n    Binding(String),\n    /// Admission denied the harness (denied runs never execute, \u00a74.4).\n    #[error(\"admission denied: {0}\")]\n    Admission(String),\n    /// The run itself faulted outside the terminal-outcome contract.\n    #[error(\"runtime: {0}\")]\n    Runtime(String),\n    /// Writing an artifact failed.\n    #[error(\"artifact write: {0}\")]\n    Artifact(String),\n}",
              "documentation": "Driver-level failures (the run never reached a terminal state)."
            },
            {
              "name": "::run",
              "line": 77,
              "signature": "pub async fn run(spec: &ApdTaskSpec, events_path: PathBuf) -> Result<RunArtifacts, DriverError>;",
              "documentation": "Execute one task spec end-to-end."
            }
          ]
        },
        {
          "path": "forge-rs/harness-apd/src/inference.rs",
          "sha256": "7d3afaaa65479c37e487e2ce174e51bfba1b452bd8b4a9a8dfec6edf3526446b",
          "artifactSha256": "5d61fb136831a4a98b7fafd7a3452c661c7b562d5c85b95dc8a2d2ef2f88c455",
          "url": "/reference/source/forge-rs/harness-apd/src/inference.rs.txt",
          "declarations": [
            {
              "name": "::OpenAiInferencePlane",
              "line": 66,
              "signature": "pub struct OpenAiInferencePlane {\n\n}",
              "documentation": "Inference plane over an OpenAI-compatible route."
            },
            {
              "name": "::OpenAiInferencePlane::new",
              "line": 79,
              "signature": "pub fn new(\n        base_url: &str,\n        api_key: Option<String>,\n        model: impl Into<String>,\n        temperature: Option<f64>,\n        max_output_tokens: Option<u64>,\n        price: SpecPrice,\n        tools: Vec<String>,\n    ) -> Result<Self, PlaneError>;",
              "documentation": "Bind the plane to a route. `api_key` becomes the route's\n`authorization: Bearer` header when present; the key value is held\nonly inside the HTTP client's default headers."
            }
          ]
        },
        {
          "path": "forge-rs/harness-apd/src/lib.rs",
          "sha256": "bba65e5ff0f309af2c54fc8b923c9146064301c66f0f6ec530d36d4f3b030ef3",
          "artifactSha256": "108927e0cbf36e05b2aaa8ba796819cb539d3819abd068d533cbc46f04502c05",
          "url": "/reference/source/forge-rs/harness-apd/src/lib.rs.txt",
          "declarations": [
            {
              "name": "driver",
              "line": 28,
              "signature": "pub mod driver;",
              "documentation": "# harness-apd\n\nThe APD benchmark harness arm (`one/app/benchmarks`, WS-11; FINAL_SPEC\n\u00a78.5): executes one benchmark task spec as a real HarnessSpec v0.1 run\nthrough [`harness_runtime`] \u2014 admission gate, ReAct loop, verification\ngates, settlement, archived run record \u2014 and projects the terminal\nrecord into the benchmark runner's result contract.\n\nPlane binding:\n\n- **Memory + context** dispatch through the MAP spine (MIND\n  `store_memory`/`recall_memory`, optional MARC `reasoning_task`)\n  when `MAP_BASE_URL` is set \u2014 the same spine switch ONE's\n  PlaneRegistry keys on \u2014 and bind local dev planes otherwise.\n- **Inference** rides the OpenAI-compatible route named by the spec,\n  metered from the runner's fail-loud price table.\n- **Identity, policy, economics, telemetry, substrate, tools,\n  verification** bind the local dev planes (real structural\n  verification, in-process ledger, workspace filesystem tools, shell\n  command gates, JSONL event emission).\n\nThe binary is `harness-apd-driver`; the TypeScript `HarnessDriver`\nspawns it per task attempt."
            },
            {
              "name": "inference",
              "line": 29,
              "signature": "pub mod inference;",
              "documentation": ""
            },
            {
              "name": "local_planes",
              "line": 30,
              "signature": "pub mod local_planes;",
              "documentation": ""
            },
            {
              "name": "patch",
              "line": 31,
              "signature": "pub mod patch;",
              "documentation": ""
            },
            {
              "name": "spec",
              "line": 32,
              "signature": "pub mod spec;",
              "documentation": ""
            },
            {
              "name": "pub use driver::{run, DriverError, RunArtifacts};",
              "line": 34,
              "signature": "pub use driver::{run, DriverError, RunArtifacts};",
              "documentation": ""
            },
            {
              "name": "pub use spec::{ApdRunResult, ApdTaskSpec, SpecError, SPEC_SCHEMA};",
              "line": 35,
              "signature": "pub use spec::{ApdRunResult, ApdTaskSpec, SpecError, SPEC_SCHEMA};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-rs/harness-apd/src/local_planes.rs",
          "sha256": "00ab97812b91ab7355e114d82c7b0e63e627808b200e8261467166d35acac44e",
          "artifactSha256": "3df85e20668b4e5e3ee6c52a5efe0de0cf3840dc63044257227f498a57523600",
          "url": "/reference/source/forge-rs/harness-apd/src/local_planes.rs.txt",
          "declarations": [
            {
              "name": "::LocalIdentityPlane",
              "line": 47,
              "signature": "pub struct LocalIdentityPlane;",
              "documentation": "Local dev identity plane: real structural verification of the OAS\nbinding (DID method, lineage reference form, human-root kind, depth\nbound) with a content-hashed evidence reference. It does not claim\nKeystone's cryptographic lineage resolution \u2014 it verifies everything\na local check honestly can."
            },
            {
              "name": "::LocalPolicyPlane",
              "line": 95,
              "signature": "pub struct LocalPolicyPlane;",
              "documentation": "Local dev policy plane: evaluates real rules over the admission\nrequest \u2014 the subject DID must be well-formed, the declared\nentitlement must scope the requested permission, and at least one\npolicy document must be declared. A miss denies in-contract (\u00a74.6)."
            },
            {
              "name": "::LocalContextPlane",
              "line": 152,
              "signature": "pub struct LocalContextPlane;",
              "documentation": "Static context packer: the frame is the task text as declared (the APD\ntask prompt plus its declared context files), token-counted by the\ndocumented ceil(chars/4) estimate. Used when no spine is configured."
            },
            {
              "name": "::LocalMemoryPlane",
              "line": 189,
              "signature": "#[derive(Default)]\npub struct LocalMemoryPlane {\n\n}",
              "documentation": "In-process memory plane: a real store (writes are retained and\nconsolidated within the process) with content-hashed evidence\nreferences. Used when no spine is configured."
            },
            {
              "name": "::LocalEconomicsPlane",
              "line": 265,
              "signature": "#[derive(Default)]\npub struct LocalEconomicsPlane {\n\n}",
              "documentation": "In-process economics ledger: reservations grant exactly what the\nmanifest requests (the runtime's budget ledger enforces the caps from\nthere), settlement records the run's real usage totals exactly once."
            },
            {
              "name": "::LocalTelemetryPlane",
              "line": 360,
              "signature": "pub struct LocalTelemetryPlane {\n\n}",
              "documentation": "Local telemetry plane: every event is appended as one JSON line to the\nrun's events file \u2014 real emission with a real receipt (file + line\nnumber), never a dropped ack."
            },
            {
              "name": "::LocalTelemetryPlane::new",
              "line": 367,
              "signature": "pub fn new(path: impl Into<PathBuf>) -> Self;",
              "documentation": "Bind emission to a JSONL file (created or appended)."
            },
            {
              "name": "::LocalSubstratePlane",
              "line": 416,
              "signature": "pub struct LocalSubstratePlane;",
              "documentation": "Local-process substrate: the placement is this process, honestly\nidentified (run id + pid)."
            },
            {
              "name": "::LocalToolsPlane",
              "line": 447,
              "signature": "pub struct LocalToolsPlane {\n\n}",
              "documentation": "Workspace tools plane: real filesystem implementations of the\nallowlisted `one.code/*` tools, rooted at the task's pristine checkout\nwith path-traversal containment. `request_approval` denies closed \u2014\nthe APD driver has no human approval surface, and the manifest gates\nno tool."
            },
            {
              "name": "::LocalToolsPlane::new",
              "line": 453,
              "signature": "pub fn new(root: impl Into<PathBuf>) -> Result<Self, PlaneError>;",
              "documentation": "Root the tools at a workspace directory (canonicalized once)."
            },
            {
              "name": "::LocalVerificationPlane",
              "line": 592,
              "signature": "pub struct LocalVerificationPlane {\n\n}",
              "documentation": "Local verification plane: runs each declared gate as a real shell\ncommand in the workspace root with a timeout; the exit code and the\ncaptured output tail are the machine-checkable result. `evidence_ref`\nis absent \u2014 a local sh gate produces no durable provider evidence, and\nthe honesty policy prefers absence over synthesis (\u00a75.10)."
            },
            {
              "name": "::LocalVerificationPlane::new",
              "line": 598,
              "signature": "pub fn new(root: impl Into<PathBuf>) -> Self;",
              "documentation": "Bind gate execution to a workspace directory."
            }
          ]
        },
        {
          "path": "forge-rs/harness-apd/src/main.rs",
          "sha256": "ce6e1bc409ff17e6a2f5c1574badce7a342cd941225b8d3b1ba2f85db9e318cd",
          "artifactSha256": "90612127dfe5f095373978bc5b876fa761475d0e39a6cf83d1e85409266df546",
          "url": "/reference/source/forge-rs/harness-apd/src/main.rs.txt",
          "declarations": []
        },
        {
          "path": "forge-rs/harness-apd/src/patch.rs",
          "sha256": "10d0a7ee94ff4f46632d72084b24fdd535776cccc63697b38d264387dfe02573",
          "artifactSha256": "bf181574e22a115caf57f0529e8bf1c7a20de1d5885b02e3335186838133ae30",
          "url": "/reference/source/forge-rs/harness-apd/src/patch.rs.txt",
          "declarations": [
            {
              "name": "::extract_patch",
              "line": 10,
              "signature": "pub fn extract_patch(completion: &str) -> Option<String>;",
              "documentation": "Unified-diff extraction from a model completion \u2014 the Rust port of the\nbenchmark runner's `extractPatch` (`one/app/benchmarks/runner/src\ndrivers/baseline.ts`), kept byte-compatible so both arms extract under\nidentical rules: a fenced ```diff block first, then a raw scan for the\nfirst `diff --git ` header; the candidate must carry `--- ` and `+++ `\nlines to count as a unified diff.\nExtract a unified diff from a completion, or `None` when the\ncompletion carries none."
            }
          ]
        },
        {
          "path": "forge-rs/harness-apd/src/spec.rs",
          "sha256": "33fc4f5706fbb2792611e3359c6620a4dc2f33a96c19de41547259389156e9fc",
          "artifactSha256": "67d5c2ee946b38211dc3b743328f3c5275295a3326d25de457a0c475657fceb7",
          "url": "/reference/source/forge-rs/harness-apd/src/spec.rs.txt",
          "declarations": [
            {
              "name": "::SPEC_SCHEMA",
              "line": 12,
              "signature": "pub const SPEC_SCHEMA: &str;",
              "documentation": "The spec schema tag."
            },
            {
              "name": "::ApdTaskSpec",
              "line": 16,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ApdTaskSpec {\n/// Schema tag; must be [`SPEC_SCHEMA`].\n\npub schema: String,\n/// Corpus task id (e.g. `json5-cve-2022-46175`).\n\npub task_id: String,\n/// The task prompt from the corpus.\n\npub prompt: String,\n/// The task's declared context files, in declared order.\n\npub context_files: Vec<SpecContextFile>,\n/// Absolute path of the pristine workspace checkout (tools plane root).\n\npub workspace_dir: String,\n/// Operator-supplied model identifier (never defaulted \u2014 live-catalog\n\n/// discipline, L1F-16).\n\npub model: String,\n/// OpenAI-compatible base URL of the model route (e.g. a Foundry\n\n/// route or provider gateway).\n\npub base_url: String,\n/// Environment variable holding the route's API key. The key value is\n\n/// read from the process environment at run time; it is never written\n\n/// to the spec, the result, or the run record.\n\n#[serde(default)]\npub api_key_env: Option<String>,\n/// Sampling temperature. `null` omits the parameter entirely \u2014 some\n\n/// current flagship models accept only their default temperature and\n\n/// reject an explicit value.\n\n#[serde(default)]\npub temperature: Option<f64>,\n/// Output-token cap per model call.\n\n#[serde(default)]\npub max_output_tokens: Option<u64>,\n/// ReAct loop step cap (`[loop].max_steps`).\n\n#[serde(default = \"default_max_steps\")]\npub max_steps: u64,\n/// Context frame cap (`[context].frame_budget_tokens`).\n\n#[serde(default = \"default_frame_budget_tokens\")]\npub frame_budget_tokens: u64,\n/// USD budget cap (`[inference].budget_usd`).\n\npub budget_usd: f64,\n/// Token budget cap (`[inference].budget_tokens`).\n\npub budget_tokens: u64,\n/// The model's current price entry (the runner's fail-loud price\n\n/// table resolved it before any spend).\n\npub price: SpecPrice,\n/// Enable the MARC `reasoning_task` decomposition section when the\n\n/// MAP spine is configured. Ignored when it is not.\n\n#[serde(default = \"default_marc_decomposition\")]\npub marc_decomposition: bool\n}",
              "documentation": "One benchmark task attempt, as handed to the harness arm."
            },
            {
              "name": "::SpecContextFile",
              "line": 79,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct SpecContextFile {\n/// Repo-relative path.\n\npub path: String,\n/// Current content at the pinned ref.\n\npub content: String\n}",
              "documentation": "A declared context file (path + current content)."
            },
            {
              "name": "::SpecPrice",
              "line": 88,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]\npub struct SpecPrice {\n/// USD per 1M input tokens.\n\npub input_per_mtok: f64,\n/// USD per 1M output tokens.\n\npub output_per_mtok: f64\n}",
              "documentation": "USD per 1M tokens, resolved by the runner's price table at spec time."
            },
            {
              "name": "::ApdTaskSpec::from_json",
              "line": 97,
              "signature": "pub fn from_json(source: &str) -> Result<Self, SpecError>;",
              "documentation": "Parse and check a spec document."
            },
            {
              "name": "::SpecError",
              "line": 126,
              "signature": "#[derive(Debug, thiserror::Error)]\npub enum SpecError {\n    /// The document is not valid JSON for the spec shape.\n    #[error(\"malformed spec: {0}\")]\n    Malformed(serde_json::Error),\n    /// The schema tag is not supported by this driver.\n    #[error(\"unsupported spec schema {0:?} (expected {SPEC_SCHEMA:?})\")]\n    UnsupportedSchema(String),\n    /// A required field is missing or invalid.\n    #[error(\"missing or invalid field: {0}\")]\n    MissingField(&'static str),\n}",
              "documentation": "Spec rejection reasons."
            },
            {
              "name": "::ApdRunResult",
              "line": 140,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize)]\npub struct ApdRunResult {\n/// Schema tag.\n\npub schema: String,\n/// Corpus task id.\n\npub task_id: String,\n/// The harness run id minted at admission.\n\npub run_id: String,\n/// The model route used.\n\npub model: String,\n/// Terminal outcome kind (`verified` | `failed` | `halted`).\n\npub outcome: String,\n/// The unified diff extracted from the run's final answer, when the\n\n/// loop produced one. `null` is honest: no patch exists.\n\npub patch: Option<String>,\n/// Real metered usage from the run record's usage totals.\n\npub usage: ApdUsage,\n/// MAP spine dispatches made by the run's planes (empty when the\n\n/// spine is unconfigured \u2014 local planes served the run).\n\npub map_spine: ApdMapSpine,\n/// Terminal error detail (halt reason / verification failure), when\n\n/// the run did not verify.\n\npub error: Option<String>\n}",
              "documentation": "The result artifact written per attempt (`apd-harness-result/1`)."
            },
            {
              "name": "::ApdUsage",
              "line": 166,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Serialize)]\npub struct ApdUsage {\n/// Total input tokens across all model calls.\n\npub prompt_tokens: u64,\n/// Total output tokens across all model calls.\n\npub completion_tokens: u64,\n/// Total USD charged against the budget ledger.\n\npub cost_usd: f64\n}",
              "documentation": "Metered usage projected for the runner's `DriverOutput`."
            },
            {
              "name": "::ApdMapSpine",
              "line": 177,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize)]\npub struct ApdMapSpine {\n/// Whether `MAP_BASE_URL` configured a spine for this run.\n\npub configured: bool,\n/// Every dispatch the run's planes made, in order.\n\npub dispatches: Vec<harness_runtime::SpineDispatchRecord>\n}",
              "documentation": "The run's spine traffic, for the evidence bundle."
            }
          ]
        }
      ]
    },
    {
      "name": "harness-sdk",
      "language": "rust",
      "version": "0.1.0-alpha.1",
      "description": "Harness SDK \u2014 framework for building autonomous agent harnesses with AHE (arXiv 2604.25850) primitives + Codex-grade TUI runtime.",
      "manifest": "harness-sdk/Cargo.toml",
      "manifestSha256": "4ad71921cbceaf39101bd812697407fdb1f9dd36184fc741704f4006f86081c7",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/harness-sdk",
      "features": {
        "default": [
          "chat",
          "autonomy"
        ],
        "chat": [],
        "autonomy": [
          "chat"
        ],
        "http": [
          "dep:reqwest"
        ],
        "plugins": [
          "dep:wasmtime",
          "dep:sha2",
          "dep:toml_edit",
          "dep:glob"
        ],
        "full": [
          "chat",
          "autonomy",
          "http",
          "plugins"
        ]
      },
      "files": [
        {
          "path": "harness-sdk/src/adapter.rs",
          "sha256": "7e45ad31415570d8132aaac9571b913ce07dfdff075ee507e4f520f21fa87558",
          "artifactSha256": "cedfc4fc92829a1b6c074d2bdc23d11cde3a223123f10b945719bcc40348c145",
          "url": "/reference/source/harness-sdk/src/adapter.rs.txt",
          "declarations": [
            {
              "name": "::AgentAdapter",
              "line": 83,
              "signature": "#[async_trait::async_trait]\npub trait AgentAdapter: Send + Sync + 'static {\n    /// Returns the adapter's name (used in logs and UI).\n    ///\n    /// Must be non-empty and stable across calls.\n    fn name(&self) -> &str;\n\n    /// Returns the adapter's capability flags.\n    ///\n    /// The SDK checks these flags before calling optional methods.\n    /// Returning `false` for a capability means the SDK will never call\n    /// the corresponding methods and will disable related UI features.\n    fn capabilities(&self) -> AdapterCapabilities;\n\n    /// Discover available agents.\n    ///\n    /// Called during initialization and when the user requests a refresh.\n    /// The SDK validates every returned `SdkAgentInfo` before use.\n    async fn list_agents(&self) -> Result<Vec<SdkAgentInfo>, AdapterError>;\n\n    /// Send a chat message to an agent and receive a streaming response.\n    ///\n    /// The returned stream must eventually yield [`ResponseChunk::Done`]\n    /// or [`ResponseChunk::Error`]. The SDK enforces a timeout if neither\n    /// arrives within the configured duration.\n    ///\n    /// # Arguments\n    ///\n    /// * `agent_id` \u2014 Target agent identifier (from `list_agents`)\n    /// * `message` \u2014 User's message text (already sanitized)\n    async fn send_message(\n        &self,\n        agent_id: &str,\n        message: &str,\n    ) -> Result<BoxStream<'static, ResponseChunk>, AdapterError>;\n\n    /// Cancel an in-progress response stream.\n    ///\n    /// Called when the user presses Escape or Ctrl+C during streaming.\n    /// Default implementation returns `Ok(())` (no-op).\n    async fn cancel_response(&self, _agent_id: &str) -> Result<(), AdapterError> ;\n\n    // \u2500\u2500 Autonomy Mode \u2500\u2500\n\n    /// Start an autonomous execution session.\n    ///\n    /// Returns a stream of [`AutonomyEvent`]s that the SDK displays\n    /// in the activity feed.\n    ///\n    /// Only called if `capabilities().autonomy` is `true`.\n    async fn start_autonomy(\n        &self,\n        _agent_id: &str,\n        _instructions: &str,\n    ) -> Result<BoxStream<'static, AutonomyEvent>, AdapterError> ;\n\n    /// Stop the current autonomous execution session.\n    ///\n    /// Called when the user presses Ctrl+S or `/stop`.\n    async fn stop_autonomy(&self, _agent_id: &str) -> Result<(), AdapterError> ;\n\n    /// Send a human interjection during autonomous execution.\n    ///\n    /// The adapter should acknowledge receipt via [`InterjectionAck`].\n    async fn send_interjection(\n        &self,\n        _interjection: &HumanInterjection,\n    ) -> Result<InterjectionAck, AdapterError> ;\n\n    // \u2500\u2500 Approval Management \u2500\u2500\n\n    /// Submit an approval decision for a pending request.\n    ///\n    /// Called when the user approves, denies, or edits an approval request\n    /// from the approval queue.\n    async fn submit_approval(\n        &self,\n        _request_id: &str,\n        _action: SdkApprovalAction,\n    ) -> Result<(), AdapterError> ;\n\n    // \u2500\u2500 UI Rendering Hooks \u2500\u2500\n\n    /// Optional hook to render custom content in the sidebar area.\n    ///\n    /// Called during each frame render. The `area` is the sidebar region\n    /// from `AppShellState::sidebar_area()`. Default is a no-op.\n    ///\n    /// This is intentionally **sync** because rendering happens on the\n    /// main thread inside `terminal.draw()`.\n    fn render_sidebar(\n        &self,\n        _frame: &mut ratatui::Frame,\n        _area: ratatui::layout::Rect,\n        _theme: &Theme,\n    ) ;\n\n    /// Optional hook to render custom content in the header area.\n    ///\n    /// Called during each frame render. The `area` is the header region\n    /// from `AppShellState::header_area()`. Default is a no-op.\n    fn render_header(\n        &self,\n        _frame: &mut ratatui::Frame,\n        _area: ratatui::layout::Rect,\n        _theme: &Theme,\n    ) ;\n\n    /// Optional hook to request a taller header from the chat screen.\n    ///\n    /// The default `AppShell` reserves only 1 row for the header. An\n    /// adapter that wants to paint a banner / mascot / multi-line\n    /// status returns its desired height here. The chat screen passes\n    /// `sidebar_collapsed` so the adapter can ask for a tall header\n    /// only when the sidebar is hidden (and otherwise paint into the\n    /// sidebar).\n    fn desired_header_height(&self, _sidebar_collapsed: bool) -> u16 ;\n\n    /// Optional hook to request a wider sidebar from the chat screen.\n    /// Defaults to the SDK's `AppShell` default (25 columns).\n    fn desired_sidebar_width(&self) -> Option<u16> ;\n\n    /// Optional hook to provide live file-mention completions when the\n    /// user types `@<prefix>` in the input bar.\n    ///\n    /// `prefix` is everything after the `@` up to the cursor. The\n    /// adapter returns up to ~50 matching paths (relative to its\n    /// workspace root). Default: no completions, dropdown stays\n    /// hidden.\n    ///\n    /// Path conventions adapters should honour:\n    /// - `@foo`           \u2192 fuzzy match anywhere in the workspace\n    /// - `@./foo`         \u2192 match relative to the workspace root\n    /// - `@../foo`        \u2192 walk up one directory\n    /// - `@/abs/path`     \u2192 absolute path on the filesystem\n    ///\n    /// This is intentionally **sync**: the SDK calls it on every\n    /// keystroke, so adapters MUST keep it cheap (cache the walk,\n    /// limit results, never block on I/O).\n    fn complete_file_mention(&self, _prefix: &str) -> Vec<String> ;\n\n    // \u2500\u2500 Lifecycle \u2500\u2500\n\n    /// Called once when the TUI application starts.\n    ///\n    /// Use this for any one-time initialization (connecting to backends,\n    /// spawning background tasks, etc.).\n    async fn on_startup(&self) -> Result<(), AdapterError> ;\n\n    /// Called once when the TUI application is shutting down.\n    ///\n    /// Use this for cleanup (closing connections, saving state, etc.).\n    /// The SDK waits up to 5 seconds for this to complete before forcing exit.\n    async fn on_shutdown(&self) -> Result<(), AdapterError> ;\n\n    // \u2500\u2500 Settings palette (Ctrl+P) \u2500\u2500\n\n    /// Return the current settings snapshot \u2014 providers, modes,\n    /// Flocks CLIs \u2014 that the runtime should render in the Ctrl+P\n    /// palette. The default returns an empty snapshot, which causes\n    /// the palette to show only the built-in pages.\n    async fn settings_snapshot(&self) -> Result<SettingsSnapshot, AdapterError> ;\n\n    /// Apply a [`SettingsAction`] picked by the user in the\n    /// settings palette. The default returns\n    /// `Ok(SettingsApplyResult::fail(...))`, signaling the runtime\n    /// to display a \"not supported\" flash.\n    async fn apply_settings_action(\n        &self,\n        _action: SettingsAction,\n    ) -> Result<SettingsApplyResult, AdapterError> ;\n}",
              "documentation": "The agent adapter trait \u2014 the single integration point for any agent backend.\n\nImplement this trait to connect the TUI to your agent framework. The SDK\nhandles all UI concerns; the adapter handles all agent concerns.\n\n# Required Methods\n\n- [`name`](AgentAdapter::name) \u2014 Adapter identifier\n- [`capabilities`](AgentAdapter::capabilities) \u2014 What this adapter supports\n- [`list_agents`](AgentAdapter::list_agents) \u2014 Discover available agents\n- [`send_message`](AgentAdapter::send_message) \u2014 Send a chat message\n\n# Optional Methods\n\nAll other methods have default implementations that return\n`Err(AdapterError::NotSupported(...))`. Override them based on your\nadapter's capabilities."
            }
          ]
        },
        {
          "path": "harness-sdk/src/adapters/http.rs",
          "sha256": "a5b05639733b0f7ffa3788a0168b04614cda64d899670ce7516e29e65f114b9b",
          "artifactSha256": "752a883699e8c8855fafb549368e8bd5d2027a625d58102032e0c525132d34f3",
          "url": "/reference/source/harness-sdk/src/adapters/http.rs.txt",
          "declarations": [
            {
              "name": "::HttpAdapter",
              "line": 41,
              "signature": "pub struct HttpAdapter {\n\n}",
              "documentation": "An adapter that connects to an HTTP-based agent API.\n\n# Examples\n\n```rust,no_run\nuse harness_sdk::HttpAdapter;\n\nlet adapter = HttpAdapter::new(\"http://localhost:8080\")\n    .with_bearer_token(\"my-token\");\n```"
            },
            {
              "name": "::HttpAdapter::new",
              "line": 51,
              "signature": "#[must_use]\npub fn new(base_url: impl Into<String>) -> Self;",
              "documentation": "Create a new HttpAdapter for the given base URL."
            },
            {
              "name": "::HttpAdapter::with_bearer_token",
              "line": 62,
              "signature": "#[must_use]\npub fn with_bearer_token(mut self, token: impl Into<String>) -> Self;",
              "documentation": "Set a bearer token for authentication."
            },
            {
              "name": "::HttpAdapter::with_capabilities",
              "line": 69,
              "signature": "#[must_use]\npub fn with_capabilities(mut self, caps: AdapterCapabilities) -> Self;",
              "documentation": "Set capabilities."
            }
          ]
        },
        {
          "path": "harness-sdk/src/adapters/mod.rs",
          "sha256": "baab6cf98d2a1b41f6e7fdc1c2db8c56c11c0fa99bc6e7a16b8525d760f65ede",
          "artifactSha256": "f2b6eb2ea1ce920f0c2423b0e33469cd80a3e323e9b2d3111885ab372a467306",
          "url": "/reference/source/harness-sdk/src/adapters/mod.rs.txt",
          "declarations": [
            {
              "name": "stdio",
              "line": 6,
              "signature": "pub mod stdio;",
              "documentation": "Built-in adapter implementations.\n\n- [`StdioAdapter`](stdio::StdioAdapter) \u2014 Wraps a child process using stdin/stdout\n- [`HttpAdapter`](http::HttpAdapter) \u2014 Connects to an HTTP-based agent API (feature: `http`)"
            },
            {
              "name": "http",
              "line": 9,
              "signature": "#[cfg(feature = \"http\")]\npub mod http;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/adapters/stdio.rs",
          "sha256": "27a091c0ce11db6949a91e54acf9e2199b00d804b143fe8215918eaa254af63d",
          "artifactSha256": "b56c4530e7ce20ce229226f5eeababa7b9064788f1fa98bb6f9f95c67227ea9c",
          "url": "/reference/source/harness-sdk/src/adapters/stdio.rs.txt",
          "declarations": [
            {
              "name": "::StdioAdapter",
              "line": 43,
              "signature": "pub struct StdioAdapter {\n\n}",
              "documentation": "An adapter that wraps a child process using stdio.\n\n# Examples\n\n```rust,no_run\nuse harness_sdk::StdioAdapter;\n\nlet adapter = StdioAdapter::new(\"python\", &[\"agent.py\"]);\n```"
            },
            {
              "name": "::StdioAdapter::new",
              "line": 56,
              "signature": "#[must_use]\npub fn new(program: impl Into<String>, args: &[impl AsRef<str>]) -> Self;",
              "documentation": "Create a new StdioAdapter for the given program and arguments.\n\nThe child process is not spawned until [`on_startup`](AgentAdapter::on_startup)\nis called."
            },
            {
              "name": "::StdioAdapter::with_name",
              "line": 69,
              "signature": "#[must_use]\npub fn with_name(mut self, name: impl Into<String>) -> Self;",
              "documentation": "Set the agent display name."
            }
          ]
        },
        {
          "path": "harness-sdk/src/backtrack.rs",
          "sha256": "fd04353fc7de1ac83b7a877bf74de95a7833b4df3ae0acfc2a0882f768029a67",
          "artifactSha256": "a729f2255fa6b0d7badaab86a3b932de4526766908ed0c4ef41b59c9448e552a",
          "url": "/reference/source/harness-sdk/src/backtrack.rs.txt",
          "declarations": [
            {
              "name": "::BacktrackTarget",
              "line": 24,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct BacktrackTarget {\n/// Index into `AppState::messages()` (0-based).\n\npub message_index: usize,\n/// User turn ordinal (1, 2, 3 \u2026) \u2014 useful as a label.\n\npub turn_ordinal: usize,\n/// Snippet of the user prompt (truncated to ~80 chars) for\n\n/// display.\n\npub preview: String\n}",
              "documentation": "One candidate backtrack target \u2014 every prior user turn becomes\na row in the picker."
            },
            {
              "name": "::list_backtrack_targets",
              "line": 38,
              "signature": "#[must_use]\npub fn list_backtrack_targets(state: &AppState) -> Vec<BacktrackTarget>;",
              "documentation": "Walk the timeline and produce one [`BacktrackTarget`] per user\nturn (most-recent last). Caller typically reverses this for\npresentation so the most recent turn shows at the top."
            },
            {
              "name": "::rewind_to",
              "line": 65,
              "signature": "pub fn rewind_to(state: &mut AppState, target: &BacktrackTarget) -> Result<String, SdkError>;",
              "documentation": "Rewind the timeline to the target, truncating every message at\nor after `target.message_index`. Clears streaming + thinking\nflags. Returns the user prompt that lived at the target index so\nthe caller can stuff it back into the composer for editing.\n\n# Errors\n\nReturns [`SdkError::EventLoop`] when the target's index is out\nof bounds or the message at that index is not a user turn (the\ntimeline shifted underneath the picker)."
            }
          ]
        },
        {
          "path": "harness-sdk/src/clipboard.rs",
          "sha256": "24e4830b05b03e0fddf0ba024ee61a651864da9b085454f678aa82a82e020637",
          "artifactSha256": "ba970e0c790932d0b7b06e926c86d4ac282286f0397eb563b32bb416663b8087",
          "url": "/reference/source/harness-sdk/src/clipboard.rs.txt",
          "declarations": [
            {
              "name": "::ClipboardError",
              "line": 12,
              "signature": "#[derive(Debug, Error)]\npub enum ClipboardError {\n    /// The platform clipboard is unavailable (no display server,\n    /// permission denied, etc.).\n    #[error(\"clipboard unavailable: {0}\")]\n    Unavailable(String),\n\n    /// Underlying clipboard backend error (`arboard::Error`).\n    #[error(\"clipboard backend: {0}\")]\n    Backend(String),\n}",
              "documentation": "Errors emitted by [`Clipboard`] implementations."
            },
            {
              "name": "::Clipboard",
              "line": 24,
              "signature": "pub trait Clipboard: Send {\n    /// Copy `text` to the platform clipboard, replacing prior contents.\n    fn copy(&mut self, text: &str) -> Result<(), ClipboardError>;\n\n    /// Read the current clipboard contents as UTF-8 text. Returns\n    /// [`ClipboardError::Unavailable`] when the clipboard is empty or\n    /// holds non-text content.\n    fn paste(&mut self) -> Result<String, ClipboardError>;\n}",
              "documentation": "Trait for swappable clipboard backends."
            },
            {
              "name": "::SystemClipboard",
              "line": 37,
              "signature": "pub struct SystemClipboard {\n\n}",
              "documentation": "`arboard`-backed clipboard. Lazily constructed because creating\nthe backend may fail (no display server); callers handle the\n`Result` once at startup."
            },
            {
              "name": "::SystemClipboard::new",
              "line": 45,
              "signature": "pub fn new() -> Result<Self, ClipboardError>;",
              "documentation": "Construct a system clipboard. Returns\n[`ClipboardError::Unavailable`] when the platform clipboard is\nnot reachable (e.g. headless CI without a display server)."
            },
            {
              "name": "::MemoryClipboard",
              "line": 72,
              "signature": "#[derive(Debug, Default)]\npub struct MemoryClipboard {\n\n}",
              "documentation": "In-memory clipboard backend useful for tests + headless CI.\n\nImplements the same trait as [`SystemClipboard`] so SDK consumers\ncan inject one with `app.clipboard(MemoryClipboard::default())`\nwithout changing call sites."
            }
          ]
        },
        {
          "path": "harness-sdk/src/commands/mod.rs",
          "sha256": "53c49b44b4c1180754ddf150a81c41eead4725fe5b0de098625dcca27790e509",
          "artifactSha256": "760b39e4953ad070c311fa6dfb4c433ff0371a9f2f329778c26b9d1a37efb731",
          "url": "/reference/source/harness-sdk/src/commands/mod.rs.txt",
          "declarations": [
            {
              "name": "slash",
              "line": 3,
              "signature": "pub mod slash;",
              "documentation": "Slash command registry and handling."
            }
          ]
        },
        {
          "path": "harness-sdk/src/commands/slash.rs",
          "sha256": "fc991eb86bed5eb30892607133dcf385bffeda020cc41ffd3dc0741407ca2ffe",
          "artifactSha256": "6bb32123f9b152e3b0c829360e0c87bc14bafe2959d57cbf5ecca4aca4f54894",
          "url": "/reference/source/harness-sdk/src/commands/slash.rs.txt",
          "declarations": [
            {
              "name": "::SlashResult",
              "line": 14,
              "signature": "#[derive(Debug, Clone)]\npub enum SlashResult {\n    /// Command executed, display message to user.\n    Message(String),\n    /// Switch to the specified mode.\n    SwitchMode(Mode),\n    /// Stop the current autonomy session.\n    StopAutonomy,\n    /// Clear the chat history.\n    ClearHistory,\n    /// Show help text.\n    ShowHelp(String),\n    /// Quit the application.\n    Quit,\n    /// Command not found.\n    NotFound(String),\n    /// Toggle the command palette.\n    TogglePalette,\n    /// List available agents.\n    ListAgents,\n    /// Show session status.\n    ShowStatus,\n    /// Send expanded text as a chat message to the active agent.\n    SendAsChat(String),\n}",
              "documentation": "Result of executing a slash command."
            },
            {
              "name": "::SlashArg",
              "line": 41,
              "signature": "#[derive(Debug, Clone)]\npub struct SlashArg {\n/// Argument name (e.g., \"mode\").\n\npub name: String,\n/// Whether this argument is required.\n\npub required: bool,\n/// Possible values (e.g., \\[\"chat\", \"auto\"\\]).\n\npub options: Vec<String>,\n/// Short description (e.g., \"The mode to switch to\").\n\npub description: String\n}",
              "documentation": "A structured argument definition for a slash command."
            },
            {
              "name": "::SlashCommand",
              "line": 54,
              "signature": "#[derive(Debug, Clone)]\npub struct SlashCommand {\n/// Command name (without the `/` prefix).\n\npub name: String,\n/// Short description.\n\npub description: String,\n/// Source label (\"built-in\" or plugin name).\n\npub source: String,\n/// Aliases for this command.\n\npub aliases: Vec<String>,\n/// Usage template (e.g., \"/mode <chat|auto>\").\n\npub usage: String,\n/// Structured argument definitions.\n\npub args: Vec<SlashArg>\n}",
              "documentation": "A registered slash command."
            },
            {
              "name": "::SlashCommandRegistry",
              "line": 80,
              "signature": "pub struct SlashCommandRegistry {\n\n}",
              "documentation": "Registry of available slash commands.\n\n# Examples\n\n```\nuse harness_sdk::commands::slash::SlashCommandRegistry;\n\nlet registry = SlashCommandRegistry::with_builtins();\nassert!(registry.lookup(\"help\").is_some());\nassert!(registry.lookup(\"unknown\").is_none());\n```"
            },
            {
              "name": "::SlashCommandRegistry::new",
              "line": 87,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new empty registry."
            },
            {
              "name": "::SlashCommandRegistry::with_builtins",
              "line": 95,
              "signature": "#[must_use]\npub fn with_builtins() -> Self;",
              "documentation": "Create a registry with all built-in commands."
            },
            {
              "name": "::SlashCommandRegistry::lookup",
              "line": 225,
              "signature": "#[must_use]\npub fn lookup(&self, name: &str) -> Option<&SlashCommand>;",
              "documentation": "Look up a command by name or alias."
            },
            {
              "name": "::SlashCommandRegistry::register",
              "line": 230,
              "signature": "pub fn register(&mut self, command: SlashCommand);",
              "documentation": "Register a custom command (from a plugin or adapter)."
            },
            {
              "name": "::SlashCommandRegistry::list_commands",
              "line": 239,
              "signature": "#[must_use]\npub fn list_commands(&self) -> Vec<&SlashCommand>;",
              "documentation": "List all unique commands (no aliases)."
            },
            {
              "name": "::SlashCommandRegistry::command_hints",
              "line": 252,
              "signature": "#[must_use]\npub fn command_hints(&self) -> Vec<harness_tui_kit::CommandHint>;",
              "documentation": "Get command hints for the Kit's `CommandPalette` component."
            },
            {
              "name": "::SlashCommandRegistry::dropdown_items",
              "line": 261,
              "signature": "#[must_use]\npub fn dropdown_items(&self) -> Vec<harness_tui_kit::SlashDropdownItem>;",
              "documentation": "Get dropdown items for the Kit's `SlashDropdown` component."
            },
            {
              "name": "::dispatch_slash",
              "line": 293,
              "signature": "pub fn dispatch_slash(input: &str, registry: &SlashCommandRegistry) -> SlashResult;",
              "documentation": "Parse and dispatch a slash command string.\n\nInput should start with `/` \u2014 the prefix is stripped before lookup.\n\n# Examples\n\n```\nuse harness_sdk::commands::slash::{dispatch_slash, SlashCommandRegistry, SlashResult};\n\nlet registry = SlashCommandRegistry::with_builtins();\nlet result = dispatch_slash(\"/help\", &registry);\nassert!(matches!(result, SlashResult::ShowHelp(_)));\n```"
            }
          ]
        },
        {
          "path": "harness-sdk/src/composer.rs",
          "sha256": "0d725f6597d8ecd6b0d539c83642d1fea91f47cdcb096ec733cb3b7b229dcb00",
          "artifactSha256": "8c66168e5d07aa918f489dbbc0429c784064dad6176649d37f73bb3303d9eded",
          "url": "/reference/source/harness-sdk/src/composer.rs.txt",
          "declarations": [
            {
              "name": "::MESSAGE_QUEUE_CAPACITY",
              "line": 28,
              "signature": "pub const MESSAGE_QUEUE_CAPACITY: usize;",
              "documentation": "Maximum number of pending messages we'll queue before refusing to\naccept more. Keeps memory bounded if the user pastes a script."
            },
            {
              "name": "::MessageQueueError",
              "line": 32,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)]\npub enum MessageQueueError {\n    /// The supplied message was empty after trimming.\n    #[error(\"queued message is empty after trimming\")]\n    EmptyMessage,\n    /// The message exceeds [`MAX_INTERJECTION_LEN`].\n    #[error(\"queued message length {0} exceeds limit {MAX_INTERJECTION_LEN}\")]\n    TooLong(usize),\n    /// The queue is full.\n    #[error(\"message queue is full ({0} pending)\")]\n    Full(usize),\n}",
              "documentation": "Errors returned by [`MessageQueue::push`]."
            },
            {
              "name": "::MessageQueue",
              "line": 46,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct MessageQueue {\n\n}",
              "documentation": "FIFO queue for messages typed while the agent is streaming."
            },
            {
              "name": "::MessageQueue::new",
              "line": 53,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Construct an empty queue."
            },
            {
              "name": "::MessageQueue::len",
              "line": 61,
              "signature": "#[must_use]\npub fn len(&self) -> usize;",
              "documentation": "Number of queued messages."
            },
            {
              "name": "::MessageQueue::is_empty",
              "line": 67,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "`true` if the queue holds no messages."
            },
            {
              "name": "::MessageQueue::push",
              "line": 77,
              "signature": "pub fn push(&mut self, message: impl Into<String>) -> Result<(), MessageQueueError>;",
              "documentation": "Push a message onto the back of the queue.\n\n# Errors\n\nReturns [`MessageQueueError`] if the message is empty, too\nlong, or the queue is full."
            },
            {
              "name": "::MessageQueue::pop",
              "line": 94,
              "signature": "pub fn pop(&mut self) -> Option<String>;",
              "documentation": "Pop the next message from the front of the queue."
            },
            {
              "name": "::MessageQueue::drain",
              "line": 99,
              "signature": "pub fn drain(&mut self) -> Vec<String>;",
              "documentation": "Drain every queued message in FIFO order."
            },
            {
              "name": "::MessageQueue::peek",
              "line": 105,
              "signature": "#[must_use]\npub fn peek(&self) -> &VecDeque<String>;",
              "documentation": "View pending messages without removing them."
            },
            {
              "name": "::MessageQueue::clear",
              "line": 110,
              "signature": "pub fn clear(&mut self);",
              "documentation": "Drop every queued message."
            },
            {
              "name": "::HistorySearch",
              "line": 120,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct HistorySearch {\n\n}",
              "documentation": "Reverse-incremental-search state over a history slice.\n\nThe caller owns the history ring; [`HistorySearch`] holds the\nquery string and the index of the current match."
            },
            {
              "name": "::HistorySearch::new",
              "line": 130,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Begin a fresh reverse search."
            },
            {
              "name": "::HistorySearch::query",
              "line": 136,
              "signature": "#[must_use]\npub fn query(&self) -> &str;",
              "documentation": "Current query string."
            },
            {
              "name": "::HistorySearch::match_index",
              "line": 144,
              "signature": "#[must_use]\npub fn match_index(&self) -> Option<usize>;",
              "documentation": "Index of the current match within the history slice provided\nto the most recent call to [`HistorySearch::update`]\n[`HistorySearch::next_match`]."
            },
            {
              "name": "::HistorySearch::has_match",
              "line": 150,
              "signature": "#[must_use]\npub fn has_match(&self) -> bool;",
              "documentation": "Whether the search has yielded a match."
            },
            {
              "name": "::HistorySearch::reset",
              "line": 155,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the search to its initial state."
            },
            {
              "name": "::HistorySearch::push_char",
              "line": 161,
              "signature": "pub fn push_char(&mut self, ch: char, history: &[String]);",
              "documentation": "Append a character to the query and re-run the search."
            },
            {
              "name": "::HistorySearch::pop_char",
              "line": 167,
              "signature": "pub fn pop_char(&mut self, history: &[String]);",
              "documentation": "Pop the last character from the query and re-run the search."
            },
            {
              "name": "::HistorySearch::update",
              "line": 177,
              "signature": "pub fn update(&mut self, history: &[String]);",
              "documentation": "Re-run the search from scratch \u2014 useful when history changes."
            },
            {
              "name": "::HistorySearch::next_match",
              "line": 186,
              "signature": "pub fn next_match(&mut self, history: &[String]);",
              "documentation": "Advance to the next earlier match (Ctrl+R again behavior)."
            },
            {
              "name": "::HistorySearch::matched",
              "line": 197,
              "signature": "#[must_use]\npub fn matched<'h>(&self, history: &'h [String]) -> Option<&'h str>;",
              "documentation": "Return the matched history entry, if any."
            }
          ]
        },
        {
          "path": "harness-sdk/src/error.rs",
          "sha256": "dd22454797649293ba8ac281f4d0330b4b35d3723f28ac576c0bfdb00f64ac63",
          "artifactSha256": "d5ad9851b584f35a233625bae4c35ab2b849a87ab9be67ca7aa69850da7fd97d",
          "url": "/reference/source/harness-sdk/src/error.rs.txt",
          "declarations": [
            {
              "name": "::SdkError",
              "line": 30,
              "signature": "#[derive(Debug, thiserror::Error)]\npub enum SdkError {\n    // \u2500\u2500 Adapter Errors \u2500\u2500\n    /// An error from the adapter implementation.\n    #[error(\"adapter error: {0}\")]\n    Adapter(#[from] AdapterError),\n\n    /// Adapter output failed validation.\n    #[error(\"adapter output validation failed: {0}\")]\n    InvalidAdapterOutput(String),\n\n    /// Adapter stream timed out.\n    #[error(\"adapter stream timeout after {0:?}\")]\n    AdapterTimeout(Duration),\n\n    /// Adapter does not support the requested feature.\n    #[error(\"adapter does not support {0}\")]\n    NotSupported(String),\n\n    // \u2500\u2500 Runtime Errors \u2500\u2500\n    /// Terminal I/O error.\n    #[error(\"terminal error: {0}\")]\n    Terminal(#[from] std::io::Error),\n\n    /// Event loop error.\n    #[error(\"event loop error: {0}\")]\n    EventLoop(String),\n\n    /// Invalid mode transition.\n    #[error(\"mode transition failed: cannot go from {from} to {to}\")]\n    InvalidModeTransition {\n        /// The current mode.\n        from: String,\n        /// The requested mode.\n        to: String,\n    },\n\n    // \u2500\u2500 Input Errors \u2500\u2500\n    /// Interjection parse error.\n    #[error(\"interjection parse error: {0}\")]\n    InterjectionParse(#[from] ParseError),\n\n    /// Slash command error.\n    #[error(\"slash command error: {0}\")]\n    SlashCommand(String),\n\n    // \u2500\u2500 Plugin Errors \u2500\u2500\n    /// Plugin system error.\n    #[cfg(feature = \"plugins\")]\n    #[error(\"plugin error: {0}\")]\n    Plugin(#[from] PluginError),\n\n    // \u2500\u2500 Configuration Errors \u2500\u2500\n    /// Builder configuration error.\n    #[error(\"builder error: {0}\")]\n    Builder(String),\n\n    /// Serialization/deserialization error.\n    #[error(\"serialization error: {0}\")]\n    Serialization(String),\n}",
              "documentation": "Top-level SDK error encompassing all failure modes.\n\n# Examples\n\n```\nuse harness_sdk::SdkError;\n\nlet err = SdkError::Builder(\"missing adapter\".into());\nassert!(err.to_string().contains(\"missing adapter\"));\n```"
            },
            {
              "name": "::AdapterError",
              "line": 105,
              "signature": "#[derive(Debug, thiserror::Error, Clone)]\npub enum AdapterError {\n    /// Connection to the agent backend failed.\n    #[error(\"connection error: {0}\")]\n    Connection(String),\n\n    /// The adapter received an invalid response from the backend.\n    #[error(\"protocol error: {0}\")]\n    Protocol(String),\n\n    /// An I/O error occurred during adapter communication.\n    #[error(\"i/o error: {0}\")]\n    Io(String),\n\n    /// The adapter operation timed out.\n    #[error(\"timeout: {0}\")]\n    Timeout(String),\n\n    /// Authentication failed.\n    #[error(\"authentication error: {0}\")]\n    Authentication(String),\n\n    /// The requested operation is not supported by this adapter.\n    #[error(\"not supported: {0}\")]\n    NotSupported(String),\n\n    /// A generic adapter error.\n    #[error(\"{0}\")]\n    Other(String),\n}",
              "documentation": "Errors from adapter implementations.\n\nAdapters return this error type from their trait methods. The SDK wraps it\nin [`SdkError::Adapter`] and displays the message in the UI without crashing.\n\n# Examples\n\n```\nuse harness_sdk::AdapterError;\n\nlet err = AdapterError::Connection(\"refused\".into());\nassert!(err.to_string().contains(\"refused\"));\n```"
            },
            {
              "name": "::ParseError",
              "line": 149,
              "signature": "#[derive(Debug, thiserror::Error, Clone, PartialEq, Eq)]\npub enum ParseError {\n    /// Input was empty or whitespace-only.\n    #[error(\"interjection input is empty\")]\n    EmptyInput,\n\n    /// Input exceeded the maximum allowed length.\n    #[error(\"interjection too long: {0} chars (max {1})\")]\n    TooLong(usize, usize),\n\n    /// Targeted agent name is invalid.\n    #[error(\"invalid agent target: {0}\")]\n    InvalidTarget(String),\n}",
              "documentation": "Errors from interjection parsing.\n\nThese are returned when user input cannot be parsed into a valid\n[`HumanInterjection`](crate::HumanInterjection).\n\n# Examples\n\n```\nuse harness_sdk::ParseError;\n\nlet err = ParseError::EmptyInput;\nassert!(err.to_string().contains(\"empty\"));\n```"
            },
            {
              "name": "::PluginError",
              "line": 177,
              "signature": "#[derive(Debug, thiserror::Error, Clone)]\npub enum PluginError {\n    /// WASM module failed structural validation.\n    #[error(\"WASM module failed validation: {0}\")]\n    InvalidModule(String),\n\n    /// WASM module hash does not match the expected hash.\n    #[error(\"WASM hash mismatch: expected {expected}, got {actual}\")]\n    HashMismatch {\n        /// Expected SHA-256 hash.\n        expected: String,\n        /// Actual computed SHA-256 hash.\n        actual: String,\n    },\n\n    /// Plugin does not export a required function.\n    #[error(\"plugin '{0}' missing required export: {1}\")]\n    MissingExport(String, String),\n\n    /// Plugin requested a capability the host does not provide.\n    #[error(\"plugin '{0}' requested unsupported capability: {1}\")]\n    UnsupportedCapability(String, String),\n\n    /// Capability was denied by the permission manager.\n    #[error(\"capability denied for plugin '{plugin}': {capability} -> {resource}\")]\n    CapabilityDenied {\n        /// Plugin name.\n        plugin: String,\n        /// Capability kind.\n        capability: String,\n        /// Requested resource.\n        resource: String,\n    },\n\n    /// Plugin trapped during execution.\n    #[error(\"plugin '{0}' panicked during execution: {1}\")]\n    PluginPanic(String, String),\n\n    /// Plugin not found in configured sources.\n    #[error(\"plugin '{0}' not found in configured sources\")]\n    NotFound(String),\n\n    /// Plugin is disabled.\n    #[error(\"plugin '{0}' is disabled\")]\n    Disabled(String),\n\n    /// Plugin configuration error.\n    #[error(\"plugin config error: {0}\")]\n    Config(String),\n\n    /// Host function error.\n    #[error(\"plugin '{0}' host function error: {1}\")]\n    HostFunction(String, String),\n}",
              "documentation": "Errors from the WASM plugin system.\n\nPlugin errors are recoverable \u2014 the SDK unloads the offending plugin\nand continues operating.\n\n# Examples\n\n```\nuse harness_sdk::PluginError;\n\nlet err = PluginError::NotFound(\"my-plugin\".into());\nassert!(err.to_string().contains(\"my-plugin\"));\n```"
            }
          ]
        },
        {
          "path": "harness-sdk/src/external_editor.rs",
          "sha256": "9acd17d1e89f28a0e0cb954dc78e23b897a270581df47ad17c4a00057a46fca3",
          "artifactSha256": "3f6f13dd1e9253c7b0d8c232c7f3eae57556d954a10caf9504558a48f7d9610b",
          "url": "/reference/source/harness-sdk/src/external_editor.rs.txt",
          "declarations": [
            {
              "name": "::ExternalEditorError",
              "line": 19,
              "signature": "#[derive(Debug, Error)]\npub enum ExternalEditorError {\n    /// Neither `$VISUAL` nor `$EDITOR` is set.\n    #[error(\"neither VISUAL nor EDITOR is set\")]\n    MissingEditor,\n\n    /// Editor command failed to parse via `shlex` (POSIX) or\n    /// produced an empty argv on Windows.\n    #[error(\"failed to parse editor command\")]\n    ParseFailed,\n\n    /// Resolved editor command was empty.\n    #[error(\"editor command is empty\")]\n    EmptyCommand,\n\n    /// I/O failure (temp file creation, child process spawn, etc.).\n    #[error(\"editor io: {0}\")]\n    Io(#[from] io::Error),\n\n    /// Editor exited with a non-zero status.\n    #[error(\"editor exited with status {0}\")]\n    NonZeroExit(i32),\n\n    /// Editor was terminated by signal.\n    #[error(\"editor was terminated by signal\")]\n    Terminated,\n}",
              "documentation": "Errors emitted by the external-editor flow."
            },
            {
              "name": "::resolve_editor_command",
              "line": 53,
              "signature": "pub fn resolve_editor_command() -> Result<Vec<String>, ExternalEditorError>;",
              "documentation": "Resolve the editor command from `$VISUAL` (preferred) or `$EDITOR`,\nsplitting POSIX-style on whitespace + quoting.\n\nWindows callers may bypass `shlex` since `Command` handles\nargument quoting differently \u2014 for now we only target POSIX-style\nsplitting; downstream Windows support can layer a `winsplit` crate\nwhen the SDK ships a real Windows build."
            },
            {
              "name": "::open_in_editor",
              "line": 70,
              "signature": "pub fn open_in_editor(seed: &str) -> Result<String, ExternalEditorError>;",
              "documentation": "Write `seed` to a temp `.md` file, exec the configured editor on\nit, and return the buffer's contents after the editor exits 0.\n\nThis is the synchronous variant \u2014 it inherits stdin/stdout/stderr,\nwhich means callers MUST suspend the TUI's raw-mode + alternate\nscreen first or the editor will be invisible to the user."
            },
            {
              "name": "::open_with_command",
              "line": 78,
              "signature": "pub fn open_with_command(seed: &str, editor_cmd: &[String]) -> Result<String, ExternalEditorError>;",
              "documentation": "Same as [`open_in_editor`] but with an explicitly-supplied editor\ncommand. Useful for tests + for SDK consumers that pin a specific\neditor (e.g. `[\"nvim\", \"-c\", \"set syntax=markdown\"]`)."
            }
          ]
        },
        {
          "path": "harness-sdk/src/harness/component.rs",
          "sha256": "e929ff4916c68eb2cfd627b97be7045fccb2eedd4082f06c536940e8357345eb",
          "artifactSha256": "4f5e18c7a8561504334c771ed59be633d47881212b4cbfb6abe4c72ea690e9d0",
          "url": "/reference/source/harness-sdk/src/harness/component.rs.txt",
          "declarations": [
            {
              "name": "::HARNESS_COMPONENT_KINDS",
              "line": 31,
              "signature": "pub const HARNESS_COMPONENT_KINDS: &[HarnessComponentKind];",
              "documentation": "Canonical list of editable + runtime harness component kinds.\n\nThe first seven entries are editable (the AHE evolve agent\ntargets these); `ShortTermMemory` is the runtime-managed\nscratchpad and is exposed here only so callers can match\nexhaustively."
            },
            {
              "name": "::HarnessComponentKind",
              "line": 45,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum HarnessComponentKind {\n    /// `systemprompt.md` \u2014 base behavioral rules and prompt scaffold.\n    SystemPrompt,\n    /// `tool_descriptions/*.yaml` \u2014 declarations the model sees.\n    ToolDescriptions,\n    /// `tools/*` \u2014 the executable tool implementations.\n    ToolImplementations,\n    /// `middleware/*` \u2014 pre/post-processing hooks around tool calls.\n    Middleware,\n    /// `skills/{name}/` \u2014 reusable cross-task playbooks.\n    Skills,\n    /// `sub_agents/*.yaml` \u2014 optional sub-agent workflow configs.\n    SubAgents,\n    /// `LongTermMEMORY.md` \u2014 persistent cross-session knowledge.\n    LongTermMemory,\n    /// `ShortTermMEMORY.md` \u2014 runtime-only; **not** editable by the\n    /// evolve agent. Listed for exhaustiveness only.\n    ShortTermMemory,\n}",
              "documentation": "Discriminator for a harness component."
            },
            {
              "name": "::HarnessComponentKind::as_key",
              "line": 68,
              "signature": "#[must_use]\npub fn as_key(self) -> &'static str;",
              "documentation": "Stable serialization key (matches the `serde` projection)."
            },
            {
              "name": "::HarnessComponentKind::label",
              "line": 83,
              "signature": "#[must_use]\npub fn label(self) -> &'static str;",
              "documentation": "Human-readable label used in transcript / manifest UIs."
            },
            {
              "name": "::HarnessComponentKind::is_editable",
              "line": 100,
              "signature": "#[must_use]\npub fn is_editable(self) -> bool;",
              "documentation": "Whether this kind is editable by the AHE evolve agent.\n`ShortTermMemory` is the only non-editable kind \u2014 the runtime\nowns it."
            },
            {
              "name": "::HarnessComponentKind::is_single_file",
              "line": 107,
              "signature": "#[must_use]\npub fn is_single_file(self) -> bool;",
              "documentation": "Whether this kind stores its content in a single file\n(vs. a directory of files)."
            },
            {
              "name": "::HarnessComponentKind::mount",
              "line": 119,
              "signature": "#[must_use]\npub fn mount(self) -> &'static Path;",
              "documentation": "Canonical mount point relative to the workspace root.\nFor directory-backed kinds the path is the directory itself."
            },
            {
              "name": "::HarnessComponentKind::from_key",
              "line": 135,
              "signature": "#[must_use]\npub fn from_key(key: &str) -> Option<Self>;",
              "documentation": "Parse a stable key back into a kind. Inverse of [`Self::as_key`]."
            },
            {
              "name": "::HarnessComponentEdit",
              "line": 152,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct HarnessComponentEdit {\n/// Which component kind the edit targets.\n\npub kind: HarnessComponentKind,\n/// File path relative to the workspace root. For single-file\n\n/// kinds this matches `kind.mount()`; for directory-backed kinds\n\n/// it's a path *under* the directory (e.g. `tools/grep.py`).\n\npub path: PathBuf,\n/// What the edit does.\n\npub op: HarnessComponentEditKind\n}",
              "documentation": "Atomic edit applied to one harness component file."
            },
            {
              "name": "::HarnessComponentEditKind",
              "line": 166,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"op\", rename_all = \"snake_case\")]\npub enum HarnessComponentEditKind {\n    /// Create a new file with the given UTF-8 contents.\n    Create {\n        /// Initial contents.\n        contents: String,\n    },\n    /// Replace the entire file with the given UTF-8 contents.\n    Update {\n        /// New contents.\n        contents: String,\n    },\n    /// Delete the file.\n    Delete,\n    /// Rename the file (path stays the same; the new name lives\n    /// under the same component kind).\n    Rename {\n        /// New path relative to the workspace root.\n        new_path: PathBuf,\n    },\n}",
              "documentation": "Discriminator for what an [`HarnessComponentEdit`] is doing."
            },
            {
              "name": "::HarnessComponentEdit::create",
              "line": 190,
              "signature": "#[must_use]\npub fn create(\n        kind: HarnessComponentKind,\n        path: impl Into<PathBuf>,\n        contents: impl Into<String>,\n    ) -> Self;",
              "documentation": "Convenience constructor for a create edit."
            },
            {
              "name": "::HarnessComponentEdit::update",
              "line": 206,
              "signature": "#[must_use]\npub fn update(\n        kind: HarnessComponentKind,\n        path: impl Into<PathBuf>,\n        contents: impl Into<String>,\n    ) -> Self;",
              "documentation": "Convenience constructor for an update edit."
            },
            {
              "name": "::HarnessComponentEdit::delete",
              "line": 222,
              "signature": "#[must_use]\npub fn delete(kind: HarnessComponentKind, path: impl Into<PathBuf>) -> Self;",
              "documentation": "Convenience constructor for a delete edit."
            },
            {
              "name": "::HarnessComponentEdit::rename",
              "line": 232,
              "signature": "#[must_use]\npub fn rename(\n        kind: HarnessComponentKind,\n        path: impl Into<PathBuf>,\n        new_path: impl Into<PathBuf>,\n    ) -> Self;",
              "documentation": "Convenience constructor for a rename edit."
            }
          ]
        },
        {
          "path": "harness-sdk/src/harness/evidence.rs",
          "sha256": "1e21a2476409c3a5aed0b379004b84bce97cb73c4ce17def78c6d0dfe9a21864",
          "artifactSha256": "a0712508320dc80eebac6aa3d701d2a26f6f79f1270aad0440aecd7ef85b5146",
          "url": "/reference/source/harness-sdk/src/harness/evidence.rs.txt",
          "declarations": [
            {
              "name": "::EvidenceCorpusError",
              "line": 35,
              "signature": "#[derive(Debug, Error)]\npub enum EvidenceCorpusError {\n    /// I/O error reaching disk.\n    #[error(\"evidence corpus io: {0}\")]\n    Io(#[from] io::Error),\n\n    /// Path escapes the iteration root (e.g. `..` segment).\n    #[error(\"path {0} escapes the iteration root\")]\n    PathEscape(PathBuf),\n}",
              "documentation": "Errors emitted by [`EvidenceCorpus`]."
            },
            {
              "name": "::TaskAnalysis",
              "line": 47,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct TaskAnalysis {\n/// Task name (matches `TaskOutcomeMap` keys).\n\npub task: String,\n/// The per-iteration outcome being analyzed.\n\npub outcome: TaskOutcome,\n/// One-line summary used in the overview.\n\npub summary: String,\n/// Root cause hypothesis (free text).\n\npub root_cause: String,\n/// Markdown body \u2014 the full evidence the Evolve Agent reads.\n\npub body_markdown: String\n}",
              "documentation": "One per-task analysis report. Owned by the AgentDebugger."
            },
            {
              "name": "::TaskAnalysis::render_markdown",
              "line": 64,
              "signature": "#[must_use]\npub fn render_markdown(&self) -> String;",
              "documentation": "Render the analysis as the markdown file body that lands in\n`runs/iteration_NNN/analysis/detail/{task}.md`."
            },
            {
              "name": "::OverviewReport",
              "line": 105,
              "signature": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]\npub struct OverviewReport {\n/// Iteration number.\n\npub iteration: u32,\n/// Total tasks run.\n\npub total: usize,\n/// Tasks that passed.\n\npub passes: usize,\n/// Tasks that failed.\n\npub fails: usize,\n/// Tasks that did not run.\n\npub not_run: usize,\n/// Optional headline finding for the iteration.\n\n#[serde(default)]\npub headline: String,\n/// Optional markdown body (themes, top failure clusters, etc.).\n\n#[serde(default)]\npub body_markdown: String\n}",
              "documentation": "Benchmark-level overview rendered as\n`runs/iteration_NNN/analysis/overview.md`."
            },
            {
              "name": "::OverviewReport::render_markdown",
              "line": 127,
              "signature": "#[must_use]\npub fn render_markdown(&self) -> String;",
              "documentation": "Render the overview as a markdown file body."
            },
            {
              "name": "::EvidenceCorpus",
              "line": 156,
              "signature": "#[derive(Debug, Clone)]\npub struct EvidenceCorpus {\n\n}",
              "documentation": "Typed view over `runs/iteration_NNN/`. Owns the layered evidence\ncorpus from the paper's Experience Observability pillar."
            },
            {
              "name": "::EvidenceCorpus::open",
              "line": 165,
              "signature": "pub fn open(runs_root: impl AsRef<Path>, iteration: u32) -> Result<Self, EvidenceCorpusError>;",
              "documentation": "Open / create a corpus rooted at `runs_root/iteration_NNN/`.\nCreates the standard layout (`analysis/detail/`, `traces/`)\nup front so callers can write into it without further setup."
            },
            {
              "name": "::EvidenceCorpus::root",
              "line": 174,
              "signature": "#[must_use]\npub fn root(&self) -> &Path;",
              "documentation": "Read-only access to the iteration root."
            },
            {
              "name": "::EvidenceCorpus::iteration",
              "line": 180,
              "signature": "#[must_use]\npub fn iteration(&self) -> u32;",
              "documentation": "Iteration number."
            },
            {
              "name": "::EvidenceCorpus::task_analysis_path",
              "line": 186,
              "signature": "pub fn task_analysis_path(&self, task: &str) -> Result<PathBuf, EvidenceCorpusError>;",
              "documentation": "Path of the per-task analysis file\n(`analysis/detail/{task}.md`)."
            },
            {
              "name": "::EvidenceCorpus::overview_path",
              "line": 197,
              "signature": "#[must_use]\npub fn overview_path(&self) -> PathBuf;",
              "documentation": "Path of the benchmark overview (`analysis/overview.md`)."
            },
            {
              "name": "::EvidenceCorpus::trace_path",
              "line": 203,
              "signature": "pub fn trace_path(&self, task: &str, run_idx: u32) -> Result<PathBuf, EvidenceCorpusError>;",
              "documentation": "Path of one task's raw trace\n(`traces/{task}.{run_idx}.txt`)."
            },
            {
              "name": "::EvidenceCorpus::write_task_analysis",
              "line": 212,
              "signature": "pub fn write_task_analysis(\n        &self,\n        analysis: &TaskAnalysis,\n    ) -> Result<PathBuf, EvidenceCorpusError>;",
              "documentation": "Write a per-task analysis. Returns the resolved file path."
            },
            {
              "name": "::EvidenceCorpus::write_overview",
              "line": 225,
              "signature": "pub fn write_overview(\n        &self,\n        overview: &OverviewReport,\n    ) -> Result<PathBuf, EvidenceCorpusError>;",
              "documentation": "Write the overview."
            },
            {
              "name": "::EvidenceCorpus::write_trace",
              "line": 240,
              "signature": "pub fn write_trace(\n        &self,\n        task: &str,\n        run_idx: u32,\n        contents: &str,\n    ) -> Result<PathBuf, EvidenceCorpusError>;",
              "documentation": "Append a raw trajectory dump for one task / run index. Each\nrun gets its own file so multi-run k\u22652 sampling lands as\n`task.0.txt`, `task.1.txt`, \u2026"
            },
            {
              "name": "::EvidenceCorpus::read_task_analysis_markdown",
              "line": 256,
              "signature": "pub fn read_task_analysis_markdown(\n        &self,\n        task: &str,\n    ) -> Result<Option<String>, EvidenceCorpusError>;",
              "documentation": "Read a per-task analysis. Returns `Ok(None)` when no\nanalysis has been written yet."
            },
            {
              "name": "::EvidenceCorpus::read_overview_markdown",
              "line": 269,
              "signature": "pub fn read_overview_markdown(&self) -> Result<Option<String>, EvidenceCorpusError>;",
              "documentation": "Read the overview. Returns `Ok(None)` when none has been\nwritten yet."
            },
            {
              "name": "::EvidenceCorpus::list_analyzed_tasks",
              "line": 279,
              "signature": "pub fn list_analyzed_tasks(&self) -> Result<Vec<String>, EvidenceCorpusError>;",
              "documentation": "List the task names that have analysis files written. Sorted\nalphabetically for deterministic ordering."
            },
            {
              "name": "::EvidenceCorpus::list_traces",
              "line": 300,
              "signature": "pub fn list_traces(&self) -> Result<Vec<PathBuf>, EvidenceCorpusError>;",
              "documentation": "List the trace files (relative paths under `traces/`)."
            }
          ]
        },
        {
          "path": "harness-sdk/src/harness/loop_driver.rs",
          "sha256": "d9f996560e0b3b3dd6a35dd3906884a183245bc8d530eef91b020a833c716528",
          "artifactSha256": "5af9983b85801f90c95a7d2b1920bafc6faa0ab548103c481f5ffc06f08099f5",
          "url": "/reference/source/harness-sdk/src/harness/loop_driver.rs.txt",
          "declarations": [
            {
              "name": "::HarnessLoopPhase",
              "line": 43,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum HarnessLoopPhase {\n    /// Phase 1: run the benchmark with the current harness.\n    Rollout,\n    /// Phase 2: strip noise from trajectories.\n    Clean,\n    /// Phase 3: verify the prior iteration's manifest contracts.\n    Attribute,\n    /// Phase 4: AgentDebugger produces the EvidenceCorpus.\n    Distill,\n    /// Phase 5: Evolve Agent edits the workspace + emits manifest.\n    Evolve,\n    /// Phase 6: git-tag the iteration.\n    Commit,\n}",
              "documentation": "One phase of the AHE iteration loop."
            },
            {
              "name": "::HarnessLoopPhase::as_key",
              "line": 61,
              "signature": "#[must_use]\npub fn as_key(self) -> &'static str;",
              "documentation": "Stable serialization key."
            },
            {
              "name": "::HarnessLoopPhase::label",
              "line": 74,
              "signature": "#[must_use]\npub fn label(self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::HarnessLoopPhase::ordering",
              "line": 87,
              "signature": "#[must_use]\npub const fn ordering() -> [HarnessLoopPhase; 6];",
              "documentation": "Canonical phase ordering."
            },
            {
              "name": "::HarnessLoopPhase::next",
              "line": 103,
              "signature": "#[must_use]\npub fn next(self) -> Option<HarnessLoopPhase>;",
              "documentation": "Phase that follows `self` in the canonical ordering.\nReturns `None` after [`HarnessLoopPhase::Commit`] (the\niteration is done; the loop driver bumps the iteration\ncounter and starts a new sequence at `Rollout`)."
            },
            {
              "name": "::HarnessLoopError",
              "line": 117,
              "signature": "#[derive(Debug, Error)]\npub enum HarnessLoopError {\n    /// The caller invoked a phase out of order (e.g. `Distill`\n    /// before `Rollout` finished).\n    #[error(\"phase {got:?} attempted before {expected:?}\")]\n    PhaseOutOfOrder {\n        /// Phase that should run next.\n        expected: HarnessLoopPhase,\n        /// Phase the caller tried to run.\n        got: HarnessLoopPhase,\n    },\n\n    /// Iteration is already complete; bump the counter before\n    /// attempting another phase.\n    #[error(\"iteration {iteration} is complete; advance to next iteration\")]\n    IterationComplete {\n        /// Completed iteration number.\n        iteration: u32,\n    },\n\n    /// Workspace I/O error.\n    #[error(transparent)]\n    Workspace(#[from] HarnessWorkspaceError),\n\n    /// Evidence corpus I/O error.\n    #[error(transparent)]\n    Evidence(#[from] EvidenceCorpusError),\n\n    /// I/O error reaching the runs root.\n    #[error(\"loop io: {0}\")]\n    Io(#[from] std::io::Error),\n\n    /// Caller-supplied phase callback failed.\n    #[error(\"phase {phase:?} failed: {reason}\")]\n    PhaseFailed {\n        /// Phase whose callback returned an error.\n        phase: HarnessLoopPhase,\n        /// Free-form reason from the caller.\n        reason: String,\n    },\n}",
              "documentation": "Errors emitted by [`HarnessLoop`] implementations."
            },
            {
              "name": "::IterationRecord",
              "line": 160,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct IterationRecord {\n/// Iteration number (matches the directory suffix).\n\npub iteration: u32,\n/// Phases completed so far in canonical order.\n\npub completed_phases: Vec<HarnessLoopPhase>,\n/// Per-task outcomes from this iteration's rollout (populated\n\n/// after Phase 1).\n\n#[serde(default)]\npub outcomes: TaskOutcomeMap,\n/// Verdicts produced by the Attribute phase against the\n\n/// *previous* iteration's manifest. Empty on iteration 1.\n\n#[serde(default)]\npub verdicts: Vec<AttributionVerdict>,\n/// Manifest produced by the Evolve phase. `None` until phase 5\n\n/// completes.\n\n#[serde(default)]\npub manifest: Option<ChangeManifest>,\n/// UNIX seconds the iteration was started.\n\npub started_at_unix_secs: u64\n}",
              "documentation": "Per-iteration record persisted to `runs/iteration_NNN/loop.json`."
            },
            {
              "name": "::StandardHarnessLoop",
              "line": 216,
              "signature": "#[derive(Debug)]\npub struct StandardHarnessLoop {\n\n}",
              "documentation": "Reference loop driver. Owns the runs root, iteration counter, and\nper-iteration record; phase work itself is supplied by the SDK\nconsumer."
            },
            {
              "name": "::StandardHarnessLoop::start",
              "line": 232,
              "signature": "pub fn start(\n        runs_root: impl Into<PathBuf>,\n        workspace: HarnessWorkspace,\n        iteration: u32,\n    ) -> Result<Self, HarnessLoopError>;",
              "documentation": "Construct a fresh loop at `iteration`, rooted at `runs_root`,\ndriving edits against `workspace`."
            },
            {
              "name": "::StandardHarnessLoop::with_prior",
              "line": 252,
              "signature": "pub fn with_prior(mut self, manifest: ChangeManifest, outcomes: TaskOutcomeMap) -> Self;",
              "documentation": "Provide the previous iteration's manifest + outcomes so the\nAttribute phase has data to score against. Iteration 1\ncallers can skip this; the Attribute phase becomes a no-op."
            },
            {
              "name": "::StandardHarnessLoop::record",
              "line": 261,
              "signature": "#[must_use]\npub fn record(&self) -> &IterationRecord;",
              "documentation": "Read-only access to the iteration record (mutable copy lives\ninside the loop)."
            },
            {
              "name": "::StandardHarnessLoop::iteration",
              "line": 267,
              "signature": "#[must_use]\npub fn iteration(&self) -> u32;",
              "documentation": "Iteration number this driver is currently inside."
            },
            {
              "name": "::StandardHarnessLoop::next_phase",
              "line": 274,
              "signature": "#[must_use]\npub fn next_phase(&self) -> Option<HarnessLoopPhase>;",
              "documentation": "The phase the loop will run on the next `run_*` call. `None`\nwhen the iteration is complete."
            },
            {
              "name": "::StandardHarnessLoop::is_complete",
              "line": 280,
              "signature": "#[must_use]\npub fn is_complete(&self) -> bool;",
              "documentation": "True once the iteration has completed phase 6 (Commit)."
            },
            {
              "name": "::StandardHarnessLoop::iteration_dir",
              "line": 286,
              "signature": "#[must_use]\npub fn iteration_dir(&self) -> PathBuf;",
              "documentation": "Path to this iteration's directory (`runs_root/iteration_NNN`)."
            },
            {
              "name": "::StandardHarnessLoop::open_corpus",
              "line": 293,
              "signature": "pub fn open_corpus(&self) -> Result<EvidenceCorpus, HarnessLoopError>;",
              "documentation": "Open the EvidenceCorpus rooted at this iteration's dir,\ncreating it if needed."
            },
            {
              "name": "::StandardHarnessLoop::workspace",
              "line": 299,
              "signature": "#[must_use]\npub fn workspace(&self) -> &HarnessWorkspace;",
              "documentation": "Borrow the workspace the Evolve phase writes into."
            },
            {
              "name": "::StandardHarnessLoop::run_rollout",
              "line": 305,
              "signature": "pub fn run_rollout(\n        &mut self,\n        outcomes: TaskOutcomeMap,\n    ) -> Result<HarnessLoopPhase, HarnessLoopError>;",
              "documentation": "Run **Phase 1: Rollout**. The caller supplies the per-task\noutcomes the rollout produced."
            },
            {
              "name": "::StandardHarnessLoop::run_clean",
              "line": 318,
              "signature": "pub fn run_clean(\n        &mut self,\n        cleanup: impl FnOnce(&Path) -> Result<(), String>,\n    ) -> Result<HarnessLoopPhase, HarnessLoopError>;",
              "documentation": "Run **Phase 2: Clean**. The caller supplies a closure that\nperforms whatever in-place trajectory cleanup is needed; the\ndriver only enforces ordering + persists the iteration\nrecord."
            },
            {
              "name": "::StandardHarnessLoop::run_attribute",
              "line": 335,
              "signature": "pub fn run_attribute(&mut self) -> Result<HarnessLoopPhase, HarnessLoopError>;",
              "documentation": "Run **Phase 3: Attribute**. Uses the prior iteration's\nmanifest + outcomes (see [`Self::with_prior`]) to verify\neach entry's contract. On iteration 1 (no prior data) this\nbecomes a no-op."
            },
            {
              "name": "::StandardHarnessLoop::run_distill",
              "line": 349,
              "signature": "pub fn run_distill(\n        &mut self,\n        debug: impl FnOnce(&EvidenceCorpus) -> Result<(), String>,\n    ) -> Result<HarnessLoopPhase, HarnessLoopError>;",
              "documentation": "Run **Phase 4: Distill**. The caller supplies a closure that\nwrites per-task analysis + overview into the supplied\n`EvidenceCorpus`."
            },
            {
              "name": "::StandardHarnessLoop::run_evolve",
              "line": 365,
              "signature": "pub fn run_evolve(\n        &mut self,\n        evolve: impl FnOnce(&HarnessWorkspace, &EvidenceCorpus) -> Result<ChangeManifest, String>,\n    ) -> Result<HarnessLoopPhase, HarnessLoopError>;",
              "documentation": "Run **Phase 5: Evolve**. The caller's closure receives the\nworkspace + corpus and returns the manifest of edits it\napplied."
            },
            {
              "name": "::StandardHarnessLoop::run_commit",
              "line": 384,
              "signature": "pub fn run_commit(\n        &mut self,\n        commit: impl FnOnce(&IterationRecord) -> Result<(), String>,\n    ) -> Result<HarnessLoopPhase, HarnessLoopError>;",
              "documentation": "Run **Phase 6: Commit**. The caller's closure performs the\ngit-tag (or whatever audit step the runtime uses); the\ndriver persists `runs/iteration_NNN/loop.json` and marks the\niteration done."
            },
            {
              "name": "::StandardHarnessLoop::loop_record_path",
              "line": 400,
              "signature": "#[must_use]\npub fn loop_record_path(&self) -> PathBuf;",
              "documentation": "Path to the iteration's `loop.json` audit file."
            }
          ]
        },
        {
          "path": "harness-sdk/src/harness/manifest.rs",
          "sha256": "24f9c7e81ba48f21a9653591ce6a7749f1fef6b1c58b271ec812728c19eb0654",
          "artifactSha256": "7fa2abf2e496c996ea5b99be255751cecfa42ad2c16c8ec35f907b1ee58ee5c7",
          "url": "/reference/source/harness-sdk/src/harness/manifest.rs.txt",
          "declarations": [
            {
              "name": "::TaskOutcome",
              "line": 26,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TaskOutcome {\n    /// Task passed.\n    Pass,\n    /// Task failed.\n    Fail,\n    /// Task was not run (e.g. crashed, skipped).\n    NotRun,\n}",
              "documentation": "Pass / fail outcome for one task in a benchmark."
            },
            {
              "name": "::TaskOutcome::is_pass",
              "line": 38,
              "signature": "#[must_use]\npub fn is_pass(self) -> bool;",
              "documentation": "Did the task pass?"
            },
            {
              "name": "::TaskOutcome::is_fail",
              "line": 44,
              "signature": "#[must_use]\npub fn is_fail(self) -> bool;",
              "documentation": "Did the task fail (explicitly \u2014 `NotRun` is excluded)?"
            },
            {
              "name": "::TaskOutcomeMap",
              "line": 52,
              "signature": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(transparent)]\npub struct TaskOutcomeMap {\n/// Map keyed by task name. `BTreeMap` so serialization is\n\n/// deterministic (matters for diffing manifests across runs).\n\npub outcomes: BTreeMap<String, TaskOutcome>\n}",
              "documentation": "Per-task outcomes for one iteration of a benchmark."
            },
            {
              "name": "::TaskOutcomeMap::from_pairs",
              "line": 64,
              "signature": "#[must_use]\npub fn from_pairs<I, S>(it: I) -> Self\n    where\n        I: IntoIterator<Item = (S, TaskOutcome)>,\n        S: Into<String>,;",
              "documentation": "Construct from any iterable of `(name, outcome)` pairs.\nNamed `from_pairs` (rather than `from_iter`) to avoid\nshadowing the `FromIterator::from_iter` standard trait\nmethod, which would otherwise mask the trait impl."
            },
            {
              "name": "::TaskOutcomeMap::outcome",
              "line": 79,
              "signature": "#[must_use]\npub fn outcome(&self, task: &str) -> TaskOutcome;",
              "documentation": "Get the outcome for a task, treating an absent task as\n`NotRun`."
            },
            {
              "name": "::TaskOutcomeMap::set",
              "line": 87,
              "signature": "pub fn set(&mut self, task: impl Into<String>, outcome: TaskOutcome);",
              "documentation": "Set / overwrite the outcome for a task."
            },
            {
              "name": "::TaskOutcomeMap::iter",
              "line": 92,
              "signature": "pub fn iter(&self) -> impl Iterator<Item = (&str, TaskOutcome)>;",
              "documentation": "Iterate over `(task, outcome)` pairs in deterministic order."
            },
            {
              "name": "::TaskOutcomeMap::len",
              "line": 98,
              "signature": "#[must_use]\npub fn len(&self) -> usize;",
              "documentation": "Number of tasks recorded."
            },
            {
              "name": "::TaskOutcomeMap::is_empty",
              "line": 104,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "True when no tasks are recorded."
            },
            {
              "name": "::PredictedImpact",
              "line": 111,
              "signature": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]\npub struct PredictedImpact {\n/// Tasks the evolve agent expects this edit to *fix* (move from\n\n/// `Fail` \u2192 `Pass`).\n\n#[serde(default)]\npub expected_fixes: Vec<String>,\n/// Tasks the evolve agent flags as at risk of regressing\n\n/// (currently `Pass`, may move to `Fail`).\n\n#[serde(default)]\npub at_risk_regressions: Vec<String>\n}",
              "documentation": "Predicted-impact contract attached to one [`ManifestEntry`]."
            },
            {
              "name": "::PredictedImpact::new",
              "line": 126,
              "signature": "#[must_use]\npub fn new(\n        expected_fixes: impl IntoIterator<Item = impl Into<String>>,\n        at_risk_regressions: impl IntoIterator<Item = impl Into<String>>,\n    ) -> Self;",
              "documentation": "Construct from explicit lists of expected fixes + at-risk\nregressions."
            },
            {
              "name": "::PredictedImpact::is_empty",
              "line": 142,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "True when the contract is silent (no claims at all). Such\nentries are unfalsifiable and should never be issued \u2014 but\nthe type permits them so the AHE loop can record them as a\ndistinct error condition rather than rejecting at parse\ntime."
            },
            {
              "name": "::ManifestEntry",
              "line": 150,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ManifestEntry {\n/// Stable id (uuid string). Lets verdicts and audit trails\n\n/// reference an entry independent of array position.\n\npub id: String,\n/// Free-form list of task failures the edit addresses (e.g.\n\n/// task names + one-line justification).\n\n#[serde(default)]\npub failure_evidence: Vec<String>,\n/// Diagnosed root cause behind those failures.\n\npub root_cause: String,\n/// One-line summary of the targeted fix the edit applies.\n\npub targeted_fix: String,\n/// Predicted impact (the falsifiable contract).\n\npub predicted_impact: PredictedImpact,\n/// The actual edit applied to the workspace.\n\npub edit: HarnessComponentEdit\n}",
              "documentation": "One entry in the change manifest \u2014 an edit + its falsifiable\ncontract."
            },
            {
              "name": "::ManifestEntry::new",
              "line": 171,
              "signature": "#[must_use]\npub fn new(\n        failure_evidence: impl IntoIterator<Item = impl Into<String>>,\n        root_cause: impl Into<String>,\n        targeted_fix: impl Into<String>,\n        predicted_impact: PredictedImpact,\n        edit: HarnessComponentEdit,\n    ) -> Self;",
              "documentation": "Construct an entry with a freshly-minted UUID."
            },
            {
              "name": "::ChangeManifest",
              "line": 191,
              "signature": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]\npub struct ChangeManifest {\n/// Iteration this manifest belongs to (e.g. `iteration_007`).\n\npub iteration: u32,\n/// Entries in application order.\n\npub entries: Vec<ManifestEntry>\n}",
              "documentation": "One iteration's change manifest \u2014 a vector of [`ManifestEntry`]s."
            },
            {
              "name": "::ChangeManifest::new",
              "line": 201,
              "signature": "#[must_use]\npub fn new(iteration: u32) -> Self;",
              "documentation": "Construct an empty manifest for an iteration."
            },
            {
              "name": "::ChangeManifest::push",
              "line": 209,
              "signature": "pub fn push(&mut self, entry: ManifestEntry) -> usize;",
              "documentation": "Push an entry and return the slot index."
            },
            {
              "name": "::ChangeManifest::len",
              "line": 216,
              "signature": "#[must_use]\npub fn len(&self) -> usize;",
              "documentation": "Number of entries in the manifest."
            },
            {
              "name": "::ChangeManifest::is_empty",
              "line": 222,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "True when the manifest has no entries."
            },
            {
              "name": "::ChangeManifest::find",
              "line": 228,
              "signature": "#[must_use]\npub fn find(&self, id: &str) -> Option<&ManifestEntry>;",
              "documentation": "Find an entry by id."
            },
            {
              "name": "::AttributionDecision",
              "line": 236,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum AttributionDecision {\n    /// Every promised fix landed AND no flagged regression broke.\n    /// The edit is kept.\n    Confirmed,\n    /// Some promised fixes landed; some flagged regressions\n    /// broke. The loop driver decides whether to keep or revert.\n    PartiallyConfirmed,\n    /// No promised fixes landed (or every flagged regression\n    /// broke). The edit is reverted.\n    Refuted,\n    /// The contract was silent (`PredictedImpact::is_empty()`); the\n    /// edit cannot be falsified and is treated as refuted by\n    /// default \u2014 the AHE paper requires a non-trivial contract.\n    UnfalsifiableContract,\n}",
              "documentation": "Verdict the [`Attribute`] step assigns to one entry."
            },
            {
              "name": "::AttributionDecision::is_keep",
              "line": 255,
              "signature": "#[must_use]\npub fn is_keep(self) -> bool;",
              "documentation": "True when the verdict says \"keep the edit\"."
            },
            {
              "name": "::AttributionDecision::is_revert",
              "line": 261,
              "signature": "#[must_use]\npub fn is_revert(self) -> bool;",
              "documentation": "True when the verdict says \"revert the edit\"."
            },
            {
              "name": "::TaskDelta",
              "line": 271,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct TaskDelta {\n/// Task name.\n\npub task: String,\n/// Outcome before the edit (i.e. the prior iteration's run).\n\npub before: TaskOutcome,\n/// Outcome after the edit (this iteration's run).\n\npub after: TaskOutcome\n}",
              "documentation": "One task's evidence about a single manifest entry."
            },
            {
              "name": "::TaskDelta::is_fix",
              "line": 283,
              "signature": "#[must_use]\npub fn is_fix(&self) -> bool;",
              "documentation": "Did this task move from `Fail` \u2192 `Pass`?"
            },
            {
              "name": "::TaskDelta::is_regression",
              "line": 289,
              "signature": "#[must_use]\npub fn is_regression(&self) -> bool;",
              "documentation": "Did this task move from `Pass` \u2192 `Fail`?"
            },
            {
              "name": "::AttributionVerdict",
              "line": 296,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct AttributionVerdict {\n/// Manifest entry id this verdict belongs to.\n\npub entry_id: String,\n/// Decision (`Confirmed` / `PartiallyConfirmed` / `Refuted` /\n\n/// `UnfalsifiableContract`).\n\npub decision: AttributionDecision,\n/// Promised fixes that actually landed.\n\npub confirmed_fixes: Vec<TaskDelta>,\n/// Promised fixes that did **not** land.\n\npub missed_fixes: Vec<TaskDelta>,\n/// Regressions the contract flagged that DID happen.\n\npub triggered_regressions: Vec<TaskDelta>,\n/// Regressions the contract flagged that did NOT happen\n\n/// (kept stable).\n\npub avoided_regressions: Vec<TaskDelta>\n}",
              "documentation": "Per-entry verdict: decision + the deltas that justify it."
            },
            {
              "name": "::AttributionVerdict::is_keep",
              "line": 316,
              "signature": "#[must_use]\npub fn is_keep(&self) -> bool;",
              "documentation": "True when the decision says \"keep the edit\" (Confirmed)."
            },
            {
              "name": "::AttributionVerdict::is_revert",
              "line": 323,
              "signature": "#[must_use]\npub fn is_revert(&self) -> bool;",
              "documentation": "True when the decision says \"revert the edit\" (Refuted\nUnfalsifiableContract)."
            },
            {
              "name": "::attribute",
              "line": 331,
              "signature": "#[must_use]\npub fn attribute(\n    manifest: &ChangeManifest,\n    before: &TaskOutcomeMap,\n    after: &TaskOutcomeMap,\n) -> Vec<AttributionVerdict>;",
              "documentation": "Run [`Attribute`] over an entire manifest, returning one verdict\nper entry in the same order."
            },
            {
              "name": "::attribute_entry",
              "line": 345,
              "signature": "#[must_use]\npub fn attribute_entry(\n    entry: &ManifestEntry,\n    before: &TaskOutcomeMap,\n    after: &TaskOutcomeMap,\n) -> AttributionVerdict;",
              "documentation": "Score one manifest entry against `before` / `after` outcomes."
            }
          ]
        },
        {
          "path": "harness-sdk/src/harness/mod.rs",
          "sha256": "68e6baeae3a3575b1dd51ccae9f08c2532cb2d76da6ec15ee97f9b41d7ad998a",
          "artifactSha256": "02a74a28e499be3399d47ebfafc9d468aa63380462aa3afdda2c0eab3b2628a2",
          "url": "/reference/source/harness-sdk/src/harness/mod.rs.txt",
          "declarations": [
            {
              "name": "component",
              "line": 26,
              "signature": "pub mod component;",
              "documentation": "Agentic Harness Engineering (AHE) primitives.\n\nModeled on \"Agentic Harness Engineering: Observability-Driven\nAutomatic Evolution of Coding-Agent Harnesses\" (arXiv 2604.25850).\nThe paper describes a framework for autonomous evolution of a\ncoding agent's *harness* \u2014 the configuration files, tools,\nmiddleware, skills, and memory that wrap a base model \u2014 through\nthree observability pillars:\n\n1. **Component observability** \u2014 every editable harness piece is\n   a file at a fixed mount point, so edits are atomic and\n   reversible. See [`component`] + [`workspace`].\n2. **Experience observability** \u2014 trajectory traces are distilled\n   into a layered evidence corpus the next iteration's evolve\n   agent can read. See [`evidence`] (iteration B follow-up).\n3. **Decision observability** \u2014 every edit ships with a\n   falsifiable contract (`failure_evidence`, `root_cause`,\n   `targeted_fix`, `predicted_impact`); the next iteration's\n   `Attribute()` step verifies the contract against actual task\n   deltas. See [`manifest`] (iteration B follow-up).\n\nThis module is the SDK foundation for those pillars. Higher-level\nintegrations (loop drivers, kit widgets) build on top of these\nprimitives."
            },
            {
              "name": "evidence",
              "line": 27,
              "signature": "pub mod evidence;",
              "documentation": ""
            },
            {
              "name": "loop_driver",
              "line": 28,
              "signature": "pub mod loop_driver;",
              "documentation": ""
            },
            {
              "name": "manifest",
              "line": 29,
              "signature": "pub mod manifest;",
              "documentation": ""
            },
            {
              "name": "workspace",
              "line": 30,
              "signature": "pub mod workspace;",
              "documentation": ""
            },
            {
              "name": "pub use component::{\n    HarnessComponentEdit, HarnessComponentEditKind, HarnessComponentKind, HARNESS_COMPONENT_KINDS,\n};",
              "line": 32,
              "signature": "pub use component::{\n    HarnessComponentEdit, HarnessComponentEditKind, HarnessComponentKind, HARNESS_COMPONENT_KINDS,\n};",
              "documentation": ""
            },
            {
              "name": "pub use evidence::{EvidenceCorpus, EvidenceCorpusError, OverviewReport, TaskAnalysis};",
              "line": 35,
              "signature": "pub use evidence::{EvidenceCorpus, EvidenceCorpusError, OverviewReport, TaskAnalysis};",
              "documentation": ""
            },
            {
              "name": "pub use loop_driver::{HarnessLoopError, HarnessLoopPhase, IterationRecord, StandardHarnessLoop};",
              "line": 36,
              "signature": "pub use loop_driver::{HarnessLoopError, HarnessLoopPhase, IterationRecord, StandardHarnessLoop};",
              "documentation": ""
            },
            {
              "name": "pub use manifest::{\n    attribute, attribute_entry, AttributionDecision, AttributionVerdict, ChangeManifest,\n    ManifestEntry, PredictedImpact, TaskDelta, TaskOutcome, TaskOutcomeMap,\n};",
              "line": 37,
              "signature": "pub use manifest::{\n    attribute, attribute_entry, AttributionDecision, AttributionVerdict, ChangeManifest,\n    ManifestEntry, PredictedImpact, TaskDelta, TaskOutcome, TaskOutcomeMap,\n};",
              "documentation": ""
            },
            {
              "name": "pub use workspace::{HarnessWorkspace, HarnessWorkspaceError};",
              "line": 41,
              "signature": "pub use workspace::{HarnessWorkspace, HarnessWorkspaceError};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/harness/workspace.rs",
          "sha256": "73b639b9eceeeb2ccc14730b5fac74ca9fd376106a27e00ccc4ffbd3c2d168d3",
          "artifactSha256": "960e62c17b2663870bd596c50481e98f667a69a13fed6208ed83ff20d6d24264",
          "url": "/reference/source/harness-sdk/src/harness/workspace.rs.txt",
          "declarations": [
            {
              "name": "::HarnessWorkspaceError",
              "line": 22,
              "signature": "#[derive(Debug, Error)]\npub enum HarnessWorkspaceError {\n    /// I/O error reaching the workspace.\n    #[error(\"workspace io: {0}\")]\n    Io(#[from] io::Error),\n\n    /// A path escapes the workspace root (e.g. `..`).\n    #[error(\"path {0} escapes the workspace root\")]\n    PathEscape(PathBuf),\n\n    /// An edit targeted a non-editable component (i.e.\n    /// [`HarnessComponentKind::ShortTermMemory`]).\n    #[error(\"component {0:?} is not editable\")]\n    NotEditable(HarnessComponentKind),\n\n    /// Edit path does not live under the component's mount point.\n    #[error(\"path {path:?} does not live under the {kind:?} mount {mount:?}\")]\n    MountMismatch {\n        /// The kind whose mount the path was supposed to live under.\n        kind: HarnessComponentKind,\n        /// The path the caller supplied.\n        path: PathBuf,\n        /// The expected mount.\n        mount: PathBuf,\n    },\n}",
              "documentation": "Errors emitted by [`HarnessWorkspace`]."
            },
            {
              "name": "::HarnessWorkspace",
              "line": 50,
              "signature": "#[derive(Debug, Clone)]\npub struct HarnessWorkspace {\n\n}",
              "documentation": "Typed view over a harness workspace directory."
            },
            {
              "name": "::HarnessWorkspace::open",
              "line": 56,
              "signature": "pub fn open(root: impl Into<PathBuf>) -> Result<Self, HarnessWorkspaceError>;",
              "documentation": "Open a workspace at `root`, creating the directory if needed."
            },
            {
              "name": "::HarnessWorkspace::root",
              "line": 64,
              "signature": "#[must_use]\npub fn root(&self) -> &Path;",
              "documentation": "Read-only access to the workspace root."
            },
            {
              "name": "::HarnessWorkspace::mount_path",
              "line": 71,
              "signature": "#[must_use]\npub fn mount_path(&self, kind: HarnessComponentKind) -> PathBuf;",
              "documentation": "Resolve the on-disk path for a component's mount point.\nReturns the component's directory for directory-backed kinds."
            },
            {
              "name": "::HarnessWorkspace::read_single_file",
              "line": 77,
              "signature": "pub fn read_single_file(\n        &self,\n        kind: HarnessComponentKind,\n    ) -> Result<Option<String>, HarnessWorkspaceError>;",
              "documentation": "Read a single-file component (system prompt, long-term memory).\nReturns `Ok(None)` when the file is missing."
            },
            {
              "name": "::HarnessWorkspace::write_single_file",
              "line": 90,
              "signature": "pub fn write_single_file(\n        &self,\n        kind: HarnessComponentKind,\n        contents: &str,\n    ) -> Result<PathBuf, HarnessWorkspaceError>;",
              "documentation": "Write a single-file component, replacing whatever was there."
            },
            {
              "name": "::HarnessWorkspace::list_directory",
              "line": 110,
              "signature": "pub fn list_directory(\n        &self,\n        kind: HarnessComponentKind,\n    ) -> Result<Vec<PathBuf>, HarnessWorkspaceError>;",
              "documentation": "List relative paths of files inside a directory-backed\ncomponent (e.g. `tools/grep.py`, `tools/cat.py`). Returns an\nempty vector when the directory does not yet exist."
            },
            {
              "name": "::HarnessWorkspace::read_directory_file",
              "line": 128,
              "signature": "pub fn read_directory_file(\n        &self,\n        kind: HarnessComponentKind,\n        path: impl AsRef<Path>,\n    ) -> Result<Option<String>, HarnessWorkspaceError>;",
              "documentation": "Read a single file inside a directory-backed component (path\nis relative to the workspace root, must live under the\ncomponent's mount)."
            },
            {
              "name": "::HarnessWorkspace::apply_edit",
              "line": 143,
              "signature": "pub fn apply_edit(\n        &self,\n        edit: &HarnessComponentEdit,\n    ) -> Result<PathBuf, HarnessWorkspaceError>;",
              "documentation": "Apply a single [`HarnessComponentEdit`] atomically. Each edit\nis verified against the component's mount before any I/O.\nReturns the resolved on-disk path that was written / removed."
            },
            {
              "name": "::HarnessWorkspace::apply_batch",
              "line": 180,
              "signature": "pub fn apply_batch(\n        &self,\n        edits: &[HarnessComponentEdit],\n    ) -> Result<Vec<PathBuf>, HarnessWorkspaceError>;",
              "documentation": "Apply a batch of edits sequentially, returning the resolved\npath for each one. Stops at the first error and returns it \u2014\nthe caller is responsible for rolling back via git tags or\nequivalent."
            }
          ]
        },
        {
          "path": "harness-sdk/src/interjection/delivery.rs",
          "sha256": "22a8756f23e906240b3cfc4c4d7af09b5e328c83eb4372bd586309458b12e778",
          "artifactSha256": "e4a5dfe5396f3e23a0f26c031a38dc220169f8aa7b31bf7619bdf999c34f1880",
          "url": "/reference/source/harness-sdk/src/interjection/delivery.rs.txt",
          "declarations": [
            {
              "name": "::deliver_interjection",
              "line": 21,
              "signature": "pub async fn deliver_interjection(\n    adapter: &Arc<dyn AgentAdapter>,\n    interjection: &HumanInterjection,\n) -> Result<InterjectionAck, SdkError>;",
              "documentation": "Deliver a parsed interjection to the adapter.\n\nIf the adapter doesn't support interjections, returns an error.\nValidates the acknowledgement before returning.\n\n# Errors\n\nReturns [`SdkError::Adapter`] if the adapter rejects the interjection.\nReturns [`SdkError::NotSupported`] if the adapter doesn't support interjections."
            }
          ]
        },
        {
          "path": "harness-sdk/src/interjection/mod.rs",
          "sha256": "1222daac8ff5cb3eb69a477e9cb04dbb15b73e5dadf9fb73c974260c9a3b7a9d",
          "artifactSha256": "c8005b1f2a7aa57345c4cb506403187a4d878e25712d0d8a0ae9e4159653ba52",
          "url": "/reference/source/harness-sdk/src/interjection/mod.rs.txt",
          "declarations": [
            {
              "name": "delivery",
              "line": 8,
              "signature": "pub mod delivery;",
              "documentation": "Human interjection parsing and delivery.\n\nDuring autonomy mode, users send interjections \u2014 structured messages\nwith priority, kind, and optional agent targeting. This module parses\nraw user input into [`HumanInterjection`](crate::HumanInterjection)\nand delivers them to the adapter."
            },
            {
              "name": "parser",
              "line": 9,
              "signature": "pub mod parser;",
              "documentation": ""
            },
            {
              "name": "sanitizer",
              "line": 10,
              "signature": "pub mod sanitizer;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/interjection/parser.rs",
          "sha256": "b3faf7ae3673f72dd05850657b6a978951c7450f8112ed3d20443b0bc1710c2d",
          "artifactSha256": "49731c1d299cc473f3bd309e82eededf875948ee7b49b23e5dceb4a54a47cf43",
          "url": "/reference/source/harness-sdk/src/interjection/parser.rs.txt",
          "declarations": [
            {
              "name": "::parse_interjection",
              "line": 70,
              "signature": "pub fn parse_interjection(raw: &str) -> Result<HumanInterjection, ParseError>;",
              "documentation": "Parse raw user input into a structured [`HumanInterjection`].\n\nInput is trimmed, length-checked, and sanitized before parsing.\n\n# Errors\n\nReturns [`ParseError::EmptyInput`] if the input is empty/whitespace.\nReturns [`ParseError::TooLong`] if the input exceeds [`MAX_INTERJECTION_LEN`].\nReturns [`ParseError::InvalidTarget`] if `@` is followed by an invalid agent name.\n\n# Examples\n\n```\nuse harness_sdk::interjection::parser::parse_interjection;\nuse harness_sdk::{InterjectionPriority, InterjectionKind};\n\n// Urgent broadcast\nlet i = parse_interjection(\"!!emergency\").unwrap();\nassert_eq!(i.priority, InterjectionPriority::Urgent);\nassert_eq!(i.kind, InterjectionKind::Instruction);\nassert!(i.target.is_none());\n\n// Targeted instruction\nlet i = parse_interjection(\"@Navigator fix the bug\").unwrap();\nassert_eq!(i.target, Some(\"Navigator\".to_string()));\nassert_eq!(i.kind, InterjectionKind::Instruction);\n\n// Question\nlet i = parse_interjection(\"what is the status?\").unwrap();\nassert_eq!(i.kind, InterjectionKind::Question);\n\n// Mission\nlet i = parse_interjection(\"NEW MISSION: deploy v2\").unwrap();\nassert_eq!(i.kind, InterjectionKind::Mission);\nassert_eq!(i.priority, InterjectionPriority::High);\n```"
            }
          ]
        },
        {
          "path": "harness-sdk/src/interjection/sanitizer.rs",
          "sha256": "3f1f81392773707cc3335bfe1d367e6fcda5e6698da7d105e78e3eba76bb8560",
          "artifactSha256": "0629dd1056828fca5f45d394d07f388130d8c977233d052422f00f5aec13b935",
          "url": "/reference/source/harness-sdk/src/interjection/sanitizer.rs.txt",
          "declarations": [
            {
              "name": "::sanitize_input",
              "line": 33,
              "signature": "#[must_use]\npub fn sanitize_input(input: &str) -> String;",
              "documentation": "Sanitize user input for safe processing.\n\nStrips ANSI escape sequences, control characters (except newlines),\nand applies the Kit's terminal safety sanitization.\n\n# Examples\n\n```\nuse harness_sdk::interjection::sanitizer::sanitize_input;\n\nassert_eq!(sanitize_input(\"hello\"), \"hello\");\nassert_eq!(sanitize_input(\"  hello  \"), \"  hello  \");\nassert_eq!(sanitize_input(\"hello\\0world\"), \"helloworld\");\nassert_eq!(sanitize_input(\"\u65e5\u672c\u8a9e \ud83c\udf0d\"), \"\u65e5\u672c\u8a9e \ud83c\udf0d\");\n```"
            },
            {
              "name": "::sanitize_output",
              "line": 51,
              "signature": "#[must_use]\npub fn sanitize_output(text: &str) -> String;",
              "documentation": "Sanitize adapter-provided text for terminal rendering.\n\nThis is the primary sanitization entry point for all text that comes\nfrom an adapter before it reaches Kit components.\n\n# Examples\n\n```\nuse harness_sdk::interjection::sanitizer::sanitize_output;\n\nlet safe = sanitize_output(\"normal\\x1b]0;evil\\x07text\");\nassert!(!safe.contains(\"\\x1b]0;\"));\n```"
            }
          ]
        },
        {
          "path": "harness-sdk/src/keymap/action.rs",
          "sha256": "087b17d592dca3a6bad9ce549f0d033cf396ee408fb457690277f753e9eadd4a",
          "artifactSha256": "90b6fc72c476802592cfd6c99e32bd53bae79ccd4a2b43d0d32e8dc58499ccf3",
          "url": "/reference/source/harness-sdk/src/keymap/action.rs.txt",
          "declarations": [
            {
              "name": "::Action",
              "line": 14,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Action {\n    // \u2500\u2500 Composer \u2500\u2500\n    /// Submit the current input.\n    Submit,\n    /// Cancel the current operation (clears input, dismisses overlay,\n    /// stops a streaming response, etc. \u2014 the handler decides).\n    Cancel,\n    /// Insert a literal newline in the composer.\n    InsertNewline,\n\n    // \u2500\u2500 App lifecycle \u2500\u2500\n    /// Quit the application.\n    Quit,\n    /// Clear the chat / activity log.\n    ClearHistory,\n    /// Clear the terminal scrollback.\n    ClearTerminal,\n\n    // \u2500\u2500 Layout \u2500\u2500\n    /// Toggle the sidebar between expanded and collapsed.\n    ToggleSidebar,\n    /// Switch between Chat and Autonomy modes.\n    ToggleMode,\n    /// Stop the active autonomy session.\n    StopAutonomy,\n\n    // \u2500\u2500 Overlays \u2500\u2500\n    /// Open the slash-command palette.\n    OpenPalette,\n    /// Open the transcript / pager overlay.\n    OpenTranscript,\n    /// Open the resume picker.\n    OpenResumePicker,\n    /// Open the user's `$EDITOR` for the current draft.\n    OpenExternalEditor,\n\n    // \u2500\u2500 Scrolling \u2500\u2500\n    /// Scroll one page up.\n    ScrollPageUp,\n    /// Scroll one page down.\n    ScrollPageDown,\n    /// Scroll one half-page up.\n    ScrollHalfPageUp,\n    /// Scroll one half-page down.\n    ScrollHalfPageDown,\n    /// Jump to the top of the chat / pager.\n    ScrollHome,\n    /// Jump to the bottom of the chat / pager.\n    ScrollEnd,\n\n    // \u2500\u2500 Approvals \u2500\u2500\n    /// Approve the current pending request once.\n    ApproveOnce,\n    /// Approve the current pending request and persist the suggested\n    /// glob pattern.\n    ApproveAlways,\n    /// Deny the current pending request.\n    Deny,\n}",
              "documentation": "One discrete action the event loop can dispatch."
            },
            {
              "name": "::Action::key",
              "line": 79,
              "signature": "#[must_use]\npub fn key(self) -> &'static str;",
              "documentation": "Stable key for serialization / config look-up. Matches the\n`serde(rename_all = \"snake_case\")` projection of the variant\nname."
            }
          ]
        },
        {
          "path": "harness-sdk/src/keymap/binding.rs",
          "sha256": "79d49bee63f1a186d7ea0ac618d4d78270597479a6cf2b820b482ef2b6dbb7ab",
          "artifactSha256": "95eda6d56f22fc4fc6777f461fb8514e8854ae6a456cfad33fcaf0a9a2055854",
          "url": "/reference/source/harness-sdk/src/keymap/binding.rs.txt",
          "declarations": [
            {
              "name": "::KeySpecError",
              "line": 13,
              "signature": "#[derive(Debug, Error, PartialEq, Eq)]\npub enum KeySpecError {\n    /// The spec is empty or whitespace-only.\n    #[error(\"empty key spec\")]\n    Empty,\n    /// A modifier token was not one of `ctrl`, `alt`, `shift`, `meta`.\n    #[error(\"unknown modifier: {0}\")]\n    UnknownModifier(String),\n    /// The terminal token did not name a key we know.\n    #[error(\"unknown key: {0}\")]\n    UnknownKey(String),\n    /// The chord referenced more than the supported two segments.\n    #[error(\"chord too long: {0}\")]\n    ChordTooLong(String),\n}",
              "documentation": "Errors emitted by [`parse_key_spec`]."
            },
            {
              "name": "::KeyBinding",
              "line": 36,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub struct KeyBinding {\n/// Optional first half of a chord (`Ctrl+X` in `Ctrl+X Ctrl+E`).\n\n/// `None` for non-chord bindings.\n\npub prefix: Option<KeyChordHalf>,\n/// The terminal half (always set).\n\npub terminal: KeyChordHalf\n}",
              "documentation": "A single key event the event loop matches against.\n\nBindings are constructed from spec strings via [`parse_key_spec`]\nor [`parse_key_spec_chord`]. They are deliberately not\nserde-serializable directly \u2014 store overrides as\n`HashMap<Action, Vec<String>>` (each string a key spec) and let\n[`crate::Keymap::from_overrides`] parse them."
            },
            {
              "name": "::KeyChordHalf",
              "line": 46,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub struct KeyChordHalf {\n/// The key code.\n\npub code: KeyCode,\n/// Modifier mask.\n\npub modifiers: KeyModifiers\n}",
              "documentation": "One half of a key chord: a key code plus modifiers."
            },
            {
              "name": "::KeyBinding::single",
              "line": 56,
              "signature": "#[must_use]\npub fn single(code: KeyCode, modifiers: KeyModifiers) -> Self;",
              "documentation": "Construct a single-key (non-chord) binding."
            },
            {
              "name": "::KeyBinding::chord",
              "line": 65,
              "signature": "#[must_use]\npub fn chord(prefix: KeyChordHalf, terminal: KeyChordHalf) -> Self;",
              "documentation": "Construct a two-key chord (`prefix` then `terminal`)."
            },
            {
              "name": "::KeyBinding::is_chord",
              "line": 74,
              "signature": "#[must_use]\npub fn is_chord(&self) -> bool;",
              "documentation": "True when this is a chord (two-key) binding."
            },
            {
              "name": "::KeyBinding::matches_event",
              "line": 83,
              "signature": "#[must_use]\npub fn matches_event(&self, ev: &KeyEvent) -> bool;",
              "documentation": "Match a single inbound `KeyEvent` against this binding's\nterminal half. Chord matching is the caller's responsibility:\nonce the prefix has been seen, match against the terminal\nusing this method."
            },
            {
              "name": "::KeyBinding::matches_prefix",
              "line": 90,
              "signature": "#[must_use]\npub fn matches_prefix(&self, ev: &KeyEvent) -> bool;",
              "documentation": "Match a single inbound key event against this binding's\nprefix half (if any)."
            },
            {
              "name": "::parse_key_spec",
              "line": 99,
              "signature": "pub fn parse_key_spec(spec: &str) -> Result<KeyBinding, KeySpecError>;",
              "documentation": "Parse a single (non-chord) key spec like `\"ctrl+b\"` or `\"enter\"`."
            },
            {
              "name": "::parse_key_spec_chord",
              "line": 114,
              "signature": "pub fn parse_key_spec_chord(spec: &str) -> Result<KeyBinding, KeySpecError>;",
              "documentation": "Parse a chord spec \u2014 one or two whitespace-separated halves.\n`parse_key_spec_chord(\"ctrl+x ctrl+e\")` returns a chord;\n`parse_key_spec_chord(\"ctrl+b\")` returns a single binding."
            }
          ]
        },
        {
          "path": "harness-sdk/src/keymap/contextual.rs",
          "sha256": "6f348576cfff9684734031dc2d4ed5207d9033ce3e008cf41a1efd360ed3e024",
          "artifactSha256": "479c69a5b54accf38958b57cd935c1c0f55750bb298cc6c9ee4de8c0cc39c79c",
          "url": "/reference/source/harness-sdk/src/keymap/contextual.rs.txt",
          "declarations": [
            {
              "name": "::KeymapContext",
              "line": 19,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum KeymapContext {\n    /// App-wide bindings always active (Ctrl+C quit, Ctrl+B sidebar\n    /// toggle, \u2026).\n    App,\n    /// Chat surface focused.\n    Chat,\n    /// Composer / input bar focused.\n    Composer,\n    /// Pager overlay open.\n    Pager,\n    /// Generic list picker (resume / theme / model / backtrack /\n    /// component-tree).\n    List,\n    /// Approval modal up.\n    Approval,\n}",
              "documentation": "One TUI context. The runtime sets the active context as the user\nnavigates (composer focused, pager open, approval modal up \u2026)."
            },
            {
              "name": "::ContextualKeymap",
              "line": 40,
              "signature": "#[derive(Debug, Clone)]\npub struct ContextualKeymap {\n\n}",
              "documentation": "Per-context keymap bundle. Each context owns its own [`Keymap`];\nresolution falls back to [`KeymapContext::App`] for actions that\nare not bound in the active context."
            },
            {
              "name": "::ContextualKeymap::with_defaults",
              "line": 54,
              "signature": "#[must_use]\npub fn with_defaults() -> Self;",
              "documentation": "Construct with the built-in defaults wired into every\ncontext. Specific contexts override the global behaviour\nwhen the same key is rebound there."
            },
            {
              "name": "::ContextualKeymap::for_context_mut",
              "line": 67,
              "signature": "#[must_use]\npub fn for_context_mut(&mut self, ctx: KeymapContext) -> &mut Keymap;",
              "documentation": "Borrow the keymap for a context (mutable)."
            },
            {
              "name": "::ContextualKeymap::for_context",
              "line": 80,
              "signature": "#[must_use]\npub fn for_context(&self, ctx: KeymapContext) -> &Keymap;",
              "documentation": "Borrow the keymap for a context."
            },
            {
              "name": "::ContextualKeymap::resolve",
              "line": 94,
              "signature": "#[must_use]\npub fn resolve(&self, ctx: KeymapContext, ev: &KeyEvent) -> Option<Action>;",
              "documentation": "Resolve a key event in `ctx`, falling back to the App map\nwhen the action is unbound in the local context."
            },
            {
              "name": "::ContextualKeymap::apply_override",
              "line": 107,
              "signature": "pub fn apply_override(\n        &mut self,\n        ctx: KeymapContext,\n        overrides: &std::collections::HashMap<Action, Vec<String>>,\n    ) -> Result<(), KeymapError>;",
              "documentation": "Apply a context-specific override map. Empty `Vec` unbinds\nthe action in that context."
            }
          ]
        },
        {
          "path": "harness-sdk/src/keymap/mod.rs",
          "sha256": "2fc51a422b26a7f24eea4971bf68a96a0abf140d8c57e3f293558a6783b21e54",
          "artifactSha256": "a95e64ac43f150c4e8bedfed43b6ec344cc457ef78da25929ac986765bc2aab2",
          "url": "/reference/source/harness-sdk/src/keymap/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use action::Action;",
              "line": 39,
              "signature": "pub use action::Action;",
              "documentation": ""
            },
            {
              "name": "pub use binding::{parse_key_spec, parse_key_spec_chord, KeyBinding, KeySpecError};",
              "line": 40,
              "signature": "pub use binding::{parse_key_spec, parse_key_spec_chord, KeyBinding, KeySpecError};",
              "documentation": ""
            },
            {
              "name": "pub use contextual::{ContextualKeymap, KeymapContext};",
              "line": 41,
              "signature": "pub use contextual::{ContextualKeymap, KeymapContext};",
              "documentation": ""
            },
            {
              "name": "pub use runtime::{Keymap, KeymapError};",
              "line": 42,
              "signature": "pub use runtime::{Keymap, KeymapError};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/keymap/runtime.rs",
          "sha256": "0fbb0e54c62df50cd662faa6bd28abc7498606766391cbc921a6f1673103bde4",
          "artifactSha256": "2c11c6aae2b742e80232d7d926fbecf9f5daa6dffafc2d25438ae6bf74de9e6a",
          "url": "/reference/source/harness-sdk/src/keymap/runtime.rs.txt",
          "declarations": [
            {
              "name": "::KeymapError",
              "line": 18,
              "signature": "#[derive(Debug, Error)]\npub enum KeymapError {\n    /// One of the override spec strings failed to parse.\n    #[error(\"invalid key spec for {action:?}: {source}\")]\n    Spec {\n        /// Which action's binding spec failed.\n        action: Action,\n        /// Original parse error.\n        #[source]\n        source: KeySpecError,\n    },\n}",
              "documentation": "Errors emitted when constructing or resolving a [`Keymap`]."
            },
            {
              "name": "::Keymap",
              "line": 35,
              "signature": "#[derive(Debug, Clone)]\npub struct Keymap {\n\n}",
              "documentation": "Pre-resolved binding table.\n\nInternal storage is a `HashMap<Action, Vec<KeyBinding>>`. Bindings\nare matched in insertion order; the first match wins."
            },
            {
              "name": "::Keymap::with_defaults",
              "line": 44,
              "signature": "#[must_use]\npub fn with_defaults() -> Self;",
              "documentation": "Construct a keymap from the built-in default table. Equivalent\nto [`<Keymap as Default>::default`] \u2014 provided as a named\nconstructor so call sites read more clearly."
            },
            {
              "name": "::Keymap::empty",
              "line": 55,
              "signature": "#[must_use]\npub fn empty() -> Self;",
              "documentation": "Construct an empty keymap with no bindings at all. Useful for\nSDK consumers who want to author every binding from scratch."
            },
            {
              "name": "::Keymap::from_overrides",
              "line": 64,
              "signature": "pub fn from_overrides(overrides: &HashMap<Action, Vec<String>>) -> Result<Self, KeymapError>;",
              "documentation": "Construct a keymap from defaults overlaid with user overrides.\nAn override with an empty `Vec` *unbinds* the action; the\ndefault is removed and not replaced."
            },
            {
              "name": "::Keymap::bindings_for",
              "line": 86,
              "signature": "#[must_use]\npub fn bindings_for(&self, action: Action) -> &[KeyBinding];",
              "documentation": "Return all bindings configured for `action`, in match order."
            },
            {
              "name": "::Keymap::resolve",
              "line": 97,
              "signature": "#[must_use]\npub fn resolve(&self, ev: &KeyEvent) -> Option<Action>;",
              "documentation": "Resolve a single key event to an action.\n\nUsed when no chord prefix is currently armed. Returns the\nfirst action whose terminal half matches `ev` and whose\nbinding is *not* a chord (chord bindings only fire after a\nsuccessful prefix match \u2014 see [`Self::resolve_chord_terminal`])."
            },
            {
              "name": "::Keymap::resolve_chord_prefix",
              "line": 112,
              "signature": "#[must_use]\npub fn resolve_chord_prefix(&self, ev: &KeyEvent) -> Option<Action>;",
              "documentation": "Return the first action whose binding has a chord prefix that\nmatches `ev`. Callers use this to know when to arm a chord\nstate machine for the second key."
            },
            {
              "name": "::Keymap::resolve_chord_terminal",
              "line": 127,
              "signature": "#[must_use]\npub fn resolve_chord_terminal(\n        &self,\n        prefix_event: &KeyEvent,\n        terminal_event: &KeyEvent,\n    ) -> Option<Action>;",
              "documentation": "Resolve the terminal half of a chord. The caller passes the\n`prefix_event` that armed the chord plus the new `terminal_event`\n\u2014 both must match the same binding for the action to fire."
            }
          ]
        },
        {
          "path": "harness-sdk/src/lib.rs",
          "sha256": "6eca19f37fa1b24e01d520902899de87916a65baba3661c3d7b50666504e3bfc",
          "artifactSha256": "3671cf61785629aae1cdc2ad1736628dc81140f1cfbfec514f7e70cd3f90ce33",
          "url": "/reference/source/harness-sdk/src/lib.rs.txt",
          "declarations": [
            {
              "name": "adapter",
              "line": 42,
              "signature": "pub mod adapter;",
              "documentation": "# Harness SDK\n\nRust framework for building autonomous agent harnesses.\n\nHarness SDK assembles [Harness TUI Kit](harness_tui_kit) components into complete\nterminal applications, plus the AHE (Agentic Harness Engineering \u2014 arXiv\n2604.25850) primitives every coding agent needs to evolve its harness\nautonomously: a typed `HarnessWorkspace` over the 7 editable component\nkinds, falsifiable `ChangeManifest` contracts, a layered `EvidenceCorpus`,\nand the 6-phase Rollout \u2192 Clean \u2192 Attribute \u2192 Distill \u2192 Evolve \u2192 Commit\niteration loop. A developer implements one trait ([`AgentAdapter`]),\nsupplies their orchestrator, and gets a production TUI with chat mode,\nautonomy mode, streaming, tool-call display, interjection protocol,\napproval management, session persistence, and the AHE engine.\n\n## Quick Start\n\n```rust,no_run\nuse harness_sdk::{AgentAdapter, AdapterCapabilities, AdapterError, SdkAgentInfo, ResponseChunk};\nuse futures::stream::BoxStream;\n\nstruct MyAdapter;\n\n#[async_trait::async_trait]\nimpl AgentAdapter for MyAdapter {\n    fn name(&self) -> &str { \"my-app\" }\n    fn capabilities(&self) -> AdapterCapabilities { AdapterCapabilities::chat_only() }\n    async fn list_agents(&self) -> Result<Vec<SdkAgentInfo>, AdapterError> {\n        Ok(vec![SdkAgentInfo::new(\"a1\", \"Agent\", \"gpt-4o\")])\n    }\n    async fn send_message(\n        &self, agent_id: &str, _msg: &str,\n    ) -> Result<BoxStream<'static, ResponseChunk>, AdapterError> {\n        Ok(Box::pin(futures::stream::iter(vec![\n            ResponseChunk::Done { agent_id: agent_id.to_string() },\n        ])))\n    }\n}\n```"
            },
            {
              "name": "backtrack",
              "line": 43,
              "signature": "pub mod backtrack;",
              "documentation": ""
            },
            {
              "name": "clipboard",
              "line": 44,
              "signature": "pub mod clipboard;",
              "documentation": ""
            },
            {
              "name": "composer",
              "line": 45,
              "signature": "pub mod composer;",
              "documentation": ""
            },
            {
              "name": "error",
              "line": 46,
              "signature": "pub mod error;",
              "documentation": ""
            },
            {
              "name": "external_editor",
              "line": 47,
              "signature": "pub mod external_editor;",
              "documentation": ""
            },
            {
              "name": "harness",
              "line": 48,
              "signature": "pub mod harness;",
              "documentation": ""
            },
            {
              "name": "keymap",
              "line": 49,
              "signature": "pub mod keymap;",
              "documentation": ""
            },
            {
              "name": "onboarding",
              "line": 50,
              "signature": "pub mod onboarding;",
              "documentation": ""
            },
            {
              "name": "session",
              "line": 51,
              "signature": "pub mod session;",
              "documentation": ""
            },
            {
              "name": "settings",
              "line": 52,
              "signature": "pub mod settings;",
              "documentation": ""
            },
            {
              "name": "types",
              "line": 53,
              "signature": "pub mod types;",
              "documentation": ""
            },
            {
              "name": "workspace",
              "line": 54,
              "signature": "pub mod workspace;",
              "documentation": ""
            },
            {
              "name": "interjection",
              "line": 56,
              "signature": "pub mod interjection;",
              "documentation": ""
            },
            {
              "name": "validation",
              "line": 57,
              "signature": "pub mod validation;",
              "documentation": ""
            },
            {
              "name": "commands",
              "line": 59,
              "signature": "pub mod commands;",
              "documentation": ""
            },
            {
              "name": "modes",
              "line": 60,
              "signature": "pub mod modes;",
              "documentation": ""
            },
            {
              "name": "runtime",
              "line": 61,
              "signature": "pub mod runtime;",
              "documentation": ""
            },
            {
              "name": "screens",
              "line": 62,
              "signature": "pub mod screens;",
              "documentation": ""
            },
            {
              "name": "adapters",
              "line": 64,
              "signature": "pub mod adapters;",
              "documentation": ""
            },
            {
              "name": "plugins",
              "line": 67,
              "signature": "#[cfg(feature = \"plugins\")]\npub mod plugins;",
              "documentation": ""
            },
            {
              "name": "pub use error::{AdapterError, ParseError, PluginError, SdkError};",
              "line": 72,
              "signature": "pub use error::{AdapterError, ParseError, PluginError, SdkError};",
              "documentation": ""
            },
            {
              "name": "pub use session::{\n    JsonlSessionStore, SessionMetadata, SessionRecord, SessionRecordKind, SessionStore,\n    SessionStoreError,\n};",
              "line": 75,
              "signature": "pub use session::{\n    JsonlSessionStore, SessionMetadata, SessionRecord, SessionRecordKind, SessionStore,\n    SessionStoreError,\n};",
              "documentation": ""
            },
            {
              "name": "pub use keymap::{\n    parse_key_spec, parse_key_spec_chord, Action, ContextualKeymap, KeyBinding, KeySpecError,\n    Keymap, KeymapContext, KeymapError,\n};",
              "line": 81,
              "signature": "pub use keymap::{\n    parse_key_spec, parse_key_spec_chord, Action, ContextualKeymap, KeyBinding, KeySpecError,\n    Keymap, KeymapContext, KeymapError,\n};",
              "documentation": ""
            },
            {
              "name": "pub use backtrack::{list_backtrack_targets, rewind_to, BacktrackTarget};",
              "line": 87,
              "signature": "pub use backtrack::{list_backtrack_targets, rewind_to, BacktrackTarget};",
              "documentation": ""
            },
            {
              "name": "pub use composer::{HistorySearch, MessageQueue, MessageQueueError, MESSAGE_QUEUE_CAPACITY};",
              "line": 90,
              "signature": "pub use composer::{HistorySearch, MessageQueue, MessageQueueError, MESSAGE_QUEUE_CAPACITY};",
              "documentation": ""
            },
            {
              "name": "pub use settings::{\n    FlocksCli, ModeInfo, ModelInfo, ProviderInfo, ProviderKind, ProviderSettingField,\n    ProviderSettingKind, ProviderSettingOption, SettingsAction, SettingsApplyResult,\n    SettingsSnapshot,\n};",
              "line": 93,
              "signature": "pub use settings::{\n    FlocksCli, ModeInfo, ModelInfo, ProviderInfo, ProviderKind, ProviderSettingField,\n    ProviderSettingKind, ProviderSettingOption, SettingsAction, SettingsApplyResult,\n    SettingsSnapshot,\n};",
              "documentation": ""
            },
            {
              "name": "pub use clipboard::{Clipboard, ClipboardError, MemoryClipboard, SystemClipboard};",
              "line": 100,
              "signature": "pub use clipboard::{Clipboard, ClipboardError, MemoryClipboard, SystemClipboard};",
              "documentation": ""
            },
            {
              "name": "pub use external_editor::{\n    open_in_editor, open_with_command, resolve_editor_command, ExternalEditorError,\n};",
              "line": 101,
              "signature": "pub use external_editor::{\n    open_in_editor, open_with_command, resolve_editor_command, ExternalEditorError,\n};",
              "documentation": ""
            },
            {
              "name": "pub use onboarding::{OnboardingError, OnboardingFlow, OnboardingSelection, OnboardingStep};",
              "line": 106,
              "signature": "pub use onboarding::{OnboardingError, OnboardingFlow, OnboardingSelection, OnboardingStep};",
              "documentation": ""
            },
            {
              "name": "pub use workspace::complete_workspace_paths;",
              "line": 109,
              "signature": "pub use workspace::complete_workspace_paths;",
              "documentation": ""
            },
            {
              "name": "pub use harness::{\n    attribute, attribute_entry, AttributionDecision, AttributionVerdict, ChangeManifest,\n    EvidenceCorpus, EvidenceCorpusError, HarnessComponentEdit, HarnessComponentEditKind,\n    HarnessComponentKind, HarnessLoopError, HarnessLoopPhase, HarnessWorkspace,\n    HarnessWorkspaceError, IterationRecord, ManifestEntry, OverviewReport, PredictedImpact,\n    StandardHarnessLoop, TaskAnalysis, TaskDelta, TaskOutcome, TaskOutcomeMap,\n    HARNESS_COMPONENT_KINDS,\n};",
              "line": 112,
              "signature": "pub use harness::{\n    attribute, attribute_entry, AttributionDecision, AttributionVerdict, ChangeManifest,\n    EvidenceCorpus, EvidenceCorpusError, HarnessComponentEdit, HarnessComponentEditKind,\n    HarnessComponentKind, HarnessLoopError, HarnessLoopPhase, HarnessWorkspace,\n    HarnessWorkspaceError, IterationRecord, ManifestEntry, OverviewReport, PredictedImpact,\n    StandardHarnessLoop, TaskAnalysis, TaskDelta, TaskOutcome, TaskOutcomeMap,\n    HARNESS_COMPONENT_KINDS,\n};",
              "documentation": ""
            },
            {
              "name": "pub use types::{\n    ActivityLevel, AdapterCapabilities, AutonomyEvent, HumanInterjection, InterjectionAck,\n    InterjectionKind, InterjectionPriority, Mode, ResponseChunk, SdkAgentInfo, SdkAgentStatus,\n    SdkApprovalAction, SdkApprovalRequest, SdkRiskLevel, SdkRole, SessionInfo,\n};",
              "line": 122,
              "signature": "pub use types::{\n    ActivityLevel, AdapterCapabilities, AutonomyEvent, HumanInterjection, InterjectionAck,\n    InterjectionKind, InterjectionPriority, Mode, ResponseChunk, SdkAgentInfo, SdkAgentStatus,\n    SdkApprovalAction, SdkApprovalRequest, SdkRiskLevel, SdkRole, SessionInfo,\n};",
              "documentation": ""
            },
            {
              "name": "pub use types::{\n    DEFAULT_MAX_MESSAGES, DEFAULT_STREAM_TIMEOUT, MAX_AGENT_ID_LEN, MAX_AGENT_NAME_LEN,\n    MAX_CHUNK_SIZE, MAX_INTERJECTION_LEN, MAX_TOOL_INPUT_SIZE,\n};",
              "line": 129,
              "signature": "pub use types::{\n    DEFAULT_MAX_MESSAGES, DEFAULT_STREAM_TIMEOUT, MAX_AGENT_ID_LEN, MAX_AGENT_NAME_LEN,\n    MAX_CHUNK_SIZE, MAX_INTERJECTION_LEN, MAX_TOOL_INPUT_SIZE,\n};",
              "documentation": ""
            },
            {
              "name": "pub use adapter::AgentAdapter;",
              "line": 135,
              "signature": "pub use adapter::AgentAdapter;",
              "documentation": ""
            },
            {
              "name": "pub use runtime::app::{AgentApp, AgentAppBuilder};",
              "line": 138,
              "signature": "pub use runtime::app::{AgentApp, AgentAppBuilder};",
              "documentation": ""
            },
            {
              "name": "pub use runtime::terminal_control::{\n    clear_title, hyperlink, ring_bell, set_title, write_hyperlink, MAX_HYPERLINK_URL_LEN,\n    MAX_TITLE_LEN,\n};",
              "line": 141,
              "signature": "pub use runtime::terminal_control::{\n    clear_title, hyperlink, ring_bell, set_title, write_hyperlink, MAX_HYPERLINK_URL_LEN,\n    MAX_TITLE_LEN,\n};",
              "documentation": ""
            },
            {
              "name": "pub use runtime::notifications::{\n    KindMask, NotificationKind, Notifier, NotifierConfig, MAX_NOTIFICATION_LEN,\n};",
              "line": 147,
              "signature": "pub use runtime::notifications::{\n    KindMask, NotificationKind, Notifier, NotifierConfig, MAX_NOTIFICATION_LEN,\n};",
              "documentation": ""
            },
            {
              "name": "pub use screens::custom::{CustomScreen, ScreenEvent, ScreenResult};",
              "line": 152,
              "signature": "pub use screens::custom::{CustomScreen, ScreenEvent, ScreenResult};",
              "documentation": ""
            },
            {
              "name": "pub use adapters::stdio::StdioAdapter;",
              "line": 155,
              "signature": "pub use adapters::stdio::StdioAdapter;",
              "documentation": ""
            },
            {
              "name": "pub use adapters::http::HttpAdapter;",
              "line": 158,
              "signature": "#[cfg(feature = \"http\")]\npub use adapters::http::HttpAdapter;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/modes/autonomy.rs",
          "sha256": "193b1d530f0d5453def7f59b9999ca1a6464a4df771e6a124457bbe0aa86f245",
          "artifactSha256": "e937a2086b92877813119509fe116566933e9b896c7b40d1aa034372ede77ef4",
          "url": "/reference/source/harness-sdk/src/modes/autonomy.rs.txt",
          "declarations": [
            {
              "name": "::start_autonomy_session",
              "line": 23,
              "signature": "pub async fn start_autonomy_session(\n    state: &mut AppState,\n    adapter: &Arc<dyn AgentAdapter>,\n    instructions: &str,\n) -> Result<futures::stream::BoxStream<'static, AutonomyEvent>, SdkError>;",
              "documentation": "Start an autonomous execution session.\n\nTransitions the mode to Autonomy and starts the adapter's autonomy stream.\n\n# Errors\n\nReturns `SdkError` if the adapter doesn't support autonomy or fails to start."
            },
            {
              "name": "::stop_autonomy_session",
              "line": 57,
              "signature": "pub async fn stop_autonomy_session(\n    state: &mut AppState,\n    adapter: &Arc<dyn AgentAdapter>,\n) -> Result<(), SdkError>;",
              "documentation": "Stop the current autonomy session.\n\nTransitions through Stopping \u2192 Chat and tells the adapter to stop.\n\n# Errors\n\nReturns `SdkError` if the adapter fails to stop."
            },
            {
              "name": "::handle_autonomy_event",
              "line": 103,
              "signature": "pub fn handle_autonomy_event(state: &mut AppState, event: AutonomyEvent) -> Result<(), SdkError>;",
              "documentation": "Handle an autonomy event from the adapter.\n\nRoutes the event to the appropriate state update.\n\n# Errors\n\nReturns `SdkError` if a mode transition fails during event processing."
            },
            {
              "name": "::submit_approval",
              "line": 204,
              "signature": "pub async fn submit_approval(\n    state: &mut AppState,\n    adapter: &Arc<dyn AgentAdapter>,\n    request_id: &str,\n    action: SdkApprovalAction,\n) -> Result<(), SdkError>;",
              "documentation": "Submit an approval decision to the adapter.\n\n# Errors\n\nReturns `SdkError` if the adapter fails to process the approval."
            }
          ]
        },
        {
          "path": "harness-sdk/src/modes/chat.rs",
          "sha256": "1d83058f25f582fa2634a7c01d48259b2ecb710de7b9900b701b3bfc356c99e1",
          "artifactSha256": "1bc5b91111e20bec01789f2866966227cf09ab899ac847beaffe0d0eb32ffbb4",
          "url": "/reference/source/harness-sdk/src/modes/chat.rs.txt",
          "declarations": [
            {
              "name": "::send_chat_message",
              "line": 25,
              "signature": "pub async fn send_chat_message(\n    state: &mut AppState,\n    adapter: &Arc<dyn AgentAdapter>,\n    message: String,\n) -> Result<futures::stream::BoxStream<'static, ResponseChunk>, SdkError>;",
              "documentation": "Send a chat message to the active agent.\n\nCreates a user message in the timeline, then initiates a response stream.\nThe actual streaming is handled by the event loop which polls the stream.\n\n# Errors\n\nReturns `SdkError` if no agent is active or the adapter fails."
            },
            {
              "name": "::handle_response_chunk",
              "line": 61,
              "signature": "pub fn handle_response_chunk(state: &mut AppState, chunk: ResponseChunk) -> Result<(), SdkError>;",
              "documentation": "Handle a response chunk from the adapter's stream.\n\nValidates the chunk, sanitizes text, and updates state accordingly.\n\n# Errors\n\nReturns `SdkError::InvalidAdapterOutput` if validation fails.\nInvalid chunks are logged and skipped (non-fatal)."
            }
          ]
        },
        {
          "path": "harness-sdk/src/modes/mod.rs",
          "sha256": "ef379051191a7644781aa2034865bf49a8195d74011cd8d93d6d4a7310c725f6",
          "artifactSha256": "73bc604e096c9e5e9af5a124d5d0262218264e285489071818312db712ffdcbd",
          "url": "/reference/source/harness-sdk/src/modes/mod.rs.txt",
          "declarations": [
            {
              "name": "autonomy",
              "line": 3,
              "signature": "pub mod autonomy;",
              "documentation": "Mode-specific logic for Chat and Autonomy modes."
            },
            {
              "name": "chat",
              "line": 4,
              "signature": "pub mod chat;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/onboarding.rs",
          "sha256": "f23c7ae259293d61356a93af2bb2d946dee9e2edd387a781d0fbf3f3c0117b61",
          "artifactSha256": "06238ca608def31dee8a32ef7ad9c1b8fa115260975f54fb3b8be9e4e8fd69a1",
          "url": "/reference/source/harness-sdk/src/onboarding.rs.txt",
          "declarations": [
            {
              "name": "::OnboardingStep",
              "line": 16,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum OnboardingStep {\n    /// Initial welcome screen (one-time intro copy + ToS confirm).\n    Welcome,\n    /// Theme picker.\n    ChooseTheme,\n    /// Model picker.\n    ChooseModel,\n    /// Workspace root confirmation (the cwd Codex / clausen will\n    /// operate inside).\n    ConfirmWorkspace,\n    /// Onboarding finished.\n    Done,\n}",
              "documentation": "Discriminator for the onboarding step the flow is currently on."
            },
            {
              "name": "::OnboardingError",
              "line": 32,
              "signature": "#[derive(Debug, Error, PartialEq, Eq)]\npub enum OnboardingError {\n    /// `advance` / `back` was called from a state that does not allow\n    /// the requested transition (already at start / end).\n    #[error(\"invalid transition from {from:?} via {action}\")]\n    InvalidTransition {\n        /// State the flow was in.\n        from: OnboardingStep,\n        /// Attempted action (\"advance\", \"back\", \"skip\", \u2026).\n        action: &'static str,\n    },\n    /// A required selection was missing when `advance` was called.\n    #[error(\"step {step:?} requires a selection before advancing\")]\n    SelectionRequired {\n        /// Step that needs a selection.\n        step: OnboardingStep,\n    },\n}",
              "documentation": "Errors emitted by the onboarding flow."
            },
            {
              "name": "::OnboardingSelection",
              "line": 55,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct OnboardingSelection {\n/// Selected theme id (e.g. `\"monochrome\"`). `None` until the\n\n/// user activates a row in the theme picker.\n\npub theme_id: Option<String>,\n/// Selected model id (e.g. `\"claude-opus-4-7\"`). `None` until\n\n/// the user activates a row in the model picker.\n\npub model_id: Option<String>,\n/// Confirmed workspace root display string. `None` until\n\n/// confirmed.\n\npub workspace_root: Option<String>,\n/// Whether the user accepted the ToS / first-launch notice.\n\npub welcome_accepted: bool\n}",
              "documentation": "User selections accumulated during the flow. Populated by the\nSDK / app whenever the user activates a row in one of the\npickers; `OnboardingFlow::advance` reads + validates these\nbefore transitioning."
            },
            {
              "name": "::OnboardingFlow",
              "line": 84,
              "signature": "#[derive(Debug, Clone)]\npub struct OnboardingFlow {\n\n}",
              "documentation": "First-launch onboarding state machine.\n\nThe transition rules are:\n\n```text\nWelcome --advance--> ChooseTheme   (requires welcome_accepted)\nChooseTheme --advance--> ChooseModel   (requires theme_id)\nChooseModel --advance--> ConfirmWorkspace   (requires model_id)\nConfirmWorkspace --advance--> Done   (requires workspace_root)\nDone --advance--> InvalidTransition\n\n<step> --back--> previous step (Welcome cannot back).\n<step> --skip--> next step      (no validation; sets a sane default).\n```"
            },
            {
              "name": "::OnboardingFlow::new",
              "line": 92,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Construct a flow at the welcome step with no selections yet."
            },
            {
              "name": "::OnboardingFlow::from_selection",
              "line": 103,
              "signature": "#[must_use]\npub fn from_selection(selection: OnboardingSelection) -> Self;",
              "documentation": "Construct a flow that resumes from a saved selection (e.g.\nfor unit tests or for a `/onboard` command that re-enters the\nflow with a known partial state)."
            },
            {
              "name": "::OnboardingFlow::step",
              "line": 112,
              "signature": "#[must_use]\npub fn step(&self) -> OnboardingStep;",
              "documentation": "Current step."
            },
            {
              "name": "::OnboardingFlow::selection",
              "line": 118,
              "signature": "#[must_use]\npub fn selection(&self) -> &OnboardingSelection;",
              "documentation": "Read-only access to the accumulated selection."
            },
            {
              "name": "::OnboardingFlow::accept_welcome",
              "line": 123,
              "signature": "pub fn accept_welcome(&mut self);",
              "documentation": "Mark the welcome screen as accepted."
            },
            {
              "name": "::OnboardingFlow::set_theme",
              "line": 128,
              "signature": "pub fn set_theme(&mut self, theme_id: impl Into<String>);",
              "documentation": "Record the user's theme choice."
            },
            {
              "name": "::OnboardingFlow::set_model",
              "line": 133,
              "signature": "pub fn set_model(&mut self, model_id: impl Into<String>);",
              "documentation": "Record the user's model choice."
            },
            {
              "name": "::OnboardingFlow::set_workspace",
              "line": 138,
              "signature": "pub fn set_workspace(&mut self, workspace_root: impl Into<String>);",
              "documentation": "Record the workspace root."
            },
            {
              "name": "::OnboardingFlow::advance",
              "line": 144,
              "signature": "pub fn advance(&mut self) -> Result<OnboardingStep, OnboardingError>;",
              "documentation": "Advance to the next step. Validates the current step's\nrequired selection first."
            },
            {
              "name": "::OnboardingFlow::back",
              "line": 182,
              "signature": "pub fn back(&mut self) -> Result<OnboardingStep, OnboardingError>;",
              "documentation": "Step backwards. Welcome cannot back."
            },
            {
              "name": "::OnboardingFlow::skip",
              "line": 201,
              "signature": "pub fn skip(&mut self) -> Result<OnboardingStep, OnboardingError>;",
              "documentation": "Skip the current step using a default value. Useful when the\nSDK consumer wants to allow `Esc` to skip optional steps."
            },
            {
              "name": "::OnboardingFlow::is_done",
              "line": 231,
              "signature": "#[must_use]\npub fn is_done(&self) -> bool;",
              "documentation": "True once the flow has reached `Done`."
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/capability.rs",
          "sha256": "7ae6157a995095b2f862ecded2195e6330f4ae6aa947bea91b18ca1823c61656",
          "artifactSha256": "3ef2dbad9ae66ec7eef7bd0fdaf1695a1f04392ad98b59092b3741d00d676c45",
          "url": "/reference/source/harness-sdk/src/plugins/capability.rs.txt",
          "declarations": [
            {
              "name": "::Capability",
              "line": 19,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct Capability {\n/// The kind of capability.\n\npub kind: CapabilityKind,\n/// The specific resource (URL, path, command).\n\npub resource: String\n}",
              "documentation": "A specific capability a plugin can request.\n\n# Examples\n\n```\nuse harness_sdk::plugins::capability::{Capability, CapabilityKind};\n\nlet cap = Capability::new(CapabilityKind::Network, \"api.example.com\");\nassert_eq!(cap.kind, CapabilityKind::Network);\n```"
            },
            {
              "name": "::Capability::new",
              "line": 29,
              "signature": "#[must_use]\npub fn new(kind: CapabilityKind, resource: impl Into<String>) -> Self;",
              "documentation": "Create a new capability."
            },
            {
              "name": "::CapabilityKind",
              "line": 48,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum CapabilityKind {\n    /// Network access (HTTP, DNS, WebSocket).\n    Network,\n    /// Filesystem read access.\n    FileRead,\n    /// Filesystem write access.\n    FileWrite,\n    /// Shell command execution.\n    Shell,\n    /// Plugin state storage (scoped to the plugin).\n    Storage,\n}",
              "documentation": "The kind of capability a plugin can request.\n\n# Examples\n\n```\nuse harness_sdk::plugins::capability::CapabilityKind;\n\nassert_eq!(CapabilityKind::Network.label(), \"network\");\n```"
            },
            {
              "name": "::CapabilityKind::label",
              "line": 64,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::CapabilityKind::risk_level",
              "line": 76,
              "signature": "#[must_use]\npub const fn risk_level(&self) -> u8;",
              "documentation": "Risk level for this capability kind."
            },
            {
              "name": "::CapabilityGrants",
              "line": 105,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct CapabilityGrants {\n\n}",
              "documentation": "The set of capabilities granted to a plugin.\n\n# Examples\n\n```\nuse harness_sdk::plugins::capability::{CapabilityGrants, CapabilityKind, ApprovalMode};\n\nlet mut grants = CapabilityGrants::new();\ngrants.add(CapabilityKind::Network, ApprovalMode::Prompt);\nassert!(grants.has(CapabilityKind::Network));\n```"
            },
            {
              "name": "::CapabilityGrants::new",
              "line": 113,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create an empty set of grants."
            },
            {
              "name": "::CapabilityGrants::add",
              "line": 118,
              "signature": "pub fn add(&mut self, kind: CapabilityKind, mode: ApprovalMode);",
              "documentation": "Add a capability grant."
            },
            {
              "name": "::CapabilityGrants::has",
              "line": 124,
              "signature": "#[must_use]\npub fn has(&self, kind: CapabilityKind) -> bool;",
              "documentation": "Check if a capability kind is granted."
            },
            {
              "name": "::CapabilityGrants::mode",
              "line": 130,
              "signature": "#[must_use]\npub fn mode(&self, kind: CapabilityKind) -> Option<&ApprovalMode>;",
              "documentation": "Get the approval mode for a capability kind."
            },
            {
              "name": "::ApprovalMode",
              "line": 147,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ApprovalMode {\n    /// Always allow without asking.\n    Allow,\n    /// Always deny without asking.\n    Deny,\n    /// Ask the user each time.\n    Prompt,\n    /// Allow if the resource matches a pattern.\n    AllowPattern(String),\n}",
              "documentation": "How a capability request should be handled.\n\n# Examples\n\n```\nuse harness_sdk::plugins::capability::ApprovalMode;\n\nlet mode = ApprovalMode::Prompt;\nassert!(mode.requires_user_input());\n```"
            },
            {
              "name": "::ApprovalMode::requires_user_input",
              "line": 161,
              "signature": "#[must_use]\npub fn requires_user_input(&self) -> bool;",
              "documentation": "Returns `true` if this mode requires user input."
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/config.rs",
          "sha256": "dd1b2af2ac0a0df9ac1f1b2fda80feedc85755a417ac63afc8b854341f8d3bd6",
          "artifactSha256": "9df9c8ab146ec1ab88031ee2856dec04b6ab29beb58336f76fae80ae2258357a",
          "url": "/reference/source/harness-sdk/src/plugins/config.rs.txt",
          "declarations": [
            {
              "name": "::PluginConfig",
              "line": 19,
              "signature": "#[derive(Debug, Clone, Default, Serialize, Deserialize)]\npub struct PluginConfig {\n/// Directory containing plugin WASM files.\n\npub plugin_dir: Option<PathBuf>,\n/// Path to `plugins.toml` for persisted permission rules.\n\npub config_path: Option<PathBuf>,\n/// Per-plugin configuration overrides.\n\npub plugins: HashMap<String, PluginEntry>\n}",
              "documentation": "Plugin system configuration.\n\n# Examples\n\n```\nuse harness_sdk::plugins::config::PluginConfig;\n\nlet config = PluginConfig::default();\nassert!(config.plugin_dir.is_none());\n```"
            },
            {
              "name": "::PluginEntry",
              "line": 30,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PluginEntry {\n/// Whether the plugin is enabled.\n\npub enabled: bool,\n/// Path to the WASM file (overrides manifest).\n\npub path: Option<String>,\n/// Permission rules for this plugin.\n\n#[serde(default)]\npub permissions: Vec<PermissionRuleConfig>\n}",
              "documentation": "Configuration for a single plugin."
            },
            {
              "name": "::PermissionRuleConfig",
              "line": 42,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct PermissionRuleConfig {\n/// Capability kind as string.\n\npub capability: String,\n/// Glob pattern.\n\npub pattern: String,\n/// \"allow\", \"deny\", or \"prompt\".\n\npub mode: String\n}",
              "documentation": "A serializable permission rule for `plugins.toml`."
            },
            {
              "name": "::PluginConfig::load_or_default",
              "line": 56,
              "signature": "#[must_use]\npub fn load_or_default(path: Option<&PathBuf>) -> Self;",
              "documentation": "Load configuration from the default path.\n\nReturns default config if the file doesn't exist."
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/draw_command.rs",
          "sha256": "2c7bbe8f834a0320db5f08f3a7b7f73a928e13f741305bbcc999d5d7fb2cd05b",
          "artifactSha256": "2c61618e3fd0ad949e920b58477a956693d72a702a42a03021b333c7c018fed0",
          "url": "/reference/source/harness-sdk/src/plugins/draw_command.rs.txt",
          "declarations": [
            {
              "name": "::DrawCommand",
              "line": 14,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum DrawCommand {\n    /// Draw text at a position.\n    Text {\n        /// X coordinate (column).\n        x: u16,\n        /// Y coordinate (row).\n        y: u16,\n        /// Text content.\n        text: String,\n        /// Foreground color as RGB hex (e.g., \"#ff0000\").\n        fg: Option<String>,\n        /// Background color as RGB hex.\n        bg: Option<String>,\n        /// Whether to render as bold.\n        bold: bool,\n    },\n\n    /// Fill a rectangle with a character.\n    Fill {\n        /// X coordinate.\n        x: u16,\n        /// Y coordinate.\n        y: u16,\n        /// Width.\n        width: u16,\n        /// Height.\n        height: u16,\n        /// Fill character.\n        char: char,\n        /// Foreground color.\n        fg: Option<String>,\n        /// Background color.\n        bg: Option<String>,\n    },\n\n    /// Draw a horizontal line.\n    HLine {\n        /// X coordinate.\n        x: u16,\n        /// Y coordinate.\n        y: u16,\n        /// Length.\n        length: u16,\n        /// Character to use.\n        char: char,\n    },\n\n    /// Draw a vertical line.\n    VLine {\n        /// X coordinate.\n        x: u16,\n        /// Y coordinate.\n        y: u16,\n        /// Length.\n        length: u16,\n        /// Character to use.\n        char: char,\n    },\n\n    /// Clear a rectangular area.\n    Clear {\n        /// X coordinate.\n        x: u16,\n        /// Y coordinate.\n        y: u16,\n        /// Width.\n        width: u16,\n        /// Height.\n        height: u16,\n    },\n}",
              "documentation": "A drawing command from a plugin to the host.\n\nPlugins use these commands to render UI elements without direct\nterminal access."
            },
            {
              "name": "::parse_hex_color",
              "line": 98,
              "signature": "#[must_use]\npub fn parse_hex_color(hex: &str) -> Option<(u8, u8, u8)>;",
              "documentation": "Parse a hex color string to an RGB tuple.\n\n# Examples\n\n```\nuse harness_sdk::plugins::draw_command::parse_hex_color;\n\nassert_eq!(parse_hex_color(\"#ff0000\"), Some((255, 0, 0)));\nassert_eq!(parse_hex_color(\"#00ff00\"), Some((0, 255, 0)));\nassert_eq!(parse_hex_color(\"invalid\"), None);\n```"
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/host_functions.rs",
          "sha256": "1ad5ca6964c607f86dbe940204e26606693d0a61a080c932fde248f5e1a0992f",
          "artifactSha256": "bf5bc573c8b175f5aa0c69436c25399206df5af436a6f5b62efc532c2aac7350",
          "url": "/reference/source/harness-sdk/src/plugins/host_functions.rs.txt",
          "declarations": [
            {
              "name": "::check_capability",
              "line": 16,
              "signature": "pub fn check_capability(\n    permissions: &PermissionManager,\n    plugin: &str,\n    capability: &Capability,\n) -> Result<CapabilityCheckResult, PluginError>;",
              "documentation": "Check if a capability is allowed for a plugin.\n\nReturns `Ok(())` if allowed, `Err(PluginError::CapabilityDenied)` if denied,\nor needs to prompt the user (not handled here \u2014 caller must suspend)."
            },
            {
              "name": "::CapabilityCheckResult",
              "line": 35,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub enum CapabilityCheckResult {\n    /// The capability is allowed.\n    Allowed,\n    /// The user needs to be prompted.\n    NeedsPrompt,\n}",
              "documentation": "Result of a capability check."
            },
            {
              "name": "::validate_file_path",
              "line": 49,
              "signature": "pub fn validate_file_path(plugin: &str, path: &str) -> Result<String, PluginError>;",
              "documentation": "Validate and canonicalize a file path for filesystem capability checks.\n\nPrevents path traversal attacks (e.g., `../../../etc/passwd`).\n\n# Errors\n\nReturns `PluginError::CapabilityDenied` if the path is invalid."
            },
            {
              "name": "::scoped_storage_key",
              "line": 76,
              "signature": "#[must_use]\npub fn scoped_storage_key(plugin: &str, key: &str) -> String;",
              "documentation": "Scope a storage key by plugin name to prevent cross-plugin access.\n\n# Examples\n\n```\nuse harness_sdk::plugins::host_functions::scoped_storage_key;\n\nassert_eq!(scoped_storage_key(\"my-plugin\", \"setting\"), \"my-plugin::setting\");\n```"
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/manifest.rs",
          "sha256": "6aa38746d00447e89e66d4df4dd7b073651368f24d51e28a4fb799d0f512c5be",
          "artifactSha256": "98a1176ca4c7eafdea2e194f4e3a480bcd1b9d35ec06844d7492b66e25152fc2",
          "url": "/reference/source/harness-sdk/src/plugins/manifest.rs.txt",
          "declarations": [
            {
              "name": "::PluginManifest",
              "line": 32,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PluginManifest {\n/// Plugin name (unique identifier).\n\npub name: String,\n/// Semantic version string.\n\npub version: String,\n/// Short description.\n\npub description: String,\n/// Author name or organization.\n\npub author: String,\n/// Path to the WASM module file.\n\npub wasm_path: String,\n/// Expected SHA-256 hash of the WASM module (hex-encoded).\n\npub wasm_sha256: Option<String>,\n/// Capabilities the plugin requires.\n\npub capabilities: Vec<CapabilityKind>,\n/// Slash commands the plugin registers.\n\npub commands: Vec<PluginCommand>,\n/// Agent tools the plugin provides.\n\npub tools: Vec<PluginTool>\n}",
              "documentation": "A plugin manifest describing the plugin's identity and requirements.\n\n# Examples\n\n```\nuse harness_sdk::plugins::manifest::PluginManifest;\n\nlet manifest = PluginManifest {\n    name: \"my-plugin\".into(),\n    version: \"1.0.0\".into(),\n    description: \"A test plugin\".into(),\n    author: \"Test Author\".into(),\n    wasm_path: \"plugin.wasm\".into(),\n    wasm_sha256: None,\n    capabilities: vec![],\n    commands: vec![],\n    tools: vec![],\n};\nassert_eq!(manifest.name, \"my-plugin\");\n```"
            },
            {
              "name": "::PluginCommand",
              "line": 55,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PluginCommand {\n/// Command name (without `/` prefix).\n\npub name: String,\n/// Short description.\n\npub description: String\n}",
              "documentation": "A slash command registered by a plugin."
            },
            {
              "name": "::PluginTool",
              "line": 64,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PluginTool {\n/// Tool name.\n\npub name: String,\n/// Tool description.\n\npub description: String,\n/// JSON schema for tool input (as a string).\n\npub input_schema: String\n}",
              "documentation": "An agent tool provided by a plugin."
            },
            {
              "name": "::PluginManifest::from_path",
              "line": 82,
              "signature": "pub fn from_path(path: &str) -> Result<Self, PluginError>;",
              "documentation": "Load a manifest from a file path.\n\nLooks for `plugin.toml` or `manifest.toml` in the given directory,\nor treats the path as a direct manifest file.\n\n# Errors\n\nReturns `PluginError::Config` if the manifest cannot be read or parsed."
            },
            {
              "name": "::PluginManifest::validate",
              "line": 113,
              "signature": "pub fn validate(&self) -> Result<(), PluginError>;",
              "documentation": "Validate the manifest fields.\n\n# Errors\n\nReturns `PluginError::Config` if any required field is invalid."
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/mod.rs",
          "sha256": "0fb74d277aaa44abe157fd6c99b0f615aa8e431d7e6f30cbe5ebb275acd0582d",
          "artifactSha256": "b9e92b26d0692c76666cae23d9d43a042d843640afced25cdb71a0ad6018e2cf",
          "url": "/reference/source/harness-sdk/src/plugins/mod.rs.txt",
          "declarations": [
            {
              "name": "capability",
              "line": 33,
              "signature": "pub mod capability;",
              "documentation": "WASM plugin system (feature-gated: `plugins`).\n\nPlugins are sandboxed WASM modules loaded at runtime via wasmtime.\nThey can register slash commands, agent tools, custom screens,\nstatus widgets, and keybindings.\n\nA plugin cannot access the filesystem, network, or host memory\nunless the TUI app or user explicitly grants those capabilities.\n\n# Architecture\n\nEach plugin runs in its own wasmtime [`Store`](wasmtime::Store) with:\n- Isolated linear memory (default 64 MB limit)\n- Scoped state storage (Plugin A cannot read Plugin B's data)\n- Capability-checked host functions (network, filesystem, shell)\n\nThe [`PluginManager`] owns all loaded plugins and provides the API for\nloading, unloading, and invoking plugin functionality.\n\n# Examples\n\n```rust,no_run\nuse harness_sdk::plugins::PluginManager;\n\n# async fn example() -> Result<(), harness_sdk::PluginError> {\nlet manager = PluginManager::new();\nmanager.load_plugin(\"/path/to/plugin\").await?;\nlet output = manager.call_command(\"my-plugin\", \"greet\", \"{}\").await?;\n# Ok(())\n# }\n```"
            },
            {
              "name": "config",
              "line": 34,
              "signature": "pub mod config;",
              "documentation": ""
            },
            {
              "name": "draw_command",
              "line": 35,
              "signature": "pub mod draw_command;",
              "documentation": ""
            },
            {
              "name": "host_functions",
              "line": 36,
              "signature": "pub mod host_functions;",
              "documentation": ""
            },
            {
              "name": "manifest",
              "line": 37,
              "signature": "pub mod manifest;",
              "documentation": ""
            },
            {
              "name": "permission",
              "line": 38,
              "signature": "pub mod permission;",
              "documentation": ""
            },
            {
              "name": "registry",
              "line": 39,
              "signature": "pub mod registry;",
              "documentation": ""
            },
            {
              "name": "wasm",
              "line": 40,
              "signature": "pub mod wasm;",
              "documentation": ""
            },
            {
              "name": "::PluginManager",
              "line": 68,
              "signature": "pub struct PluginManager {\n\n}",
              "documentation": "Manages the lifecycle of all loaded plugins.\n\nThe `PluginManager` owns the wasmtime [`Engine`] (shared across all plugins)\nand a map of loaded plugin instances. It handles the full lifecycle:\nmanifest loading, hash verification, WASM compilation, instantiation,\ninitialization, and execution.\n\n# Examples\n\n```rust,no_run\nuse harness_sdk::plugins::PluginManager;\n\nlet manager = PluginManager::new();\n```"
            },
            {
              "name": "::PluginManager::new",
              "line": 98,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new plugin manager with default configuration.\n\nCreates a wasmtime engine internally. If engine creation fails (very\nunusual), the manager is created without an engine and all `load_plugin`\ncalls will return an error."
            },
            {
              "name": "::PluginManager::with_config",
              "line": 109,
              "signature": "#[must_use]\npub fn with_config(config: PluginConfig) -> Self;",
              "documentation": "Create a new plugin manager with the given configuration."
            },
            {
              "name": "::PluginManager::load_plugin",
              "line": 132,
              "signature": "pub async fn load_plugin(&self, path: &str) -> Result<(), PluginError>;",
              "documentation": "Load a plugin from a file path.\n\nPerforms the full loading pipeline:\n1. Parse the plugin manifest (from `plugin.toml` or `manifest.toml`)\n2. Verify the WASM SHA-256 hash if provided\n3. Compile the WASM module\n4. Validate required exports\n5. Instantiate with host functions and memory limits\n6. Call `plugin_init()`\n\n# Errors\n\nReturns `PluginError` if any step fails (invalid manifest, hash mismatch,\ncompilation failure, missing exports, init trap, etc.)."
            },
            {
              "name": "::PluginManager::unload_plugin",
              "line": 196,
              "signature": "pub async fn unload_plugin(&self, name: &str) -> Result<(), PluginError>;",
              "documentation": "Unload a plugin by name.\n\nDrops the WASM instance and removes the plugin from the manager.\n\n# Errors\n\nReturns `PluginError::NotFound` if the plugin is not loaded."
            },
            {
              "name": "::PluginManager::list_plugins",
              "line": 205,
              "signature": "pub async fn list_plugins(&self) -> Vec<String>;",
              "documentation": "List all loaded plugin names."
            },
            {
              "name": "::PluginManager::is_enabled",
              "line": 210,
              "signature": "pub async fn is_enabled(&self, name: &str) -> bool;",
              "documentation": "Check if a plugin is loaded and enabled."
            },
            {
              "name": "::PluginManager::call_command",
              "line": 231,
              "signature": "pub async fn call_command(\n        &self,\n        plugin: &str,\n        command: &str,\n        args: &str,\n    ) -> Result<Option<String>, PluginError>;",
              "documentation": "Execute a plugin command.\n\nCalls the plugin's `plugin_handle_command` export with the given\ncommand name and JSON arguments.\n\nReturns `Ok(None)` if the plugin doesn't export a command handler.\n\n# Errors\n\nReturns `PluginError::NotFound` if the plugin is not loaded,\n`PluginError::Disabled` if the plugin is disabled, or\n`PluginError::PluginPanic` if the command handler traps."
            },
            {
              "name": "::PluginManager::call_tool",
              "line": 262,
              "signature": "pub async fn call_tool(\n        &self,\n        plugin: &str,\n        tool: &str,\n        input: &str,\n    ) -> Result<Option<String>, PluginError>;",
              "documentation": "Execute a plugin tool.\n\nCalls the plugin's `plugin_handle_tool` export with the given\ntool name and JSON input.\n\nReturns `Ok(None)` if the plugin doesn't export a tool handler.\n\n# Errors\n\nReturns `PluginError::NotFound` if the plugin is not loaded,\n`PluginError::Disabled` if the plugin is disabled, or\n`PluginError::PluginPanic` if the tool handler traps."
            },
            {
              "name": "::PluginManager::permissions",
              "line": 283,
              "signature": "#[must_use]\npub fn permissions(&self) -> &Arc<PermissionManager>;",
              "documentation": "Get the permission manager."
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/permission.rs",
          "sha256": "dad01a6110d05a7c6478caadd26c019ae8d00dcac2b89c8160b616c53bce33df",
          "artifactSha256": "201116c08bd590a183d5acc0b9d11d5f563b6d2f84af78e79e6ab1c60134bd85",
          "url": "/reference/source/harness-sdk/src/plugins/permission.rs.txt",
          "declarations": [
            {
              "name": "::PermissionRule",
              "line": 18,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PermissionRule {\n/// Plugin name this rule applies to.\n\npub plugin: String,\n/// Capability kind.\n\npub kind: CapabilityKind,\n/// Glob pattern matching the resource.\n\npub pattern: String,\n/// What to do when the pattern matches.\n\npub mode: ApprovalMode\n}",
              "documentation": "A stored permission rule.\n\nRules are persisted in `plugins.toml` and loaded at startup."
            },
            {
              "name": "::PendingPermission",
              "line": 31,
              "signature": "#[derive(Debug)]\npub struct PendingPermission {\n/// The plugin requesting the capability.\n\npub plugin: String,\n/// The requested capability.\n\npub capability: Capability,\n/// Channel to send the user's decision.\n\npub response_tx: tokio::sync::oneshot::Sender<PermissionDecision>\n}",
              "documentation": "A pending permission request awaiting user decision."
            },
            {
              "name": "::PermissionDecision",
              "line": 42,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub enum PermissionDecision {\n    /// Allow this specific request once.\n    AllowOnce,\n    /// Always allow requests matching the given pattern.\n    AlwaysAllow(String),\n    /// Deny this request.\n    Deny,\n}",
              "documentation": "User's decision on a permission request."
            },
            {
              "name": "::PermissionManager",
              "line": 57,
              "signature": "pub struct PermissionManager {\n\n}",
              "documentation": "Manages permission rules and checks for plugin capabilities.\n\n# Thread Safety\n\nThe `PermissionManager` is thread-safe and can be shared across\nasync tasks via `Arc<PermissionManager>`."
            },
            {
              "name": "::PermissionManager::new",
              "line": 65,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new permission manager with no rules."
            },
            {
              "name": "::PermissionManager::add_rule",
              "line": 72,
              "signature": "pub fn add_rule(&self, rule: PermissionRule);",
              "documentation": "Add a permission rule."
            },
            {
              "name": "::PermissionManager::check",
              "line": 83,
              "signature": "#[must_use]\npub fn check(&self, plugin: &str, capability: &Capability) -> Option<ApprovalMode>;",
              "documentation": "Check if a capability is allowed for a plugin.\n\nReturns the matching approval mode, or `None` if no rule matches\n(meaning the user should be prompted)."
            },
            {
              "name": "::PermissionManager::revoke_all",
              "line": 100,
              "signature": "pub fn revoke_all(&self, plugin: &str);",
              "documentation": "Remove all rules for a plugin."
            },
            {
              "name": "::PermissionManager::rules_for",
              "line": 108,
              "signature": "#[must_use]\npub fn rules_for(&self, plugin: &str) -> Vec<PermissionRule>;",
              "documentation": "Get all rules for a plugin."
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/registry.rs",
          "sha256": "aa683d1e6c971d8151dd335f437b7966c9554a6869222a1f658ae6c9f479e0c5",
          "artifactSha256": "f869342c42c7c49acf48763ee2a4fe2c73d8acf98fe64b34cd289972ac3850c3",
          "url": "/reference/source/harness-sdk/src/plugins/registry.rs.txt",
          "declarations": [
            {
              "name": "::PluginSource",
              "line": 19,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum PluginSource {\n    /// A local filesystem path.\n    Local {\n        /// Path to the plugin directory or WASM file.\n        path: String,\n    },\n    /// A Git repository.\n    Git {\n        /// Git repository URL.\n        url: String,\n        /// Branch or tag (default: main).\n        #[serde(default = \"default_git_ref\")]\n        git_ref: String,\n        /// Path within the repository.\n        path: Option<String>,\n    },\n    /// A plugin index/registry.\n    Index {\n        /// Registry URL.\n        url: String,\n        /// Plugin name.\n        name: String,\n        /// Version constraint.\n        version: Option<String>,\n    },\n}",
              "documentation": "Source from which a plugin can be loaded.\n\n# Examples\n\n```\nuse harness_sdk::plugins::registry::PluginSource;\n\nlet source = PluginSource::Local { path: \"/path/to/plugin\".into() };\nassert!(matches!(source, PluginSource::Local { .. }));\n```"
            },
            {
              "name": "::PluginSource::local",
              "line": 53,
              "signature": "#[must_use]\npub fn local(path: impl Into<String>) -> Self;",
              "documentation": "Create a local source."
            },
            {
              "name": "::PluginSource::git",
              "line": 59,
              "signature": "#[must_use]\npub fn git(url: impl Into<String>) -> Self;",
              "documentation": "Create a Git source."
            },
            {
              "name": "::PluginSource::index",
              "line": 69,
              "signature": "#[must_use]\npub fn index(url: impl Into<String>, name: impl Into<String>) -> Self;",
              "documentation": "Create an index source."
            },
            {
              "name": "::verify_wasm_hash",
              "line": 84,
              "signature": "pub fn verify_wasm_hash(path: &str, expected_hash: &str) -> Result<(), PluginError>;",
              "documentation": "Verify a WASM file's SHA-256 hash against an expected value.\n\n# Errors\n\nReturns `PluginError::HashMismatch` if the hashes don't match.\nReturns `PluginError::Config` if the file cannot be read."
            }
          ]
        },
        {
          "path": "harness-sdk/src/plugins/wasm.rs",
          "sha256": "79fbf7dd46482d69dd057d339a9e3a6d4af1361bda1ceda26040408c8821b3aa",
          "artifactSha256": "de6d6485b58ea5b2ceaf64f299cb37d1967f2753a7bec660c5122c60353cf896",
          "url": "/reference/source/harness-sdk/src/plugins/wasm.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_MEMORY_LIMIT",
              "line": 40,
              "signature": "pub const DEFAULT_MEMORY_LIMIT: usize;",
              "documentation": "Default memory limit per plugin instance (64 MB)."
            },
            {
              "name": "::PluginData",
              "line": 51,
              "signature": "pub struct PluginData {\n/// Plugin name for scoping operations and error messages.\n\npub name: String,\n/// Plugin state storage (key-value, scoped by plugin name).\n\npub storage: HashMap<String, Vec<u8>>,\n/// Log buffer for captured plugin output.\n\npub log_buffer: Vec<String>,\n/// Permission manager reference for capability checks.\n\npub permissions: Arc<PermissionManager>\n}",
              "documentation": "Host-side state stored in each plugin's wasmtime [`Store`].\n\nEach plugin gets its own `PluginData` instance, ensuring complete isolation.\nThe `storage` field is scoped by plugin name via [`scoped_storage_key`]."
            },
            {
              "name": "::PluginInstance",
              "line": 78,
              "signature": "pub struct PluginInstance {\n\n}",
              "documentation": "A fully instantiated WASM plugin ready for execution.\n\nEach plugin runs in its own wasmtime [`Store`] with isolated memory.\nPlugin crashes (WASM traps) are caught and reported as\n[`PluginError::PluginPanic`] without affecting the host.\n\n# Memory Model\n\nStrings cross the WASM boundary via (pointer, length) pairs referencing\nthe plugin's linear memory. The host reads from plugin memory after\nexport calls, and writes to plugin memory via the `alloc` export\nbefore passing data to commands/tools."
            },
            {
              "name": "::create_engine",
              "line": 95,
              "signature": "pub fn create_engine() -> Result<Engine, PluginError>;",
              "documentation": "Create a wasmtime Engine with SDK-appropriate configuration.\n\nThe engine is configured with:\n- Full backtraces for debugging plugin crashes\n- Multi-memory support\n- Component model disabled (we use core WASM modules)\n\n# Errors\n\nReturns `PluginError::Config` if engine creation fails."
            },
            {
              "name": "::compile_module",
              "line": 110,
              "signature": "pub fn compile_module(engine: &Engine, path: &str) -> Result<Module, PluginError>;",
              "documentation": "Compile and validate a WASM module from a file.\n\n# Errors\n\nReturns `PluginError::InvalidModule` if the file is missing or compilation fails."
            },
            {
              "name": "::validate_exports",
              "line": 133,
              "signature": "pub fn validate_exports(module: &Module, plugin_name: &str) -> Result<(), PluginError>;",
              "documentation": "Validate that a module exports the required plugin interface functions.\n\nRequired exports:\n- `memory`: Linear memory for string passing\n- `plugin_init`: Called once when the plugin is loaded\n- `plugin_name`: Returns the plugin's self-reported name\n\n# Errors\n\nReturns `PluginError::MissingExport` if required exports are missing."
            },
            {
              "name": "::instantiate_plugin",
              "line": 326,
              "signature": "pub fn instantiate_plugin(\n    engine: &Engine,\n    module: &Module,\n    name: &str,\n    permissions: Arc<PermissionManager>,\n) -> Result<PluginInstance, PluginError>;",
              "documentation": "Create a new plugin instance from a compiled module.\n\nSets up an isolated [`Store`] with memory limits, registers host functions\nvia a [`Linker`], and instantiates the module.\n\n# Errors\n\nReturns `PluginError::InvalidModule` if instantiation fails, or\n`PluginError::Config` if the linker cannot be configured."
            },
            {
              "name": "::PluginInstance::plugin_name",
              "line": 360,
              "signature": "#[must_use]\npub fn plugin_name(&self) -> &str;",
              "documentation": "Get the plugin's name (from the host-side data, not the WASM export)."
            },
            {
              "name": "::PluginInstance::call_init",
              "line": 450,
              "signature": "pub fn call_init(&mut self) -> Result<(), PluginError>;",
              "documentation": "Call the plugin's `plugin_init()` export.\n\nCalled once after instantiation. If the plugin traps during init,\nthe error is reported as [`PluginError::PluginPanic`].\n\n# Errors\n\nReturns `PluginError::PluginPanic` if the init function traps."
            },
            {
              "name": "::PluginInstance::call_name",
              "line": 469,
              "signature": "pub fn call_name(&mut self) -> Result<String, PluginError>;",
              "documentation": "Call `plugin_name()` and return the plugin's self-reported name string.\n\nThe function returns `(ptr, len)` pointing into the plugin's linear memory.\n\n# Errors\n\nReturns `PluginError::PluginPanic` if the function traps, or\n`PluginError::HostFunction` if the returned string is invalid."
            },
            {
              "name": "::PluginInstance::call_command",
              "line": 490,
              "signature": "pub fn call_command(\n        &mut self,\n        cmd_name: &str,\n        args_json: &str,\n    ) -> Result<Option<String>, PluginError>;",
              "documentation": "Call `plugin_handle_command(name_ptr, name_len, args_ptr, args_len) -> (ptr, len)`.\n\nReturns `Ok(None)` if the plugin doesn't export `plugin_handle_command`.\nReturns `Ok(Some(output))` with the command's output string, or\n`Ok(None)` if the plugin returns `(0, 0)` (no output).\n\n# Errors\n\nReturns `PluginError::PluginPanic` if the command handler traps."
            },
            {
              "name": "::PluginInstance::call_tool",
              "line": 536,
              "signature": "pub fn call_tool(\n        &mut self,\n        tool_name: &str,\n        input_json: &str,\n    ) -> Result<Option<String>, PluginError>;",
              "documentation": "Call `plugin_handle_tool(name_ptr, name_len, input_ptr, input_len) -> (ptr, len)`.\n\nReturns `Ok(None)` if the plugin doesn't export `plugin_handle_tool`.\nReturns `Ok(Some(output))` with the tool's output JSON, or\n`Ok(None)` if the plugin returns `(0, 0)` (no output).\n\n# Errors\n\nReturns `PluginError::PluginPanic` if the tool handler traps."
            },
            {
              "name": "::PluginInstance::drain_logs",
              "line": 574,
              "signature": "pub fn drain_logs(&mut self) -> Vec<String>;",
              "documentation": "Drain the log buffer, returning all messages logged since the last drain."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/app.rs",
          "sha256": "d94c252c7a3a7004fcb917bb8307f6885060f15d552dafd6f9ac225e6ffd9104",
          "artifactSha256": "0ffe37f4e07f07b9deac5e67c0895b89b254d1af95bf3236cc617cf573cea357",
          "url": "/reference/source/harness-sdk/src/runtime/app.rs.txt",
          "declarations": [
            {
              "name": "::AgentApp",
              "line": 55,
              "signature": "pub struct AgentApp {\n\n}",
              "documentation": "The top-level TUI application.\n\nCreated via [`AgentApp::builder()`]. Call [`run()`](AgentApp::run) to\nstart the event loop."
            },
            {
              "name": "::AgentApp::builder",
              "line": 75,
              "signature": "#[must_use]\npub fn builder() -> AgentAppBuilder;",
              "documentation": "Create a new builder for `AgentApp`.\n\n# Examples\n\n```rust,no_run\nuse harness_sdk::AgentApp;\n\nlet builder = AgentApp::builder();\n```"
            },
            {
              "name": "::AgentApp::run",
              "line": 87,
              "signature": "pub async fn run(self) -> Result<(), SdkError>;",
              "documentation": "Run the application.\n\nThis takes ownership of the terminal for the duration. On exit\n(normal, error, or signal), the terminal is always restored.\n\n# Errors\n\nReturns `SdkError` if initialization or the event loop fails."
            },
            {
              "name": "::AgentAppBuilder",
              "line": 201,
              "signature": "pub struct AgentAppBuilder {\n\n}",
              "documentation": "Builder for [`AgentApp`].\n\n# Examples\n\n```rust,no_run\nuse harness_sdk::{AgentApp, AgentAppBuilder};\n\n# struct MyAdapter;\n# #[async_trait::async_trait]\n# impl harness_sdk::AgentAdapter for MyAdapter {\n#     fn name(&self) -> &str { \"test\" }\n#     fn capabilities(&self) -> harness_sdk::AdapterCapabilities { harness_sdk::AdapterCapabilities::chat_only() }\n#     async fn list_agents(&self) -> Result<Vec<harness_sdk::SdkAgentInfo>, harness_sdk::AdapterError> { Ok(vec![]) }\n#     async fn send_message(&self, _: &str, _: &str) -> Result<futures::stream::BoxStream<'static, harness_sdk::ResponseChunk>, harness_sdk::AdapterError> {\n#         Ok(Box::pin(futures::stream::empty()))\n#     }\n# }\n\nlet app = AgentApp::builder()\n    .name(\"My TUI\")\n    .adapter(MyAdapter)\n    .build()\n    .unwrap();\n```"
            },
            {
              "name": "::AgentAppBuilder::welcome",
              "line": 229,
              "signature": "#[must_use]\npub fn welcome(mut self, config: WelcomeConfig) -> Self;",
              "documentation": "Configure the welcome / empty-state hero screen shown before\nany chat turn has happened. The kit renders this via\n[`harness_tui_kit::WelcomeScreen`]; the SDK simply forwards\nthe config to `chat_screen` when the timeline is empty."
            },
            {
              "name": "::AgentAppBuilder::name",
              "line": 236,
              "signature": "#[must_use]\npub fn name(mut self, name: impl Into<String>) -> Self;",
              "documentation": "Set the application name (shown in title bar)."
            },
            {
              "name": "::AgentAppBuilder::adapter",
              "line": 243,
              "signature": "#[must_use]\npub fn adapter<A: AgentAdapter>(mut self, adapter: A) -> Self;",
              "documentation": "Set the adapter."
            },
            {
              "name": "::AgentAppBuilder::adapter_arc",
              "line": 250,
              "signature": "#[must_use]\npub fn adapter_arc(mut self, adapter: Arc<dyn AgentAdapter>) -> Self;",
              "documentation": "Set the adapter from an `Arc`."
            },
            {
              "name": "::AgentAppBuilder::theme",
              "line": 257,
              "signature": "#[must_use]\npub fn theme(mut self, theme: Theme) -> Self;",
              "documentation": "Set the theme (default: `Theme::dark()`)."
            },
            {
              "name": "::AgentAppBuilder::commands",
              "line": 264,
              "signature": "#[must_use]\npub fn commands(mut self, commands: SlashCommandRegistry) -> Self;",
              "documentation": "Set the slash command registry (default: builtins only)."
            },
            {
              "name": "::AgentAppBuilder::max_messages",
              "line": 271,
              "signature": "#[must_use]\npub fn max_messages(mut self, max: usize) -> Self;",
              "documentation": "Set the maximum message count (default: 100,000)."
            },
            {
              "name": "::AgentAppBuilder::build",
              "line": 281,
              "signature": "pub fn build(self) -> Result<AgentApp, SdkError>;",
              "documentation": "Build the `AgentApp`.\n\n# Errors\n\nReturns `SdkError::Builder` if required fields are missing."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/event.rs",
          "sha256": "705f0311601b3dc303e3f197d8a9712ed80b2a68efc95358939b33c3749759f3",
          "artifactSha256": "457bb6925b1b7b7f50124c839d7f336449f0f8b8797da74947855999f28eefbf",
          "url": "/reference/source/harness-sdk/src/runtime/event.rs.txt",
          "declarations": [
            {
              "name": "::AppEvent",
              "line": 14,
              "signature": "#[derive(Debug)]\npub enum AppEvent {\n    /// A terminal event (keyboard, mouse, resize).\n    Terminal(CrosstermEvent),\n\n    /// A response chunk from the adapter's response stream.\n    AdapterResponse(ResponseChunk),\n\n    /// An autonomy event from the adapter's autonomy stream.\n    Autonomy(AutonomyEvent),\n\n    /// An approval decision from the user.\n    ApprovalDecision {\n        /// The approval request ID.\n        request_id: String,\n        /// The user's decision.\n        action: SdkApprovalAction,\n    },\n\n    /// A tick event for animations and elapsed time updates.\n    Tick,\n\n    /// A shutdown signal was received.\n    Shutdown,\n}",
              "documentation": "Internal event type processed by the event loop.\n\nEvents are prioritized: Terminal > Shutdown > Adapter > Tick."
            },
            {
              "name": "::AppEvent::is_shutdown",
              "line": 42,
              "signature": "#[must_use]\npub fn is_shutdown(&self) -> bool;",
              "documentation": "Returns `true` if this is a shutdown event."
            },
            {
              "name": "::AppEvent::is_terminal",
              "line": 48,
              "signature": "#[must_use]\npub fn is_terminal(&self) -> bool;",
              "documentation": "Returns `true` if this is a terminal event."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/event_loop.rs",
          "sha256": "6e304ab3f7db45afbb1221d9eadee693ab68478a2390856f8f4e1d2cdfafef45",
          "artifactSha256": "058fff69f0898fbcbd97717bd18658ab6e81b8fdfdae552f9920acb477e27177",
          "url": "/reference/source/harness-sdk/src/runtime/event_loop.rs.txt",
          "declarations": [
            {
              "name": "::run_event_loop",
              "line": 58,
              "signature": "pub async fn run_event_loop(\n    terminal: &mut SdkTerminal,\n    state: &mut AppState,\n    adapter: Arc<dyn AgentAdapter>,\n    theme: &Theme,\n    mut shutdown_rx: mpsc::Receiver<()>,\n    commands: &SlashCommandRegistry,\n) -> Result<(), SdkError>;",
              "documentation": "Run the main event loop.\n\nThis is the core of the SDK. It processes events from multiple sources,\nupdates state, and renders the UI.\n\n# Arguments\n\n* `terminal` \u2014 The initialized terminal\n* `state` \u2014 Mutable application state\n* `adapter` \u2014 The agent adapter\n* `theme` \u2014 The UI theme\n* `shutdown_rx` \u2014 Channel for shutdown signals\n\n# Errors\n\nReturns `SdkError` if the event loop encounters an unrecoverable error."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/mod.rs",
          "sha256": "eb5d8ca980a925ba22c88e46b92cda5e0d64e35b5a60005df62eed8f6eca4aae",
          "artifactSha256": "58ead2ed2808306e9967902744f7ad02339a6e185e0b8067b9eeaccb71a8e79f",
          "url": "/reference/source/harness-sdk/src/runtime/mod.rs.txt",
          "declarations": [
            {
              "name": "app",
              "line": 6,
              "signature": "pub mod app;",
              "documentation": "Runtime infrastructure for the Agent TUI SDK.\n\nContains the event loop, terminal management, signal handling,\napplication state, and the top-level `AgentApp` builder."
            },
            {
              "name": "event",
              "line": 7,
              "signature": "pub mod event;",
              "documentation": ""
            },
            {
              "name": "event_loop",
              "line": 8,
              "signature": "pub mod event_loop;",
              "documentation": ""
            },
            {
              "name": "notifications",
              "line": 9,
              "signature": "pub mod notifications;",
              "documentation": ""
            },
            {
              "name": "signals",
              "line": 10,
              "signature": "pub mod signals;",
              "documentation": ""
            },
            {
              "name": "state",
              "line": 11,
              "signature": "pub mod state;",
              "documentation": ""
            },
            {
              "name": "terminal",
              "line": 12,
              "signature": "pub mod terminal;",
              "documentation": ""
            },
            {
              "name": "terminal_control",
              "line": 13,
              "signature": "pub mod terminal_control;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/notifications.rs",
          "sha256": "a6ed4cdc5b4c4ba635af1b862d6f147e7560736f48f5fd324b87926851cab4e4",
          "artifactSha256": "680f197a481ff42c46b3ca8c1cae625dfe63782f349774375382ed477001fb9c",
          "url": "/reference/source/harness-sdk/src/runtime/notifications.rs.txt",
          "declarations": [
            {
              "name": "::MAX_NOTIFICATION_LEN",
              "line": 33,
              "signature": "pub const MAX_NOTIFICATION_LEN: usize;",
              "documentation": "Maximum length of a notification body. Anything longer is\ntruncated; OSC 9 has no formal limit but pragmatic emulators\nreject very long sequences."
            },
            {
              "name": "::NotificationKind",
              "line": 39,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"kebab-case\")]\npub enum NotificationKind {\n    /// Streaming response just finished.\n    AgentTurnComplete,\n    /// Adapter raised an approval request that requires user input.\n    ApprovalNeeded,\n    /// A long-running tool call completed.\n    ToolCallComplete,\n    /// Catastrophic failure surfaced to the user.\n    Error,\n}",
              "documentation": "Kinds of notifications the runtime can emit. Adapters can filter\nthese via [`NotifierConfig`] to silence less-interesting events."
            },
            {
              "name": "::NotificationKind::title",
              "line": 53,
              "signature": "#[must_use]\npub fn title(self) -> &'static str;",
              "documentation": "Human-readable title for the notification."
            },
            {
              "name": "::NotifierConfig",
              "line": 65,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Default)]\npub enum NotifierConfig {\n    /// Disable notifications entirely.\n    Disabled,\n    /// Emit `OSC 9 ; title \u2014 body BEL` to the supplied writer.\n    /// Default channel.\n    #[default]\n    TerminalOsc9,\n    /// Spawn a user-supplied command, passing the body on argv.\n    /// `argv[0]` is the program; remaining items are static\n    /// arguments. The notification body is appended as the last\n    /// argument when [`Notifier::notify`] is called.\n    ExternalCommand { argv: Vec<String> },\n}",
              "documentation": "Configuration for [`Notifier`]. Adapters pick the channel."
            },
            {
              "name": "::Notifier",
              "line": 82,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct Notifier {\n\n}",
              "documentation": "Stateless notification dispatcher. Cheap to clone \u2014 adapters\ntypically hold one and call `notify` from any task."
            },
            {
              "name": "::KindMask",
              "line": 89,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct KindMask {\n\n}",
              "documentation": "Bitmask of which notification kinds are enabled. Default is all."
            },
            {
              "name": "::KindMask::without",
              "line": 110,
              "signature": "#[must_use]\npub fn without(mut self, kind: NotificationKind) -> Self;",
              "documentation": "Disable a specific kind."
            },
            {
              "name": "::KindMask::allows",
              "line": 122,
              "signature": "#[must_use]\npub fn allows(&self, kind: NotificationKind) -> bool;",
              "documentation": "Whether `kind` is currently enabled."
            },
            {
              "name": "::Notifier::new",
              "line": 135,
              "signature": "#[must_use]\npub fn new(config: NotifierConfig) -> Self;",
              "documentation": "Create a notifier with the given configuration."
            },
            {
              "name": "::Notifier::with_mask",
              "line": 144,
              "signature": "#[must_use]\npub fn with_mask(mut self, mask: KindMask) -> Self;",
              "documentation": "Replace the kind mask (defaults to \"all enabled\")."
            },
            {
              "name": "::Notifier::is_enabled",
              "line": 151,
              "signature": "#[must_use]\npub fn is_enabled(&self) -> bool;",
              "documentation": "Whether notifications are enabled at all."
            },
            {
              "name": "::Notifier::allows",
              "line": 157,
              "signature": "#[must_use]\npub fn allows(&self, kind: NotificationKind) -> bool;",
              "documentation": "Whether `kind` would be emitted right now."
            },
            {
              "name": "::Notifier::osc9_payload",
              "line": 165,
              "signature": "#[must_use]\npub fn osc9_payload(kind: NotificationKind, body: &str) -> String;",
              "documentation": "Build the OSC 9 escape sequence for a notification. Public so\ncallers can route the bytes themselves (e.g., into a buffered\nterminal writer rather than stdout)."
            },
            {
              "name": "::Notifier::notify",
              "line": 187,
              "signature": "pub fn notify<W: Write>(\n        &self,\n        writer: &mut W,\n        kind: NotificationKind,\n        body: &str,\n    ) -> io::Result<()>;",
              "documentation": "Emit `kind` with the supplied body, writing escape sequences\nto `writer` if the channel is [`NotifierConfig::TerminalOsc9`].\nExternal-command channels are dispatched via\n[`Notifier::external_command`] instead \u2014 `notify` is the\nterminal-only path so the runtime can call it from inside the\nrender loop without spawning processes.\n\n# Errors\n\nReturns the underlying [`io::Error`] from the writer if the\nchannel is OSC 9. Disabled and external-command channels\nalways succeed."
            },
            {
              "name": "::Notifier::external_command",
              "line": 214,
              "signature": "#[must_use]\npub fn external_command(&self, kind: NotificationKind, body: &str) -> Option<Vec<String>>;",
              "documentation": "Returns the argv that should be exec'd for an external-command\nnotification, with the body appended as the final argument.\nReturns `None` when the channel is not external-command or\nwhen this kind is masked off."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/signals.rs",
          "sha256": "8116b654eafdad0fb40564e8b865b9d6aae757d37e2d821120c614147bc8245b",
          "artifactSha256": "097c967733d489a8c1b7405ece6bbe16971f97761324e4a38395394ef0b22900",
          "url": "/reference/source/harness-sdk/src/runtime/signals.rs.txt",
          "declarations": [
            {
              "name": "::spawn_signal_handlers",
              "line": 18,
              "signature": "pub fn spawn_signal_handlers(shutdown_tx: mpsc::Sender<()>);",
              "documentation": "Spawn signal handlers for SIGINT and SIGTERM.\n\nWhen either signal is received, a message is sent on `shutdown_tx`.\nThe event loop receives this and initiates graceful shutdown.\n\n# Platform Support\n\n- Unix: Uses `tokio::signal::unix::signal` for both SIGINT and SIGTERM.\n- Windows: Falls back to `tokio::signal::ctrl_c()` for SIGINT only."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/state.rs",
          "sha256": "075f465fd98fae9563fd65ef9c7319c9f8f7dc6766c9d6966267769605eba77f",
          "artifactSha256": "bd8a9790bf31b92d94da90cb358e6657f295e6ebf71f290e7d878cd76dd98666",
          "url": "/reference/source/harness-sdk/src/runtime/state.rs.txt",
          "declarations": [
            {
              "name": "::DropdownKind",
              "line": 39,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum DropdownKind {\n    /// `/` \u2014 slash command autocomplete.\n    #[default]\n    Slash,\n    /// `@` \u2014 file-mention autocomplete (live workspace search,\n    /// `./`, `../`, absolute paths).\n    Mention,\n}",
              "documentation": "Central application state.\n\nOwns all mutable state for the TUI, including:\n- Current mode (Chat/Autonomy/Stopping)\n- Connected agents and their metadata\n- Chat messages and streaming state\n- Kit component states\n- Session metrics\n\n# Examples\n\n```\nuse harness_sdk::runtime::state::AppState;\n\nlet state = AppState::new(\"my-app\");\nassert_eq!(state.mode(), harness_sdk::Mode::Chat);\nassert!(!state.should_quit());\n```\nWhich input-bar trigger is driving the autocomplete dropdown."
            },
            {
              "name": "::AppState",
              "line": 48,
              "signature": "pub struct AppState {\n/// Persistent state for the kit's `ThinkingAnimation`. The\n\n/// runtime calls\n\n/// [`harness_tui_kit::ThinkingAnimationState::advance`] each\n\n/// render frame while [`Self::is_thinking`] is true.\n\npub thinking_state: ThinkingAnimationState,\n// \u2500\u2500 Kit component states \u2500\u2500\n/// Chat timeline state.\n\npub timeline_state: ChatTimelineState,\n/// Input bar state.\n\npub input_state: InputBarState,\n/// App shell state.\n\npub shell_state: AppShellState,\n/// Tabs state.\n\npub tabs_state: TabsState,\n/// Approval queue state.\n\npub approval_state: ApprovalQueueState,\n/// Log viewer state (for autonomy mode activity feed).\n\npub log_viewer_state: LogViewerState,\n/// Command palette state.\n\npub palette_state: CommandPaletteState,\n/// Whether the command palette is open.\n\npub palette_open: bool,\n/// Slash dropdown state (inline autocomplete above input bar).\n\npub dropdown_state: SlashDropdownState,\n/// Items for the dropdown (shared between slash commands and `@`\n\n/// file mentions).\n\npub dropdown_items: Vec<SlashDropdownItem>,\n/// Which trigger is currently driving the dropdown \u2014 `Slash` when\n\n/// the input begins with `/`, `Mention` when the input contains an\n\n/// `@<prefix>` token at the end. Determines the substitution\n\n/// behaviour on `Enter`/`Tab` confirmation.\n\npub dropdown_kind: DropdownKind,\n/// When `dropdown_kind == Mention`, the literal prefix (including\n\n/// the leading `@`) currently being completed. The confirmation\n\n/// path uses this to know which substring of the input to replace\n\n/// with the chosen path.\n\npub mention_prefix: String,\n/// Error message to display (cleared after one render).\n\npub error_flash: Option<String>,\n/// Info message to display (cleared after one render).\n\npub info_flash: Option<String>,\n/// Ctrl+P settings palette state \u2014 visibility, current page,\n\n/// cursor, filter.\n\npub settings_palette_state: SettingsPaletteState\n}",
              "documentation": ""
            },
            {
              "name": "::AppState::new",
              "line": 184,
              "signature": "#[must_use]\npub fn new(app_name: impl Into<String>) -> Self;",
              "documentation": "Create a new application state.\n\n# Examples\n\n```\nuse harness_sdk::runtime::state::AppState;\nlet state = AppState::new(\"my-app\");\nassert_eq!(state.app_name(), \"my-app\");\n```"
            },
            {
              "name": "::AppState::set_settings_snapshot",
              "line": 224,
              "signature": "pub fn set_settings_snapshot(&mut self, snapshot: SettingsSnapshot);",
              "documentation": "Replace the cached settings snapshot. Called after the\nruntime re-fetches from the adapter (typically on Ctrl+P\nopen and after each apply)."
            },
            {
              "name": "::AppState::settings_snapshot",
              "line": 230,
              "signature": "#[must_use]\npub fn settings_snapshot(&self) -> &SettingsSnapshot;",
              "documentation": "Borrow the cached settings snapshot."
            },
            {
              "name": "::AppState::live_welcome_config",
              "line": 241,
              "signature": "#[must_use]\npub fn live_welcome_config(&self) -> Option<harness_tui_kit::WelcomeConfig>;",
              "documentation": "Compute a *live* welcome config \u2014 the static one supplied at\nbuilder time (brand, placeholder, hints, footer) overlaid\nwith the currently-active mode + model + provider read from\nthe settings snapshot. This is what the chat screen should\nrender so the user sees the model they just picked via\nCtrl+P, not whatever was hardcoded at startup."
            },
            {
              "name": "::AppState::set_welcome",
              "line": 286,
              "signature": "pub fn set_welcome(&mut self, welcome: harness_tui_kit::WelcomeConfig);",
              "documentation": "Install the welcome / empty-state hero config."
            },
            {
              "name": "::AppState::welcome",
              "line": 294,
              "signature": "#[must_use]\npub fn welcome(&self) -> Option<&harness_tui_kit::WelcomeConfig>;",
              "documentation": "Borrow the welcome config, if one was installed. Returns\n`None` when there's nothing configured (in which case the\nchat screen falls back to its previous empty-timeline look)."
            },
            {
              "name": "::AppState::app_name",
              "line": 302,
              "signature": "#[must_use]\npub fn app_name(&self) -> &str;",
              "documentation": "Returns the application name."
            },
            {
              "name": "::AppState::mode",
              "line": 308,
              "signature": "#[must_use]\npub fn mode(&self) -> Mode;",
              "documentation": "Returns the current mode."
            },
            {
              "name": "::AppState::should_quit",
              "line": 314,
              "signature": "#[must_use]\npub fn should_quit(&self) -> bool;",
              "documentation": "Returns `true` if the app should quit."
            },
            {
              "name": "::AppState::active_agent_id",
              "line": 320,
              "signature": "#[must_use]\npub fn active_agent_id(&self) -> Option<&str>;",
              "documentation": "Returns the currently active agent ID."
            },
            {
              "name": "::AppState::agents",
              "line": 326,
              "signature": "#[must_use]\npub fn agents(&self) -> &HashMap<String, SdkAgentInfo>;",
              "documentation": "Returns the agents map."
            },
            {
              "name": "::AppState::messages",
              "line": 332,
              "signature": "#[must_use]\npub fn messages(&self) -> &[harness_tui_kit::ChatMessage];",
              "documentation": "Returns the chat messages."
            },
            {
              "name": "::AppState::is_streaming",
              "line": 338,
              "signature": "#[must_use]\npub fn is_streaming(&self) -> bool;",
              "documentation": "Returns whether a response is currently streaming."
            },
            {
              "name": "::AppState::is_thinking",
              "line": 348,
              "signature": "#[must_use]\npub fn is_thinking(&self) -> bool;",
              "documentation": "True between \"model started thinking\" and the first\n`TextDelta` arriving (or stream end). The chat surface\nrenders the kit's [`harness_tui_kit::ThinkingAnimation`]\nband while this is true so the user knows the agent is\nalive but not yet producing tokens."
            },
            {
              "name": "::AppState::approval_queue",
              "line": 354,
              "signature": "#[must_use]\npub fn approval_queue(&self) -> &[SdkApprovalRequest];",
              "documentation": "Returns the pending approval requests."
            },
            {
              "name": "::AppState::activity_log",
              "line": 360,
              "signature": "#[must_use]\npub fn activity_log(&self) -> &[harness_tui_kit::LogEntry];",
              "documentation": "Returns the activity log entries."
            },
            {
              "name": "::AppState::session",
              "line": 366,
              "signature": "#[must_use]\npub fn session(&self) -> &SessionInfo;",
              "documentation": "Returns the session info."
            },
            {
              "name": "::AppState::elapsed",
              "line": 372,
              "signature": "#[must_use]\npub fn elapsed(&self) -> Duration;",
              "documentation": "Returns the elapsed time since session start."
            },
            {
              "name": "::AppState::set_quit",
              "line": 379,
              "signature": "pub fn set_quit(&mut self);",
              "documentation": "Set the quit flag."
            },
            {
              "name": "::AppState::set_streaming",
              "line": 393,
              "signature": "pub fn set_streaming(&mut self, streaming: bool);",
              "documentation": "Set the streaming flag.\n\nTransitioning from `false` -> `true` arms a fresh\n[`MarkdownStreamCollector`] for the agent message currently\nbeing filled AND turns on the [`harness_tui_kit::ThinkingAnimation`]\nband so the user sees something while the model is still\n\"thinking\" (no tokens yet). Transitioning from `true` ->\n`false` drains any remaining buffered source into the last\nmessage, drops the collector, and clears the thinking flag.\nIdempotent on no-op transitions."
            },
            {
              "name": "::AppState::set_thinking",
              "line": 419,
              "signature": "pub fn set_thinking(&mut self, thinking: bool);",
              "documentation": "Explicitly set the thinking flag. The chat-mode handler\nflips it to `false` automatically the moment the first\n`TextDelta` arrives; callers rarely need to invoke it\ndirectly, but it is exposed for adapters that signal\nthinking-on / thinking-off out-of-band (e.g. via a custom\n`ResponseChunk::StatusChange`)."
            },
            {
              "name": "::AppState::tick_thinking",
              "line": 431,
              "signature": "pub fn tick_thinking(&mut self);",
              "documentation": "Advance the thinking-animation tick by one frame. The runtime\ncalls this every render frame while [`Self::is_thinking`] is\ntrue."
            },
            {
              "name": "::AppState::push_streaming_delta",
              "line": 447,
              "signature": "pub fn push_streaming_delta(&mut self, delta: &str);",
              "documentation": "Feed a streaming `TextDelta` chunk into the active markdown\ncollector and append any newly-committed source to the last\nmessage. When no stream is armed (e.g. an out-of-band tool\nstatus TextDelta), falls back to a direct append so existing\nadapters keep working.\n\nModeled on `openai/codex@codex-rs/tui/src/streaming/controller.rs`,\nwhich re-renders the entire accumulated markdown source on each\ncommit boundary so block-level constructs (lists, fenced code,\nblockquotes) render coherently as the stream arrives."
            },
            {
              "name": "::AppState::has_active_markdown_stream",
              "line": 470,
              "signature": "#[must_use]\npub fn has_active_markdown_stream(&self) -> bool;",
              "documentation": "True when a markdown stream collector is currently armed.\nUseful for diagnostics and tests."
            },
            {
              "name": "::AppState::set_mode",
              "line": 479,
              "signature": "pub fn set_mode(&mut self, mode: Mode) -> Result<(), crate::SdkError>;",
              "documentation": "Set the current mode.\n\n# Errors\n\nReturns `SdkError::InvalidModeTransition` if the transition is invalid."
            },
            {
              "name": "::AppState::set_active_agent",
              "line": 503,
              "signature": "pub fn set_active_agent(&mut self, agent_id: Option<String>);",
              "documentation": "Set the active agent ID."
            },
            {
              "name": "::AppState::set_max_messages",
              "line": 508,
              "signature": "pub fn set_max_messages(&mut self, max: usize);",
              "documentation": "Set the maximum message count."
            },
            {
              "name": "::AppState::set_agents",
              "line": 515,
              "signature": "pub fn set_agents(&mut self, agents: Vec<SdkAgentInfo>);",
              "documentation": "Update the agents list."
            },
            {
              "name": "::AppState::update_agent",
              "line": 529,
              "signature": "pub fn update_agent(&mut self, agent: SdkAgentInfo);",
              "documentation": "Update a single agent's info."
            },
            {
              "name": "::AppState::add_message",
              "line": 536,
              "signature": "pub fn add_message(&mut self, msg: harness_tui_kit::ChatMessage);",
              "documentation": "Add a chat message."
            },
            {
              "name": "::AppState::append_to_last_message",
              "line": 547,
              "signature": "pub fn append_to_last_message(&mut self, text: &str);",
              "documentation": "Append text to the last message (for streaming)."
            },
            {
              "name": "::AppState::clear_messages",
              "line": 554,
              "signature": "pub fn clear_messages(&mut self);",
              "documentation": "Clear all messages."
            },
            {
              "name": "::AppState::truncate_messages_at",
              "line": 562,
              "signature": "pub fn truncate_messages_at(&mut self, idx: usize);",
              "documentation": "Drop every message at or after `idx`. Used by the\n[`crate::backtrack`] module to rewind to a prior turn. The\nsession's `message_count` is updated to match."
            },
            {
              "name": "::AppState::add_approval",
              "line": 572,
              "signature": "pub fn add_approval(&mut self, request: SdkApprovalRequest);",
              "documentation": "Add an approval request to the queue."
            },
            {
              "name": "::AppState::remove_approval",
              "line": 580,
              "signature": "pub fn remove_approval(&mut self, request_id: &str);",
              "documentation": "Remove an approval request by ID."
            },
            {
              "name": "::AppState::add_activity",
              "line": 587,
              "signature": "pub fn add_activity(&mut self, entry: harness_tui_kit::LogEntry);",
              "documentation": "Add an activity log entry."
            },
            {
              "name": "::AppState::update_usage",
              "line": 598,
              "signature": "pub fn update_usage(&mut self, input_tokens: u64, output_tokens: u64, cost_cents: f64);",
              "documentation": "Update usage metrics."
            },
            {
              "name": "::AppState::tick",
              "line": 605,
              "signature": "pub fn tick(&mut self);",
              "documentation": "Update the session elapsed time."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/terminal.rs",
          "sha256": "67ba3b3cc520542a260fad9654c91d7af006aa6d164937e7eadb56fc779e89c3",
          "artifactSha256": "43e36b5e0be722f40867e7b981a3ee8d196690b90c83fd130bf8c7a7785ab76f",
          "url": "/reference/source/harness-sdk/src/runtime/terminal.rs.txt",
          "declarations": [
            {
              "name": "::SdkTerminal",
              "line": 22,
              "signature": "pub type SdkTerminal = Terminal<CrosstermBackend<Stdout>>;",
              "documentation": "Type alias for the SDK's terminal backend."
            },
            {
              "name": "::init_terminal",
              "line": 32,
              "signature": "pub fn init_terminal() -> io::Result<SdkTerminal>;",
              "documentation": "Initialize the terminal for TUI rendering.\n\nEnters alternate screen, enables raw mode, and hides the cursor.\nReturns a `Terminal` ready for rendering.\n\n# Errors\n\nReturns `io::Error` if terminal initialization fails."
            },
            {
              "name": "::restore_terminal",
              "line": 65,
              "signature": "pub fn restore_terminal() -> io::Result<()>;",
              "documentation": "Restore the terminal to its original state.\n\nLeaves alternate screen, disables raw mode, and shows the cursor.\nThis function is safe to call multiple times.\n\n# Errors\n\nReturns `io::Error` if restoration fails, but tries all steps regardless."
            },
            {
              "name": "::install_panic_hook",
              "line": 79,
              "signature": "pub fn install_panic_hook();",
              "documentation": "Install a panic hook that restores the terminal before printing the backtrace.\n\nThis ensures that even if the SDK panics (which it should never do in\nproduction code), the user's terminal is not left in a corrupted state."
            }
          ]
        },
        {
          "path": "harness-sdk/src/runtime/terminal_control.rs",
          "sha256": "17fcb4ae6b10ead43f42a8b4f03ddce85609d49a6d7876cf5c366df8ea462f02",
          "artifactSha256": "095e723bd1a3cab6d1d6b72c8d4d7ace14690f2a2149d75f8e576606d28a6ba5",
          "url": "/reference/source/harness-sdk/src/runtime/terminal_control.rs.txt",
          "declarations": [
            {
              "name": "::MAX_TITLE_LEN",
              "line": 18,
              "signature": "pub const MAX_TITLE_LEN: usize;",
              "documentation": "Maximum length of a window title we'll emit, to avoid abusive\npayloads from upstream adapter output. The value is well above\nwhat any sane terminal will display."
            },
            {
              "name": "::MAX_HYPERLINK_URL_LEN",
              "line": 22,
              "signature": "pub const MAX_HYPERLINK_URL_LEN: usize;",
              "documentation": "Maximum length of an OSC 8 URL. URLs longer than this are\ntruncated; the visible label is rendered without a hyperlink."
            },
            {
              "name": "::set_title",
              "line": 38,
              "signature": "pub fn set_title<W: Write>(writer: &mut W, title: &str) -> io::Result<()>;",
              "documentation": "Set the terminal window title using `OSC 0 ; <text> BEL`.\n\n`OSC 0` updates both the icon name and the window title \u2014 this is\nthe most widely-supported variant across iTerm2, Terminal.app,\nAlacritty, Kitty, Wezterm, and modern xterm.\n\nThe text is sanitized: control characters (except space) are\nstripped, and the title is truncated to [`MAX_TITLE_LEN`] chars.\nEmpty titles fall through as \"clear title\" (sets to a single\nspace, which most terminals interpret as a reset).\n\n# Errors\n\nReturns the underlying [`io::Error`] from the writer."
            },
            {
              "name": "::clear_title",
              "line": 49,
              "signature": "pub fn clear_title<W: Write>(writer: &mut W) -> io::Result<()>;",
              "documentation": "Clear the terminal window title.\n\n# Errors\n\nReturns the underlying [`io::Error`] from the writer."
            },
            {
              "name": "::ring_bell",
              "line": 62,
              "signature": "pub fn ring_bell<W: Write>(writer: &mut W) -> io::Result<()>;",
              "documentation": "Emit a terminal bell (`BEL`).\n\nMany emulators surface this as a visual or audible notification\nwhen their tab is in the background \u2014 useful for \"task done\".\n\n# Errors\n\nReturns the underlying [`io::Error`] from the writer."
            },
            {
              "name": "::hyperlink",
              "line": 76,
              "signature": "#[must_use]\npub fn hyperlink(url: &str, label: &str) -> String;",
              "documentation": "Build an OSC 8 hyperlink string. Returns the supplied `label`\nwrapped in the `OSC 8 ; ; URL ST <label> OSC 8 ; ; ST` envelope\nthat hyperlink-aware terminals render as a clickable link.\n\nIf `url` is empty, exceeds [`MAX_HYPERLINK_URL_LEN`], or contains\ncontrol characters, the function returns the label unchanged so\nthe caller can render plain text. This keeps the helper safe to\ncall on untrusted adapter output without further checks."
            },
            {
              "name": "::write_hyperlink",
              "line": 89,
              "signature": "pub fn write_hyperlink<W: Write>(writer: &mut W, url: &str, label: &str) -> io::Result<()>;",
              "documentation": "Emit an OSC 8 hyperlink directly to the writer.\n\n# Errors\n\nReturns the underlying [`io::Error`] from the writer."
            }
          ]
        },
        {
          "path": "harness-sdk/src/screens/autonomy_screen.rs",
          "sha256": "412b1432d90e326f53865ef2ce1531701d48d0ed5a10c88b7fc83c36188ae952",
          "artifactSha256": "6a42ac21eb88242bc5f17897c922c895d778dba93cf9cd13e81fbaac72d05360",
          "url": "/reference/source/harness-sdk/src/screens/autonomy_screen.rs.txt",
          "declarations": [
            {
              "name": "::render_autonomy_screen",
              "line": 29,
              "signature": "pub fn render_autonomy_screen(frame: &mut Frame, state: &mut AppState, theme: &Theme);",
              "documentation": "Render the autonomy screen.\n\nIf the adapter doesn't support autonomy, falls back to the chat screen."
            }
          ]
        },
        {
          "path": "harness-sdk/src/screens/chat_screen.rs",
          "sha256": "5787aa6cc4ad15b09b7a344279ba814af515e3a122a6e3fc5008ec50dd0bcfa2",
          "artifactSha256": "f7ba9dd65574a1d42c1e3d38bb85ff022debdb25c6e7816985a60691fe590ba9",
          "url": "/reference/source/harness-sdk/src/screens/chat_screen.rs.txt",
          "declarations": [
            {
              "name": "::render_chat_screen",
              "line": 39,
              "signature": "pub fn render_chat_screen(\n    frame: &mut Frame,\n    state: &mut AppState,\n    theme: &Theme,\n    adapter: &dyn AgentAdapter,\n);",
              "documentation": "Render the chat screen.\n\nComposes Kit components into the chat layout. The `AppShell` provides\nthe outer frame; the main area contains the `ChatTimeline` and `InputBar`;\nthe `StatusBar` shows session info."
            }
          ]
        },
        {
          "path": "harness-sdk/src/screens/custom.rs",
          "sha256": "dfb868086c5576f658cda2ddfa7e98ad76658c6cc822e6d68feda9f301f459d0",
          "artifactSha256": "b440c39dbbd7339f79f131435bd4f837f0a41f418930a9c62218b4cb7730da63",
          "url": "/reference/source/harness-sdk/src/screens/custom.rs.txt",
          "declarations": [
            {
              "name": "::ScreenResult",
              "line": 14,
              "signature": "#[derive(Debug, Clone)]\npub enum ScreenResult {\n    /// Event was consumed by the screen.\n    Consumed,\n    /// Event was not handled \u2014 pass to default handler.\n    Ignored,\n    /// Screen requests navigation to another screen.\n    Navigate(String),\n    /// Screen requests closing itself.\n    Close,\n}",
              "documentation": "Result of processing an event in a custom screen."
            },
            {
              "name": "::ScreenEvent",
              "line": 27,
              "signature": "#[derive(Debug, Clone)]\npub enum ScreenEvent {\n    /// A terminal event (keyboard, mouse, resize).\n    Terminal(CrosstermEvent),\n    /// A tick for animations.\n    Tick,\n}",
              "documentation": "An event passed to custom screens."
            },
            {
              "name": "::CustomScreen",
              "line": 61,
              "signature": "pub trait CustomScreen: Send + Sync {\n    /// The screen's display name (shown in tab bar).\n    fn name(&self) -> &str;\n\n    /// Render the screen into the given area.\n    fn render(&self, frame: &mut Frame, area: Rect, theme: &Theme);\n\n    /// Handle an event. Return `ScreenResult::Consumed` if the event\n    /// was handled, `ScreenResult::Ignored` to pass it through.\n    fn handle_event(&mut self, event: ScreenEvent) -> ScreenResult;\n\n    /// Called when the screen becomes the active tab.\n    fn on_focus(&mut self) ;\n\n    /// Called when the screen loses focus.\n    fn on_blur(&mut self) ;\n}",
              "documentation": "Trait for custom screens provided by adapters or plugins.\n\nCustom screens are rendered in tabs alongside the built-in Chat\nand Autonomy screens.\n\n# Examples\n\n```rust,no_run\nuse harness_sdk::screens::custom::{CustomScreen, ScreenEvent, ScreenResult};\nuse ratatui::Frame;\nuse ratatui::layout::Rect;\nuse harness_tui_kit::Theme;\n\nstruct DashboardScreen;\n\nimpl CustomScreen for DashboardScreen {\n    fn name(&self) -> &str { \"Dashboard\" }\n\n    fn render(&self, frame: &mut Frame, area: Rect, theme: &Theme) {\n        // Render dashboard widgets\n    }\n\n    fn handle_event(&mut self, event: ScreenEvent) -> ScreenResult {\n        ScreenResult::Ignored\n    }\n}\n```"
            }
          ]
        },
        {
          "path": "harness-sdk/src/screens/mod.rs",
          "sha256": "764291f286e52951ca5a5ed45b0d00ad51352124745fc06afc48d12d5a5c1297",
          "artifactSha256": "d1c0c8d1c27692270be6756c0a81994726e97f11c43e9c3b3c82f5f0d3b9df62",
          "url": "/reference/source/harness-sdk/src/screens/mod.rs.txt",
          "declarations": [
            {
              "name": "autonomy_screen",
              "line": 3,
              "signature": "pub mod autonomy_screen;",
              "documentation": "Screen rendering for Chat and Autonomy modes."
            },
            {
              "name": "chat_screen",
              "line": 4,
              "signature": "pub mod chat_screen;",
              "documentation": ""
            },
            {
              "name": "custom",
              "line": 5,
              "signature": "pub mod custom;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/session/metadata.rs",
          "sha256": "29eca97dd61028c12a7073515e4137e71c6e780f07858c00c6aee6ab3e2d740d",
          "artifactSha256": "71f8c3e0c2367dde4071886cb6663956701f29b7a684d48115cacd8ce14f3a46",
          "url": "/reference/source/harness-sdk/src/session/metadata.rs.txt",
          "declarations": [
            {
              "name": "::SessionMetadata",
              "line": 16,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SessionMetadata {\n/// Session id (matches the file stem on disk).\n\npub session_id: Uuid,\n/// Application name (which app wrote this session).\n\npub app_name: String,\n/// Workspace root the session was started in (display only).\n\n#[serde(default)]\npub workspace_root: String,\n/// First user message (truncated) \u2014 shown as the picker preview.\n\n#[serde(default)]\npub preview: String,\n/// When the session started.\n\npub started_at: DateTime<Utc>,\n/// When the session was last appended to.\n\npub last_updated_at: DateTime<Utc>,\n/// Number of records persisted so far.\n\n#[serde(default)]\npub record_count: u64\n}",
              "documentation": "One row in the resume picker."
            },
            {
              "name": "::SessionMetadata::truncate_preview",
              "line": 40,
              "signature": "#[must_use]\npub fn truncate_preview(s: &str, max_chars: usize) -> String;",
              "documentation": "Truncate `s` to `max_chars` characters, appending \"\u2026\" when\ntruncated. Used to keep picker rows on one line."
            }
          ]
        },
        {
          "path": "harness-sdk/src/session/mod.rs",
          "sha256": "73ab938ea4a10575e4ac0c7c080aed389287f6a56f0fb3a47a10c3027bb01d48",
          "artifactSha256": "a0591382bfd4aee8ec2eac5a283865c00aa349d044a14b2f61f77846a97a5d62",
          "url": "/reference/source/harness-sdk/src/session/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use metadata::SessionMetadata;",
              "line": 17,
              "signature": "pub use metadata::SessionMetadata;",
              "documentation": ""
            },
            {
              "name": "pub use record::{SessionRecord, SessionRecordKind};",
              "line": 18,
              "signature": "pub use record::{SessionRecord, SessionRecordKind};",
              "documentation": ""
            },
            {
              "name": "pub use store::{JsonlSessionStore, SessionStore, SessionStoreError};",
              "line": 19,
              "signature": "pub use store::{JsonlSessionStore, SessionStore, SessionStoreError};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk/src/session/record.rs",
          "sha256": "c59bd13fe13606139d566ac60066eb8d32642454ebce41f4c99d9f968b27b35a",
          "artifactSha256": "a862b681a0678e45329ef65c1209294a66b9782865ae723d4fe74bebb00081e2",
          "url": "/reference/source/harness-sdk/src/session/record.rs.txt",
          "declarations": [
            {
              "name": "::SessionRecordKind",
              "line": 28,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SessionRecordKind {\n    /// User input.\n    User,\n    /// Assistant turn (markdown body).\n    Assistant,\n    /// Tool invocation.\n    Tool,\n    /// Shell exec.\n    Exec,\n    /// Unified diff.\n    Diff,\n    /// Approval request + resolution.\n    Approval,\n    /// System notice.\n    System,\n    /// Adapter-supplied opaque state (config, model id, tokens).\n    Snapshot,\n}",
              "documentation": "Discriminator for [`SessionRecord`]. Mirrors the `HistoryCell`\ntaxonomy so resume can rebuild a structured transcript."
            },
            {
              "name": "::SessionRecord",
              "line": 54,
              "signature": "#[derive(Debug, Clone, Serialize, Deserialize)]\npub struct SessionRecord {\n/// Per-record id (independent of session id; useful for dedup\n\n/// when resume crosses fork boundaries).\n\npub id: Uuid,\n/// UTC timestamp when the record was written.\n\npub at: DateTime<Utc>,\n/// Discriminator.\n\npub kind: SessionRecordKind,\n/// Optional sender label (agent id, user, system).\n\n#[serde(default)]\npub sender: String,\n/// Structured payload \u2014 schema is owned by the SDK consumer.\n\npub body: serde_json::Value\n}",
              "documentation": "One persisted conversation event.\n\nThe `body` field is intentionally `serde_json::Value` so SDK\nconsumers can attach arbitrary structured payloads without forcing\na rev of this enum every time a new cell type lands. Concrete\nadapters define their own body schema and validate it on read."
            },
            {
              "name": "::SessionRecord::new",
              "line": 73,
              "signature": "#[must_use]\npub fn new(\n        kind: SessionRecordKind,\n        sender: impl Into<String>,\n        body: serde_json::Value,\n    ) -> Self;",
              "documentation": "Create a new record with a freshly-minted id and the current\nUTC timestamp."
            }
          ]
        },
        {
          "path": "harness-sdk/src/session/store.rs",
          "sha256": "c04a0d2846f3cc7b2f4dcdf4633207c0d23a30eeb3ae98ee6ec99bcd61147539",
          "artifactSha256": "1fd93ac541e269624033cb320c2e573adce2e5228eec1c5ad646b0c267f12cd8",
          "url": "/reference/source/harness-sdk/src/session/store.rs.txt",
          "declarations": [
            {
              "name": "::SessionStoreError",
              "line": 25,
              "signature": "#[derive(Debug, Error)]\npub enum SessionStoreError {\n    /// I/O error reaching the underlying storage.\n    #[error(\"session store i/o: {0}\")]\n    Io(#[from] std::io::Error),\n    /// Serialization error encoding a record.\n    #[error(\"session store serde: {0}\")]\n    Serde(#[from] serde_json::Error),\n    /// The home directory could not be located. The default JSONL\n    /// store falls back to the system temp directory before\n    /// surfacing this.\n    #[error(\"home directory not available\")]\n    NoHome,\n    /// The requested session id is not present in the store.\n    #[error(\"session not found: {0}\")]\n    NotFound(Uuid),\n}",
              "documentation": "Errors emitted by [`SessionStore`] implementations."
            },
            {
              "name": "::SessionStore",
              "line": 43,
              "signature": "pub trait SessionStore: Send + Sync {\n    /// Begin a new session, persisting its metadata as the first\n    /// line. Returns the freshly-minted session id.\n    fn begin(&self, meta: SessionMetadata) -> Result<Uuid, SessionStoreError>;\n\n    /// Append a single record to a session.\n    fn append(&self, session_id: Uuid, record: &SessionRecord) -> Result<(), SessionStoreError>;\n\n    /// Read the metadata line for one session.\n    fn metadata(&self, session_id: Uuid) -> Result<SessionMetadata, SessionStoreError>;\n\n    /// Replay all records for a session in append order.\n    fn replay(&self, session_id: Uuid) -> Result<Vec<SessionRecord>, SessionStoreError>;\n\n    /// List every session in the store, sorted by `last_updated_at`\n    /// descending (most-recent first). Limit caps the number of\n    /// rows returned (use `usize::MAX` for \"all\").\n    fn list(&self, app_name: &str, limit: usize)\n        -> Result<Vec<SessionMetadata>, SessionStoreError>;\n\n    /// Delete a session.\n    fn delete(&self, session_id: Uuid) -> Result<(), SessionStoreError>;\n}",
              "documentation": "Trait for opaque session backends."
            },
            {
              "name": "::JsonlSessionStore",
              "line": 72,
              "signature": "#[derive(Debug, Clone)]\npub struct JsonlSessionStore {\n\n}",
              "documentation": "Persists sessions as JSON Lines under\n`~/.{app_name}/sessions/{uuid}.jsonl`. Falls back to\n`$TMPDIR/agent-tui-sessions/{app_name}` when the home directory\nis not available (CI, sandboxes)."
            },
            {
              "name": "::JsonlSessionStore::standard",
              "line": 80,
              "signature": "pub fn standard(app_name: &str) -> Result<Self, SessionStoreError>;",
              "documentation": "Create a store rooted at the standard\n`~/.{app_name}/sessions/` directory. The directory is created\nif it does not already exist."
            },
            {
              "name": "::JsonlSessionStore::rooted_at",
              "line": 88,
              "signature": "pub fn rooted_at(root: impl Into<PathBuf>) -> Result<Self, SessionStoreError>;",
              "documentation": "Create a store at an explicit path. Useful for tests."
            },
            {
              "name": "::JsonlSessionStore::root",
              "line": 96,
              "signature": "#[must_use]\npub fn root(&self) -> &Path;",
              "documentation": "Read-only access to the on-disk root directory."
            }
          ]
        },
        {
          "path": "harness-sdk/src/settings.rs",
          "sha256": "c4b8dafe6af6911f1e2df6ce2bffedc8f7afb5b3fd58c78ce1a42d1e7dcbda07",
          "artifactSha256": "ba4cbec5d302a36baf59e3483faf9e619c2e784f555d93af65fa58955f77deeb",
          "url": "/reference/source/harness-sdk/src/settings.rs.txt",
          "declarations": [
            {
              "name": "::ProviderKind",
              "line": 35,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"kebab-case\")]\npub enum ProviderKind {\n    /// Local / remote Flocks engine \u2014 drives an underlying coding CLI\n    /// (Claude Code, Codex, Gemini-CLI, etc.) which talks to a model.\n    Flocks,\n    /// Foundry inference gateway \u2014 vendor-agnostic, routes to many\n    /// upstreams.\n    Foundry,\n    /// Forge ANVIL agent \u2014 direct provider integration (e.g.,\n    /// Anthropic, OpenAI, Google) bound to an OAS-identified agent.\n    Forge,\n    /// Direct provider integration without a routing layer.\n    Direct,\n}",
              "documentation": "Kinds of provider sources Clausen-style apps support."
            },
            {
              "name": "::ProviderKind::label",
              "line": 52,
              "signature": "#[must_use]\npub fn label(self) -> &'static str;",
              "documentation": "Human-readable label for palette display."
            },
            {
              "name": "::ProviderInfo",
              "line": 64,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderInfo {\n/// Stable identifier (used to apply selection back to the adapter).\n\npub id: String,\n/// User-visible name.\n\npub name: String,\n/// Source category.\n\npub kind: ProviderKind,\n/// One-line description shown in the palette.\n\npub description: String,\n/// Whether the provider is currently reachable / authenticated.\n\npub healthy: bool,\n/// `true` when this is the currently-selected provider.\n\npub active: bool\n}",
              "documentation": "A provider known to the adapter."
            },
            {
              "name": "::ModelInfo",
              "line": 81,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ModelInfo {\n/// Stable identifier scoped to its provider.\n\npub id: String,\n/// User-visible name (e.g. `\"Claude Opus 4.7\"`).\n\npub name: String,\n/// Provider that hosts this model.\n\npub provider_id: String,\n/// Optional context window in tokens.\n\npub context_window: Option<u32>,\n/// Optional capability tags (\"coding\", \"vision\", \"tool-use\", \u2026).\n\npub capabilities: Vec<String>,\n/// `true` when this is the currently-selected model.\n\npub active: bool\n}",
              "documentation": "A model exposed by a provider."
            },
            {
              "name": "::ModeInfo",
              "line": 100,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ModeInfo {\n/// Stable identifier (e.g. `\"build\"`, `\"plan\"`, `\"read\"`, `\"auto\"`).\n\npub id: String,\n/// User-visible name.\n\npub name: String,\n/// Single-sentence summary shown in the palette.\n\npub description: String,\n/// Default provider when this mode activates.\n\npub default_provider: Option<String>,\n/// Default model when this mode activates.\n\npub default_model: Option<String>,\n/// `true` when this is the currently-selected mode.\n\npub active: bool\n}",
              "documentation": "A high-level operating mode with a default provider+model binding.\nModes let the user say \"I'm in Build mode\" and have the runtime\npick the right model + system prompt automatically."
            },
            {
              "name": "::ProviderSettingField",
              "line": 120,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderSettingField {\n/// Stable identifier (e.g. `\"api_key\"`, `\"base_url\"`, `\"timeout_seconds\"`).\n\npub id: String,\n/// User-visible label.\n\npub label: String,\n/// One-line description.\n\npub description: String,\n/// Field kind \u2014 drives palette rendering + input handling.\n\npub kind: ProviderSettingKind,\n/// Current value (already redacted for secret fields).\n\npub value: String,\n/// `true` when the value is sensitive \u2014 palette displays as\n\n/// `\u2022\u2022\u2022\u2022\u2022\u2022` and the runtime never logs it.\n\npub secret: bool,\n/// `true` when this field is the primary \"selected\" entry of an\n\n/// enum/picker (e.g. the active Flocks CLI inside the Flocks\n\n/// provider's settings).\n\npub active: bool\n}",
              "documentation": "A configurable field on a provider \u2014 surfaced in the\nper-provider Settings sub-page. Adapters typically populate this\nlist from `forge_settings::ProviderSettings::fields()` so the\nmetadata is owned by Forge rather than the runtime."
            },
            {
              "name": "::ProviderSettingKind",
              "line": 143,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"kebab-case\")]\npub enum ProviderSettingKind {\n    /// Free-form string input (api keys, urls).\n    Text,\n    /// Integer (timeouts, retries, max-tokens).\n    Integer,\n    /// Boolean toggle.\n    Bool,\n    /// Drill-in picker \u2014 selecting this opens a sub-page listing\n    /// `options`.\n    Picker {\n        /// Available choices.\n        options: Vec<ProviderSettingOption>,\n    },\n}",
              "documentation": "Categorical kind of a provider settings field."
            },
            {
              "name": "::ProviderSettingOption",
              "line": 160,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ProviderSettingOption {\npub id: String,\npub label: String,\npub description: String\n}",
              "documentation": "One option of a [`ProviderSettingKind::Picker`] field."
            },
            {
              "name": "::FlocksCli",
              "line": 168,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct FlocksCli {\n/// Stable identifier (e.g. `\"claude-code\"`, `\"codex\"`, `\"gemini-cli\"`).\n\npub id: String,\n/// User-visible name.\n\npub name: String,\n/// Path or command resolved by the runtime.\n\npub command: String,\n/// Models this CLI can drive.\n\npub models: Vec<ModelInfo>,\n/// `true` when this CLI is the currently-selected Flocks driver.\n\npub active: bool\n}",
              "documentation": "One CLI binary that a Flocks provider can drive."
            },
            {
              "name": "::SettingsSnapshot",
              "line": 185,
              "signature": "#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]\npub struct SettingsSnapshot {\n/// Provider catalogue (Flocks / Foundry / Forge / Direct \u2026).\n\npub providers: Vec<ProviderInfo>,\n/// Mode catalogue (Build / Plan / Auto / Read \u2026).\n\npub modes: Vec<ModeInfo>,\n/// Flat list of every model the adapter knows about, *including*\n\n/// the models exposed by Flocks CLIs. Each `ModelInfo` carries\n\n/// its `provider_id` so the palette can filter by provider.\n\n/// Adapters that only support Flocks may leave this empty and\n\n/// rely on `flocks_clis` instead.\n\n#[serde(default)]\npub models: Vec<ModelInfo>,\n/// Flocks-CLI catalogue (each CLI carries its own model list).\n\npub flocks_clis: Vec<FlocksCli>,\n/// Per-provider configurable fields keyed by `provider_id`. The\n\n/// palette renders this as the \"Settings\" tab on each provider's\n\n/// drill-in. Adapters typically populate this from Forge's\n\n/// `ProviderSettings` introspection.\n\n#[serde(default)]\npub provider_settings: std::collections::HashMap<String, Vec<ProviderSettingField>>\n}",
              "documentation": "A complete snapshot of every settings dimension. Adapters return\nthis on demand so the palette can render the same data\nconsistently across pages."
            },
            {
              "name": "::SettingsAction",
              "line": 211,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(tag = \"kind\", rename_all = \"kebab-case\")]\npub enum SettingsAction {\n    /// Swap to a different provider. Adapter is expected to re-route\n    /// future `send_message` calls.\n    SetProvider { provider_id: String },\n    /// Swap to a model on the currently-active provider.\n    SetModel {\n        provider_id: String,\n        model_id: String,\n    },\n    /// Activate a mode (which may in turn change provider+model).\n    SetMode { mode_id: String },\n    /// Configure Flocks to drive a specific CLI.\n    SetFlocksCli { cli_id: String },\n    /// Configure a model for a specific Flocks CLI.\n    SetFlocksCliModel { cli_id: String, model_id: String },\n    /// Update a provider configuration field (api key, base URL,\n    /// timeout, etc.). The adapter validates the value and may\n    /// reject it via [`SettingsApplyResult::fail`].\n    SetProviderSetting {\n        provider_id: String,\n        field_id: String,\n        value: String,\n    },\n    /// Open a settings sub-page that the adapter may want to handle\n    /// out-of-band (e.g. opening an external editor).\n    OpenSubPage { page_id: String },\n}",
              "documentation": "Action the runtime asks the adapter to apply when the user picks\nan entry in the palette."
            },
            {
              "name": "::SettingsApplyResult",
              "line": 241,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct SettingsApplyResult {\n/// Whether the action succeeded.\n\npub ok: bool,\n/// Optional human-readable status message (shown as a flash).\n\npub message: Option<String>\n}",
              "documentation": "Outcome of applying a [`SettingsAction`]."
            },
            {
              "name": "::SettingsApplyResult::ok",
              "line": 251,
              "signature": "#[must_use]\npub fn ok() -> Self;",
              "documentation": "Convenience: success without a message."
            },
            {
              "name": "::SettingsApplyResult::ok_with",
              "line": 260,
              "signature": "#[must_use]\npub fn ok_with(message: impl Into<String>) -> Self;",
              "documentation": "Convenience: success with a status flash."
            },
            {
              "name": "::SettingsApplyResult::fail",
              "line": 269,
              "signature": "#[must_use]\npub fn fail(message: impl Into<String>) -> Self;",
              "documentation": "Convenience: failure with a reason."
            }
          ]
        },
        {
          "path": "harness-sdk/src/types.rs",
          "sha256": "38855a6544b96ba94c773619f0eb2d360cfbbc542da64c63e389a82f2b6b2830",
          "artifactSha256": "2d442c9f3a5971f865493bd2a1ed06fe72b1ada789275d3ddfe93aee6765bbe6",
          "url": "/reference/source/harness-sdk/src/types.rs.txt",
          "declarations": [
            {
              "name": "::MAX_AGENT_ID_LEN",
              "line": 27,
              "signature": "pub const MAX_AGENT_ID_LEN: usize;",
              "documentation": "Maximum length of an agent ID."
            },
            {
              "name": "::MAX_AGENT_NAME_LEN",
              "line": 30,
              "signature": "pub const MAX_AGENT_NAME_LEN: usize;",
              "documentation": "Maximum length of an agent name."
            },
            {
              "name": "::MAX_CHUNK_SIZE",
              "line": 33,
              "signature": "pub const MAX_CHUNK_SIZE: usize;",
              "documentation": "Maximum size of a single text delta chunk in bytes."
            },
            {
              "name": "::MAX_TOOL_INPUT_SIZE",
              "line": 36,
              "signature": "pub const MAX_TOOL_INPUT_SIZE: usize;",
              "documentation": "Maximum size of tool call input JSON in bytes."
            },
            {
              "name": "::MAX_INTERJECTION_LEN",
              "line": 39,
              "signature": "pub const MAX_INTERJECTION_LEN: usize;",
              "documentation": "Maximum length of an interjection in characters."
            },
            {
              "name": "::DEFAULT_STREAM_TIMEOUT",
              "line": 42,
              "signature": "pub const DEFAULT_STREAM_TIMEOUT: Duration;",
              "documentation": "Default adapter stream timeout."
            },
            {
              "name": "::DEFAULT_MAX_MESSAGES",
              "line": 45,
              "signature": "pub const DEFAULT_MAX_MESSAGES: usize;",
              "documentation": "Maximum number of messages per session (default)."
            },
            {
              "name": "::Mode",
              "line": 66,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum Mode {\n    /// Interactive chat mode \u2014 user sends messages, agent responds.\n    Chat,\n    /// Autonomous execution mode \u2014 agent works independently with interjections.\n    Autonomy,\n    /// Transient state while draining autonomy events and cleaning up.\n    Stopping,\n}",
              "documentation": "The current operating mode of the TUI application.\n\nThe SDK supports two primary modes with a transient stopping state.\n\n# Examples\n\n```\nuse harness_sdk::Mode;\n\nlet mode = Mode::Chat;\nassert_eq!(mode.label(), \"Chat\");\nassert!(!mode.is_autonomy());\n```"
            },
            {
              "name": "::Mode::label",
              "line": 85,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this mode.\n\n# Examples\n\n```\nuse harness_sdk::Mode;\nassert_eq!(Mode::Autonomy.label(), \"Autonomy\");\n```"
            },
            {
              "name": "::Mode::is_autonomy",
              "line": 104,
              "signature": "#[must_use]\npub const fn is_autonomy(&self) -> bool;",
              "documentation": "Returns `true` if in autonomy or stopping mode.\n\n# Examples\n\n```\nuse harness_sdk::Mode;\nassert!(Mode::Autonomy.is_autonomy());\nassert!(Mode::Stopping.is_autonomy());\nassert!(!Mode::Chat.is_autonomy());\n```"
            },
            {
              "name": "::SdkRole",
              "line": 134,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SdkRole {\n    /// A human end-user.\n    User,\n    /// An AI agent, optionally identified by name.\n    Agent(String),\n    /// A system-generated message.\n    System,\n    /// Output from a tool invocation.\n    Tool,\n}",
              "documentation": "The role of a message participant, carrying optional agent identity.\n\nUnlike Kit's `Role`, the SDK role can carry the agent's name for multi-agent\nscenarios where knowing *which* agent sent a message matters.\n\n# Examples\n\n```\nuse harness_sdk::SdkRole;\n\nlet role = SdkRole::Agent(\"Navigator\".into());\nassert_eq!(role.label(), \"Agent\");\n```"
            },
            {
              "name": "::SdkRole::label",
              "line": 156,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this role (without the agent name).\n\n# Examples\n\n```\nuse harness_sdk::SdkRole;\nassert_eq!(SdkRole::User.label(), \"User\");\nassert_eq!(SdkRole::Agent(\"x\".into()).label(), \"Agent\");\n```"
            },
            {
              "name": "::SdkRole::to_kit_role",
              "line": 177,
              "signature": "#[must_use]\npub fn to_kit_role(&self) -> harness_tui_kit::Role;",
              "documentation": "Convert to Kit's `Role` enum, discarding the agent name.\n\n# Examples\n\n```\nuse harness_sdk::SdkRole;\nuse harness_tui_kit::Role;\n\nassert_eq!(SdkRole::User.to_kit_role(), Role::User);\nassert_eq!(SdkRole::Agent(\"x\".into()).to_kit_role(), Role::Agent);\n```"
            },
            {
              "name": "::SdkRole::agent_name",
              "line": 196,
              "signature": "#[must_use]\npub fn agent_name(&self) -> &str;",
              "documentation": "Returns the agent name if this is an Agent role, empty string otherwise.\n\n# Examples\n\n```\nuse harness_sdk::SdkRole;\nassert_eq!(SdkRole::Agent(\"Nav\".into()).agent_name(), \"Nav\");\nassert_eq!(SdkRole::User.agent_name(), \"\");\n```"
            },
            {
              "name": "::SdkAgentInfo",
              "line": 232,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SdkAgentInfo {\n/// Unique identifier for this agent.\n\npub id: String,\n/// Human-readable display name.\n\npub name: String,\n/// Short description of the agent's role or purpose.\n\npub role_description: String,\n/// Model identifier (e.g., \"claude-opus-4-6\").\n\npub model: String,\n/// Current lifecycle status.\n\npub status: SdkAgentStatus,\n/// Capabilities this agent supports.\n\npub capabilities: Vec<String>,\n/// Tools available to this agent.\n\npub tools: Vec<String>,\n/// Additional metadata (adapter-specific, not logged at INFO+).\n\npub metadata: std::collections::HashMap<String, String>\n}",
              "documentation": "Rich agent metadata used by the SDK.\n\nCarries capability information and tool lists beyond what the Kit needs\nfor rendering. Use [`to_kit_agent_info`](SdkAgentInfo::to_kit_agent_info)\nfor rendering conversion.\n\n# Examples\n\n```\nuse harness_sdk::SdkAgentInfo;\n\nlet info = SdkAgentInfo::new(\"agent-1\", \"Navigator\", \"claude-opus-4-6\");\nassert_eq!(info.name, \"Navigator\");\n```"
            },
            {
              "name": "::SdkAgentInfo::new",
              "line": 266,
              "signature": "#[must_use]\npub fn new(id: impl Into<String>, name: impl Into<String>, model: impl Into<String>) -> Self;",
              "documentation": "Create a new agent info with required fields.\n\nStatus defaults to `Online`, capabilities/tools/metadata are empty.\n\n# Examples\n\n```\nuse harness_sdk::{SdkAgentInfo, SdkAgentStatus};\n\nlet info = SdkAgentInfo::new(\"a1\", \"Coder\", \"gpt-4o\");\nassert_eq!(info.status, SdkAgentStatus::Online);\nassert!(info.capabilities.is_empty());\n```"
            },
            {
              "name": "::SdkAgentInfo::with_role",
              "line": 281,
              "signature": "#[must_use]\npub fn with_role(mut self, role: impl Into<String>) -> Self;",
              "documentation": "Set the role description (builder pattern)."
            },
            {
              "name": "::SdkAgentInfo::with_status",
              "line": 288,
              "signature": "#[must_use]\npub fn with_status(mut self, status: SdkAgentStatus) -> Self;",
              "documentation": "Set the status (builder pattern)."
            },
            {
              "name": "::SdkAgentInfo::with_capabilities",
              "line": 295,
              "signature": "#[must_use]\npub fn with_capabilities(mut self, caps: Vec<String>) -> Self;",
              "documentation": "Set capabilities (builder pattern)."
            },
            {
              "name": "::SdkAgentInfo::with_tools",
              "line": 302,
              "signature": "#[must_use]\npub fn with_tools(mut self, tools: Vec<String>) -> Self;",
              "documentation": "Set tools (builder pattern)."
            },
            {
              "name": "::SdkAgentInfo::to_kit_agent_info",
              "line": 320,
              "signature": "#[must_use]\npub fn to_kit_agent_info(&self) -> harness_tui_kit::AgentInfo;",
              "documentation": "Convert to Kit's `AgentInfo` for rendering.\n\n# Examples\n\n```\nuse harness_sdk::SdkAgentInfo;\n\nlet sdk_info = SdkAgentInfo::new(\"a1\", \"Nav\", \"gpt-4o\");\nlet kit_info = sdk_info.to_kit_agent_info();\nassert_eq!(kit_info.name, \"Nav\");\nassert_eq!(kit_info.model, \"gpt-4o\");\n```"
            },
            {
              "name": "::SdkAgentStatus",
              "line": 345,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SdkAgentStatus {\n    /// Connected and ready.\n    #[default]\n    Online,\n    /// Actively executing.\n    Working,\n    /// Reasoning/planning.\n    Thinking,\n    /// Connected, no pending work.\n    Idle,\n    /// Blocked on external resource or human.\n    Waiting,\n    /// Encountered an error.\n    Error,\n    /// Permanently shut down.\n    Terminated,\n    /// Disconnected/unreachable.\n    Offline,\n}",
              "documentation": "Agent lifecycle status with SDK-specific semantics.\n\nMaps directly to Kit's `AgentStatus` for rendering.\n\n# Examples\n\n```\nuse harness_sdk::SdkAgentStatus;\n\nlet status = SdkAgentStatus::Working;\nassert!(status.is_active());\n```"
            },
            {
              "name": "::SdkAgentStatus::label",
              "line": 368,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::SdkAgentStatus::is_active",
              "line": 383,
              "signature": "#[must_use]\npub const fn is_active(&self) -> bool;",
              "documentation": "Returns `true` if the agent is performing work."
            },
            {
              "name": "::SdkAgentStatus::is_terminal",
              "line": 389,
              "signature": "#[must_use]\npub const fn is_terminal(&self) -> bool;",
              "documentation": "Returns `true` if the agent has reached a final state."
            },
            {
              "name": "::SdkAgentStatus::to_kit_status",
              "line": 395,
              "signature": "#[must_use]\npub fn to_kit_status(&self) -> harness_tui_kit::AgentStatus;",
              "documentation": "Convert to Kit's `AgentStatus`."
            },
            {
              "name": "::ResponseChunk",
              "line": 446,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum ResponseChunk {\n    /// A fragment of the agent's text response.\n    TextDelta {\n        /// The text fragment.\n        text: String,\n        /// The agent that produced this text.\n        agent_id: String,\n    },\n\n    /// A tool call has started.\n    ToolCallStart {\n        /// Unique ID for this tool call.\n        call_id: String,\n        /// Tool name.\n        tool_name: String,\n        /// Tool input (JSON).\n        input: String,\n        /// The agent making the tool call.\n        agent_id: String,\n    },\n\n    /// A tool call has completed.\n    ToolCallEnd {\n        /// Unique ID matching the `ToolCallStart`.\n        call_id: String,\n        /// Tool output.\n        output: String,\n        /// Whether the tool call succeeded.\n        success: bool,\n        /// Wall-clock duration in milliseconds.\n        duration_ms: u64,\n    },\n\n    /// A fragment of the agent's thinking/reasoning (if exposed).\n    ThinkingDelta {\n        /// The thinking text fragment.\n        text: String,\n        /// The agent that is thinking.\n        agent_id: String,\n    },\n\n    /// The agent's status has changed.\n    StatusChange {\n        /// The agent whose status changed.\n        agent_id: String,\n        /// The new status.\n        status: SdkAgentStatus,\n    },\n\n    /// An approval is needed from the user.\n    ApprovalNeeded {\n        /// The approval request details.\n        request: SdkApprovalRequest,\n    },\n\n    /// A cost/usage update.\n    UsageUpdate {\n        /// Input tokens consumed.\n        input_tokens: u64,\n        /// Output tokens consumed.\n        output_tokens: u64,\n        /// Estimated cost in USD (cents).\n        cost_cents: f64,\n    },\n\n    /// The response stream has ended successfully.\n    Done {\n        /// The agent that finished.\n        agent_id: String,\n    },\n\n    /// The response stream ended with an error.\n    Error {\n        /// Error message.\n        message: String,\n        /// The agent that errored (if known).\n        agent_id: String,\n    },\n}",
              "documentation": "A single chunk from an adapter's response stream.\n\nResponse streams are the primary communication channel from adapters to\nthe SDK. Each variant represents a different kind of response data.\n\n# Stream Protocol\n\nA well-formed response stream follows this pattern:\n1. Zero or more `TextDelta`, `ToolCallStart`, `ToolCallEnd`, `ThinkingDelta`\n2. Exactly one `Done` or `Error` at the end\n\nThe SDK enforces a timeout if `Done`/`Error` is not received within\nthe configured duration (default: 5 minutes).\n\n# Examples\n\n```\nuse harness_sdk::ResponseChunk;\n\nlet chunk = ResponseChunk::TextDelta {\n    text: \"Hello, \".into(),\n    agent_id: \"agent-1\".into(),\n};\nassert!(matches!(chunk, ResponseChunk::TextDelta { .. }));\n```"
            },
            {
              "name": "::AutonomyEvent",
              "line": 548,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\n#[serde(tag = \"type\", rename_all = \"snake_case\")]\npub enum AutonomyEvent {\n    /// An activity log entry from an agent.\n    ActivityLog {\n        /// The agent producing this log.\n        agent_id: String,\n        /// Log message.\n        message: String,\n        /// Severity level.\n        level: ActivityLevel,\n    },\n\n    /// An agent's status changed during autonomy.\n    AgentStatusChange {\n        /// The agent whose status changed.\n        agent_id: String,\n        /// The new status.\n        status: SdkAgentStatus,\n    },\n\n    /// An agent needs approval to proceed.\n    ApprovalRequired {\n        /// The approval request.\n        request: SdkApprovalRequest,\n    },\n\n    /// A previously requested approval was resolved (by timeout or cancel).\n    ApprovalResolved {\n        /// The approval request ID.\n        request_id: String,\n        /// How it was resolved.\n        resolution: String,\n    },\n\n    /// A task was created or updated.\n    TaskUpdate {\n        /// Task identifier.\n        task_id: String,\n        /// Task title.\n        title: String,\n        /// Task status.\n        status: String,\n        /// The agent working on this task.\n        agent_id: String,\n    },\n\n    /// Metrics/usage update during autonomy.\n    MetricsUpdate {\n        /// Total input tokens.\n        total_input_tokens: u64,\n        /// Total output tokens.\n        total_output_tokens: u64,\n        /// Total cost in USD cents.\n        total_cost_cents: f64,\n        /// Elapsed time in seconds.\n        elapsed_secs: u64,\n    },\n\n    /// Autonomy session has ended.\n    SessionEnded {\n        /// Reason for ending.\n        reason: String,\n    },\n\n    /// Error during autonomy (non-fatal).\n    Error {\n        /// The agent that errored.\n        agent_id: String,\n        /// Error message.\n        message: String,\n    },\n}",
              "documentation": "Events produced during autonomous execution.\n\nThe adapter emits these events while the agent works independently.\nThe SDK displays them in the activity feed and handles approval requests.\n\n# Examples\n\n```\nuse harness_sdk::AutonomyEvent;\n\nlet event = AutonomyEvent::ActivityLog {\n    agent_id: \"agent-1\".into(),\n    message: \"Reading file...\".into(),\n    level: harness_sdk::ActivityLevel::Info,\n};\n```"
            },
            {
              "name": "::ActivityLevel",
              "line": 630,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ActivityLevel {\n    /// Trace-level detail.\n    Trace,\n    /// Debug information.\n    Debug,\n    /// General information.\n    #[default]\n    Info,\n    /// Warning condition.\n    Warn,\n    /// Error condition.\n    Error,\n}",
              "documentation": "Severity level for autonomy activity log entries.\n\n# Examples\n\n```\nuse harness_sdk::ActivityLevel;\nassert_eq!(ActivityLevel::Info.label(), \"INFO\");\n```"
            },
            {
              "name": "::ActivityLevel::label",
              "line": 647,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::ActivityLevel::to_kit_log_level",
              "line": 659,
              "signature": "#[must_use]\npub fn to_kit_log_level(&self) -> harness_tui_kit::LogLevel;",
              "documentation": "Convert to Kit's `LogLevel`."
            },
            {
              "name": "::SdkApprovalRequest",
              "line": 695,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct SdkApprovalRequest {\n/// Unique identifier for this request.\n\npub id: String,\n/// Name of the agent requesting approval.\n\npub agent_name: String,\n/// ID of the agent requesting approval.\n\npub agent_id: String,\n/// Short summary of the proposed action.\n\npub action_summary: String,\n/// Detailed reasoning for the action.\n\npub reasoning: String,\n/// Expected impact description.\n\npub impact: String,\n/// Resources affected by the action.\n\npub resources: Vec<String>,\n/// Assessed risk level.\n\npub risk_level: SdkRiskLevel,\n/// ISO-8601 timestamp of when the request was created.\n\npub created_at: String\n}",
              "documentation": "A request for human approval during autonomous execution.\n\nRicher than Kit's `ApprovalRequest` \u2014 includes reasoning and impact fields\nfor the SDK's approval management system.\n\n# Examples\n\n```\nuse harness_sdk::{SdkApprovalRequest, SdkRiskLevel};\n\nlet req = SdkApprovalRequest::new(\"req-1\", \"Navigator\", \"Delete build directory\")\n    .with_risk_level(SdkRiskLevel::High);\nassert!(req.risk_level.requires_review());\n```"
            },
            {
              "name": "::SdkApprovalRequest::new",
              "line": 719,
              "signature": "#[must_use]\npub fn new(\n        id: impl Into<String>,\n        agent_name: impl Into<String>,\n        action_summary: impl Into<String>,\n    ) -> Self;",
              "documentation": "Create a new approval request with required fields."
            },
            {
              "name": "::SdkApprovalRequest::with_agent_id",
              "line": 739,
              "signature": "#[must_use]\npub fn with_agent_id(mut self, agent_id: impl Into<String>) -> Self;",
              "documentation": "Set the agent ID (builder pattern)."
            },
            {
              "name": "::SdkApprovalRequest::with_risk_level",
              "line": 746,
              "signature": "#[must_use]\npub fn with_risk_level(mut self, risk_level: SdkRiskLevel) -> Self;",
              "documentation": "Set the risk level (builder pattern)."
            },
            {
              "name": "::SdkApprovalRequest::with_reasoning",
              "line": 753,
              "signature": "#[must_use]\npub fn with_reasoning(mut self, reasoning: impl Into<String>) -> Self;",
              "documentation": "Set the reasoning (builder pattern)."
            },
            {
              "name": "::SdkApprovalRequest::with_impact",
              "line": 760,
              "signature": "#[must_use]\npub fn with_impact(mut self, impact: impl Into<String>) -> Self;",
              "documentation": "Set the impact (builder pattern)."
            },
            {
              "name": "::SdkApprovalRequest::with_resources",
              "line": 767,
              "signature": "#[must_use]\npub fn with_resources(mut self, resources: Vec<String>) -> Self;",
              "documentation": "Set the resources (builder pattern)."
            },
            {
              "name": "::SdkApprovalRequest::with_created_at",
              "line": 774,
              "signature": "#[must_use]\npub fn with_created_at(mut self, created_at: impl Into<String>) -> Self;",
              "documentation": "Set the created_at timestamp (builder pattern)."
            },
            {
              "name": "::SdkApprovalRequest::to_kit_approval_request",
              "line": 781,
              "signature": "#[must_use]\npub fn to_kit_approval_request(&self) -> harness_tui_kit::ApprovalRequest;",
              "documentation": "Convert to Kit's `ApprovalRequest` for rendering."
            },
            {
              "name": "::SdkRiskLevel",
              "line": 807,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SdkRiskLevel {\n    /// Low risk, routine action.\n    #[default]\n    Low,\n    /// Medium risk, warrants attention.\n    Medium,\n    /// High risk, requires careful review.\n    High,\n    /// Critical risk, potentially destructive.\n    Critical,\n}",
              "documentation": "Risk level for approval requests.\n\n# Examples\n\n```\nuse harness_sdk::SdkRiskLevel;\n\nassert!(SdkRiskLevel::Critical.requires_review());\nassert!(!SdkRiskLevel::Low.requires_review());\nassert_eq!(SdkRiskLevel::High.weight(), 2);\n```"
            },
            {
              "name": "::SdkRiskLevel::label",
              "line": 822,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::SdkRiskLevel::requires_review",
              "line": 833,
              "signature": "#[must_use]\npub const fn requires_review(&self) -> bool;",
              "documentation": "Returns `true` if this risk level requires explicit review."
            },
            {
              "name": "::SdkRiskLevel::weight",
              "line": 839,
              "signature": "#[must_use]\npub const fn weight(&self) -> u8;",
              "documentation": "Numeric weight for sorting (higher = more risky)."
            },
            {
              "name": "::SdkRiskLevel::to_kit_risk_level",
              "line": 850,
              "signature": "#[must_use]\npub fn to_kit_risk_level(&self) -> harness_tui_kit::RiskLevel;",
              "documentation": "Convert to Kit's `RiskLevel`."
            },
            {
              "name": "::SdkApprovalAction",
              "line": 882,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum SdkApprovalAction {\n    /// Approve the request as-is.\n    Approve,\n    /// Deny the request.\n    Deny,\n    /// Approve with modifications.\n    Edit {\n        /// Description of the modification.\n        modification: String,\n    },\n}",
              "documentation": "User decision on an approval request.\n\n# Examples\n\n```\nuse harness_sdk::SdkApprovalAction;\n\nlet action = SdkApprovalAction::Approve;\nassert!(action.is_approved());\n```"
            },
            {
              "name": "::SdkApprovalAction::is_approved",
              "line": 897,
              "signature": "#[must_use]\npub fn is_approved(&self) -> bool;",
              "documentation": "Returns `true` if this action approves (with or without edits)."
            },
            {
              "name": "::SdkApprovalAction::to_kit_approval_action",
              "line": 903,
              "signature": "#[must_use]\npub fn to_kit_approval_action(&self) -> harness_tui_kit::ApprovalAction;",
              "documentation": "Convert to Kit's `ApprovalAction`."
            },
            {
              "name": "::HumanInterjection",
              "line": 938,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct HumanInterjection {\n/// Original raw input text.\n\npub raw: String,\n/// Cleaned text content (prefix markers stripped).\n\npub text: String,\n/// Priority level.\n\npub priority: InterjectionPriority,\n/// Kind of interjection.\n\npub kind: InterjectionKind,\n/// Target agent name, if specified (via `@Agent` syntax).\n\npub target: Option<String>\n}",
              "documentation": "A parsed human interjection for autonomy mode.\n\nInterjections are structured messages that the user sends during autonomous\nexecution. They carry priority, kind, and optional targeting information.\n\n# Examples\n\n```\nuse harness_sdk::{HumanInterjection, InterjectionPriority, InterjectionKind};\n\nlet interj = HumanInterjection {\n    raw: \"!!stop now\".into(),\n    text: \"stop now\".into(),\n    priority: InterjectionPriority::Urgent,\n    kind: InterjectionKind::Instruction,\n    target: None,\n};\nassert!(interj.is_urgent());\n```"
            },
            {
              "name": "::HumanInterjection::is_urgent",
              "line": 954,
              "signature": "#[must_use]\npub fn is_urgent(&self) -> bool;",
              "documentation": "Returns `true` if this is an urgent interjection."
            },
            {
              "name": "::HumanInterjection::is_targeted",
              "line": 960,
              "signature": "#[must_use]\npub fn is_targeted(&self) -> bool;",
              "documentation": "Returns `true` if this interjection targets a specific agent."
            },
            {
              "name": "::HumanInterjection::is_broadcast",
              "line": 966,
              "signature": "#[must_use]\npub fn is_broadcast(&self) -> bool;",
              "documentation": "Returns `true` if this is a broadcast (no specific target)."
            },
            {
              "name": "::InterjectionPriority",
              "line": 981,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum InterjectionPriority {\n    /// Standard priority.\n    #[default]\n    Normal,\n    /// High priority \u2014 should interrupt current work.\n    High,\n    /// Urgent \u2014 must be processed immediately.\n    Urgent,\n}",
              "documentation": "Priority level for human interjections.\n\n# Examples\n\n```\nuse harness_sdk::InterjectionPriority;\nassert_eq!(InterjectionPriority::Urgent.label(), \"URGENT\");\n```"
            },
            {
              "name": "::InterjectionPriority::label",
              "line": 994,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::InterjectionKind",
              "line": 1019,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum InterjectionKind {\n    /// A direct instruction to the agent(s).\n    #[default]\n    Instruction,\n    /// A question for the agent(s).\n    Question,\n    /// A new mission directive.\n    Mission,\n    /// A general message or comment.\n    Message,\n}",
              "documentation": "The kind of human interjection.\n\n# Examples\n\n```\nuse harness_sdk::InterjectionKind;\nassert_eq!(InterjectionKind::Mission.label(), \"Mission\");\n```"
            },
            {
              "name": "::InterjectionKind::label",
              "line": 1034,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::InterjectionAck",
              "line": 1068,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct InterjectionAck {\n/// Whether the adapter accepted the interjection.\n\npub received: bool,\n/// Optional message from the adapter.\n\npub message: String\n}",
              "documentation": "Acknowledgement from the adapter that an interjection was received.\n\n# Examples\n\n```\nuse harness_sdk::InterjectionAck;\n\nlet ack = InterjectionAck {\n    received: true,\n    message: \"Processing...\".into(),\n};\nassert!(ack.received);\n```"
            },
            {
              "name": "::AdapterCapabilities",
              "line": 1094,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct AdapterCapabilities {\n/// Supports chat mode.\n\npub chat: bool,\n/// Supports autonomy mode.\n\npub autonomy: bool,\n/// Supports multi-agent operations.\n\npub multi_agent: bool,\n/// Supports usage/cost metrics.\n\npub metrics: bool,\n/// Supports streaming responses.\n\npub streaming: bool,\n/// Supports tool calls.\n\npub tool_calls: bool,\n/// Supports thinking/reasoning display.\n\npub thinking: bool\n}",
              "documentation": "Capabilities reported by an adapter implementation.\n\nThe SDK checks these flags before calling optional adapter methods.\nIf a capability is `false`, the corresponding features are disabled in the UI.\n\n# Examples\n\n```\nuse harness_sdk::AdapterCapabilities;\n\nlet caps = AdapterCapabilities::chat_only();\nassert!(caps.chat);\nassert!(!caps.autonomy);\n```"
            },
            {
              "name": "::AdapterCapabilities::chat_only",
              "line": 1114,
              "signature": "#[must_use]\npub fn chat_only() -> Self;",
              "documentation": "Create capabilities for a chat-only adapter."
            },
            {
              "name": "::AdapterCapabilities::full",
              "line": 1128,
              "signature": "#[must_use]\npub fn full() -> Self;",
              "documentation": "Create full capabilities."
            },
            {
              "name": "::SessionInfo",
              "line": 1162,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct SessionInfo {\n/// Unique session identifier.\n\npub id: String,\n/// ISO-8601 timestamp of session start.\n\npub started_at: String,\n/// Total messages in this session.\n\npub message_count: usize,\n/// Total input tokens consumed.\n\npub total_input_tokens: u64,\n/// Total output tokens consumed.\n\npub total_output_tokens: u64,\n/// Total estimated cost in USD cents.\n\npub total_cost_cents: f64,\n/// Elapsed duration.\n\npub elapsed: Duration\n}",
              "documentation": "Information about the current TUI session.\n\n# Examples\n\n```\nuse harness_sdk::SessionInfo;\n\nlet session = SessionInfo::new(\"session-1\");\nassert_eq!(session.message_count, 0);\n```"
            },
            {
              "name": "::SessionInfo::new",
              "line": 1182,
              "signature": "#[must_use]\npub fn new(id: impl Into<String>) -> Self;",
              "documentation": "Create a new session info."
            }
          ]
        },
        {
          "path": "harness-sdk/src/validation/adapter_output.rs",
          "sha256": "44de2c25e7bc8f0d2f91279e3ae99a83f2e4c5dd18781e1211e1e97c0b64acfe",
          "artifactSha256": "eadc9f90f467c69734720dd549d53d4c4ae45e9b581f6e73384e0313ff0c557e",
          "url": "/reference/source/harness-sdk/src/validation/adapter_output.rs.txt",
          "declarations": [
            {
              "name": "::validate_agent_info",
              "line": 36,
              "signature": "pub fn validate_agent_info(info: &SdkAgentInfo) -> Result<(), SdkError>;",
              "documentation": "Validate an agent info from adapter output.\n\n# Errors\n\nReturns `SdkError::InvalidAdapterOutput` if:\n- `id` is empty or exceeds `MAX_AGENT_ID_LEN`\n- `name` is empty or exceeds `MAX_AGENT_NAME_LEN`\n- `id` contains invalid characters (must be alphanumeric, hyphens, underscores)"
            },
            {
              "name": "::validate_response_chunk",
              "line": 77,
              "signature": "pub fn validate_response_chunk(chunk: &ResponseChunk) -> Result<(), SdkError>;",
              "documentation": "Validate a response chunk from adapter output.\n\n# Errors\n\nReturns `SdkError::InvalidAdapterOutput` if:\n- `TextDelta.text` exceeds `MAX_CHUNK_SIZE`\n- `ToolCallStart.input` exceeds `MAX_TOOL_INPUT_SIZE`\n- `ToolCallStart.call_id` or `tool_name` is empty\n- Any `agent_id` is empty"
            },
            {
              "name": "::validate_approval_request",
              "line": 153,
              "signature": "pub fn validate_approval_request(request: &SdkApprovalRequest) -> Result<(), SdkError>;",
              "documentation": "Validate an approval request from adapter output.\n\n# Errors\n\nReturns `SdkError::InvalidAdapterOutput` if `id` or `agent_name` is empty."
            }
          ]
        },
        {
          "path": "harness-sdk/src/validation/mod.rs",
          "sha256": "f68e61bb4f5f2adb1306fa1e7b17ef0c37df37c1505c573c4da6a4f98ee458fe",
          "artifactSha256": "6a25cc4e575af7b13885ba37c8808f9d805c1d0a3dc3b0185b7eaa7eb5cfc985",
          "url": "/reference/source/harness-sdk/src/validation/mod.rs.txt",
          "declarations": [
            {
              "name": "adapter_output",
              "line": 7,
              "signature": "pub mod adapter_output;",
              "documentation": "Validation for adapter output and SDK data.\n\nAll data from adapters is untrusted. This module provides validation\nfunctions that enforce length limits, format constraints, and sanitization\nbefore data is used by the SDK or rendered by Kit components."
            }
          ]
        },
        {
          "path": "harness-sdk/src/workspace.rs",
          "sha256": "3142baaee48d33dde5ddca7bc5e33bd41205b9937dc915f4e0bb29831d21cb11",
          "artifactSha256": "3404fc1f22080198db1aef6c6d1bdb192d0d05b30b1fa8e0b2c7cc11f69dc8aa",
          "url": "/reference/source/harness-sdk/src/workspace.rs.txt",
          "declarations": [
            {
              "name": "::complete_workspace_paths",
              "line": 31,
              "signature": "#[must_use]\npub fn complete_workspace_paths(\n    workspace_root: &Path,\n    prefix: &str,\n    max_results: usize,\n) -> Vec<String>;",
              "documentation": "Up to `max_results` workspace-relative path matches for an\n`@<prefix>` token.\n\nResolution rules:\n- Empty / fuzzy prefix \u2192 top-level entries of the workspace root.\n- `./<rest>` \u2192 entries directly under the workspace root, filtered\n  by `<rest>`.\n- `../<rest>` (any depth) \u2192 walks up that many parents from the\n  workspace root, then filters by `<rest>`.\n- `/<abs>` \u2192 absolute filesystem search starting at `/<abs>`'s\n  parent.\n- Otherwise: fuzzy match across the workspace, respecting\n  `.gitignore` (via `ignore::WalkBuilder`)."
            }
          ]
        }
      ]
    },
    {
      "name": "harness-sdk-forge",
      "language": "rust",
      "version": "0.1.0-alpha.1",
      "description": "Forge \u2194 Harness bridge \u2014 implements harness-sdk's AgentAdapter for forge-rs agents and re-exports the full forge SDK so harness apps get every Forge primitive in one import.",
      "manifest": "harness-sdk-forge/Cargo.toml",
      "manifestSha256": "1fb38773f70a4e118ace0ded7a1e5d40914bef273dbb28edd919b6955da59fc5",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/harness-sdk-forge",
      "features": {},
      "files": [
        {
          "path": "harness-sdk-forge/src/adapter.rs",
          "sha256": "b2bb0f4c0c9cecaf1991ffa49291463d1973fe63c80d5f99d882f86de7052e8b",
          "artifactSha256": "f644348db2f898bb519173d3124b81018299a253464141c8145919083f1b512f",
          "url": "/reference/source/harness-sdk-forge/src/adapter.rs.txt",
          "declarations": [
            {
              "name": "::ForgeAdapter",
              "line": 63,
              "signature": "pub struct ForgeAdapter {\n\n}",
              "documentation": "Bridges a [`StreamingToolLoopAgent`] into a [`harness_sdk::AgentAdapter`].\n\nOne adapter wraps one Forge agent. To expose multiple Forge agents in\nthe same harness, build multiple adapters or compose a router adapter\nover them \u2014 the harness's multi-agent panel system handles either shape.\n\n# Example\n\n```no_run\nuse std::sync::Arc;\nuse harness_sdk_forge::prelude::*;\n\n# async fn example() -> Result<(), Box<dyn std::error::Error>> {\n# let model: Arc<dyn LanguageModel> = todo!();\nlet registry = ToolRegistry::new();\nlet approval = Arc::new(AutoApprove);\nlet config = AgentConfig::new(\"data-analyst\", \"anthropic:claude-sonnet-4-5-20250929\");\n\nlet agent = Arc::new(StreamingToolLoopAgent::new(\n    config,\n    StreamingLoopConfig::default(),\n    model,\n    registry,\n    approval,\n));\n\nlet adapter: Arc<dyn AgentAdapter> = Arc::new(ForgeAdapter::new(agent));\n# Ok(())\n# }\n```"
            },
            {
              "name": "::ForgeAdapter::new",
              "line": 87,
              "signature": "pub fn new(agent: Arc<StreamingToolLoopAgent>) -> Self;",
              "documentation": "Wraps a Forge `StreamingToolLoopAgent` as a Harness adapter.\n\nDefaults:\n- `agent_id` = `agent.config().name()`\n- `display_name` = `agent.config().name()`\n- `model_label` = `agent.config().model().to_string()`\n- `capabilities` = chat + autonomy + tool-call/metrics streaming"
            },
            {
              "name": "::ForgeAdapter::with_id",
              "line": 109,
              "signature": "#[must_use]\npub fn with_id(mut self, id: impl Into<String>) -> Self;",
              "documentation": "Override the agent id surfaced to the harness."
            },
            {
              "name": "::ForgeAdapter::with_display_name",
              "line": 116,
              "signature": "#[must_use]\npub fn with_display_name(mut self, name: impl Into<String>) -> Self;",
              "documentation": "Override the display name shown in the harness's agent panel."
            },
            {
              "name": "::ForgeAdapter::with_model_label",
              "line": 123,
              "signature": "#[must_use]\npub fn with_model_label(mut self, label: impl Into<String>) -> Self;",
              "documentation": "Override the model label shown in the harness's status footer."
            },
            {
              "name": "::ForgeAdapter::with_capabilities",
              "line": 134,
              "signature": "#[must_use]\npub fn with_capabilities(mut self, caps: AdapterCapabilities) -> Self;",
              "documentation": "Override the capabilities advertised to the harness.\n\nBy default the adapter advertises chat, autonomy, metrics, tool calls,\nand streaming. Override this only when the wrapped agent has a narrower\noperational contract than a standard Forge streaming tool-loop agent."
            },
            {
              "name": "::ForgeAdapter::forge_agent",
              "line": 140,
              "signature": "pub fn forge_agent(&self) -> &Arc<StreamingToolLoopAgent>;",
              "documentation": "Returns a reference to the wrapped Forge agent."
            }
          ]
        },
        {
          "path": "harness-sdk-forge/src/lib.rs",
          "sha256": "021fc2a42c49188b0ef9a49e6b18a80f070e275570b161225c3dfb3c34b3f1ae",
          "artifactSha256": "2717866db6a5b6faed5c43b7fef52745c70b9dd79c53e344fe7b541a1221fbd5",
          "url": "/reference/source/harness-sdk-forge/src/lib.rs.txt",
          "declarations": [
            {
              "name": "adapter",
              "line": 71,
              "signature": "pub mod adapter;",
              "documentation": ""
            },
            {
              "name": "translate",
              "line": 72,
              "signature": "pub mod translate;",
              "documentation": ""
            },
            {
              "name": "pub use adapter::ForgeAdapter;",
              "line": 74,
              "signature": "pub use adapter::ForgeAdapter;",
              "documentation": ""
            },
            {
              "name": "prelude",
              "line": 84,
              "signature": "pub mod prelude;",
              "documentation": "Convenient single-import prelude that re-exports the most-used items\nfrom `harness_sdk`, `harness_tui_kit`, and the Forge SDK family.\n\n# Examples\n\n```no_run\nuse harness_sdk_forge::prelude::*;\n```"
            },
            {
              "name": "pub use crate::adapter::ForgeAdapter;",
              "line": 86,
              "signature": "pub use crate::adapter::ForgeAdapter;",
              "documentation": ""
            },
            {
              "name": "pub use harness_sdk::adapter::AgentAdapter;",
              "line": 89,
              "signature": "pub use harness_sdk::adapter::AgentAdapter;",
              "documentation": ""
            },
            {
              "name": "pub use harness_sdk::error::AdapterError;",
              "line": 90,
              "signature": "pub use harness_sdk::error::AdapterError;",
              "documentation": ""
            },
            {
              "name": "pub use harness_sdk::types::{\n        ActivityLevel, AdapterCapabilities, AutonomyEvent, HumanInterjection, InterjectionAck,\n        ResponseChunk, SdkAgentInfo, SdkAgentStatus,\n    };",
              "line": 91,
              "signature": "pub use harness_sdk::types::{\n        ActivityLevel, AdapterCapabilities, AutonomyEvent, HumanInterjection, InterjectionAck,\n        ResponseChunk, SdkAgentInfo, SdkAgentStatus,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use harness_sdk::AgentApp;",
              "line": 95,
              "signature": "pub use harness_sdk::AgentApp;",
              "documentation": ""
            },
            {
              "name": "pub use forge_core::config::GenerateOptions;",
              "line": 98,
              "signature": "pub use forge_core::config::GenerateOptions;",
              "documentation": ""
            },
            {
              "name": "pub use forge_core::error::{ForgeError, ForgeResult};",
              "line": 99,
              "signature": "pub use forge_core::error::{ForgeError, ForgeResult};",
              "documentation": ""
            },
            {
              "name": "pub use forge_core::message::{MessagePart, ModelMessage, Role};",
              "line": 100,
              "signature": "pub use forge_core::message::{MessagePart, ModelMessage, Role};",
              "documentation": ""
            },
            {
              "name": "pub use forge_core::model::{ChunkStream, LanguageModel, ModelCapabilities, StreamChunkResult};",
              "line": 101,
              "signature": "pub use forge_core::model::{ChunkStream, LanguageModel, ModelCapabilities, StreamChunkResult};",
              "documentation": ""
            },
            {
              "name": "pub use forge_core::output::{FinishReason, GenerateResult, StreamChunk, Usage};",
              "line": 102,
              "signature": "pub use forge_core::output::{FinishReason, GenerateResult, StreamChunk, Usage};",
              "documentation": ""
            },
            {
              "name": "pub use forge_core::tool::{ToolCall, ToolDefinition, ToolResult, ToolTier};",
              "line": 103,
              "signature": "pub use forge_core::tool::{ToolCall, ToolDefinition, ToolResult, ToolTier};",
              "documentation": ""
            },
            {
              "name": "pub use forge_agent::agent::{\n        Agent, AgentConfig, AgentEvent, AgentOutput, ToolInvocationRecord, ToolInvocationStatus,\n    };",
              "line": 106,
              "signature": "pub use forge_agent::agent::{\n        Agent, AgentConfig, AgentEvent, AgentOutput, ToolInvocationRecord, ToolInvocationStatus,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use forge_agent::observer::{AgentLoopObserver, NoOpObserver};",
              "line": 109,
              "signature": "pub use forge_agent::observer::{AgentLoopObserver, NoOpObserver};",
              "documentation": ""
            },
            {
              "name": "pub use forge_agent::streaming_tool_loop::{StreamingLoopConfig, StreamingToolLoopAgent};",
              "line": 110,
              "signature": "pub use forge_agent::streaming_tool_loop::{StreamingLoopConfig, StreamingToolLoopAgent};",
              "documentation": ""
            },
            {
              "name": "pub use forge_agent::tool_loop::ToolLoopAgent;",
              "line": 111,
              "signature": "pub use forge_agent::tool_loop::ToolLoopAgent;",
              "documentation": ""
            },
            {
              "name": "pub use forge_tool::approval::{ApprovalHandler, AutoApprove};",
              "line": 114,
              "signature": "pub use forge_tool::approval::{ApprovalHandler, AutoApprove};",
              "documentation": ""
            },
            {
              "name": "pub use forge_tool::execution::FnToolExecutor;",
              "line": 115,
              "signature": "pub use forge_tool::execution::FnToolExecutor;",
              "documentation": ""
            },
            {
              "name": "pub use forge_tool::registry::ToolRegistry;",
              "line": 116,
              "signature": "pub use forge_tool::registry::ToolRegistry;",
              "documentation": ""
            },
            {
              "name": "pub use forge_identity::lineage::{\n        create_hmr_identity, create_hmr_with_seed, create_mhr_identity, create_mhr_with_seed,\n        derive_agent_identity,\n    };",
              "line": 119,
              "signature": "pub use forge_identity::lineage::{\n        create_hmr_identity, create_hmr_with_seed, create_mhr_identity, create_mhr_with_seed,\n        derive_agent_identity,\n    };",
              "documentation": ""
            },
            {
              "name": "pub use forge_generate::{stream_text, stream_text_chunks, TextStreamResult};",
              "line": 125,
              "signature": "pub use forge_generate::{stream_text, stream_text_chunks, TextStreamResult};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-sdk-forge/src/translate.rs",
          "sha256": "08fcd9a68b1e2ce12ae781ed57da36b41da5c07370a303101fc4b6e5122c6f71",
          "artifactSha256": "f556b58d54080847eb631b9bf274edb0c3b4f9f575e7613cecb14858d308a02c",
          "url": "/reference/source/harness-sdk-forge/src/translate.rs.txt",
          "declarations": [
            {
              "name": "::ChunkTranslator",
              "line": 23,
              "signature": "pub struct ChunkTranslator {\n\n}",
              "documentation": "Stateful translator from Forge `StreamChunk` to Harness `ResponseChunk`.\n\nOne translator per logical agent run. Buffers tool-call accumulation so\nthe harness only sees a complete `ToolCallStart` (with the full JSON\ninput) when the Forge stream's `ToolCallDelta` chunks have all been\nobserved."
            },
            {
              "name": "::ChunkTranslator::new",
              "line": 45,
              "signature": "pub fn new(agent_id: impl Into<String>) -> Self;",
              "documentation": "Create a translator for the agent with the given id."
            },
            {
              "name": "::ChunkTranslator::agent_id",
              "line": 53,
              "signature": "pub fn agent_id(&self) -> &str;",
              "documentation": "The agent id this translator is stamping onto every emitted chunk."
            },
            {
              "name": "::ChunkTranslator::translate",
              "line": 59,
              "signature": "pub fn translate(&mut self, chunk: StreamChunk) -> Vec<ResponseChunk>;",
              "documentation": "Translate a single Forge `StreamChunk` into zero or more Harness\n`ResponseChunk` values."
            },
            {
              "name": "::ChunkTranslator::finish",
              "line": 173,
              "signature": "pub fn finish(&mut self) -> Vec<ResponseChunk>;",
              "documentation": "Drain any in-flight state at end-of-stream. Emits `ToolCallEnd`\nchunks for any tool call that started but never received an\nexplicit `ToolCallEnd` (defensive \u2014 shouldn't happen with native\nproviders, but handles malformed streams gracefully)."
            }
          ]
        }
      ]
    },
    {
      "name": "harness-tui-kit",
      "language": "rust",
      "version": "0.1.0-alpha.1",
      "description": "Harness TUI Kit \u2014 production-ready TUI components for building agent harnesses (chat, history, harness observability, AHE widgets).",
      "manifest": "harness-tui-kit/Cargo.toml",
      "manifestSha256": "2d02f1c5526be01e092a25fa73227eae407d945c2866d5192e51ed88c21baa22",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/rust/harness-tui-kit",
      "features": {},
      "files": [
        {
          "path": "harness-tui-kit/src/components/agent/agent_panel.rs",
          "sha256": "8902d02254921c9e277660322d0725ecd5813ff468fc10c517c58710dabafce8",
          "artifactSha256": "927515eb5565628b55bace533fc0e13138ee6c606ff494a864cf01609cf5def7",
          "url": "/reference/source/harness-tui-kit/src/components/agent/agent_panel.rs.txt",
          "declarations": [
            {
              "name": "::AgentPanel",
              "line": 85,
              "signature": "#[derive(Debug, Clone)]\npub struct AgentPanel<'a> {\n\n}",
              "documentation": "Full agent detail panel.\n\nDisplays a comprehensive view of an agent including identity, current task,\nmetrics, and tool access. Sections can be toggled via builder methods.\nContent is vertically scrollable when it exceeds the available height.\n\nThis is a [`StatefulWidget`] that renders against [`AgentPanelState`].\n\n# Sections\n\n- **Identity**: Agent name (bold, accent-colored), status dot, model badge,\n  and role description.\n- **Current task**: The label of the task the agent is working on, or \"Idle\"\n  if no task is set.\n- **Metrics** (optional): Tokens used, cost, and latency displayed as inline\n  text rows.\n- **Tool access** (optional): A bulleted list of tool names the agent can invoke.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentPanelState, AgentInfo, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet info = AgentInfo::new(\"a1\", \"Coder\", \"gpt-4o\").with_role(\"Writes code\");\nlet mut state = AgentPanelState::default();\nlet area = Rect::new(0, 0, 50, 10);\nlet mut buf = Buffer::empty(area);\nAgentPanel::new(&info).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::AgentPanel<'a>::new",
              "line": 120,
              "signature": "#[must_use]\npub fn new(info: &'a AgentInfo) -> Self;",
              "documentation": "Create a new agent panel for the given agent info.\n\nDefaults to the standard dark theme with metrics and tools hidden.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info);\n```"
            },
            {
              "name": "::AgentPanel<'a>::theme",
              "line": 146,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo, Theme};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet theme = Theme::midnight();\nlet panel = AgentPanel::new(&info).theme(&theme);\n```"
            },
            {
              "name": "::AgentPanel<'a>::show_metrics",
              "line": 164,
              "signature": "#[must_use]\npub fn show_metrics(mut self, show: bool) -> Self;",
              "documentation": "Toggle visibility of the metrics section (builder pattern).\n\nWhen enabled, displays tokens used, cost, and latency.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info).show_metrics(true);\n```"
            },
            {
              "name": "::AgentPanel<'a>::show_tools",
              "line": 182,
              "signature": "#[must_use]\npub fn show_tools(mut self, show: bool) -> Self;",
              "documentation": "Toggle visibility of the tool access section (builder pattern).\n\nWhen enabled, displays a bulleted list of tool names.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info).show_tools(true);\n```"
            },
            {
              "name": "::AgentPanel<'a>::current_task",
              "line": 200,
              "signature": "#[must_use]\npub fn current_task(mut self, task: &'a str) -> Self;",
              "documentation": "Set the current task label (builder pattern).\n\nIf not set or empty, the panel displays \"Idle\" in muted text.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info).current_task(\"Analyzing code\");\n```"
            },
            {
              "name": "::AgentPanel<'a>::tokens_used",
              "line": 216,
              "signature": "#[must_use]\npub fn tokens_used(mut self, tokens: u64) -> Self;",
              "documentation": "Set the token usage count (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info).tokens_used(50000);\n```"
            },
            {
              "name": "::AgentPanel<'a>::cost_display",
              "line": 232,
              "signature": "#[must_use]\npub fn cost_display(mut self, cost: &'a str) -> Self;",
              "documentation": "Set the cost display string (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info).cost_display(\"$1.23\");\n```"
            },
            {
              "name": "::AgentPanel<'a>::latency_ms",
              "line": 248,
              "signature": "#[must_use]\npub fn latency_ms(mut self, ms: u64) -> Self;",
              "documentation": "Set the current latency in milliseconds (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info).latency_ms(85);\n```"
            },
            {
              "name": "::AgentPanel<'a>::tools",
              "line": 264,
              "signature": "#[must_use]\npub fn tools(mut self, names: &'a [&'a str]) -> Self;",
              "documentation": "Set the list of tool names available to this agent (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentPanel, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet panel = AgentPanel::new(&info).tools(&[\"read_file\", \"bash\"]);\n```"
            },
            {
              "name": "::AgentPanelState",
              "line": 286,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct AgentPanelState {\n\n}",
              "documentation": "Mutable state for [`AgentPanel`], persisted across frames.\n\nTracks the vertical scroll offset for content that exceeds the visible area.\n\n# Examples\n\n```\nuse harness_tui_kit::AgentPanelState;\n\nlet mut state = AgentPanelState::default();\nassert_eq!(state.scroll_offset(), 0);\n\nstate.scroll_down();\nassert_eq!(state.scroll_offset(), 1);\n```"
            },
            {
              "name": "::AgentPanelState::scroll_up",
              "line": 293,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one row, clamping at zero."
            },
            {
              "name": "::AgentPanelState::scroll_down",
              "line": 298,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one row."
            },
            {
              "name": "::AgentPanelState::scroll_offset",
              "line": 304,
              "signature": "#[must_use]\npub fn scroll_offset(&self) -> usize;",
              "documentation": "Returns the current scroll offset."
            },
            {
              "name": "::AgentPanelState::reset",
              "line": 309,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset state to defaults."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/agent/avatar.rs",
          "sha256": "cec2c9da348e7d23f0766ab90c634a2ac3b9faae3f1d4864dbb05645c4289ec8",
          "artifactSha256": "440f50a74b0a2a512ea7670ae522b0bf44a89c2f1865a9644a1d007380e4d70c",
          "url": "/reference/source/harness-tui-kit/src/components/agent/avatar.rs.txt",
          "declarations": [
            {
              "name": "::AvatarSize",
              "line": 58,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub enum AvatarSize {\n    /// 1 character wide, 1 row tall.\n    Small,\n    /// 3 characters wide, 3 rows tall.\n    Medium,\n    /// 5 characters wide, 5 rows tall.\n    Large,\n}",
              "documentation": "Size of the avatar block.\n\nDetermines how many terminal cells the avatar occupies.\n\n# Examples\n\n```\nuse harness_tui_kit::AvatarSize;\n\nlet size = AvatarSize::Medium;\n```"
            },
            {
              "name": "::AgentAvatar",
              "line": 109,
              "signature": "#[derive(Debug, Clone)]\npub struct AgentAvatar<'a> {\n\n}",
              "documentation": "A widget that renders a deterministic visual identity from an agent ID.\n\nThe color is derived from a hash of the agent ID, ensuring that the same\nagent always renders with the same visual appearance. The avatar displays\nthe agent's initial(s) centered in the block.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentAvatar, AvatarSize, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet avatar = AgentAvatar::new(\"agent-1\", \"Coder\").size(AvatarSize::Medium);\nlet area = Rect::new(0, 0, 3, 3);\nlet mut buf = Buffer::empty(area);\navatar.render(area, &mut buf);\n```"
            },
            {
              "name": "::AgentAvatar<'a>::new",
              "line": 133,
              "signature": "#[must_use]\npub fn new(id: &'a str, name: &'a str) -> Self;",
              "documentation": "Create a new avatar for the given agent ID and name.\n\nDefaults to [`AvatarSize::Small`] and the default dark theme.\n\n# Examples\n\n```\nuse harness_tui_kit::AgentAvatar;\n\nlet avatar = AgentAvatar::new(\"agent-1\", \"Navigator\");\n```"
            },
            {
              "name": "::AgentAvatar<'a>::size",
              "line": 152,
              "signature": "#[must_use]\npub fn size(mut self, size: AvatarSize) -> Self;",
              "documentation": "Set the avatar size.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentAvatar, AvatarSize};\n\nlet avatar = AgentAvatar::new(\"a1\", \"Bot\").size(AvatarSize::Large);\n```"
            },
            {
              "name": "::AgentAvatar<'a>::theme",
              "line": 168,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentAvatar, Theme};\n\nlet theme = Theme::midnight();\nlet avatar = AgentAvatar::new(\"a1\", \"Bot\").theme(&theme);\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/agent/card.rs",
          "sha256": "9403451bae6bd3d04684f06a91eee085deb89d9db56b76203a53148691f83e10",
          "artifactSha256": "cdaf0a413586cebdeb822d3cf62c330b79e260dcbf019813c9f8996560397342",
          "url": "/reference/source/harness-tui-kit/src/components/agent/card.rs.txt",
          "declarations": [
            {
              "name": "::AgentCard",
              "line": 65,
              "signature": "#[derive(Debug, Clone)]\npub struct AgentCard<'a> {\n\n}",
              "documentation": "Expandable agent identity card.\n\nDisplays an agent's name, model, status, and role description. In compact\nmode (the default), everything fits on a single line. In expanded mode,\nthe card spans multiple lines with a colored left border.\n\nThis is a [`StatefulWidget`] that renders against [`AgentCardState`].\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentCard, AgentCardState, AgentInfo, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet info = AgentInfo::new(\"a1\", \"Coder\", \"gpt-4o\").with_role(\"Writes code\");\nlet mut state = AgentCardState::default();\nlet area = Rect::new(0, 0, 50, 1);\nlet mut buf = Buffer::empty(area);\nAgentCard::new(&info).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::AgentCard<'a>::new",
              "line": 86,
              "signature": "#[must_use]\npub fn new(info: &'a AgentInfo) -> Self;",
              "documentation": "Create a new agent card for the given agent info.\n\nDefaults to the standard dark theme.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentCard, AgentInfo};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet card = AgentCard::new(&info);\n```"
            },
            {
              "name": "::AgentCard<'a>::theme",
              "line": 105,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentCard, AgentInfo, Theme};\n\nlet info = AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\");\nlet theme = Theme::midnight();\nlet card = AgentCard::new(&info).theme(&theme);\n```"
            },
            {
              "name": "::AgentCardState",
              "line": 127,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct AgentCardState {\n/// Whether to show expanded (multi-line) or compact (single-line) mode.\n\npub expanded: bool\n}",
              "documentation": "Mutable state for [`AgentCard`], persisted across frames.\n\nTracks whether the card is in expanded or compact display mode.\n\n# Examples\n\n```\nuse harness_tui_kit::AgentCardState;\n\nlet mut state = AgentCardState::default();\nassert!(!state.expanded);\n\nstate.toggle();\nassert!(state.expanded);\n```"
            },
            {
              "name": "::AgentCardState::toggle",
              "line": 134,
              "signature": "pub fn toggle(&mut self);",
              "documentation": "Toggle between expanded and compact mode."
            },
            {
              "name": "::AgentCardState::reset",
              "line": 139,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to default (compact) state."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/agent/list.rs",
          "sha256": "21ccd2c53a768924250d8426fee558f6f261d25e8c55fb9d7059b60ff6083d04",
          "artifactSha256": "739b1e0eff9a2d6be41add5772181691d301601c8b18ceedb371c571a667a33f",
          "url": "/reference/source/harness-tui-kit/src/components/agent/list.rs.txt",
          "declarations": [
            {
              "name": "::AgentList",
              "line": 68,
              "signature": "#[derive(Debug, Clone)]\npub struct AgentList<'a> {\n\n}",
              "documentation": "Scrollable, filterable list of agent cards.\n\nRenders a vertical list of agents using [`AgentCard`] for each entry.\nThe selected agent is highlighted with the theme's accent border color.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentList, AgentListState, AgentInfo, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet agents = vec![AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\")];\nlet mut state = AgentListState::default();\nlet area = Rect::new(0, 0, 40, 5);\nlet mut buf = Buffer::empty(area);\nAgentList::new(&agents).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::AgentList<'a>::new",
              "line": 87,
              "signature": "#[must_use]\npub fn new(agents: &'a [AgentInfo]) -> Self;",
              "documentation": "Create a new agent list for the given agents.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentList, AgentInfo};\n\nlet agents = vec![AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\")];\nlet list = AgentList::new(&agents);\n```"
            },
            {
              "name": "::AgentList<'a>::theme",
              "line": 106,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentList, AgentInfo, Theme};\n\nlet agents = vec![AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\")];\nlet theme = Theme::midnight();\nlet list = AgentList::new(&agents).theme(&theme);\n```"
            },
            {
              "name": "::AgentListState",
              "line": 130,
              "signature": "#[derive(Debug, Clone)]\npub struct AgentListState {\n/// Currently selected agent index (if any).\n\npub selected: Option<usize>,\n/// Scroll offset for the list.\n\npub scroll_offset: usize,\n/// Optional filter text.\n\npub filter: String,\n/// Whether to show agents in compact mode.\n\npub compact: bool\n}",
              "documentation": "Mutable state for [`AgentList`], persisted across frames.\n\nTracks selection, scroll offset, filter text, and display mode. The\napplication is responsible for keeping this state alive between renders.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentListState, AgentInfo};\n\nlet mut state = AgentListState::default();\nassert_eq!(state.selected, None);\nassert!(state.compact);\n\nstate.select_next(3);\nassert_eq!(state.selected, Some(0));\n```"
            },
            {
              "name": "::AgentListState::new",
              "line": 150,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new state with compact mode enabled and no selection."
            },
            {
              "name": "::AgentListState::select_next",
              "line": 175,
              "signature": "pub fn select_next(&mut self, total: usize);",
              "documentation": "Move selection to the next agent, wrapping around.\n\nIf nothing is selected, selects the first agent. `total` is the count\nof visible (filtered) agents.\n\n# Examples\n\n```\nuse harness_tui_kit::AgentListState;\n\nlet mut state = AgentListState::default();\nstate.select_next(3);\nassert_eq!(state.selected, Some(0));\nstate.select_next(3);\nassert_eq!(state.selected, Some(1));\n```"
            },
            {
              "name": "::AgentListState::select_prev",
              "line": 200,
              "signature": "pub fn select_prev(&mut self, total: usize);",
              "documentation": "Move selection to the previous agent, wrapping around.\n\nIf nothing is selected, selects the last agent. `total` is the count\nof visible (filtered) agents.\n\n# Examples\n\n```\nuse harness_tui_kit::AgentListState;\n\nlet mut state = AgentListState::default();\nstate.select_prev(3);\nassert_eq!(state.selected, Some(2));\n```"
            },
            {
              "name": "::AgentListState::set_filter",
              "line": 225,
              "signature": "pub fn set_filter(&mut self, text: impl AsRef<str>);",
              "documentation": "Set the filter text.\n\nResets selection and scroll offset to avoid pointing at a now-hidden agent.\n\n# Examples\n\n```\nuse harness_tui_kit::AgentListState;\n\nlet mut state = AgentListState::default();\nstate.set_filter(\"nav\");\nassert_eq!(state.filter, \"nav\");\n```"
            },
            {
              "name": "::AgentListState::clear_filter",
              "line": 234,
              "signature": "pub fn clear_filter(&mut self);",
              "documentation": "Clear the filter text.\n\nResets selection and scroll offset."
            },
            {
              "name": "::AgentListState::toggle_compact",
              "line": 243,
              "signature": "pub fn toggle_compact(&mut self);",
              "documentation": "Toggle between compact and expanded card display.\n\nResets scroll offset since the item height changes."
            },
            {
              "name": "::AgentListState::selected_agent",
              "line": 268,
              "signature": "#[must_use]\npub fn selected_agent<'a>(&self, agents: &'a [AgentInfo]) -> Option<&'a AgentInfo>;",
              "documentation": "Get the currently selected agent from a slice.\n\nReturns `None` if nothing is selected, the selection is out of bounds,\nor the filtered list has fewer items than the selection index.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentListState, AgentInfo};\n\nlet agents = vec![\n    AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\"),\n    AgentInfo::new(\"a2\", \"Nav\", \"gpt-4o\"),\n];\nlet mut state = AgentListState::default();\nstate.select_next(agents.len());\nlet selected = state.selected_agent(&agents);\nassert_eq!(selected.map(|a| a.name.as_str()), Some(\"Bot\"));\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/agent/mod.rs",
          "sha256": "afbe2851c928022f63f25188b54235c49458866279f38a7bd3ff2802e451767f",
          "artifactSha256": "f33eb07d9a0133588642a7b05a033207c15b0f904cc98d304a6710de1d3c2e82",
          "url": "/reference/source/harness-tui-kit/src/components/agent/mod.rs.txt",
          "declarations": [
            {
              "name": "agent_panel",
              "line": 5,
              "signature": "pub mod agent_panel;",
              "documentation": "Agent components.\n\nComponents for displaying agent identity, status, and details."
            },
            {
              "name": "pub use agent_panel::{AgentPanel, AgentPanelState};",
              "line": 12,
              "signature": "pub use agent_panel::{AgentPanel, AgentPanelState};",
              "documentation": ""
            },
            {
              "name": "pub use avatar::{AgentAvatar, AvatarSize};",
              "line": 13,
              "signature": "pub use avatar::{AgentAvatar, AvatarSize};",
              "documentation": ""
            },
            {
              "name": "pub use card::{AgentCard, AgentCardState};",
              "line": 14,
              "signature": "pub use card::{AgentCard, AgentCardState};",
              "documentation": ""
            },
            {
              "name": "pub use list::{AgentList, AgentListState};",
              "line": 15,
              "signature": "pub use list::{AgentList, AgentListState};",
              "documentation": ""
            },
            {
              "name": "pub use multi_agent_header::{MultiAgentHeader, MultiAgentHeaderState};",
              "line": 16,
              "signature": "pub use multi_agent_header::{MultiAgentHeader, MultiAgentHeaderState};",
              "documentation": ""
            },
            {
              "name": "pub use status::AgentStatusDot;",
              "line": 17,
              "signature": "pub use status::AgentStatusDot;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/agent/multi_agent_header.rs",
          "sha256": "a65e74d67545f13aaec8bf57db1ddbdeedd5d451a8c30cb8c30450b7cd7f482a",
          "artifactSha256": "a4a504027eff84a86ce41dc9b9fcacf5aaf9fd44c823506aadc2bfded156fc4b",
          "url": "/reference/source/harness-tui-kit/src/components/agent/multi_agent_header.rs.txt",
          "declarations": [
            {
              "name": "::MultiAgentHeader",
              "line": 84,
              "signature": "#[derive(Debug, Clone)]\npub struct MultiAgentHeader<'a> {\n\n}",
              "documentation": "Horizontal bar showing all agents with status dots.\n\nEach agent is rendered as a \"chip\": a colored status dot followed by the\nagent's name. The currently focused agent receives accent-colored text\nwith a bold modifier. When the total chip width exceeds the available\narea, scroll indicators (`<` / `>`) appear at the edges, and the caller\ncan use [`MultiAgentHeaderState::scroll_left`]\n[`MultiAgentHeaderState::scroll_right`] to pan the view.\n\nA right-aligned badge shows the total agent count in muted styling.\n\n# Examples\n\n```\nuse harness_tui_kit::{MultiAgentHeader, MultiAgentHeaderState, AgentInfo, AgentStatus, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet agents = vec![\n    AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\").with_status(AgentStatus::Online),\n];\nlet mut state = MultiAgentHeaderState::default();\nlet area = Rect::new(0, 0, 40, 1);\nlet mut buf = Buffer::empty(area);\nMultiAgentHeader::new(&agents).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::MultiAgentHeaderState",
              "line": 110,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct MultiAgentHeaderState {\n\n}",
              "documentation": "Mutable state for [`MultiAgentHeader`], persisted across frames.\n\nTracks the horizontal scroll offset when agents overflow the available\nwidth.\n\n# Examples\n\n```\nuse harness_tui_kit::MultiAgentHeaderState;\n\nlet mut state = MultiAgentHeaderState::default();\nstate.scroll_right(5);\nassert_eq!(state.scroll_offset(), 1);\nstate.scroll_left();\nassert_eq!(state.scroll_offset(), 0);\n```"
            },
            {
              "name": "::MultiAgentHeader<'a>::new",
              "line": 127,
              "signature": "#[must_use]\npub fn new(agents: &'a [AgentInfo]) -> Self;",
              "documentation": "Create a new multi-agent header for the given agents.\n\n# Examples\n\n```\nuse harness_tui_kit::{MultiAgentHeader, AgentInfo};\n\nlet agents = vec![AgentInfo::new(\"a1\", \"Bot\", \"gpt-4o\")];\nlet header = MultiAgentHeader::new(&agents);\n```"
            },
            {
              "name": "::MultiAgentHeader<'a>::theme",
              "line": 137,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::MultiAgentHeader<'a>::focused_index",
              "line": 146,
              "signature": "#[must_use]\npub fn focused_index(mut self, index: Option<usize>) -> Self;",
              "documentation": "Set the focused agent index.\n\nThe focused agent receives accent-colored, bold styling."
            },
            {
              "name": "::MultiAgentHeaderState::new",
              "line": 155,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new state with zero scroll offset."
            },
            {
              "name": "::MultiAgentHeaderState::scroll_left",
              "line": 162,
              "signature": "pub fn scroll_left(&mut self);",
              "documentation": "Scroll the header one agent chip to the left.\n\nClamps at zero (the beginning)."
            },
            {
              "name": "::MultiAgentHeaderState::scroll_right",
              "line": 169,
              "signature": "pub fn scroll_right(&mut self, agent_count: usize);",
              "documentation": "Scroll the header one agent chip to the right.\n\nClamps so the offset cannot exceed `agent_count - 1`."
            },
            {
              "name": "::MultiAgentHeaderState::reset",
              "line": 180,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to its default (scroll offset zero)."
            },
            {
              "name": "::MultiAgentHeaderState::scroll_offset",
              "line": 186,
              "signature": "#[must_use]\npub fn scroll_offset(&self) -> usize;",
              "documentation": "Returns the current scroll offset."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/agent/status.rs",
          "sha256": "9bfdcbfdb0ec8c0ba08b652afb92f1dd6de26ede3e9f0b6411f8e4d2d1e8fd6e",
          "artifactSha256": "f0eb373d698162745a6f682fd219e3e3bff8fafb4bbcde170fc0b3ff1383f928",
          "url": "/reference/source/harness-tui-kit/src/components/agent/status.rs.txt",
          "declarations": [
            {
              "name": "::AgentStatusDot",
              "line": 38,
              "signature": "#[derive(Debug, Clone)]\npub struct AgentStatusDot<'a> {\n\n}",
              "documentation": "Colored dot indicating an agent's status.\n\nMaps each [`AgentStatus`] variant to a theme-defined color and renders\na single Unicode dot character (`\u25cf`). Optionally shows the status label."
            },
            {
              "name": "::AgentStatusDot<'a>::new",
              "line": 50,
              "signature": "#[must_use]\npub fn new(status: AgentStatus) -> Self;",
              "documentation": "Create a new status dot for the given status."
            },
            {
              "name": "::AgentStatusDot<'a>::theme",
              "line": 60,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::AgentStatusDot<'a>::with_label",
              "line": 67,
              "signature": "#[must_use]\npub fn with_label(mut self, show: bool) -> Self;",
              "documentation": "Show the status label text after the dot."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/bubble.rs",
          "sha256": "ce2f13c3491c1f781d989d7c1133a5cb4bf7ae35a403770d6e4ea2fea5e23cb1",
          "artifactSha256": "af3596ea7289c9c4e6fb536f76517acafb6161b917dc26437f22e37e4cca42d7",
          "url": "/reference/source/harness-tui-kit/src/components/chat/bubble.rs.txt",
          "declarations": [
            {
              "name": "::ChatBubble",
              "line": 38,
              "signature": "#[derive(Debug, Clone)]\npub struct ChatBubble<'a> {\n\n}",
              "documentation": "Single chat message bubble with role indicator.\n\nRenders a message with a colored left stripe indicating the sender's role,\nthe sender name, content text (word-wrapped), and an optional timestamp."
            },
            {
              "name": "::ChatBubble<'a>::new",
              "line": 59,
              "signature": "#[must_use]\npub fn new(message: &'a ChatMessage) -> Self;",
              "documentation": "Create a new chat bubble for the given message."
            },
            {
              "name": "::ChatBubble<'a>::markdown",
              "line": 78,
              "signature": "#[must_use]\npub fn markdown(mut self, enabled: bool) -> Self;",
              "documentation": "Enable markdown rendering of the message body. When enabled,\nthe bubble delegates body painting to [`MarkdownRenderer`]\n(no scroll, no `max_lines` collapsing \u2014 those are not\nmeaningful for styled markdown blocks; use [`ChatTimeline`]\nfor scrolling).\n\n[`ChatTimeline`]: crate::ChatTimeline"
            },
            {
              "name": "::ChatBubble<'a>::theme",
              "line": 85,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::ChatBubble<'a>::show_timestamp",
              "line": 92,
              "signature": "#[must_use]\npub fn show_timestamp(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show the timestamp."
            },
            {
              "name": "::ChatBubble<'a>::show_sender",
              "line": 99,
              "signature": "#[must_use]\npub fn show_sender(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show the sender name."
            },
            {
              "name": "::ChatBubble<'a>::max_lines",
              "line": 108,
              "signature": "#[must_use]\npub fn max_lines(mut self, max: usize) -> Self;",
              "documentation": "Set the maximum content lines before collapsing.\n\nWhen set, content beyond this many lines shows a \"... (N more lines)\" indicator."
            },
            {
              "name": "::ChatBubbleState",
              "line": 116,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ChatBubbleState {\n/// Scroll offset within the message content.\n\npub scroll_offset: usize,\n/// Whether this bubble is currently selected.\n\npub selected: bool\n}",
              "documentation": "Mutable state for [`ChatBubble`], persists across frames."
            },
            {
              "name": "::ChatBubbleState::scroll_up",
              "line": 125,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one line."
            },
            {
              "name": "::ChatBubbleState::scroll_down",
              "line": 130,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one line."
            },
            {
              "name": "::ChatBubbleState::reset",
              "line": 135,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset scroll to the top."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/code_block.rs",
          "sha256": "97d1bbeca0f269f7693169c8d0856dd24248be54eeec7f1592305b6623af9470",
          "artifactSha256": "6ca2ad4cae751353281dfd99fc2642a816ec3a010c5e361f8f730ab56f299ed2",
          "url": "/reference/source/harness-tui-kit/src/components/chat/code_block.rs.txt",
          "declarations": [
            {
              "name": "::CodeBlock",
              "line": 44,
              "signature": "#[derive(Debug, Clone)]\npub struct CodeBlock<'a> {\n\n}",
              "documentation": "Syntax-highlighted code block display.\n\nRenders code with an optional language label, line numbers, background fill,\nand keyword-based syntax highlighting. Supports scroll for long code blocks."
            },
            {
              "name": "::CodeBlock<'a>::new",
              "line": 60,
              "signature": "#[must_use]\npub fn new(code: &'a str) -> Self;",
              "documentation": "Create a new code block with the given source code."
            },
            {
              "name": "::CodeBlock<'a>::language",
              "line": 72,
              "signature": "#[must_use]\npub fn language(mut self, lang: &'a str) -> Self;",
              "documentation": "Set the programming language (e.g., \"rust\", \"python\", \"javascript\")."
            },
            {
              "name": "::CodeBlock<'a>::theme",
              "line": 79,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::CodeBlock<'a>::show_line_numbers",
              "line": 86,
              "signature": "#[must_use]\npub fn show_line_numbers(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show line numbers."
            },
            {
              "name": "::CodeBlock<'a>::show_header",
              "line": 93,
              "signature": "#[must_use]\npub fn show_header(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show the language header bar."
            },
            {
              "name": "::CodeBlockState",
              "line": 101,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct CodeBlockState {\n/// Vertical scroll offset (in lines).\n\npub scroll_offset: usize,\n/// Horizontal scroll offset (in columns).\n\npub h_scroll: usize\n}",
              "documentation": "Mutable state for [`CodeBlock`], persists across frames."
            },
            {
              "name": "::CodeBlockState::scroll_up",
              "line": 110,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one line."
            },
            {
              "name": "::CodeBlockState::scroll_down",
              "line": 115,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one line."
            },
            {
              "name": "::CodeBlockState::scroll_left",
              "line": 120,
              "signature": "pub fn scroll_left(&mut self);",
              "documentation": "Scroll left by one column."
            },
            {
              "name": "::CodeBlockState::scroll_right",
              "line": 125,
              "signature": "pub fn scroll_right(&mut self);",
              "documentation": "Scroll right by one column."
            },
            {
              "name": "::CodeBlockState::reset",
              "line": 130,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset scroll to origin."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/diff_view.rs",
          "sha256": "8750a1e23755e7a9af791f11a21c12f2789732a5ff2de30dd74b196192b26dc9",
          "artifactSha256": "16c85fc88f9599df14c6617b31f4dd1e1814dde19cd48d84432b7aeb8f4181c6",
          "url": "/reference/source/harness-tui-kit/src/components/chat/diff_view.rs.txt",
          "declarations": [
            {
              "name": "::DiffView",
              "line": 110,
              "signature": "#[derive(Debug, Clone)]\npub struct DiffView<'a> {\n\n}",
              "documentation": "Diff view displaying file changes with line numbers and color coding.\n\nSupports unified and side-by-side display modes. In unified mode every\ndiff line occupies a single row with both old and new line numbers shown.\nIn side-by-side mode the area is split in two: the left half shows the\nold file (removed + context), the right half shows the new file\n(added + context).\n\nWhen `context_lines` is non-zero, large runs of context lines are\ncollapsed into a single `\"\u2026 N lines hidden \u2026\"` separator row.\n\n# Examples\n\n```\nuse harness_tui_kit::components::chat::{DiffView, DiffViewState};\nuse harness_tui_kit::{DiffLine, DiffLineKind, Theme};\nuse ratatui::buffer::Buffer;\nuse ratatui::layout::Rect;\nuse ratatui::widgets::StatefulWidget;\n\nlet lines = vec![\n    DiffLine { kind: DiffLineKind::Added, content: \"new line\".into(),\n               old_line_no: None, new_line_no: Some(1) },\n];\nlet theme = Theme::dark();\nlet mut state = DiffViewState::default();\nlet area = Rect::new(0, 0, 60, 5);\nlet mut buf = Buffer::empty(area);\nDiffView::new(&lines).theme(&theme).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::DiffView<'a>::new",
              "line": 129,
              "signature": "#[must_use]\npub fn new(lines: &'a [DiffLine]) -> Self;",
              "documentation": "Create a new diff view for the given diff lines.\n\nDefaults: unified mode, no filename, context collapsing disabled\n(show all lines), dark theme."
            },
            {
              "name": "::DiffView<'a>::filename",
              "line": 141,
              "signature": "#[must_use]\npub fn filename(mut self, name: &'a str) -> Self;",
              "documentation": "Set the filename displayed in the header row."
            },
            {
              "name": "::DiffView<'a>::unified",
              "line": 150,
              "signature": "#[must_use]\npub fn unified(mut self, value: bool) -> Self;",
              "documentation": "Set the display mode.\n\n`true` renders unified diff; `false` renders side-by-side."
            },
            {
              "name": "::DiffView<'a>::context_lines",
              "line": 163,
              "signature": "#[must_use]\npub fn context_lines(mut self, n: usize) -> Self;",
              "documentation": "Set the number of context lines to show around changed lines.\n\nWhen `n > 0`, any run of consecutive context lines longer than\n`2 * n` is replaced by a `\"\u2026 K lines hidden \u2026\"` separator showing\nthe first `n` and last `n` lines of the run.\n\nSetting this to `0` disables collapsing (all lines visible)."
            },
            {
              "name": "::DiffView<'a>::theme",
              "line": 170,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::DiffViewState",
              "line": 542,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct DiffViewState {\n/// Vertical scroll offset in rendered rows.\n\npub scroll_offset: usize\n}",
              "documentation": "Mutable state for [`DiffView`], persists across frames.\n\nTracks the vertical scroll offset so the user can navigate through diffs\nlonger than the available terminal height."
            },
            {
              "name": "::DiffViewState::new",
              "line": 550,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new state positioned at the top of the diff."
            },
            {
              "name": "::DiffViewState::scroll_up",
              "line": 555,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one rendered row, clamped at zero."
            },
            {
              "name": "::DiffViewState::scroll_down",
              "line": 563,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one rendered row.\n\nThe caller is responsible for clamping against the total row count\nif desired; this method simply increments."
            },
            {
              "name": "::DiffViewState::reset",
              "line": 568,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset state to the top of the diff."
            },
            {
              "name": "::DiffViewState::clamp",
              "line": 575,
              "signature": "pub fn clamp(&mut self, max_offset: usize) -> usize;",
              "documentation": "Clamp the scroll offset so it does not exceed `max_offset`.\n\nReturns the clamped value."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/document_preview.rs",
          "sha256": "103b7dddc0bab424bdfab3cceedce3e6cbb327c86ba32a90467fd265e8f54cb8",
          "artifactSha256": "d19e4e3842f5722080cdf14232e1d11eebbc402b00f1bd254b748be79f2d629e",
          "url": "/reference/source/harness-tui-kit/src/components/chat/document_preview.rs.txt",
          "declarations": [
            {
              "name": "::DocumentPreviewState",
              "line": 26,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct DocumentPreviewState {\n\n}",
              "documentation": "Persistent state for [`DocumentPreviewPane`]."
            },
            {
              "name": "::DocumentPreviewState::scroll",
              "line": 36,
              "signature": "#[must_use]\npub fn scroll(&self) -> u16;",
              "documentation": "Current scroll offset."
            },
            {
              "name": "::DocumentPreviewState::follow_tail",
              "line": 42,
              "signature": "#[must_use]\npub fn follow_tail(&self) -> bool;",
              "documentation": "Whether tail-following is on."
            },
            {
              "name": "::DocumentPreviewState::set_follow_tail",
              "line": 47,
              "signature": "pub fn set_follow_tail(&mut self, on: bool);",
              "documentation": "Toggle tail-following."
            },
            {
              "name": "::DocumentPreviewState::line_up",
              "line": 52,
              "signature": "pub fn line_up(&mut self);",
              "documentation": "Scroll up by one row."
            },
            {
              "name": "::DocumentPreviewState::line_down",
              "line": 58,
              "signature": "pub fn line_down(&mut self);",
              "documentation": "Scroll down by one row."
            },
            {
              "name": "::DocumentPreviewState::page_up",
              "line": 63,
              "signature": "pub fn page_up(&mut self, viewport_h: u16);",
              "documentation": "Page up by `viewport_h` rows."
            },
            {
              "name": "::DocumentPreviewState::page_down",
              "line": 69,
              "signature": "pub fn page_down(&mut self, viewport_h: u16);",
              "documentation": "Page down by `viewport_h` rows."
            },
            {
              "name": "::DocumentPreviewState::jump_top",
              "line": 74,
              "signature": "pub fn jump_top(&mut self);",
              "documentation": "Jump to the first row."
            },
            {
              "name": "::DocumentPreviewState::jump_bottom",
              "line": 80,
              "signature": "pub fn jump_bottom(&mut self, content_h: u16, viewport_h: u16);",
              "documentation": "Jump to the last row of the supplied content."
            },
            {
              "name": "::PageStyle",
              "line": 88,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum PageStyle {\n    /// Subtle bordered chrome with page-number footer.\n    #[default]\n    Page,\n    /// Raw scrollable region with no border.\n    Plain,\n}",
              "documentation": "What \"page chrome\" to draw around the document body."
            },
            {
              "name": "::DocumentPreviewPane",
              "line": 98,
              "signature": "#[derive(Debug, Clone)]\npub struct DocumentPreviewPane<'a> {\n\n}",
              "documentation": "Page-style live document preview."
            },
            {
              "name": "::DocumentPreviewPane<'a>::new",
              "line": 116,
              "signature": "#[must_use]\npub fn new(lines: &'a [Line<'static>]) -> Self;",
              "documentation": "Build a pane over a slice of pre-rendered lines."
            },
            {
              "name": "::DocumentPreviewPane<'a>::theme",
              "line": 130,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::DocumentPreviewPane<'a>::title",
              "line": 137,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Set the title shown in the page chrome border."
            },
            {
              "name": "::DocumentPreviewPane<'a>::page_style",
              "line": 144,
              "signature": "#[must_use]\npub fn page_style(mut self, style: PageStyle) -> Self;",
              "documentation": "Pick a chrome style."
            },
            {
              "name": "::DocumentPreviewPane<'a>::page_number",
              "line": 151,
              "signature": "#[must_use]\npub fn page_number(mut self, n: u16) -> Self;",
              "documentation": "Set the 1-indexed page number shown in the footer."
            },
            {
              "name": "::DocumentPreviewPane<'a>::total_pages",
              "line": 158,
              "signature": "#[must_use]\npub fn total_pages(mut self, n: u16) -> Self;",
              "documentation": "Set the total page count for footer \"X / Y\" display."
            },
            {
              "name": "::DocumentPreviewPane<'a>::doc_type",
              "line": 165,
              "signature": "#[must_use]\npub fn doc_type(mut self, label: &'a str) -> Self;",
              "documentation": "Optional document type label (e.g. `\"privacy-policy.md\"`)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/file_display.rs",
          "sha256": "6938f20e964032c9d8fd334fadcccad49903d250a2361cd73525944ee6ee6301",
          "artifactSha256": "b15675bf84a43d2a4d1e38f60bbc7c33c2431732ac6ec9b7ef70a02f31dc926a",
          "url": "/reference/source/harness-tui-kit/src/components/chat/file_display.rs.txt",
          "declarations": [
            {
              "name": "::FileDisplay",
              "line": 86,
              "signature": "#[derive(Debug, Clone)]\npub struct FileDisplay<'a> {\n\n}",
              "documentation": "File content display with metadata header and line numbers.\n\nRenders a file with:\n- **Header bar** (1 line): `[lang] filename \u2014 size, N lines` in muted style\n  with the language tag highlighted in the accent color.\n- **Body** (remaining lines): scrollable content with right-aligned muted\n  line numbers separated from the content by a `\u2502` gutter.\n- **Collapsible**: when collapsed only the header row is shown with a `\u25b6`\n  indicator; when expanded the `\u25bc` indicator is shown instead.\n\nAll text sourced from the caller passes through\n[`crate::util::sanitize::sanitize`] before reaching the terminal buffer.\n\n# Examples\n\n```\nuse harness_tui_kit::components::chat::{FileDisplay, FileDisplayState};\nuse harness_tui_kit::Theme;\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet mut state = FileDisplayState::default();\nlet area = Rect::new(0, 0, 60, 10);\nlet mut buf = Buffer::empty(area);\nFileDisplay::new(\"hello.txt\", \"Hello, world!\")\n    .render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::FileDisplay<'a>::new",
              "line": 107,
              "signature": "#[must_use]\npub fn new(filename: &'a str, content: &'a str) -> Self;",
              "documentation": "Create a new `FileDisplay` with the required filename and content.\n\nBoth `filename` and `content` are considered untrusted and will be\nsanitized before rendering.\n\nDefaults: language = `\"\"`, file_size = `0`, theme = [`DEFAULT_THEME`]."
            },
            {
              "name": "::FileDisplay<'a>::language",
              "line": 119,
              "signature": "#[must_use]\npub fn language(mut self, lang: &'a str) -> Self;",
              "documentation": "Set the programming language tag displayed in the header."
            },
            {
              "name": "::FileDisplay<'a>::file_size",
              "line": 126,
              "signature": "#[must_use]\npub fn file_size(mut self, bytes: u64) -> Self;",
              "documentation": "Set the file size in bytes. Used to format the size label in the header."
            },
            {
              "name": "::FileDisplay<'a>::theme",
              "line": 133,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme used for all color tokens."
            },
            {
              "name": "::FileDisplayState",
              "line": 145,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct FileDisplayState {\n\n}",
              "documentation": "Mutable state for [`FileDisplay`], persisted across frames."
            },
            {
              "name": "::FileDisplayState::scroll_up",
              "line": 154,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one source line, clamping at zero."
            },
            {
              "name": "::FileDisplayState::scroll_down",
              "line": 162,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one source line.\n\nThe render pass clamps `scroll_offset` to the last line so this will\nnever scroll past the end of the file."
            },
            {
              "name": "::FileDisplayState::toggle_collapse",
              "line": 167,
              "signature": "pub fn toggle_collapse(&mut self);",
              "documentation": "Toggle the collapsed / expanded state of the component."
            },
            {
              "name": "::FileDisplayState::reset",
              "line": 172,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the component to its default state (scroll = 0, expanded)."
            },
            {
              "name": "::FileDisplayState::scroll_to",
              "line": 180,
              "signature": "pub fn scroll_to(&mut self, line: usize);",
              "documentation": "Scroll so that `line` (0-indexed) is the first visible line.\n\nIf `line` exceeds the total number of lines the render pass will clamp\nit automatically."
            },
            {
              "name": "::FileDisplayState::is_collapsed",
              "line": 186,
              "signature": "#[must_use]\npub fn is_collapsed(&self) -> bool;",
              "documentation": "Return `true` when the component is currently collapsed."
            },
            {
              "name": "::FileDisplayState::scroll_offset",
              "line": 192,
              "signature": "#[must_use]\npub fn scroll_offset(&self) -> usize;",
              "documentation": "Return the current scroll offset."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/inline_diff_card.rs",
          "sha256": "dbf9247717b55cb5dc6d17f5f9153781b752340368e5e4d49c9a4fae2d2c2ccf",
          "artifactSha256": "1f250b7eeaf7b69426096c043754a1a212373701012ed47286bcc7d4006cc2cc",
          "url": "/reference/source/harness-tui-kit/src/components/chat/inline_diff_card.rs.txt",
          "declarations": [
            {
              "name": "::InlineDiffCard",
              "line": 32,
              "signature": "#[derive(Debug, Clone)]\npub struct InlineDiffCard<'a> {\n\n}",
              "documentation": "Compact inline diff card."
            },
            {
              "name": "::ChangeKind",
              "line": 49,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum ChangeKind {\n    /// File was modified in place.\n    #[default]\n    Edit,\n    /// File was created from scratch.\n    Create,\n    /// File was deleted.\n    Delete,\n    /// File was renamed (or moved).\n    Rename,\n}",
              "documentation": "What kind of change the card represents \u2014 drives the leading\nglyph in the header (\u270e edit / \u271a create / \u2716 delete / \u25b7 rename)."
            },
            {
              "name": "::InlineDiffCard<'a>::new",
              "line": 75,
              "signature": "#[must_use]\npub fn new(file: &'a str, lines: &'a [DiffLine]) -> Self;",
              "documentation": "Construct a card for `file` with the supplied diff slice."
            },
            {
              "name": "::InlineDiffCard<'a>::theme",
              "line": 88,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::InlineDiffCard<'a>::kind",
              "line": 95,
              "signature": "#[must_use]\npub fn kind(mut self, kind: ChangeKind) -> Self;",
              "documentation": "Override the change kind (drives the header glyph)."
            },
            {
              "name": "::InlineDiffCard<'a>::footer_hint",
              "line": 102,
              "signature": "#[must_use]\npub fn footer_hint(mut self, hint: &'a str) -> Self;",
              "documentation": "Replace the footer hint. Pass `\"\"` to suppress the footer."
            },
            {
              "name": "::InlineDiffCard<'a>::max_body_rows",
              "line": 109,
              "signature": "#[must_use]\npub fn max_body_rows(mut self, rows: u16) -> Self;",
              "documentation": "Override how many body rows the card may show."
            },
            {
              "name": "::InlineDiffCard<'a>::suggested_height",
              "line": 116,
              "signature": "#[must_use]\npub fn suggested_height(&self) -> u16;",
              "documentation": "Suggested total height: chrome + header + max body + footer."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/input.rs",
          "sha256": "80eb172ad751c4cf03e0d1b56108b9eca8caf8cc1d9bb58f64f99b9b0ac031f8",
          "artifactSha256": "d313aa8aac36c9dc7fb2469baa2e70b7ab4fbd4c67687e3157a7bb36ff8fc976",
          "url": "/reference/source/harness-tui-kit/src/components/chat/input.rs.txt",
          "declarations": [
            {
              "name": "::InputBar",
              "line": 36,
              "signature": "#[derive(Debug, Clone)]\npub struct InputBar<'a> {\n\n}",
              "documentation": "Multi-line text input bar for chat.\n\nRenders a text input area with placeholder text, character count,\nand disabled state support. The application is responsible for\nfeeding keyboard events to [`InputBarState`]."
            },
            {
              "name": "::InputBar<'a>::new",
              "line": 59,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new input bar."
            },
            {
              "name": "::InputBar<'a>::bg_color",
              "line": 75,
              "signature": "#[must_use]\npub fn bg_color(mut self, color: ratatui::style::Color) -> Self;",
              "documentation": "Override the input's background color. Useful when embedding\ninside a card surface (e.g., the welcome screen's focus card,\nwhich uses `theme.bg_elevated`)."
            },
            {
              "name": "::InputBar<'a>::show_prompt",
              "line": 82,
              "signature": "#[must_use]\npub fn show_prompt(mut self, show: bool) -> Self;",
              "documentation": "Toggle the soft \"\u276f\" prompt indicator (default: on)."
            },
            {
              "name": "::InputBar<'a>::show_top_border",
              "line": 91,
              "signature": "#[must_use]\npub fn show_top_border(mut self, show: bool) -> Self;",
              "documentation": "Toggle the thin divider line above the input (default: on).\nSet this to `false` when embedding the input inside a panel\nthat already provides its own border."
            },
            {
              "name": "::InputBar<'a>::placeholder",
              "line": 98,
              "signature": "#[must_use]\npub fn placeholder(mut self, text: &'a str) -> Self;",
              "documentation": "Set the placeholder text."
            },
            {
              "name": "::InputBar<'a>::disabled",
              "line": 105,
              "signature": "#[must_use]\npub fn disabled(mut self, disabled: bool) -> Self;",
              "documentation": "Set whether the input is disabled."
            },
            {
              "name": "::InputBar<'a>::show_char_count",
              "line": 112,
              "signature": "#[must_use]\npub fn show_char_count(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show the character count."
            },
            {
              "name": "::InputBar<'a>::theme",
              "line": 119,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::InputBarState",
              "line": 133,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct InputBarState {\n\n}",
              "documentation": "Mutable state for [`InputBar`], persists across frames."
            },
            {
              "name": "::InputBarState::text",
              "line": 147,
              "signature": "#[must_use]\npub fn text(&self) -> &str;",
              "documentation": "Get the current text content."
            },
            {
              "name": "::InputBarState::take_text",
              "line": 154,
              "signature": "pub fn take_text(&mut self) -> String;",
              "documentation": "Take the current text, replacing it with empty string.\n\nAdds the text to history if non-empty."
            },
            {
              "name": "::InputBarState::set_text",
              "line": 165,
              "signature": "pub fn set_text(&mut self, text: impl Into<String>);",
              "documentation": "Set the text content."
            },
            {
              "name": "::InputBarState::insert_char",
              "line": 171,
              "signature": "pub fn insert_char(&mut self, ch: char);",
              "documentation": "Insert a character at the cursor position."
            },
            {
              "name": "::InputBarState::delete_char_before",
              "line": 181,
              "signature": "pub fn delete_char_before(&mut self);",
              "documentation": "Delete the character before the cursor (backspace)."
            },
            {
              "name": "::InputBarState::move_cursor_left",
              "line": 195,
              "signature": "pub fn move_cursor_left(&mut self);",
              "documentation": "Move cursor left by one character."
            },
            {
              "name": "::InputBarState::move_cursor_right",
              "line": 206,
              "signature": "pub fn move_cursor_right(&mut self);",
              "documentation": "Move cursor right by one character."
            },
            {
              "name": "::InputBarState::history_prev",
              "line": 217,
              "signature": "pub fn history_prev(&mut self);",
              "documentation": "Navigate to the previous history entry."
            },
            {
              "name": "::InputBarState::history_next",
              "line": 233,
              "signature": "pub fn history_next(&mut self);",
              "documentation": "Navigate to the next history entry."
            },
            {
              "name": "::InputBarState::char_count",
              "line": 251,
              "signature": "#[must_use]\npub fn char_count(&self) -> usize;",
              "documentation": "Get the character count."
            },
            {
              "name": "::InputBarState::is_empty",
              "line": 257,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "Check if the input is empty."
            },
            {
              "name": "::InputBarState::clear",
              "line": 262,
              "signature": "pub fn clear(&mut self);",
              "documentation": "Clear the input."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/markdown.rs",
          "sha256": "67b7a19a9dc057a9fb24192e15baa49f14231b11c6b80ef7303b7fd4ca27b59b",
          "artifactSha256": "ac0b93af4b3bf3e4098dba96917d51694d19057a4305a30278aa3e07cbab57e0",
          "url": "/reference/source/harness-tui-kit/src/components/chat/markdown.rs.txt",
          "declarations": [
            {
              "name": "::MarkdownRenderer",
              "line": 44,
              "signature": "#[derive(Debug, Clone)]\npub struct MarkdownRenderer<'a> {\n\n}",
              "documentation": "Markdown renderer widget.\n\nParses markdown content and renders it with terminal-appropriate styling.\nThis is a stateless `Widget` \u2014 for scrollable markdown, wrap in a\n`ChatTimeline` or use a custom scroll container."
            },
            {
              "name": "::MarkdownRenderer<'a>::new",
              "line": 56,
              "signature": "#[must_use]\npub fn new(content: &'a str) -> Self;",
              "documentation": "Create a new markdown renderer with the given content."
            },
            {
              "name": "::MarkdownRenderer<'a>::theme",
              "line": 66,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::MarkdownRenderer<'a>::wrap_width",
              "line": 73,
              "signature": "#[must_use]\npub fn wrap_width(mut self, width: usize) -> Self;",
              "documentation": "Set the maximum wrap width. If 0, uses the render area width."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/markdown_stream.rs",
          "sha256": "009c8004bee91b1ca4f22814199692dd00fb1519450da23d4507166edb241bf6",
          "artifactSha256": "3e323220213dcf82e3d572e5dcc74b92785abed0990c1eccdbfe17adeee65ea4",
          "url": "/reference/source/harness-tui-kit/src/components/chat/markdown_stream.rs.txt",
          "declarations": [
            {
              "name": "::MarkdownStreamCollector",
              "line": 63,
              "signature": "#[derive(Debug, Clone)]\npub struct MarkdownStreamCollector {\n\n}",
              "documentation": "Newline-gated accumulator for streaming markdown deltas.\n\nThe collector exposes two commit modes:\n\n- [`commit_complete_source`] returns only newly-committed source\n  between the last committed offset and the most recent newline.\n  Returns `None` when no new newline has arrived since the prior\n  commit.\n- [`finalize_and_drain_source`] returns whatever remains, ensuring\n  the result is newline-terminated and resetting the collector.\n\nThe renderer is expected to re-parse the entire accumulated source\neach time so incremental commits do not desynchronize block-level\nconstructs (lists, fenced code blocks, blockquotes) when later\ndeltas arrive. The collector itself is parser-agnostic \u2014 it holds\nraw bytes and offsets only."
            },
            {
              "name": "::MarkdownStreamCollector::new",
              "line": 75,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a collector with the default size cap (4 MiB) and no\nassociated working directory."
            },
            {
              "name": "::MarkdownStreamCollector::with_cwd",
              "line": 90,
              "signature": "#[must_use]\npub fn with_cwd(mut self, cwd: &Path) -> Self;",
              "documentation": "Attach a working directory used by markdown renderers to\nshorten absolute local paths in link displays. The collector\nitself does not parse markdown \u2014 the value is passed through to\nthe renderer alongside the committed source."
            },
            {
              "name": "::MarkdownStreamCollector::max_bytes",
              "line": 99,
              "signature": "#[must_use]\npub fn max_bytes(mut self, max_bytes: usize) -> Self;",
              "documentation": "Override the maximum number of bytes the collector will hold\nbefore refusing further deltas. Useful when wrapping a known-\nsmall adapter or stress-testing."
            },
            {
              "name": "::MarkdownStreamCollector::cwd",
              "line": 107,
              "signature": "#[must_use]\npub fn cwd(&self) -> Option<&Path>;",
              "documentation": "The working directory previously attached via [`with_cwd`], if\nany."
            },
            {
              "name": "::MarkdownStreamCollector::overflowed",
              "line": 115,
              "signature": "#[must_use]\npub fn overflowed(&self) -> bool;",
              "documentation": "True once the collector has refused at least one delta because\nthe buffer hit `max_bytes`. Callers can surface this as a\ntruncation marker in the rendered output."
            },
            {
              "name": "::MarkdownStreamCollector::push_delta",
              "line": 122,
              "signature": "pub fn push_delta(&mut self, delta: &str);",
              "documentation": "Append a streaming delta. Drops deltas that would exceed the\nconfigured size cap; the overflow flag is set so the caller can\nrender a truncation indicator. Empty deltas are a no-op."
            },
            {
              "name": "::MarkdownStreamCollector::commit_complete_source",
              "line": 137,
              "signature": "pub fn commit_complete_source(&mut self) -> Option<String>;",
              "documentation": "Return committed source between the last commit boundary and\nthe most recent newline in the buffer. Returns `None` when no\nnew newline has arrived. Repeated calls without further\n`push_delta` always return `None`."
            },
            {
              "name": "::MarkdownStreamCollector::full_source",
              "line": 151,
              "signature": "#[must_use]\npub fn full_source(&self) -> &str;",
              "documentation": "Return the entire accumulated buffer (committed + uncommitted)\nwithout consuming it. Useful for the renderer when it wants to\nre-parse the full source after a width change."
            },
            {
              "name": "::MarkdownStreamCollector::committed_source",
              "line": 157,
              "signature": "#[must_use]\npub fn committed_source(&self) -> &str;",
              "documentation": "Return only the source committed so far."
            },
            {
              "name": "::MarkdownStreamCollector::pending_source",
              "line": 164,
              "signature": "#[must_use]\npub fn pending_source(&self) -> &str;",
              "documentation": "Return the trailing slice that has not yet been committed\n(everything after the last newline)."
            },
            {
              "name": "::MarkdownStreamCollector::len",
              "line": 170,
              "signature": "#[must_use]\npub fn len(&self) -> usize;",
              "documentation": "Number of bytes buffered so far."
            },
            {
              "name": "::MarkdownStreamCollector::is_empty",
              "line": 176,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "True when the collector holds no buffered source."
            },
            {
              "name": "::MarkdownStreamCollector::finalize_and_drain_source",
              "line": 183,
              "signature": "pub fn finalize_and_drain_source(&mut self) -> String;",
              "documentation": "Drain whatever remains, ensuring the returned chunk ends with\n`\\n` so the markdown parser sees a well-terminated final block.\nResets the collector for reuse."
            },
            {
              "name": "::MarkdownStreamCollector::clear",
              "line": 198,
              "signature": "pub fn clear(&mut self);",
              "documentation": "Clear all buffered source and reset commit state. Preserves the\nconfigured `cwd` and `max_bytes`."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/mod.rs",
          "sha256": "6442d2143ec652d1b3a5d889e950f3c23002562aadb93b8a6dbadb2b1a1cc979",
          "artifactSha256": "2f11eb2f0cde5ae59949146c9b12da8d8daa6c8dd5be43006d3fa7b48fbf3ea1",
          "url": "/reference/source/harness-tui-kit/src/components/chat/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use bubble::{ChatBubble, ChatBubbleState};",
              "line": 21,
              "signature": "pub use bubble::{ChatBubble, ChatBubbleState};",
              "documentation": ""
            },
            {
              "name": "pub use code_block::{CodeBlock, CodeBlockState};",
              "line": 22,
              "signature": "pub use code_block::{CodeBlock, CodeBlockState};",
              "documentation": ""
            },
            {
              "name": "pub use diff_view::{DiffView, DiffViewState};",
              "line": 23,
              "signature": "pub use diff_view::{DiffView, DiffViewState};",
              "documentation": ""
            },
            {
              "name": "pub use document_preview::{DocumentPreviewPane, DocumentPreviewState, PageStyle};",
              "line": 24,
              "signature": "pub use document_preview::{DocumentPreviewPane, DocumentPreviewState, PageStyle};",
              "documentation": ""
            },
            {
              "name": "pub use file_display::{FileDisplay, FileDisplayState};",
              "line": 25,
              "signature": "pub use file_display::{FileDisplay, FileDisplayState};",
              "documentation": ""
            },
            {
              "name": "pub use inline_diff_card::{ChangeKind, InlineDiffCard};",
              "line": 26,
              "signature": "pub use inline_diff_card::{ChangeKind, InlineDiffCard};",
              "documentation": ""
            },
            {
              "name": "pub use input::{InputBar, InputBarState};",
              "line": 27,
              "signature": "pub use input::{InputBar, InputBarState};",
              "documentation": ""
            },
            {
              "name": "pub use markdown::MarkdownRenderer;",
              "line": 28,
              "signature": "pub use markdown::MarkdownRenderer;",
              "documentation": ""
            },
            {
              "name": "pub use markdown_stream::MarkdownStreamCollector;",
              "line": 29,
              "signature": "pub use markdown_stream::MarkdownStreamCollector;",
              "documentation": ""
            },
            {
              "name": "pub use streaming::{StreamingText, StreamingTextState};",
              "line": 30,
              "signature": "pub use streaming::{StreamingText, StreamingTextState};",
              "documentation": ""
            },
            {
              "name": "pub use timeline::{ChatTimeline, ChatTimelineState};",
              "line": 31,
              "signature": "pub use timeline::{ChatTimeline, ChatTimelineState};",
              "documentation": ""
            },
            {
              "name": "pub use tool_call::{ToolCallDisplay, ToolCallState};",
              "line": 32,
              "signature": "pub use tool_call::{ToolCallDisplay, ToolCallState};",
              "documentation": ""
            },
            {
              "name": "pub use tool_call_card::{ToolCallCard, ToolCallCardStatus};",
              "line": 33,
              "signature": "pub use tool_call_card::{ToolCallCard, ToolCallCardStatus};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/streaming.rs",
          "sha256": "6d5733bb6c4acce004ad40bae4f54ae2c42b55a833e9e1611f9cc2f2d7486472",
          "artifactSha256": "e8d242c332af2fbe3342b9be2728ca1289b8cab2653d75a679469a4f8c70942b",
          "url": "/reference/source/harness-tui-kit/src/components/chat/streaming.rs.txt",
          "declarations": [
            {
              "name": "::StreamingText",
              "line": 37,
              "signature": "#[derive(Debug, Clone)]\npub struct StreamingText<'a> {\n\n}",
              "documentation": "Character-by-character streaming text display.\n\nRenders text that has been revealed so far, with a blinking cursor at\nthe end of the revealed content. The application controls how many\ncharacters are revealed by calling methods on [`StreamingTextState`]."
            },
            {
              "name": "::StreamingText<'a>::new",
              "line": 49,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new streaming text widget."
            },
            {
              "name": "::StreamingText<'a>::theme",
              "line": 59,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::StreamingText<'a>::show_cursor",
              "line": 66,
              "signature": "#[must_use]\npub fn show_cursor(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show the blinking cursor."
            },
            {
              "name": "::StreamingText<'a>::tick",
              "line": 73,
              "signature": "#[must_use]\npub fn tick(mut self, tick: usize) -> Self;",
              "documentation": "Set the animation tick for cursor blink."
            },
            {
              "name": "::StreamingTextState",
              "line": 87,
              "signature": "#[derive(Debug, Clone)]\npub struct StreamingTextState {\n\n}",
              "documentation": "Mutable state for [`StreamingText`], persists across frames."
            },
            {
              "name": "::StreamingTextState::new",
              "line": 103,
              "signature": "#[must_use]\npub fn new(text: impl Into<String>) -> Self;",
              "documentation": "Create a new streaming text state with the given full text."
            },
            {
              "name": "::StreamingTextState::full_text",
              "line": 116,
              "signature": "#[must_use]\npub fn full_text(&self) -> &str;",
              "documentation": "Get the full text content."
            },
            {
              "name": "::StreamingTextState::revealed_text",
              "line": 122,
              "signature": "#[must_use]\npub fn revealed_text(&self) -> &str;",
              "documentation": "Get the currently revealed portion of the text."
            },
            {
              "name": "::StreamingTextState::reveal",
              "line": 145,
              "signature": "pub fn reveal(&mut self, n: usize);",
              "documentation": "Reveal the next `n` characters."
            },
            {
              "name": "::StreamingTextState::reveal_all",
              "line": 154,
              "signature": "pub fn reveal_all(&mut self);",
              "documentation": "Reveal all remaining characters instantly."
            },
            {
              "name": "::StreamingTextState::append",
              "line": 160,
              "signature": "pub fn append(&mut self, text: &str);",
              "documentation": "Append additional text to the stream."
            },
            {
              "name": "::StreamingTextState::pause",
              "line": 166,
              "signature": "pub fn pause(&mut self);",
              "documentation": "Pause the streaming reveal."
            },
            {
              "name": "::StreamingTextState::resume",
              "line": 171,
              "signature": "pub fn resume(&mut self);",
              "documentation": "Resume the streaming reveal."
            },
            {
              "name": "::StreamingTextState::is_paused",
              "line": 177,
              "signature": "#[must_use]\npub fn is_paused(&self) -> bool;",
              "documentation": "Check if streaming is paused."
            },
            {
              "name": "::StreamingTextState::is_completed",
              "line": 183,
              "signature": "#[must_use]\npub fn is_completed(&self) -> bool;",
              "documentation": "Check if streaming has completed."
            },
            {
              "name": "::StreamingTextState::revealed_count",
              "line": 189,
              "signature": "#[must_use]\npub fn revealed_count(&self) -> usize;",
              "documentation": "Get the number of revealed characters."
            },
            {
              "name": "::StreamingTextState::total_count",
              "line": 195,
              "signature": "#[must_use]\npub fn total_count(&self) -> usize;",
              "documentation": "Get the total number of characters."
            },
            {
              "name": "::StreamingTextState::scroll_up",
              "line": 200,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up."
            },
            {
              "name": "::StreamingTextState::scroll_down",
              "line": 205,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down."
            },
            {
              "name": "::StreamingTextState::reset",
              "line": 210,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to initial state."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/timeline.rs",
          "sha256": "4e3001a90967ecc471c04755ef88e5cb0ea6f094eb6985648873c18746dcbe8d",
          "artifactSha256": "e26a2a22a521e9ce7ddedfb0f67a55a1f2c23407f3e6aaddf1717d42a5e5bc3c",
          "url": "/reference/source/harness-tui-kit/src/components/chat/timeline.rs.txt",
          "declarations": [
            {
              "name": "::ChatTimeline",
              "line": 43,
              "signature": "#[derive(Debug, Clone)]\npub struct ChatTimeline<'a> {\n\n}",
              "documentation": "Scrollable conversation timeline.\n\nRenders a vertical list of [`ChatBubble`] instances with automatic scrolling,\nmessage grouping by role, and virtual scrolling for large conversation histories."
            },
            {
              "name": "::ChatTimeline<'a>::new",
              "line": 53,
              "signature": "#[must_use]\npub fn new(messages: &'a [ChatMessage]) -> Self;",
              "documentation": "Create a new timeline with the given messages."
            },
            {
              "name": "::ChatTimeline<'a>::theme",
              "line": 62,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::ChatTimelineState",
              "line": 81,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ChatTimelineState {\n\n}",
              "documentation": "Mutable state for [`ChatTimeline`], persists across frames."
            },
            {
              "name": "::ChatTimelineState::new",
              "line": 97,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new empty timeline state with auto-scroll enabled."
            },
            {
              "name": "::ChatTimelineState::messages",
              "line": 106,
              "signature": "#[must_use]\npub fn messages(&self) -> &[ChatMessage];",
              "documentation": "Get a reference to all messages."
            },
            {
              "name": "::ChatTimelineState::message_count",
              "line": 112,
              "signature": "#[must_use]\npub fn message_count(&self) -> usize;",
              "documentation": "Get the number of messages."
            },
            {
              "name": "::ChatTimelineState::push_message",
              "line": 119,
              "signature": "pub fn push_message(&mut self, message: ChatMessage);",
              "documentation": "Push a new message to the timeline.\n\nIf auto-scroll is enabled, scrolls to show the new message."
            },
            {
              "name": "::ChatTimelineState::update_streaming",
              "line": 128,
              "signature": "pub fn update_streaming(&mut self, delta: &str);",
              "documentation": "Update the content of the last message (for streaming updates)."
            },
            {
              "name": "::ChatTimelineState::scroll_up",
              "line": 138,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one message."
            },
            {
              "name": "::ChatTimelineState::scroll_down",
              "line": 146,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one message."
            },
            {
              "name": "::ChatTimelineState::scroll_to_bottom",
              "line": 157,
              "signature": "pub fn scroll_to_bottom(&mut self);",
              "documentation": "Scroll to the bottom of the timeline."
            },
            {
              "name": "::ChatTimelineState::scroll_to_top",
              "line": 163,
              "signature": "pub fn scroll_to_top(&mut self);",
              "documentation": "Scroll to the top of the timeline."
            },
            {
              "name": "::ChatTimelineState::select",
              "line": 169,
              "signature": "pub fn select(&mut self, index: usize);",
              "documentation": "Select the message at the given index."
            },
            {
              "name": "::ChatTimelineState::deselect",
              "line": 185,
              "signature": "pub fn deselect(&mut self);",
              "documentation": "Clear the selection."
            },
            {
              "name": "::ChatTimelineState::is_auto_scroll",
              "line": 195,
              "signature": "#[must_use]\npub fn is_auto_scroll(&self) -> bool;",
              "documentation": "Check if auto-scroll is enabled."
            },
            {
              "name": "::ChatTimelineState::clear",
              "line": 200,
              "signature": "pub fn clear(&mut self);",
              "documentation": "Clear all messages."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/tool_call.rs",
          "sha256": "7e9d696ce1310707f2a208c6663b9a659b64c78f3158c629ea86f9250019358a",
          "artifactSha256": "65a595239339c5764c30c3a5cd5e2d1ebd0ba1842e4b0c1aa203512463c835a2",
          "url": "/reference/source/harness-tui-kit/src/components/chat/tool_call.rs.txt",
          "declarations": [
            {
              "name": "::ToolCallDisplay",
              "line": 45,
              "signature": "#[derive(Debug, Clone)]\npub struct ToolCallDisplay<'a> {\n\n}",
              "documentation": "Expandable tool invocation card.\n\nShows the tool name and status in a compact header. When expanded,\nshows the arguments and output sections."
            },
            {
              "name": "::ToolCallDisplay<'a>::new",
              "line": 55,
              "signature": "#[must_use]\npub fn new(info: &'a ToolCallInfo) -> Self;",
              "documentation": "Create a new tool call display."
            },
            {
              "name": "::ToolCallDisplay<'a>::theme",
              "line": 64,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::ToolCallState",
              "line": 72,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ToolCallState {\n/// Whether the arguments section is expanded.\n\npub args_expanded: bool,\n/// Whether the output section is expanded.\n\npub output_expanded: bool\n}",
              "documentation": "Mutable state for [`ToolCallDisplay`], persists across frames."
            },
            {
              "name": "::ToolCallState::toggle_args",
              "line": 81,
              "signature": "pub fn toggle_args(&mut self);",
              "documentation": "Toggle the arguments section."
            },
            {
              "name": "::ToolCallState::toggle_output",
              "line": 86,
              "signature": "pub fn toggle_output(&mut self);",
              "documentation": "Toggle the output section."
            },
            {
              "name": "::ToolCallState::reset",
              "line": 91,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to default (collapsed) state."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/chat/tool_call_card.rs",
          "sha256": "692381ec3e76b378f4708426476f5a817a6ff925edb191412814346f2612329b",
          "artifactSha256": "f9ce2fef1c2c2e59594a74d749eccfe89451930112d60fef2ebe41c5bd6606f2",
          "url": "/reference/source/harness-tui-kit/src/components/chat/tool_call_card.rs.txt",
          "declarations": [
            {
              "name": "::ToolCallCardStatus",
              "line": 32,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum ToolCallCardStatus {\n    /// Queued but not yet executing.\n    #[default]\n    Pending,\n    /// Currently executing.\n    Running,\n    /// Finished successfully.\n    Success,\n    /// Finished with an error.\n    Failure,\n}",
              "documentation": "Status of a tool call. Drives the leading glyph and accent color."
            },
            {
              "name": "::ToolCallCard",
              "line": 62,
              "signature": "#[derive(Debug, Clone)]\npub struct ToolCallCard<'a> {\n\n}",
              "documentation": "Compact tool-call card."
            },
            {
              "name": "::ToolCallCard<'a>::new",
              "line": 79,
              "signature": "#[must_use]\npub fn new(name: &'a str) -> Self;",
              "documentation": "Build a card. `name` is the tool's user-visible label\n(e.g. `\"ran command\"`, `\"reading file\"`)."
            },
            {
              "name": "::ToolCallCard<'a>::theme",
              "line": 94,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::ToolCallCard<'a>::status",
              "line": 101,
              "signature": "#[must_use]\npub fn status(mut self, status: ToolCallCardStatus) -> Self;",
              "documentation": "Set the tool-call status."
            },
            {
              "name": "::ToolCallCard<'a>::tick",
              "line": 109,
              "signature": "#[must_use]\npub fn tick(mut self, tick: u8) -> Self;",
              "documentation": "Spinner tick for `Running`. Pass a monotonically-increasing\ncounter so the spinner phase advances each frame."
            },
            {
              "name": "::ToolCallCard<'a>::summary",
              "line": 117,
              "signature": "#[must_use]\npub fn summary(mut self, summary: &'a str) -> Self;",
              "documentation": "One-line summary rendered next to the tool name (e.g. the\ncommand being run, the file being read)."
            },
            {
              "name": "::ToolCallCard<'a>::detail",
              "line": 125,
              "signature": "#[must_use]\npub fn detail(mut self, detail: &'a str) -> Self;",
              "documentation": "Indented detail row shown under the summary (e.g. file path,\nargument list). Pass `\"\"` to omit."
            },
            {
              "name": "::ToolCallCard<'a>::result",
              "line": 133,
              "signature": "#[must_use]\npub fn result(mut self, result: &'a str) -> Self;",
              "documentation": "Indented result row shown after detail (e.g. tool output\nsnippet). Pass `\"\"` to omit."
            },
            {
              "name": "::ToolCallCard<'a>::elapsed",
              "line": 140,
              "signature": "#[must_use]\npub fn elapsed(mut self, label: &'a str) -> Self;",
              "documentation": "Right-aligned elapsed-time label (e.g. `\"0.32s\"`)."
            },
            {
              "name": "::ToolCallCard<'a>::measured_height",
              "line": 148,
              "signature": "#[must_use]\npub fn measured_height(&self) -> u16;",
              "documentation": "Estimated rendered height: header + (detail ? 1 : 0) +\n(result ? 1 : 0)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/governance/constitution_view.rs",
          "sha256": "e67728314762521a85f94c8ee1a04adf0e4c32d7e22dc25dce3be4f11218688a",
          "artifactSha256": "456fbee844ddc014cd42bcbf1f054484e4657460403ca89a25383b450eff3405",
          "url": "/reference/source/harness-tui-kit/src/components/governance/constitution_view.rs.txt",
          "declarations": [
            {
              "name": "::ConstitutionView",
              "line": 72,
              "signature": "#[derive(Debug, Clone)]\npub struct ConstitutionView<'a> {\n\n}",
              "documentation": "Scrollable constitution text viewer with YAML-like syntax highlighting.\n\nRenders a text document with:\n- **Line numbers** in a muted gutter on the left.\n- **YAML-like highlighting**: lines where a word is followed by `:` get the\n  key rendered in accent color and the value in primary color. Lines starting\n  with `#` are rendered entirely in muted color as comments.\n- **Scrollable** via [`ConstitutionViewState`].\n- **Section navigation** via optional named sections with line offsets.\n\nAll text is sanitized before rendering to prevent terminal escape injection.\n\n# Examples\n\n```\nuse harness_tui_kit::components::governance::constitution_view::{ConstitutionView, ConstitutionViewState};\nuse harness_tui_kit::Theme;\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet text = \"name: Example\\npurpose: Testing\";\nlet mut state = ConstitutionViewState::default();\nlet area = Rect::new(0, 0, 50, 8);\nlet mut buf = Buffer::empty(area);\nConstitutionView::new(text).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::ConstitutionView<'a>::new",
              "line": 86,
              "signature": "#[must_use]\npub fn new(text: &'a str) -> Self;",
              "documentation": "Create a new constitution view with the given text.\n\nThe text is considered untrusted and will be sanitized before rendering."
            },
            {
              "name": "::ConstitutionView<'a>::theme",
              "line": 96,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme used for all color tokens."
            },
            {
              "name": "::ConstitutionView<'a>::sections",
              "line": 106,
              "signature": "#[must_use]\npub fn sections(mut self, sections: &'a [(&'a str, usize)]) -> Self;",
              "documentation": "Set named sections with their starting line offsets (0-indexed).\n\nSections are used for jump navigation via [`ConstitutionViewState::jump_to_section`].\nThe section name may appear in a header when the section is active."
            },
            {
              "name": "::ConstitutionViewState",
              "line": 116,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ConstitutionViewState {\n\n}",
              "documentation": "Mutable state for [`ConstitutionView`], persisted across frames.\n\nTracks scroll offset and selected section index for jump navigation."
            },
            {
              "name": "::ConstitutionViewState::scroll_up",
              "line": 125,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one source line, clamping at zero."
            },
            {
              "name": "::ConstitutionViewState::scroll_down",
              "line": 133,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one source line.\n\nThe render pass clamps `scroll_offset` to the last line, so this will\nnever scroll past the end of the document."
            },
            {
              "name": "::ConstitutionViewState::jump_to_section",
              "line": 140,
              "signature": "pub fn jump_to_section(&mut self, index: usize, sections: &[(&str, usize)]);",
              "documentation": "Jump to a named section by index, scrolling to its line offset.\n\nIf `index` is out of range for the provided sections slice, this is a no-op."
            },
            {
              "name": "::ConstitutionViewState::next_section",
              "line": 150,
              "signature": "pub fn next_section(&mut self, sections: &[(&str, usize)]);",
              "documentation": "Move to the next section, wrapping around if at the end.\n\nIf no sections are provided or the list is empty, this is a no-op."
            },
            {
              "name": "::ConstitutionViewState::prev_section",
              "line": 165,
              "signature": "pub fn prev_section(&mut self, sections: &[(&str, usize)]);",
              "documentation": "Move to the previous section, wrapping around if at the beginning.\n\nIf no sections are provided or the list is empty, this is a no-op."
            },
            {
              "name": "::ConstitutionViewState::scroll_offset",
              "line": 179,
              "signature": "#[must_use]\npub fn scroll_offset(&self) -> usize;",
              "documentation": "Return the current scroll offset."
            },
            {
              "name": "::ConstitutionViewState::selected_section",
              "line": 185,
              "signature": "#[must_use]\npub fn selected_section(&self) -> usize;",
              "documentation": "Return the currently selected section index."
            },
            {
              "name": "::ConstitutionViewState::reset",
              "line": 190,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to defaults (scroll = 0, section = 0)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/governance/mod.rs",
          "sha256": "c743cfc78e106f927f034cbbb6f918b0147ec07282a8a885e4b4b43b327b32d0",
          "artifactSha256": "71218119257ed429a9a9341d19e6ee8ca0730b5d93cc9e7bed8be0a5a71d23d4",
          "url": "/reference/source/harness-tui-kit/src/components/governance/mod.rs.txt",
          "declarations": [
            {
              "name": "constitution_view",
              "line": 5,
              "signature": "pub mod constitution_view;",
              "documentation": "Governance components.\n\nComponents for proposals, voting, treasury display, and constitution viewing."
            },
            {
              "name": "proposal_card",
              "line": 6,
              "signature": "pub mod proposal_card;",
              "documentation": ""
            },
            {
              "name": "treasury_display",
              "line": 7,
              "signature": "pub mod treasury_display;",
              "documentation": ""
            },
            {
              "name": "voting_panel",
              "line": 8,
              "signature": "pub mod voting_panel;",
              "documentation": ""
            },
            {
              "name": "pub use constitution_view::{ConstitutionView, ConstitutionViewState};",
              "line": 10,
              "signature": "pub use constitution_view::{ConstitutionView, ConstitutionViewState};",
              "documentation": ""
            },
            {
              "name": "pub use proposal_card::{ProposalCard, ProposalCardState};",
              "line": 11,
              "signature": "pub use proposal_card::{ProposalCard, ProposalCardState};",
              "documentation": ""
            },
            {
              "name": "pub use treasury_display::TreasuryDisplay;",
              "line": 12,
              "signature": "pub use treasury_display::TreasuryDisplay;",
              "documentation": ""
            },
            {
              "name": "pub use voting_panel::{VotingPanel, VotingPanelState};",
              "line": 13,
              "signature": "pub use voting_panel::{VotingPanel, VotingPanelState};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/governance/proposal_card.rs",
          "sha256": "2637584cf9a7d69cd183e670f08e1190d3a37d01828959acad788175eb2bf4dc",
          "artifactSha256": "1f8354ba3c70cf4485bde3d85b2184d9cce07fdd68d878837e550ae6340ce84a",
          "url": "/reference/source/harness-tui-kit/src/components/governance/proposal_card.rs.txt",
          "declarations": [
            {
              "name": "::ProposalCard",
              "line": 65,
              "signature": "#[derive(Debug, Clone)]\npub struct ProposalCard<'a> {\n\n}",
              "documentation": "Governance proposal card.\n\nDisplays a [`ProposalInfo`] including title, kind badge, status badge,\nvote tally bar, quorum progress, deadline, and creator. In compact mode,\nonly the title and status are shown on a single line. In expanded mode\n(toggled via [`ProposalCardState`]), all details are visible.\n\nThis is a [`StatefulWidget`] that renders against [`ProposalCardState`].\n\n# Examples\n\n```\nuse harness_tui_kit::{ProposalCard, ProposalCardState, ProposalInfo, ProposalKind, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Budget Increase\", ProposalKind::Treasury);\nlet mut state = ProposalCardState::default();\nlet area = Rect::new(0, 0, 50, 1);\nlet mut buf = Buffer::empty(area);\nProposalCard::new(&proposal).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::ProposalCard<'a>::new",
              "line": 88,
              "signature": "#[must_use]\npub fn new(proposal: &'a ProposalInfo) -> Self;",
              "documentation": "Create a new proposal card for the given proposal.\n\nDefaults to the standard dark theme with compact mode off.\n\n# Examples\n\n```\nuse harness_tui_kit::{ProposalCard, ProposalInfo, ProposalKind};\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Test\", ProposalKind::General);\nlet card = ProposalCard::new(&proposal);\n```"
            },
            {
              "name": "::ProposalCard<'a>::theme",
              "line": 108,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme.\n\n# Examples\n\n```\nuse harness_tui_kit::{ProposalCard, ProposalInfo, ProposalKind, Theme};\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Test\", ProposalKind::General);\nlet theme = Theme::midnight();\nlet card = ProposalCard::new(&proposal).theme(&theme);\n```"
            },
            {
              "name": "::ProposalCard<'a>::compact",
              "line": 127,
              "signature": "#[must_use]\npub fn compact(mut self, compact: bool) -> Self;",
              "documentation": "Force compact (single-line) rendering regardless of expand state.\n\nWhen `true`, the card always renders in a single line even if\n[`ProposalCardState::expanded`] is `true`.\n\n# Examples\n\n```\nuse harness_tui_kit::{ProposalCard, ProposalInfo, ProposalKind};\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Test\", ProposalKind::General);\nlet card = ProposalCard::new(&proposal).compact(true);\n```"
            },
            {
              "name": "::ProposalCardState",
              "line": 149,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ProposalCardState {\n\n}",
              "documentation": "Mutable state for [`ProposalCard`], persisted across frames.\n\nTracks whether the card is in expanded or compact display mode.\n\n# Examples\n\n```\nuse harness_tui_kit::ProposalCardState;\n\nlet mut state = ProposalCardState::default();\nassert!(!state.is_expanded());\n\nstate.toggle_expand();\nassert!(state.is_expanded());\n```"
            },
            {
              "name": "::ProposalCardState::toggle_expand",
              "line": 156,
              "signature": "pub fn toggle_expand(&mut self);",
              "documentation": "Toggle between expanded and compact mode."
            },
            {
              "name": "::ProposalCardState::is_expanded",
              "line": 162,
              "signature": "#[must_use]\npub fn is_expanded(&self) -> bool;",
              "documentation": "Returns `true` if the card is in expanded mode."
            },
            {
              "name": "::ProposalCardState::reset",
              "line": 167,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to default (compact) state."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/governance/treasury_display.rs",
          "sha256": "4d79417bb4cfc318b43565c25938677284b41f4c333adb100b6859151a565132",
          "artifactSha256": "8b81a07bc8aa01f60703aaefc2c5f112dfabb4e42376bef6f36ecbd840275656",
          "url": "/reference/source/harness-tui-kit/src/components/governance/treasury_display.rs.txt",
          "declarations": [
            {
              "name": "::TreasuryDisplay",
              "line": 73,
              "signature": "#[derive(Debug, Clone)]\npub struct TreasuryDisplay<'a> {\n\n}",
              "documentation": "Displays treasury balance, recent transactions, and daily spend progress.\n\nThe component renders four sections vertically:\n- **Row 0**: Balance in bold accent with commas as thousands separators.\n- **Row 1**: Currency code and chain label in muted text.\n- **Rows 2..N**: Recent transactions with direction arrows, amount, and description.\n- **Last row**: Daily spend progress bar showing `daily_spent_cents / daily_limit_cents`.\n\n# Examples\n\n```\nuse harness_tui_kit::{TreasuryDisplay, TreasuryInfo, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet info = TreasuryInfo::new(500_00, \"USD\", \"Solana\");\nlet area = Rect::new(0, 0, 40, 6);\nlet mut buf = Buffer::empty(area);\nTreasuryDisplay::new(&info).render(area, &mut buf);\n```"
            },
            {
              "name": "::TreasuryDisplay<'a>::new",
              "line": 85,
              "signature": "#[must_use]\npub fn new(treasury: &'a TreasuryInfo) -> Self;",
              "documentation": "Create a new treasury display for the given treasury info."
            },
            {
              "name": "::TreasuryDisplay<'a>::theme",
              "line": 95,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme used for all color tokens."
            },
            {
              "name": "::TreasuryDisplay<'a>::max_transactions",
              "line": 105,
              "signature": "#[must_use]\npub fn max_transactions(mut self, max: usize) -> Self;",
              "documentation": "Set the maximum number of recent transactions to display.\n\nDefaults to 5. If the treasury has fewer transactions than this limit,\nall transactions are shown."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/governance/voting_panel.rs",
          "sha256": "ae2c8c3e8eb9b5d5be0d54e9d43737a08667c43d5a2f5926134db6bb1ff0fe7f",
          "artifactSha256": "bda3f5005fdee2757e54574e81993619fad7f5f841a3abdf3c42674d9fb3dc78",
          "url": "/reference/source/harness-tui-kit/src/components/governance/voting_panel.rs.txt",
          "declarations": [
            {
              "name": "::VotingPanel",
              "line": 86,
              "signature": "#[derive(Debug, Clone)]\npub struct VotingPanel<'a> {\n\n}",
              "documentation": "Governance voting panel.\n\nDisplays current vote tallies with percentages, three selectable vote\noptions with keyboard hints, the user's current vote (if any), and a\nquorum progress bar. Selection navigation is tracked by [`VotingPanelState`].\n\nThis is a [`StatefulWidget`] that renders against [`VotingPanelState`].\n\n# Examples\n\n```\nuse harness_tui_kit::{VotingPanel, VotingPanelState, ProposalInfo, ProposalKind};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Test\", ProposalKind::General);\nlet mut state = VotingPanelState::default();\nlet area = Rect::new(0, 0, 40, 7);\nlet mut buf = Buffer::empty(area);\nVotingPanel::new(&proposal).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::VotingPanel<'a>::new",
              "line": 109,
              "signature": "#[must_use]\npub fn new(proposal: &'a ProposalInfo) -> Self;",
              "documentation": "Create a new voting panel for the given proposal.\n\nDefaults to the standard dark theme with no current vote.\n\n# Examples\n\n```\nuse harness_tui_kit::{VotingPanel, ProposalInfo, ProposalKind};\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Test\", ProposalKind::General);\nlet panel = VotingPanel::new(&proposal);\n```"
            },
            {
              "name": "::VotingPanel<'a>::theme",
              "line": 129,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme.\n\n# Examples\n\n```\nuse harness_tui_kit::{VotingPanel, ProposalInfo, ProposalKind, Theme};\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Test\", ProposalKind::General);\nlet theme = Theme::midnight();\nlet panel = VotingPanel::new(&proposal).theme(&theme);\n```"
            },
            {
              "name": "::VotingPanel<'a>::current_vote",
              "line": 145,
              "signature": "#[must_use]\npub fn current_vote(mut self, vote: Option<VoteChoice>) -> Self;",
              "documentation": "Set the user's current vote, shown with a checkmark indicator.\n\n# Examples\n\n```\nuse harness_tui_kit::{VotingPanel, ProposalInfo, ProposalKind, VoteChoice};\n\nlet proposal = ProposalInfo::new(\"p-1\", \"Test\", ProposalKind::General);\nlet panel = VotingPanel::new(&proposal).current_vote(Some(VoteChoice::Yes));\n```"
            },
            {
              "name": "::VotingPanelState",
              "line": 167,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct VotingPanelState {\n\n}",
              "documentation": "Mutable state for [`VotingPanel`], persisted across frames.\n\nTracks which vote option is currently selected (highlighted).\n\n# Examples\n\n```\nuse harness_tui_kit::VotingPanelState;\n\nlet mut state = VotingPanelState::default();\nassert_eq!(state.selected_index(), 0);\n\nstate.select_next();\nassert_eq!(state.selected_index(), 1);\n```"
            },
            {
              "name": "::VotingPanelState::select_next",
              "line": 174,
              "signature": "pub fn select_next(&mut self);",
              "documentation": "Move selection to the next option, wrapping around."
            },
            {
              "name": "::VotingPanelState::select_prev",
              "line": 179,
              "signature": "pub fn select_prev(&mut self);",
              "documentation": "Move selection to the previous option, wrapping around."
            },
            {
              "name": "::VotingPanelState::confirm",
              "line": 192,
              "signature": "#[must_use]\npub fn confirm(&self) -> Option<VoteChoice>;",
              "documentation": "Confirm the current selection and return the corresponding [`VoteChoice`].\n\nReturns [`None`] if the selected index is somehow out of bounds\n(should not happen in normal usage)."
            },
            {
              "name": "::VotingPanelState::selected_index",
              "line": 198,
              "signature": "#[must_use]\npub fn selected_index(&self) -> usize;",
              "documentation": "Return the currently selected index (0=Yes, 1=No, 2=Abstain)."
            },
            {
              "name": "::VotingPanelState::reset",
              "line": 203,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to default state (first option selected)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/harness/attribution_table.rs",
          "sha256": "0d61477f240ba987763c7f2aee21685a315d79b869bf9df57abd239b898732ca",
          "artifactSha256": "f8e528fe7e89534d1264763de91a2ab408679ed8ac52a92d7241dbc0f02dabb6",
          "url": "/reference/source/harness-tui-kit/src/components/harness/attribution_table.rs.txt",
          "declarations": [
            {
              "name": "::AttributionTaskOutcomeBadge",
              "line": 20,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum AttributionTaskOutcomeBadge {\n    /// Task passed.\n    Pass,\n    /// Task failed.\n    Fail,\n    /// Task did not run.\n    NotRun,\n}",
              "documentation": "Lightweight outcome badge mirroring `harness_sdk::TaskOutcome`.\nThe kit defines its own enum so it has no SDK build dependency;\nthe SDK consumer maps from the typed enum."
            },
            {
              "name": "::AttributionTableRow",
              "line": 52,
              "signature": "#[derive(Debug, Clone)]\npub struct AttributionTableRow {\n/// Task name.\n\npub task: String,\n/// Outcome before the iteration's edits.\n\npub before: AttributionTaskOutcomeBadge,\n/// Outcome after the iteration's edits.\n\npub after: AttributionTaskOutcomeBadge\n}",
              "documentation": "One row of the attribution table.\n\nSDK consumers populate one of these from each\n`harness_sdk::TaskDelta`."
            },
            {
              "name": "::AttributionTableRow::is_fix",
              "line": 64,
              "signature": "#[must_use]\npub fn is_fix(&self) -> bool;",
              "documentation": "True when this row represents a fix (Fail \u2192 Pass)."
            },
            {
              "name": "::AttributionTableRow::is_regression",
              "line": 71,
              "signature": "#[must_use]\npub fn is_regression(&self) -> bool;",
              "documentation": "True when this row represents a regression (Pass \u2192 Fail)."
            },
            {
              "name": "::AttributionTable",
              "line": 79,
              "signature": "#[derive(Debug, Clone)]\npub struct AttributionTable<'a> {\n\n}",
              "documentation": "Widget rendering a list of [`AttributionTableRow`]s."
            },
            {
              "name": "::AttributionTable<'a>::new",
              "line": 89,
              "signature": "#[must_use]\npub fn new(rows: &'a [AttributionTableRow]) -> Self;",
              "documentation": "Construct a new table."
            },
            {
              "name": "::AttributionTable<'a>::theme",
              "line": 100,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::AttributionTable<'a>::title",
              "line": 107,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Override the panel title."
            },
            {
              "name": "::AttributionTable<'a>::no_border",
              "line": 115,
              "signature": "#[must_use]\npub fn no_border(mut self) -> Self;",
              "documentation": "Disable the border block \u2014 useful when embedding in another\ncontainer."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/harness/component_tree.rs",
          "sha256": "c2ab4ba26ebc1b7d59aeda6453043ee9a89ba8e83056d01d0018295ed572a489",
          "artifactSha256": "c96e65830b3956bf45e610fa71150f01a0fea695f62f21f6e5edb831b6bd7a49",
          "url": "/reference/source/harness-tui-kit/src/components/harness/component_tree.rs.txt",
          "declarations": [
            {
              "name": "::HarnessComponentStatus",
              "line": 17,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum HarnessComponentStatus {\n    /// Editable + currently in sync with the last commit.\n    Clean,\n    /// Editable + has uncommitted edits in the current iteration.\n    Dirty,\n    /// Read-only \u2014 the runtime owns it (e.g. `ShortTermMemory`).\n    ReadOnly,\n}",
              "documentation": "Status of one harness component (mirrors the AHE evolve loop's\nview of the workspace \u2014 dirty / clean / read-only)."
            },
            {
              "name": "::HarnessComponentRow",
              "line": 38,
              "signature": "#[derive(Debug, Clone)]\npub struct HarnessComponentRow {\n/// Stable id (e.g. `\"system_prompt\"`). The SDK consumer sets\n\n/// this from `HarnessComponentKind::as_key()`.\n\npub id: String,\n/// Human-readable label (e.g. `\"system prompt\"`).\n\npub label: String,\n/// Mount path relative to the workspace root.\n\npub mount: String,\n/// Status badge.\n\npub status: HarnessComponentStatus,\n/// Number of edits applied to this component in the current\n\n/// iteration. Rendered as `+N` next to the label.\n\npub edit_count: u32\n}",
              "documentation": "One row in the [`HarnessComponentTree`]."
            },
            {
              "name": "::HarnessComponentTreeState",
              "line": 55,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct HarnessComponentTreeState {\n\n}",
              "documentation": "Persistent state for [`HarnessComponentTree`] (focused row)."
            },
            {
              "name": "::HarnessComponentTreeState::selected",
              "line": 62,
              "signature": "#[must_use]\npub fn selected(&self) -> usize;",
              "documentation": "Currently-focused index."
            },
            {
              "name": "::HarnessComponentTreeState::move_down",
              "line": 67,
              "signature": "pub fn move_down(&mut self, len: usize);",
              "documentation": "Move focus down by one row, clamped to `len - 1`."
            },
            {
              "name": "::HarnessComponentTreeState::move_up",
              "line": 76,
              "signature": "pub fn move_up(&mut self);",
              "documentation": "Move focus up by one row."
            },
            {
              "name": "::HarnessComponentTreeState::reset",
              "line": 81,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset focus to the first row."
            },
            {
              "name": "::HarnessComponentTree",
              "line": 88,
              "signature": "#[derive(Debug, Clone)]\npub struct HarnessComponentTree<'a> {\n\n}",
              "documentation": "Vertical list of harness components with focus + status."
            },
            {
              "name": "::HarnessComponentTree<'a>::new",
              "line": 97,
              "signature": "#[must_use]\npub fn new(rows: &'a [HarnessComponentRow]) -> Self;",
              "documentation": "Build a new tree over `rows`."
            },
            {
              "name": "::HarnessComponentTree<'a>::theme",
              "line": 107,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::HarnessComponentTree<'a>::title",
              "line": 114,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Override the panel title (default: `\"Harness\"`)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/harness/manifest_view.rs",
          "sha256": "b039f74e639e62bcb39a695e5f22a7bd77cc9036c39a02479419136a23a422f0",
          "artifactSha256": "2e6c4191c580007d62d1c4108d38c34e64582f4a7baedc8d9f7152b030a2b9e8",
          "url": "/reference/source/harness-tui-kit/src/components/harness/manifest_view.rs.txt",
          "declarations": [
            {
              "name": "::ManifestVerdictBadge",
              "line": 19,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum ManifestVerdictBadge {\n    /// Edit not yet evaluated (this iteration's fresh manifest).\n    Pending,\n    /// `AttributionDecision::Confirmed`.\n    Confirmed,\n    /// `AttributionDecision::PartiallyConfirmed`.\n    PartiallyConfirmed,\n    /// `AttributionDecision::Refuted`.\n    Refuted,\n    /// `AttributionDecision::UnfalsifiableContract`.\n    UnfalsifiableContract,\n}",
              "documentation": "Verdict badge mirroring `harness_sdk::AttributionDecision`.\nThe kit defines its own enum so it has zero AHE / SDK build\ndependency; the SDK consumer maps from the typed enum."
            },
            {
              "name": "::ManifestEntryView",
              "line": 81,
              "signature": "#[derive(Debug, Clone)]\npub struct ManifestEntryView {\n/// Entry id (uuid-as-string).\n\npub id: String,\n/// One-line summary of the targeted fix.\n\npub targeted_fix: String,\n/// Diagnosed root cause.\n\npub root_cause: String,\n/// Free-form list of failure evidence items.\n\npub failure_evidence: Vec<String>,\n/// Tasks the contract claims will be fixed.\n\npub expected_fixes: Vec<String>,\n/// Tasks the contract flags as at-risk for regression.\n\npub at_risk_regressions: Vec<String>,\n/// Verdict badge.\n\npub verdict: ManifestVerdictBadge,\n/// Component label (e.g. `\"system prompt\"`) the edit targets.\n\npub component_label: String,\n/// Path the edit touched.\n\npub edit_path: String\n}",
              "documentation": "Lightweight manifest entry view.\n\nSDK consumers construct one of these from a\n`harness_sdk::ManifestEntry` + the corresponding\n`AttributionVerdict` (or `ManifestVerdictBadge::Pending` if the\nedit hasn't been scored yet)."
            },
            {
              "name": "::ChangeManifestView",
              "line": 104,
              "signature": "#[derive(Debug, Clone)]\npub struct ChangeManifestView {\n\n}",
              "documentation": "Transcript cell wrapping one [`ManifestEntryView`]."
            },
            {
              "name": "::ChangeManifestView::new",
              "line": 111,
              "signature": "#[must_use]\npub fn new(entry: ManifestEntryView) -> Self;",
              "documentation": "Construct a view over an entry."
            },
            {
              "name": "::ChangeManifestView::entry",
              "line": 117,
              "signature": "#[must_use]\npub fn entry(&self) -> &ManifestEntryView;",
              "documentation": "Read-only access to the underlying view."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/harness/mod.rs",
          "sha256": "2b5aa9d20f01f0b231deef4774d0438b5090f2b1d71822f5260328eab9f3ca38",
          "artifactSha256": "f17909ee47f04e4c4866e0ec68cdf25bbe21f3e4be2303213acd84c465a18ca6",
          "url": "/reference/source/harness-tui-kit/src/components/harness/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use attribution_table::{AttributionTable, AttributionTableRow, AttributionTaskOutcomeBadge};",
              "line": 21,
              "signature": "pub use attribution_table::{AttributionTable, AttributionTableRow, AttributionTaskOutcomeBadge};",
              "documentation": ""
            },
            {
              "name": "pub use component_tree::{\n    HarnessComponentRow, HarnessComponentStatus, HarnessComponentTree, HarnessComponentTreeState,\n};",
              "line": 22,
              "signature": "pub use component_tree::{\n    HarnessComponentRow, HarnessComponentStatus, HarnessComponentTree, HarnessComponentTreeState,\n};",
              "documentation": ""
            },
            {
              "name": "pub use manifest_view::{ChangeManifestView, ManifestEntryView, ManifestVerdictBadge};",
              "line": 25,
              "signature": "pub use manifest_view::{ChangeManifestView, ManifestEntryView, ManifestVerdictBadge};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/approval_cell.rs",
          "sha256": "c0b904794d02bcba3ae09dbd25c9bb348300fc4386396d6255fbc3d739995f81",
          "artifactSha256": "32319296e928b6b0cbb4b1239d15ca695bc9c4fbd605b4f6a70d5cea73d795e0",
          "url": "/reference/source/harness-tui-kit/src/components/history/approval_cell.rs.txt",
          "declarations": [
            {
              "name": "::ApprovalState",
              "line": 22,
              "signature": "#[derive(Debug, Clone, PartialEq)]\npub enum ApprovalState {\n    /// The agent is waiting for the user's decision.\n    Pending,\n    /// The user resolved the request.\n    Resolved(PermissionDecision),\n}",
              "documentation": "Lifecycle state of an [`ApprovalCell`]."
            },
            {
              "name": "::ApprovalCell",
              "line": 31,
              "signature": "#[derive(Debug, Clone)]\npub struct ApprovalCell {\n\n}",
              "documentation": "A privileged-action request rendered as a transcript row."
            },
            {
              "name": "::ApprovalCell::pending",
              "line": 39,
              "signature": "#[must_use]\npub fn pending(request: PermissionRequest) -> Self;",
              "documentation": "Create a pending cell from a freshly-issued request."
            },
            {
              "name": "::ApprovalCell::resolved",
              "line": 48,
              "signature": "#[must_use]\npub fn resolved(request: PermissionRequest, decision: PermissionDecision) -> Self;",
              "documentation": "Create a resolved cell, attaching the decision the user made."
            },
            {
              "name": "::ApprovalCell::request",
              "line": 57,
              "signature": "#[must_use]\npub fn request(&self) -> &PermissionRequest;",
              "documentation": "Read-only access to the underlying request."
            },
            {
              "name": "::ApprovalCell::state",
              "line": 63,
              "signature": "#[must_use]\npub fn state(&self) -> &ApprovalState;",
              "documentation": "Read-only access to the lifecycle state."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/assistant_cell.rs",
          "sha256": "3072e0bcc832aa4a3b8b8e1c6a82c4f2902865356e5054ae069fea818c0cee1c",
          "artifactSha256": "b3bcb19de5898cc6e9635dc1823b6be83a69ff3046db50243b5806d68c0cbbed",
          "url": "/reference/source/harness-tui-kit/src/components/history/assistant_cell.rs.txt",
          "declarations": [
            {
              "name": "::AssistantCell",
              "line": 25,
              "signature": "#[derive(Debug, Clone)]\npub struct AssistantCell {\n\n}",
              "documentation": "An assistant / agent turn in the transcript.\n\nHolds an immutable snapshot of the markdown source. Stream\nadapters typically rebuild a fresh `AssistantCell` each commit\nboundary so `display_lines` always sees a fully-formed source\nstring."
            },
            {
              "name": "::AssistantCell::new",
              "line": 36,
              "signature": "#[must_use]\npub fn new(sender: impl Into<String>, body: impl Into<String>) -> Self;",
              "documentation": "Create a new cell with the given sender label and markdown\nbody. Both inputs are sanitized at construction time."
            },
            {
              "name": "::AssistantCell::sender_style",
              "line": 47,
              "signature": "#[must_use]\npub fn sender_style(mut self, style: Style) -> Self;",
              "documentation": "Override the sender header style."
            },
            {
              "name": "::AssistantCell::continuation",
              "line": 57,
              "signature": "#[must_use]\npub fn continuation(mut self) -> Self;",
              "documentation": "Mark this cell as a continuation of the previous assistant\nturn (e.g. a fresh commit boundary mid-stream). The\n[`super::HistoryView`] uses this flag to suppress the\nduplicate `\u25cf {sender}` header."
            },
            {
              "name": "::AssistantCell::body",
              "line": 64,
              "signature": "#[must_use]\npub fn body(&self) -> &str;",
              "documentation": "Read-only access to the sanitized body."
            },
            {
              "name": "::AssistantCell::sender",
              "line": 70,
              "signature": "#[must_use]\npub fn sender(&self) -> &str;",
              "documentation": "Read-only access to the sanitized sender label."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/cell.rs",
          "sha256": "9fbac8239b612ae5633d3b22f70c8e5813785748060588b969bae1ac06ecd7bb",
          "artifactSha256": "e17c94dd0453a59aa076b8ec74c011f8420efc6d1b9bb673827d02cb0127b14c",
          "url": "/reference/source/harness-tui-kit/src/components/history/cell.rs.txt",
          "declarations": [
            {
              "name": "::HistoryCell",
              "line": 26,
              "signature": "pub trait HistoryCell: Debug + Send + Sync {\n    /// The logical lines displayed in the main chat viewport.\n    fn display_lines(&self, width: u16) -> Vec<Line<'static>>;\n\n    /// Number of viewport rows needed to render this cell at `width`.\n    /// Defaults to the count of logical lines returned by\n    /// [`Self::display_lines`]. Override when the cell wraps content\n    /// or contains lines wider than `width`.\n    fn desired_height(&self, width: u16) -> u16 ;\n\n    /// Lines for the transcript overlay (e.g. Ctrl+T in Codex).\n    /// Defaults to [`Self::display_lines`]; override when the\n    /// transcript representation should differ (e.g. `ExecCell` may\n    /// show every grouped command in transcript mode but only the\n    /// most-recent in viewport mode).\n    fn transcript_lines(&self, width: u16) -> Vec<Line<'static>> ;\n\n    /// Coarse \"animation tick\" for cells whose rendered output depends\n    /// on elapsed time (spinners, shimmer effects). Returning `Some`\n    /// signals that any cached transcript output should be invalidated\n    /// once the tick changes; returning `None` (the default) means the\n    /// cell renders identically across frames.\n    fn transcript_animation_tick(&self) -> Option<u64> ;\n\n    /// True when this cell continues a stream from the previous cell.\n    /// Used by the view to suppress redundant headers / dividers\n    /// between consecutive assistant deltas. Defaults to `false`.\n    fn is_stream_continuation(&self) -> bool ;\n}",
              "documentation": "A single renderable unit of conversation history.\n\nEach cell produces logical [`Line`]s and reports how many viewport\nrows those lines occupy at a given terminal width. The default\nheight implementation simply returns the number of logical lines;\ncells whose content is longer than the viewport width should\noverride [`Self::desired_height`] with a width-aware measurement\n(e.g. ratatui's `Paragraph::line_count` after wrapping)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/diff_cell.rs",
          "sha256": "08885d6630a2c2a7caaa591ffcbf9d770959f14acdf032f2cc1b111cad2964f3",
          "artifactSha256": "a9955cd67484c32a69684155039d1a48e683e05cd2d653e596ad5de7cbffd7a7",
          "url": "/reference/source/harness-tui-kit/src/components/history/diff_cell.rs.txt",
          "declarations": [
            {
              "name": "::DiffCell",
              "line": 25,
              "signature": "#[derive(Debug, Clone)]\npub struct DiffCell {\n\n}",
              "documentation": "A single file diff in the transcript."
            },
            {
              "name": "::DiffCell::new",
              "line": 33,
              "signature": "#[must_use]\npub fn new(file: DiffFile) -> Self;",
              "documentation": "Create a diff cell from an already-parsed [`DiffFile`]."
            },
            {
              "name": "::DiffCell::from_unified_diff",
              "line": 44,
              "signature": "#[must_use]\npub fn from_unified_diff(source: &str) -> Vec<Self>;",
              "documentation": "Convenience: parse a unified-diff source string and return one\n`DiffCell` per file in the patch. Empty input returns an empty\nvector."
            },
            {
              "name": "::DiffCell::hide_summary",
              "line": 54,
              "signature": "#[must_use]\npub fn hide_summary(mut self) -> Self;",
              "documentation": "Hide the leading \"{path}  +A -B\" summary header line. Default\nis to show it."
            },
            {
              "name": "::DiffCell::file",
              "line": 61,
              "signature": "#[must_use]\npub fn file(&self) -> &DiffFile;",
              "documentation": "Read-only access to the underlying file diff."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/exec_cell.rs",
          "sha256": "f8b3f70fc7171a2184235aa7c41be3f41e2375e0f485654e8074735f5021f54f",
          "artifactSha256": "179d13e751e7e864518f61fa8545f2375dab018fc4327c2c2ffcd40f0f3f4d4b",
          "url": "/reference/source/harness-tui-kit/src/components/history/exec_cell.rs.txt",
          "declarations": [
            {
              "name": "::ExecOutcome",
              "line": 22,
              "signature": "#[derive(Debug, Clone)]\npub enum ExecOutcome {\n    /// Command still running.\n    Running,\n    /// Command finished with the given exit code and (possibly empty)\n    /// captured stdout+stderr.\n    Finished {\n        /// Process exit code (0 = success).\n        exit_code: i32,\n        /// Aggregated stdout + stderr output.\n        output: String,\n        /// Wall-clock duration.\n        duration: Duration,\n    },\n}",
              "documentation": "Final state of a shell exec."
            },
            {
              "name": "::ExecCell",
              "line": 39,
              "signature": "#[derive(Debug, Clone)]\npub struct ExecCell {\n\n}",
              "documentation": "A shell command execution in the transcript."
            },
            {
              "name": "::ExecCell::new",
              "line": 49,
              "signature": "#[must_use]\npub fn new(command: impl AsRef<str>) -> Self;",
              "documentation": "Create a cell for a freshly-started exec. The command string\nis truncated to a preview length before rendering."
            },
            {
              "name": "::ExecCell::cwd",
              "line": 59,
              "signature": "#[must_use]\npub fn cwd(mut self, cwd: impl Into<String>) -> Self;",
              "documentation": "Attach a working-directory label shown next to the command."
            },
            {
              "name": "::ExecCell::with_outcome",
              "line": 67,
              "signature": "#[must_use]\npub fn with_outcome(mut self, outcome: ExecOutcome) -> Self;",
              "documentation": "Mark the cell as finished with the given exit code, output,\nand duration."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/history_view.rs",
          "sha256": "316d3e661be1cc8332f3ec95edbaf512b039949794187cea276598b9cecbe874",
          "artifactSha256": "e3a1bd4c20aa23fb7e11045e26f511f52ecbc4ae235248334aea9a60c1a09cc1",
          "url": "/reference/source/harness-tui-kit/src/components/history/history_view.rs.txt",
          "declarations": [
            {
              "name": "::HistoryViewState",
              "line": 23,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct HistoryViewState {\n\n}",
              "documentation": "Persistent state for [`HistoryView`]."
            },
            {
              "name": "::HistoryViewState::following",
              "line": 35,
              "signature": "#[must_use]\npub fn following() -> Self;",
              "documentation": "Create a new state with `follow=true` (auto-scroll on)."
            },
            {
              "name": "::HistoryViewState::is_following",
              "line": 44,
              "signature": "#[must_use]\npub fn is_following(&self) -> bool;",
              "documentation": "Whether auto-follow is enabled."
            },
            {
              "name": "::HistoryViewState::set_follow",
              "line": 49,
              "signature": "pub fn set_follow(&mut self, follow: bool);",
              "documentation": "Set the auto-follow flag."
            },
            {
              "name": "::HistoryViewState::scroll_up",
              "line": 54,
              "signature": "pub fn scroll_up(&mut self, rows: u16);",
              "documentation": "Scroll up by `rows` (towards older history). Disables follow."
            },
            {
              "name": "::HistoryViewState::scroll_down",
              "line": 61,
              "signature": "pub fn scroll_down(&mut self, rows: u16);",
              "documentation": "Scroll down by `rows` (towards latest history). When the offset\nreaches zero, follow is re-enabled."
            },
            {
              "name": "::HistoryViewState::jump_to_latest",
              "line": 69,
              "signature": "pub fn jump_to_latest(&mut self);",
              "documentation": "Jump to the latest entry (scroll-up offset = 0, follow = true)."
            },
            {
              "name": "::HistoryView",
              "line": 81,
              "signature": "#[derive(Debug, Clone)]\npub struct HistoryView<'a> {\n\n}",
              "documentation": "Vertical history viewport widget.\n\nEach cell is rendered with its own logical line count; when the\nstack exceeds the viewport, the bottom-most cells win (consistent\nwith terminal-style chat surfaces)."
            },
            {
              "name": "::HistoryView<'a>::new",
              "line": 89,
              "signature": "#[must_use]\npub fn new(cells: &'a [Box<dyn HistoryCell>]) -> Self;",
              "documentation": "Create a new viewport over the supplied cells."
            },
            {
              "name": "::HistoryView<'a>::theme",
              "line": 98,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the theme."
            },
            {
              "name": "::HistoryView<'a>::total_height",
              "line": 105,
              "signature": "#[must_use]\npub fn total_height(&self, width: u16) -> u32;",
              "documentation": "Total number of viewport rows the cells would occupy at `width`."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/mod.rs",
          "sha256": "6a87db6ee2f187ea29d34281b871ffe7ed783b7ece09f40f54a30c3ecb3f4260",
          "artifactSha256": "fb26754db57ec945b1635cd49109f7bbbfbbbecc726d3f60bebe2cc4584a035c",
          "url": "/reference/source/harness-tui-kit/src/components/history/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use approval_cell::{ApprovalCell, ApprovalState};",
              "line": 26,
              "signature": "pub use approval_cell::{ApprovalCell, ApprovalState};",
              "documentation": ""
            },
            {
              "name": "pub use assistant_cell::AssistantCell;",
              "line": 27,
              "signature": "pub use assistant_cell::AssistantCell;",
              "documentation": ""
            },
            {
              "name": "pub use cell::HistoryCell;",
              "line": 28,
              "signature": "pub use cell::HistoryCell;",
              "documentation": ""
            },
            {
              "name": "pub use diff_cell::DiffCell;",
              "line": 29,
              "signature": "pub use diff_cell::DiffCell;",
              "documentation": ""
            },
            {
              "name": "pub use exec_cell::{ExecCell, ExecOutcome};",
              "line": 30,
              "signature": "pub use exec_cell::{ExecCell, ExecOutcome};",
              "documentation": ""
            },
            {
              "name": "pub use history_view::{HistoryView, HistoryViewState};",
              "line": 31,
              "signature": "pub use history_view::{HistoryView, HistoryViewState};",
              "documentation": ""
            },
            {
              "name": "pub use system_cell::{SystemCell, SystemSeverity};",
              "line": 32,
              "signature": "pub use system_cell::{SystemCell, SystemSeverity};",
              "documentation": ""
            },
            {
              "name": "pub use tool_cell::{ToolCell, ToolCellOutcome};",
              "line": 33,
              "signature": "pub use tool_cell::{ToolCell, ToolCellOutcome};",
              "documentation": ""
            },
            {
              "name": "pub use user_cell::UserCell;",
              "line": 34,
              "signature": "pub use user_cell::UserCell;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/system_cell.rs",
          "sha256": "6cb0b2c10e3c432f143c6afae59587cd30c7d604fef03c3247d61a9c7b2177be",
          "artifactSha256": "d80c2697fc1921fbfd2f62d8e9b4422446d36845f20c6dbed02fc42b71b7e8b3",
          "url": "/reference/source/harness-tui-kit/src/components/history/system_cell.rs.txt",
          "declarations": [
            {
              "name": "::SystemSeverity",
              "line": 18,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum SystemSeverity {\n    /// Informational notice (default).\n    Info,\n    /// Non-fatal warning.\n    Warn,\n    /// Error that did not crash the agent but the user should see.\n    Error,\n    /// Successful state change (operation completed, login granted).\n    Success,\n}",
              "documentation": "Severity level of a [`SystemCell`]."
            },
            {
              "name": "::SystemCell",
              "line": 31,
              "signature": "#[derive(Debug, Clone)]\npub struct SystemCell {\n\n}",
              "documentation": "A system notice in the transcript."
            },
            {
              "name": "::SystemCell::new",
              "line": 40,
              "signature": "#[must_use]\npub fn new(severity: SystemSeverity, body: impl Into<String>) -> Self;",
              "documentation": "Create a cell with the given severity and body. The body is\nsanitized at construction time."
            },
            {
              "name": "::SystemCell::info",
              "line": 49,
              "signature": "#[must_use]\npub fn info(body: impl Into<String>) -> Self;",
              "documentation": "Convenience: info-severity cell."
            },
            {
              "name": "::SystemCell::warn",
              "line": 55,
              "signature": "#[must_use]\npub fn warn(body: impl Into<String>) -> Self;",
              "documentation": "Convenience: warn-severity cell."
            },
            {
              "name": "::SystemCell::error",
              "line": 61,
              "signature": "#[must_use]\npub fn error(body: impl Into<String>) -> Self;",
              "documentation": "Convenience: error-severity cell."
            },
            {
              "name": "::SystemCell::success",
              "line": 67,
              "signature": "#[must_use]\npub fn success(body: impl Into<String>) -> Self;",
              "documentation": "Convenience: success-severity cell."
            },
            {
              "name": "::SystemCell::severity",
              "line": 73,
              "signature": "#[must_use]\npub fn severity(&self) -> SystemSeverity;",
              "documentation": "Read-only access to the severity."
            },
            {
              "name": "::SystemCell::body",
              "line": 79,
              "signature": "#[must_use]\npub fn body(&self) -> &str;",
              "documentation": "Read-only access to the sanitized body."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/tool_cell.rs",
          "sha256": "a71d4fd94b8c1bf3f15764db11e229c05185afcdca2b4586c6d0d96b53e7ffa5",
          "artifactSha256": "f8dd44a443b9a8ab392be5ccdd1f08ed9f84340bb2c6037e9d63fd8ee71832a4",
          "url": "/reference/source/harness-tui-kit/src/components/history/tool_cell.rs.txt",
          "declarations": [
            {
              "name": "::ToolCellOutcome",
              "line": 24,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum ToolCellOutcome {\n    /// Tool call still running \u2014 shows a \"running\u2026\" suffix.\n    Running,\n    /// Tool returned successfully.\n    Success,\n    /// Tool failed.\n    Failed,\n}",
              "documentation": "Final state of a tool invocation."
            },
            {
              "name": "::ToolCell",
              "line": 35,
              "signature": "#[derive(Debug, Clone)]\npub struct ToolCell {\n\n}",
              "documentation": "A single tool invocation in the transcript."
            },
            {
              "name": "::ToolCell::new",
              "line": 48,
              "signature": "#[must_use]\npub fn new(tool_name: impl Into<String>, input: impl AsRef<str>) -> Self;",
              "documentation": "Create a cell for a freshly-started tool call. Mark it running\nuntil [`Self::with_outcome`] is called."
            },
            {
              "name": "::ToolCell::with_outcome",
              "line": 62,
              "signature": "#[must_use]\npub fn with_outcome(\n        mut self,\n        outcome: ToolCellOutcome,\n        output: impl AsRef<str>,\n        duration_ms: Option<u64>,\n    ) -> Self;",
              "documentation": "Mark the tool call complete, attaching its final outcome and\n(optionally) the wall-clock duration in milliseconds."
            },
            {
              "name": "::ToolCell::set_expanded",
              "line": 76,
              "signature": "pub fn set_expanded(&mut self, expanded: bool);",
              "documentation": "Toggle the expansion state. Collapsed cells show a one-line\nsummary; expanded cells show input + output."
            },
            {
              "name": "::ToolCell::is_expanded",
              "line": 82,
              "signature": "#[must_use]\npub fn is_expanded(&self) -> bool;",
              "documentation": "Whether the cell is currently expanded."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/history/user_cell.rs",
          "sha256": "d7d463a526858564d341ee3f2fb79a0a1181cdfda3d23c055760321e3302ff9e",
          "artifactSha256": "c789efbf7b2d39170da4ed4a1d42021a397a32800cece1a4bbfed870e997e496",
          "url": "/reference/source/harness-tui-kit/src/components/history/user_cell.rs.txt",
          "declarations": [
            {
              "name": "::UserCell",
              "line": 17,
              "signature": "#[derive(Debug, Clone)]\npub struct UserCell {\n\n}",
              "documentation": "A user-authored turn in the transcript."
            },
            {
              "name": "::UserCell::new",
              "line": 27,
              "signature": "#[must_use]\npub fn new(body: impl Into<String>) -> Self;",
              "documentation": "Create a cell from a raw body string. The body is sanitized\n(terminal-injection escapes stripped) at construction time."
            },
            {
              "name": "::UserCell::prefix_style",
              "line": 38,
              "signature": "#[must_use]\npub fn prefix_style(mut self, style: Style) -> Self;",
              "documentation": "Override the prefix (`>`) style. Default is bold default fg."
            },
            {
              "name": "::UserCell::body_style",
              "line": 45,
              "signature": "#[must_use]\npub fn body_style(mut self, style: Style) -> Self;",
              "documentation": "Override the body style. Default is plain default fg."
            },
            {
              "name": "::UserCell::body",
              "line": 52,
              "signature": "#[must_use]\npub fn body(&self) -> &str;",
              "documentation": "Read-only access to the sanitized body."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/approval_chooser.rs",
          "sha256": "4c3bc67ef802879c3ecf8cd41c3bf11ad0eb8107a9ff99aa1a4d326c75be152a",
          "artifactSha256": "ccb4b223c580b6591cac0582794adba245208e9200f00f316855f4d6bed5e171",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/approval_chooser.rs.txt",
          "declarations": [
            {
              "name": "::ApprovalChooserAction",
              "line": 26,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum ApprovalChooserAction {\n    /// Approve this specific request once.\n    AllowOnce,\n    /// Approve every request matching the suggested glob for the\n    /// rest of the session.\n    ApproveForSession,\n    /// Approve every request matching the suggested glob, and\n    /// persist the rule (e.g. write to `plugins.toml`).\n    ApproveForPrefix,\n    /// Decline this request.\n    Decline,\n    /// Open the linked thread / fullscreen detail view (Codex's\n    /// \"open fullscreen\" escape hatch for big payloads).\n    OpenThread,\n}",
              "documentation": "One choice in [`ApprovalChooser`]."
            },
            {
              "name": "::ApprovalChooserState",
              "line": 66,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ApprovalChooserState {\n\n}",
              "documentation": "Persistent state \u2014 focused row index (default 0 = AllowOnce)."
            },
            {
              "name": "::ApprovalChooserState::focused",
              "line": 81,
              "signature": "#[must_use]\npub fn focused(&self) -> ApprovalChooserAction;",
              "documentation": "Currently-focused choice."
            },
            {
              "name": "::ApprovalChooserState::move_next",
              "line": 86,
              "signature": "pub fn move_next(&mut self);",
              "documentation": "Move focus to the next choice (wraps)."
            },
            {
              "name": "::ApprovalChooserState::move_prev",
              "line": 91,
              "signature": "pub fn move_prev(&mut self);",
              "documentation": "Move focus to the previous choice (wraps)."
            },
            {
              "name": "::ApprovalChooserState::reset",
              "line": 100,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset focus to the first row."
            },
            {
              "name": "::ApprovalChooserState::handle_key",
              "line": 109,
              "signature": "#[must_use]\npub fn handle_key(&mut self, ev: &KeyEvent) -> Option<ApprovalChooserAction>;",
              "documentation": "Translate a raw key event into a chooser decision.\nReturns `Some(action)` when the event activates a choice\n(Enter on the focused row, or one of the per-choice\nshortcut letters)."
            },
            {
              "name": "::ApprovalChooser",
              "line": 132,
              "signature": "#[derive(Debug, Clone)]\npub struct ApprovalChooser<'a> {\n\n}",
              "documentation": "Inline approval chooser widget. The SDK consumer renders one\ninstance per pending request."
            },
            {
              "name": "::ApprovalChooser<'a>::new",
              "line": 140,
              "signature": "#[must_use]\npub fn new(request: &'a PermissionRequest) -> Self;",
              "documentation": "Construct a chooser for `request`."
            },
            {
              "name": "::ApprovalChooser<'a>::theme",
              "line": 149,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/approval_dialog.rs",
          "sha256": "02132c0c2af8a87627c7f49bd3a36d3e8a349046190d08c16b5768d7fad3ab5e",
          "artifactSha256": "8eda4310885a748ab7d7f420f82df70530d82e9c5f445598ba2559d2d5de04bb",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/approval_dialog.rs.txt",
          "declarations": [
            {
              "name": "::ApprovalDialogState",
              "line": 84,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ApprovalDialogState {\n\n}",
              "documentation": "Mutable state for [`ApprovalDialog`], persists across frames.\n\nTracks which action option is selected, the inline edit text when editing,\nand whether the user is in edit mode.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::approval_dialog::ApprovalDialogState;\n\nlet mut state = ApprovalDialogState::default();\nassert_eq!(state.selected_action(), 0);\nstate.select_next();\nassert_eq!(state.selected_action(), 1);\n```"
            },
            {
              "name": "::ApprovalDialogState::select_next",
              "line": 97,
              "signature": "pub fn select_next(&mut self);",
              "documentation": "Move selection to the next action option.\n\nWraps from Edit back to Approve."
            },
            {
              "name": "::ApprovalDialogState::select_prev",
              "line": 104,
              "signature": "pub fn select_prev(&mut self);",
              "documentation": "Move selection to the previous action option.\n\nWraps from Approve back to Edit."
            },
            {
              "name": "::ApprovalDialogState::start_edit",
              "line": 115,
              "signature": "pub fn start_edit(&mut self);",
              "documentation": "Enter edit mode.\n\nMoves selection to the Edit action and enables text input."
            },
            {
              "name": "::ApprovalDialogState::cancel_edit",
              "line": 123,
              "signature": "pub fn cancel_edit(&mut self);",
              "documentation": "Cancel edit mode without clearing text.\n\nDisables text input but preserves any text already typed."
            },
            {
              "name": "::ApprovalDialogState::confirm",
              "line": 133,
              "signature": "#[must_use]\npub fn confirm(&self) -> Option<ApprovalAction>;",
              "documentation": "Confirm the currently selected action.\n\nReturns `Some(ApprovalAction)` corresponding to the selected option.\nFor Edit, the modification text is taken from the edit buffer (trimmed).\nIf Edit is selected but the edit text is empty, returns `None`."
            },
            {
              "name": "::ApprovalDialogState::append_char",
              "line": 154,
              "signature": "pub fn append_char(&mut self, ch: char);",
              "documentation": "Append a character to the edit text buffer.\n\nOnly effective when in editing mode. No-op otherwise."
            },
            {
              "name": "::ApprovalDialogState::delete_char",
              "line": 163,
              "signature": "pub fn delete_char(&mut self);",
              "documentation": "Delete the last character from the edit text buffer.\n\nOnly effective when in editing mode. No-op otherwise."
            },
            {
              "name": "::ApprovalDialogState::reset",
              "line": 170,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to its default values."
            },
            {
              "name": "::ApprovalDialogState::selected_action",
              "line": 176,
              "signature": "#[must_use]\npub const fn selected_action(&self) -> usize;",
              "documentation": "Returns the currently selected action index."
            },
            {
              "name": "::ApprovalDialogState::edit_text",
              "line": 182,
              "signature": "#[must_use]\npub fn edit_text(&self) -> &str;",
              "documentation": "Returns a reference to the current edit text."
            },
            {
              "name": "::ApprovalDialogState::is_editing",
              "line": 188,
              "signature": "#[must_use]\npub const fn is_editing(&self) -> bool;",
              "documentation": "Returns `true` if the user is currently in edit mode."
            },
            {
              "name": "::ApprovalDialog",
              "line": 263,
              "signature": "#[derive(Debug, Clone)]\npub struct ApprovalDialog<'a> {\n\n}",
              "documentation": "Full-context approval dialog for a single [`ApprovalRequest`].\n\nDisplays the following sections in order:\n\n1. **What** \u2014 The action summary (bold, primary text)\n2. **Why** \u2014 The reasoning behind the action\n3. **Impact** \u2014 A bulleted list of affected resources\n4. **Risk** \u2014 A badge colored by [`RiskLevel`]\n5. **Actions** \u2014 Three selectable options: Approve, Deny, Edit\n\nWhen the Edit action is selected and the user enters edit mode, a text input\nline appears below the action row for typing a modification description.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::approval_dialog::{\n    ApprovalDialog, ApprovalDialogState,\n};\nuse harness_tui_kit::{ApprovalRequest, RiskLevel, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet request = ApprovalRequest::new(\"r-1\", \"Agent\", \"Run tests\")\n    .with_risk_level(RiskLevel::Low);\nlet mut state = ApprovalDialogState::default();\nlet area = Rect::new(0, 0, 50, 15);\nlet mut buf = Buffer::empty(area);\nApprovalDialog::new(&request)\n    .theme(&theme)\n    .render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::ApprovalDialog<'a>::new",
              "line": 275,
              "signature": "#[must_use]\npub fn new(request: &'a ApprovalRequest) -> Self;",
              "documentation": "Create a new approval dialog for the given request."
            },
            {
              "name": "::ApprovalDialog<'a>::theme",
              "line": 285,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::ApprovalDialog<'a>::show_agent_name",
              "line": 292,
              "signature": "#[must_use]\npub fn show_agent_name(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show the agent name header (default: `true`)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/approval_queue.rs",
          "sha256": "01ae2fb894a7a0111fbdbd1c975417facfe2a48083cfd78715e16674fa50f63b",
          "artifactSha256": "dd3f2c237e08deea8d00250978cc4600c2f486075df245bb6db3a785c58544f6",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/approval_queue.rs.txt",
          "declarations": [
            {
              "name": "::ApprovalQueueState",
              "line": 77,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ApprovalQueueState {\n\n}",
              "documentation": "Mutable state for [`ApprovalQueue`], persists across frames.\n\nTracks the currently selected index and the scroll offset for virtual\nscrolling when the list exceeds the available height.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::approval_queue::ApprovalQueueState;\n\nlet mut state = ApprovalQueueState::default();\nstate.select_next(5);\nassert_eq!(state.selected_index(), 1);\nstate.select_prev();\nassert_eq!(state.selected_index(), 0);\n```"
            },
            {
              "name": "::ApprovalQueueState::select_next",
              "line": 89,
              "signature": "pub fn select_next(&mut self, len: usize);",
              "documentation": "Move selection to the next item.\n\nWraps around to the first item when the end is reached.\nDoes nothing if `len` is zero."
            },
            {
              "name": "::ApprovalQueueState::select_prev",
              "line": 100,
              "signature": "pub fn select_prev(&mut self);",
              "documentation": "Move selection to the previous item.\n\nWraps around to the last item when the beginning is reached,\nbut only if the current index is zero."
            },
            {
              "name": "::ApprovalQueueState::selected_index",
              "line": 106,
              "signature": "#[must_use]\npub const fn selected_index(&self) -> usize;",
              "documentation": "Returns the currently selected index."
            },
            {
              "name": "::ApprovalQueueState::scroll_offset",
              "line": 112,
              "signature": "#[must_use]\npub const fn scroll_offset(&self) -> usize;",
              "documentation": "Returns the current scroll offset."
            },
            {
              "name": "::ApprovalQueueState::reset",
              "line": 117,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to its default values."
            },
            {
              "name": "::ApprovalQueue",
              "line": 183,
              "signature": "#[derive(Debug, Clone)]\npub struct ApprovalQueue<'a> {\n\n}",
              "documentation": "Scrollable list of pending approval requests.\n\nEach row displays:\n- Position number (1-indexed)\n- Agent name (bold)\n- Action summary (truncated to fit)\n- Risk badge colored by severity\n\nThe selected row is highlighted with the elevated background and an accent\nleft-border indicator.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::approval_queue::{\n    ApprovalQueue, ApprovalQueueState,\n};\nuse harness_tui_kit::{ApprovalRequest, RiskLevel, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet requests = vec![\n    ApprovalRequest::new(\"r-1\", \"Agent\", \"Deploy service\")\n        .with_risk_level(RiskLevel::Medium),\n];\nlet mut state = ApprovalQueueState::default();\nlet area = Rect::new(0, 0, 50, 5);\nlet mut buf = Buffer::empty(area);\nApprovalQueue::new(&requests)\n    .theme(&theme)\n    .render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::ApprovalQueue<'a>::new",
              "line": 195,
              "signature": "#[must_use]\npub fn new(requests: &'a [ApprovalRequest]) -> Self;",
              "documentation": "Create a new approval queue with the given requests."
            },
            {
              "name": "::ApprovalQueue<'a>::theme",
              "line": 205,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            },
            {
              "name": "::ApprovalQueue<'a>::show_position",
              "line": 212,
              "signature": "#[must_use]\npub fn show_position(mut self, show: bool) -> Self;",
              "documentation": "Set whether to show position numbers (default: `true`)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/confirmation.rs",
          "sha256": "7dca1fc86ba806da619091aac08dd2d0d8e9efd2d9dd42d18642387f0aef209c",
          "artifactSha256": "781f9011428ef291ec41061a26bab7ca2dac7855f9118e7d7ae9bdb4baca42b2",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/confirmation.rs.txt",
          "declarations": [
            {
              "name": "::ConfirmButton",
              "line": 62,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum ConfirmButton {\n    /// The yes/accept action button.\n    Yes,\n    /// The no/cancel action button (default focus).\n    #[default]\n    No,\n}",
              "documentation": "Which button is currently focused in a [`ConfirmationPrompt`].\n\nDefaults to [`ConfirmButton::No`] so the non-destructive action is\nselected by default.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::confirmation::ConfirmButton;\n\nlet button = ConfirmButton::default();\nassert_eq!(button, ConfirmButton::No);\n```"
            },
            {
              "name": "::ConfirmationPromptState",
              "line": 90,
              "signature": "#[derive(Debug, Clone)]\npub struct ConfirmationPromptState {\n/// Which button is focused.\n\npub focused: ConfirmButton,\n/// Whether the user has made a decision (and what it was).\n\npub decision: Option<bool>,\n/// Whether the prompt is visible.\n\npub visible: bool\n}",
              "documentation": "Mutable state for [`ConfirmationPrompt`], persists across frames.\n\nTracks which button is focused, whether the user has made a decision,\nand whether the prompt is visible.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::confirmation::ConfirmationPromptState;\n\nlet mut state = ConfirmationPromptState::new();\nstate.show();\nassert!(state.visible);\nstate.toggle_focus();\nstate.confirm();\nassert_eq!(state.decision, Some(true));\n```"
            },
            {
              "name": "::ConfirmationPromptState::new",
              "line": 114,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new confirmation prompt state.\n\nStarts hidden with the No button focused and no decision.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::confirmation::ConfirmationPromptState;\n\nlet state = ConfirmationPromptState::new();\nassert!(!state.visible);\nassert_eq!(state.decision, None);\n```"
            },
            {
              "name": "::ConfirmationPromptState::focus_yes",
              "line": 123,
              "signature": "pub fn focus_yes(&mut self);",
              "documentation": "Focus the Yes button."
            },
            {
              "name": "::ConfirmationPromptState::focus_no",
              "line": 128,
              "signature": "pub fn focus_no(&mut self);",
              "documentation": "Focus the No button."
            },
            {
              "name": "::ConfirmationPromptState::toggle_focus",
              "line": 133,
              "signature": "pub fn toggle_focus(&mut self);",
              "documentation": "Toggle focus between Yes and No buttons."
            },
            {
              "name": "::ConfirmationPromptState::confirm",
              "line": 143,
              "signature": "pub fn confirm(&mut self);",
              "documentation": "Confirm the decision based on the currently focused button.\n\nSets `decision` to `Some(true)` if Yes is focused, `Some(false)` if No."
            },
            {
              "name": "::ConfirmationPromptState::reset",
              "line": 148,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to initial values (hidden, no decision, No focused)."
            },
            {
              "name": "::ConfirmationPromptState::show",
              "line": 153,
              "signature": "pub fn show(&mut self);",
              "documentation": "Show the prompt."
            },
            {
              "name": "::ConfirmationPromptState::hide",
              "line": 160,
              "signature": "pub fn hide(&mut self);",
              "documentation": "Hide the prompt."
            },
            {
              "name": "::ConfirmationPrompt",
              "line": 208,
              "signature": "#[derive(Debug, Clone)]\npub struct ConfirmationPrompt<'a> {\n\n}",
              "documentation": "Compact yes/no confirmation card.\n\nRenders an inline prompt with a message and two buttons. When `dangerous`\nis set, the left border and message use the theme's error color to signal\na destructive operation.\n\n# Layout (max 4 lines)\n\n```text\n\u2502 Delete this file?\n\u2502\n\u2502 [Yes]  [No]\n```\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::confirmation::{\n    ConfirmationPrompt, ConfirmationPromptState,\n};\nuse harness_tui_kit::Theme;\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet mut state = ConfirmationPromptState::new();\nstate.show();\nlet area = Rect::new(0, 0, 40, 4);\nlet mut buf = Buffer::empty(area);\nConfirmationPrompt::new(\"Proceed?\")\n    .theme(&theme)\n    .render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::ConfirmationPrompt<'a>::new",
              "line": 220,
              "signature": "#[must_use]\npub fn new(message: &'a str) -> Self;",
              "documentation": "Create a new confirmation prompt with the given message."
            },
            {
              "name": "::ConfirmationPrompt<'a>::theme",
              "line": 230,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for the prompt."
            },
            {
              "name": "::ConfirmationPrompt<'a>::dangerous",
              "line": 239,
              "signature": "#[must_use]\npub fn dangerous(mut self, dangerous: bool) -> Self;",
              "documentation": "Set whether this is a dangerous/destructive action.\n\nWhen `true`, the left border and message text use the error color."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/decision_panel.rs",
          "sha256": "11352e11f972036fb4c6a2b29b8fbc38dde273ae3db40f403469ac3684e9a5e2",
          "artifactSha256": "bd6c594c0416d0a33b8cd269259ebe1218ee623266ff60e51c9fa526b20b8f20",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/decision_panel.rs.txt",
          "declarations": [
            {
              "name": "::DecisionPanelState",
              "line": 78,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct DecisionPanelState {\n\n}",
              "documentation": "Mutable state for [`DecisionPanel`], persists across frames.\n\nTracks which option is currently selected and whether the user has\ncancelled or confirmed a decision.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::decision_panel::DecisionPanelState;\n\nlet mut state = DecisionPanelState::default();\nassert_eq!(state.selected_index(), 0);\nassert!(!state.is_cancelled());\n\nstate.select_next(3);\nassert_eq!(state.selected_index(), 1);\n```"
            },
            {
              "name": "::DecisionPanelState::select_next",
              "line": 91,
              "signature": "pub fn select_next(&mut self, option_count: usize);",
              "documentation": "Move selection to the next option, wrapping within `option_count`.\n\nDoes nothing if `option_count` is zero."
            },
            {
              "name": "::DecisionPanelState::select_prev",
              "line": 101,
              "signature": "pub fn select_prev(&mut self, option_count: usize);",
              "documentation": "Move selection to the previous option, wrapping within `option_count`.\n\nDoes nothing if `option_count` is zero."
            },
            {
              "name": "::DecisionPanelState::select_by_number",
              "line": 116,
              "signature": "pub fn select_by_number(&mut self, n: usize, option_count: usize);",
              "documentation": "Select an option by its 1-based number key.\n\n`n` is 1-based (i.e., pressing key `1` selects index 0). If `n` is\nzero or exceeds `option_count`, this is a no-op."
            },
            {
              "name": "::DecisionPanelState::cancel",
              "line": 124,
              "signature": "pub fn cancel(&mut self);",
              "documentation": "Mark the decision as cancelled."
            },
            {
              "name": "::DecisionPanelState::confirm",
              "line": 133,
              "signature": "#[must_use]\npub fn confirm(&mut self, option_count: usize) -> Option<usize>;",
              "documentation": "Confirm the currently selected option.\n\nReturns `Some(index)` of the confirmed option, or `None` if no options\nare available (i.e., `option_count` is zero)."
            },
            {
              "name": "::DecisionPanelState::is_cancelled",
              "line": 144,
              "signature": "#[must_use]\npub fn is_cancelled(&self) -> bool;",
              "documentation": "Whether the user has cancelled the decision."
            },
            {
              "name": "::DecisionPanelState::selected_index",
              "line": 150,
              "signature": "#[must_use]\npub fn selected_index(&self) -> usize;",
              "documentation": "The index of the currently selected option."
            },
            {
              "name": "::DecisionPanelState::confirmed_index",
              "line": 156,
              "signature": "#[must_use]\npub fn confirmed_index(&self) -> Option<usize>;",
              "documentation": "The confirmed option index, if the user has confirmed."
            },
            {
              "name": "::DecisionPanelState::reset",
              "line": 161,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to initial values."
            },
            {
              "name": "::DecisionPanel",
              "line": 210,
              "signature": "#[derive(Debug, Clone)]\npub struct DecisionPanel<'a> {\n\n}",
              "documentation": "Multi-option decision panel rendered as numbered rows.\n\nDisplays 2\u20136 [`DecisionOption`] items. The first option (index 0) is\ntreated as the recommended choice and receives a star marker and accent\nstyling. The currently selected option is highlighted with an accent\nbackground. A cancel hint is rendered at the bottom.\n\n# Layout\n\n```text\nChoose an action              \u2190 optional title (bold)\n  1. \u2605 Deploy \u2014 Push to staging    \u2190 recommended (index 0)\n  2.   Skip \u2014 Do nothing           \u2190 normal option\n  Esc to cancel                    \u2190 always present\n```\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::decision_panel::{\n    DecisionPanel, DecisionPanelState,\n};\nuse harness_tui_kit::{DecisionOption, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet options = vec![\n    DecisionOption::new(\"Deploy\", \"Push to staging\").with_recommended(true),\n    DecisionOption::new(\"Rollback\", \"Revert last deploy\"),\n    DecisionOption::new(\"Skip\", \"Do nothing\"),\n];\nlet mut state = DecisionPanelState::default();\nlet area = Rect::new(0, 0, 60, 8);\nlet mut buf = Buffer::empty(area);\nDecisionPanel::new(&options)\n    .theme(&theme)\n    .title(\"Choose an action\")\n    .render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::DecisionPanel<'a>::new",
              "line": 224,
              "signature": "#[must_use]\npub fn new(options: &'a [DecisionOption]) -> Self;",
              "documentation": "Create a new decision panel with the given options.\n\nOptions beyond [`MAX_OPTIONS`] (6) are silently ignored during rendering."
            },
            {
              "name": "::DecisionPanel<'a>::theme",
              "line": 234,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for the panel."
            },
            {
              "name": "::DecisionPanel<'a>::title",
              "line": 241,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Set an optional title rendered at the top of the panel."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/mod.rs",
          "sha256": "b2d750b7b1ba428738f814b78a84a7c86084cb5aa961c5341c429689a68b2b78",
          "artifactSha256": "eeb54fa4e2e3f541eb74bc9e360af4ab3e4e30bbbbd39b8fcdb0cced6ec720b7",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/mod.rs.txt",
          "declarations": [
            {
              "name": "approval_chooser",
              "line": 5,
              "signature": "pub mod approval_chooser;",
              "documentation": "Human-in-the-loop components.\n\nComponents for approval workflows, confirmation dialogs, and decision interfaces."
            },
            {
              "name": "approval_dialog",
              "line": 6,
              "signature": "pub mod approval_dialog;",
              "documentation": ""
            },
            {
              "name": "approval_queue",
              "line": 7,
              "signature": "pub mod approval_queue;",
              "documentation": ""
            },
            {
              "name": "confirmation",
              "line": 8,
              "signature": "pub mod confirmation;",
              "documentation": ""
            },
            {
              "name": "decision_panel",
              "line": 9,
              "signature": "pub mod decision_panel;",
              "documentation": ""
            },
            {
              "name": "permission_banner",
              "line": 10,
              "signature": "pub mod permission_banner;",
              "documentation": ""
            },
            {
              "name": "permission_prompt",
              "line": 11,
              "signature": "pub mod permission_prompt;",
              "documentation": ""
            },
            {
              "name": "pub use approval_chooser::{ApprovalChooser, ApprovalChooserAction, ApprovalChooserState};",
              "line": 13,
              "signature": "pub use approval_chooser::{ApprovalChooser, ApprovalChooserAction, ApprovalChooserState};",
              "documentation": ""
            },
            {
              "name": "pub use approval_dialog::{ApprovalDialog, ApprovalDialogState};",
              "line": 14,
              "signature": "pub use approval_dialog::{ApprovalDialog, ApprovalDialogState};",
              "documentation": ""
            },
            {
              "name": "pub use approval_queue::{ApprovalQueue, ApprovalQueueState};",
              "line": 15,
              "signature": "pub use approval_queue::{ApprovalQueue, ApprovalQueueState};",
              "documentation": ""
            },
            {
              "name": "pub use confirmation::{ConfirmButton, ConfirmationPrompt, ConfirmationPromptState};",
              "line": 16,
              "signature": "pub use confirmation::{ConfirmButton, ConfirmationPrompt, ConfirmationPromptState};",
              "documentation": ""
            },
            {
              "name": "pub use decision_panel::{DecisionPanel, DecisionPanelState};",
              "line": 17,
              "signature": "pub use decision_panel::{DecisionPanel, DecisionPanelState};",
              "documentation": ""
            },
            {
              "name": "pub use permission_banner::PermissionBanner;",
              "line": 18,
              "signature": "pub use permission_banner::PermissionBanner;",
              "documentation": ""
            },
            {
              "name": "pub use permission_prompt::{PermissionPrompt, PermissionPromptState};",
              "line": 19,
              "signature": "pub use permission_prompt::{PermissionPrompt, PermissionPromptState};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/permission_banner.rs",
          "sha256": "5f61a5a865349a470c2f03356eed10db235857dcf8f2bd9137a3934e9680c517",
          "artifactSha256": "c5996d6f9a72717a5bbbe2768881bd29914aaa35dbe37fab8ecefab42a2c49ea",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/permission_banner.rs.txt",
          "declarations": [
            {
              "name": "::PermissionBanner",
              "line": 59,
              "signature": "#[derive(Debug, Clone)]\npub struct PermissionBanner<'a> {\n\n}",
              "documentation": "Single-line permission status summary banner.\n\nShows pending and auto-approved permission counts. Renders nothing when\nboth counts are zero.\n\n# Layout (1 line)\n\n```text\n\u26a1 3 pending \u2502 \u2713 12 auto-approved\n```\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::permission_banner::PermissionBanner;\nuse harness_tui_kit::Theme;\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet banner = PermissionBanner::new(1, 5);\nlet area = Rect::new(0, 0, 50, 1);\nlet mut buf = Buffer::empty(area);\nbanner.render(area, &mut buf);\n```"
            },
            {
              "name": "::PermissionBanner<'a>::new",
              "line": 71,
              "signature": "#[must_use]\npub fn new(pending_count: usize, auto_approved_count: usize) -> Self;",
              "documentation": "Create a new permission banner with the given counts."
            },
            {
              "name": "::PermissionBanner<'a>::theme",
              "line": 81,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/hitl/permission_prompt.rs",
          "sha256": "48199ac6e2f1ce3da91e4cfa4c4120e2b1e6b1bed4526c10aa29060b107b4419",
          "artifactSha256": "21d308aef64b38409c28acf09aed81df800bd60aed4f982b8d9c8f227ddf1a61",
          "url": "/reference/source/harness-tui-kit/src/components/hitl/permission_prompt.rs.txt",
          "declarations": [
            {
              "name": "::PermissionPromptState",
              "line": 67,
              "signature": "#[derive(Debug, Clone)]\npub struct PermissionPromptState {\n/// The user's decision (if made).\n\npub decision: Option<PermissionDecision>,\n/// The auto-generated glob pattern (shown when user presses 'a').\n\npub suggested_pattern: Option<String>,\n/// Whether the pattern confirmation is showing.\n\npub showing_pattern: bool\n}",
              "documentation": "Mutable state for [`PermissionPrompt`], persists across frames.\n\nTracks the user's decision and the \"always allow\" pattern confirmation flow.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::permission_prompt::PermissionPromptState;\n\nlet mut state = PermissionPromptState::new();\nstate.allow_once();\nassert!(state.decision.is_some());\n```"
            },
            {
              "name": "::PermissionPromptState::new",
              "line": 91,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new permission prompt state.\n\nStarts with no decision, no pattern, and pattern confirmation hidden.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::permission_prompt::PermissionPromptState;\n\nlet state = PermissionPromptState::new();\nassert!(state.decision.is_none());\nassert!(!state.showing_pattern);\n```"
            },
            {
              "name": "::PermissionPromptState::allow_once",
              "line": 100,
              "signature": "pub fn allow_once(&mut self);",
              "documentation": "Set the decision to allow once."
            },
            {
              "name": "::PermissionPromptState::deny",
              "line": 105,
              "signature": "pub fn deny(&mut self);",
              "documentation": "Set the decision to deny."
            },
            {
              "name": "::PermissionPromptState::start_always_allow",
              "line": 112,
              "signature": "pub fn start_always_allow(&mut self, resource: &str);",
              "documentation": "Begin the \"always allow\" flow by generating a glob pattern from the resource.\n\nShows the pattern confirmation UI. The user must confirm or cancel."
            },
            {
              "name": "::PermissionPromptState::confirm_pattern",
              "line": 120,
              "signature": "pub fn confirm_pattern(&mut self);",
              "documentation": "Confirm the suggested pattern and set the decision to `AlwaysAllow`.\n\nOnly takes effect if `showing_pattern` is `true` and a pattern exists."
            },
            {
              "name": "::PermissionPromptState::cancel_pattern",
              "line": 130,
              "signature": "pub fn cancel_pattern(&mut self);",
              "documentation": "Cancel the pattern confirmation and return to the normal prompt view."
            },
            {
              "name": "::PermissionPromptState::reset",
              "line": 136,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset all state to initial values."
            },
            {
              "name": "::generate_glob_pattern",
              "line": 167,
              "signature": "#[must_use]\npub fn generate_glob_pattern(resource: &str) -> String;",
              "documentation": "Generate a glob pattern from a resource string.\n\n- For URLs (containing `://` or starting with a domain-like string): strips\n  the path after the first segment (e.g., `api.orgs.sh/*`).\n- For file paths (starting with `/` or `./` or `~`): takes the parent\n  directory and appends `/*`.\n- For commands (anything else): takes the first word and appends ` *`.\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::permission_prompt::generate_glob_pattern;\n\nassert_eq!(generate_glob_pattern(\"https://api.orgs.sh/v1/formations\"), \"api.orgs.sh/*\");\nassert_eq!(generate_glob_pattern(\"/home/user/.ssh/id_rsa\"), \"/home/user/.ssh/*\");\nassert_eq!(generate_glob_pattern(\"rm -rf build/\"), \"rm *\");\n```"
            },
            {
              "name": "::PermissionPrompt",
              "line": 258,
              "signature": "#[derive(Debug, Clone)]\npub struct PermissionPrompt<'a> {\n\n}",
              "documentation": "Inline permission request card.\n\nRenders a compact 4-line card with the permission request details and\naction hints. Uses a left border colored by the category's danger level.\n\n# Layout (4 lines)\n\n```text\n\u2502 N my-plugin\n\u2502 api.orgs.sh/v1/formations\n\u2502 Fetching organization data\n\u2502 [y] Allow  [a] Always  [d] Deny\n```\n\nWhen the \"always allow\" pattern confirmation is active:\n\n```text\n\u2502 N my-plugin\n\u2502 api.orgs.sh/v1/formations\n\u2502 Pattern: api.orgs.sh\n\u2502 [Enter] Confirm  [Esc] Cancel\n```\n\n# Examples\n\n```\nuse harness_tui_kit::components::hitl::permission_prompt::{\n    PermissionPrompt, PermissionPromptState,\n};\nuse harness_tui_kit::{PermissionRequest, PermissionCategory, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet request = PermissionRequest::new(\n    PermissionCategory::Shell,\n    \"build-agent\",\n    \"rm -rf build/\",\n);\nlet mut state = PermissionPromptState::new();\nlet area = Rect::new(0, 0, 60, 4);\nlet mut buf = Buffer::empty(area);\nPermissionPrompt::new(&request)\n    .theme(&theme)\n    .render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::PermissionPrompt<'a>::new",
              "line": 268,
              "signature": "#[must_use]\npub fn new(request: &'a PermissionRequest) -> Self;",
              "documentation": "Create a new permission prompt for the given request."
            },
            {
              "name": "::PermissionPrompt<'a>::theme",
              "line": 277,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/metrics/card.rs",
          "sha256": "61831835ef02759363b7c1fcfc961717ec7fb85445d0b6b0eb546d4e7023ad12",
          "artifactSha256": "8e0b410e29132e42b15e4ddc36c22c22c38661e9a29984a195dc3bd62d7dc2e1",
          "url": "/reference/source/harness-tui-kit/src/components/metrics/card.rs.txt",
          "declarations": [
            {
              "name": "::MetricCard",
              "line": 36,
              "signature": "#[derive(Debug, Clone)]\npub struct MetricCard<'a> {\n\n}",
              "documentation": "Single metric display with large value, label, and delta.\n\nDesigned for dashboard-style metric cards. Renders compactly in a small\nrectangle with the value prominently displayed and supporting metadata\naround it."
            },
            {
              "name": "::MetricCard<'a>::new",
              "line": 52,
              "signature": "#[must_use]\npub fn new(label: &'a str, value: &'a str) -> Self;",
              "documentation": "Create a new metric card with a label and value."
            },
            {
              "name": "::MetricCard<'a>::delta",
              "line": 67,
              "signature": "#[must_use]\npub fn delta(mut self, delta: &'a str) -> Self;",
              "documentation": "Set the delta display string.\n\nStrings starting with \"+\" are rendered in the success color,\nstrings starting with \"-\" in the error color."
            },
            {
              "name": "::MetricCard<'a>::unit",
              "line": 74,
              "signature": "#[must_use]\npub fn unit(mut self, unit: &'a str) -> Self;",
              "documentation": "Set the unit suffix."
            },
            {
              "name": "::MetricCard<'a>::theme",
              "line": 81,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/metrics/cost_tracker.rs",
          "sha256": "bded4a0ceee09b5326086fede514a59ac3ff194abbbb2f275912fc1b20420f63",
          "artifactSha256": "3a1ca66cd21b5e3cc0c4d09f0dac506f722ec8d17459827dbb7730ae391f224c",
          "url": "/reference/source/harness-tui-kit/src/components/metrics/cost_tracker.rs.txt",
          "declarations": [
            {
              "name": "::CostTracker",
              "line": 70,
              "signature": "#[derive(Debug, Clone)]\npub struct CostTracker<'a> {\n\n}",
              "documentation": "Displays running cost information with total, delta, rate, and per-agent breakdown.\n\nThe component renders:\n- **Row 0**: Total cost in bold, with a delta arrow if a previous total is provided.\n- **Row 1** (optional): Cost-per-minute rate in muted style.\n- **Rows 2+**: One row per unique `agent_id`, showing agent name, aggregated\n  amount, and the model name(s).\n\nEntries are aggregated by `agent_id` \u2014 if multiple entries share the same\n`agent_id`, their `amount_cents` values are summed and the model from the\nlast entry in the slice is displayed.\n\n# Examples\n\n```\nuse harness_tui_kit::{CostTracker, CostEntry, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet entries = vec![\n    CostEntry::new(\"summarizer\", \"claude-opus-4-6\", 450, \"USD\"),\n];\nlet tracker = CostTracker::new(&entries);\nlet area = Rect::new(0, 0, 40, 4);\nlet mut buf = Buffer::empty(area);\ntracker.render(area, &mut buf);\n```"
            },
            {
              "name": "::CostTracker<'a>::new",
              "line": 86,
              "signature": "#[must_use]\npub fn new(entries: &'a [CostEntry]) -> Self;",
              "documentation": "Create a new cost tracker from a slice of cost entries."
            },
            {
              "name": "::CostTracker<'a>::currency_symbol",
              "line": 98,
              "signature": "#[must_use]\npub fn currency_symbol(mut self, symbol: &'a str) -> Self;",
              "documentation": "Set the currency symbol (e.g., `\"$\"`, `\"\\u{20ac}\"`, `\"\\u{00a3}\"`)."
            },
            {
              "name": "::CostTracker<'a>::rate_per_min",
              "line": 105,
              "signature": "#[must_use]\npub fn rate_per_min(mut self, rate: f64) -> Self;",
              "documentation": "Set the cost-per-minute rate for display."
            },
            {
              "name": "::CostTracker<'a>::previous_total_cents",
              "line": 112,
              "signature": "#[must_use]\npub fn previous_total_cents(mut self, cents: u64) -> Self;",
              "documentation": "Set the previous total in cents, used to compute and render a delta indicator."
            },
            {
              "name": "::CostTracker<'a>::theme",
              "line": 119,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/metrics/latency_display.rs",
          "sha256": "2ba726117e98f17abd358f92e571c6d3014774be8e3bb5f3191977cc5571a2ba",
          "artifactSha256": "ced1c78e2b6d4a6b63196a49ba41f06463633cfbab8c0518d00f3d0b47868826",
          "url": "/reference/source/harness-tui-kit/src/components/metrics/latency_display.rs.txt",
          "declarations": [
            {
              "name": "::LatencyDisplay",
              "line": 71,
              "signature": "#[derive(Debug, Clone)]\npub struct LatencyDisplay<'a> {\n\n}",
              "documentation": "Response latency display with current value, percentiles, and sparkline.\n\nRenders a [`LatencySnapshot`] as a compact three-row widget:\n- **Row 0**: Current latency value in bold, colored by threshold\n- **Row 1**: P50, P95, P99 percentile values in muted text\n- **Row 2**: Sparkline of recent samples using vertical bar characters\n\nColor thresholds determine the current value's color:\n- Green (success) when below `warn_threshold_ms`\n- Yellow (warning) when at or above warn but below `error_threshold_ms`\n- Red (error) when at or above error threshold\n\n# Examples\n\n```\nuse harness_tui_kit::{LatencyDisplay, LatencySnapshot, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet snapshot = LatencySnapshot::new(230, 180, 450, 890)\n    .with_samples(vec![100, 200, 150, 300, 250]);\nlet theme = Theme::dark();\nlet display = LatencyDisplay::new(&snapshot)\n    .warn_threshold_ms(500)\n    .error_threshold_ms(1000)\n    .theme(&theme);\nlet area = Rect::new(0, 0, 40, 3);\nlet mut buf = Buffer::empty(area);\ndisplay.render(area, &mut buf);\n```"
            },
            {
              "name": "::LatencyDisplay<'a>::new",
              "line": 89,
              "signature": "#[must_use]\npub fn new(snapshot: &'a LatencySnapshot) -> Self;",
              "documentation": "Create a new latency display from a snapshot.\n\nDefault thresholds: warn at 500ms, error at 1000ms. Default unit: \"ms\"."
            },
            {
              "name": "::LatencyDisplay<'a>::warn_threshold_ms",
              "line": 104,
              "signature": "#[must_use]\npub fn warn_threshold_ms(mut self, ms: u64) -> Self;",
              "documentation": "Set the warning threshold in milliseconds.\n\nValues at or above this threshold (and below the error threshold)\nare rendered in the warning color."
            },
            {
              "name": "::LatencyDisplay<'a>::error_threshold_ms",
              "line": 113,
              "signature": "#[must_use]\npub fn error_threshold_ms(mut self, ms: u64) -> Self;",
              "documentation": "Set the error threshold in milliseconds.\n\nValues at or above this threshold are rendered in the error color."
            },
            {
              "name": "::LatencyDisplay<'a>::unit",
              "line": 120,
              "signature": "#[must_use]\npub fn unit(mut self, unit: &'a str) -> Self;",
              "documentation": "Set the unit label (default: \"ms\")."
            },
            {
              "name": "::LatencyDisplay<'a>::theme",
              "line": 127,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/metrics/metrics_bar.rs",
          "sha256": "cad330408e3109abb0d16eb814e682bb578c9217cd9d1beefd66e815e45a82b5",
          "artifactSha256": "f6f63ee94acadb42dfa425206e31385e2cff0c137904f7b80148cffd040e2f02",
          "url": "/reference/source/harness-tui-kit/src/components/metrics/metrics_bar.rs.txt",
          "declarations": [
            {
              "name": "::MetricBarItem",
              "line": 40,
              "signature": "#[derive(Debug, Clone)]\npub struct MetricBarItem<'a> {\n/// Metric label (e.g., \"Tokens\", \"Cost\", \"Latency\").\n\npub label: &'a str,\n/// Main value display (e.g., \"4,096\", \"$12.34\", \"230ms\").\n\npub value: &'a str,\n/// Delta from previous value (e.g., \"+12%\", \"-3.2%\").\n\npub delta: &'a str,\n/// Unit suffix (e.g., \"tok\", \"ms\", \"req/s\").\n\npub unit: &'a str\n}",
              "documentation": "Data for one metric in the bar.\n\nHolds the display strings needed to construct a [`MetricCard`]. All fields\nare borrowed references with the same lifetime as the parent [`MetricsBar`]."
            },
            {
              "name": "::MetricsBar",
              "line": 77,
              "signature": "#[derive(Debug, Clone)]\npub struct MetricsBar<'a> {\n\n}",
              "documentation": "Horizontal strip of [`MetricCard`] widgets.\n\nRenders metric cards left-to-right with configurable minimum card width and\nspacing between cards. When the available area cannot fit all items, the bar\nrenders as many cards as possible and shows a `\"+N more\"` overflow indicator\nat the right edge.\n\n# Examples\n\n```\nuse harness_tui_kit::{MetricBarItem, MetricsBar, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet items = [\n    MetricBarItem { label: \"RPS\", value: \"12,340\", delta: \"+8%\", unit: \"req/s\" },\n    MetricBarItem { label: \"P99\", value: \"42\", delta: \"-2%\", unit: \"ms\" },\n];\nlet theme = Theme::dark();\nlet bar = MetricsBar::new(&items).spacing(2).theme(&theme);\nlet area = Rect::new(0, 0, 60, 3);\nlet mut buf = Buffer::empty(area);\nbar.render(area, &mut buf);\n```"
            },
            {
              "name": "::MetricsBar<'a>::new",
              "line": 94,
              "signature": "#[must_use]\npub fn new(items: &'a [MetricBarItem<'a>]) -> Self;",
              "documentation": "Create a new metrics bar with the given items.\n\nUses default values of `min_card_width = 15`, `spacing = 1`, and\nthe default dark theme."
            },
            {
              "name": "::MetricsBar<'a>::min_card_width",
              "line": 108,
              "signature": "#[must_use]\npub fn min_card_width(mut self, width: u16) -> Self;",
              "documentation": "Set the minimum card width in columns.\n\nEach card will be at least this wide. If all items fit, extra width\nis distributed evenly across cards. A value of zero is treated as one."
            },
            {
              "name": "::MetricsBar<'a>::spacing",
              "line": 115,
              "signature": "#[must_use]\npub fn spacing(mut self, spacing: u16) -> Self;",
              "documentation": "Set the spacing between cards in columns."
            },
            {
              "name": "::MetricsBar<'a>::theme",
              "line": 122,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/metrics/mod.rs",
          "sha256": "4c8d2d797effe8e17eae990a32b8299c927fbe52e53ee933985ba91233683ec0",
          "artifactSha256": "2b9a7416246f23849f52d5a05031eb5247cf2632ae65756e81ac62b6d59b701a",
          "url": "/reference/source/harness-tui-kit/src/components/metrics/mod.rs.txt",
          "declarations": [
            {
              "name": "pub use card::MetricCard;",
              "line": 11,
              "signature": "pub use card::MetricCard;",
              "documentation": ""
            },
            {
              "name": "pub use cost_tracker::CostTracker;",
              "line": 12,
              "signature": "pub use cost_tracker::CostTracker;",
              "documentation": ""
            },
            {
              "name": "pub use latency_display::LatencyDisplay;",
              "line": 13,
              "signature": "pub use latency_display::LatencyDisplay;",
              "documentation": ""
            },
            {
              "name": "pub use metrics_bar::{MetricBarItem, MetricsBar};",
              "line": 14,
              "signature": "pub use metrics_bar::{MetricBarItem, MetricsBar};",
              "documentation": ""
            },
            {
              "name": "pub use token_meter::TokenMeter;",
              "line": 15,
              "signature": "pub use token_meter::TokenMeter;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/metrics/token_meter.rs",
          "sha256": "a42d1a096dad1eafe7b940fc5a672c8cd4734098c196372e167ca3c1beeecf0a",
          "artifactSha256": "c840462b82b119e61c3000da530d52dd50fe52efd7ca45b707c0b7095aefc036",
          "url": "/reference/source/harness-tui-kit/src/components/metrics/token_meter.rs.txt",
          "declarations": [
            {
              "name": "::TokenMeter",
              "line": 35,
              "signature": "#[derive(Debug, Clone)]\npub struct TokenMeter<'a> {\n\n}",
              "documentation": "Horizontal progress bar for token usage.\n\nShows used/limit tokens with a color gradient that transitions from\ngreen (low usage) through yellow (moderate) to red (near limit).\nOptionally displays model name, numeric count, and estimated cost."
            },
            {
              "name": "::TokenMeter<'a>::new",
              "line": 59,
              "signature": "#[must_use]\npub fn new(used: u64, limit: u64) -> Self;",
              "documentation": "Create a new token meter with used and limit counts.\n\n# Examples\n\n```\nuse harness_tui_kit::TokenMeter;\n\nlet meter = TokenMeter::new(1000, 4096);\n```"
            },
            {
              "name": "::TokenMeter<'a>::model",
              "line": 71,
              "signature": "#[must_use]\npub fn model(mut self, model: &'a str) -> Self;",
              "documentation": "Set the model name label."
            },
            {
              "name": "::TokenMeter<'a>::cost",
              "line": 78,
              "signature": "#[must_use]\npub fn cost(mut self, cost: &'a str) -> Self;",
              "documentation": "Set the estimated cost display."
            },
            {
              "name": "::TokenMeter<'a>::theme",
              "line": 85,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/mod.rs",
          "sha256": "07025a6f2f654560ea7274644f075b441aad378f987585593474ec0210a64e57",
          "artifactSha256": "175974f5aa402dce52af7f0bbc7170e387726ce8d1607fc8793afe04afb8e3d5",
          "url": "/reference/source/harness-tui-kit/src/components/mod.rs.txt",
          "declarations": [
            {
              "name": "agent",
              "line": 3,
              "signature": "pub mod agent;",
              "documentation": "TUI components organized by domain."
            },
            {
              "name": "chat",
              "line": 4,
              "signature": "pub mod chat;",
              "documentation": ""
            },
            {
              "name": "governance",
              "line": 5,
              "signature": "pub mod governance;",
              "documentation": ""
            },
            {
              "name": "harness",
              "line": 6,
              "signature": "pub mod harness;",
              "documentation": ""
            },
            {
              "name": "history",
              "line": 7,
              "signature": "pub mod history;",
              "documentation": ""
            },
            {
              "name": "hitl",
              "line": 8,
              "signature": "pub mod hitl;",
              "documentation": ""
            },
            {
              "name": "metrics",
              "line": 9,
              "signature": "pub mod metrics;",
              "documentation": ""
            },
            {
              "name": "system",
              "line": 10,
              "signature": "pub mod system;",
              "documentation": ""
            },
            {
              "name": "workflow",
              "line": 11,
              "signature": "pub mod workflow;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/app_shell.rs",
          "sha256": "cb2943fea94f40dd0abff1eb1a83352608ab05f5da1f210ba49746d798e62bfd",
          "artifactSha256": "50089ee24134e583774539527f2220925fa5615ff1150c3f3aeb0b4eead1a2db",
          "url": "/reference/source/harness-tui-kit/src/components/system/app_shell.rs.txt",
          "declarations": [
            {
              "name": "::ShellPanel",
              "line": 66,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]\npub enum ShellPanel {\n    /// The top header strip.\n    Header,\n    /// The left sidebar panel.\n    Sidebar,\n    /// The main content area.\n    #[default]\n    Content,\n    /// The bottom footer strip.\n    Footer,\n}",
              "documentation": "Identifies a panel within the application shell.\n\nUsed for focus tracking and determining which panel border should\nreceive the accent color highlight.\n\n# Variants\n\n- [`Header`](ShellPanel::Header) \u2014 The fixed-height strip at the top.\n- [`Sidebar`](ShellPanel::Sidebar) \u2014 The fixed-width panel on the left.\n- [`Content`](ShellPanel::Content) \u2014 The main content area (default focus).\n- [`Footer`](ShellPanel::Footer) \u2014 The fixed-height strip at the bottom."
            },
            {
              "name": "::AppShellState",
              "line": 117,
              "signature": "#[derive(Debug, Clone)]\npub struct AppShellState {\n\n}",
              "documentation": "Mutable state for [`AppShell`], persists across frames.\n\nTracks focus, sidebar visibility, and computed layout rectangles. After\nrendering, the computed [`Rect`] areas are available via accessor methods\nfor the caller to render content into each panel.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::{AppShellState, ShellPanel};\n\nlet mut state = AppShellState::default();\nassert_eq!(state.focused_panel(), ShellPanel::Content);\nassert!(!state.is_sidebar_collapsed());\n\nstate.toggle_sidebar();\nassert!(state.is_sidebar_collapsed());\n\nstate.cycle_focus();\nassert_eq!(state.focused_panel(), ShellPanel::Footer);\n```"
            },
            {
              "name": "::AppShellState::toggle_sidebar",
              "line": 163,
              "signature": "pub fn toggle_sidebar(&mut self);",
              "documentation": "Toggle sidebar between collapsed and expanded.\n\nWhen collapsed, the sidebar width becomes zero and the content area\nexpands to fill the remaining space.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShellState;\n\nlet mut state = AppShellState::default();\nassert!(!state.is_sidebar_collapsed());\nstate.toggle_sidebar();\nassert!(state.is_sidebar_collapsed());\nstate.toggle_sidebar();\nassert!(!state.is_sidebar_collapsed());\n```"
            },
            {
              "name": "::AppShellState::set_focus",
              "line": 184,
              "signature": "pub fn set_focus(&mut self, panel: ShellPanel);",
              "documentation": "Set the currently focused panel.\n\nThe focused panel's adjacent borders are drawn with the accent color.\n\n# Arguments\n\n* `panel` \u2014 The panel to focus.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::{AppShellState, ShellPanel};\n\nlet mut state = AppShellState::default();\nstate.set_focus(ShellPanel::Sidebar);\nassert_eq!(state.focused_panel(), ShellPanel::Sidebar);\n```"
            },
            {
              "name": "::AppShellState::cycle_focus",
              "line": 205,
              "signature": "pub fn cycle_focus(&mut self);",
              "documentation": "Cycle focus to the next panel.\n\nOrder: `Header` -> `Sidebar` -> `Content` -> `Footer` -> `Header`.\nIf the sidebar is collapsed, `Sidebar` is skipped in the cycle.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::{AppShellState, ShellPanel};\n\nlet mut state = AppShellState::default();\nassert_eq!(state.focused_panel(), ShellPanel::Content);\nstate.cycle_focus();\nassert_eq!(state.focused_panel(), ShellPanel::Footer);\nstate.cycle_focus();\nassert_eq!(state.focused_panel(), ShellPanel::Header);\n```"
            },
            {
              "name": "::AppShellState::is_sidebar_collapsed",
              "line": 225,
              "signature": "#[must_use]\npub fn is_sidebar_collapsed(&self) -> bool;",
              "documentation": "Check whether the sidebar is currently collapsed.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShellState;\n\nlet state = AppShellState::default();\nassert!(!state.is_sidebar_collapsed());\n```"
            },
            {
              "name": "::AppShellState::focused_panel",
              "line": 240,
              "signature": "#[must_use]\npub fn focused_panel(&self) -> ShellPanel;",
              "documentation": "Get the currently focused panel.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::{AppShellState, ShellPanel};\n\nlet state = AppShellState::default();\nassert_eq!(state.focused_panel(), ShellPanel::Content);\n```"
            },
            {
              "name": "::AppShellState::reset",
              "line": 258,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset state to defaults (content focused, sidebar visible, zero-area rects).\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::{AppShellState, ShellPanel};\n\nlet mut state = AppShellState::default();\nstate.set_focus(ShellPanel::Footer);\nstate.toggle_sidebar();\nstate.reset();\nassert_eq!(state.focused_panel(), ShellPanel::Content);\nassert!(!state.is_sidebar_collapsed());\n```"
            },
            {
              "name": "::AppShellState::header_area",
              "line": 276,
              "signature": "#[must_use]\npub fn header_area(&self) -> Rect;",
              "documentation": "Get the computed header area from the last render.\n\nReturns [`Rect::ZERO`] if the widget has not been rendered yet.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShellState;\nuse ratatui::layout::Rect;\n\nlet state = AppShellState::default();\nassert_eq!(state.header_area(), Rect::ZERO);\n```"
            },
            {
              "name": "::AppShellState::sidebar_area",
              "line": 295,
              "signature": "#[must_use]\npub fn sidebar_area(&self) -> Rect;",
              "documentation": "Get the computed sidebar area from the last render.\n\nReturns a zero-width [`Rect`] when the sidebar is collapsed.\nReturns [`Rect::ZERO`] if the widget has not been rendered yet.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShellState;\nuse ratatui::layout::Rect;\n\nlet state = AppShellState::default();\nassert_eq!(state.sidebar_area(), Rect::ZERO);\n```"
            },
            {
              "name": "::AppShellState::content_area",
              "line": 313,
              "signature": "#[must_use]\npub fn content_area(&self) -> Rect;",
              "documentation": "Get the computed content area from the last render.\n\nReturns [`Rect::ZERO`] if the widget has not been rendered yet.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShellState;\nuse ratatui::layout::Rect;\n\nlet state = AppShellState::default();\nassert_eq!(state.content_area(), Rect::ZERO);\n```"
            },
            {
              "name": "::AppShellState::footer_area",
              "line": 331,
              "signature": "#[must_use]\npub fn footer_area(&self) -> Rect;",
              "documentation": "Get the computed footer area from the last render.\n\nReturns [`Rect::ZERO`] if the widget has not been rendered yet.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShellState;\nuse ratatui::layout::Rect;\n\nlet state = AppShellState::default();\nassert_eq!(state.footer_area(), Rect::ZERO);\n```"
            },
            {
              "name": "::AppShell",
              "line": 384,
              "signature": "#[derive(Debug, Clone)]\npub struct AppShell<'a> {\n\n}",
              "documentation": "Application shell layout widget.\n\nComputes a 4-slot layout (header, footer, sidebar, content) within the given\narea and draws thin border lines (`\u2502`, `\u2500`) between panels when borders are\nenabled. The widget itself only draws the divider lines; the caller retrieves\nthe computed sub-areas from [`AppShellState`] to render content.\n\n# Layout\n\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                 Header                  \u2502  (header_height rows)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502          \u2502                              \u2502\n\u2502 Sidebar  \u2502          Content             \u2502\n\u2502          \u2502                              \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502                 Footer                  \u2502  (footer_height rows)\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::{AppShell, AppShellState};\nuse harness_tui_kit::Theme;\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet mut state = AppShellState::default();\nlet area = Rect::new(0, 0, 80, 24);\nlet mut buf = Buffer::empty(area);\nAppShell::new()\n    .theme(&theme)\n    .header_height(2)\n    .sidebar_width(30)\n    .show_borders(true)\n    .render(area, &mut buf, &mut state);\n\n// Now use the computed areas\nlet content_rect = state.content_area();\nassert!(content_rect.width > 0);\n```"
            },
            {
              "name": "::AppShell<'a>::new",
              "line": 411,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new application shell with default settings.\n\nDefaults: `header_height=1`, `footer_height=1`, `sidebar_width=25`,\n`show_borders=true`.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShell;\n\nlet shell = AppShell::new();\n```"
            },
            {
              "name": "::AppShell<'a>::theme",
              "line": 433,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for border rendering.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShell;\nuse harness_tui_kit::Theme;\n\nlet theme = Theme::midnight();\nlet shell = AppShell::new().theme(&theme);\n```"
            },
            {
              "name": "::AppShell<'a>::header_height",
              "line": 448,
              "signature": "#[must_use]\npub fn header_height(mut self, height: u16) -> Self;",
              "documentation": "Set the header height in rows.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShell;\n\nlet shell = AppShell::new().header_height(3);\n```"
            },
            {
              "name": "::AppShell<'a>::footer_height",
              "line": 463,
              "signature": "#[must_use]\npub fn footer_height(mut self, height: u16) -> Self;",
              "documentation": "Set the footer height in rows.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShell;\n\nlet shell = AppShell::new().footer_height(2);\n```"
            },
            {
              "name": "::AppShell<'a>::sidebar_width",
              "line": 478,
              "signature": "#[must_use]\npub fn sidebar_width(mut self, width: u16) -> Self;",
              "documentation": "Set the sidebar width in columns.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShell;\n\nlet shell = AppShell::new().sidebar_width(40);\n```"
            },
            {
              "name": "::AppShell<'a>::show_borders",
              "line": 498,
              "signature": "#[must_use]\npub fn show_borders(mut self, show: bool) -> Self;",
              "documentation": "Set whether to draw border lines between panels.\n\nWhen `true`, thin lines (`\u2502` between sidebar and content, `\u2500` between\nheader/footer and the middle row) are drawn. The focused panel's\nadjacent borders use the accent color; unfocused borders use the\ndefault border color.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::app_shell::AppShell;\n\nlet shell = AppShell::new().show_borders(false);\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/banner.rs",
          "sha256": "cc07971f3297b5ee4f4720e11e7b125f20ef3fbdf756c45511a90b9a3b5ece54",
          "artifactSha256": "f1494f079e9fc3ec969dd5ea514111c31fe346a598e024f41bd07a42fc927a14",
          "url": "/reference/source/harness-tui-kit/src/components/system/banner.rs.txt",
          "declarations": [
            {
              "name": "::Banner",
              "line": 117,
              "signature": "#[derive(Debug, Clone)]\npub struct Banner<'a> {\n\n}",
              "documentation": "ASCII art banner text renderer.\n\nRenders text as large block characters (5 rows tall) with optional\ncolor gradient support. Supports A-Z, 0-9, space, and basic punctuation\n(`-`, `.`, `!`, `?`). Input text is uppercased before rendering.\n\nUnknown characters are rendered as a gap equal to one space glyph.\n\nWhen the total rendered width exceeds the available area, characters that\ndo not fit are silently truncated. The banner is vertically centred when\nthe area height exceeds 5 rows.\n\n# Examples\n\n```\nuse harness_tui_kit::{Banner, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet banner = Banner::new(\"HELLO\");\nlet area = Rect::new(0, 0, 40, 5);\nlet mut buf = Buffer::empty(area);\nbanner.render(area, &mut buf);\n```"
            },
            {
              "name": "::Banner<'a>::new",
              "line": 132,
              "signature": "#[must_use]\npub fn new(text: &'a str) -> Self;",
              "documentation": "Create a new banner with the given text and default settings.\n\nThe default theme is [`crate::DEFAULT_THEME`] (dark) and gradient is\ndisabled. Use the builder methods to change these."
            },
            {
              "name": "::Banner<'a>::gradient",
              "line": 146,
              "signature": "#[must_use]\npub fn gradient(mut self, gradient: bool) -> Self;",
              "documentation": "Enable or disable the left-to-right color gradient.\n\nWhen enabled the foreground color is interpolated from `theme.accent`\n(left edge) to `theme.success` (right edge) across the total rendered\nwidth."
            },
            {
              "name": "::Banner<'a>::theme",
              "line": 153,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme used for colors."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/block_logo.rs",
          "sha256": "56099bfc61b8c840513d6907ca391b7a641b39fc68d1280f5087dbc1c553edc6",
          "artifactSha256": "72747cadca4a7106b32313894bdae326d0887bb08772dad2d5d9c540f0fdf426",
          "url": "/reference/source/harness-tui-kit/src/components/system/block_logo.rs.txt",
          "declarations": [
            {
              "name": "::BLOCK_LOGO_HEIGHT",
              "line": 26,
              "signature": "pub const BLOCK_LOGO_HEIGHT: u16;",
              "documentation": "Number of cell rows each glyph occupies."
            },
            {
              "name": "::BLOCK_LOGO_GLYPH_WIDTH",
              "line": 28,
              "signature": "pub const BLOCK_LOGO_GLYPH_WIDTH: u16;",
              "documentation": "Width of a single glyph in terminal cells."
            },
            {
              "name": "::BLOCK_LOGO_SPACING",
              "line": 30,
              "signature": "pub const BLOCK_LOGO_SPACING: u16;",
              "documentation": "Spacing inserted between glyphs."
            },
            {
              "name": "::BlockLogo",
              "line": 50,
              "signature": "#[derive(Debug, Clone)]\npub struct BlockLogo<'a> {\n\n}",
              "documentation": "A hero-sized block-letter logo.\n\n# Examples\n\n```\nuse harness_tui_kit::{BlockLogo, Theme};\nuse ratatui::buffer::Buffer;\nuse ratatui::layout::Rect;\nuse ratatui::widgets::Widget;\n\nlet theme = Theme::claude();\nlet area = Rect::new(0, 0, 80, 8);\nlet mut buf = Buffer::empty(area);\nBlockLogo::new(\"clausen\").theme(&theme).render(area, &mut buf);\n```"
            },
            {
              "name": "::BlockLogo<'a>::new",
              "line": 67,
              "signature": "#[must_use]\npub fn new(text: &'a str) -> Self;",
              "documentation": "Create a logo for `text`. Lowercase letters are folded to\nuppercase glyphs since the bundled font is uppercase-only."
            },
            {
              "name": "::BlockLogo<'a>::theme",
              "line": 79,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::BlockLogo<'a>::fill",
              "line": 86,
              "signature": "#[must_use]\npub fn fill(mut self, color: Color) -> Self;",
              "documentation": "Override the fill color (defaults to `theme.fg_primary`)."
            },
            {
              "name": "::BlockLogo<'a>::gradient",
              "line": 96,
              "signature": "#[must_use]\npub fn gradient(mut self, from: Color, to: Color) -> Self;",
              "documentation": "Set a horizontal color gradient: cells are linearly\ninterpolated from `from` (left edge) to `to` (right edge).\nBoth endpoints must be RGB colors; non-RGB inputs are\nsilently treated as the fixed [`Self::fill`] color."
            },
            {
              "name": "::BlockLogo<'a>::dim_prefix",
              "line": 106,
              "signature": "#[must_use]\npub fn dim_prefix(mut self, n: usize) -> Self;",
              "documentation": "Render the first `n` characters of the brand at half-strength\n(using `theme.fg_disabled`) so the latter half pops. Set this\nto e.g. `4` when the brand text is \"opencode\" so \"open\" is\ndim and \"code\" is bright \u2014 mirroring the opencode banner."
            },
            {
              "name": "::BlockLogo<'a>::measured_width",
              "line": 113,
              "signature": "#[must_use]\npub fn measured_width(&self) -> u16;",
              "documentation": "Total width in cells the logo will occupy when rendered."
            },
            {
              "name": "::BlockLogo<'a>::measured_height",
              "line": 123,
              "signature": "#[must_use]\npub const fn measured_height(&self) -> u16;",
              "documentation": "Height in cells."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/command_palette.rs",
          "sha256": "202243418e6fc5a3e5114988a9c4ef36a7bf6345e619e90b75f48b3bc121e9bf",
          "artifactSha256": "88d3e1e8525d9f04dc73f0a4406ca623ae816a79d441b09737a15199810a9ba6",
          "url": "/reference/source/harness-tui-kit/src/components/system/command_palette.rs.txt",
          "declarations": [
            {
              "name": "::fuzzy_score",
              "line": 84,
              "signature": "#[must_use]\npub fn fuzzy_score(query: &str, text: &str) -> Option<u32>;",
              "documentation": "Compute a fuzzy match score between a query and a target text.\n\nPerforms case-insensitive ordered substring matching: every character in `query`\nmust appear in `text` in order, but not necessarily contiguously. The score is\nthe sum of a consecutive-match bonus and a position bonus (earlier matches score\nhigher).\n\nReturns `None` if not all query characters are found in order.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::command_palette::fuzzy_score;\n\nassert!(fuzzy_score(\"of\", \"Open File\").is_some());\nassert!(fuzzy_score(\"xyz\", \"Open File\").is_none());\nassert_eq!(fuzzy_score(\"\", \"anything\"), Some(0));\n```"
            },
            {
              "name": "::CommandPaletteState",
              "line": 150,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct CommandPaletteState {\n\n}",
              "documentation": "Mutable state for [`CommandPalette`], persists across frames.\n\nTracks the current search query, which items match the query, the selected\nindex within the filtered list, and whether the palette is visible.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::command_palette::CommandPaletteState;\nuse harness_tui_kit::PaletteItem;\n\nlet items = vec![\n    PaletteItem::new(\"Open\", \"Open file\", \"File\"),\n    PaletteItem::new(\"Save\", \"Save file\", \"File\"),\n];\nlet mut state = CommandPaletteState::default();\nstate.show();\nstate.set_query(\"sav\", &items);\nassert_eq!(state.filtered_indices().len(), 1);\n```"
            },
            {
              "name": "::CommandPaletteState::set_query",
              "line": 167,
              "signature": "pub fn set_query(&mut self, text: &str, items: &[PaletteItem]);",
              "documentation": "Set the search query and refilter items.\n\nReplaces the current query with `text` (after sanitization), recomputes\nthe filtered indices, and resets the selection to the first result."
            },
            {
              "name": "::CommandPaletteState::append_char",
              "line": 176,
              "signature": "pub fn append_char(&mut self, ch: char);",
              "documentation": "Append a character to the current query.\n\nDoes not refilter automatically; call [`refilter`](Self::refilter) after\nappending to update the filtered results."
            },
            {
              "name": "::CommandPaletteState::delete_char",
              "line": 184,
              "signature": "pub fn delete_char(&mut self);",
              "documentation": "Delete the last character from the query.\n\nDoes not refilter automatically; call [`refilter`](Self::refilter) after\ndeleting to update the filtered results."
            },
            {
              "name": "::CommandPaletteState::refilter",
              "line": 193,
              "signature": "pub fn refilter(&mut self, items: &[PaletteItem]);",
              "documentation": "Recompute filtered indices based on the current query.\n\nWhen the query is empty, all items are included (in original order).\nOtherwise, items are fuzzy-matched and sorted by score descending.\nResets the selected index to 0."
            },
            {
              "name": "::CommandPaletteState::select_next",
              "line": 226,
              "signature": "pub fn select_next(&mut self);",
              "documentation": "Move selection to the next filtered item.\n\nWraps around to the first item when at the end."
            },
            {
              "name": "::CommandPaletteState::select_prev",
              "line": 239,
              "signature": "pub fn select_prev(&mut self);",
              "documentation": "Move selection to the previous filtered item.\n\nStops at the first item (does not wrap)."
            },
            {
              "name": "::CommandPaletteState::confirm",
              "line": 248,
              "signature": "#[must_use]\npub fn confirm(&self) -> Option<usize>;",
              "documentation": "Confirm the current selection and return the original index.\n\nReturns `Some(index)` where `index` is the position in the original\nitems slice, or `None` if there are no filtered results."
            },
            {
              "name": "::CommandPaletteState::show",
              "line": 255,
              "signature": "pub fn show(&mut self);",
              "documentation": "Show the command palette.\n\nMakes the palette visible on the next render frame."
            },
            {
              "name": "::CommandPaletteState::hide",
              "line": 262,
              "signature": "pub fn hide(&mut self);",
              "documentation": "Hide the command palette.\n\nMakes the palette invisible on the next render frame."
            },
            {
              "name": "::CommandPaletteState::toggle",
              "line": 269,
              "signature": "pub fn toggle(&mut self);",
              "documentation": "Toggle the palette's visibility.\n\nIf visible, hides it. If hidden, shows it."
            },
            {
              "name": "::CommandPaletteState::is_visible",
              "line": 275,
              "signature": "#[must_use]\npub fn is_visible(&self) -> bool;",
              "documentation": "Returns `true` if the palette is currently visible."
            },
            {
              "name": "::CommandPaletteState::reset",
              "line": 282,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the palette to its default state.\n\nClears the query, selection, filtered indices, and hides the palette."
            },
            {
              "name": "::CommandPaletteState::query",
              "line": 288,
              "signature": "#[must_use]\npub fn query(&self) -> &str;",
              "documentation": "Returns the current search query."
            },
            {
              "name": "::CommandPaletteState::selected",
              "line": 294,
              "signature": "#[must_use]\npub fn selected(&self) -> usize;",
              "documentation": "Returns the current selected index within filtered results."
            },
            {
              "name": "::CommandPaletteState::filtered_indices",
              "line": 300,
              "signature": "#[must_use]\npub fn filtered_indices(&self) -> &[usize];",
              "documentation": "Returns the filtered indices."
            },
            {
              "name": "::CommandPalette",
              "line": 341,
              "signature": "#[derive(Debug, Clone)]\npub struct CommandPalette<'a> {\n\n}",
              "documentation": "Overlay command palette for searching and selecting commands.\n\nRenders as a centered overlay on top of the existing terminal content when\nthe state is visible. The palette contains:\n\n1. A search input row with a `> ` prompt, the current query, and a cursor\n2. Filtered result rows grouped by category, with label (bold), description\n   (muted), category badge (right-aligned, dimmed), and optional shortcut\n\nThe background behind the palette is dimmed. Items are fuzzy-matched against\nthe current query and sorted by relevance.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::command_palette::{CommandPalette, CommandPaletteState};\nuse harness_tui_kit::{PaletteItem, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet items = vec![\n    PaletteItem::new(\"Open File\", \"Open a file\", \"File\"),\n];\nlet theme = Theme::dark();\nlet mut state = CommandPaletteState::default();\nstate.show();\nstate.refilter(&items);\n\nlet area = Rect::new(0, 0, 80, 30);\nlet mut buf = Buffer::empty(area);\nCommandPalette::new(&items).theme(&theme).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::CommandPalette<'a>::new",
              "line": 357,
              "signature": "#[must_use]\npub fn new(items: &'a [PaletteItem]) -> Self;",
              "documentation": "Create a new command palette with the given items.\n\nUses the default theme, 12 max visible rows, and 60% width."
            },
            {
              "name": "::CommandPalette<'a>::theme",
              "line": 368,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern)."
            },
            {
              "name": "::CommandPalette<'a>::max_visible",
              "line": 375,
              "signature": "#[must_use]\npub fn max_visible(mut self, max_visible: usize) -> Self;",
              "documentation": "Set the maximum number of visible result rows (builder pattern)."
            },
            {
              "name": "::CommandPalette<'a>::width_percent",
              "line": 384,
              "signature": "#[must_use]\npub fn width_percent(mut self, pct: u16) -> Self;",
              "documentation": "Set the width as a percentage of the terminal area (builder pattern).\n\nClamped to 10..=100. Values outside this range are clamped."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/custom_logo.rs",
          "sha256": "7f305e53a61702cfad178c9f6d986028645b9b1d9f1e0416ef46d9d3c0d8599c",
          "artifactSha256": "02e24eec059c17194e894271c8ec1a29cb0fc1961aac25b69ea5e5bbff702c28",
          "url": "/reference/source/harness-tui-kit/src/components/system/custom_logo.rs.txt",
          "declarations": [
            {
              "name": "::CLAUSEN_LOGO_ROWS",
              "line": 33,
              "signature": "pub const CLAUSEN_LOGO_ROWS: &[&str];",
              "documentation": "Hand-authored Clausen wordmark \u2014 7 rows, ~100 cells wide.\n\nExported from `/Volumes/L1feAI/l1feosx/clausen-text-logo.rs` and\nstripped of ANSI styling so the widget can apply theme colors."
            },
            {
              "name": "::CustomLogo",
              "line": 45,
              "signature": "#[derive(Debug, Clone)]\npub struct CustomLogo<'a> {\n\n}",
              "documentation": "Render arbitrary block art onto a [`Buffer`]."
            },
            {
              "name": "::CustomLogo<'a>::new",
              "line": 57,
              "signature": "#[must_use]\npub fn new(rows: &'a [&'a str]) -> Self;",
              "documentation": "Construct a custom logo from explicit rows."
            },
            {
              "name": "::CustomLogo<'a>::clausen",
              "line": 68,
              "signature": "#[must_use]\npub fn clausen() -> Self;",
              "documentation": "Convenience: render the bundled Clausen wordmark."
            },
            {
              "name": "::CustomLogo<'a>::theme",
              "line": 74,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::CustomLogo<'a>::fill",
              "line": 81,
              "signature": "#[must_use]\npub fn fill(mut self, color: Color) -> Self;",
              "documentation": "Override the `\u2588` (full block) fill color."
            },
            {
              "name": "::CustomLogo<'a>::shade",
              "line": 88,
              "signature": "#[must_use]\npub fn shade(mut self, color: Color) -> Self;",
              "documentation": "Override the `\u2591` (shade) color."
            },
            {
              "name": "::CustomLogo<'a>::measured_width",
              "line": 95,
              "signature": "#[must_use]\npub fn measured_width(&self) -> u16;",
              "documentation": "Width in cells the logo occupies (max row length)."
            },
            {
              "name": "::CustomLogo<'a>::measured_height",
              "line": 105,
              "signature": "#[must_use]\npub fn measured_height(&self) -> u16;",
              "documentation": "Height in cells (number of rows)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/focus_card.rs",
          "sha256": "1c5f54fe17edb600d765f2faf6cac97142862d2034e327c06c7eb06d4b23ca4c",
          "artifactSha256": "cb2103497bcbdec7554e6b6a741395a2cae7a6f0d7c3701674eb4b7218788785",
          "url": "/reference/source/harness-tui-kit/src/components/system/focus_card.rs.txt",
          "declarations": [
            {
              "name": "::FocusCard",
              "line": 65,
              "signature": "#[derive(Debug, Clone)]\npub struct FocusCard<'a> {\n\n}",
              "documentation": "An elevated composer-style panel.\n\nLayout:\n\n```text\n\u258e Ask anything... \"Fix a TODO in the codebase\"\n\u258e\n\u258e Build \u00b7 Kimi K2.6 Kimi For Coding\n```\n\nThe accent stripe color comes from `theme.accent`. The placeholder\nis rendered dim/italic, and the meta line uses a bold mode tag\nfollowed by a dim model name and tagline.\n\n# Examples\n\n```\nuse harness_tui_kit::{FocusCard, Theme};\nuse ratatui::buffer::Buffer;\nuse ratatui::layout::Rect;\nuse ratatui::widgets::Widget;\n\nlet theme = Theme::claude();\nlet area = Rect::new(0, 0, 80, 5);\nlet mut buf = Buffer::empty(area);\nFocusCard::new()\n    .placeholder(\"Ask anything... \\\"Fix a TODO in the codebase\\\"\")\n    .mode(\"Build\")\n    .model(\"Kimi K2.6\")\n    .tagline(\"Kimi For Coding\")\n    .theme(&theme)\n    .render(area, &mut buf);\n```"
            },
            {
              "name": "::FocusCard<'a>::new",
              "line": 76,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Construct a card with default empty content."
            },
            {
              "name": "::FocusCard<'a>::placeholder",
              "line": 88,
              "signature": "#[must_use]\npub fn placeholder(mut self, text: &'a str) -> Self;",
              "documentation": "Set the dim placeholder line shown at the top of the card."
            },
            {
              "name": "::FocusCard<'a>::mode",
              "line": 96,
              "signature": "#[must_use]\npub fn mode(mut self, label: &'a str) -> Self;",
              "documentation": "Set the bold mode tag rendered first on the meta line\n(e.g. `\"Build\"`, `\"Plan\"`, `\"Auto\"`)."
            },
            {
              "name": "::FocusCard<'a>::model",
              "line": 103,
              "signature": "#[must_use]\npub fn model(mut self, name: &'a str) -> Self;",
              "documentation": "Set the model name shown after the mode tag (e.g. `\"GPT-4o\"`)."
            },
            {
              "name": "::FocusCard<'a>::tagline",
              "line": 111,
              "signature": "#[must_use]\npub fn tagline(mut self, text: &'a str) -> Self;",
              "documentation": "Set the dim tagline that follows the model name on the meta\nline (e.g. `\"Kimi For Coding\"`)."
            },
            {
              "name": "::FocusCard<'a>::theme",
              "line": 118,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::FocusCard<'a>::suggested_height",
              "line": 126,
              "signature": "#[must_use]\npub const fn suggested_height() -> u16;",
              "documentation": "Suggested height: 1 placeholder + 1 spacer + 1 meta = 3 rows\nof content + 2 vertical pad rows = 5 rows total."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/goal_display.rs",
          "sha256": "8dea79888504ecd7332070e7d5bbacecc447c2d98acf68c3993ba34575e99657",
          "artifactSha256": "94f043b33de631562c6fbed570d42f62d9da926a530d1779d7c160f555a81c4e",
          "url": "/reference/source/harness-tui-kit/src/components/system/goal_display.rs.txt",
          "declarations": [
            {
              "name": "::GoalStepStatus",
              "line": 22,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum GoalStepStatus {\n    /// Not started yet.\n    Pending,\n    /// Currently executing.\n    InProgress,\n    /// Completed successfully.\n    Done,\n    /// Skipped by the user / planner.\n    Skipped,\n    /// Failed (with an error).\n    Failed,\n}",
              "documentation": "Status of one step in the goal plan."
            },
            {
              "name": "::GoalStep",
              "line": 49,
              "signature": "#[derive(Debug, Clone)]\npub struct GoalStep {\n/// One-line description of the step.\n\npub label: String,\n/// Current execution status.\n\npub status: GoalStepStatus\n}",
              "documentation": "One step in a goal plan."
            },
            {
              "name": "::GoalStep::new",
              "line": 59,
              "signature": "#[must_use]\npub fn new(label: impl Into<String>, status: GoalStepStatus) -> Self;",
              "documentation": "Convenience constructor."
            },
            {
              "name": "::GoalDisplay",
              "line": 69,
              "signature": "#[derive(Debug, Clone)]\npub struct GoalDisplay<'a> {\n\n}",
              "documentation": "Goal panel widget."
            },
            {
              "name": "::GoalDisplay<'a>::new",
              "line": 80,
              "signature": "#[must_use]\npub fn new(goal: &'a str, steps: &'a [GoalStep]) -> Self;",
              "documentation": "Construct a new goal panel."
            },
            {
              "name": "::GoalDisplay<'a>::title",
              "line": 92,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Override the panel title."
            },
            {
              "name": "::GoalDisplay<'a>::no_border",
              "line": 100,
              "signature": "#[must_use]\npub fn no_border(mut self) -> Self;",
              "documentation": "Disable the bordered block \u2014 useful when embedding the goal\ndisplay inside another container."
            },
            {
              "name": "::GoalDisplay<'a>::theme",
              "line": 107,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/hint_bar.rs",
          "sha256": "cf0823e78394b29e32cf04d707fc49b047ff04765d882b05780cd2399d05abc5",
          "artifactSha256": "48b3c47a6651daeb9ffee1ab5b17d386138cb6cea9cebb6093dd6c7c598354b3",
          "url": "/reference/source/harness-tui-kit/src/components/system/hint_bar.rs.txt",
          "declarations": [
            {
              "name": "::HintItem",
              "line": 25,
              "signature": "#[derive(Debug, Clone)]\npub struct HintItem {\n/// Keystroke label (e.g. `\"tab\"`, `\"ctrl+p\"`).\n\npub key: String,\n/// What the key does (e.g. `\"agents\"`, `\"commands\"`).\n\npub action: String\n}",
              "documentation": "A single key/action pair."
            },
            {
              "name": "::HintItem::new",
              "line": 35,
              "signature": "#[must_use]\npub fn new(key: impl Into<String>, action: impl Into<String>) -> Self;",
              "documentation": "Construct a hint item."
            },
            {
              "name": "::HintItem::width",
              "line": 44,
              "signature": "#[must_use]\npub fn width(&self) -> u16;",
              "documentation": "Width in cells the item will occupy: `key`+space+`action`."
            },
            {
              "name": "::HintBar",
              "line": 51,
              "signature": "#[derive(Debug, Clone)]\npub struct HintBar<'a> {\n\n}",
              "documentation": "Right-aligned hint row."
            },
            {
              "name": "::HintBar<'a>::new",
              "line": 64,
              "signature": "#[must_use]\npub fn new(items: &'a [HintItem]) -> Self;",
              "documentation": "Create a hint bar from a slice of pairs."
            },
            {
              "name": "::HintBar<'a>::theme",
              "line": 75,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::HintBar<'a>::right_align",
              "line": 82,
              "signature": "#[must_use]\npub fn right_align(mut self, on: bool) -> Self;",
              "documentation": "Toggle right-alignment (default: on)."
            },
            {
              "name": "::HintBar<'a>::item_gap",
              "line": 89,
              "signature": "#[must_use]\npub fn item_gap(mut self, gap: u16) -> Self;",
              "documentation": "Override the inter-item gap (default: 3 cells)."
            },
            {
              "name": "::HintBar<'a>::measured_width",
              "line": 96,
              "signature": "#[must_use]\npub fn measured_width(&self) -> u16;",
              "documentation": "Total width the items will consume."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/keyboard_help.rs",
          "sha256": "8000990550f10cd3f075575a2e9e615e927e8cada886fe1ddff4beac79761fef",
          "artifactSha256": "5ff8405325190b2a850aee5b519a3120433615e2e44b78c393798859c8743f4c",
          "url": "/reference/source/harness-tui-kit/src/components/system/keyboard_help.rs.txt",
          "declarations": [
            {
              "name": "::KeyboardHelpState",
              "line": 85,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct KeyboardHelpState {\n\n}",
              "documentation": "Mutable state for [`KeyboardHelp`], persists across frames.\n\nTracks the overlay's visibility and vertical scroll position.\nToggle visibility with [`show`](KeyboardHelpState::show),\n[`hide`](KeyboardHelpState::hide), or [`toggle`](KeyboardHelpState::toggle).\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::keyboard_help::KeyboardHelpState;\n\nlet mut state = KeyboardHelpState::default();\nassert!(!state.is_visible());\nstate.show();\nassert!(state.is_visible());\nstate.toggle();\nassert!(!state.is_visible());\n```"
            },
            {
              "name": "::KeyboardHelpState::show",
              "line": 97,
              "signature": "pub fn show(&mut self);",
              "documentation": "Show the help overlay.\n\nMakes the overlay visible on the next render frame.\nResets the scroll position to the top."
            },
            {
              "name": "::KeyboardHelpState::hide",
              "line": 103,
              "signature": "pub fn hide(&mut self);",
              "documentation": "Hide the help overlay."
            },
            {
              "name": "::KeyboardHelpState::toggle",
              "line": 110,
              "signature": "pub fn toggle(&mut self);",
              "documentation": "Toggle the help overlay's visibility.\n\nIf visible, hides it. If hidden, shows it (resetting scroll to top)."
            },
            {
              "name": "::KeyboardHelpState::is_visible",
              "line": 129,
              "signature": "#[must_use]\npub fn is_visible(&self) -> bool;",
              "documentation": "Returns `true` if the overlay is currently visible.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::keyboard_help::KeyboardHelpState;\n\nlet state = KeyboardHelpState::default();\nassert!(!state.is_visible());\n```"
            },
            {
              "name": "::KeyboardHelpState::scroll_up",
              "line": 136,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll the content up by one line.\n\nStops at the top (offset 0)."
            },
            {
              "name": "::KeyboardHelpState::scroll_down",
              "line": 144,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll the content down by one line.\n\nThe maximum scroll is clamped during rendering to prevent scrolling\npast the content."
            },
            {
              "name": "::KeyboardHelpState::reset",
              "line": 151,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to its default values.\n\nHides the overlay and resets scroll to the top."
            },
            {
              "name": "::KeyboardHelp",
              "line": 193,
              "signature": "#[derive(Debug, Clone)]\npub struct KeyboardHelp<'a> {\n\n}",
              "documentation": "Overlay panel displaying keyboard shortcuts grouped by category.\n\nRenders as a centered overlay on top of the existing terminal content,\ndimming the background. Shortcuts are grouped by their category string\nand displayed in a two-column format (keys | description). When the\noverlay is wide enough, multiple shortcut columns are used:\n\n- Width < 80: single column\n- Width >= 80: two columns side by side\n- Width >= 120: three columns side by side\n\nThe overlay covers approximately 80% of the provided area in both\ndimensions.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::keyboard_help::{KeyboardHelp, KeyboardHelpState};\nuse harness_tui_kit::{KeyShortcut, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet shortcuts = vec![\n    KeyShortcut::new(\"q\", \"Quit\", \"General\"),\n    KeyShortcut::new(\"j\", \"Down\", \"Navigation\"),\n];\nlet mut state = KeyboardHelpState::default();\nstate.show();\n\nlet area = Rect::new(0, 0, 60, 20);\nlet mut buf = Buffer::empty(area);\nKeyboardHelp::new(&shortcuts).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::KeyboardHelp<'a>::new",
              "line": 207,
              "signature": "#[must_use]\npub fn new(shortcuts: &'a [KeyShortcut]) -> Self;",
              "documentation": "Create a new keyboard help overlay with the given shortcuts.\n\nUses the default theme and title \"Keyboard Shortcuts\"."
            },
            {
              "name": "::KeyboardHelp<'a>::title",
              "line": 217,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Set the title displayed at the top of the overlay."
            },
            {
              "name": "::KeyboardHelp<'a>::theme",
              "line": 224,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for the overlay."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/log_viewer.rs",
          "sha256": "6a9bccc9dd8a60c31ea21341a4a3fdee7b9e4ccbdd521dd50db58763c3924584",
          "artifactSha256": "f802a8a0cbe433a59f2e758bbb52ef440fb32d6b2148853de55b541b91eb6e93",
          "url": "/reference/source/harness-tui-kit/src/components/system/log_viewer.rs.txt",
          "declarations": [
            {
              "name": "::LogViewer",
              "line": 100,
              "signature": "#[derive(Debug, Clone)]\npub struct LogViewer<'a> {\n\n}",
              "documentation": "Scrollable log viewer.\n\nDisplays log entries as a vertically scrollable list with colored level\nbadges. Entries can be filtered by level and searched by message substring.\nSupports auto-scroll mode that keeps the view pinned to the latest entries.\n\nThis is a [`StatefulWidget`] that renders against [`LogViewerState`].\n\n# Level Coloring\n\n- **Trace**: `fg_muted`\n- **Debug**: `fg_secondary`\n- **Info**: `success`\n- **Warn**: `warning`\n- **Error**: `error`\n\n# Examples\n\n```\nuse harness_tui_kit::{LogViewer, LogViewerState, LogEntry, LogLevel, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet entries = vec![LogEntry::new(LogLevel::Info, \"app\", \"Hello\")];\nlet mut state = LogViewerState::default();\nlet area = Rect::new(0, 0, 60, 10);\nlet mut buf = Buffer::empty(area);\nLogViewer::new(&entries).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::LogViewer<'a>::new",
              "line": 123,
              "signature": "#[must_use]\npub fn new(entries: &'a [LogEntry]) -> Self;",
              "documentation": "Create a new log viewer for the given entries.\n\nDefaults to the standard dark theme with auto-scroll disabled.\n\n# Examples\n\n```\nuse harness_tui_kit::{LogViewer, LogEntry, LogLevel};\n\nlet entries = vec![LogEntry::new(LogLevel::Info, \"app\", \"Hello\")];\nlet viewer = LogViewer::new(&entries);\n```"
            },
            {
              "name": "::LogViewer<'a>::theme",
              "line": 143,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{LogViewer, LogEntry, LogLevel, Theme};\n\nlet entries = vec![LogEntry::new(LogLevel::Info, \"app\", \"Hello\")];\nlet theme = Theme::midnight();\nlet viewer = LogViewer::new(&entries).theme(&theme);\n```"
            },
            {
              "name": "::LogViewer<'a>::auto_scroll",
              "line": 162,
              "signature": "#[must_use]\npub fn auto_scroll(mut self, enabled: bool) -> Self;",
              "documentation": "Set whether auto-scroll is enabled for new state objects (builder pattern).\n\nThis only affects the initial value; the state's `auto_scroll` field\nis read during rendering.\n\n# Examples\n\n```\nuse harness_tui_kit::{LogViewer, LogEntry, LogLevel};\n\nlet entries = vec![LogEntry::new(LogLevel::Info, \"app\", \"Hello\")];\nlet viewer = LogViewer::new(&entries).auto_scroll(true);\n```"
            },
            {
              "name": "::LogViewerState",
              "line": 201,
              "signature": "#[derive(Debug, Clone)]\npub struct LogViewerState {\n\n}",
              "documentation": "Mutable state for [`LogViewer`], persisted across frames.\n\nTracks scroll offset, level filter bitfield, search query, and auto-scroll mode.\n\n# Level Filter\n\nThe `level_filter` field is a bitfield where each bit enables visibility of\na log level: Trace=1, Debug=2, Info=4, Warn=8, Error=16. The default is\n31 (all levels visible).\n\n# Examples\n\n```\nuse harness_tui_kit::{LogViewerState, LogLevel};\n\nlet mut state = LogViewerState::default();\nassert!(state.is_level_visible(LogLevel::Info));\n\nstate.toggle_level(LogLevel::Info);\nassert!(!state.is_level_visible(LogLevel::Info));\n```"
            },
            {
              "name": "::LogViewerState::scroll_up",
              "line": 225,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one row, clamping at zero."
            },
            {
              "name": "::LogViewerState::scroll_down",
              "line": 230,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one row."
            },
            {
              "name": "::LogViewerState::scroll_to_bottom",
              "line": 238,
              "signature": "pub fn scroll_to_bottom(&mut self, entries_len: usize, visible_height: usize);",
              "documentation": "Scroll to the bottom so that the last entries are visible.\n\n`entries_len` is the total number of visible (filtered) entries.\n`visible_height` is the number of rows available for rendering."
            },
            {
              "name": "::LogViewerState::toggle_level",
              "line": 245,
              "signature": "pub fn toggle_level(&mut self, level: LogLevel);",
              "documentation": "Toggle visibility of a specific log level.\n\nFlips the corresponding bit in `level_filter`."
            },
            {
              "name": "::LogViewerState::is_level_visible",
              "line": 251,
              "signature": "#[must_use]\npub fn is_level_visible(&self, level: LogLevel) -> bool;",
              "documentation": "Check whether a log level is currently visible."
            },
            {
              "name": "::LogViewerState::set_search",
              "line": 258,
              "signature": "pub fn set_search(&mut self, query: &str);",
              "documentation": "Set the search query for message filtering.\n\nEntries whose message does not contain the query as a substring are hidden."
            },
            {
              "name": "::LogViewerState::clear_search",
              "line": 263,
              "signature": "pub fn clear_search(&mut self);",
              "documentation": "Clear the search query."
            },
            {
              "name": "::LogViewerState::toggle_auto_scroll",
              "line": 268,
              "signature": "pub fn toggle_auto_scroll(&mut self);",
              "documentation": "Toggle auto-scroll mode."
            },
            {
              "name": "::LogViewerState::reset",
              "line": 273,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset state to defaults (all levels visible, no search, scroll at top)."
            },
            {
              "name": "::LogViewerState::scroll_offset",
              "line": 279,
              "signature": "#[must_use]\npub fn scroll_offset(&self) -> usize;",
              "documentation": "Returns the current scroll offset."
            },
            {
              "name": "::LogViewerState::level_filter",
              "line": 285,
              "signature": "#[must_use]\npub fn level_filter(&self) -> u8;",
              "documentation": "Returns the current level filter bitfield."
            },
            {
              "name": "::LogViewerState::search_query",
              "line": 291,
              "signature": "#[must_use]\npub fn search_query(&self) -> &str;",
              "documentation": "Returns a reference to the current search query."
            },
            {
              "name": "::LogViewerState::auto_scroll",
              "line": 297,
              "signature": "#[must_use]\npub fn auto_scroll(&self) -> bool;",
              "documentation": "Returns whether auto-scroll is enabled."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/mod.rs",
          "sha256": "d6460884d4ee197b8669169605c3f67bad7e601678d0cbd1b125a5b08d6f7b36",
          "artifactSha256": "d39181534daa7d08dc33265a69e8ef5b7432f0a5aa9cfcadc9e75ef9ab23879f",
          "url": "/reference/source/harness-tui-kit/src/components/system/mod.rs.txt",
          "declarations": [
            {
              "name": "app_shell",
              "line": 6,
              "signature": "pub mod app_shell;",
              "documentation": "System-level components.\n\nComponents for application chrome: banners, spinners, status bars, thinking\nindicators, modals, tabs, and other structural elements."
            },
            {
              "name": "block_logo",
              "line": 8,
              "signature": "pub mod block_logo;",
              "documentation": ""
            },
            {
              "name": "command_palette",
              "line": 9,
              "signature": "pub mod command_palette;",
              "documentation": ""
            },
            {
              "name": "custom_logo",
              "line": 10,
              "signature": "pub mod custom_logo;",
              "documentation": ""
            },
            {
              "name": "focus_card",
              "line": 11,
              "signature": "pub mod focus_card;",
              "documentation": ""
            },
            {
              "name": "hint_bar",
              "line": 13,
              "signature": "pub mod hint_bar;",
              "documentation": ""
            },
            {
              "name": "keyboard_help",
              "line": 14,
              "signature": "pub mod keyboard_help;",
              "documentation": ""
            },
            {
              "name": "log_viewer",
              "line": 15,
              "signature": "pub mod log_viewer;",
              "documentation": ""
            },
            {
              "name": "modal",
              "line": 16,
              "signature": "pub mod modal;",
              "documentation": ""
            },
            {
              "name": "model_picker",
              "line": 17,
              "signature": "pub mod model_picker;",
              "documentation": ""
            },
            {
              "name": "notification_toast",
              "line": 18,
              "signature": "pub mod notification_toast;",
              "documentation": ""
            },
            {
              "name": "pager_overlay",
              "line": 19,
              "signature": "pub mod pager_overlay;",
              "documentation": ""
            },
            {
              "name": "resume_picker",
              "line": 20,
              "signature": "pub mod resume_picker;",
              "documentation": ""
            },
            {
              "name": "settings_palette",
              "line": 21,
              "signature": "pub mod settings_palette;",
              "documentation": ""
            },
            {
              "name": "slash_dropdown",
              "line": 23,
              "signature": "pub mod slash_dropdown;",
              "documentation": ""
            },
            {
              "name": "split_pane",
              "line": 25,
              "signature": "pub mod split_pane;",
              "documentation": ""
            },
            {
              "name": "status_footer",
              "line": 27,
              "signature": "pub mod status_footer;",
              "documentation": ""
            },
            {
              "name": "tabs",
              "line": 29,
              "signature": "pub mod tabs;",
              "documentation": ""
            },
            {
              "name": "welcome_screen",
              "line": 33,
              "signature": "pub mod welcome_screen;",
              "documentation": ""
            },
            {
              "name": "pub use app_shell::{AppShell, AppShellState, ShellPanel};",
              "line": 35,
              "signature": "pub use app_shell::{AppShell, AppShellState, ShellPanel};",
              "documentation": ""
            },
            {
              "name": "pub use banner::Banner;",
              "line": 36,
              "signature": "pub use banner::Banner;",
              "documentation": ""
            },
            {
              "name": "pub use block_logo::{BlockLogo, BLOCK_LOGO_GLYPH_WIDTH, BLOCK_LOGO_HEIGHT, BLOCK_LOGO_SPACING};",
              "line": 37,
              "signature": "pub use block_logo::{BlockLogo, BLOCK_LOGO_GLYPH_WIDTH, BLOCK_LOGO_HEIGHT, BLOCK_LOGO_SPACING};",
              "documentation": ""
            },
            {
              "name": "pub use command_palette::{CommandPalette, CommandPaletteState};",
              "line": 38,
              "signature": "pub use command_palette::{CommandPalette, CommandPaletteState};",
              "documentation": ""
            },
            {
              "name": "pub use custom_logo::{CustomLogo, CLAUSEN_LOGO_ROWS};",
              "line": 39,
              "signature": "pub use custom_logo::{CustomLogo, CLAUSEN_LOGO_ROWS};",
              "documentation": ""
            },
            {
              "name": "pub use focus_card::FocusCard;",
              "line": 40,
              "signature": "pub use focus_card::FocusCard;",
              "documentation": ""
            },
            {
              "name": "pub use goal_display::{GoalDisplay, GoalStep, GoalStepStatus};",
              "line": 41,
              "signature": "pub use goal_display::{GoalDisplay, GoalStep, GoalStepStatus};",
              "documentation": ""
            },
            {
              "name": "pub use hint_bar::{HintBar, HintItem};",
              "line": 42,
              "signature": "pub use hint_bar::{HintBar, HintItem};",
              "documentation": ""
            },
            {
              "name": "pub use keyboard_help::{KeyboardHelp, KeyboardHelpState};",
              "line": 43,
              "signature": "pub use keyboard_help::{KeyboardHelp, KeyboardHelpState};",
              "documentation": ""
            },
            {
              "name": "pub use log_viewer::{LogViewer, LogViewerState};",
              "line": 44,
              "signature": "pub use log_viewer::{LogViewer, LogViewerState};",
              "documentation": ""
            },
            {
              "name": "pub use modal::{Modal, ModalButton, ModalState};",
              "line": 45,
              "signature": "pub use modal::{Modal, ModalButton, ModalState};",
              "documentation": ""
            },
            {
              "name": "pub use model_picker::{ModelCapabilities, ModelPicker, ModelPickerRow, ModelPickerState};",
              "line": 46,
              "signature": "pub use model_picker::{ModelCapabilities, ModelPicker, ModelPickerRow, ModelPickerState};",
              "documentation": ""
            },
            {
              "name": "pub use notification_toast::{NotificationToast, NotificationToastState, ToastMessage};",
              "line": 47,
              "signature": "pub use notification_toast::{NotificationToast, NotificationToastState, ToastMessage};",
              "documentation": ""
            },
            {
              "name": "pub use pager_overlay::{PagerOverlay, PagerOverlayState};",
              "line": 48,
              "signature": "pub use pager_overlay::{PagerOverlay, PagerOverlayState};",
              "documentation": ""
            },
            {
              "name": "pub use resume_picker::{ResumePicker, ResumePickerRow, ResumePickerState};",
              "line": 49,
              "signature": "pub use resume_picker::{ResumePicker, ResumePickerRow, ResumePickerState};",
              "documentation": ""
            },
            {
              "name": "pub use settings_palette::{\n    PendingSelection, SettingsPalette, SettingsPaletteItem, SettingsPalettePage,\n    SettingsPaletteState,\n};",
              "line": 50,
              "signature": "pub use settings_palette::{\n    PendingSelection, SettingsPalette, SettingsPaletteItem, SettingsPalettePage,\n    SettingsPaletteState,\n};",
              "documentation": ""
            },
            {
              "name": "pub use shimmer::{Shimmer, ShimmerState, SHIMMER_DEFAULT_WINDOW};",
              "line": 54,
              "signature": "pub use shimmer::{Shimmer, ShimmerState, SHIMMER_DEFAULT_WINDOW};",
              "documentation": ""
            },
            {
              "name": "pub use slash_dropdown::{SlashDropdown, SlashDropdownItem, SlashDropdownState};",
              "line": 55,
              "signature": "pub use slash_dropdown::{SlashDropdown, SlashDropdownItem, SlashDropdownState};",
              "documentation": ""
            },
            {
              "name": "pub use spinner::{Spinner, SpinnerStyle};",
              "line": 56,
              "signature": "pub use spinner::{Spinner, SpinnerStyle};",
              "documentation": ""
            },
            {
              "name": "pub use split_pane::{CollapseState, SplitDirection, SplitPane, SplitPaneState};",
              "line": 57,
              "signature": "pub use split_pane::{CollapseState, SplitDirection, SplitPane, SplitPaneState};",
              "documentation": ""
            },
            {
              "name": "pub use status_bar::StatusBar;",
              "line": 58,
              "signature": "pub use status_bar::StatusBar;",
              "documentation": ""
            },
            {
              "name": "pub use status_footer::{StatusFooter, StatusFooterIndicator};",
              "line": 59,
              "signature": "pub use status_footer::{StatusFooter, StatusFooterIndicator};",
              "documentation": ""
            },
            {
              "name": "pub use status_indicator::{\n    fmt_elapsed_compact, StatusIndicator, StatusIndicatorState, StatusKind,\n};",
              "line": 60,
              "signature": "pub use status_indicator::{\n    fmt_elapsed_compact, StatusIndicator, StatusIndicatorState, StatusKind,\n};",
              "documentation": ""
            },
            {
              "name": "pub use tabs::{TabItem, Tabs, TabsState};",
              "line": 63,
              "signature": "pub use tabs::{TabItem, Tabs, TabsState};",
              "documentation": ""
            },
            {
              "name": "pub use theme_picker::{ThemePicker, ThemePickerRow, ThemePickerState};",
              "line": 64,
              "signature": "pub use theme_picker::{ThemePicker, ThemePickerRow, ThemePickerState};",
              "documentation": ""
            },
            {
              "name": "pub use thinking::ThinkingIndicator;",
              "line": 65,
              "signature": "pub use thinking::ThinkingIndicator;",
              "documentation": ""
            },
            {
              "name": "pub use thinking_animation::{\n    ThinkingAnimation, ThinkingAnimationState, THINKING_ANIMATION_DEFAULT_CHARSET,\n    THINKING_ANIMATION_DEFAULT_WIDTH,\n};",
              "line": 66,
              "signature": "pub use thinking_animation::{\n    ThinkingAnimation, ThinkingAnimationState, THINKING_ANIMATION_DEFAULT_CHARSET,\n    THINKING_ANIMATION_DEFAULT_WIDTH,\n};",
              "documentation": ""
            },
            {
              "name": "pub use welcome_screen::{WelcomeConfig, WelcomeScreen};",
              "line": 70,
              "signature": "pub use welcome_screen::{WelcomeConfig, WelcomeScreen};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/modal.rs",
          "sha256": "49ea9e2e7688e6a6461b35247bd40df4ccb15df316e603f368c1410612d0ef72",
          "artifactSha256": "b8e78de9de64fc7bd9e372ef552f6615c9c1d7623205e3c682c8acfbaa5591e1",
          "url": "/reference/source/harness-tui-kit/src/components/system/modal.rs.txt",
          "declarations": [
            {
              "name": "::ModalButton",
              "line": 69,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]\npub enum ModalButton {\n    /// The confirm/accept action button.\n    Confirm,\n    /// The cancel/dismiss action button (default focus).\n    #[default]\n    Cancel,\n}",
              "documentation": "Which action button is currently focused in a [`Modal`].\n\nUsed to determine which button receives the highlight style and which\naction is triggered when the user presses Enter.\n\nDefaults to [`ModalButton::Cancel`] so the non-destructive action is\nselected by default.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::modal::ModalButton;\n\nlet button = ModalButton::default();\nassert_eq!(button, ModalButton::Cancel);\n```"
            },
            {
              "name": "::ModalState",
              "line": 99,
              "signature": "#[derive(Debug, Clone)]\npub struct ModalState {\n\n}",
              "documentation": "Mutable state for [`Modal`], persists across frames.\n\nTracks the modal's visibility, title, body content, scroll position, and\nwhich action button is focused. Create with [`ModalState::new`] and control\nvisibility with [`show`](ModalState::show), [`hide`](ModalState::hide), and\n[`toggle`](ModalState::toggle).\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::modal::ModalState;\n\nlet mut state = ModalState::new(\"Delete File\");\nstate.set_body(\"This action cannot be undone.\\nProceed?\");\nstate.show();\nassert!(state.is_visible());\nstate.cycle_focus();\nassert_eq!(state.focused_button(), harness_tui_kit::components::system::modal::ModalButton::Confirm);\n```"
            },
            {
              "name": "::ModalState::new",
              "line": 127,
              "signature": "#[must_use]\npub fn new(title: &str) -> Self;",
              "documentation": "Create a new modal state with the given title.\n\nThe modal starts hidden with the Cancel button focused.\nThe title is sanitized to strip terminal escape sequences.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::modal::ModalState;\n\nlet state = ModalState::new(\"Confirm\");\nassert!(!state.is_visible());\n```"
            },
            {
              "name": "::ModalState::set_body",
              "line": 141,
              "signature": "pub fn set_body(&mut self, body: &str);",
              "documentation": "Set the body content text.\n\nThe body is sanitized to strip terminal escape sequences.\nResets the scroll offset to the top."
            },
            {
              "name": "::ModalState::show",
              "line": 150,
              "signature": "pub fn show(&mut self);",
              "documentation": "Show the modal.\n\nMakes the modal visible on the next render frame.\nResets focus to the Cancel button and scroll to the top."
            },
            {
              "name": "::ModalState::hide",
              "line": 159,
              "signature": "pub fn hide(&mut self);",
              "documentation": "Hide the modal.\n\nMakes the modal invisible on the next render frame."
            },
            {
              "name": "::ModalState::toggle",
              "line": 166,
              "signature": "pub fn toggle(&mut self);",
              "documentation": "Toggle the modal's visibility.\n\nIf visible, hides it. If hidden, shows it (resetting focus and scroll)."
            },
            {
              "name": "::ModalState::cycle_focus",
              "line": 178,
              "signature": "pub fn cycle_focus(&mut self);",
              "documentation": "Cycle focus between the action buttons.\n\nPressing Tab in the modal should call this to move focus between\nCancel and Confirm buttons."
            },
            {
              "name": "::ModalState::scroll_up",
              "line": 188,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll the body content up by one line.\n\nStops at the top (offset 0)."
            },
            {
              "name": "::ModalState::scroll_down",
              "line": 196,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll the body content down by one line.\n\nThe maximum scroll is clamped during rendering to prevent scrolling\npast the content."
            },
            {
              "name": "::ModalState::is_visible",
              "line": 211,
              "signature": "#[must_use]\npub fn is_visible(&self) -> bool;",
              "documentation": "Returns `true` if the modal is currently visible.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::modal::ModalState;\n\nlet state = ModalState::new(\"Test\");\nassert!(!state.is_visible());\n```"
            },
            {
              "name": "::ModalState::focused_button",
              "line": 226,
              "signature": "#[must_use]\npub fn focused_button(&self) -> ModalButton;",
              "documentation": "Returns which action button currently has focus.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::modal::{ModalState, ModalButton};\n\nlet state = ModalState::new(\"Test\");\nassert_eq!(state.focused_button(), ModalButton::Cancel);\n```"
            },
            {
              "name": "::Modal",
              "line": 270,
              "signature": "#[derive(Debug, Clone)]\npub struct Modal<'a> {\n\n}",
              "documentation": "Overlay modal dialog with title bar, scrollable body, and action buttons.\n\nRenders as a centered overlay on top of the existing terminal content.\nThe background behind the modal is dimmed. The modal contains:\n\n1. A title bar with centered, bold title text\n2. A scrollable body content area\n3. A separator line above the button bar\n4. Action buttons (Cancel and Confirm) with focus highlighting\n\nThe modal uses box-drawing characters for its border (`\\u{250c}\\u{2500}\\u{2510}\\u{2502}\\u{2514}\\u{2500}\\u{2518}`).\n\n# Focus Trap\n\nTab cycles focus between the Cancel and Confirm buttons via\n[`ModalState::cycle_focus`]. Escape should hide the modal via\n[`ModalState::hide`] (handled by the caller's event loop).\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::modal::{Modal, ModalState};\nuse harness_tui_kit::Theme;\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet mut state = ModalState::new(\"Confirm\");\nstate.set_body(\"Are you sure?\");\nstate.show();\n\nlet area = Rect::new(0, 0, 60, 20);\nlet mut buf = Buffer::empty(area);\nModal::new().theme(&theme).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::Modal<'a>::new",
              "line": 285,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new modal with default settings.\n\nUses the default theme, \"Confirm\" for the confirm label, and \"Cancel\"\nfor the cancel label."
            },
            {
              "name": "::Modal<'a>::theme",
              "line": 295,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for the modal."
            },
            {
              "name": "::Modal<'a>::confirm_label",
              "line": 302,
              "signature": "#[must_use]\npub fn confirm_label(mut self, label: &'a str) -> Self;",
              "documentation": "Set the confirm button label."
            },
            {
              "name": "::Modal<'a>::cancel_label",
              "line": 309,
              "signature": "#[must_use]\npub fn cancel_label(mut self, label: &'a str) -> Self;",
              "documentation": "Set the cancel button label."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/model_picker.rs",
          "sha256": "bb0ef51167dfb8d79b274ac8286fff4493b83a240e69b6688a3362779630459a",
          "artifactSha256": "cd830a3a0de76eb110363db23b8c9a6f8cb1df05221609d4162f8a7d81163bdf",
          "url": "/reference/source/harness-tui-kit/src/components/system/model_picker.rs.txt",
          "declarations": [
            {
              "name": "::ModelCapabilities",
              "line": 21,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub struct ModelCapabilities {\n/// Whether the model supports tool / function calling.\n\npub tools: bool,\n/// Whether the model supports vision input.\n\npub vision: bool,\n/// Whether the model exposes a \"thinking\" / reasoning channel.\n\npub thinking: bool,\n/// Whether the model is generally available (vs. preview).\n\npub ga: bool\n}",
              "documentation": "Coarse capability flags surfaced as badges on each row."
            },
            {
              "name": "::ModelCapabilities::none",
              "line": 35,
              "signature": "#[must_use]\npub fn none() -> Self;",
              "documentation": "Convenience: a fully-disabled set."
            },
            {
              "name": "::ModelPickerRow",
              "line": 47,
              "signature": "#[derive(Debug, Clone)]\npub struct ModelPickerRow {\n/// Stable id (e.g. `\"claude-opus-4.7\"`).\n\npub id: String,\n/// Display name (e.g. `\"Claude Opus 4.7 (1M)\"`).\n\npub name: String,\n/// Short provider label (e.g. `\"Anthropic\"`).\n\npub provider: String,\n/// One-line description shown below the name.\n\npub description: String,\n/// Capability flags rendered as a `[T] [V] [R]` badge strip.\n\npub capabilities: ModelCapabilities,\n/// Coarse cost tier label (e.g. `\"$\"`, `\"$$\"`, `\"$$$\"`).\n\npub cost: String\n}",
              "documentation": "One row in [`ModelPicker`]."
            },
            {
              "name": "::ModelPickerState",
              "line": 64,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ModelPickerState {\n\n}",
              "documentation": "Persistent state for [`ModelPicker`]."
            },
            {
              "name": "::ModelPickerState::selected",
              "line": 71,
              "signature": "#[must_use]\npub fn selected(&self) -> usize;",
              "documentation": "Currently-focused index."
            },
            {
              "name": "::ModelPickerState::move_down",
              "line": 76,
              "signature": "pub fn move_down(&mut self, len: usize);",
              "documentation": "Move focus down by one row, clamped to `len - 1`."
            },
            {
              "name": "::ModelPickerState::move_up",
              "line": 85,
              "signature": "pub fn move_up(&mut self);",
              "documentation": "Move focus up by one row."
            },
            {
              "name": "::ModelPickerState::reset",
              "line": 90,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset focus to the first row."
            },
            {
              "name": "::ModelPicker",
              "line": 97,
              "signature": "#[derive(Debug, Clone)]\npub struct ModelPicker<'a> {\n\n}",
              "documentation": "Model picker widget."
            },
            {
              "name": "::ModelPicker<'a>::new",
              "line": 106,
              "signature": "#[must_use]\npub fn new(rows: &'a [ModelPickerRow]) -> Self;",
              "documentation": "Construct a new picker over `rows`."
            },
            {
              "name": "::ModelPicker<'a>::theme",
              "line": 116,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::ModelPicker<'a>::title",
              "line": 123,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Override the title at the top of the picker block."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/notification_toast.rs",
          "sha256": "8bb55bea142c5c87947c803d01f79a60f5d2db3bdf824f79c54f34be6ed50b66",
          "artifactSha256": "7f15e77983a4155beb21db701711abd7defaf8afacd0d5b0707d7d87211ed71d",
          "url": "/reference/source/harness-tui-kit/src/components/system/notification_toast.rs.txt",
          "declarations": [
            {
              "name": "::ToastMessage",
              "line": 74,
              "signature": "#[derive(Debug, Clone)]\npub struct ToastMessage {\n/// The severity level of this notification.\n\npub severity: Severity,\n/// The sanitized message text.\n\npub message: String,\n/// Number of ticks remaining before auto-dismissal.\n\npub remaining_ticks: u16\n}",
              "documentation": "A single toast notification entry.\n\nContains the severity level, sanitized message text, remaining display\nduration in ticks, and the initial duration (for countdown bar calculation).\n\n# Examples\n\n```\nuse harness_tui_kit::{ToastMessage, Severity};\n\nlet toast = ToastMessage::new(Severity::Info, \"Hello\", 60);\nassert_eq!(toast.severity, Severity::Info);\nassert_eq!(toast.message, \"Hello\");\nassert_eq!(toast.remaining_ticks, 60);\n```"
            },
            {
              "name": "::ToastMessage::new",
              "line": 99,
              "signature": "#[must_use]\npub fn new(severity: Severity, message: impl Into<String>, duration_ticks: u16) -> Self;",
              "documentation": "Create a new toast message with the given severity, text, and duration.\n\nThe message text is sanitized to remove terminal escape sequences.\n\n# Examples\n\n```\nuse harness_tui_kit::{ToastMessage, Severity};\n\nlet toast = ToastMessage::new(Severity::Warning, \"Low disk\", 100);\nassert_eq!(toast.remaining_ticks, 100);\n```"
            },
            {
              "name": "::NotificationToastState",
              "line": 146,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct NotificationToastState {\n\n}",
              "documentation": "Mutable state for [`NotificationToast`], persists across frames.\n\nManages the queue of active toast notifications. Push new toasts with\n[`push`](Self::push) and call [`tick`](Self::tick) each frame to advance\nauto-dismiss countdowns.\n\n# Examples\n\n```\nuse harness_tui_kit::{NotificationToastState, Severity};\n\nlet mut state = NotificationToastState::default();\nassert!(state.is_empty());\n\nstate.push(Severity::Info, \"Hello\", 10);\nassert_eq!(state.count(), 1);\n\n// Tick 10 times to expire the toast\nfor _ in 0..10 {\n    state.tick();\n}\nassert!(state.is_empty());\n```"
            },
            {
              "name": "::NotificationToastState::push",
              "line": 166,
              "signature": "pub fn push(&mut self, severity: Severity, message: impl Into<String>, duration_ticks: u16);",
              "documentation": "Add a new toast notification to the queue.\n\nThe message is sanitized to strip terminal escape sequences.\nThe toast will be auto-dismissed after `duration_ticks` calls to [`tick`](Self::tick).\n\n# Examples\n\n```\nuse harness_tui_kit::{NotificationToastState, Severity};\n\nlet mut state = NotificationToastState::default();\nstate.push(Severity::Error, \"Connection lost\", 120);\nassert_eq!(state.count(), 1);\n```"
            },
            {
              "name": "::NotificationToastState::tick",
              "line": 185,
              "signature": "pub fn tick(&mut self);",
              "documentation": "Advance the countdown on all toasts by one tick and remove expired ones.\n\nToasts whose `remaining_ticks` reaches zero are removed from the queue.\n\n# Examples\n\n```\nuse harness_tui_kit::{NotificationToastState, Severity};\n\nlet mut state = NotificationToastState::default();\nstate.push(Severity::Info, \"Quick\", 1);\nstate.tick();\nassert!(state.is_empty());\n```"
            },
            {
              "name": "::NotificationToastState::dismiss",
              "line": 207,
              "signature": "pub fn dismiss(&mut self);",
              "documentation": "Dismiss the oldest (top-most rendered) toast.\n\nDoes nothing if the queue is empty.\n\n# Examples\n\n```\nuse harness_tui_kit::{NotificationToastState, Severity};\n\nlet mut state = NotificationToastState::default();\nstate.push(Severity::Info, \"First\", 60);\nstate.push(Severity::Warning, \"Second\", 60);\nstate.dismiss();\nassert_eq!(state.count(), 1);\n```"
            },
            {
              "name": "::NotificationToastState::dismiss_all",
              "line": 226,
              "signature": "pub fn dismiss_all(&mut self);",
              "documentation": "Dismiss all active toasts.\n\n# Examples\n\n```\nuse harness_tui_kit::{NotificationToastState, Severity};\n\nlet mut state = NotificationToastState::default();\nstate.push(Severity::Info, \"A\", 60);\nstate.push(Severity::Warning, \"B\", 60);\nstate.dismiss_all();\nassert!(state.is_empty());\n```"
            },
            {
              "name": "::NotificationToastState::is_empty",
              "line": 241,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if there are no active toasts.\n\n# Examples\n\n```\nuse harness_tui_kit::NotificationToastState;\n\nlet state = NotificationToastState::default();\nassert!(state.is_empty());\n```"
            },
            {
              "name": "::NotificationToastState::count",
              "line": 257,
              "signature": "#[must_use]\npub fn count(&self) -> usize;",
              "documentation": "Returns the number of active toasts in the queue.\n\n# Examples\n\n```\nuse harness_tui_kit::{NotificationToastState, Severity};\n\nlet mut state = NotificationToastState::default();\nstate.push(Severity::Info, \"Test\", 60);\nassert_eq!(state.count(), 1);\n```"
            },
            {
              "name": "::NotificationToast",
              "line": 297,
              "signature": "#[derive(Debug, Clone)]\npub struct NotificationToast<'a> {\n\n}",
              "documentation": "Toast notification overlay rendered from the top-right corner of the area.\n\nEach toast is 2 rows tall: the first row shows a severity icon and message\ntext; the second row shows a countdown progress bar. A severity-colored left\nborder visually distinguishes notification severity. Multiple toasts stack\nvertically from the top.\n\n# Severity Mapping\n\n| Severity | Icon | Border Color |\n|----------|------|--------------|\n| Info     | `\u2139`  | `theme.info` |\n| Success  | `\u2713`  | `theme.success` |\n| Warning  | `\u26a0`  | `theme.warning` |\n| Error    | `\u2715`  | `theme.error` |\n\n# Examples\n\n```\nuse harness_tui_kit::{NotificationToast, NotificationToastState, Severity, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet mut state = NotificationToastState::default();\nstate.push(Severity::Info, \"Saved\", 60);\n\nlet area = Rect::new(0, 0, 80, 24);\nlet mut buf = Buffer::empty(area);\nNotificationToast::new().theme(&theme).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::NotificationToast<'a>::new",
              "line": 311,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new notification toast renderer with default settings.\n\nDefaults: up to 5 visible toasts, 40 columns wide, dark theme."
            },
            {
              "name": "::NotificationToast<'a>::theme",
              "line": 321,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for rendering."
            },
            {
              "name": "::NotificationToast<'a>::max_visible",
              "line": 330,
              "signature": "#[must_use]\npub fn max_visible(mut self, max: usize) -> Self;",
              "documentation": "Set the maximum number of toasts visible at once.\n\nToasts beyond this limit are queued and shown as older ones expire."
            },
            {
              "name": "::NotificationToast<'a>::toast_width",
              "line": 337,
              "signature": "#[must_use]\npub fn toast_width(mut self, width: u16) -> Self;",
              "documentation": "Set the width of each toast in terminal columns."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/pager_overlay.rs",
          "sha256": "0086cb94678c1ef72a175a79d02645e203212d6e738c3bfa4a48dc329a266d3e",
          "artifactSha256": "cc76cc2496cc82d55858bff4383c9b61bb9dba720b1a2ea0d2df29b4898571d4",
          "url": "/reference/source/harness-tui-kit/src/components/system/pager_overlay.rs.txt",
          "declarations": [
            {
              "name": "::PagerOverlayState",
              "line": 19,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct PagerOverlayState {\n\n}",
              "documentation": "Persistent state for [`PagerOverlay`]."
            },
            {
              "name": "::PagerOverlayState::scroll",
              "line": 27,
              "signature": "#[must_use]\npub fn scroll(&self) -> u16;",
              "documentation": "Current scroll offset."
            },
            {
              "name": "::PagerOverlayState::line_up",
              "line": 32,
              "signature": "pub fn line_up(&mut self);",
              "documentation": "Scroll up one row."
            },
            {
              "name": "::PagerOverlayState::line_down",
              "line": 37,
              "signature": "pub fn line_down(&mut self);",
              "documentation": "Scroll down one row."
            },
            {
              "name": "::PagerOverlayState::page_up",
              "line": 42,
              "signature": "pub fn page_up(&mut self, viewport_height: u16);",
              "documentation": "Page up by `viewport_height` rows."
            },
            {
              "name": "::PagerOverlayState::page_down",
              "line": 47,
              "signature": "pub fn page_down(&mut self, viewport_height: u16);",
              "documentation": "Page down by `viewport_height` rows."
            },
            {
              "name": "::PagerOverlayState::half_page_up",
              "line": 52,
              "signature": "pub fn half_page_up(&mut self, viewport_height: u16);",
              "documentation": "Half-page up."
            },
            {
              "name": "::PagerOverlayState::half_page_down",
              "line": 57,
              "signature": "pub fn half_page_down(&mut self, viewport_height: u16);",
              "documentation": "Half-page down."
            },
            {
              "name": "::PagerOverlayState::jump_top",
              "line": 62,
              "signature": "pub fn jump_top(&mut self);",
              "documentation": "Jump to the top."
            },
            {
              "name": "::PagerOverlayState::jump_bottom",
              "line": 68,
              "signature": "pub fn jump_bottom(&mut self, content_height: u16, viewport_height: u16);",
              "documentation": "Jump to the bottom (caller supplies total content rows so we\ncan clamp; passing the rendered content height is fine)."
            },
            {
              "name": "::PagerOverlay",
              "line": 79,
              "signature": "#[derive(Debug, Clone)]\npub struct PagerOverlay<'a> {\n\n}",
              "documentation": "Full-screen transcript pager.\n\nLines are produced by the SDK consumer (typically the union of\nevery `HistoryCell::transcript_lines(width)`). The pager renders\nthem with a bordered chrome and a footer hint."
            },
            {
              "name": "::PagerOverlay<'a>::new",
              "line": 89,
              "signature": "#[must_use]\npub fn new(lines: &'a [Line<'static>]) -> Self;",
              "documentation": "Construct a pager over `lines`."
            },
            {
              "name": "::PagerOverlay<'a>::theme",
              "line": 100,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::PagerOverlay<'a>::title",
              "line": 107,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Override the panel title."
            },
            {
              "name": "::PagerOverlay<'a>::footer_hint",
              "line": 114,
              "signature": "#[must_use]\npub fn footer_hint(mut self, hint: &'a str) -> Self;",
              "documentation": "Override the footer key hint."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/resume_picker.rs",
          "sha256": "f60e60a059f8b1880e6df6d976f105c6cef32a5352152447f22345b96dff864f",
          "artifactSha256": "0d57bf00c8f8811a96cd83c0a00f1fa3afd4d3a64c6f13737f4b25bc692eff64",
          "url": "/reference/source/harness-tui-kit/src/components/system/resume_picker.rs.txt",
          "declarations": [
            {
              "name": "::ResumePickerRow",
              "line": 27,
              "signature": "#[derive(Debug, Clone)]\npub struct ResumePickerRow {\n/// Stable id used by the activation handler to identify the\n\n/// chosen session (typically the session uuid as a string).\n\npub id: String,\n/// Primary label (e.g. \"clausen \u2014 /Users/me/repo\").\n\npub title: String,\n/// One-line preview (e.g. the first user message, truncated).\n\npub preview: String,\n/// Right-aligned metadata column (e.g. \"12 turns \u00b7 3m ago\").\n\npub meta: String\n}",
              "documentation": "One row in [`ResumePicker`]. The application is responsible for\ntranslating its session-store metadata into rows; the picker\nitself never reaches into the SDK."
            },
            {
              "name": "::ResumePickerState",
              "line": 41,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ResumePickerState {\n\n}",
              "documentation": "State for [`ResumePicker`]: which row is currently focused."
            },
            {
              "name": "::ResumePickerState::selected",
              "line": 48,
              "signature": "#[must_use]\npub fn selected(&self) -> usize;",
              "documentation": "Currently-focused index."
            },
            {
              "name": "::ResumePickerState::move_down",
              "line": 53,
              "signature": "pub fn move_down(&mut self, len: usize);",
              "documentation": "Move focus down by one row, clamped to `len - 1`."
            },
            {
              "name": "::ResumePickerState::move_up",
              "line": 62,
              "signature": "pub fn move_up(&mut self);",
              "documentation": "Move focus up by one row, clamped to 0."
            },
            {
              "name": "::ResumePickerState::reset",
              "line": 67,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset focus to the first row."
            },
            {
              "name": "::ResumePicker",
              "line": 75,
              "signature": "#[derive(Debug, Clone)]\npub struct ResumePicker<'a> {\n\n}",
              "documentation": "Widget rendering a list of [`ResumePickerRow`]s with a focused\nhighlight."
            },
            {
              "name": "::ResumePicker<'a>::new",
              "line": 85,
              "signature": "#[must_use]\npub fn new(rows: &'a [ResumePickerRow]) -> Self;",
              "documentation": "Construct a new picker over `rows`."
            },
            {
              "name": "::ResumePicker<'a>::theme",
              "line": 96,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the theme."
            },
            {
              "name": "::ResumePicker<'a>::title",
              "line": 103,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Override the title shown at the top of the picker block."
            },
            {
              "name": "::ResumePicker<'a>::empty_label",
              "line": 110,
              "signature": "#[must_use]\npub fn empty_label(mut self, label: &'a str) -> Self;",
              "documentation": "Override the label shown when there are no rows."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/settings_palette.rs",
          "sha256": "42ad1486ed3c22b32ae732cb5537d400d8150c2f2cbbaba616f70d3019e82ce9",
          "artifactSha256": "5b3f0497054946febaa534e88489b503ed699c64798091f617eebbf855b648ef",
          "url": "/reference/source/harness-tui-kit/src/components/system/settings_palette.rs.txt",
          "declarations": [
            {
              "name": "::SettingsPalettePage",
              "line": 39,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Default)]\npub enum SettingsPalettePage {\n    /// Top-level menu (Modes / Providers / \u2026).\n    #[default]\n    Root,\n    /// Mode picker.\n    Modes,\n    /// Provider picker.\n    Providers,\n    /// Per-provider hub: drills into Models or Settings for the\n    /// chosen provider. Replaces the old special-case Flocks page \u2014\n    /// every provider now goes through this same hub.\n    Provider { provider_id: String },\n    /// Models for a specific provider.\n    Models { provider_id: String },\n    /// Provider-specific settings (api keys, base URLs, Flocks CLI\n    /// selection, etc.). Field metadata comes from the adapter.\n    ProviderSettings { provider_id: String },\n    /// Flocks CLI picker \u2014 only reachable from\n    /// `ProviderSettings { provider_id == \"flocks\" }`.\n    FlocksClis,\n    /// Models for a specific Flocks CLI.\n    FlocksModels { cli_id: String },\n}",
              "documentation": "Identifier for a palette page."
            },
            {
              "name": "::SettingsPalettePage::title",
              "line": 66,
              "signature": "#[must_use]\npub fn title(&self) -> String;",
              "documentation": "Human-readable title shown at the top of the palette."
            },
            {
              "name": "::SettingsPaletteItem",
              "line": 82,
              "signature": "#[derive(Debug, Clone)]\npub struct SettingsPaletteItem {\n/// Stable identifier \u2014 passed back to the runtime when this row\n\n/// is selected.\n\npub id: String,\n/// Primary label.\n\npub label: String,\n/// Optional secondary description (rendered dim, after the label).\n\npub description: String,\n/// `true` if the row represents the *currently-active* selection\n\n/// \u2014 gets a check glyph and accent color.\n\npub active: bool,\n/// `true` if picking this row drills into a sub-page rather than\n\n/// applying a value directly. Drill-in rows show a `\u203a` glyph.\n\npub drills_in: bool,\n/// Optional badge rendered to the right of the row (e.g.\n\n/// `\"healthy\"`, `\"offline\"`, `\"context: 1M\"`). Dim by default.\n\npub badge: String\n}",
              "documentation": "One row rendered inside the palette body."
            },
            {
              "name": "::SettingsPaletteItem::leaf",
              "line": 104,
              "signature": "#[must_use]\npub fn leaf(id: impl Into<String>, label: impl Into<String>) -> Self;",
              "documentation": "Build a leaf item (selecting it applies a value)."
            },
            {
              "name": "::SettingsPaletteItem::drill",
              "line": 117,
              "signature": "#[must_use]\npub fn drill(id: impl Into<String>, label: impl Into<String>) -> Self;",
              "documentation": "Build a drill-in item (selecting it switches to another page)."
            },
            {
              "name": "::SettingsPaletteItem::description",
              "line": 130,
              "signature": "#[must_use]\npub fn description(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Builder-style description."
            },
            {
              "name": "::SettingsPaletteItem::active",
              "line": 137,
              "signature": "#[must_use]\npub fn active(mut self, on: bool) -> Self;",
              "documentation": "Builder-style active flag."
            },
            {
              "name": "::SettingsPaletteItem::badge",
              "line": 144,
              "signature": "#[must_use]\npub fn badge(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Builder-style badge."
            },
            {
              "name": "::SettingsPaletteState",
              "line": 152,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct SettingsPaletteState {\n\n}",
              "documentation": "Persistent state for [`SettingsPalette`]."
            },
            {
              "name": "::PendingSelection",
              "line": 167,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct PendingSelection {\n/// The page where the selection happened.\n\npub page: SettingsPalettePage,\n/// The selected item's id.\n\npub item_id: String\n}",
              "documentation": "What the user just selected. Cleared after the runtime reads it."
            },
            {
              "name": "::SettingsPaletteState::is_visible",
              "line": 177,
              "signature": "#[must_use]\npub fn is_visible(&self) -> bool;",
              "documentation": "Whether the palette is visible."
            },
            {
              "name": "::SettingsPaletteState::page",
              "line": 183,
              "signature": "#[must_use]\npub fn page(&self) -> &SettingsPalettePage;",
              "documentation": "Current page identifier."
            },
            {
              "name": "::SettingsPaletteState::cursor",
              "line": 189,
              "signature": "#[must_use]\npub fn cursor(&self) -> usize;",
              "documentation": "Current cursor row."
            },
            {
              "name": "::SettingsPaletteState::filter",
              "line": 195,
              "signature": "#[must_use]\npub fn filter(&self) -> &str;",
              "documentation": "Current filter text (always lowercase)."
            },
            {
              "name": "::SettingsPaletteState::open",
              "line": 200,
              "signature": "pub fn open(&mut self);",
              "documentation": "Open the palette at the root page."
            },
            {
              "name": "::SettingsPaletteState::close",
              "line": 210,
              "signature": "pub fn close(&mut self);",
              "documentation": "Close the palette and discard any in-flight state."
            },
            {
              "name": "::SettingsPaletteState::drill",
              "line": 220,
              "signature": "pub fn drill(&mut self, page: SettingsPalettePage);",
              "documentation": "Navigate forward into a sub-page."
            },
            {
              "name": "::SettingsPaletteState::back",
              "line": 228,
              "signature": "pub fn back(&mut self) -> bool;",
              "documentation": "Pop the page stack \u2014 returns `true` if a page was popped,\n`false` if we were already at root (caller should close)."
            },
            {
              "name": "::SettingsPaletteState::cursor_up",
              "line": 240,
              "signature": "pub fn cursor_up(&mut self);",
              "documentation": "Move the cursor up."
            },
            {
              "name": "::SettingsPaletteState::cursor_down",
              "line": 245,
              "signature": "pub fn cursor_down(&mut self, len: usize);",
              "documentation": "Move the cursor down (clamped to `len - 1`)."
            },
            {
              "name": "::SettingsPaletteState::filter_push",
              "line": 254,
              "signature": "pub fn filter_push(&mut self, ch: char);",
              "documentation": "Append a character to the filter."
            },
            {
              "name": "::SettingsPaletteState::filter_pop",
              "line": 262,
              "signature": "pub fn filter_pop(&mut self);",
              "documentation": "Drop the last filter character."
            },
            {
              "name": "::SettingsPaletteState::filter_clear",
              "line": 268,
              "signature": "pub fn filter_clear(&mut self);",
              "documentation": "Clear the filter without closing the palette."
            },
            {
              "name": "::SettingsPaletteState::select",
              "line": 275,
              "signature": "pub fn select(&mut self, item_id: impl Into<String>);",
              "documentation": "Record a selection so the runtime can dispatch the\ncorresponding adapter action."
            },
            {
              "name": "::SettingsPaletteState::take_pending",
              "line": 283,
              "signature": "pub fn take_pending(&mut self) -> Option<PendingSelection>;",
              "documentation": "Take the pending selection (atomically clears it)."
            },
            {
              "name": "::SettingsPalette",
              "line": 290,
              "signature": "#[derive(Debug, Clone)]\npub struct SettingsPalette<'a> {\n\n}",
              "documentation": "The settings palette modal widget."
            },
            {
              "name": "::SettingsPalette<'a>::new",
              "line": 300,
              "signature": "#[must_use]\npub fn new(items: &'a [SettingsPaletteItem]) -> Self;",
              "documentation": "Construct a palette over the supplied items."
            },
            {
              "name": "::SettingsPalette<'a>::theme",
              "line": 310,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::SettingsPalette<'a>::hint",
              "line": 317,
              "signature": "#[must_use]\npub fn hint(mut self, hint: &'a str) -> Self;",
              "documentation": "Override the footer hint."
            },
            {
              "name": "::SettingsPalette<'a>::filtered_indices",
              "line": 324,
              "signature": "#[must_use]\npub fn filtered_indices(items: &[SettingsPaletteItem], filter: &str) -> Vec<usize>;",
              "documentation": "Items that survive the current filter on `state`."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/shimmer.rs",
          "sha256": "ad9092a91ddc934c60052d6430ee4100d3d59d187cd999816a42e7f62de7549e",
          "artifactSha256": "100f15d238ff03d0bbc26bd2a9f6252352cba213b3224e11166dbad6f2aebe36",
          "url": "/reference/source/harness-tui-kit/src/components/system/shimmer.rs.txt",
          "declarations": [
            {
              "name": "::SHIMMER_DEFAULT_WINDOW",
              "line": 24,
              "signature": "pub const SHIMMER_DEFAULT_WINDOW: u16;",
              "documentation": "Default width (in cells) of the bright wave window."
            },
            {
              "name": "::ShimmerState",
              "line": 28,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ShimmerState {\n\n}",
              "documentation": "Persistent state for [`Shimmer`]."
            },
            {
              "name": "::ShimmerState::advance",
              "line": 34,
              "signature": "pub fn advance(&mut self);",
              "documentation": "Advance one frame."
            },
            {
              "name": "::ShimmerState::reset",
              "line": 39,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the wave to position zero."
            },
            {
              "name": "::ShimmerState::tick",
              "line": 45,
              "signature": "#[must_use]\npub fn tick(&self) -> u64;",
              "documentation": "Current tick (useful for tests)."
            },
            {
              "name": "::Shimmer",
              "line": 52,
              "signature": "#[derive(Debug, Clone)]\npub struct Shimmer<'a> {\n\n}",
              "documentation": "Single-line shimmering label widget."
            },
            {
              "name": "::Shimmer<'a>::new",
              "line": 63,
              "signature": "#[must_use]\npub fn new(label: &'a str) -> Self;",
              "documentation": "Construct with default 4-cell wave window."
            },
            {
              "name": "::Shimmer<'a>::theme",
              "line": 75,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::Shimmer<'a>::window",
              "line": 82,
              "signature": "#[must_use]\npub fn window(mut self, window: u16) -> Self;",
              "documentation": "Override the wave window width."
            },
            {
              "name": "::Shimmer<'a>::base_fg",
              "line": 89,
              "signature": "#[must_use]\npub fn base_fg(mut self, fg: Color) -> Self;",
              "documentation": "Override the base (non-shimmer) colour."
            },
            {
              "name": "::Shimmer<'a>::bright_fg",
              "line": 96,
              "signature": "#[must_use]\npub fn bright_fg(mut self, fg: Color) -> Self;",
              "documentation": "Override the bright (shimmer-window) colour."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/slash_dropdown.rs",
          "sha256": "a3407a78bbc95ac6c83b03e1f749776d6600a51a846573497b46e79181242237",
          "artifactSha256": "3965195bfa9f6fddce059a2cd463285247df2d76fd07972372f84468ab2cda2f",
          "url": "/reference/source/harness-tui-kit/src/components/system/slash_dropdown.rs.txt",
          "declarations": [
            {
              "name": "::SlashDropdownItem",
              "line": 47,
              "signature": "#[derive(Debug, Clone)]\npub struct SlashDropdownItem {\n/// Command name (e.g., \"mode\").\n\npub name: String,\n/// Short description (e.g., \"Switch mode (chat/auto)\").\n\npub description: String,\n/// Usage template (e.g., \"/mode <chat|auto>\").\n\npub usage: String,\n/// Category label (e.g., \"built-in\" or plugin name).\n\npub category: String\n}",
              "documentation": "A single item in the slash dropdown."
            },
            {
              "name": "::SlashDropdownState",
              "line": 62,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct SlashDropdownState {\n\n}",
              "documentation": "Mutable state for [`SlashDropdown`], persists across frames."
            },
            {
              "name": "::SlashDropdownState::show",
              "line": 75,
              "signature": "pub fn show(&mut self);",
              "documentation": "Show the dropdown."
            },
            {
              "name": "::SlashDropdownState::hide",
              "line": 80,
              "signature": "pub fn hide(&mut self);",
              "documentation": "Hide the dropdown."
            },
            {
              "name": "::SlashDropdownState::is_visible",
              "line": 86,
              "signature": "#[must_use]\npub fn is_visible(&self) -> bool;",
              "documentation": "Returns `true` if the dropdown is visible."
            },
            {
              "name": "::SlashDropdownState::set_query",
              "line": 91,
              "signature": "pub fn set_query(&mut self, text: &str, items: &[SlashDropdownItem]);",
              "documentation": "Set the query and refilter against the given items."
            },
            {
              "name": "::SlashDropdownState::select_next",
              "line": 122,
              "signature": "pub fn select_next(&mut self);",
              "documentation": "Move selection down."
            },
            {
              "name": "::SlashDropdownState::select_prev",
              "line": 133,
              "signature": "pub fn select_prev(&mut self);",
              "documentation": "Move selection up."
            },
            {
              "name": "::SlashDropdownState::confirm",
              "line": 139,
              "signature": "#[must_use]\npub fn confirm(&self) -> Option<usize>;",
              "documentation": "Confirm the current selection; returns the original item index."
            },
            {
              "name": "::SlashDropdownState::reset",
              "line": 144,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to default state."
            },
            {
              "name": "::SlashDropdownState::query",
              "line": 150,
              "signature": "#[must_use]\npub fn query(&self) -> &str;",
              "documentation": "Returns the current query."
            },
            {
              "name": "::SlashDropdownState::filtered_indices",
              "line": 156,
              "signature": "#[must_use]\npub fn filtered_indices(&self) -> &[usize];",
              "documentation": "Returns the filtered indices."
            },
            {
              "name": "::SlashDropdownState::selected",
              "line": 162,
              "signature": "#[must_use]\npub fn selected(&self) -> usize;",
              "documentation": "Returns the selected index within filtered results."
            },
            {
              "name": "::SlashDropdown",
              "line": 174,
              "signature": "#[derive(Debug, Clone)]\npub struct SlashDropdown<'a> {\n\n}",
              "documentation": "Inline dropdown widget for slash-command autocomplete.\n\nRenders a list of matching commands with the selected item highlighted.\nThe selected item expands to show usage info on a second row."
            },
            {
              "name": "::SlashDropdown<'a>::new",
              "line": 186,
              "signature": "#[must_use]\npub fn new(items: &'a [SlashDropdownItem]) -> Self;",
              "documentation": "Create a new slash dropdown."
            },
            {
              "name": "::SlashDropdown<'a>::theme",
              "line": 196,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern)."
            },
            {
              "name": "::SlashDropdown<'a>::max_visible",
              "line": 203,
              "signature": "#[must_use]\npub fn max_visible(mut self, n: usize) -> Self;",
              "documentation": "Set the maximum number of visible items (builder pattern)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/spinner.rs",
          "sha256": "07edf7f6ec78a14058b3326bab680ecce0f7674aa967205979cd2c7fb2e6ce1f",
          "artifactSha256": "cba13d892d1795686e62c90cbe5cd7e427c3fb3c3e3f7b0719630db32fbd10cc",
          "url": "/reference/source/harness-tui-kit/src/components/system/spinner.rs.txt",
          "declarations": [
            {
              "name": "::SpinnerStyle",
              "line": 29,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]\npub enum SpinnerStyle {\n    /// Braille pattern dots: \u280b\u2819\u2839\u2838\u283c\u2834\u2826\u2827\u2807\u280f\n    #[default]\n    Dots,\n    /// Line rotation: |/-\\\n    Line,\n    /// Arc rotation: \u25dc\u25dd\u25de\u25df\n    Arc,\n    /// Bounce: \u2801\u2802\u2804\u2840\u2880\u2820\u2810\u2808\n    Bounce,\n    /// Moon phases: \ud83c\udf11\ud83c\udf12\ud83c\udf13\ud83c\udf14\ud83c\udf15\ud83c\udf16\ud83c\udf17\ud83c\udf18\n    Moon,\n    /// Clock: \ud83d\udd50\ud83d\udd51\ud83d\udd52\ud83d\udd53\ud83d\udd54\ud83d\udd55\ud83d\udd56\ud83d\udd57\ud83d\udd58\ud83d\udd59\ud83d\udd5a\ud83d\udd5b\n    Clock,\n    /// Arrow: \u2190\u2196\u2191\u2197\u2192\u2198\u2193\u2199\n    Arrow,\n    /// Toggle: \u22b6\u22b7\n    Toggle,\n    /// Growing bar: \u258f\u258e\u258d\u258c\u258b\u258a\u2589\u2588\n    GrowingBar,\n    /// Box bounce: \u2596\u2598\u259d\u2597\n    BoxBounce,\n}",
              "documentation": "Animation style for the spinner."
            },
            {
              "name": "::Spinner",
              "line": 88,
              "signature": "#[derive(Debug, Clone)]\npub struct Spinner<'a> {\n\n}",
              "documentation": "Animated loading indicator with configurable style and optional label.\n\nThis is a pure `Widget` \u2014 the animation frame is determined by a `tick` counter\nthat you increment externally (typically on each render frame or timer tick).\n\n# Examples\n\n```\nuse harness_tui_kit::{Spinner, SpinnerStyle};\nuse ratatui::widgets::Widget;\n\nlet spinner = Spinner::new(0)\n    .style(SpinnerStyle::Dots)\n    .label(\"Loading...\");\n```"
            },
            {
              "name": "::Spinner<'a>::new",
              "line": 104,
              "signature": "#[must_use]\npub fn new(tick: usize) -> Self;",
              "documentation": "Create a new spinner at the given animation tick.\n\nIncrement `tick` each frame to animate the spinner."
            },
            {
              "name": "::Spinner<'a>::style",
              "line": 115,
              "signature": "#[must_use]\npub fn style(mut self, style: SpinnerStyle) -> Self;",
              "documentation": "Set the animation style."
            },
            {
              "name": "::Spinner<'a>::label",
              "line": 122,
              "signature": "#[must_use]\npub fn label(mut self, label: &'a str) -> Self;",
              "documentation": "Set the label text displayed after the spinner character."
            },
            {
              "name": "::Spinner<'a>::theme",
              "line": 129,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/split_pane.rs",
          "sha256": "226600dfbfb35bbbf5b638fd34b7231ad0c2a083d33f258a3fb833b08896520a",
          "artifactSha256": "465af5a14e9fa72f01492a0b68795c55428b7bea2750119fd6c18941e2b1a13a",
          "url": "/reference/source/harness-tui-kit/src/components/system/split_pane.rs.txt",
          "declarations": [
            {
              "name": "::SplitDirection",
              "line": 69,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum SplitDirection {\n    /// Side-by-side layout: primary on the left, secondary on the right.\n    /// The divider is a vertical line of `\u2502` characters.\n    Horizontal,\n    /// Stacked layout: primary on top, secondary on the bottom.\n    /// The divider is a horizontal line of `\u2500` characters.\n    Vertical,\n}",
              "documentation": "Direction in which the split pane divides its area.\n\n# Variants\n\n- [`Horizontal`](SplitDirection::Horizontal) \u2014 Side-by-side layout (left | right),\n  with a vertical divider line.\n- [`Vertical`](SplitDirection::Vertical) \u2014 Stacked layout (top / bottom),\n  with a horizontal divider line."
            },
            {
              "name": "::CollapseState",
              "line": 85,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]\npub enum CollapseState {\n    /// Both panes are visible with a divider between them.\n    #[default]\n    None,\n    /// Primary pane is collapsed; secondary fills the entire area.\n    Primary,\n    /// Secondary pane is collapsed; primary fills the entire area.\n    Secondary,\n}",
              "documentation": "Current collapse state of the split pane.\n\nWhen collapsed, one pane is hidden and the other fills the entire area.\nNo divider is drawn in a collapsed state."
            },
            {
              "name": "::SplitPaneState",
              "line": 119,
              "signature": "#[derive(Debug, Clone)]\npub struct SplitPaneState {\n\n}",
              "documentation": "Mutable state for [`SplitPane`], persists across frames.\n\nTracks the split direction, ratio, minimum size constraints, and\ncollapse state. Provides methods for resizing, collapsing, and\ncomputing sub-area rectangles.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection, CollapseState};\nuse ratatui::layout::Rect;\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.3);\nassert!((state.ratio() - 0.3).abs() < f32::EPSILON);\n\nlet area = Rect::new(0, 0, 80, 24);\nlet primary = state.primary_area(area);\nlet secondary = state.secondary_area(area);\nassert!(primary.width > 0);\nassert!(secondary.width > 0);\n```"
            },
            {
              "name": "::SplitPaneState::new",
              "line": 151,
              "signature": "#[must_use]\npub fn new(direction: SplitDirection, ratio: f32) -> Self;",
              "documentation": "Create a new split pane state.\n\nThe `ratio` is clamped to the range `0.1..=0.9`.\n\n# Arguments\n\n* `direction` \u2014 Whether to split horizontally (left|right) or vertically (top/bottom).\n* `ratio` \u2014 Proportion of space given to the primary pane (0.0 to 1.0).\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection};\n\nlet state = SplitPaneState::new(SplitDirection::Horizontal, 0.3);\nassert!((state.ratio() - 0.3).abs() < f32::EPSILON);\n```"
            },
            {
              "name": "::SplitPaneState::set_ratio",
              "line": 172,
              "signature": "pub fn set_ratio(&mut self, ratio: f32);",
              "documentation": "Set the split ratio, clamped to `0.1..=0.9`.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection};\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nstate.set_ratio(0.7);\nassert!((state.ratio() - 0.7).abs() < f32::EPSILON);\n```"
            },
            {
              "name": "::SplitPaneState::resize",
              "line": 199,
              "signature": "pub fn resize(&mut self, delta: i16);",
              "documentation": "Nudge the ratio by a cell delta relative to the total axis length.\n\nA positive `delta` grows the primary pane; a negative `delta` shrinks it.\nThe resulting ratio is clamped to `0.1..=0.9`.\n\nThe `total` size is determined from the split direction: `area.width` for\nhorizontal splits, `area.height` for vertical splits. If the total is zero\nor too small, this method does nothing.\n\n# Arguments\n\n* `delta` \u2014 Number of cells to shift the divider. Positive = grow primary.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection};\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\n// Simulating a 100-wide area: +10 cells => ratio grows by ~0.10\nstate.resize(10);\nassert!(state.ratio() > 0.5);\n```"
            },
            {
              "name": "::SplitPaneState::collapse_primary",
              "line": 218,
              "signature": "pub fn collapse_primary(&mut self);",
              "documentation": "Collapse the primary pane so the secondary fills the entire area.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection, CollapseState};\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nstate.collapse_primary();\nassert_eq!(state.collapsed(), CollapseState::Primary);\n```"
            },
            {
              "name": "::SplitPaneState::collapse_secondary",
              "line": 233,
              "signature": "pub fn collapse_secondary(&mut self);",
              "documentation": "Collapse the secondary pane so the primary fills the entire area.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection, CollapseState};\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nstate.collapse_secondary();\nassert_eq!(state.collapsed(), CollapseState::Secondary);\n```"
            },
            {
              "name": "::SplitPaneState::expand",
              "line": 249,
              "signature": "pub fn expand(&mut self);",
              "documentation": "Expand both panes (restore from collapsed state).\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection, CollapseState};\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nstate.collapse_primary();\nstate.expand();\nassert_eq!(state.collapsed(), CollapseState::None);\n```"
            },
            {
              "name": "::SplitPaneState::toggle_collapse",
              "line": 269,
              "signature": "pub fn toggle_collapse(&mut self);",
              "documentation": "Cycle collapse state: `None` -> `Primary` -> `Secondary` -> `None`.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection, CollapseState};\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nassert_eq!(state.collapsed(), CollapseState::None);\nstate.toggle_collapse();\nassert_eq!(state.collapsed(), CollapseState::Primary);\nstate.toggle_collapse();\nassert_eq!(state.collapsed(), CollapseState::Secondary);\nstate.toggle_collapse();\nassert_eq!(state.collapsed(), CollapseState::None);\n```"
            },
            {
              "name": "::SplitPaneState::reset",
              "line": 290,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to default ratio (0.5) and expand both panes.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection, CollapseState};\n\nlet mut state = SplitPaneState::new(SplitDirection::Horizontal, 0.3);\nstate.collapse_primary();\nstate.reset();\nassert!((state.ratio() - 0.5).abs() < f32::EPSILON);\nassert_eq!(state.collapsed(), CollapseState::None);\n```"
            },
            {
              "name": "::SplitPaneState::direction",
              "line": 297,
              "signature": "#[must_use]\npub fn direction(&self) -> SplitDirection;",
              "documentation": "Get the split direction."
            },
            {
              "name": "::SplitPaneState::ratio",
              "line": 303,
              "signature": "#[must_use]\npub fn ratio(&self) -> f32;",
              "documentation": "Get the current ratio."
            },
            {
              "name": "::SplitPaneState::collapsed",
              "line": 309,
              "signature": "#[must_use]\npub fn collapsed(&self) -> CollapseState;",
              "documentation": "Get the current collapse state."
            },
            {
              "name": "::SplitPaneState::primary_area",
              "line": 336,
              "signature": "#[must_use]\npub fn primary_area(&self, area: Rect) -> Rect;",
              "documentation": "Compute the rectangle for the primary pane within the given area.\n\nWhen [`CollapseState::Primary`], returns a zero-width/height rect at the\narea origin. When [`CollapseState::Secondary`], returns the full area.\nOtherwise, returns the left (horizontal) or top (vertical) portion.\n\n# Arguments\n\n* `area` \u2014 The total area available for the split pane.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection};\nuse ratatui::layout::Rect;\n\nlet state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nlet area = Rect::new(0, 0, 80, 24);\nlet primary = state.primary_area(area);\nassert!(primary.width > 0);\nassert_eq!(primary.height, 24);\n```"
            },
            {
              "name": "::SplitPaneState::secondary_area",
              "line": 375,
              "signature": "#[must_use]\npub fn secondary_area(&self, area: Rect) -> Rect;",
              "documentation": "Compute the rectangle for the secondary pane within the given area.\n\nWhen [`CollapseState::Secondary`], returns a zero-width/height rect.\nWhen [`CollapseState::Primary`], returns the full area.\nOtherwise, returns the right (horizontal) or bottom (vertical) portion.\n\n# Arguments\n\n* `area` \u2014 The total area available for the split pane.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection};\nuse ratatui::layout::Rect;\n\nlet state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nlet area = Rect::new(0, 0, 80, 24);\nlet secondary = state.secondary_area(area);\nassert!(secondary.width > 0);\nassert_eq!(secondary.height, 24);\n```"
            },
            {
              "name": "::SplitPaneState::divider_area",
              "line": 419,
              "signature": "#[must_use]\npub fn divider_area(&self, area: Rect) -> Rect;",
              "documentation": "Compute the rectangle for the divider strip.\n\nReturns a 1-cell-wide (horizontal) or 1-cell-tall (vertical) rectangle\npositioned between the primary and secondary panes. Returns a zero-size\nrect when collapsed.\n\n# Arguments\n\n* `area` \u2014 The total area available for the split pane.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPaneState, SplitDirection};\nuse ratatui::layout::Rect;\n\nlet state = SplitPaneState::new(SplitDirection::Horizontal, 0.5);\nlet area = Rect::new(0, 0, 80, 24);\nlet divider = state.divider_area(area);\nassert_eq!(divider.width, 1);\nassert_eq!(divider.height, 24);\n```"
            },
            {
              "name": "::SplitPane",
              "line": 505,
              "signature": "#[derive(Debug, Clone)]\npub struct SplitPane<'a> {\n\n}",
              "documentation": "Resizable split pane widget.\n\nRenders a divider line between two panels. The widget itself only draws\nthe divider; the caller is responsible for rendering content into the\nprimary and secondary areas obtained from [`SplitPaneState::primary_area`]\nand [`SplitPaneState::secondary_area`].\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::{SplitPane, SplitPaneState, SplitDirection};\nuse harness_tui_kit::Theme;\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet mut state = SplitPaneState::new(SplitDirection::Vertical, 0.4);\nlet area = Rect::new(0, 0, 80, 24);\nlet mut buf = Buffer::empty(area);\nSplitPane::new().theme(&theme).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::SplitPane<'a>::new",
              "line": 521,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new split pane widget with the default theme.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::SplitPane;\n\nlet pane = SplitPane::new();\n```"
            },
            {
              "name": "::SplitPane<'a>::theme",
              "line": 539,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for divider rendering.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::split_pane::SplitPane;\nuse harness_tui_kit::Theme;\n\nlet theme = Theme::midnight();\nlet pane = SplitPane::new().theme(&theme);\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/status_bar.rs",
          "sha256": "0f6d207e846843a730a7a450652a484710ee9ceb6000e6bca6bce481c3853745",
          "artifactSha256": "02ffbafb9463c51b6e4451090be2cc728aab3772253a71d75254b0b2e7789e08",
          "url": "/reference/source/harness-tui-kit/src/components/system/status_bar.rs.txt",
          "declarations": [
            {
              "name": "::StatusBar",
              "line": 39,
              "signature": "#[derive(Debug, Clone)]\npub struct StatusBar<'a> {\n\n}",
              "documentation": "Bottom status strip with configurable segments.\n\nDisplays a horizontal bar at the bottom of the terminal with key\ninformation: connection state, active mode, current agent, metrics,\nand keyboard hints."
            },
            {
              "name": "::StatusBar<'a>::new",
              "line": 57,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new empty status bar."
            },
            {
              "name": "::StatusBar<'a>::connection",
              "line": 70,
              "signature": "#[must_use]\npub fn connection(mut self, text: &'a str) -> Self;",
              "documentation": "Set the connection state text."
            },
            {
              "name": "::StatusBar<'a>::mode",
              "line": 77,
              "signature": "#[must_use]\npub fn mode(mut self, text: &'a str) -> Self;",
              "documentation": "Set the mode label."
            },
            {
              "name": "::StatusBar<'a>::agent",
              "line": 84,
              "signature": "#[must_use]\npub fn agent(mut self, text: &'a str) -> Self;",
              "documentation": "Set the agent name."
            },
            {
              "name": "::StatusBar<'a>::metric",
              "line": 91,
              "signature": "#[must_use]\npub fn metric(mut self, text: &'a str) -> Self;",
              "documentation": "Set the metric text."
            },
            {
              "name": "::StatusBar<'a>::hint",
              "line": 98,
              "signature": "#[must_use]\npub fn hint(mut self, text: &'a str) -> Self;",
              "documentation": "Set the keyboard hint text."
            },
            {
              "name": "::StatusBar<'a>::theme",
              "line": 105,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/status_footer.rs",
          "sha256": "3ca02b2b158eadf26c3807addc2ab45c297d554516c51f79d28abd3876776b8d",
          "artifactSha256": "1cbeb0463112798c84514a403400b3965481971a98aa8dbff03bc87363ba10c1",
          "url": "/reference/source/harness-tui-kit/src/components/system/status_footer.rs.txt",
          "declarations": [
            {
              "name": "::StatusFooterIndicator",
              "line": 34,
              "signature": "#[derive(Debug, Clone)]\npub struct StatusFooterIndicator {\npub dot: char,\npub label: String,\npub active: bool\n}",
              "documentation": "One status indicator. Renders as `<dot> <label>` with optional\naccent on the dot."
            },
            {
              "name": "::StatusFooterIndicator::new",
              "line": 43,
              "signature": "#[must_use]\npub fn new(label: impl Into<String>) -> Self;",
              "documentation": "Build an indicator. Defaults to active (accent dot)."
            },
            {
              "name": "::StatusFooterIndicator::dot",
              "line": 53,
              "signature": "#[must_use]\npub fn dot(mut self, glyph: char) -> Self;",
              "documentation": "Override the dot glyph."
            },
            {
              "name": "::StatusFooterIndicator::inactive",
              "line": 60,
              "signature": "#[must_use]\npub fn inactive(mut self) -> Self;",
              "documentation": "Mark the indicator inactive \u2014 dot uses muted color."
            },
            {
              "name": "::StatusFooter",
              "line": 73,
              "signature": "#[derive(Debug, Clone)]\npub struct StatusFooter<'a> {\n\n}",
              "documentation": "The bottom-of-screen status strip."
            },
            {
              "name": "::StatusFooter<'a>::new",
              "line": 84,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Build a footer with empty defaults."
            },
            {
              "name": "::StatusFooter<'a>::left",
              "line": 96,
              "signature": "#[must_use]\npub fn left(mut self, text: &'a str) -> Self;",
              "documentation": "Set the left-aligned text (typically `cwd:branch`)."
            },
            {
              "name": "::StatusFooter<'a>::indicators",
              "line": 103,
              "signature": "#[must_use]\npub fn indicators(mut self, items: &'a [StatusFooterIndicator]) -> Self;",
              "documentation": "Set the centered indicator slice."
            },
            {
              "name": "::StatusFooter<'a>::right",
              "line": 110,
              "signature": "#[must_use]\npub fn right(mut self, text: &'a str) -> Self;",
              "documentation": "Set the right-aligned text (typically a version label)."
            },
            {
              "name": "::StatusFooter<'a>::theme",
              "line": 117,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::StatusFooter<'a>::indicator_gap",
              "line": 124,
              "signature": "#[must_use]\npub fn indicator_gap(mut self, gap: u16) -> Self;",
              "documentation": "Override the gap between indicators (default: 2 cells)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/status_indicator.rs",
          "sha256": "b1870ed1858c8cb790cba3abccaffeceeb1a509b6b1b6306bbe6d039f8fa61c0",
          "artifactSha256": "2109bd0c588daf6c6f3d290b074ef473a460c762e03e4f77587e44be2d6a8ce2",
          "url": "/reference/source/harness-tui-kit/src/components/system/status_indicator.rs.txt",
          "declarations": [
            {
              "name": "::StatusKind",
              "line": 24,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq)]\npub enum StatusKind {\n    /// No active response \u2014 just the prompt blinking.\n    Idle,\n    /// Model thinking (no tokens streamed yet).\n    Thinking,\n    /// Tokens streaming in.\n    Streaming,\n    /// Tool / shell call in flight.\n    ToolCall,\n    /// User pressed `Esc` / `/stop` and the SDK is draining.\n    Stopping,\n    /// Stream finished, waiting on the next user input.\n    Done,\n}",
              "documentation": "What the agent is doing right now."
            },
            {
              "name": "::StatusKind::is_busy",
              "line": 42,
              "signature": "#[must_use]\npub fn is_busy(self) -> bool;",
              "documentation": "Is the agent currently busy (animated spinner shown)?"
            },
            {
              "name": "::StatusKind::label",
              "line": 54,
              "signature": "#[must_use]\npub fn label(self) -> &'static str;",
              "documentation": "Default header label for the status row."
            },
            {
              "name": "::StatusIndicatorState",
              "line": 71,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct StatusIndicatorState {\n/// Animation tick (caller increments each frame).\n\npub tick: u64\n}",
              "documentation": "Persistent state for [`StatusIndicator`]. The animation tick is a\nmonotonically increasing counter the caller bumps on each render\nframe; the indicator picks the right glyph from a small braille\nframe set."
            },
            {
              "name": "::StatusIndicatorState::advance",
              "line": 78,
              "signature": "pub fn advance(&mut self);",
              "documentation": "Bump the tick by 1."
            },
            {
              "name": "::StatusIndicatorState::reset",
              "line": 83,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset tick to 0."
            },
            {
              "name": "::StatusIndicator",
              "line": 90,
              "signature": "#[derive(Debug, Clone)]\npub struct StatusIndicator<'a> {\n\n}",
              "documentation": "Render a single-row status indicator."
            },
            {
              "name": "::StatusIndicator<'a>::new",
              "line": 101,
              "signature": "#[must_use]\npub fn new(kind: StatusKind) -> Self;",
              "documentation": "Construct a new status row in the given kind."
            },
            {
              "name": "::StatusIndicator<'a>::theme",
              "line": 113,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::StatusIndicator<'a>::elapsed",
              "line": 120,
              "signature": "#[must_use]\npub fn elapsed(mut self, elapsed: Duration) -> Self;",
              "documentation": "Show an elapsed-time pill (`12s` / `1m 02s` / `1h 03m 09s`)."
            },
            {
              "name": "::StatusIndicator<'a>::detail",
              "line": 128,
              "signature": "#[must_use]\npub fn detail(mut self, detail: &'a str) -> Self;",
              "documentation": "Show a short inline detail (e.g. the current tool name or the\nmodel id)."
            },
            {
              "name": "::StatusIndicator<'a>::interrupt_hint",
              "line": 135,
              "signature": "#[must_use]\npub fn interrupt_hint(mut self, on: bool) -> Self;",
              "documentation": "Show \"Esc to interrupt\" on the right-hand side."
            },
            {
              "name": "::fmt_elapsed_compact",
              "line": 206,
              "signature": "#[must_use]\npub fn fmt_elapsed_compact(elapsed_secs: u64) -> String;",
              "documentation": "Format elapsed seconds into a compact human-readable string.\nModeled on `openai/codex@codex-rs/tui/src/status_indicator_widget.rs::fmt_elapsed_compact`."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/tabs.rs",
          "sha256": "a60a9e1be3de93a31e4f12227abeb10962a5673ad936833d7da71a5e3d6b5149",
          "artifactSha256": "ae2a2a217c940ad0e2f00e29c9f08b870bc17721da492d3a95f4097edf87a78d",
          "url": "/reference/source/harness-tui-kit/src/components/system/tabs.rs.txt",
          "declarations": [
            {
              "name": "::TabItem",
              "line": 62,
              "signature": "#[derive(Debug, Clone)]\npub struct TabItem {\n\n}",
              "documentation": "A single tab descriptor carrying a sanitized label and an optional badge count.\n\nLabels are sanitized at construction time via [`sanitize`] to strip ANSI escapes,\nOSC sequences, null bytes, and other dangerous terminal content.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::TabItem;\n\nlet tab = TabItem::new(\"Agents\").with_badge(5);\nassert_eq!(tab.label(), \"Agents\");\nassert_eq!(tab.badge(), Some(5));\n```"
            },
            {
              "name": "::TabItem::new",
              "line": 85,
              "signature": "#[must_use]\npub fn new(label: impl Into<String>) -> Self;",
              "documentation": "Create a new tab item with the given label.\n\nThe label is sanitized to remove terminal escape sequences and control\ncharacters. An empty or all-whitespace label is stored as-is after\nsanitization.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::TabItem;\n\nlet tab = TabItem::new(\"Chat\");\nassert_eq!(tab.label(), \"Chat\");\n```"
            },
            {
              "name": "::TabItem::with_badge",
              "line": 106,
              "signature": "#[must_use]\npub fn with_badge(mut self, count: u32) -> Self;",
              "documentation": "Attach a badge count to this tab.\n\nThe badge is displayed as `(N)` after the label in the tab bar. A badge\nof `0` is treated as no badge and will not render.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::TabItem;\n\nlet tab = TabItem::new(\"Alerts\").with_badge(12);\nassert_eq!(tab.badge(), Some(12));\n```"
            },
            {
              "name": "::TabItem::label",
              "line": 113,
              "signature": "#[must_use]\npub fn label(&self) -> &str;",
              "documentation": "Returns the sanitized label."
            },
            {
              "name": "::TabItem::badge",
              "line": 119,
              "signature": "#[must_use]\npub fn badge(&self) -> Option<u32>;",
              "documentation": "Returns the badge count, if any."
            },
            {
              "name": "::TabsState",
              "line": 167,
              "signature": "#[derive(Debug, Clone)]\npub struct TabsState {\n\n}",
              "documentation": "Mutable state for [`Tabs`], persisted across frames.\n\nTracks which tab is active, the set of tab items, and the horizontal\nscroll offset for overflow handling. The application is responsible for\nkeeping this state alive between renders.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet items = vec![TabItem::new(\"A\"), TabItem::new(\"B\"), TabItem::new(\"C\")];\nlet mut state = TabsState::new(items);\nassert_eq!(state.active(), 0);\n\nstate.next();\nassert_eq!(state.active(), 1);\n\nstate.prev();\nassert_eq!(state.active(), 0);\n```"
            },
            {
              "name": "::TabsState::new",
              "line": 192,
              "signature": "#[must_use]\npub fn new(items: Vec<TabItem>) -> Self;",
              "documentation": "Create a new state with the given tab items.\n\nThe first tab is selected by default. If `items` is empty the state is\nvalid but will render nothing.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet state = TabsState::new(vec![TabItem::new(\"Home\")]);\nassert_eq!(state.active(), 0);\nassert_eq!(state.len(), 1);\n```"
            },
            {
              "name": "::TabsState::select",
              "line": 218,
              "signature": "pub fn select(&mut self, index: usize);",
              "documentation": "Select the tab at `index`, clamping to the last valid index.\n\nIf the items list is empty this is a no-op. The scroll offset is\nadjusted so the active tab is always visible.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet mut state = TabsState::new(vec![TabItem::new(\"A\"), TabItem::new(\"B\")]);\nstate.select(1);\nassert_eq!(state.active(), 1);\n\n// Out-of-bounds clamps to last tab\nstate.select(100);\nassert_eq!(state.active(), 1);\n```"
            },
            {
              "name": "::TabsState::next",
              "line": 241,
              "signature": "pub fn next(&mut self);",
              "documentation": "Move to the next tab, wrapping around to the first tab after the last.\n\nNo-op when there are zero or one tabs.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet mut state = TabsState::new(vec![TabItem::new(\"A\"), TabItem::new(\"B\")]);\nstate.next();\nassert_eq!(state.active(), 1);\nstate.next();\nassert_eq!(state.active(), 0); // wrapped\n```"
            },
            {
              "name": "::TabsState::prev",
              "line": 264,
              "signature": "pub fn prev(&mut self);",
              "documentation": "Move to the previous tab, wrapping around to the last tab before the first.\n\nNo-op when there are zero or one tabs.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet mut state = TabsState::new(vec![TabItem::new(\"A\"), TabItem::new(\"B\")]);\nstate.prev();\nassert_eq!(state.active(), 1); // wrapped\nstate.prev();\nassert_eq!(state.active(), 0);\n```"
            },
            {
              "name": "::TabsState::active",
              "line": 278,
              "signature": "#[must_use]\npub fn active(&self) -> usize;",
              "documentation": "Returns the index of the currently active tab."
            },
            {
              "name": "::TabsState::active_label",
              "line": 295,
              "signature": "#[must_use]\npub fn active_label(&self) -> &str;",
              "documentation": "Returns the label of the currently active tab.\n\nReturns an empty string if there are no tabs.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet state = TabsState::new(vec![TabItem::new(\"Home\"), TabItem::new(\"Settings\")]);\nassert_eq!(state.active_label(), \"Home\");\n```"
            },
            {
              "name": "::TabsState::len",
              "line": 301,
              "signature": "#[must_use]\npub fn len(&self) -> usize;",
              "documentation": "Returns the number of tabs."
            },
            {
              "name": "::TabsState::is_empty",
              "line": 307,
              "signature": "#[must_use]\npub fn is_empty(&self) -> bool;",
              "documentation": "Returns `true` if there are no tabs."
            },
            {
              "name": "::TabsState::set_badge",
              "line": 327,
              "signature": "pub fn set_badge(&mut self, index: usize, count: Option<u32>);",
              "documentation": "Set or clear the badge on the tab at `index`.\n\nIf `index` is out of bounds, this is a no-op.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet mut state = TabsState::new(vec![TabItem::new(\"Inbox\")]);\nstate.set_badge(0, Some(7));\nassert_eq!(state.items().get(0).and_then(|t| t.badge()), Some(7));\n\nstate.set_badge(0, None);\nassert_eq!(state.items().get(0).and_then(|t| t.badge()), None);\n```"
            },
            {
              "name": "::TabsState::reset",
              "line": 345,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset the state to its initial configuration: first tab active, no scroll.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{TabsState, TabItem};\n\nlet mut state = TabsState::new(vec![TabItem::new(\"A\"), TabItem::new(\"B\")]);\nstate.select(1);\nstate.reset();\nassert_eq!(state.active(), 0);\n```"
            },
            {
              "name": "::TabsState::items",
              "line": 352,
              "signature": "#[must_use]\npub fn items(&self) -> &[TabItem];",
              "documentation": "Returns a slice of all tab items."
            },
            {
              "name": "::Tabs",
              "line": 399,
              "signature": "#[derive(Debug, Clone)]\npub struct Tabs<'a> {\n\n}",
              "documentation": "Tab navigation bar rendered as a horizontal strip.\n\nThis is a [`StatefulWidget`] that renders against [`TabsState`]. It draws\ntab labels left-to-right with the active tab highlighted, optional badge\ncounts, and overflow indicators (`<` / `>`) when tabs exceed the\navailable width.\n\n# Layout\n\n- **Height 1**: Tab labels on a single line with active tab in accent color.\n- **Height >= 2**: Tab labels on line 1, underline indicator and bottom border\n  on line 2. The active tab gets a highlighted underline segment using `\u2501`.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::{Tabs, TabsState, TabItem};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet mut state = TabsState::new(vec![\n    TabItem::new(\"Chat\"),\n    TabItem::new(\"Agents\").with_badge(2),\n]);\nlet area = Rect::new(0, 0, 40, 2);\nlet mut buf = Buffer::empty(area);\nTabs::new().render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::Tabs<'a>::new",
              "line": 415,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Create a new tab bar widget using the default theme.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::Tabs;\n\nlet tabs = Tabs::new();\n```"
            },
            {
              "name": "::Tabs<'a>::theme",
              "line": 433,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme for rendering.\n\n# Examples\n\n```\nuse harness_tui_kit::components::system::tabs::Tabs;\nuse harness_tui_kit::Theme;\n\nlet theme = Theme::midnight();\nlet tabs = Tabs::new().theme(&theme);\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/theme_picker.rs",
          "sha256": "dcac6f9d0304d8ddbd48fbc74d80bb69ee14151bea6360de832cdd913c7a0981",
          "artifactSha256": "fb3f7d7edc1c5e23ad157afd13d54635055a99f91d47aadd6d6de3f5cbea12b9",
          "url": "/reference/source/harness-tui-kit/src/components/system/theme_picker.rs.txt",
          "declarations": [
            {
              "name": "::ThemePickerRow",
              "line": 21,
              "signature": "#[derive(Debug, Clone)]\npub struct ThemePickerRow {\n/// Stable id (used by the activation handler).\n\npub id: String,\n/// Display name (e.g. \"Solarized Dark\").\n\npub name: String,\n/// One-line description shown beside the focus marker.\n\npub description: String,\n/// Background color preview (for the swatch column).\n\npub preview_bg: Color,\n/// Foreground color preview.\n\npub preview_fg: Color,\n/// Accent color preview.\n\npub preview_accent: Color\n}",
              "documentation": "One row in [`ThemePicker`]."
            },
            {
              "name": "::ThemePickerState",
              "line": 38,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct ThemePickerState {\n\n}",
              "documentation": "Persistent state for [`ThemePicker`]."
            },
            {
              "name": "::ThemePickerState::selected",
              "line": 45,
              "signature": "#[must_use]\npub fn selected(&self) -> usize;",
              "documentation": "Currently-focused index."
            },
            {
              "name": "::ThemePickerState::move_down",
              "line": 50,
              "signature": "pub fn move_down(&mut self, len: usize);",
              "documentation": "Move focus down by one row, clamped to `len - 1`."
            },
            {
              "name": "::ThemePickerState::move_up",
              "line": 59,
              "signature": "pub fn move_up(&mut self);",
              "documentation": "Move focus up by one row."
            },
            {
              "name": "::ThemePickerState::reset",
              "line": 64,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset focus to the first row."
            },
            {
              "name": "::ThemePicker",
              "line": 71,
              "signature": "#[derive(Debug, Clone)]\npub struct ThemePicker<'a> {\n\n}",
              "documentation": "Theme picker widget."
            },
            {
              "name": "::ThemePicker<'a>::new",
              "line": 80,
              "signature": "#[must_use]\npub fn new(rows: &'a [ThemePickerRow]) -> Self;",
              "documentation": "Construct a new picker over `rows`."
            },
            {
              "name": "::ThemePicker<'a>::theme",
              "line": 91,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme (the picker's chrome \u2014 separate\nfrom any theme being previewed in a row)."
            },
            {
              "name": "::ThemePicker<'a>::title",
              "line": 98,
              "signature": "#[must_use]\npub fn title(mut self, title: &'a str) -> Self;",
              "documentation": "Override the title at the top of the picker block."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/thinking.rs",
          "sha256": "f0fe57f8368c4909116ac7ffa45a1a04a8eaa79ab79fb7f5664f4d7b510fc46d",
          "artifactSha256": "7e320a7a1a242d77232a4bab98f28e1952d5dcda368da59cc3e3a0525ba2c1a8",
          "url": "/reference/source/harness-tui-kit/src/components/system/thinking.rs.txt",
          "declarations": [
            {
              "name": "::ThinkingIndicator",
              "line": 36,
              "signature": "#[derive(Debug, Clone)]\npub struct ThinkingIndicator<'a> {\n\n}",
              "documentation": "Animated reasoning indicator with phase label and elapsed timer.\n\nRenders an animated spinner followed by a label (e.g., \"Thinking...\")\nand optionally an elapsed time display."
            },
            {
              "name": "::ThinkingIndicator<'a>::new",
              "line": 50,
              "signature": "#[must_use]\npub fn new(tick: usize) -> Self;",
              "documentation": "Create a new thinking indicator at the given animation tick."
            },
            {
              "name": "::ThinkingIndicator<'a>::label",
              "line": 61,
              "signature": "#[must_use]\npub fn label(mut self, label: &'a str) -> Self;",
              "documentation": "Set the phase label."
            },
            {
              "name": "::ThinkingIndicator<'a>::elapsed",
              "line": 68,
              "signature": "#[must_use]\npub fn elapsed(mut self, elapsed: &'a str) -> Self;",
              "documentation": "Set the elapsed time display string."
            },
            {
              "name": "::ThinkingIndicator<'a>::theme",
              "line": 75,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/thinking_animation.rs",
          "sha256": "b5d947f264a1ded10c9a1bb9853ff13c644b83f5350d83d0b259ba1b376482b0",
          "artifactSha256": "557191cb50a13d949e6cddd7cd7b5ec498203d9d6086c64f31166fa22833a382",
          "url": "/reference/source/harness-tui-kit/src/components/system/thinking_animation.rs.txt",
          "declarations": [
            {
              "name": "::THINKING_ANIMATION_DEFAULT_WIDTH",
              "line": 34,
              "signature": "pub const THINKING_ANIMATION_DEFAULT_WIDTH: u16;",
              "documentation": "Default visible width in terminal cells. The user asked for ~32\n\u2014 wide enough to feel substantial, narrow enough to drop into a\nstatus row without dominating it."
            },
            {
              "name": "::THINKING_ANIMATION_DEFAULT_CHARSET",
              "line": 37,
              "signature": "pub const THINKING_ANIMATION_DEFAULT_CHARSET: &str;",
              "documentation": "Default character alphabet \u2014 hex digits."
            },
            {
              "name": "::ThinkingAnimationState",
              "line": 43,
              "signature": "#[derive(Debug, Clone)]\npub struct ThinkingAnimationState {\n\n}",
              "documentation": "Persistent state for [`ThinkingAnimation`]. The runtime calls\n[`Self::advance`] once per frame so each cell's phase steps\nforward."
            },
            {
              "name": "::ThinkingAnimationState::with_width",
              "line": 59,
              "signature": "#[must_use]\npub fn with_width(width: u16) -> Self;",
              "documentation": "Construct state for a band of `width` cells. Each cell gets a\ndistinct seed phase + flip cadence."
            },
            {
              "name": "::ThinkingAnimationState::advance",
              "line": 85,
              "signature": "pub fn advance(&mut self);",
              "documentation": "Advance one frame. Cells whose cadence divides the current\ntick rotate their phase by a small per-cell offset."
            },
            {
              "name": "::ThinkingAnimationState::reset",
              "line": 99,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset to a fresh phase pattern at the same width."
            },
            {
              "name": "::ThinkingAnimationState::width",
              "line": 106,
              "signature": "#[must_use]\npub fn width(&self) -> u16;",
              "documentation": "Width (in cells) the state was sized for."
            },
            {
              "name": "::ThinkingAnimationState::tick",
              "line": 112,
              "signature": "#[must_use]\npub fn tick(&self) -> u64;",
              "documentation": "Current global tick. Useful for tests / diagnostics."
            },
            {
              "name": "::ThinkingAnimation",
              "line": 134,
              "signature": "#[derive(Debug, Clone)]\npub struct ThinkingAnimation<'a> {\n\n}",
              "documentation": "Single-row band of fluttering hex characters that signals the\nagent is thinking."
            },
            {
              "name": "::ThinkingAnimation<'a>::new",
              "line": 148,
              "signature": "#[must_use]\npub fn new() -> Self;",
              "documentation": "Build with the default 32-char hex band."
            },
            {
              "name": "::ThinkingAnimation<'a>::theme",
              "line": 160,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::ThinkingAnimation<'a>::width",
              "line": 168,
              "signature": "#[must_use]\npub fn width(mut self, width: u16) -> Self;",
              "documentation": "Override the visible width in cells. Values < 1 are clamped\nto 1."
            },
            {
              "name": "::ThinkingAnimation<'a>::charset",
              "line": 176,
              "signature": "#[must_use]\npub fn charset(mut self, charset: &'a str) -> Self;",
              "documentation": "Override the character alphabet (hex by default). Empty\nstrings render as spaces."
            },
            {
              "name": "::ThinkingAnimation<'a>::fg",
              "line": 184,
              "signature": "#[must_use]\npub fn fg(mut self, fg: Color) -> Self;",
              "documentation": "Override the foreground colour. Defaults to the theme's\nprimary accent when unset."
            },
            {
              "name": "::ThinkingAnimation<'a>::bg",
              "line": 191,
              "signature": "#[must_use]\npub fn bg(mut self, bg: Color) -> Self;",
              "documentation": "Optional background colour."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/system/welcome_screen.rs",
          "sha256": "eb66f12f77fb3ac7c7cd4a218f2e3dc9ffbf27b5696f2e2b9c4396bb671b6ea0",
          "artifactSha256": "6028e87d7a8bc7b7388c365892f50043ed8a238512c6c9de7bfeb7982db5d745",
          "url": "/reference/source/harness-tui-kit/src/components/system/welcome_screen.rs.txt",
          "declarations": [
            {
              "name": "::WelcomeConfig",
              "line": 43,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct WelcomeConfig {\n/// Hero text rendered as block letters (e.g. `\"clausen\"`).\n\n/// Ignored when [`Self::custom_logo_rows`] is set.\n\npub brand: String,\n/// Optional pixel-art logo overriding the block-font [`Self::brand`].\n\n/// Each row contains `\u2588` (filled), `\u2591` (shade), or ` ` (transparent)\n\n/// cells \u2014 see [`crate::CustomLogo`] for the renderer and\n\n/// [`crate::CLAUSEN_LOGO_ROWS`] for the bundled Clausen art.\n\npub custom_logo_rows: Option<&'static [&'static str]>,\n/// How many leading characters of `brand` to render dim \u2014 used\n\n/// for the opencode-style \"open\" dim / \"code\" bright effect.\n\n/// Set to 0 to render the whole brand at full strength.\n\npub dim_prefix: usize,\n/// Optional `(from, to)` truecolor gradient swept across the\n\n/// block letters. Both colors must be `Color::Rgb`.\n\npub gradient: Option<(Color, Color)>,\n/// Placeholder line shown inside the focus card.\n\npub placeholder: String,\n/// Bold mode tag on the meta line (e.g. `\"Build\"`).\n\npub mode: String,\n/// Model name (e.g. `\"Kimi K2.6\"`).\n\npub model: String,\n/// Dim tagline that follows the model (e.g. `\"Kimi For Coding\"`).\n\npub model_tagline: String,\n/// Hint pairs rendered in the bar below the focus card.\n\npub hints: Vec<HintItem>,\n/// Footer left-aligned text (cwd, branch).\n\npub footer_left: String,\n/// Footer center indicators.\n\npub footer_indicators: Vec<StatusFooterIndicator>,\n/// Footer right-aligned text (typically version).\n\npub footer_right: String\n}",
              "documentation": "Brand + hint configuration consumed by [`WelcomeScreen`].\n\nAll fields are owned `String`s so the type can be passed across\nbuilder boundaries (e.g. stored on the SDK's `AgentApp`)."
            },
            {
              "name": "::WelcomeConfig::new",
              "line": 80,
              "signature": "#[must_use]\npub fn new(brand: impl Into<String>) -> Self;",
              "documentation": "Convenience constructor."
            },
            {
              "name": "::WelcomeConfig::placeholder",
              "line": 89,
              "signature": "#[must_use]\npub fn placeholder(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Set placeholder text."
            },
            {
              "name": "::WelcomeConfig::mode",
              "line": 96,
              "signature": "#[must_use]\npub fn mode(mut self, label: impl Into<String>) -> Self;",
              "documentation": "Set mode tag."
            },
            {
              "name": "::WelcomeConfig::model",
              "line": 103,
              "signature": "#[must_use]\npub fn model(mut self, name: impl Into<String>) -> Self;",
              "documentation": "Set model name."
            },
            {
              "name": "::WelcomeConfig::model_tagline",
              "line": 110,
              "signature": "#[must_use]\npub fn model_tagline(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Set model tagline."
            },
            {
              "name": "::WelcomeConfig::hints",
              "line": 117,
              "signature": "#[must_use]\npub fn hints(mut self, items: Vec<HintItem>) -> Self;",
              "documentation": "Replace the hint pairs."
            },
            {
              "name": "::WelcomeConfig::footer_left",
              "line": 124,
              "signature": "#[must_use]\npub fn footer_left(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Set the footer left text."
            },
            {
              "name": "::WelcomeConfig::footer_indicators",
              "line": 131,
              "signature": "#[must_use]\npub fn footer_indicators(mut self, items: Vec<StatusFooterIndicator>) -> Self;",
              "documentation": "Replace the footer indicators."
            },
            {
              "name": "::WelcomeConfig::footer_right",
              "line": 138,
              "signature": "#[must_use]\npub fn footer_right(mut self, text: impl Into<String>) -> Self;",
              "documentation": "Set the footer right-side text."
            },
            {
              "name": "::WelcomeConfig::dim_prefix",
              "line": 145,
              "signature": "#[must_use]\npub fn dim_prefix(mut self, n: usize) -> Self;",
              "documentation": "Apply the opencode dim-prefix effect."
            },
            {
              "name": "::WelcomeConfig::gradient",
              "line": 152,
              "signature": "#[must_use]\npub fn gradient(mut self, from: Color, to: Color) -> Self;",
              "documentation": "Apply a horizontal color gradient to the brand logo."
            },
            {
              "name": "::WelcomeConfig::custom_logo",
              "line": 161,
              "signature": "#[must_use]\npub fn custom_logo(mut self, rows: &'static [&'static str]) -> Self;",
              "documentation": "Use a pixel-art logo (slice of `\u2588`/`\u2591`/` ` rows) instead of\nrendering the brand text via [`BlockLogo`]. Pass\n[`crate::CLAUSEN_LOGO_ROWS`] for the bundled Clausen wordmark."
            },
            {
              "name": "::WelcomeScreen",
              "line": 169,
              "signature": "#[derive(Debug, Clone)]\npub struct WelcomeScreen<'a> {\n\n}",
              "documentation": "Render a welcome screen given a [`WelcomeConfig`]."
            },
            {
              "name": "::WelcomeScreen<'a>::new",
              "line": 180,
              "signature": "#[must_use]\npub fn new(config: &'a WelcomeConfig) -> Self;",
              "documentation": "Build a welcome screen."
            },
            {
              "name": "::WelcomeScreen<'a>::theme",
              "line": 190,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Override the rendering theme."
            },
            {
              "name": "::WelcomeScreen<'a>::focus_card_max_width",
              "line": 197,
              "signature": "#[must_use]\npub fn focus_card_max_width(mut self, w: u16) -> Self;",
              "documentation": "Override the focus card width clamp."
            },
            {
              "name": "::WelcomeScreen<'a>::focus_card_rect",
              "line": 219,
              "signature": "#[must_use]\npub fn focus_card_rect(&self, area: Rect) -> Option<Rect>;",
              "documentation": "Compute where the focus card sits inside `area`, so callers\ncan overlay a real composer (e.g., a kit `InputBar`) onto the\ncard's placeholder row instead of having a separate input bar\nat the bottom of the screen. Returns `None` when `area` is\ntoo small for the welcome layout."
            },
            {
              "name": "::WelcomeScreen<'a>::input_overlay_rect",
              "line": 248,
              "signature": "#[must_use]\npub fn input_overlay_rect(&self, area: Rect) -> Option<Rect>;",
              "documentation": "Compute the 1-row strip *inside* the focus card body where\nthe placeholder line is rendered. This is the rect a runtime\nshould pass to its `InputBar` so the live composer\nvisually replaces the placeholder when the user starts\ntyping. Returns `None` if the area can't host the welcome\nlayout."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/workflow/mod.rs",
          "sha256": "a0b9d73372b2f1e29a49470557e3912aa53b763fe1b558fd1f323187a8d03f90",
          "artifactSha256": "c93c6b8980b77dc442407b82e3d8a23b90c0346ef1b51526db922bafef2eb856",
          "url": "/reference/source/harness-tui-kit/src/components/workflow/mod.rs.txt",
          "declarations": [
            {
              "name": "progress_timeline",
              "line": 5,
              "signature": "pub mod progress_timeline;",
              "documentation": "Workflow and orchestration components.\n\nComponents for visualizing task execution, DAG workflows, and progress tracking."
            },
            {
              "name": "task_list",
              "line": 6,
              "signature": "pub mod task_list;",
              "documentation": ""
            },
            {
              "name": "workflow_dag",
              "line": 7,
              "signature": "pub mod workflow_dag;",
              "documentation": ""
            },
            {
              "name": "workflow_node",
              "line": 8,
              "signature": "pub mod workflow_node;",
              "documentation": ""
            },
            {
              "name": "pub use progress_timeline::ProgressTimeline;",
              "line": 10,
              "signature": "pub use progress_timeline::ProgressTimeline;",
              "documentation": ""
            },
            {
              "name": "pub use task_list::{TaskList, TaskListState};",
              "line": 11,
              "signature": "pub use task_list::{TaskList, TaskListState};",
              "documentation": ""
            },
            {
              "name": "pub use workflow_dag::{WorkflowDAG, WorkflowDAGState};",
              "line": 12,
              "signature": "pub use workflow_dag::{WorkflowDAG, WorkflowDAGState};",
              "documentation": ""
            },
            {
              "name": "pub use workflow_node::WorkflowNode;",
              "line": 13,
              "signature": "pub use workflow_node::WorkflowNode;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/workflow/progress_timeline.rs",
          "sha256": "761b1b4637914cf22519c63ae9884bcb295c6502af246fc866a8cfbbd766fc79",
          "artifactSha256": "7cc25948834200fc7767f4dca7dad8b10b9562c6a89b3b12aee2f0ed26b3737e",
          "url": "/reference/source/harness-tui-kit/src/components/workflow/progress_timeline.rs.txt",
          "declarations": [
            {
              "name": "::ProgressTimeline",
              "line": 107,
              "signature": "#[derive(Debug, Clone)]\npub struct ProgressTimeline<'a> {\n\n}",
              "documentation": "Horizontal progress bar with labeled step markers.\n\nRenders a multi-row display showing step labels on row 0, a connecting line\nwith status-colored node markers on row 1, and optional per-step elapsed\ntimes on row 2.\n\nEach step's marker is colored by its [`TaskStatus`]: active uses the accent\ncolor, complete uses success, error uses error, and both pending and skipped\nuse the muted foreground color.\n\nThe connecting line between steps is colored based on the status of the\n*left* step: complete or skipped steps produce a success-colored line,\nwhile other statuses produce a muted-colored line.\n\n# Examples\n\n```\nuse harness_tui_kit::components::workflow::progress_timeline::ProgressTimeline;\nuse harness_tui_kit::{TaskStatus, Theme};\nuse ratatui::buffer::Buffer;\nuse ratatui::layout::Rect;\nuse ratatui::widgets::Widget;\n\nlet theme = Theme::dark();\nlet steps: Vec<(String, TaskStatus)> = vec![\n    (\"Build\".into(), TaskStatus::Complete),\n    (\"Test\".into(), TaskStatus::Active),\n    (\"Deploy\".into(), TaskStatus::Pending),\n];\nlet elapsed = vec![3u64, 12, 0];\nlet area = Rect::new(0, 0, 60, 3);\nlet mut buf = Buffer::empty(area);\nProgressTimeline::new(&steps)\n    .theme(&theme)\n    .show_elapsed(true)\n    .elapsed_seconds(&elapsed)\n    .render(area, &mut buf);\n```"
            },
            {
              "name": "::ProgressTimeline<'a>::new",
              "line": 124,
              "signature": "#[must_use]\npub fn new(steps: &'a [(String, TaskStatus)]) -> Self;",
              "documentation": "Create a new progress timeline with the given steps.\n\nEach step is a `(label, status)` pair. Steps are rendered left-to-right\nin the order provided, evenly spaced across the available width."
            },
            {
              "name": "::ProgressTimeline<'a>::theme",
              "line": 135,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern)."
            },
            {
              "name": "::ProgressTimeline<'a>::show_elapsed",
              "line": 142,
              "signature": "#[must_use]\npub fn show_elapsed(mut self, show: bool) -> Self;",
              "documentation": "Set whether elapsed times are shown below each marker (builder pattern)."
            },
            {
              "name": "::ProgressTimeline<'a>::elapsed_seconds",
              "line": 153,
              "signature": "#[must_use]\npub fn elapsed_seconds(mut self, elapsed: &'a [u64]) -> Self;",
              "documentation": "Set per-step elapsed seconds (builder pattern).\n\nOnly displayed when [`show_elapsed`](Self::show_elapsed) is `true`.\nIf the slice is shorter than the number of steps, missing values default\nto zero. If longer, extra values are ignored."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/workflow/task_list.rs",
          "sha256": "200c2bcc0774d5026abd6961394fc6eba11e28118f05a18e1abcc10de80de1f3",
          "artifactSha256": "981c94fbe7bb6264f9ce4ba64902a3e8a511407d64e23726b0943df89aebc39a",
          "url": "/reference/source/harness-tui-kit/src/components/workflow/task_list.rs.txt",
          "declarations": [
            {
              "name": "::TaskListState",
              "line": 78,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct TaskListState {\n\n}",
              "documentation": "Mutable state for [`TaskList`], persists across frames.\n\nTracks the selected row index, scroll offset, and which parent tasks\nhave their children collapsed.\n\n# Examples\n\n```\nuse harness_tui_kit::components::workflow::task_list::TaskListState;\n\nlet mut state = TaskListState::default();\nstate.select_next(3);\nassert_eq!(state.selected_index(), 1);\nstate.select_prev();\nassert_eq!(state.selected_index(), 0);\n```"
            },
            {
              "name": "::TaskListState::select_next",
              "line": 91,
              "signature": "pub fn select_next(&mut self, total_visible: usize);",
              "documentation": "Move selection down by one position, clamped to the total visible row count.\n\n`total_visible` is the number of visible (flattened, not collapsed) rows."
            },
            {
              "name": "::TaskListState::select_prev",
              "line": 102,
              "signature": "pub fn select_prev(&mut self);",
              "documentation": "Move selection up by one position."
            },
            {
              "name": "::TaskListState::toggle_collapse",
              "line": 109,
              "signature": "pub fn toggle_collapse(&mut self, id: impl AsRef<str>);",
              "documentation": "Toggle whether a task's children are collapsed.\n\nIf the task is currently expanded, it becomes collapsed and vice versa."
            },
            {
              "name": "::TaskListState::selected_index",
              "line": 120,
              "signature": "#[must_use]\npub fn selected_index(&self) -> usize;",
              "documentation": "Returns the currently selected row index."
            },
            {
              "name": "::TaskListState::scroll_up",
              "line": 125,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll the view up by one row."
            },
            {
              "name": "::TaskListState::scroll_down",
              "line": 130,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll the view down by one row."
            },
            {
              "name": "::TaskListState::reset",
              "line": 135,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset all state to defaults."
            },
            {
              "name": "::TaskList",
              "line": 198,
              "signature": "#[derive(Debug, Clone)]\npub struct TaskList<'a> {\n\n}",
              "documentation": "Vertical checklist of [`TaskItem`] entries with status icons and progress.\n\nSupports hierarchical display via sub-tasks, keyboard navigation, collapsible\nsections, and inline progress bars. Each row shows a status-colored icon,\nthe task label, and an optional progress bar for tasks with non-zero progress.\n\n# Layout\n\n```text\n\u25cf Build project\n  \u25ce Compile          [\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591] 50%\n  \u25cb Link\n\u2715 Run tests\n\u25cb Deploy\n```\n\n# Examples\n\n```\nuse harness_tui_kit::components::workflow::task_list::{TaskList, TaskListState};\nuse harness_tui_kit::{TaskItem, TaskStatus, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet theme = Theme::dark();\nlet tasks = vec![\n    TaskItem::new(\"t-1\", \"Build\").with_status(TaskStatus::Complete),\n];\nlet mut state = TaskListState::default();\nlet area = Rect::new(0, 0, 30, 5);\nlet mut buf = Buffer::empty(area);\nTaskList::new(&tasks).theme(&theme).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::TaskList<'a>::new",
              "line": 210,
              "signature": "#[must_use]\npub fn new(items: &'a [TaskItem]) -> Self;",
              "documentation": "Create a new task list with the given items."
            },
            {
              "name": "::TaskList<'a>::theme",
              "line": 220,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern)."
            },
            {
              "name": "::TaskList<'a>::show_progress",
              "line": 227,
              "signature": "#[must_use]\npub fn show_progress(mut self, show: bool) -> Self;",
              "documentation": "Set whether progress bars are shown (builder pattern)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/workflow/workflow_dag.rs",
          "sha256": "6cfadc052607062db896de278bb5097c5cf811c4a7d604c4ff4950d28e0b22a2",
          "artifactSha256": "5da87b6dea6ddd022ff1d9f370ef562116180769bd048803c518a1e74571085a",
          "url": "/reference/source/harness-tui-kit/src/components/workflow/workflow_dag.rs.txt",
          "declarations": [
            {
              "name": "::WorkflowDAGState",
              "line": 87,
              "signature": "#[derive(Debug, Clone, Default)]\npub struct WorkflowDAGState {\n\n}",
              "documentation": "Mutable state for [`WorkflowDAG`], persists across frames.\n\nTracks horizontal and vertical scroll offsets for panning through\nlarge DAGs that exceed the visible area.\n\n# Examples\n\n```\nuse harness_tui_kit::components::workflow::workflow_dag::WorkflowDAGState;\n\nlet mut state = WorkflowDAGState::default();\nstate.scroll_right();\nassert_eq!(state.scroll_x(), 1);\nstate.scroll_down();\nassert_eq!(state.scroll_y(), 1);\nstate.reset();\nassert_eq!(state.scroll_x(), 0);\nassert_eq!(state.scroll_y(), 0);\n```"
            },
            {
              "name": "::WorkflowDAGState::scroll_left",
              "line": 96,
              "signature": "pub fn scroll_left(&mut self);",
              "documentation": "Scroll left by one column."
            },
            {
              "name": "::WorkflowDAGState::scroll_right",
              "line": 101,
              "signature": "pub fn scroll_right(&mut self);",
              "documentation": "Scroll right by one column."
            },
            {
              "name": "::WorkflowDAGState::scroll_up",
              "line": 106,
              "signature": "pub fn scroll_up(&mut self);",
              "documentation": "Scroll up by one row."
            },
            {
              "name": "::WorkflowDAGState::scroll_down",
              "line": 111,
              "signature": "pub fn scroll_down(&mut self);",
              "documentation": "Scroll down by one row."
            },
            {
              "name": "::WorkflowDAGState::reset",
              "line": 116,
              "signature": "pub fn reset(&mut self);",
              "documentation": "Reset scroll offsets to origin."
            },
            {
              "name": "::WorkflowDAGState::scroll_x",
              "line": 122,
              "signature": "#[must_use]\npub fn scroll_x(&self) -> usize;",
              "documentation": "Returns the current horizontal scroll offset."
            },
            {
              "name": "::WorkflowDAGState::scroll_y",
              "line": 128,
              "signature": "#[must_use]\npub fn scroll_y(&self) -> usize;",
              "documentation": "Returns the current vertical scroll offset."
            },
            {
              "name": "::WorkflowDAG",
              "line": 174,
              "signature": "#[derive(Debug, Clone)]\npub struct WorkflowDAG<'a> {\n\n}",
              "documentation": "Directed acyclic graph widget for workflow visualization.\n\nRenders workflow nodes in columns organized by topological layer (left-to-right),\nconnected by horizontal edge lines. The layout is computed each frame from the\nprovided nodes and edges using Kahn's algorithm for topological ordering.\n\n# Layout Algorithm\n\n1. Nodes with no incoming edges are assigned to layer 0.\n2. Each subsequent layer contains nodes whose dependencies are all in prior layers.\n3. Within each layer, nodes are stacked vertically.\n4. Edges are drawn as horizontal `\u2500` connectors between the source node's right\n   side and the target node's left side.\n\n# Scrolling\n\nWhen the total DAG dimensions exceed the visible area, the widget supports\nhorizontal and vertical scrolling via [`WorkflowDAGState`].\n\n# Examples\n\n```\nuse harness_tui_kit::components::workflow::workflow_dag::{WorkflowDAG, WorkflowDAGState};\nuse harness_tui_kit::{WorkflowNodeInfo, WorkflowNodeKind, WorkflowEdge, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::StatefulWidget;\n\nlet nodes = vec![\n    WorkflowNodeInfo::new(\"a\", \"Start\", WorkflowNodeKind::Agent),\n    WorkflowNodeInfo::new(\"b\", \"End\", WorkflowNodeKind::Tool),\n];\nlet edges = vec![WorkflowEdge::new(\"a\", \"b\")];\nlet mut state = WorkflowDAGState::default();\nlet area = Rect::new(0, 0, 30, 5);\nlet mut buf = Buffer::empty(area);\nWorkflowDAG::new(&nodes, &edges).render(area, &mut buf, &mut state);\n```"
            },
            {
              "name": "::WorkflowDAG<'a>::new",
              "line": 190,
              "signature": "#[must_use]\npub fn new(nodes: &'a [WorkflowNodeInfo], edges: &'a [WorkflowEdge]) -> Self;",
              "documentation": "Create a new DAG widget with the given nodes and edges."
            },
            {
              "name": "::WorkflowDAG<'a>::theme",
              "line": 202,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern)."
            },
            {
              "name": "::WorkflowDAG<'a>::node_width",
              "line": 211,
              "signature": "#[must_use]\npub fn node_width(mut self, width: u16) -> Self;",
              "documentation": "Set the node cell width in columns (builder pattern).\n\nDefaults to 10. Minimum effective value is 3."
            },
            {
              "name": "::WorkflowDAG<'a>::node_height",
              "line": 220,
              "signature": "#[must_use]\npub fn node_height(mut self, height: u16) -> Self;",
              "documentation": "Set the node cell height in rows (builder pattern).\n\nDefaults to 3. Minimum effective value is 1."
            },
            {
              "name": "::compute_layers",
              "line": 578,
              "signature": "#[must_use]\npub fn compute_layers(nodes: &[WorkflowNodeInfo], edges: &[WorkflowEdge]) -> Vec<Vec<usize>>;",
              "documentation": "Compute topological layers from a set of nodes and edges.\n\nThis is the same algorithm used internally by [`WorkflowDAG`] for layout.\nExposed for testing and advanced layout customization.\n\nReturns a `Vec<Vec<usize>>` where each inner `Vec` contains node indices\nbelonging to that layer (layer 0 = no incoming edges)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/components/workflow/workflow_node.rs",
          "sha256": "bbdf2583133a43cc455e942e687f05c11562384f088d52488c5cdd776e48d360",
          "artifactSha256": "ef3ecb9829b9c8de035b8d70137615d07b3cfb7b365a2cdd2aa56f1a692ca7f3",
          "url": "/reference/source/harness-tui-kit/src/components/workflow/workflow_node.rs.txt",
          "declarations": [
            {
              "name": "::WorkflowNode",
              "line": 101,
              "signature": "#[derive(Debug, Clone)]\npub struct WorkflowNode<'a> {\n\n}",
              "documentation": "Widget rendering a single workflow DAG node.\n\nDisplays a kind-specific icon and the node label, optionally inside a border\nwhose color reflects the node's [`TaskStatus`]. In compact mode (one row, no\nborder), the node renders as `[icon] label`. In normal mode (three or more\nrows), the node renders inside a light box-drawing border.\n\n# Layout\n\n**Compact (1 row):\n```text\nT Build\n```\n\n**Normal (3+ rows):\n```text\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 T Build  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n# Examples\n\n```\nuse harness_tui_kit::components::workflow::workflow_node::WorkflowNode;\nuse harness_tui_kit::{WorkflowNodeInfo, WorkflowNodeKind, TaskStatus, Theme};\nuse ratatui::layout::Rect;\nuse ratatui::buffer::Buffer;\nuse ratatui::widgets::Widget;\n\nlet node = WorkflowNodeInfo::new(\"n-1\", \"Review\", WorkflowNodeKind::Agent)\n    .with_status(TaskStatus::Complete);\nlet area = Rect::new(0, 0, 14, 3);\nlet mut buf = Buffer::empty(area);\nWorkflowNode::new(&node).render(area, &mut buf);\n```"
            },
            {
              "name": "::WorkflowNode<'a>::new",
              "line": 113,
              "signature": "#[must_use]\npub fn new(info: &'a WorkflowNodeInfo) -> Self;",
              "documentation": "Create a new workflow node widget."
            },
            {
              "name": "::WorkflowNode<'a>::theme",
              "line": 123,
              "signature": "#[must_use]\npub fn theme(mut self, theme: &'a Theme) -> Self;",
              "documentation": "Set the theme (builder pattern)."
            },
            {
              "name": "::WorkflowNode<'a>::compact",
              "line": 133,
              "signature": "#[must_use]\npub fn compact(mut self, compact: bool) -> Self;",
              "documentation": "Set compact mode (builder pattern).\n\nWhen `true`, the node renders as a single row without a border.\nWhen `false` (default), the node renders with a box-drawing border."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/effects.rs",
          "sha256": "62fe1acb5fd9dedbd00f51a443dc9707340b09bccdadc45153d8b921fa03963b",
          "artifactSha256": "4491c2dab528cdefcad7427d50c87882b61fa2c0694f68c5eba7348f2e58ce73",
          "url": "/reference/source/harness-tui-kit/src/effects.rs.txt",
          "declarations": [
            {
              "name": "::KitEffect",
              "line": 26,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]\npub enum KitEffect {\n    // \u2500\u2500\u2500 Chat Effects \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /// New message slides up and fades in (250ms).\n    MessageAppear,\n    /// Blinking cursor at end of streaming text (500ms cycle).\n    StreamingCursor,\n    /// Tool call card expands (300ms).\n    ToolCallExpand,\n    /// Tool call card collapses (200ms).\n    ToolCallCollapse,\n    /// Code block copy flash (100ms).\n    CodeCopyFlash,\n\n    // \u2500\u2500\u2500 Agent Effects \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /// Active agent status dot pulses (speed from theme).\n    StatusPulse,\n    /// Agent card glows briefly on status change (400ms).\n    StatusTransition,\n    /// Agent comes online \u2014 brief green glow (500ms).\n    AgentOnline,\n    /// Agent errors \u2014 brief red flash (300ms).\n    AgentError,\n    /// Agent terminated \u2014 fade to dim (600ms).\n    AgentTerminated,\n\n    // \u2500\u2500\u2500 System Effects \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /// Cross-fade between screens (300ms).\n    ScreenTransition,\n    /// Toast slides in from edge (200ms).\n    NotificationSlideIn,\n    /// Toast fades out (300ms).\n    NotificationFadeOut,\n    /// Modal background dims (200ms).\n    ModalDim,\n    /// Modal content fades in (250ms).\n    ModalAppear,\n    /// Command palette drops down (150ms).\n    PaletteOpen,\n\n    // \u2500\u2500\u2500 Ambient Effects \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /// Subtle breathing when system is idle (3s cycle).\n    IdleBreathe,\n    /// Ripple from an active element (400ms).\n    ActivityRipple,\n\n    // \u2500\u2500\u2500 Celebration Effects \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n    /// Brief green flash on approval.\n    ApprovalGranted,\n    /// Brief red flash on denial.\n    ApprovalDenied,\n}",
              "documentation": "Named effect presets for Agent TUI Kit components.\n\nEach preset encapsulates a tachyonfx effect configuration tuned for\na specific UI interaction. Use [`KitEffect::to_effect`] to convert\nto a concrete [`tachyonfx::Effect`]."
            },
            {
              "name": "::KitEffect::to_effect",
              "line": 84,
              "signature": "#[must_use]\npub fn to_effect(&self, theme: &Theme) -> Effect;",
              "documentation": "Convert this preset to a tachyonfx [`Effect`] parameterized by the given theme.\n\nIf effects are disabled in the theme (`theme.effects_enabled == false`),\nreturns a no-op effect that completes immediately."
            },
            {
              "name": "::KitEffect::base_duration_ms",
              "line": 143,
              "signature": "#[must_use]\npub fn base_duration_ms(&self) -> u32;",
              "documentation": "Duration of this effect in milliseconds.\n\nReturns the base duration before any theme-based adjustments."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/lib.rs",
          "sha256": "e50cc92fc82cd94824b628145ae9e28c906ee02446709834296c6a11d770cb9a",
          "artifactSha256": "f6b2c9951a601a00b8da15bf3819212ac554668f0c68abeb12a37b03503f35fb",
          "url": "/reference/source/harness-tui-kit/src/lib.rs.txt",
          "declarations": [
            {
              "name": "components",
              "line": 25,
              "signature": "pub mod components;",
              "documentation": "# Agent TUI Kit\n\nProduction-ready TUI components for building agent-interaction terminal interfaces.\n\nAgent TUI Kit provides 44 themed, animated components built on [Ratatui](https://ratatui.rs/).\nEvery component is a standard `StatefulWidget` or `Widget` that composes through\nstandard Ratatui layout primitives.\n\n## Quick Start\n\n```rust,no_run\nuse harness_tui_kit::{Theme, ChatMessage, Role};\n\nlet theme = Theme::dark();\nlet msg = ChatMessage::user(\"Hello, agent!\");\n```\n\n## Design Philosophy\n\n- **Beautiful by default** \u2014 Ships with a dark theme that looks professional out of the box.\n- **Animated by nature** \u2014 Components use tachyonfx effects for state transitions.\n- **Framework-agnostic** \u2014 Knows nothing about LLMs, agents, or orchestration.\n- **Composable** \u2014 Standard Ratatui `Widget` / `StatefulWidget` implementations."
            },
            {
              "name": "util",
              "line": 29,
              "signature": "pub mod util;",
              "documentation": ""
            },
            {
              "name": "pub use effects::KitEffect;",
              "line": 31,
              "signature": "pub use effects::KitEffect;",
              "documentation": ""
            },
            {
              "name": "pub use theme::{Theme, ThemeOverrides, DEFAULT_THEME};",
              "line": 32,
              "signature": "pub use theme::{Theme, ThemeOverrides, DEFAULT_THEME};",
              "documentation": ""
            },
            {
              "name": "pub use types::{\n    AgentInfo, AgentStatus, ApprovalAction, ApprovalRequest, ChatMessage, CommandHint, CostEntry,\n    DecisionOption, DiffLine, DiffLineKind, KeyShortcut, LatencySnapshot, LogEntry, LogLevel,\n    PaletteItem, PermissionCategory, PermissionDecision, PermissionRequest, ProposalInfo,\n    ProposalKind, ProposalStatus, RiskLevel, Role, Severity, TaskItem, TaskStatus, ToolCallInfo,\n    ToolCallStatus, TransactionEntry, TreasuryInfo, VoteChoice, WorkflowEdge, WorkflowNodeInfo,\n    WorkflowNodeKind,\n};",
              "line": 33,
              "signature": "pub use types::{\n    AgentInfo, AgentStatus, ApprovalAction, ApprovalRequest, ChatMessage, CommandHint, CostEntry,\n    DecisionOption, DiffLine, DiffLineKind, KeyShortcut, LatencySnapshot, LogEntry, LogLevel,\n    PaletteItem, PermissionCategory, PermissionDecision, PermissionRequest, ProposalInfo,\n    ProposalKind, ProposalStatus, RiskLevel, Role, Severity, TaskItem, TaskStatus, ToolCallInfo,\n    ToolCallStatus, TransactionEntry, TreasuryInfo, VoteChoice, WorkflowEdge, WorkflowNodeInfo,\n    WorkflowNodeKind,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::agent::{\n    AgentAvatar, AgentCard, AgentCardState, AgentList, AgentListState, AgentPanel, AgentPanelState,\n    AgentStatusDot, AvatarSize, MultiAgentHeader, MultiAgentHeaderState,\n};",
              "line": 43,
              "signature": "pub use components::agent::{\n    AgentAvatar, AgentCard, AgentCardState, AgentList, AgentListState, AgentPanel, AgentPanelState,\n    AgentStatusDot, AvatarSize, MultiAgentHeader, MultiAgentHeaderState,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::chat::{\n    ChangeKind, ChatBubble, ChatBubbleState, ChatTimeline, ChatTimelineState, CodeBlock,\n    CodeBlockState, DiffView, DiffViewState, DocumentPreviewPane, DocumentPreviewState,\n    FileDisplay, FileDisplayState, InlineDiffCard, InputBar, InputBarState, MarkdownRenderer,\n    MarkdownStreamCollector, PageStyle, StreamingText, StreamingTextState, ToolCallCard,\n    ToolCallCardStatus, ToolCallDisplay, ToolCallState,\n};",
              "line": 47,
              "signature": "pub use components::chat::{\n    ChangeKind, ChatBubble, ChatBubbleState, ChatTimeline, ChatTimelineState, CodeBlock,\n    CodeBlockState, DiffView, DiffViewState, DocumentPreviewPane, DocumentPreviewState,\n    FileDisplay, FileDisplayState, InlineDiffCard, InputBar, InputBarState, MarkdownRenderer,\n    MarkdownStreamCollector, PageStyle, StreamingText, StreamingTextState, ToolCallCard,\n    ToolCallCardStatus, ToolCallDisplay, ToolCallState,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::governance::{\n    ConstitutionView, ConstitutionViewState, ProposalCard, ProposalCardState, TreasuryDisplay,\n    VotingPanel, VotingPanelState,\n};",
              "line": 54,
              "signature": "pub use components::governance::{\n    ConstitutionView, ConstitutionViewState, ProposalCard, ProposalCardState, TreasuryDisplay,\n    VotingPanel, VotingPanelState,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::harness::{\n    AttributionTable, AttributionTableRow, AttributionTaskOutcomeBadge, ChangeManifestView,\n    HarnessComponentRow, HarnessComponentStatus, HarnessComponentTree, HarnessComponentTreeState,\n    ManifestEntryView, ManifestVerdictBadge,\n};",
              "line": 58,
              "signature": "pub use components::harness::{\n    AttributionTable, AttributionTableRow, AttributionTaskOutcomeBadge, ChangeManifestView,\n    HarnessComponentRow, HarnessComponentStatus, HarnessComponentTree, HarnessComponentTreeState,\n    ManifestEntryView, ManifestVerdictBadge,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::history::{\n    ApprovalCell, ApprovalState, AssistantCell, DiffCell, ExecCell, ExecOutcome, HistoryCell,\n    HistoryView, HistoryViewState, SystemCell, SystemSeverity, ToolCell, ToolCellOutcome, UserCell,\n};",
              "line": 63,
              "signature": "pub use components::history::{\n    ApprovalCell, ApprovalState, AssistantCell, DiffCell, ExecCell, ExecOutcome, HistoryCell,\n    HistoryView, HistoryViewState, SystemCell, SystemSeverity, ToolCell, ToolCellOutcome, UserCell,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::hitl::{\n    ApprovalChooser, ApprovalChooserAction, ApprovalChooserState, ApprovalDialog,\n    ApprovalDialogState, ApprovalQueue, ApprovalQueueState, ConfirmButton, ConfirmationPrompt,\n    ConfirmationPromptState, DecisionPanel, DecisionPanelState, PermissionBanner, PermissionPrompt,\n    PermissionPromptState,\n};",
              "line": 67,
              "signature": "pub use components::hitl::{\n    ApprovalChooser, ApprovalChooserAction, ApprovalChooserState, ApprovalDialog,\n    ApprovalDialogState, ApprovalQueue, ApprovalQueueState, ConfirmButton, ConfirmationPrompt,\n    ConfirmationPromptState, DecisionPanel, DecisionPanelState, PermissionBanner, PermissionPrompt,\n    PermissionPromptState,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::metrics::{\n    CostTracker, LatencyDisplay, MetricBarItem, MetricCard, MetricsBar, TokenMeter,\n};",
              "line": 73,
              "signature": "pub use components::metrics::{\n    CostTracker, LatencyDisplay, MetricBarItem, MetricCard, MetricsBar, TokenMeter,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::system::{\n    custom_logo::CLAUSEN_LOGO_ROWS, fmt_elapsed_compact, AppShell, AppShellState, Banner,\n    BlockLogo, CollapseState, CommandPalette, CommandPaletteState, CustomLogo, FocusCard,\n    GoalDisplay, GoalStep, GoalStepStatus, HintBar, HintItem, KeyboardHelp, KeyboardHelpState,\n    LogViewer, LogViewerState, Modal, ModalButton, ModalState, ModelCapabilities, ModelPicker,\n    ModelPickerRow, ModelPickerState, NotificationToast, NotificationToastState, PagerOverlay,\n    PagerOverlayState, PendingSelection, ResumePicker, ResumePickerRow, ResumePickerState,\n    SettingsPalette, SettingsPaletteItem, SettingsPalettePage, SettingsPaletteState, ShellPanel,\n    Shimmer, ShimmerState, SlashDropdown, SlashDropdownItem, SlashDropdownState, Spinner,\n    SpinnerStyle, SplitDirection, SplitPane, SplitPaneState, StatusBar, StatusFooter,\n    StatusFooterIndicator, StatusIndicator, StatusIndicatorState, StatusKind, TabItem, Tabs,\n    TabsState, ThemePicker, ThemePickerRow, ThemePickerState, ThinkingAnimation,\n    ThinkingAnimationState, ThinkingIndicator, ToastMessage, WelcomeConfig, WelcomeScreen,\n    BLOCK_LOGO_GLYPH_WIDTH, BLOCK_LOGO_HEIGHT, BLOCK_LOGO_SPACING, SHIMMER_DEFAULT_WINDOW,\n    THINKING_ANIMATION_DEFAULT_CHARSET, THINKING_ANIMATION_DEFAULT_WIDTH,\n};",
              "line": 76,
              "signature": "pub use components::system::{\n    custom_logo::CLAUSEN_LOGO_ROWS, fmt_elapsed_compact, AppShell, AppShellState, Banner,\n    BlockLogo, CollapseState, CommandPalette, CommandPaletteState, CustomLogo, FocusCard,\n    GoalDisplay, GoalStep, GoalStepStatus, HintBar, HintItem, KeyboardHelp, KeyboardHelpState,\n    LogViewer, LogViewerState, Modal, ModalButton, ModalState, ModelCapabilities, ModelPicker,\n    ModelPickerRow, ModelPickerState, NotificationToast, NotificationToastState, PagerOverlay,\n    PagerOverlayState, PendingSelection, ResumePicker, ResumePickerRow, ResumePickerState,\n    SettingsPalette, SettingsPaletteItem, SettingsPalettePage, SettingsPaletteState, ShellPanel,\n    Shimmer, ShimmerState, SlashDropdown, SlashDropdownItem, SlashDropdownState, Spinner,\n    SpinnerStyle, SplitDirection, SplitPane, SplitPaneState, StatusBar, StatusFooter,\n    StatusFooterIndicator, StatusIndicator, StatusIndicatorState, StatusKind, TabItem, Tabs,\n    TabsState, ThemePicker, ThemePickerRow, ThemePickerState, ThinkingAnimation,\n    ThinkingAnimationState, ThinkingIndicator, ToastMessage, WelcomeConfig, WelcomeScreen,\n    BLOCK_LOGO_GLYPH_WIDTH, BLOCK_LOGO_HEIGHT, BLOCK_LOGO_SPACING, SHIMMER_DEFAULT_WINDOW,\n    THINKING_ANIMATION_DEFAULT_CHARSET, THINKING_ANIMATION_DEFAULT_WIDTH,\n};",
              "documentation": ""
            },
            {
              "name": "pub use components::workflow::{\n    ProgressTimeline, TaskList, TaskListState, WorkflowDAG, WorkflowDAGState, WorkflowNode,\n};",
              "line": 92,
              "signature": "pub use components::workflow::{\n    ProgressTimeline, TaskList, TaskListState, WorkflowDAG, WorkflowDAGState, WorkflowNode,\n};",
              "documentation": ""
            },
            {
              "name": "pub use util::live_wrap::{display_width, wrap_unicode};",
              "line": 95,
              "signature": "pub use util::live_wrap::{display_width, wrap_unicode};",
              "documentation": ""
            },
            {
              "name": "pub use util::unified_diff::{parse_unified_diff, DiffFile};",
              "line": 96,
              "signature": "pub use util::unified_diff::{parse_unified_diff, DiffFile};",
              "documentation": ""
            },
            {
              "name": "pub use util::word_diff::{pair_changed_lines, word_diff, ChangedPair, WordDiff};",
              "line": 97,
              "signature": "pub use util::word_diff::{pair_changed_lines, word_diff, ChangedPair, WordDiff};",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/theme.rs",
          "sha256": "181ec5910a301a0736791a335a91e2de89ba0795415f060add742a9db8476530",
          "artifactSha256": "f9b9ad058e18ab3dfdcde4d90beb90c1eb313cd199982e5667ffa0abaf3e9c6a",
          "url": "/reference/source/harness-tui-kit/src/theme.rs.txt",
          "declarations": [
            {
              "name": "::DEFAULT_THEME",
              "line": 40,
              "signature": "pub static DEFAULT_THEME: LazyLock<Theme>;",
              "documentation": "Global default theme instance.\n\nInitialized to [`Theme::dark()`] on first access. Use this when you need a\n`&'static Theme` reference for components that require a default."
            },
            {
              "name": "::Theme",
              "line": 69,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct Theme {\n// \u2500\u2500\u2500 Surface Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Base background color for the entire terminal area.\n\npub bg_base: Color,\n/// Slightly elevated surface for cards and panels.\n\npub bg_surface: Color,\n/// More prominently elevated surface for floating elements.\n\npub bg_elevated: Color,\n/// Semi-transparent overlay backdrop for modals and dialogs.\n\npub bg_overlay: Color,\n// \u2500\u2500\u2500 Text Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Primary text color for body content and headings.\n\npub fg_primary: Color,\n/// Secondary text color for labels and less important content.\n\npub fg_secondary: Color,\n/// Muted text for hints, timestamps, and metadata.\n\npub fg_muted: Color,\n/// Disabled text for inactive or unavailable elements.\n\npub fg_disabled: Color,\n// \u2500\u2500\u2500 Semantic Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Accent color for interactive elements, links, and highlights.\n\npub accent: Color,\n/// Success state indicator (confirmations, completions).\n\npub success: Color,\n/// Warning state indicator (caution, degraded state).\n\npub warning: Color,\n/// Error state indicator (failures, critical issues).\n\npub error: Color,\n/// Informational state indicator (notices, tips).\n\npub info: Color,\n// \u2500\u2500\u2500 Agent Status Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Agent is online and ready to accept work.\n\npub agent_online: Color,\n/// Agent is actively working on a task.\n\npub agent_working: Color,\n/// Agent is processing or reasoning (thinking state).\n\npub agent_thinking: Color,\n/// Agent is idle with no current task.\n\npub agent_idle: Color,\n/// Agent is waiting for external input or approval.\n\npub agent_waiting: Color,\n/// Agent has encountered an error condition.\n\npub agent_error: Color,\n/// Agent has been terminated or shut down.\n\npub agent_terminated: Color,\n/// Agent is offline and unreachable.\n\npub agent_offline: Color,\n// \u2500\u2500\u2500 Chat Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Color for user messages in chat.\n\npub chat_user: Color,\n/// Color for agent/assistant messages in chat.\n\npub chat_agent: Color,\n/// Color for system messages in chat.\n\npub chat_system: Color,\n/// Color for tool call/result messages in chat.\n\npub chat_tool: Color,\n// \u2500\u2500\u2500 Border Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Default border color for unfocused elements.\n\npub border_default: Color,\n/// Border color for focused/selected elements.\n\npub border_focus: Color,\n/// Border color for active/interacting elements.\n\npub border_active: Color,\n// \u2500\u2500\u2500 Effect Parameters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Whether tachyonfx effects are enabled globally.\n\npub effects_enabled: bool,\n/// Color used for glow and highlight effects.\n\npub effect_glow: Color,\n/// Pulse animation speed in cycles per second.\n\npub effect_pulse_speed: f32,\n/// Streaming text speed in characters per second.\n\npub effect_streaming_cps: f32,\n/// Fade transition duration in milliseconds.\n\npub effect_fade_ms: u32\n}",
              "documentation": "Complete theme configuration for Agent TUI Kit.\n\nContains 35 design tokens covering every visual aspect of the component library.\nAll color fields use [`ratatui::style::Color`] and support RGB, indexed, and named\ncolor variants. Effect parameters control animation speed and behavior.\n\n# Built-in Themes\n\n- [`Theme::dark()`] \u2014 Cool gray surfaces, white text, blue accent. Default.\n- [`Theme::light()`] \u2014 Warm white surfaces, dark text, blue accent.\n- [`Theme::midnight()`] \u2014 Deep navy surfaces, silver text, cyan accent.\n\n# Custom Themes\n\nUse [`Theme::custom`] to create a theme by applying [`ThemeOverrides`] to a base theme.\n\n# Examples\n\n```\nuse harness_tui_kit::Theme;\n\nlet theme = Theme::dark();\n// Access color tokens directly\nlet bg = theme.bg_base;\nlet accent = theme.accent;\n```"
            },
            {
              "name": "::Theme::dark",
              "line": 164,
              "signature": "#[must_use]\npub fn dark() -> Self;",
              "documentation": "Create the default dark theme.\n\nCool gray surfaces with white text and a blue accent. This is the recommended\ndefault for most terminal environments.\n\n# Examples\n\n```\nuse harness_tui_kit::Theme;\nlet theme = Theme::dark();\n```"
            },
            {
              "name": "::Theme::light",
              "line": 227,
              "signature": "#[must_use]\npub fn light() -> Self;",
              "documentation": "Create a light theme for bright terminal environments.\n\nWarm white surfaces with dark text and a blue accent. Suitable for terminals\nwith light backgrounds.\n\n# Examples\n\n```\nuse harness_tui_kit::Theme;\nlet theme = Theme::light();\n```"
            },
            {
              "name": "::Theme::midnight",
              "line": 290,
              "signature": "#[must_use]\npub fn midnight() -> Self;",
              "documentation": "Create a midnight theme with deep navy tones.\n\nDeep navy surfaces with silver text and a cyan accent. Designed for\nextended coding sessions with minimal eye strain.\n\n# Examples\n\n```\nuse harness_tui_kit::Theme;\nlet theme = Theme::midnight();\n```"
            },
            {
              "name": "::Theme::claude",
              "line": 359,
              "signature": "#[must_use]\npub fn claude() -> Self;",
              "documentation": "The recommended modern theme \u2014 a sophisticated warm-charcoal\npalette modeled on Claude Code's chat surface. Backgrounds are\nnear-black with a faint brown undertone, the accent is a soft\npeach (rather than the saturated blue used by [`Theme::dark`])\nso streamed text and emphasis read as warm rather than cold.\nBorders are barely there, surfaces are flat, and effects are\ndialed back so the eye lands on content, not chrome.\n\nUse this for new applications that want the polished\n\"AI assistant\" aesthetic out of the box.\n\n# Examples\n\n```\nuse harness_tui_kit::Theme;\nlet theme = Theme::claude();\n```"
            },
            {
              "name": "::Theme::monochrome",
              "line": 423,
              "signature": "#[must_use]\npub fn monochrome() -> Self;",
              "documentation": "Pure monochrome \u2014 every semantic colour collapses to a shade\nof grey on a black surface. Designed for the Clausen TUI:\nemphasis is conveyed by `Modifier::BOLD` / `REVERSED`\n`ITALIC`, not hue.\n\n# Examples\n\n```\nuse harness_tui_kit::Theme;\nlet theme = Theme::monochrome();\n```"
            },
            {
              "name": "::Theme::custom",
              "line": 493,
              "signature": "#[must_use]\npub fn custom(base: Self, overrides: &ThemeOverrides) -> Self;",
              "documentation": "Create a custom theme by applying overrides to a base theme.\n\nAny field set to `Some(...)` in the overrides replaces the corresponding\nfield in the base theme. Fields left as `None` retain the base value.\n\n# Examples\n\n```\nuse harness_tui_kit::{Theme, ThemeOverrides};\nuse ratatui::style::Color;\n\nlet overrides = ThemeOverrides {\n    accent: Some(Color::Rgb(255, 0, 128)),\n    effects_enabled: Some(false),\n    ..ThemeOverrides::default()\n};\nlet theme = Theme::custom(Theme::dark(), &overrides);\nassert_eq!(theme.accent, Color::Rgb(255, 0, 128));\nassert!(!theme.effects_enabled);\n```"
            },
            {
              "name": "::Theme::resolve_color",
              "line": 565,
              "signature": "#[must_use]\npub fn resolve_color(&self, color: Color) -> Color;",
              "documentation": "Resolve a color for terminals that may not support true-color (RGB).\n\nIf the color is [`Color::Rgb`], converts it to the nearest ANSI 256-color\nindex via [`crate::util::color::rgb_to_ansi256`]. All other color variants\nare returned unchanged.\n\n# Examples\n\n```\nuse harness_tui_kit::Theme;\nuse ratatui::style::Color;\n\nlet theme = Theme::dark();\nlet resolved = theme.resolve_color(Color::Rgb(100, 140, 255));\n// Returns Color::Indexed(69) or similar 256-color approximation\n```"
            },
            {
              "name": "::Theme::role_color",
              "line": 590,
              "signature": "#[must_use]\npub fn role_color(&self, role: &Role) -> Color;",
              "documentation": "Get the theme color associated with a chat message [`Role`].\n\nMaps each role to its corresponding chat color token:\n- [`Role::User`] -> [`Theme::chat_user`]\n- [`Role::Agent`] -> [`Theme::chat_agent`]\n- [`Role::System`] -> [`Theme::chat_system`]\n- [`Role::Tool`] -> [`Theme::chat_tool`]\n\n# Examples\n\n```\nuse harness_tui_kit::{Theme, Role};\n\nlet theme = Theme::dark();\nlet color = theme.role_color(&Role::User);\nassert_eq!(color, theme.chat_user);\n```"
            },
            {
              "name": "::Theme::agent_status_color",
              "line": 613,
              "signature": "#[must_use]\npub fn agent_status_color(&self, status: &AgentStatus) -> Color;",
              "documentation": "Get the theme color associated with an [`AgentStatus`].\n\nMaps each status variant to its corresponding agent status color token.\n\n# Examples\n\n```\nuse harness_tui_kit::{Theme, AgentStatus};\n\nlet theme = Theme::dark();\nlet color = theme.agent_status_color(&AgentStatus::Online);\nassert_eq!(color, theme.agent_online);\n```"
            },
            {
              "name": "::Theme::severity_color",
              "line": 644,
              "signature": "#[must_use]\npub fn severity_color(&self, severity: &Severity) -> Color;",
              "documentation": "Get the theme color associated with a [`Severity`] level.\n\nMaps each severity to its corresponding semantic color:\n- [`Severity::Success`] -> [`Theme::success`]\n- [`Severity::Info`] -> [`Theme::info`]\n- [`Severity::Warning`] -> [`Theme::warning`]\n- [`Severity::Error`] -> [`Theme::error`]\n\n# Examples\n\n```\nuse harness_tui_kit::{Theme, Severity};\n\nlet theme = Theme::dark();\nlet color = theme.severity_color(&Severity::Error);\nassert_eq!(color, theme.error);\n```"
            },
            {
              "name": "::ThemeOverrides",
              "line": 679,
              "signature": "#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]\npub struct ThemeOverrides {\n// \u2500\u2500\u2500 Surface Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Override for [`Theme::bg_base`].\n\npub bg_base: Option<Color>,\n/// Override for [`Theme::bg_surface`].\n\npub bg_surface: Option<Color>,\n/// Override for [`Theme::bg_elevated`].\n\npub bg_elevated: Option<Color>,\n/// Override for [`Theme::bg_overlay`].\n\npub bg_overlay: Option<Color>,\n// \u2500\u2500\u2500 Text Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Override for [`Theme::fg_primary`].\n\npub fg_primary: Option<Color>,\n/// Override for [`Theme::fg_secondary`].\n\npub fg_secondary: Option<Color>,\n/// Override for [`Theme::fg_muted`].\n\npub fg_muted: Option<Color>,\n/// Override for [`Theme::fg_disabled`].\n\npub fg_disabled: Option<Color>,\n// \u2500\u2500\u2500 Semantic Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Override for [`Theme::accent`].\n\npub accent: Option<Color>,\n/// Override for [`Theme::success`].\n\npub success: Option<Color>,\n/// Override for [`Theme::warning`].\n\npub warning: Option<Color>,\n/// Override for [`Theme::error`].\n\npub error: Option<Color>,\n/// Override for [`Theme::info`].\n\npub info: Option<Color>,\n// \u2500\u2500\u2500 Agent Status Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Override for [`Theme::agent_online`].\n\npub agent_online: Option<Color>,\n/// Override for [`Theme::agent_working`].\n\npub agent_working: Option<Color>,\n/// Override for [`Theme::agent_thinking`].\n\npub agent_thinking: Option<Color>,\n/// Override for [`Theme::agent_idle`].\n\npub agent_idle: Option<Color>,\n/// Override for [`Theme::agent_waiting`].\n\npub agent_waiting: Option<Color>,\n/// Override for [`Theme::agent_error`].\n\npub agent_error: Option<Color>,\n/// Override for [`Theme::agent_terminated`].\n\npub agent_terminated: Option<Color>,\n/// Override for [`Theme::agent_offline`].\n\npub agent_offline: Option<Color>,\n// \u2500\u2500\u2500 Chat Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Override for [`Theme::chat_user`].\n\npub chat_user: Option<Color>,\n/// Override for [`Theme::chat_agent`].\n\npub chat_agent: Option<Color>,\n/// Override for [`Theme::chat_system`].\n\npub chat_system: Option<Color>,\n/// Override for [`Theme::chat_tool`].\n\npub chat_tool: Option<Color>,\n// \u2500\u2500\u2500 Border Colors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Override for [`Theme::border_default`].\n\npub border_default: Option<Color>,\n/// Override for [`Theme::border_focus`].\n\npub border_focus: Option<Color>,\n/// Override for [`Theme::border_active`].\n\npub border_active: Option<Color>,\n// \u2500\u2500\u2500 Effect Parameters \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n/// Override for [`Theme::effects_enabled`].\n\npub effects_enabled: Option<bool>,\n/// Override for [`Theme::effect_glow`].\n\npub effect_glow: Option<Color>,\n/// Override for [`Theme::effect_pulse_speed`].\n\npub effect_pulse_speed: Option<f32>,\n/// Override for [`Theme::effect_streaming_cps`].\n\npub effect_streaming_cps: Option<f32>,\n/// Override for [`Theme::effect_fade_ms`].\n\npub effect_fade_ms: Option<u32>\n}",
              "documentation": "Optional overrides for creating a custom [`Theme`].\n\nEvery field mirrors the corresponding field in [`Theme`] but wrapped in\n[`Option`]. When passed to [`Theme::custom`], only `Some(...)` values\nreplace the base theme's values; `None` fields are left unchanged.\n\n# Examples\n\n```\nuse harness_tui_kit::ThemeOverrides;\nuse ratatui::style::Color;\n\nlet overrides = ThemeOverrides {\n    accent: Some(Color::Rgb(255, 0, 128)),\n    bg_base: Some(Color::Rgb(0, 0, 0)),\n    ..ThemeOverrides::default()\n};\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/types.rs",
          "sha256": "fe451d870e4287bae66a2c90e5a191ceaf3005d40cc9c603d742fe3dd423bfcf",
          "artifactSha256": "b8557e57149e757b1f3a1eeb974638ac0c5ea8acd10917de94770cd9c004bed8",
          "url": "/reference/source/harness-tui-kit/src/types.rs.txt",
          "declarations": [
            {
              "name": "::Role",
              "line": 52,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum Role {\n    /// A human end-user.\n    User,\n    /// An AI agent.\n    Agent,\n    /// A system-generated message (e.g. connection notice, error).\n    System,\n    /// Output from a tool invocation.\n    Tool,\n}",
              "documentation": "The role of a participant in a conversation.\n\nUsed by [`ChatMessage`] and rendering components to determine visual\ntreatment (alignment, color, icon)."
            },
            {
              "name": "::Role::label",
              "line": 73,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this role.\n\n# Examples\n\n```\nuse harness_tui_kit::Role;\nassert_eq!(Role::User.label(), \"User\");\n```"
            },
            {
              "name": "::Role::symbol",
              "line": 91,
              "signature": "#[must_use]\npub const fn symbol(&self) -> &'static str;",
              "documentation": "Single-character symbol for compact displays.\n\n# Examples\n\n```\nuse harness_tui_kit::Role;\nassert_eq!(Role::Agent.symbol(), \"A\");\n```"
            },
            {
              "name": "::AgentStatus",
              "line": 117,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum AgentStatus {\n    /// The agent is connected and ready to accept work.\n    #[default]\n    Online,\n    /// The agent is actively executing a task.\n    Working,\n    /// The agent is reasoning / planning (no tool calls yet).\n    Thinking,\n    /// The agent is connected but has no pending work.\n    Idle,\n    /// The agent is blocked waiting on an external resource or human input.\n    Waiting,\n    /// The agent encountered an error.\n    Error,\n    /// The agent has been permanently shut down.\n    Terminated,\n    /// The agent is disconnected / unreachable.\n    Offline,\n}",
              "documentation": "Lifecycle status of an agent.\n\nComponents such as status dots and agent cards use this to determine colour\nand animation. The default status is [`AgentStatus::Online`]."
            },
            {
              "name": "::AgentStatus::label",
              "line": 147,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this status.\n\n# Examples\n\n```\nuse harness_tui_kit::AgentStatus;\nassert_eq!(AgentStatus::Working.label(), \"Working\");\n```"
            },
            {
              "name": "::AgentStatus::is_active",
              "line": 171,
              "signature": "#[must_use]\npub const fn is_active(&self) -> bool;",
              "documentation": "Returns `true` if the agent is performing work (Working or Thinking).\n\n# Examples\n\n```\nuse harness_tui_kit::AgentStatus;\nassert!(AgentStatus::Working.is_active());\nassert!(AgentStatus::Thinking.is_active());\nassert!(!AgentStatus::Idle.is_active());\n```"
            },
            {
              "name": "::AgentStatus::is_terminal",
              "line": 189,
              "signature": "#[must_use]\npub const fn is_terminal(&self) -> bool;",
              "documentation": "Returns `true` if the agent has reached a final state (Terminated or Offline).\n\nTerminal agents will not transition to other states without external\nintervention (reconnect, restart).\n\n# Examples\n\n```\nuse harness_tui_kit::AgentStatus;\nassert!(AgentStatus::Terminated.is_terminal());\nassert!(AgentStatus::Offline.is_terminal());\nassert!(!AgentStatus::Error.is_terminal());\n```"
            },
            {
              "name": "::ChatMessage",
              "line": 228,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ChatMessage {\n/// Unique identifier for this message (monotonic counter per process).\n\npub id: String,\n/// Role of the message author.\n\npub role: Role,\n/// Display name of the sender.\n\npub sender: String,\n/// Message body (plain text or markdown).\n\npub content: String,\n/// ISO-8601 timestamp string, or empty if not set.\n\npub timestamp: String\n}",
              "documentation": "A single message in a conversation timeline.\n\n`ChatMessage` is the primary data unit for chat components. Each message\ncarries an auto-generated unique `id`, a [`Role`], sender name, content\nbody, and an optional ISO-8601 timestamp.\n\n# Construction\n\nUse the convenience constructors [`ChatMessage::user`], [`ChatMessage::agent`],\n[`ChatMessage::system`], and [`ChatMessage::tool`] for common cases. For full\ncontrol, use [`ChatMessage::new`] followed by builder methods.\n\n# Examples\n\n```\nuse harness_tui_kit::{ChatMessage, Role};\n\nlet msg = ChatMessage::user(\"Hello!\")\n    .with_timestamp(\"2026-02-18T12:00:00Z\");\nassert_eq!(msg.role, Role::User);\nassert_eq!(msg.sender, \"User\");\nassert_eq!(msg.content, \"Hello!\");\n```"
            },
            {
              "name": "::ChatMessage::new",
              "line": 256,
              "signature": "#[must_use]\npub fn new(role: Role, sender: impl AsRef<str>, content: impl AsRef<str>) -> Self;",
              "documentation": "Create a new message with explicit role, sender, and content.\n\nAn auto-incremented numeric ID is assigned. Timestamp defaults to empty.\n\n# Examples\n\n```\nuse harness_tui_kit::{ChatMessage, Role};\n\nlet msg = ChatMessage::new(Role::Agent, \"GPT-4\", \"Thinking...\");\nassert_eq!(msg.role, Role::Agent);\nassert_eq!(msg.sender, \"GPT-4\");\n```"
            },
            {
              "name": "::ChatMessage::user",
              "line": 278,
              "signature": "#[must_use]\npub fn user(content: impl AsRef<str>) -> Self;",
              "documentation": "Create a user message with the default sender name \"User\".\n\n# Examples\n\n```\nuse harness_tui_kit::{ChatMessage, Role};\n\nlet msg = ChatMessage::user(\"How are you?\");\nassert_eq!(msg.role, Role::User);\nassert_eq!(msg.sender, \"User\");\n```"
            },
            {
              "name": "::ChatMessage::agent",
              "line": 294,
              "signature": "#[must_use]\npub fn agent(sender: impl AsRef<str>, content: impl AsRef<str>) -> Self;",
              "documentation": "Create an agent message with the given sender name.\n\n# Examples\n\n```\nuse harness_tui_kit::{ChatMessage, Role};\n\nlet msg = ChatMessage::agent(\"Claude\", \"I'm doing well.\");\nassert_eq!(msg.role, Role::Agent);\nassert_eq!(msg.sender, \"Claude\");\n```"
            },
            {
              "name": "::ChatMessage::system",
              "line": 309,
              "signature": "#[must_use]\npub fn system(content: impl AsRef<str>) -> Self;",
              "documentation": "Create a system message with the default sender name \"System\".\n\n# Examples\n\n```\nuse harness_tui_kit::{ChatMessage, Role};\n\nlet msg = ChatMessage::system(\"Connection established.\");\nassert_eq!(msg.role, Role::System);\n```"
            },
            {
              "name": "::ChatMessage::tool",
              "line": 324,
              "signature": "#[must_use]\npub fn tool(content: impl AsRef<str>) -> Self;",
              "documentation": "Create a tool message with the default sender name \"Tool\".\n\n# Examples\n\n```\nuse harness_tui_kit::{ChatMessage, Role};\n\nlet msg = ChatMessage::tool(\"Result: 42\");\nassert_eq!(msg.role, Role::Tool);\n```"
            },
            {
              "name": "::ChatMessage::with_timestamp",
              "line": 339,
              "signature": "#[must_use]\npub fn with_timestamp(mut self, timestamp: impl AsRef<str>) -> Self;",
              "documentation": "Set the timestamp (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::ChatMessage;\n\nlet msg = ChatMessage::user(\"Hi\").with_timestamp(\"2026-02-18T00:00:00Z\");\nassert_eq!(msg.timestamp, \"2026-02-18T00:00:00Z\");\n```"
            },
            {
              "name": "::ChatMessage::with_id",
              "line": 357,
              "signature": "#[must_use]\npub fn with_id(mut self, id: impl AsRef<str>) -> Self;",
              "documentation": "Override the auto-generated ID (builder pattern).\n\nUseful when reconstructing messages from a persistence layer.\n\n# Examples\n\n```\nuse harness_tui_kit::ChatMessage;\n\nlet msg = ChatMessage::user(\"Hi\").with_id(\"custom-123\");\nassert_eq!(msg.id, \"custom-123\");\n```"
            },
            {
              "name": "::AgentInfo",
              "line": 388,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct AgentInfo {\n/// Unique identifier for this agent.\n\npub id: String,\n/// Human-readable display name.\n\npub name: String,\n/// Short description of the agent's role or purpose.\n\npub role_description: String,\n/// Model identifier (e.g. \"gpt-4o\", \"claude-opus-4-6\").\n\npub model: String,\n/// Current lifecycle status.\n\npub status: AgentStatus\n}",
              "documentation": "Metadata describing a connected agent.\n\nUsed by agent cards, roster lists, and status indicators to render agent\nidentity and current status.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentInfo, AgentStatus};\n\nlet info = AgentInfo::new(\"agent-1\", \"Navigator\", \"gpt-4o\")\n    .with_status(AgentStatus::Working);\nassert!(info.status.is_active());\n```"
            },
            {
              "name": "::AgentInfo::new",
              "line": 417,
              "signature": "#[must_use]\npub fn new(id: impl AsRef<str>, name: impl AsRef<str>, model: impl AsRef<str>) -> Self;",
              "documentation": "Create a new agent info with required fields.\n\nStatus defaults to [`AgentStatus::Online`]. Role description defaults\nto an empty string.\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentInfo, AgentStatus};\n\nlet info = AgentInfo::new(\"a1\", \"Coder\", \"claude-opus-4-6\");\nassert_eq!(info.status, AgentStatus::Online);\nassert_eq!(info.role_description, \"\");\n```"
            },
            {
              "name": "::AgentInfo::with_role",
              "line": 439,
              "signature": "#[must_use]\npub fn with_role(mut self, role_description: impl AsRef<str>) -> Self;",
              "documentation": "Set the role description (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::AgentInfo;\n\nlet info = AgentInfo::new(\"a1\", \"Coder\", \"gpt-4o\")\n    .with_role(\"Writes and reviews code\");\nassert_eq!(info.role_description, \"Writes and reviews code\");\n```"
            },
            {
              "name": "::AgentInfo::with_status",
              "line": 456,
              "signature": "#[must_use]\npub fn with_status(mut self, status: AgentStatus) -> Self;",
              "documentation": "Set the agent status (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{AgentInfo, AgentStatus};\n\nlet info = AgentInfo::new(\"a1\", \"Coder\", \"gpt-4o\")\n    .with_status(AgentStatus::Thinking);\nassert_eq!(info.status, AgentStatus::Thinking);\n```"
            },
            {
              "name": "::ToolCallStatus",
              "line": 478,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ToolCallStatus {\n    /// The tool call has been requested but not yet started.\n    #[default]\n    Pending,\n    /// The tool call is currently executing.\n    Running,\n    /// The tool call completed successfully.\n    Success,\n    /// The tool call failed with an error.\n    Error,\n}",
              "documentation": "Status of a single tool invocation.\n\nUsed by tool call cards and timeline entries to indicate progress.\nThe default status is [`ToolCallStatus::Pending`]."
            },
            {
              "name": "::ToolCallStatus::label",
              "line": 500,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this status.\n\n# Examples\n\n```\nuse harness_tui_kit::ToolCallStatus;\nassert_eq!(ToolCallStatus::Running.label(), \"Running\");\n```"
            },
            {
              "name": "::ToolCallStatus::is_complete",
              "line": 520,
              "signature": "#[must_use]\npub const fn is_complete(&self) -> bool;",
              "documentation": "Returns `true` if the tool call has finished (Success or Error).\n\n# Examples\n\n```\nuse harness_tui_kit::ToolCallStatus;\nassert!(ToolCallStatus::Success.is_complete());\nassert!(ToolCallStatus::Error.is_complete());\nassert!(!ToolCallStatus::Running.is_complete());\n```"
            },
            {
              "name": "::ToolCallInfo",
              "line": 552,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ToolCallInfo {\n/// Name of the tool (e.g. \"read_file\", \"bash\").\n\npub name: String,\n/// Serialized arguments passed to the tool (typically JSON).\n\npub arguments: String,\n/// Output produced by the tool, or empty if not yet available.\n\npub output: String,\n/// Current execution status.\n\npub status: ToolCallStatus,\n/// Wall-clock duration of the tool call, if completed.\n\n#[serde(\n        serialize_with = \"serialize_opt_duration\",\n        deserialize_with = \"deserialize_opt_duration\"\n    )]\npub duration: Option<Duration>\n}",
              "documentation": "Metadata and state for a single tool invocation.\n\nDisplayed by tool call cards, timeline entries, and audit logs.\n\n# Examples\n\n```\nuse harness_tui_kit::{ToolCallInfo, ToolCallStatus};\nuse std::time::Duration;\n\nlet info = ToolCallInfo::new(\"read_file\", r#\"{\"path\": \"/tmp/foo.rs\"}\"#)\n    .with_status(ToolCallStatus::Success)\n    .with_output(\"fn main() {}\")\n    .with_duration(Duration::from_millis(42));\nassert!(info.status.is_complete());\n```"
            },
            {
              "name": "::ToolCallInfo::new",
              "line": 583,
              "signature": "#[must_use]\npub fn new(name: impl AsRef<str>, arguments: impl AsRef<str>) -> Self;",
              "documentation": "Create a new tool call info in [`ToolCallStatus::Pending`] state.\n\n# Examples\n\n```\nuse harness_tui_kit::{ToolCallInfo, ToolCallStatus};\n\nlet info = ToolCallInfo::new(\"bash\", \"ls -la\");\nassert_eq!(info.status, ToolCallStatus::Pending);\nassert_eq!(info.output, \"\");\nassert!(info.duration.is_none());\n```"
            },
            {
              "name": "::ToolCallInfo::with_status",
              "line": 605,
              "signature": "#[must_use]\npub fn with_status(mut self, status: ToolCallStatus) -> Self;",
              "documentation": "Set the tool call status (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::{ToolCallInfo, ToolCallStatus};\n\nlet info = ToolCallInfo::new(\"bash\", \"echo hi\")\n    .with_status(ToolCallStatus::Running);\nassert_eq!(info.status, ToolCallStatus::Running);\n```"
            },
            {
              "name": "::ToolCallInfo::with_output",
              "line": 621,
              "signature": "#[must_use]\npub fn with_output(mut self, output: impl AsRef<str>) -> Self;",
              "documentation": "Set the tool output (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::ToolCallInfo;\n\nlet info = ToolCallInfo::new(\"bash\", \"echo hi\").with_output(\"hi\\n\");\nassert_eq!(info.output, \"hi\\n\");\n```"
            },
            {
              "name": "::ToolCallInfo::with_duration",
              "line": 639,
              "signature": "#[must_use]\npub fn with_duration(mut self, duration: Duration) -> Self;",
              "documentation": "Set the execution duration (builder pattern).\n\n# Examples\n\n```\nuse harness_tui_kit::ToolCallInfo;\nuse std::time::Duration;\n\nlet info = ToolCallInfo::new(\"bash\", \"sleep 1\")\n    .with_duration(Duration::from_secs(1));\nassert_eq!(info.duration, Some(Duration::from_secs(1)));\n```"
            },
            {
              "name": "::Severity",
              "line": 670,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"lowercase\")]\npub enum Severity {\n    /// Informational message.\n    #[default]\n    Info,\n    /// Positive outcome or confirmation.\n    Success,\n    /// Non-critical issue requiring attention.\n    Warning,\n    /// Critical failure or error condition.\n    Error,\n}",
              "documentation": "Severity level for notifications, toasts, and inline status messages.\n\nThe default severity is [`Severity::Info`].\n\n# Examples\n\n```\nuse harness_tui_kit::Severity;\n\nlet sev = Severity::Warning;\nassert_eq!(sev.label(), \"Warning\");\nassert_eq!(sev.icon(), \"!\");\n```"
            },
            {
              "name": "::Severity::label",
              "line": 692,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this severity.\n\n# Examples\n\n```\nuse harness_tui_kit::Severity;\nassert_eq!(Severity::Error.label(), \"Error\");\n```"
            },
            {
              "name": "::Severity::icon",
              "line": 716,
              "signature": "#[must_use]\npub const fn icon(&self) -> &'static str;",
              "documentation": "Single-character icon for compact displays.\n\n- Info: `i`\n- Success: check mark\n- Warning: `!`\n- Error: `x`\n\n# Examples\n\n```\nuse harness_tui_kit::Severity;\nassert_eq!(Severity::Info.icon(), \"i\");\nassert_eq!(Severity::Success.icon(), \"\\u{2713}\");\n```"
            },
            {
              "name": "::CommandHint",
              "line": 752,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct CommandHint {\n/// The command name (e.g., \"help\", \"orgs form\", \"clear\").\n\npub name: String,\n/// Short description (e.g., \"Show available commands\").\n\npub description: String,\n/// Source label \u2014 \"built-in\" or a plugin name (e.g., \"orgs\").\n\npub source: String\n}",
              "documentation": "A slash command hint for InputBar autocomplete rendering.\n\nKit renders these in the autocomplete dropdown when the user types `/`.\nThe Kit has zero knowledge of what commands do \u2014 it renders hints and\nemits events. The application or SDK provides the command list.\n\n# Examples\n\n```\nuse harness_tui_kit::CommandHint;\n\nlet hint = CommandHint::new(\"help\", \"Show available commands\", \"built-in\");\nassert_eq!(hint.name, \"help\");\nassert_eq!(hint.source, \"built-in\");\n```"
            },
            {
              "name": "::CommandHint::new",
              "line": 773,
              "signature": "#[must_use]\npub fn new(\n        name: impl AsRef<str>,\n        description: impl AsRef<str>,\n        source: impl AsRef<str>,\n    ) -> Self;",
              "documentation": "Create a new command hint.\n\n# Examples\n\n```\nuse harness_tui_kit::CommandHint;\n\nlet hint = CommandHint::new(\"clear\", \"Clear the conversation\", \"built-in\");\nassert_eq!(hint.name, \"clear\");\n```"
            },
            {
              "name": "::PermissionCategory",
              "line": 801,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PermissionCategory {\n    /// Network access (HTTP, DNS, WebSocket).\n    Network,\n    /// Filesystem read access.\n    Read,\n    /// Filesystem write access.\n    Write,\n    /// Shell command execution.\n    Shell,\n    /// Tool invocation (agent-to-agent or external).\n    Tool,\n}",
              "documentation": "Category of a permission request.\n\nDetermines the icon and color treatment in the [`PermissionPrompt`] component."
            },
            {
              "name": "::PermissionCategory::icon",
              "line": 824,
              "signature": "#[must_use]\npub const fn icon(&self) -> &'static str;",
              "documentation": "Icon character for this category.\n\n# Examples\n\n```\nuse harness_tui_kit::PermissionCategory;\nassert_eq!(PermissionCategory::Network.icon(), \"N\");\n```"
            },
            {
              "name": "::PermissionCategory::label",
              "line": 843,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this category.\n\n# Examples\n\n```\nuse harness_tui_kit::PermissionCategory;\nassert_eq!(PermissionCategory::Shell.label(), \"shell\");\n```"
            },
            {
              "name": "::PermissionRequest",
              "line": 878,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct PermissionRequest {\n/// Category of access being requested.\n\npub category: PermissionCategory,\n/// Name of the requesting entity (plugin or agent).\n\npub requester: String,\n/// Specific resource (URL, file path, shell command).\n\npub resource: String,\n/// One-line context explaining why the access is needed.\n\npub context: String,\n/// Suggested glob pattern for \"always allow\" (e.g., `api.orgs.sh/*`).\n\npub suggested_pattern: String\n}",
              "documentation": "A permission request for rendering in the PermissionPrompt component.\n\nKit renders these; it has no knowledge of WASM sandboxing or plugins.\nThe application provides the data; Kit displays it.\n\n# Examples\n\n```\nuse harness_tui_kit::{PermissionRequest, PermissionCategory};\n\nlet req = PermissionRequest::new(\n    PermissionCategory::Network,\n    \"orgs-plugin\",\n    \"https://api.orgs.sh/v1/formations\",\n);\nassert_eq!(req.category, PermissionCategory::Network);\n```"
            },
            {
              "name": "::PermissionRequest::new",
              "line": 896,
              "signature": "#[must_use]\npub fn new(\n        category: PermissionCategory,\n        requester: impl AsRef<str>,\n        resource: impl AsRef<str>,\n    ) -> Self;",
              "documentation": "Create a new permission request with minimal fields.\n\nContext and suggested pattern default to empty strings."
            },
            {
              "name": "::PermissionRequest::with_context",
              "line": 912,
              "signature": "#[must_use]\npub fn with_context(mut self, context: impl AsRef<str>) -> Self;",
              "documentation": "Set the context string (builder pattern)."
            },
            {
              "name": "::PermissionRequest::with_suggested_pattern",
              "line": 919,
              "signature": "#[must_use]\npub fn with_suggested_pattern(mut self, pattern: impl AsRef<str>) -> Self;",
              "documentation": "Set the suggested glob pattern (builder pattern)."
            },
            {
              "name": "::PermissionDecision",
              "line": 943,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum PermissionDecision {\n    /// Allow this specific request once.\n    AllowOnce,\n    /// Always allow requests matching the given glob pattern.\n    AlwaysAllow {\n        /// The glob pattern to persist (e.g., `api.orgs.sh/*`).\n        pattern: String,\n    },\n    /// Deny this request.\n    Deny,\n}",
              "documentation": "The user's decision on a permission prompt.\n\nEmitted by the PermissionPrompt component when the user presses a key."
            },
            {
              "name": "::DiffLineKind",
              "line": 981,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum DiffLineKind {\n    /// Unchanged context line.\n    Context,\n    /// Added line (green).\n    Added,\n    /// Removed line (red).\n    Removed,\n    /// Section header (@@).\n    Header,\n}",
              "documentation": "A single line in a diff view.\n\n# Examples\n\n```\nuse harness_tui_kit::DiffLineKind;\n\nlet kind = DiffLineKind::Added;\nassert_eq!(kind.prefix(), \"+\");\n```"
            },
            {
              "name": "::DiffLineKind::prefix",
              "line": 995,
              "signature": "#[must_use]\npub const fn prefix(&self) -> &'static str;",
              "documentation": "Prefix character for this line kind."
            },
            {
              "name": "::DiffLine",
              "line": 1007,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct DiffLine {\n/// What kind of diff line this is.\n\npub kind: DiffLineKind,\n/// The line content (without the +/- prefix).\n\npub content: String,\n/// Original line number (for removed/context lines), if known.\n\npub old_line_no: Option<usize>,\n/// New line number (for added/context lines), if known.\n\npub new_line_no: Option<usize>\n}",
              "documentation": "A line in a diff with its kind and content."
            },
            {
              "name": "::CostEntry",
              "line": 1036,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct CostEntry {\n/// Agent that incurred the cost.\n\npub agent_id: String,\n/// Model used (e.g., \"claude-opus-4-6\", \"gpt-4o\").\n\npub model: String,\n/// Cost in the smallest currency unit (cents for USD).\n\npub amount_cents: u64,\n/// ISO 4217 currency code (e.g., \"USD\", \"EUR\").\n\npub currency: String\n}",
              "documentation": "A single cost data point for an agent or model.\n\nUsed by the CostTracker component to display running costs per agent/model.\n\n# Examples\n\n```\nuse harness_tui_kit::CostEntry;\n\nlet entry = CostEntry::new(\"agent-1\", \"claude-opus-4-6\", 1250, \"USD\");\nassert_eq!(entry.amount_cents, 1250);\nassert_eq!(entry.display_amount(), \"$12.50\");\n```"
            },
            {
              "name": "::CostEntry::new",
              "line": 1050,
              "signature": "#[must_use]\npub fn new(\n        agent_id: impl AsRef<str>,\n        model: impl AsRef<str>,\n        amount_cents: u64,\n        currency: impl AsRef<str>,\n    ) -> Self;",
              "documentation": "Create a new cost entry."
            },
            {
              "name": "::CostEntry::display_amount",
              "line": 1066,
              "signature": "#[must_use]\npub fn display_amount(&self) -> String;",
              "documentation": "Format the amount as a display string (e.g., \"$12.50\")."
            },
            {
              "name": "::LatencySnapshot",
              "line": 1108,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct LatencySnapshot {\n/// Current latency in milliseconds.\n\npub current_ms: u64,\n/// 50th percentile (median) latency in milliseconds.\n\npub p50: u64,\n/// 95th percentile latency in milliseconds.\n\npub p95: u64,\n/// 99th percentile latency in milliseconds.\n\npub p99: u64,\n/// Recent latency samples for sparkline rendering.\n\npub samples: Vec<u64>\n}",
              "documentation": "A snapshot of latency metrics with percentile data.\n\n# Examples\n\n```\nuse harness_tui_kit::LatencySnapshot;\n\nlet snap = LatencySnapshot::new(120, 80, 150, 300)\n    .with_samples(vec![100, 110, 120, 130, 140]);\nassert_eq!(snap.current_ms, 120);\nassert_eq!(snap.samples.len(), 5);\n```"
            },
            {
              "name": "::LatencySnapshot::new",
              "line": 1124,
              "signature": "#[must_use]\npub fn new(current_ms: u64, p50: u64, p95: u64, p99: u64) -> Self;",
              "documentation": "Create a new latency snapshot with percentile values."
            },
            {
              "name": "::LatencySnapshot::with_samples",
              "line": 1136,
              "signature": "#[must_use]\npub fn with_samples(mut self, samples: Vec<u64>) -> Self;",
              "documentation": "Set the recent samples (builder pattern)."
            },
            {
              "name": "::RiskLevel",
              "line": 1171,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum RiskLevel {\n    /// Low risk, routine action.\n    #[default]\n    Low,\n    /// Medium risk, warrants attention.\n    Medium,\n    /// High risk, requires careful review.\n    High,\n    /// Critical risk, potentially destructive or irreversible.\n    Critical,\n}",
              "documentation": "Risk level for an approval request.\n\nDetermines visual severity treatment in approval components.\n\n# Examples\n\n```\nuse harness_tui_kit::RiskLevel;\n\nlet risk = RiskLevel::High;\nassert_eq!(risk.label(), \"High\");\nassert!(risk.requires_review());\n```"
            },
            {
              "name": "::RiskLevel::label",
              "line": 1186,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this risk level."
            },
            {
              "name": "::RiskLevel::requires_review",
              "line": 1197,
              "signature": "#[must_use]\npub const fn requires_review(&self) -> bool;",
              "documentation": "Returns `true` if this risk level requires explicit review."
            },
            {
              "name": "::RiskLevel::weight",
              "line": 1203,
              "signature": "#[must_use]\npub const fn weight(&self) -> u8;",
              "documentation": "Numeric severity weight for sorting (higher = more severe)."
            },
            {
              "name": "::ApprovalRequest",
              "line": 1236,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct ApprovalRequest {\n/// Unique identifier for this request.\n\npub id: String,\n/// Name of the agent requesting approval.\n\npub agent_name: String,\n/// Short summary of the proposed action.\n\npub action_summary: String,\n/// Detailed reasoning for the action.\n\npub reasoning: String,\n/// Resources affected by the action.\n\npub resources: Vec<String>,\n/// Assessed risk level.\n\npub risk_level: RiskLevel,\n/// ISO-8601 timestamp of when the request was created.\n\npub created_at: String\n}",
              "documentation": "A request awaiting human approval.\n\n# Examples\n\n```\nuse harness_tui_kit::{ApprovalRequest, RiskLevel};\n\nlet req = ApprovalRequest::new(\"req-1\", \"CodeAgent\", \"Delete production database\")\n    .with_risk_level(RiskLevel::Critical)\n    .with_reasoning(\"Cleanup of deprecated schema\");\nassert!(req.risk_level.requires_review());\n```"
            },
            {
              "name": "::ApprovalRequest::new",
              "line": 1256,
              "signature": "#[must_use]\npub fn new(\n        id: impl AsRef<str>,\n        agent_name: impl AsRef<str>,\n        action_summary: impl AsRef<str>,\n    ) -> Self;",
              "documentation": "Create a new approval request with required fields."
            },
            {
              "name": "::ApprovalRequest::with_risk_level",
              "line": 1274,
              "signature": "#[must_use]\npub fn with_risk_level(mut self, risk_level: RiskLevel) -> Self;",
              "documentation": "Set the risk level (builder pattern)."
            },
            {
              "name": "::ApprovalRequest::with_reasoning",
              "line": 1281,
              "signature": "#[must_use]\npub fn with_reasoning(mut self, reasoning: impl AsRef<str>) -> Self;",
              "documentation": "Set the reasoning (builder pattern)."
            },
            {
              "name": "::ApprovalRequest::with_resources",
              "line": 1288,
              "signature": "#[must_use]\npub fn with_resources(mut self, resources: Vec<String>) -> Self;",
              "documentation": "Set the affected resources (builder pattern)."
            },
            {
              "name": "::ApprovalRequest::with_created_at",
              "line": 1295,
              "signature": "#[must_use]\npub fn with_created_at(mut self, created_at: impl AsRef<str>) -> Self;",
              "documentation": "Set the creation timestamp (builder pattern)."
            },
            {
              "name": "::ApprovalAction",
              "line": 1318,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ApprovalAction {\n    /// Approve the request as-is.\n    Approve,\n    /// Deny the request.\n    Deny,\n    /// Approve with modifications.\n    Edit {\n        /// Description of the modification.\n        modification: String,\n    },\n}",
              "documentation": "The user's action on an approval request."
            },
            {
              "name": "::TaskStatus",
              "line": 1357,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum TaskStatus {\n    /// Task has not started.\n    #[default]\n    Pending,\n    /// Task is currently executing.\n    Active,\n    /// Task completed successfully.\n    Complete,\n    /// Task failed with an error.\n    Error,\n    /// Task was skipped.\n    Skipped,\n}",
              "documentation": "Status of a task in a workflow.\n\n# Examples\n\n```\nuse harness_tui_kit::TaskStatus;\n\nlet status = TaskStatus::Active;\nassert_eq!(status.icon(), \"\\u{25ce}\");\nassert!(!status.is_terminal());\n```"
            },
            {
              "name": "::TaskStatus::label",
              "line": 1374,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label for this status."
            },
            {
              "name": "::TaskStatus::icon",
              "line": 1386,
              "signature": "#[must_use]\npub const fn icon(&self) -> &'static str;",
              "documentation": "Status icon character."
            },
            {
              "name": "::TaskStatus::is_terminal",
              "line": 1398,
              "signature": "#[must_use]\npub const fn is_terminal(&self) -> bool;",
              "documentation": "Returns `true` if this is a terminal state."
            },
            {
              "name": "::TaskItem",
              "line": 1426,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct TaskItem {\n/// Unique task identifier.\n\npub id: String,\n/// Display label for the task.\n\npub label: String,\n/// Current task status.\n\npub status: TaskStatus,\n/// Sub-tasks (for hierarchical display).\n\npub children: Vec<TaskItem>,\n/// Progress fraction (0.0 to 1.0), where applicable.\n\npub progress: f32\n}",
              "documentation": "A single task item in a task list or workflow.\n\n# Examples\n\n```\nuse harness_tui_kit::{TaskItem, TaskStatus};\n\nlet task = TaskItem::new(\"t-1\", \"Run tests\")\n    .with_status(TaskStatus::Active)\n    .with_progress(0.5);\nassert_eq!(task.progress, 0.5);\n```"
            },
            {
              "name": "::TaskItem::new",
              "line": 1442,
              "signature": "#[must_use]\npub fn new(id: impl AsRef<str>, label: impl AsRef<str>) -> Self;",
              "documentation": "Create a new task item."
            },
            {
              "name": "::TaskItem::with_status",
              "line": 1454,
              "signature": "#[must_use]\npub fn with_status(mut self, status: TaskStatus) -> Self;",
              "documentation": "Set the task status (builder pattern)."
            },
            {
              "name": "::TaskItem::with_progress",
              "line": 1461,
              "signature": "#[must_use]\npub fn with_progress(mut self, progress: f32) -> Self;",
              "documentation": "Set the progress fraction (builder pattern). Clamped to [0.0, 1.0]."
            },
            {
              "name": "::TaskItem::with_children",
              "line": 1468,
              "signature": "#[must_use]\npub fn with_children(mut self, children: Vec<TaskItem>) -> Self;",
              "documentation": "Set the children (builder pattern)."
            },
            {
              "name": "::WorkflowNodeKind",
              "line": 1496,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum WorkflowNodeKind {\n    /// An agent node.\n    #[default]\n    Agent,\n    /// A tool invocation node.\n    Tool,\n    /// A conditional branch node.\n    Condition,\n    /// A parallel execution node.\n    Parallel,\n    /// A human-in-the-loop gate.\n    HitlGate,\n}",
              "documentation": "Kind of node in a workflow DAG.\n\n# Examples\n\n```\nuse harness_tui_kit::WorkflowNodeKind;\n\nlet kind = WorkflowNodeKind::Agent;\nassert_eq!(kind.icon(), \"A\");\n```"
            },
            {
              "name": "::WorkflowNodeKind::label",
              "line": 1513,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::WorkflowNodeKind::icon",
              "line": 1525,
              "signature": "#[must_use]\npub const fn icon(&self) -> &'static str;",
              "documentation": "Icon character for this node kind."
            },
            {
              "name": "::WorkflowNodeInfo",
              "line": 1544,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct WorkflowNodeInfo {\n/// Unique node identifier.\n\npub id: String,\n/// Display label for the node.\n\npub label: String,\n/// Node kind (determines icon and styling).\n\npub kind: WorkflowNodeKind,\n/// Current execution status.\n\npub status: TaskStatus\n}",
              "documentation": "Information about a single node in a workflow DAG."
            },
            {
              "name": "::WorkflowNodeInfo::new",
              "line": 1558,
              "signature": "#[must_use]\npub fn new(id: impl AsRef<str>, label: impl AsRef<str>, kind: WorkflowNodeKind) -> Self;",
              "documentation": "Create a new workflow node."
            },
            {
              "name": "::WorkflowNodeInfo::with_status",
              "line": 1569,
              "signature": "#[must_use]\npub fn with_status(mut self, status: TaskStatus) -> Self;",
              "documentation": "Set the node status (builder pattern)."
            },
            {
              "name": "::WorkflowEdge",
              "line": 1583,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct WorkflowEdge {\n/// Source node ID.\n\npub source_id: String,\n/// Target node ID.\n\npub target_id: String,\n/// Whether this edge is currently active (data flowing).\n\npub active: bool\n}",
              "documentation": "A directed edge between two nodes in a workflow DAG."
            },
            {
              "name": "::WorkflowEdge::new",
              "line": 1595,
              "signature": "#[must_use]\npub fn new(source_id: impl AsRef<str>, target_id: impl AsRef<str>) -> Self;",
              "documentation": "Create a new edge between two nodes."
            },
            {
              "name": "::WorkflowEdge::with_active",
              "line": 1605,
              "signature": "#[must_use]\npub fn with_active(mut self, active: bool) -> Self;",
              "documentation": "Set the active state (builder pattern)."
            },
            {
              "name": "::LogLevel",
              "line": 1634,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum LogLevel {\n    /// Trace-level diagnostic output.\n    Trace,\n    /// Debug-level diagnostic output.\n    Debug,\n    /// Informational messages.\n    #[default]\n    Info,\n    /// Warning conditions.\n    Warn,\n    /// Error conditions.\n    Error,\n}",
              "documentation": "Log level for structured log entries.\n\n# Examples\n\n```\nuse harness_tui_kit::LogLevel;\n\nlet level = LogLevel::Warn;\nassert_eq!(level.label(), \"WARN\");\n```"
            },
            {
              "name": "::LogLevel::label",
              "line": 1651,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Upper-case label for this log level."
            },
            {
              "name": "::LogLevel::severity",
              "line": 1663,
              "signature": "#[must_use]\npub const fn severity(&self) -> u8;",
              "documentation": "Numeric severity (higher = more severe) for filtering."
            },
            {
              "name": "::LogEntry",
              "line": 1682,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct LogEntry {\n/// ISO-8601 timestamp.\n\npub timestamp: String,\n/// Log level.\n\npub level: LogLevel,\n/// Source component or module.\n\npub source: String,\n/// Log message text.\n\npub message: String\n}",
              "documentation": "A single log entry for display in the LogViewer."
            },
            {
              "name": "::LogEntry::new",
              "line": 1696,
              "signature": "#[must_use]\npub fn new(level: LogLevel, source: impl AsRef<str>, message: impl AsRef<str>) -> Self;",
              "documentation": "Create a new log entry."
            },
            {
              "name": "::LogEntry::with_timestamp",
              "line": 1707,
              "signature": "#[must_use]\npub fn with_timestamp(mut self, timestamp: impl AsRef<str>) -> Self;",
              "documentation": "Set the timestamp (builder pattern)."
            },
            {
              "name": "::PaletteItem",
              "line": 1738,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct PaletteItem {\n/// Display label.\n\npub label: String,\n/// Short description.\n\npub description: String,\n/// Category for grouping.\n\npub category: String,\n/// Keyboard shortcut hint (e.g., \"Ctrl+O\").\n\npub shortcut: String\n}",
              "documentation": "An item in the command palette.\n\n# Examples\n\n```\nuse harness_tui_kit::PaletteItem;\n\nlet item = PaletteItem::new(\"Open File\", \"Open a file in the editor\", \"File\");\nassert_eq!(item.label, \"Open File\");\n```"
            },
            {
              "name": "::PaletteItem::new",
              "line": 1752,
              "signature": "#[must_use]\npub fn new(\n        label: impl AsRef<str>,\n        description: impl AsRef<str>,\n        category: impl AsRef<str>,\n    ) -> Self;",
              "documentation": "Create a new palette item."
            },
            {
              "name": "::PaletteItem::with_shortcut",
              "line": 1767,
              "signature": "#[must_use]\npub fn with_shortcut(mut self, shortcut: impl AsRef<str>) -> Self;",
              "documentation": "Set the shortcut hint (builder pattern)."
            },
            {
              "name": "::KeyShortcut",
              "line": 1789,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]\npub struct KeyShortcut {\n/// Key combination (e.g., \"Ctrl+C\", \"q\", \"Shift+Tab\").\n\npub keys: String,\n/// Description of what the shortcut does.\n\npub description: String,\n/// Category for grouping (e.g., \"Navigation\", \"Editing\").\n\npub category: String\n}",
              "documentation": "A keyboard shortcut for the help overlay."
            },
            {
              "name": "::KeyShortcut::new",
              "line": 1801,
              "signature": "#[must_use]\npub fn new(\n        keys: impl AsRef<str>,\n        description: impl AsRef<str>,\n        category: impl AsRef<str>,\n    ) -> Self;",
              "documentation": "Create a new key shortcut."
            },
            {
              "name": "::ProposalKind",
              "line": 1837,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ProposalKind {\n    /// General governance proposal.\n    #[default]\n    General,\n    /// Treasury spending or allocation.\n    Treasury,\n    /// Membership change (add/remove).\n    Membership,\n    /// Policy or constitution amendment.\n    Policy,\n    /// Technical or infrastructure change.\n    Technical,\n}",
              "documentation": "Kind of governance proposal.\n\n# Examples\n\n```\nuse harness_tui_kit::ProposalKind;\n\nlet kind = ProposalKind::Treasury;\nassert_eq!(kind.label(), \"Treasury\");\n```"
            },
            {
              "name": "::ProposalKind::label",
              "line": 1854,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::ProposalStatus",
              "line": 1874,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum ProposalStatus {\n    /// Proposal is open for voting.\n    #[default]\n    Active,\n    /// Proposal was approved.\n    Passed,\n    /// Proposal was rejected.\n    Rejected,\n    /// Proposal was withdrawn by the creator.\n    Withdrawn,\n    /// Proposal expired without reaching quorum.\n    Expired,\n}",
              "documentation": "Status of a governance proposal."
            },
            {
              "name": "::ProposalStatus::label",
              "line": 1891,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::ProposalStatus::is_open",
              "line": 1903,
              "signature": "#[must_use]\npub const fn is_open(&self) -> bool;",
              "documentation": "Returns `true` if voting is still possible."
            },
            {
              "name": "::ProposalInfo",
              "line": 1916,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct ProposalInfo {\n/// Unique proposal identifier.\n\npub id: String,\n/// Proposal title.\n\npub title: String,\n/// Proposal kind.\n\npub kind: ProposalKind,\n/// Current status.\n\npub status: ProposalStatus,\n/// Creator name.\n\npub creator: String,\n/// Votes in favor.\n\npub votes_yes: u32,\n/// Votes against.\n\npub votes_no: u32,\n/// Abstentions.\n\npub votes_abstain: u32,\n/// Required quorum (total votes needed).\n\npub quorum: u32,\n/// ISO-8601 deadline timestamp.\n\npub deadline: String\n}",
              "documentation": "Information about a governance proposal."
            },
            {
              "name": "::ProposalInfo::new",
              "line": 1942,
              "signature": "#[must_use]\npub fn new(id: impl AsRef<str>, title: impl AsRef<str>, kind: ProposalKind) -> Self;",
              "documentation": "Create a new proposal info."
            },
            {
              "name": "::ProposalInfo::with_creator",
              "line": 1959,
              "signature": "#[must_use]\npub fn with_creator(mut self, creator: impl AsRef<str>) -> Self;",
              "documentation": "Set the creator (builder pattern)."
            },
            {
              "name": "::ProposalInfo::with_status",
              "line": 1966,
              "signature": "#[must_use]\npub fn with_status(mut self, status: ProposalStatus) -> Self;",
              "documentation": "Set the status (builder pattern)."
            },
            {
              "name": "::ProposalInfo::with_votes",
              "line": 1973,
              "signature": "#[must_use]\npub fn with_votes(mut self, yes: u32, no: u32, abstain: u32) -> Self;",
              "documentation": "Set the vote tallies (builder pattern)."
            },
            {
              "name": "::ProposalInfo::with_quorum",
              "line": 1982,
              "signature": "#[must_use]\npub fn with_quorum(mut self, quorum: u32) -> Self;",
              "documentation": "Set the quorum (builder pattern)."
            },
            {
              "name": "::ProposalInfo::with_deadline",
              "line": 1989,
              "signature": "#[must_use]\npub fn with_deadline(mut self, deadline: impl AsRef<str>) -> Self;",
              "documentation": "Set the deadline (builder pattern)."
            },
            {
              "name": "::ProposalInfo::total_votes",
              "line": 1996,
              "signature": "#[must_use]\npub fn total_votes(&self) -> u32;",
              "documentation": "Total votes cast."
            },
            {
              "name": "::ProposalInfo::has_quorum",
              "line": 2004,
              "signature": "#[must_use]\npub fn has_quorum(&self) -> bool;",
              "documentation": "Whether quorum has been reached."
            },
            {
              "name": "::VoteChoice",
              "line": 2022,
              "signature": "#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]\n#[serde(rename_all = \"snake_case\")]\npub enum VoteChoice {\n    /// Vote in favor.\n    Yes,\n    /// Vote against.\n    No,\n    /// Abstain from voting.\n    Abstain,\n}",
              "documentation": "A vote choice on a governance proposal."
            },
            {
              "name": "::VoteChoice::label",
              "line": 2034,
              "signature": "#[must_use]\npub const fn label(&self) -> &'static str;",
              "documentation": "Human-readable label."
            },
            {
              "name": "::TreasuryInfo",
              "line": 2051,
              "signature": "#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]\npub struct TreasuryInfo {\n/// Current balance in the smallest currency unit.\n\npub balance_cents: u64,\n/// Currency code (e.g., \"USD\", \"USDC\").\n\npub currency: String,\n/// Chain or network label (e.g., \"Ethereum\", \"Solana\").\n\npub chain: String,\n/// Daily spending limit in the smallest unit.\n\npub daily_limit_cents: u64,\n/// Amount spent today in the smallest unit.\n\npub daily_spent_cents: u64,\n/// Recent transactions.\n\npub recent_transactions: Vec<TransactionEntry>\n}",
              "documentation": "Treasury balance and metadata."
            },
            {
              "name": "::TreasuryInfo::new",
              "line": 2069,
              "signature": "#[must_use]\npub fn new(balance_cents: u64, currency: impl AsRef<str>, chain: impl AsRef<str>) -> Self;",
              "documentation": "Create a new treasury info."
            },
            {
              "name": "::TreasuryInfo::with_daily_limit",
              "line": 2082,
              "signature": "#[must_use]\npub fn with_daily_limit(mut self, limit_cents: u64) -> Self;",
              "documentation": "Set the daily limit (builder pattern)."
            },
            {
              "name": "::TreasuryInfo::with_daily_spent",
              "line": 2089,
              "signature": "#[must_use]\npub fn with_daily_spent(mut self, spent_cents: u64) -> Self;",
              "documentation": "Set the daily spent amount (builder pattern)."
            },
            {
              "name": "::TreasuryInfo::with_transactions",
              "line": 2096,
              "signature": "#[must_use]\npub fn with_transactions(mut self, txns: Vec<TransactionEntry>) -> Self;",
              "documentation": "Set recent transactions (builder pattern)."
            },
            {
              "name": "::TreasuryInfo::display_balance",
              "line": 2103,
              "signature": "#[must_use]\npub fn display_balance(&self) -> String;",
              "documentation": "Format the balance as a display string."
            },
            {
              "name": "::TransactionEntry",
              "line": 2118,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct TransactionEntry {\n/// Amount in the smallest currency unit.\n\npub amount_cents: u64,\n/// Direction: true = inflow, false = outflow.\n\npub is_inflow: bool,\n/// Description or recipient.\n\npub description: String,\n/// ISO-8601 timestamp.\n\npub timestamp: String\n}",
              "documentation": "A treasury transaction entry."
            },
            {
              "name": "::TransactionEntry::new",
              "line": 2132,
              "signature": "#[must_use]\npub fn new(amount_cents: u64, is_inflow: bool, description: impl AsRef<str>) -> Self;",
              "documentation": "Create a new transaction entry."
            },
            {
              "name": "::TransactionEntry::with_timestamp",
              "line": 2143,
              "signature": "#[must_use]\npub fn with_timestamp(mut self, timestamp: impl AsRef<str>) -> Self;",
              "documentation": "Set the timestamp (builder pattern)."
            },
            {
              "name": "::DecisionOption",
              "line": 2170,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]\npub struct DecisionOption {\n/// Display label for this option.\n\npub label: String,\n/// Description of what this option does.\n\npub description: String,\n/// Whether this is the recommended choice.\n\npub recommended: bool\n}",
              "documentation": "A decision option for the DecisionPanel component.\n\n# Examples\n\n```\nuse harness_tui_kit::DecisionOption;\n\nlet opt = DecisionOption::new(\"Deploy to staging\", \"Push changes to staging environment\")\n    .with_recommended(true);\nassert!(opt.recommended);\n```"
            },
            {
              "name": "::DecisionOption::new",
              "line": 2182,
              "signature": "#[must_use]\npub fn new(label: impl AsRef<str>, description: impl AsRef<str>) -> Self;",
              "documentation": "Create a new decision option."
            },
            {
              "name": "::DecisionOption::with_recommended",
              "line": 2192,
              "signature": "#[must_use]\npub fn with_recommended(mut self, recommended: bool) -> Self;",
              "documentation": "Set the recommended flag (builder pattern)."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/color.rs",
          "sha256": "75861c3cdab0134287428440d00efa8e41eb884951856ad068485543c8be17b3",
          "artifactSha256": "9e99269406217b234d3a1f730258afeafbbcd2cb4696928402f082f1e93325d6",
          "url": "/reference/source/harness-tui-kit/src/util/color.rs.txt",
          "declarations": [
            {
              "name": "::rgb_to_ansi256",
              "line": 37,
              "signature": "#[must_use]\npub fn rgb_to_ansi256(r: u8, g: u8, b: u8) -> Color;",
              "documentation": "Map an RGB color value to the nearest ANSI 256-color palette entry.\n\nUses the 6x6x6 color cube (indices 16--231) and the grayscale ramp\n(indices 232--255), selecting whichever is closest in Euclidean RGB\ndistance.\n\n# Examples\n\n```\nuse harness_tui_kit::util::color::rgb_to_ansi256;\nuse ratatui::style::Color;\n\nlet c = rgb_to_ansi256(0, 0, 0);\nassert!(matches!(c, Color::Indexed(_)));\n```"
            },
            {
              "name": "::lerp_color",
              "line": 81,
              "signature": "#[must_use]\npub fn lerp_color(from: Color, to: Color, t: f32) -> Color;",
              "documentation": "Linearly interpolate between two colors.\n\n`t` is clamped to the range `[0.0, 1.0]`. At `t = 0.0` the result equals\n`from`; at `t = 1.0` the result equals `to`.\n\nBoth colors must be [`Color::Rgb`]; other variants are treated as black.\n\n# Examples\n\n```\nuse ratatui::style::Color;\nuse harness_tui_kit::util::color::lerp_color;\n\nlet mid = lerp_color(Color::Rgb(0, 0, 0), Color::Rgb(200, 100, 50), 0.5);\nassert!(matches!(mid, Color::Rgb(100, 50, 25)));\n```"
            },
            {
              "name": "::luminance",
              "line": 106,
              "signature": "#[must_use]\npub fn luminance(color: Color) -> f32;",
              "documentation": "Compute the relative luminance of a color using the sRGB formula.\n\nReturns a value between `0.0` (black) and `1.0` (white).\nNon-RGB color variants are treated as black (`0.0`).\n\nUses the ITU-R BT.709 coefficients: `0.2126 R + 0.7152 G + 0.0722 B`,\napplied to linearized sRGB channels.\n\n# Examples\n\n```\nuse ratatui::style::Color;\nuse harness_tui_kit::util::color::luminance;\n\nassert!((luminance(Color::Rgb(255, 255, 255)) - 1.0).abs() < 0.01);\nassert!((luminance(Color::Rgb(0, 0, 0))).abs() < 0.01);\n```"
            },
            {
              "name": "::has_sufficient_contrast",
              "line": 130,
              "signature": "#[must_use]\npub fn has_sufficient_contrast(fg: Color, bg: Color, min_ratio: f32) -> bool;",
              "documentation": "Check whether two colors have sufficient contrast for readability.\n\nComputes the WCAG 2.0 contrast ratio and returns `true` if it meets or\nexceeds `min_ratio`. A `min_ratio` of `4.5` satisfies WCAG AA for normal\ntext; `7.0` satisfies WCAG AAA.\n\n# Examples\n\n```\nuse ratatui::style::Color;\nuse harness_tui_kit::util::color::has_sufficient_contrast;\n\nassert!(has_sufficient_contrast(Color::Rgb(255, 255, 255), Color::Rgb(0, 0, 0), 4.5));\nassert!(!has_sufficient_contrast(Color::Rgb(128, 128, 128), Color::Rgb(130, 130, 130), 4.5));\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/layout.rs",
          "sha256": "6b750b6125a2c19790bdda787666e9230b821c782bc7789b3734031759891789",
          "artifactSha256": "7e17b3b65a0172bd297c0bee4162c3c6ea78eb23603643e7d343506cce180aa0",
          "url": "/reference/source/harness-tui-kit/src/util/layout.rs.txt",
          "declarations": [
            {
              "name": "::centered_rect",
              "line": 37,
              "signature": "#[must_use]\npub fn centered_rect(width: u16, height: u16, outer: Rect) -> Rect;",
              "documentation": "Return a rectangle of the given size centered within `outer`.\n\nIf the requested `width` or `height` exceeds the corresponding dimension\nof `outer`, the result is clamped to fit entirely within `outer`.\n\n# Examples\n\n```\nuse ratatui::layout::Rect;\nuse harness_tui_kit::util::layout::centered_rect;\n\nlet outer = Rect::new(0, 0, 80, 24);\nlet r = centered_rect(40, 10, outer);\nassert_eq!(r, Rect::new(20, 7, 40, 10));\n```"
            },
            {
              "name": "::percentage_rect",
              "line": 62,
              "signature": "#[must_use]\npub fn percentage_rect(width_pct: u16, height_pct: u16, outer: Rect) -> Rect;",
              "documentation": "Return a rectangle sized as a percentage of `outer`, centered within it.\n\n`width_pct` and `height_pct` are clamped to the range `0..=100`.\nA percentage of `0` produces a zero-sized dimension; `100` produces\na rectangle equal to `outer`.\n\n# Examples\n\n```\nuse ratatui::layout::Rect;\nuse harness_tui_kit::util::layout::percentage_rect;\n\nlet outer = Rect::new(0, 0, 100, 50);\nlet r = percentage_rect(50, 50, outer);\nassert_eq!(r, Rect::new(25, 12, 50, 25));\n```"
            },
            {
              "name": "::pad_rect",
              "line": 87,
              "signature": "#[must_use]\npub fn pad_rect(rect: Rect, horizontal: u16, vertical: u16) -> Rect;",
              "documentation": "Shrink a rectangle by the given horizontal and vertical padding.\n\n`horizontal` is removed from each side (left and right), and `vertical`\nfrom the top and bottom. If the padding is too large for the rectangle,\nthe result collapses to a zero-area rectangle at the center.\n\n# Examples\n\n```\nuse ratatui::layout::Rect;\nuse harness_tui_kit::util::layout::pad_rect;\n\nlet r = Rect::new(10, 10, 40, 20);\nlet padded = pad_rect(r, 5, 3);\nassert_eq!(padded, Rect::new(15, 13, 30, 14));\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/live_wrap.rs",
          "sha256": "82c0b78378060ce6aacc64b104f197c5671690d829a163fa850c01b41c7a81f4",
          "artifactSha256": "d34716283b08674d230568477162c7b802ebef0feb2a99422c5d51c36f28b3d7",
          "url": "/reference/source/harness-tui-kit/src/util/live_wrap.rs.txt",
          "declarations": [
            {
              "name": "::wrap_unicode",
              "line": 34,
              "signature": "#[must_use]\npub fn wrap_unicode(text: &str, width: usize, hanging_indent: &str) -> Vec<String>;",
              "documentation": "Wrap `text` to `width` cells, supporting unicode width and an\noptional hanging indent applied to continuation rows.\n\n`hanging_indent` is prepended to every line *after the first*. It\ncounts toward the wrap budget \u2014 a 4-cell indent in a 20-cell\nwidth leaves 16 cells for body text on continuation rows.\n\n`width` of 0 returns a single line containing the original text\nverbatim (the caller is responsible for not rendering an empty\narea, but we don't want to panic)."
            },
            {
              "name": "::display_width",
              "line": 112,
              "signature": "#[must_use]\npub fn display_width(s: &str) -> usize;",
              "documentation": "Total cell width of a string, treating CJK and double-width emoji\nas 2 cells and ignoring zero-width modifiers."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/mod.rs",
          "sha256": "bcb0e96b7fbc933d52315f5953a708946416f1a6dd0e85958fe0a7fbea11a669",
          "artifactSha256": "2dfdc73ea41ede8c5d478dc7defc2b16368e7f52e55f47d0729aa21b1ed00586",
          "url": "/reference/source/harness-tui-kit/src/util/mod.rs.txt",
          "declarations": [
            {
              "name": "color",
              "line": 2,
              "signature": "pub mod color;",
              "documentation": "Utility functions for color, text, layout, and input sanitization."
            },
            {
              "name": "layout",
              "line": 3,
              "signature": "pub mod layout;",
              "documentation": ""
            },
            {
              "name": "live_wrap",
              "line": 4,
              "signature": "pub mod live_wrap;",
              "documentation": ""
            },
            {
              "name": "sanitize",
              "line": 5,
              "signature": "pub mod sanitize;",
              "documentation": ""
            },
            {
              "name": "text",
              "line": 6,
              "signature": "pub mod text;",
              "documentation": ""
            },
            {
              "name": "unified_diff",
              "line": 7,
              "signature": "pub mod unified_diff;",
              "documentation": ""
            },
            {
              "name": "word_diff",
              "line": 8,
              "signature": "pub mod word_diff;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/sanitize.rs",
          "sha256": "6d37bca626eaa8eee47687bf4187cb5c321be59ce43e96bd63d80b4b6fabe7c6",
          "artifactSha256": "4266c351c2fa05e48cf7faa1a46a82d46eaf688ca14f1ec3ebfbe116920b601d",
          "url": "/reference/source/harness-tui-kit/src/util/sanitize.rs.txt",
          "declarations": [
            {
              "name": "::sanitize",
              "line": 58,
              "signature": "#[must_use]\npub fn sanitize(input: &str) -> String;",
              "documentation": "Sanitize untrusted text for terminal rendering.\n\nStrips the following dangerous sequences:\n- ANSI CSI sequences (`\\x1b[...m`, `\\x1b[...H`, etc.)\n- OSC sequences (`\\x1b]...ST` including hyperlinks, title changes)\n- APC, DCS, PM, SOS sequences (`\\x1b_`, `\\x1bP`, `\\x1b^`, `\\x1bX`)\n- Single-character C1 controls (0x80..0x9F)\n- Null bytes (`\\0`)\n- ASCII control characters (0x00..0x1F) except tab (`\\t`), newline (`\\n`),\n  and carriage return (`\\r`)\n- BEL character (`\\x07`)\n\nPreserves all valid Unicode including emoji, CJK, and combining characters.\n\nInput exceeding [`MAX_SANITIZED_LEN`] bytes is truncated.\n\n# Examples\n\n```\nuse harness_tui_kit::util::sanitize::sanitize;\n\n// Strips ANSI color codes\nassert_eq!(sanitize(\"\\x1b[31mred\\x1b[0m\"), \"red\");\n\n// Strips terminal title injection\nassert_eq!(sanitize(\"\\x1b]0;evil title\\x07normal\"), \"normal\");\n\n// Preserves Unicode\nassert_eq!(sanitize(\"\u3053\u3093\u306b\u3061\u306f \ud83c\udf0d\"), \"\u3053\u3093\u306b\u3061\u306f \ud83c\udf0d\");\n```"
            },
            {
              "name": "::sanitize_truncated",
              "line": 147,
              "signature": "#[must_use]\npub fn sanitize_truncated(input: &str, max_len: usize) -> String;",
              "documentation": "Sanitize text and enforce a maximum display length.\n\nAfter sanitizing, if the result exceeds `max_len` characters, it is truncated\nand an ellipsis (\"...\") is appended (if space permits).\n\n# Examples\n\n```\nuse harness_tui_kit::util::sanitize::sanitize_truncated;\n\nassert_eq!(sanitize_truncated(\"hello world\", 8), \"hello...\");\nassert_eq!(sanitize_truncated(\"hi\", 10), \"hi\");\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/text.rs",
          "sha256": "31cf27f67199a260471dca083b93f04e6194df0167308b0b17d20d637bb9db22",
          "artifactSha256": "2fd113ea13c5f3b43a9355b9ae7cd21babf27edf76d94295e0c1519acc015d7c",
          "url": "/reference/source/harness-tui-kit/src/util/text.rs.txt",
          "declarations": [
            {
              "name": "::display_width",
              "line": 36,
              "signature": "#[must_use]\npub fn display_width(s: &str) -> usize;",
              "documentation": "Return the display width of a string in terminal columns.\n\nAccounts for wide characters (e.g., CJK ideographs, emoji) that occupy\ntwo columns. Control characters and zero-width joiners are ignored per\nthe Unicode UAX #11 rules as implemented by the `unicode-width` crate.\n\n# Examples\n\n```\nuse harness_tui_kit::util::text::display_width;\n\nassert_eq!(display_width(\"abc\"), 3);\nassert_eq!(display_width(\"\"), 0);\n```"
            },
            {
              "name": "::truncate_with_ellipsis",
              "line": 60,
              "signature": "#[must_use]\npub fn truncate_with_ellipsis(s: &str, max_width: usize) -> String;",
              "documentation": "Truncate a string to fit within `max_width` terminal columns.\n\nIf the string fits, it is returned unchanged. Otherwise it is truncated\nand an ellipsis (`...`) is appended so the total display width does not\nexceed `max_width`.\n\nIf `max_width` is less than 4, the string is simply truncated to\n`max_width` characters with no ellipsis (there is not enough room for\nmeaningful text plus `...`).\n\n# Examples\n\n```\nuse harness_tui_kit::util::text::truncate_with_ellipsis;\n\nassert_eq!(truncate_with_ellipsis(\"Hello, world!\", 8), \"Hello...\");\nassert_eq!(truncate_with_ellipsis(\"Hi\", 10), \"Hi\");\nassert_eq!(truncate_with_ellipsis(\"abcdef\", 3), \"abc\");\n```"
            },
            {
              "name": "::wrap_text",
              "line": 92,
              "signature": "#[must_use]\npub fn wrap_text(text: &str, max_width: usize) -> Vec<String>;",
              "documentation": "Word-wrap text to fit within `max_width` terminal columns.\n\nRespects existing newlines in the input. Words that are longer than\n`max_width` are broken at the column boundary. Empty input returns\na single empty string. A `max_width` of zero returns a single empty string.\n\n# Examples\n\n```\nuse harness_tui_kit::util::text::wrap_text;\n\nassert_eq!(wrap_text(\"hello world\", 6), vec![\"hello\", \"world\"]);\nassert_eq!(wrap_text(\"a\\nb\", 80), vec![\"a\", \"b\"]);\n```"
            },
            {
              "name": "::line_count",
              "line": 179,
              "signature": "#[must_use]\npub fn line_count(text: &str, width: usize) -> usize;",
              "documentation": "Count the number of wrapped lines a text string would produce at the\ngiven column width.\n\nEquivalent to `wrap_text(text, width).len()` but semantically clearer\nat call sites that only need the count.\n\n# Examples\n\n```\nuse harness_tui_kit::util::text::line_count;\n\nassert_eq!(line_count(\"short\", 80), 1);\nassert_eq!(line_count(\"hello world\", 6), 2);\nassert_eq!(line_count(\"a\\nb\\nc\", 80), 3);\n```"
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/unified_diff.rs",
          "sha256": "6401a7631c850eb294a0a077373f568ed07966980aba496030058ccf3349b0cb",
          "artifactSha256": "00c9e6259d512cefdb8d0e99214cb1e84f606b49b58a31b832b879cc3038cac2",
          "url": "/reference/source/harness-tui-kit/src/util/unified_diff.rs.txt",
          "declarations": [
            {
              "name": "::DiffFile",
              "line": 18,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct DiffFile {\n/// Display path. Prefers the `+++ b/<path>` side; falls back to\n\n/// the `--- a/<path>` side; falls back to \"(unknown)\".\n\npub path: String,\n/// Lines belonging to this file (`@@`, ` `, `+`, `-` rows).\n\npub lines: Vec<DiffLine>\n}",
              "documentation": "One file's worth of unified-diff content."
            },
            {
              "name": "::DiffFile::additions",
              "line": 29,
              "signature": "#[must_use]\npub fn additions(&self) -> usize;",
              "documentation": "Number of added lines in this file."
            },
            {
              "name": "::DiffFile::deletions",
              "line": 38,
              "signature": "#[must_use]\npub fn deletions(&self) -> usize;",
              "documentation": "Number of removed lines in this file."
            },
            {
              "name": "::parse_unified_diff",
              "line": 51,
              "signature": "#[must_use]\npub fn parse_unified_diff(source: &str) -> Vec<DiffFile>;",
              "documentation": "Parse a unified-diff source string into a list of files.\n\nEmpty input or input that contains no recognizable diff markers\nreturns an empty vector."
            }
          ]
        },
        {
          "path": "harness-tui-kit/src/util/word_diff.rs",
          "sha256": "ae917b53b256cab54c7a03bbc06596f6d1e48be6deb31a560be6e927122f6c95",
          "artifactSha256": "a1e2f35cb527ed7fa878eb8d8e44a982c775a8507e02fea159c00d505c4fb1cc",
          "url": "/reference/source/harness-tui-kit/src/util/word_diff.rs.txt",
          "declarations": [
            {
              "name": "::WordDiff",
              "line": 18,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct WordDiff {\n/// Number of leading characters that match exactly.\n\npub prefix_chars: usize,\n/// Number of trailing characters that match exactly.\n\npub suffix_chars: usize,\n/// The changed-region character range on the old line:\n\n/// `prefix_chars..(old_len - suffix_chars)`.\n\npub old_changed_range: std::ops::Range<usize>,\n/// The changed-region character range on the new line:\n\n/// `prefix_chars..(new_len - suffix_chars)`.\n\npub new_changed_range: std::ops::Range<usize>\n}",
              "documentation": "Highlight spans for a single side of a changed pair. Byte offsets\nare character (not byte) counts to keep callers Unicode-safe."
            },
            {
              "name": "::word_diff",
              "line": 34,
              "signature": "#[must_use]\npub fn word_diff(old: &str, new: &str) -> WordDiff;",
              "documentation": "Compute character-level prefix/suffix overlap between `old` and\n`new`. Both strings are walked by Unicode scalar."
            },
            {
              "name": "::ChangedPair",
              "line": 68,
              "signature": "#[derive(Debug, Clone, PartialEq, Eq)]\npub struct ChangedPair {\n/// Index of the removed line.\n\npub removed_idx: usize,\n/// Index of the added line.\n\npub added_idx: usize,\n/// Word-level diff between the two contents.\n\npub word_diff: WordDiff\n}",
              "documentation": "One adjacent removed/added line pair detected in a unified diff.\nIndices are into the original `&[DiffLine]` slice."
            },
            {
              "name": "::pair_changed_lines",
              "line": 82,
              "signature": "#[must_use]\npub fn pair_changed_lines(lines: &[DiffLine]) -> Vec<ChangedPair>;",
              "documentation": "Walk a unified-diff slice and pair every adjacent\n`Removed` \u2192 `Added` row. Pairs that aren't immediately\nadjacent are skipped \u2014 that matches Codex's heuristic and avoids\npainting unrelated edits as \"modified\"."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/agent",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Agent abstractions, tool loops, workflows, sub-agent delegation, and messaging for the Forge SDK",
      "manifest": "forge-ts/packages/forge-agent/package.json",
      "manifestSha256": "007384f14cd43f4c6f5ef9244bec5fb5c15d1906608e2b08f3e259e2ff67fbff",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/agent",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-agent/src/agent.ts",
          "sha256": "5160b08ae8f13cf08105c05b2fc067c5a7e62f1f126f988164e264a3bf38378c",
          "artifactSha256": "466bc2fa700fa800de105f4c342f8b9f55763d19e91cf986942713fb3b314911",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/agent.ts.txt",
          "declarations": [
            {
              "name": "AgentConfig",
              "line": 43,
              "signature": "export interface AgentConfig {\n  /** A human-readable name for this agent. */\n  readonly name: string;\n  /** The language model to use for inference. */\n  readonly model: LanguageModel;\n  /** Optional system prompt. */\n  readonly systemPrompt?: string;\n  /** Maximum tool loop iterations. Defaults to 10. */\n  readonly maxIterations?: number;\n  /** Generation options for model calls. */\n  readonly generateOptions?: GenerateOptions;\n  /** The approval handler for tool execution. Defaults to AutoApprove. */\n  readonly approvalHandler?: ApprovalHandler;\n  /** Custom stop conditions for the tool loop. */\n  readonly stopConditions?: readonly AgentStopCondition[];\n  /** Optional agent DID for audit trail integration. */\n  readonly agentDid?: string;\n}",
              "documentation": "Configuration for creating a ToolLoopAgent.\n\nANVIL Spec section 7.1."
            },
            {
              "name": "ToolLoopAgent",
              "line": 94,
              "signature": "export class ToolLoopAgent {\n  readonly name: string;\n  readonly agentDid: string | undefined;\n  readonly registry: ToolRegistry;\n  readonly healthProfile: HealthProfile;\n  readonly lifecycle: LifecycleManager;\n  constructor(config: AgentConfig);\n  async initialize(): Promise<void>;\n  async run(userMessage: string): Promise<ToolLoopOutput>;\n  async pause(): Promise<void>;\n  async resume(): Promise<void>;\n  async terminate(): Promise<void>;\n  get isRunning(): boolean;\n  get isTerminated(): boolean;\n}",
              "documentation": "A tool-loop agent that manages its own lifecycle, tool registry, and health profile.\n\nThe ToolLoopAgent is the primary agent abstraction in Forge. It:\n- Manages the ANVIL lifecycle state machine (Initializing -> Ready -> Running -> ...).\n- Maintains a tool registry for available tools.\n- Tracks health metrics (inference calls, tool invocations, errors).\n- Executes the tool loop when `run()` is called.\n\nANVIL Spec section 7.1: Agent Execution.\nANVIL Spec section 13.2: Lifecycle State Machine."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-agent/src/error.ts",
          "sha256": "b9f015e7e6f75d48dfd49027470d71711ecd33fdc7e8ae512fa755a349e0d2fc",
          "artifactSha256": "7f71c698d1279de36b5cfb8c018bd16aafa14f028eb1baf14ea11c12cec2d314",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeAgentErrorCode = {",
              "line": 17,
              "signature": "export const ForgeAgentErrorCode /* type inferred in source */;",
              "documentation": "Error types for the `@forge-sdk/agent` package.\n\nAll errors are actionable with full context: agent DIDs, tool names,\nworkflow IDs, and specific reasons for failure. This enables operators\nand developers to diagnose agent execution failures without guessing.\n\nANVIL Spec section 7.1 -- Agent Execution.\nANVIL Spec section 11.2 -- Sub-Agent Delegation.\nError code enumeration for `@forge-sdk/agent`."
            },
            {
              "name": "ForgeAgentErrorCodeType",
              "line": 39,
              "signature": "export type ForgeAgentErrorCodeType =\n  (typeof ForgeAgentErrorCode)[keyof typeof ForgeAgentErrorCode];",
              "documentation": "Error code type."
            },
            {
              "name": "ForgeAgentError",
              "line": 59,
              "signature": "export class ForgeAgentError extends Error {\n  public readonly code: ForgeAgentErrorCodeType;\n  static maxIterationsExceeded(\n    maxIterations: number,\n    lastToolNames: readonly string[]\n  ): ForgeAgentError;\n  static toolNotFound(toolName: string, available: readonly string[]): ForgeAgentError;\n  static toolExecutionFailed(toolName: string, reason: string): ForgeAgentError;\n  static modelError(reason: string): ForgeAgentError;\n  static workflowFailed(\n    workflowId: string,\n    stepIndex: number,\n    reason: string\n  ): ForgeAgentError;\n  static delegationFailed(parentDid: string, reason: string): ForgeAgentError;\n  static invalidState(\n    currentState: string,\n    requiredState: string,\n    operation: string\n  ): ForgeAgentError;\n  static channelError(reason: string): ForgeAgentError;\n  static core(cause: string): ForgeAgentError;\n  isMaxIterationsExceeded(): boolean;\n  isToolNotFound(): boolean;\n  isWorkflowFailed(): boolean;\n  isDelegationFailed(): boolean;\n}",
              "documentation": "Error class for Forge agent operations.\n\nEach variant carries enough context for operators to diagnose the issue\nwithout access to internal state."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-agent/src/index.ts",
          "sha256": "5b2ad1ec8450d18ef3a2d7fc3c8e5b2dd5b941ffbf9c817f136af89e275a8f90",
          "artifactSha256": "f463da14f96f4b7a1d5bd9a3450d2bd7bd314fa724a1186675a6211feeb3d6ce",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { ForgeAgentError, ForgeAgentErrorCode, type ForgeAgentErrorCodeType } from './error.js';",
              "line": 45,
              "signature": "export { ForgeAgentError, ForgeAgentErrorCode, type ForgeAgentErrorCodeType } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 48,
              "signature": "export {\n  AgentStopReason,\n  type AgentStopCondition,\n  type LoopContext,\n  maxIterations,\n  maxTotalTokens,\n  modelStopsNaturally,\n  customStop,\n  evaluateStopConditions,\n} from './loop-control.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 60,
              "signature": "export {\n  type ToolLoopConfig,\n  type ToolLoopIteration,\n  type ToolLoopOutput,\n  runToolLoop,\n} from './tool-loop.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 68,
              "signature": "export {\n  type AgentConfig,\n  ToolLoopAgent,\n} from './agent.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 74,
              "signature": "export {\n  type WorkflowStep,\n  type WorkflowResult,\n  type RouterFn,\n  SequentialWorkflow,\n  ParallelWorkflow,\n  RouterWorkflow,\n} from './workflow.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 84,
              "signature": "export {\n  type SubAgentConfig,\n  createSubAgent,\n  runSubAgentTask,\n} from './subagent.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 91,
              "signature": "export {\n  type AgentMessage,\n  MessageType,\n  type TypedMessage,\n  AgentChannel,\n  createAgentMessage,\n  createTypedMessage,\n} from './messaging.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-agent/src/loop-control.ts",
          "sha256": "0c956a76d40aa30e8ff6a533c84527ce3e0d5e88a03667444c14f20d69cc7d95",
          "artifactSha256": "2aabbd72da869a2a13fca20952859001a3477c349a58d355569a1550b924c185",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/loop-control.ts.txt",
          "declarations": [
            {
              "name": "export const AgentStopReason = {",
              "line": 20,
              "signature": "export const AgentStopReason /* type inferred in source */;",
              "documentation": "Stop condition types for the tool loop.\n\nANVIL Spec section 7.1."
            },
            {
              "name": "AgentStopReason",
              "line": 32,
              "signature": "export type AgentStopReason = (typeof AgentStopReason)[keyof typeof AgentStopReason];",
              "documentation": "Agent stop reason type."
            },
            {
              "name": "AgentStopCondition",
              "line": 48,
              "signature": "export interface AgentStopCondition {\n  /** A human-readable name for this stop condition. */\n  readonly name: string;\n\n  /**\n   * Evaluates the stop condition against the current loop context.\n   *\n   * @param context - The current loop iteration context.\n   * @returns `true` if the loop should stop.\n   */\n  check(context: LoopContext): boolean;\n}",
              "documentation": "A stop condition that evaluates after each tool loop iteration.\n\nANVIL Spec section 7.1: The tool loop MUST terminate when a stop\ncondition is met. Stop conditions are checked after every iteration."
            },
            {
              "name": "LoopContext",
              "line": 64,
              "signature": "export interface LoopContext {\n  /** The current iteration number (0-indexed). */\n  readonly iteration: number;\n  /** The cumulative token usage across all iterations. */\n  readonly totalUsage: Usage;\n  /** The finish reason from the last model call. */\n  readonly lastFinishReason: FinishReason;\n  /** The number of tool calls in the last iteration. */\n  readonly lastToolCallCount: number;\n}",
              "documentation": "Context passed to stop conditions after each tool loop iteration."
            },
            {
              "name": "maxIterations",
              "line": 86,
              "signature": "export function maxIterations(max: number): AgentStopCondition;",
              "documentation": "Creates a stop condition that triggers after N iterations."
            },
            {
              "name": "maxTotalTokens",
              "line": 104,
              "signature": "export function maxTotalTokens(max: number): AgentStopCondition;",
              "documentation": "Creates a stop condition that triggers when total tokens exceed a limit."
            },
            {
              "name": "modelStopsNaturally",
              "line": 124,
              "signature": "export function modelStopsNaturally(): AgentStopCondition;",
              "documentation": "Creates a stop condition that triggers when the model produces no tool calls.\n\nThis is the most common stop condition -- the loop ends when the model\nprovides a natural text response without requesting any tool invocations."
            },
            {
              "name": "customStop",
              "line": 143,
              "signature": "export function customStop(\n  name: string,\n  predicate: (context: LoopContext) => boolean\n): AgentStopCondition;",
              "documentation": "Creates a custom stop condition from a predicate function."
            },
            {
              "name": "evaluateStopConditions",
              "line": 160,
              "signature": "export function evaluateStopConditions(\n  context: LoopContext,\n  conditions: readonly AgentStopCondition[]\n): { reason: AgentStopReason; conditionName: string } | undefined;",
              "documentation": "Determines the agent stop reason from the loop context.\n\nChecks stop conditions in priority order and returns the reason for\nthe first condition that triggers."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-agent/src/messaging.ts",
          "sha256": "f8f29bcc0045c4ccd0bbfa8f2c4d855d955b398354270db1bd60a7fdaff20ad0",
          "artifactSha256": "2010dfb42ed76e184a07a0b4a9a5cf44277692f8740ac3430e370fadc1a3e99a",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/messaging.ts.txt",
          "declarations": [
            {
              "name": "AgentMessage",
              "line": 34,
              "signature": "export interface AgentMessage {\n  /** Unique message identifier. */\n  readonly id: string;\n  /** The OAS DID of the sending agent. */\n  readonly senderDid: string;\n  /** The OAS DID of the recipient agent. */\n  readonly recipientDid: string;\n  /** The message payload (arbitrary JSON-serializable data). */\n  readonly payload: unknown;\n  /** The UTC timestamp when the message was created. */\n  readonly timestamp: Timestamp;\n}",
              "documentation": "A message exchanged between agents.\n\nEvery message carries sender and recipient DIDs for audit trail\nintegration and accountability.\n\nANVIL Spec section 12.1."
            },
            {
              "name": "export const MessageType = {",
              "line": 52,
              "signature": "export const MessageType /* type inferred in source */;",
              "documentation": "Message types for structured inter-agent communication.\n\nANVIL Spec section 12.1."
            },
            {
              "name": "MessageType",
              "line": 64,
              "signature": "export type MessageType = (typeof MessageType)[keyof typeof MessageType];",
              "documentation": "Message type value."
            },
            {
              "name": "TypedMessage",
              "line": 78,
              "signature": "export interface TypedMessage extends AgentMessage {\n  /** The message type discriminator. */\n  readonly messageType: MessageType;\n  /** Optional correlation ID for request-response pairing. */\n  readonly correlationId?: string;\n}",
              "documentation": "A typed message with a message type discriminator."
            },
            {
              "name": "AgentChannel",
              "line": 107,
              "signature": "export class AgentChannel {\n  constructor(capacity: number = 1000);\n  send(message: AgentMessage): void;\n  receive(): AgentMessage | undefined;\n  drain(): AgentMessage[];\n  get size(): number;\n  get isEmpty(): boolean;\n  get capacity(): number;\n}",
              "documentation": "A simple in-memory message channel between two agents.\n\nMessages are queued in FIFO order and can be consumed one at a time\nor drained in batch. The channel has a configurable capacity limit\nto prevent unbounded memory growth.\n\nANVIL Spec section 12.1: Inter-agent communication channels."
            },
            {
              "name": "createAgentMessage",
              "line": 207,
              "signature": "export function createAgentMessage(\n  senderDid: string,\n  recipientDid: string,\n  payload: unknown\n): AgentMessage;",
              "documentation": "Creates an AgentMessage with auto-generated ID and timestamp."
            },
            {
              "name": "createTypedMessage",
              "line": 231,
              "signature": "export function createTypedMessage(\n  senderDid: string,\n  recipientDid: string,\n  payload: unknown,\n  messageType: MessageType,\n  correlationId?: string\n): TypedMessage;",
              "documentation": "Creates a TypedMessage with auto-generated ID and timestamp."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-agent/src/subagent.ts",
          "sha256": "30c60fd0938dc0eb99383880558d8a791b3eb371ecd3ef1dd2a2bc74c0dad444",
          "artifactSha256": "e2ea6ccee3609100bb81f530f9b7d577a854e5e8bf95d1614cbfcb3bfb79c448",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/subagent.ts.txt",
          "declarations": [
            {
              "name": "SubAgentConfig",
              "line": 35,
              "signature": "export interface SubAgentConfig {\n  /** A human-readable name for the sub-agent. */\n  readonly name: string;\n  /** The language model for the sub-agent (may differ from parent). */\n  readonly model: LanguageModel;\n  /** Optional system prompt for the sub-agent. */\n  readonly systemPrompt?: string;\n  /** Maximum tool loop iterations. Defaults to 10. */\n  readonly maxIterations?: number;\n  /** Generation options for the sub-agent's model calls. */\n  readonly generateOptions?: GenerateOptions;\n  /** Approval handler for the sub-agent. Defaults to parent's handler. */\n  readonly approvalHandler?: ApprovalHandler;\n  /** Custom stop conditions for the sub-agent. */\n  readonly stopConditions?: readonly AgentStopCondition[];\n  /**\n   * Tool names to grant to the sub-agent. Must be a subset of the\n   * parent's registered tools.\n   *\n   * ANVIL Spec section 11.3: child_capabilities subset_of parent_capabilities.\n   */\n  readonly allowedTools?: readonly string[];\n  /** Optional sub-agent DID. */\n  readonly agentDid?: string;\n}",
              "documentation": "Configuration for creating a sub-agent from a parent agent.\n\nANVIL Spec section 11.2."
            },
            {
              "name": "createSubAgent",
              "line": 91,
              "signature": "export function createSubAgent(\n  parent: ToolLoopAgent,\n  config: SubAgentConfig\n): ToolLoopAgent;",
              "documentation": "Creates a sub-agent from a parent agent with a narrowed set of tools.\n\nThe sub-agent receives only the tools specified in `config.allowedTools`.\nIf `allowedTools` is not specified, the sub-agent receives all of the\nparent's tools.\n\nANVIL Spec section 11.2: Sub-Agent Delegation.\nANVIL Spec section 11.3: The sub-agent's capabilities MUST be a subset\nof the parent's capabilities. Escalation is always denied."
            },
            {
              "name": "runSubAgentTask",
              "line": 179,
              "signature": "export async function runSubAgentTask(\n  parent: ToolLoopAgent,\n  config: SubAgentConfig,\n  message: string\n): Promise<import('./tool-loop.js').ToolLoopOutput>;",
              "documentation": "Runs a sub-agent task: creates a sub-agent, initializes it, runs the\nmessage, and terminates it, all in one call.\n\nThis is a convenience function for fire-and-forget delegation patterns."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-agent/src/tool-loop.ts",
          "sha256": "8cc5f367a14480d640e77a45ffc1aa3e657531eb1018a5b0557d27833e1ca5ed",
          "artifactSha256": "e50b26583583d8fe32591511e4461d74f528937077daafb4bf01b44d9b0f55fb",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/tool-loop.ts.txt",
          "declarations": [
            {
              "name": "ToolLoopConfig",
              "line": 55,
              "signature": "export interface ToolLoopConfig {\n  /** The language model to use for inference. */\n  readonly model: LanguageModel;\n  /** The tool registry containing available tools and their executors. */\n  readonly registry: ToolRegistry;\n  /** Optional system prompt prepended to every conversation. */\n  readonly systemPrompt?: string;\n  /** Maximum number of tool loop iterations. Defaults to 10. */\n  readonly maxIterations?: number;\n  /** Generation options for model calls. */\n  readonly generateOptions?: GenerateOptions;\n  /** The approval handler for tool execution. Defaults to AutoApprove. */\n  readonly approvalHandler?: ApprovalHandler;\n  /** Custom stop conditions evaluated after each iteration. */\n  readonly stopConditions?: readonly AgentStopCondition[];\n  /** The health profile to update with tool invocations and inference calls. */\n  readonly healthProfile?: HealthProfile;\n}",
              "documentation": "Configuration for a tool loop execution.\n\nANVIL Spec section 7.1."
            },
            {
              "name": "ToolLoopIteration",
              "line": 79,
              "signature": "export interface ToolLoopIteration {\n  /** The iteration index (0-based). */\n  readonly index: number;\n  /** The model's response message for this iteration. */\n  readonly assistantMessage: ModelMessage;\n  /** The tool calls requested by the model (empty if none). */\n  readonly toolCalls: readonly ToolCall[];\n  /** The tool results from executing the tool calls (empty if no calls). */\n  readonly toolResults: readonly ToolResult[];\n  /** Token usage for this iteration. */\n  readonly usage: Usage;\n}",
              "documentation": "The output of a single tool loop iteration.\n\nANVIL Spec section 7.1."
            },
            {
              "name": "ToolLoopOutput",
              "line": 104,
              "signature": "export interface ToolLoopOutput {\n  /** The final text response from the model. */\n  readonly finalText: string;\n  /** All iterations executed during the loop. */\n  readonly iterations: readonly ToolLoopIteration[];\n  /** The total token usage across all iterations. */\n  readonly totalUsage: Usage;\n  /** The reason the loop stopped. */\n  readonly stopReason: string;\n  /** The complete conversation history including all messages. */\n  readonly messages: readonly ModelMessage[];\n}",
              "documentation": "The output of a complete tool loop execution.\n\nANVIL Spec section 7.1."
            },
            {
              "name": "runToolLoop",
              "line": 148,
              "signature": "export async function runToolLoop(\n  config: ToolLoopConfig,\n  userMessage: string\n): Promise<ToolLoopOutput>;",
              "documentation": "Runs the tool loop: the core ANVIL agent execution pattern.\n\nThe loop repeatedly calls the model, executes any requested tools,\nand appends results to the conversation until a stop condition triggers.\n\nANVIL Spec section 7.1: The agent execution loop MUST:\n- Call the model with the full conversation context and available tools.\n- Execute tool calls through the approval pipeline.\n- Append tool results to the conversation.\n- Repeat until the model stops calling tools or a limit is reached."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-agent/src/workflow.ts",
          "sha256": "fca44a1ad9c288097814295e175f0b0afeb9d65c6cb671778b9f0a7673d839c1",
          "artifactSha256": "ca5aa95f48a65433cb62c0d7e0a7354eff501a0aa19d14439c2ebfa53fdcf2ee",
          "url": "/reference/source/forge-ts/packages/forge-agent/src/workflow.ts.txt",
          "declarations": [
            {
              "name": "WorkflowStep",
              "line": 28,
              "signature": "export interface WorkflowStep {\n  /** The name of the agent that executed this step. */\n  readonly agentName: string;\n  /** The output from the agent's tool loop. */\n  readonly output: ToolLoopOutput;\n  /** The wall-clock duration of this step in milliseconds. */\n  readonly durationMs: number;\n}",
              "documentation": "The result of a single workflow step."
            },
            {
              "name": "WorkflowResult",
              "line": 49,
              "signature": "export interface WorkflowResult {\n  /** The workflow identifier. */\n  readonly workflowId: string;\n  /** All steps executed in the workflow. */\n  readonly steps: readonly WorkflowStep[];\n  /** The total wall-clock duration of the workflow in milliseconds. */\n  readonly totalDurationMs: number;\n}",
              "documentation": "The result of a complete workflow execution."
            },
            {
              "name": "SequentialWorkflow",
              "line": 74,
              "signature": "export class SequentialWorkflow {\n  readonly workflowId: string;\n  constructor(workflowId: string, agents: readonly ToolLoopAgent[]);\n  async run(initialMessage: string): Promise<WorkflowResult>;\n}",
              "documentation": "A sequential workflow that runs agents one after another.\n\nEach agent receives the output text of the previous agent as its input.\nThis enables pipeline-style processing where each stage transforms\nor refines the result.\n\nANVIL Spec section 7.2: Sequential Orchestration."
            },
            {
              "name": "ParallelWorkflow",
              "line": 166,
              "signature": "export class ParallelWorkflow {\n  readonly workflowId: string;\n  constructor(workflowId: string, agents: readonly ToolLoopAgent[]);\n  async run(message: string): Promise<WorkflowResult>;\n}",
              "documentation": "A parallel workflow that runs agents concurrently.\n\nAll agents receive the same input message and execute simultaneously.\nTheir outputs are collected and returned together when all agents complete.\n\nANVIL Spec section 7.2: Parallel Orchestration."
            },
            {
              "name": "RouterFn",
              "line": 256,
              "signature": "export type RouterFn = (\n  message: string,\n  agents: readonly ToolLoopAgent[]\n) => number | Promise<number>;",
              "documentation": "A routing function that selects which agent should handle a message."
            },
            {
              "name": "RouterWorkflow",
              "line": 281,
              "signature": "export class RouterWorkflow {\n  readonly workflowId: string;\n  constructor(\n    workflowId: string,\n    agents: readonly ToolLoopAgent[],\n    router: RouterFn\n  );\n  async run(message: string): Promise<WorkflowResult>;\n}",
              "documentation": "A router workflow that dynamically selects an agent based on the input.\n\nThe router function determines which agent handles each request. This\nenables pattern-matching, intent classification, or model-based routing.\n\nANVIL Spec section 7.2: Router Orchestration."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/auth",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Arsenal capability token integration and tool authorization for the Forge SDK",
      "manifest": "forge-ts/packages/forge-auth/package.json",
      "manifestSha256": "a782e02c223735d4c16f1fa90b6915a0df6622c12f73be3a392379d713bf34aa",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/auth",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-auth/src/capability.ts",
          "sha256": "fa41d8819b1680b5fcae3f0ae4bab5353de32cfff73b1606cb10907b488012e7",
          "artifactSha256": "c25b2f44569d3f5cb598b3eb62cbf7afdd9c7c97a80b534783ee2f30515c1b0f",
          "url": "/reference/source/forge-ts/packages/forge-auth/src/capability.ts.txt",
          "declarations": [
            {
              "name": "AgentCapabilityToken",
              "line": 37,
              "signature": "export interface AgentCapabilityToken {\n  /** The unique token identifier. */\n  readonly id: string;\n  /** The agent DID this token is for. */\n  readonly subject: string;\n  /** The token issuer. */\n  readonly issuer: string;\n  /** The intended audience. */\n  readonly audience: string;\n  /** The granted scopes in 'service:resource:action' format. */\n  readonly scopes: readonly string[];\n  /** The ISO 8601 timestamp when the token was issued. */\n  readonly issuedAt: string;\n  /** The ISO 8601 timestamp after which the token is valid. */\n  readonly notBefore: string;\n  /** The ISO 8601 timestamp at which the token expires. */\n  readonly expiresAt: string;\n  /** Optional delegation constraints. */\n  readonly delegation?: DelegationConstraints;\n}",
              "documentation": "Represents an Arsenal Agent Capability Token.\n\nThis is the TypeScript representation of an Arsenal ACT. In production,\nthe actual token structure comes from the Arsenal SDK. This interface\ndefines the contract that the forge-auth package requires."
            },
            {
              "name": "DelegationConstraints",
              "line": 61,
              "signature": "export interface DelegationConstraints {\n  /** Whether delegation is allowed. */\n  readonly allowDelegation: boolean;\n  /** Optional list of allowed delegate agent IDs. Empty = any agent. */\n  readonly allowedDelegates: readonly string[];\n  /** Minimum TTL reduction in seconds when delegating. */\n  readonly minTtlReduction: number;\n  /** Maximum delegation depth. */\n  readonly maxDelegationDepth: number;\n}",
              "documentation": "Delegation constraints on an ACT."
            },
            {
              "name": "verifyAct",
              "line": 93,
              "signature": "export function verifyAct(act: AgentCapabilityToken): void;",
              "documentation": "Verifies that an Arsenal ACT is structurally valid and time-valid.\n\nPerforms two checks:\n1. Structural validation -- non-empty scopes, valid fields.\n2. Time validity -- not expired, not-before has passed.\n\nThis does NOT verify cryptographic signatures. Signature verification\nis the Arsenal crypto layer's responsibility."
            },
            {
              "name": "extractScopes",
              "line": 147,
              "signature": "export function extractScopes(act: AgentCapabilityToken): string[];",
              "documentation": "Extracts all granted scope strings from an Arsenal ACT.\n\nReturns the scopes as an array of strings in 'service:resource:action' format.\nDoes NOT validate the token; call `verifyAct` first."
            },
            {
              "name": "actAllowsScope",
              "line": 174,
              "signature": "export function actAllowsScope(act: AgentCapabilityToken, scope: string): boolean;",
              "documentation": "Checks whether an Arsenal ACT grants a specific scope.\n\nFirst verifies the token is valid, then checks if any of the token's\nscopes imply the requested scope. Wildcard scopes (e.g., 'forge:*:*')\nmatch specific scopes (e.g., 'forge:tool.search:execute')."
            },
            {
              "name": "scopeImplies",
              "line": 200,
              "signature": "export function scopeImplies(granted: string, requested: string): boolean;",
              "documentation": "Checks whether a granted scope implies a requested scope.\n\nSupports wildcard matching at each component position:\n- 'forge:*:*' implies 'forge:tool.search:execute'\n- '*:*:*' implies everything\n- 'forge:tool.search:execute' implies only itself"
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-auth/src/delegation.ts",
          "sha256": "850875172e52f836506516c11afa2d4b7dbeab1e657d75a8c232f1c029f53527",
          "artifactSha256": "a4d9b5d9ad28cdcd8b6b5814ae4dddfda3d8834525574a0a4ef934d2fb4d6eac",
          "url": "/reference/source/forge-ts/packages/forge-auth/src/delegation.ts.txt",
          "declarations": [
            {
              "name": "DelegationRequest",
              "line": 35,
              "signature": "export interface DelegationRequest {\n  /** The parent agent's Arsenal ACT. */\n  readonly parentAct: AgentCapabilityToken;\n  /** The parent agent's OAS DID. */\n  readonly parentDid: string;\n  /** The child agent's OAS DID. */\n  readonly childDid: string;\n  /** The scopes requested for the child agent. Must be a subset of the parent's. */\n  readonly requestedScopes: readonly string[];\n}",
              "documentation": "A request to delegate capabilities from a parent agent to a child agent.\n\nANVIL Spec section 11.3."
            },
            {
              "name": "DelegationResult",
              "line": 49,
              "signature": "export interface DelegationResult {\n  /** The child's scopes (verified subset of parent). */\n  readonly scopes: readonly string[];\n  /** The computed child TTL in seconds. */\n  readonly ttlSeconds: number;\n  /** The parent's DID for provenance. */\n  readonly parentDid: string;\n  /** The child's DID. */\n  readonly childDid: string;\n}",
              "documentation": "The result of a successful delegation."
            },
            {
              "name": "delegateCapabilities",
              "line": 88,
              "signature": "export function delegateCapabilities(request: DelegationRequest): DelegationResult;",
              "documentation": "Delegates capabilities from a parent agent to a child agent.\n\nEnforces all delegation constraints defined in ANVIL Spec section 11.3:\n\n1. Parent ACT validity -- not expired, structurally sound.\n2. Scope narrowing -- child scopes must be a subset of parent scopes.\n3. Delegation permission -- parent ACT must allow delegation.\n4. TTL reduction -- child's TTL is shorter than parent's remaining TTL."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-auth/src/error.ts",
          "sha256": "176c1b1ab4bcf83be292c873d98b7ca7ae9f61cc02fa5cf1b8cabd36467e212c",
          "artifactSha256": "4db2957274044d3c7b2c956fe78d1ebc3df7f03a15acbeee4c57ab87f4b87192",
          "url": "/reference/source/forge-ts/packages/forge-auth/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeAuthErrorCode = {",
              "line": 17,
              "signature": "export const ForgeAuthErrorCode /* type inferred in source */;",
              "documentation": "Error types for the `@forge-sdk/auth` package.\n\nAll errors are actionable with full context: agent DIDs, scope names,\ntoken IDs, and specific reasons for denial. This enables operators and\ndevelopers to diagnose authorization failures without guessing.\n\nANVIL Spec section 8.7 -- Tool Authorization.\nANVIL Spec section 11.3 -- Capability Delegation.\nError code enumeration for `@forge-sdk/auth`."
            },
            {
              "name": "ForgeAuthErrorCodeType",
              "line": 26,
              "signature": "export type ForgeAuthErrorCodeType = (typeof ForgeAuthErrorCode)[keyof typeof ForgeAuthErrorCode];",
              "documentation": "Error code type."
            },
            {
              "name": "ForgeAuthError",
              "line": 46,
              "signature": "export class ForgeAuthError extends Error {\n  public readonly code: ForgeAuthErrorCodeType;\n  static tokenExpired(tokenId: string, agentDid: string, expiredAt: string): ForgeAuthError;\n  static insufficientScope(\n    agentDid: string,\n    requiredScope: string,\n    availableScopes: string[]\n  ): ForgeAuthError;\n  static capabilityEscalation(\n    parentDid: string,\n    childDid: string,\n    requested: string,\n    available: string[]\n  ): ForgeAuthError;\n  static delegationDenied(\n    parentDid: string,\n    childDid: string,\n    reason: string\n  ): ForgeAuthError;\n  static invalidToken(reason: string): ForgeAuthError;\n  isExpired(): boolean;\n  isInsufficientScope(): boolean;\n  isCapabilityEscalation(): boolean;\n  isDelegationDenied(): boolean;\n  isInvalidToken(): boolean;\n}",
              "documentation": "Error class for Forge authorization operations.\n\nEach variant carries enough context for operators to diagnose the issue\nwithout access to internal state. Error messages never include private\nkeys or raw token bytes."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-auth/src/index.ts",
          "sha256": "0b1870750696ee9c80238a2be95ef36cef19608269909b7a0f7066d5e140d463",
          "artifactSha256": "562e05d50662e2febb489786723a31e1aa9a541975b87f1ff13b46828b7915a8",
          "url": "/reference/source/forge-ts/packages/forge-auth/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { ForgeAuthError, ForgeAuthErrorCode, type ForgeAuthErrorCodeType } from './error.js';",
              "line": 39,
              "signature": "export { ForgeAuthError, ForgeAuthErrorCode, type ForgeAuthErrorCodeType } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 42,
              "signature": "export {\n  type AgentCapabilityToken,\n  type DelegationConstraints,\n  verifyAct,\n  extractScopes,\n  actAllowsScope,\n  scopeImplies,\n} from './capability.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 52,
              "signature": "export {\n  type ToolAuthorizationRequest,\n  type ToolAuthorizationDecision,\n  ToolAuthorizationDecisionType,\n  authorizeToolInvocation,\n  isAllowed,\n  isDenied,\n  isLegacyMode,\n  buildToolScope,\n} from './tool-auth.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 64,
              "signature": "export {\n  type DelegationRequest,\n  type DelegationResult,\n  delegateCapabilities,\n} from './delegation.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-auth/src/tool-auth.ts",
          "sha256": "0619c0c43191c4314ac126a89a70c281ee7e104ebf3afbd1b03cd5bd2775dc0c",
          "artifactSha256": "43704246cb95723f9d4fe0ebc0604ebd47ab98a02d025cf39e4751ee13288668",
          "url": "/reference/source/forge-ts/packages/forge-auth/src/tool-auth.ts.txt",
          "declarations": [
            {
              "name": "ToolAuthorizationRequest",
              "line": 37,
              "signature": "export interface ToolAuthorizationRequest {\n  /** The OAS DID of the agent requesting tool invocation. */\n  readonly agentDid: string;\n  /** The name of the tool being invoked. */\n  readonly toolName: string;\n  /** The tier classification of the tool. */\n  readonly toolTier: ToolTier;\n  /** The agent's Arsenal ACT, if available. Undefined for legacy mode. */\n  readonly act?: AgentCapabilityToken;\n}",
              "documentation": "A request to authorize a tool invocation.\n\nANVIL Spec section 8.7."
            },
            {
              "name": "export const ToolAuthorizationDecisionType = {",
              "line": 53,
              "signature": "export const ToolAuthorizationDecisionType /* type inferred in source */;",
              "documentation": "Tool authorization decision types.\n\nANVIL Spec section 8.7."
            },
            {
              "name": "ToolAuthorizationDecisionType",
              "line": 60,
              "signature": "export type ToolAuthorizationDecisionType =\n  (typeof ToolAuthorizationDecisionType)[keyof typeof ToolAuthorizationDecisionType];",
              "documentation": "Decision type."
            },
            {
              "name": "ToolAuthorizationDecision",
              "line": 68,
              "signature": "export interface ToolAuthorizationDecision {\n  /** The decision type. */\n  readonly decision: ToolAuthorizationDecisionType;\n  /** The denial reason, if denied. */\n  readonly reason?: string;\n}",
              "documentation": "The result of a tool authorization check.\n\nANVIL Spec section 8.7."
            },
            {
              "name": "isAllowed",
              "line": 83,
              "signature": "export function isAllowed(decision: ToolAuthorizationDecision): boolean;",
              "documentation": "Returns `true` if the decision allows tool invocation.\n\nBoth `Allowed` and `LegacyMode` permit execution."
            },
            {
              "name": "isDenied",
              "line": 96,
              "signature": "export function isDenied(decision: ToolAuthorizationDecision): boolean;",
              "documentation": "Returns `true` if the decision denies tool invocation."
            },
            {
              "name": "isLegacyMode",
              "line": 106,
              "signature": "export function isLegacyMode(decision: ToolAuthorizationDecision): boolean;",
              "documentation": "Returns `true` if operating in legacy mode (no ACT)."
            },
            {
              "name": "buildToolScope",
              "line": 118,
              "signature": "export function buildToolScope(toolName: string): string;",
              "documentation": "Builds the required scope string for a tool invocation.\n\nThe scope format is 'forge:tool.<tool_name>:execute'."
            },
            {
              "name": "authorizeToolInvocation",
              "line": 152,
              "signature": "export function authorizeToolInvocation(\n  request: ToolAuthorizationRequest\n): ToolAuthorizationDecision;",
              "documentation": "Authorizes a tool invocation per ANVIL Spec section 8.7.\n\nThis is the primary authorization gate for all tool invocations:\n\n- Tier 1 (Platform): Always returns Allowed.\n- Tier 2 (Host): Requires ACT scope check. Returns Denied if scope\n  is missing, LegacyMode if no ACT is provided.\n- Tier 3 (Embedded): Always returns Allowed."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/collab",
      "language": "typescript",
      "version": "0.1.0",
      "description": "ANVIL Collaboration Contract: roles, sessions, task delegation, shared context, and interrupts",
      "manifest": "forge-ts/packages/forge-collab/package.json",
      "manifestSha256": "7a493c4bc693200173c52ed2035a4c49b0360edee17186ef6ca30f65b1e61e00",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/collab",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-collab/src/error.ts",
          "sha256": "94621ea65ea54ecc0dfc855253b9195bb89e7f9abf75ebb9d65e5020130744a0",
          "artifactSha256": "03a51b67df872e21fc0404fedb8c45fadb04006340fa45adc25237d630b7fa13",
          "url": "/reference/source/forge-ts/packages/forge-collab/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const CollabErrorCode = {",
              "line": 18,
              "signature": "export const CollabErrorCode /* type inferred in source */;",
              "documentation": "Error types for the forge-collab package.\n\nAll errors are typed, actionable, and include enough context to diagnose\nissues without reading source code.\n\nANVIL Spec section 11 -- Collaboration Contract.\nError codes for collaboration operations.\n\nEach code maps to a specific category of failure in the collaboration\nsession, delegation, context, or interrupt subsystems."
            },
            {
              "name": "CollabErrorCodeType",
              "line": 48,
              "signature": "export type CollabErrorCodeType =\n  (typeof CollabErrorCode)[keyof typeof CollabErrorCode];",
              "documentation": "A collaboration error code value."
            },
            {
              "name": "CollabError",
              "line": 63,
              "signature": "export class CollabError extends Error {\n  readonly code: CollabErrorCodeType;\n  static sessionNotFound(sessionId: string): CollabError;\n  static sessionAlreadyActive(sessionId: string): CollabError;\n  static sessionTimedOut(sessionId: string): CollabError;\n  static invalidSessionTransition(from: string, to: string): CollabError;\n  static notAParticipant(agentDid: string, sessionId: string): CollabError;\n  static taskNotFound(taskId: string): CollabError;\n  static taskAlreadyAssigned(taskId: string, assignee: string): CollabError;\n  static capabilityMismatch(\n    taskType: string,\n    agentDid: string,\n    reason: string\n  ): CollabError;\n  static contextKeyNotFound(key: string): CollabError;\n  static contextPermissionDenied(key: string, agentDid: string): CollabError;\n  static interruptRejected(interruptId: string, reason: string): CollabError;\n  static delegationFailed(reason: string): CollabError;\n  static roleViolation(\n    agentDid: string,\n    role: string,\n    action: string\n  ): CollabError;\n}",
              "documentation": "Error type for collaboration sessions, delegation, context, and interrupts.\n\nEvery instance includes actionable context: what failed, why, and what the\ndeveloper should check."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-collab/src/index.ts",
          "sha256": "0a37e3e7c2fb70ae7cb681fe013ff560fcfcc01fc497aa4b09c08c278be51f2f",
          "artifactSha256": "d43cf0ee51ce1601c0876c79beb35ba6765b7890dc984f712a6730c6df2d7056",
          "url": "/reference/source/forge-ts/packages/forge-collab/src/index.ts.txt",
          "declarations": [
            {
              "name": "export {",
              "line": 22,
              "signature": "export {\n  CollaborationRole,\n  type CollaborationRoleType,\n  SessionState,\n  type SessionStateType,\n  validSessionTransitions,\n  isSessionTerminal,\n  type SessionParticipant,\n  type CollaborationSession,\n  type SessionTransition,\n  TaskPriority,\n  type TaskPriorityType,\n  TaskStatus,\n  type TaskStatusType,\n  type TaskConstraints,\n  defaultTaskConstraints,\n  type DelegatedTask,\n  type TaskResult,\n  type TaskAcknowledgment,\n  type TaskProgress,\n  InterruptType,\n  type InterruptTypeType,\n  type Interrupt,\n  type InterruptResponse,\n  type InterruptedState,\n  ContextVisibility,\n  type ContextVisibilityType,\n  type ContextEntry,\n  type AgentCapabilityProfile,\n} from './types.js';",
              "documentation": ""
            },
            {
              "name": "export { SessionManager } from './session.js';",
              "line": 54,
              "signature": "export { SessionManager } from './session.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 57,
              "signature": "export {\n  type CoordinatorContract,\n  type WorkerContract,\n  type PeerContract,\n} from './roles.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 64,
              "signature": "export {\n  CollabErrorCode,\n  type CollabErrorCodeType,\n  CollabError,\n} from './error.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-collab/src/roles.ts",
          "sha256": "f6aa5cf9195b736a639e7734b4eee3cea2da9323b2e88a57f60e0ac5b74764f1",
          "artifactSha256": "7abf81970143e80b31e77e04fedd2e8d3a7d2cd875cf3f9cb9ec07fc048328b2",
          "url": "/reference/source/forge-ts/packages/forge-collab/src/roles.ts.txt",
          "declarations": [
            {
              "name": "CoordinatorContract",
              "line": 29,
              "signature": "export interface CoordinatorContract {\n  /**\n   * Decomposes a high-level task into smaller sub-tasks.\n   *\n   * @param task - The task to decompose.\n   * @returns A list of sub-tasks derived from the original task.\n   * @throws {CollabError} DelegationFailed if the task cannot be decomposed.\n   */\n  decomposeTask(task: DelegatedTask): Promise<DelegatedTask[]>;\n\n  /**\n   * Assigns a task to a specific worker agent.\n   *\n   * @param task - The task to assign.\n   * @param workerDid - The OAS DID of the target worker.\n   * @returns A TaskAcknowledgment from the worker.\n   * @throws {CollabError} CapabilityMismatch or DelegationFailed.\n   */\n  assignTask(\n    task: DelegatedTask,\n    workerDid: string\n  ): Promise<TaskAcknowledgment>;\n\n  /**\n   * Aggregates results from multiple worker tasks into a single result.\n   *\n   * @param results - The results from all completed sub-tasks.\n   * @returns A single aggregated TaskResult.\n   * @throws {CollabError} DelegationFailed if results cannot be aggregated.\n   */\n  aggregateResults(results: readonly TaskResult[]): Promise<TaskResult>;\n\n  /**\n   * Handles a failure reported by a worker.\n   *\n   * @param taskId - The ID of the failed task.\n   * @param workerDid - The DID of the worker that failed.\n   * @param error - A description of the failure.\n   * @throws {CollabError} DelegationFailed if recovery is not possible.\n   */\n  handleWorkerFailure(\n    taskId: string,\n    workerDid: string,\n    error: string\n  ): Promise<void>;\n}",
              "documentation": "Coordinator role contract -- decomposes and assigns tasks, aggregates results.\n\nThe coordinator is responsible for breaking down high-level objectives into\nindividual tasks, assigning them to suitable workers, collecting results,\nand handling worker failures. There is at most one coordinator per session.\n\nANVIL Spec section 11.1 -- Coordinator Role."
            },
            {
              "name": "WorkerContract",
              "line": 86,
              "signature": "export interface WorkerContract {\n  /**\n   * Called when a task is delegated to this worker.\n   *\n   * @param task - The delegated task to evaluate.\n   * @returns A TaskAcknowledgment indicating acceptance or rejection.\n   */\n  onTaskDelegated(task: DelegatedTask): Promise<TaskAcknowledgment>;\n\n  /**\n   * Reports progress on an in-flight task.\n   *\n   * @param progress - The progress report.\n   * @throws {CollabError} TaskNotFound if the task ID is unknown.\n   */\n  reportProgress(progress: TaskProgress): Promise<void>;\n\n  /**\n   * Submits the result of a completed task.\n   *\n   * @param result - The task result to submit.\n   * @throws {CollabError} TaskNotFound if the task ID is unknown.\n   */\n  submitResult(result: TaskResult): Promise<void>;\n\n  /**\n   * Called when a task is cancelled by the coordinator.\n   *\n   * @param taskId - The ID of the cancelled task.\n   * @param reason - A human-readable cancellation reason.\n   */\n  onTaskCancelled(taskId: string, reason: string): Promise<void>;\n}",
              "documentation": "Worker role contract -- executes delegated tasks, reports progress.\n\nWorkers receive tasks from coordinators, execute them within the given\nconstraints, report progress periodically, and submit results upon\ncompletion.\n\nANVIL Spec section 11.1 -- Worker Role."
            },
            {
              "name": "PeerContract",
              "line": 129,
              "signature": "export interface PeerContract {\n  /**\n   * Submits a proposal for peer consensus.\n   *\n   * @param proposal - The proposal data to submit for voting.\n   * @returns A unique proposal ID string.\n   */\n  propose(proposal: unknown): Promise<string>;\n\n  /**\n   * Votes on an existing proposal.\n   *\n   * @param proposalId - The ID of the proposal to vote on.\n   * @param approve - true to approve, false to reject.\n   */\n  vote(proposalId: string, approve: boolean): Promise<void>;\n\n  /**\n   * Called when consensus is reached on a proposal.\n   *\n   * @param proposalId - The ID of the proposal that reached consensus.\n   * @param result - The consensus result data.\n   */\n  onConsensus(proposalId: string, result: unknown): Promise<void>;\n}",
              "documentation": "Peer role contract -- participates in consensus-based collaboration.\n\nIn peer-mode collaboration, all agents have equal standing. Peers\npropose actions, vote on proposals, and act on consensus decisions.\n\nANVIL Spec section 11.1 -- Peer Role."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-collab/src/session.ts",
          "sha256": "deffb1a649db6ecc9c2c3e17ca951d64ad7b8f70e8b93ed7df9ed169cc473343",
          "artifactSha256": "d55ca50305523a32b65fa2edc539251bdcb618affd861368395ecb1ff63f95eb",
          "url": "/reference/source/forge-ts/packages/forge-collab/src/session.ts.txt",
          "declarations": [
            {
              "name": "SessionManager",
              "line": 39,
              "signature": "export class SessionManager {\n  constructor();\n  get state(): SessionStateType;\n  get history(): readonly SessionTransition[];\n  transition(target: SessionStateType): SessionTransition;\n  canTransitionTo(target: SessionStateType): boolean;\n  validTransitions(): readonly SessionStateType[];\n  isTerminal(): boolean;\n}",
              "documentation": "Manages the session state machine per ANVIL Spec section 11.2.\n\nThe SessionManager enforces the immutable transition table for\ncollaboration sessions. It tracks the current state, validates all\ntransitions, and maintains a complete transition history.\n\nSessions start in the Proposed state and progress through Active\nand Completing to terminal states (Completed, TimedOut, Dissolved)."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-collab/src/types.ts",
          "sha256": "cdf33e1ce7280e06009a0cfe0c62802b6f0afa7b85125f4e1d4d72c28d7a46a8",
          "artifactSha256": "6e9815dc6c5ac330bda981a0c512360dee60bdc91c638a2fdfc1c46a505b959a",
          "url": "/reference/source/forge-ts/packages/forge-collab/src/types.ts.txt",
          "declarations": [
            {
              "name": "export const CollaborationRole = {",
              "line": 20,
              "signature": "export const CollaborationRole /* type inferred in source */;",
              "documentation": "Collaboration data types per ANVIL Spec section 11.\n\nDefines all data structures used in the ANVIL Collaboration Contract:\nroles, sessions, participants, delegated tasks, interrupts, shared\ncontext entries, and capability profiles.\nRole an agent plays in a collaboration session.\n\nANVIL Spec section 11.1 -- Collaboration Roles."
            },
            {
              "name": "CollaborationRoleType",
              "line": 30,
              "signature": "export type CollaborationRoleType =\n  (typeof CollaborationRole)[keyof typeof CollaborationRole];",
              "documentation": "A collaboration role value."
            },
            {
              "name": "export const SessionState = {",
              "line": 53,
              "signature": "export const SessionState /* type inferred in source */;",
              "documentation": "State of a collaboration session.\n\nThe session state machine controls which operations are valid.\n\nTransition Table (IMMUTABLE -- ANVIL Spec section 11.2):\n\n| Current State | Valid Next States                      |\n|---------------|----------------------------------------|\n| Proposed      | Active, Dissolved                      |\n| Active        | Completing, Dissolved, TimedOut         |\n| Completing    | Completed, Dissolved                   |\n| Completed     | *(terminal)*                           |\n| TimedOut      | *(terminal)*                           |\n| Dissolved     | *(terminal)*                           |"
            },
            {
              "name": "SessionStateType",
              "line": 69,
              "signature": "export type SessionStateType =\n  (typeof SessionState)[keyof typeof SessionState];",
              "documentation": "A session state value."
            },
            {
              "name": "validSessionTransitions",
              "line": 78,
              "signature": "export function validSessionTransitions(\n  state: SessionStateType\n): readonly SessionStateType[];",
              "documentation": "Returns the valid target states from the given state.\n\nANVIL Spec section 11.2 -- Session State Machine."
            },
            {
              "name": "isSessionTerminal",
              "line": 98,
              "signature": "export function isSessionTerminal(state: SessionStateType): boolean;",
              "documentation": "Returns true if the given state is a terminal state (no outgoing transitions)."
            },
            {
              "name": "SessionParticipant",
              "line": 115,
              "signature": "export interface SessionParticipant {\n  /** The OAS DID of the participating agent. */\n  readonly agentDid: string;\n  /** The role this agent plays in the session. */\n  readonly role: CollaborationRoleType;\n  /** ISO 8601 timestamp when the agent joined the session. */\n  readonly joinedAt: string;\n  /** Current participation status (e.g., \"active\", \"left\", \"disconnected\"). */\n  readonly status: string;\n}",
              "documentation": "A participant in a collaboration session.\n\nANVIL Spec section 11.2 -- Collaboration Session."
            },
            {
              "name": "CollaborationSession",
              "line": 131,
              "signature": "export interface CollaborationSession {\n  /** Unique identifier for this session. */\n  readonly sessionId: string;\n  /** The type of collaboration (e.g., \"code-review\", \"data-analysis\"). */\n  readonly sessionType: string;\n  /** The agents participating in this session. */\n  readonly participants: readonly SessionParticipant[];\n  /** The DID of the coordinator agent, if any. */\n  readonly coordinator: string | undefined;\n  /** The ID of the shared context store for this session. */\n  readonly sharedContextId: string | undefined;\n  /** ISO 8601 timestamp when the session was created. */\n  readonly createdAt: string;\n  /** Optional session timeout in seconds. */\n  readonly timeoutSeconds: number | undefined;\n  /** Arbitrary metadata for application-specific session properties. */\n  readonly metadata: Record<string, unknown>;\n}",
              "documentation": "A collaboration session grouping agents for coordinated work.\n\nANVIL Spec section 11.2 -- Collaboration Session."
            },
            {
              "name": "SessionTransition",
              "line": 155,
              "signature": "export interface SessionTransition {\n  /** The state before the transition. */\n  readonly from: SessionStateType;\n  /** The state after the transition. */\n  readonly to: SessionStateType;\n  /** ISO 8601 timestamp when the transition occurred. */\n  readonly timestamp: string;\n}",
              "documentation": "A record of a single session state transition.\n\nANVIL Spec section 11.2."
            },
            {
              "name": "export const TaskPriority = {",
              "line": 173,
              "signature": "export const TaskPriority /* type inferred in source */;",
              "documentation": "Task priority level for scheduling.\n\nANVIL Spec section 11.3 -- Task Priority."
            },
            {
              "name": "TaskPriorityType",
              "line": 185,
              "signature": "export type TaskPriorityType =\n  (typeof TaskPriority)[keyof typeof TaskPriority];",
              "documentation": "A task priority value."
            },
            {
              "name": "export const TaskStatus = {",
              "line": 193,
              "signature": "export const TaskStatus /* type inferred in source */;",
              "documentation": "Status of a completed delegated task.\n\nANVIL Spec section 11.3 -- Task Status."
            },
            {
              "name": "TaskStatusType",
              "line": 203,
              "signature": "export type TaskStatusType =\n  (typeof TaskStatus)[keyof typeof TaskStatus];",
              "documentation": "A task status value."
            },
            {
              "name": "TaskConstraints",
              "line": 211,
              "signature": "export interface TaskConstraints {\n  /** Maximum number of reasoning steps the worker may take. */\n  readonly maxSteps: number | undefined;\n  /** Maximum number of tokens the worker may consume. */\n  readonly maxTokens: number | undefined;\n  /** Maximum duration in seconds for task execution. */\n  readonly maxDurationSeconds: number | undefined;\n  /** Allowed tool names. If empty, no tool restrictions apply. */\n  readonly allowedTools: readonly string[];\n  /** Minimum required confidence score (0.0 to 1.0) for the result. */\n  readonly requiredConfidence: number | undefined;\n}",
              "documentation": "Constraints bounding a delegated task's execution.\n\nANVIL Spec section 11.3 -- Task Constraints."
            },
            {
              "name": "defaultTaskConstraints",
              "line": 225,
              "signature": "export function defaultTaskConstraints(): TaskConstraints;",
              "documentation": "Returns default constraints with no limits and no tool restrictions."
            },
            {
              "name": "DelegatedTask",
              "line": 240,
              "signature": "export interface DelegatedTask {\n  /** Unique identifier for this task. */\n  readonly taskId: string;\n  /** The type of task (e.g., \"code-review\", \"summarize\"). */\n  readonly taskType: string;\n  /** Human-readable description of the task. */\n  readonly description: string;\n  /** Input data for the task. */\n  readonly input: unknown;\n  /** Optional JSON Schema describing the expected output format. */\n  readonly outputSchema: unknown | undefined;\n  /** Constraints bounding the task execution. */\n  readonly constraints: TaskConstraints;\n  /** The OAS DID of the agent that delegated this task. */\n  readonly delegator: string;\n  /** Priority level for task scheduling. */\n  readonly priority: TaskPriorityType;\n  /** Optional ISO 8601 deadline for task completion. */\n  readonly deadline: string | undefined;\n  /** Keys in the shared context that this task may read. */\n  readonly contextKeys: readonly string[];\n}",
              "documentation": "A task delegated from a coordinator to a worker agent.\n\nANVIL Spec section 11.3 -- Delegated Task."
            },
            {
              "name": "TaskResult",
              "line": 268,
              "signature": "export interface TaskResult {\n  /** The ID of the task this result corresponds to. */\n  readonly taskId: string;\n  /** The completion status of the task. */\n  readonly status: TaskStatusType;\n  /** The output data produced by the worker. */\n  readonly output: unknown;\n  /** Optional confidence score (0.0 to 1.0) for the result. */\n  readonly confidence: number | undefined;\n  /** Arbitrary metadata about the task execution. */\n  readonly metadata: Record<string, unknown>;\n  /** Optional Ed25519 signature over the result for verification. */\n  readonly signature: string | undefined;\n}",
              "documentation": "The result of a completed delegated task.\n\nANVIL Spec section 11.3 -- Task Result."
            },
            {
              "name": "TaskAcknowledgment",
              "line": 288,
              "signature": "export interface TaskAcknowledgment {\n  /** The ID of the task being acknowledged. */\n  readonly taskId: string;\n  /** Whether the worker accepts the task. */\n  readonly accepted: boolean;\n  /** Reason for rejection, if accepted is false. */\n  readonly rejectionReason: string | undefined;\n  /** Estimated time to completion in seconds, if accepted. */\n  readonly estimatedCompletionSeconds: number | undefined;\n}",
              "documentation": "A worker's acknowledgment of a delegated task.\n\nANVIL Spec section 11.3 -- Task Acknowledgment."
            },
            {
              "name": "TaskProgress",
              "line": 304,
              "signature": "export interface TaskProgress {\n  /** The ID of the task this progress report corresponds to. */\n  readonly taskId: string;\n  /** Completion percentage (0.0 to 100.0). */\n  readonly percentage: number;\n  /** Human-readable status message. */\n  readonly message: string;\n}",
              "documentation": "Progress report for an in-flight delegated task.\n\nANVIL Spec section 11.3 -- Task Progress."
            },
            {
              "name": "export const InterruptType = {",
              "line": 322,
              "signature": "export const InterruptType /* type inferred in source */;",
              "documentation": "Type of interrupt that can be sent to an agent.\n\nANVIL Spec section 11.5 -- Interrupt Types."
            },
            {
              "name": "InterruptTypeType",
              "line": 338,
              "signature": "export type InterruptTypeType =\n  (typeof InterruptType)[keyof typeof InterruptType];",
              "documentation": "An interrupt type value."
            },
            {
              "name": "Interrupt",
              "line": 346,
              "signature": "export interface Interrupt {\n  /** Unique identifier for this interrupt. */\n  readonly interruptId: string;\n  /** The type of interrupt. */\n  readonly interruptType: InterruptTypeType;\n  /** The OAS DID of the agent that sent the interrupt. */\n  readonly source: string;\n  /** Priority of the interrupt. */\n  readonly priority: TaskPriorityType;\n  /** Arbitrary payload data for the interrupt. */\n  readonly payload: unknown;\n  /** ISO 8601 timestamp when the interrupt was created. */\n  readonly timestamp: string;\n}",
              "documentation": "An interrupt sent to an agent during task execution.\n\nANVIL Spec section 11.5 -- Interrupts."
            },
            {
              "name": "InterruptResponse",
              "line": 366,
              "signature": "export interface InterruptResponse {\n  /** The ID of the interrupt being responded to. */\n  readonly interruptId: string;\n  /** Whether the agent acknowledged and handled the interrupt. */\n  readonly acknowledged: boolean;\n  /** The agent's state at the time of interruption, if applicable. */\n  readonly currentState: InterruptedState | undefined;\n}",
              "documentation": "An agent's response to an interrupt.\n\nANVIL Spec section 11.5 -- Interrupt Response."
            },
            {
              "name": "InterruptedState",
              "line": 380,
              "signature": "export interface InterruptedState {\n  /** The ID of the task that was interrupted, if any. */\n  readonly taskId: string | undefined;\n  /** The number of steps completed before interruption. */\n  readonly stepCount: number;\n  /** Progress percentage at the time of interruption (0.0 to 100.0). */\n  readonly progressPercentage: number;\n  /** Whether the task can be resumed from this state. */\n  readonly canResume: boolean;\n}",
              "documentation": "Snapshot of an agent's state at the moment of interruption.\n\nANVIL Spec section 11.5 -- Interrupted State."
            },
            {
              "name": "export const ContextVisibility = {",
              "line": 400,
              "signature": "export const ContextVisibility /* type inferred in source */;",
              "documentation": "Visibility scope for a shared context entry.\n\nANVIL Spec section 11.4 -- Context Visibility."
            },
            {
              "name": "ContextVisibilityType",
              "line": 410,
              "signature": "export type ContextVisibilityType =\n  (typeof ContextVisibility)[keyof typeof ContextVisibility];",
              "documentation": "A context visibility value."
            },
            {
              "name": "ContextEntry",
              "line": 418,
              "signature": "export interface ContextEntry {\n  /** The key identifying this context entry. */\n  readonly key: string;\n  /** The value stored in this entry. */\n  readonly value: unknown;\n  /** The type of the value (e.g., \"json\", \"text\", \"binary\"). */\n  readonly valueType: string;\n  /** The OAS DID of the agent that wrote this entry. */\n  readonly author: string;\n  /** Monotonically increasing version number for this key. */\n  readonly version: number;\n  /** ISO 8601 timestamp when this version was written. */\n  readonly timestamp: string;\n  /** Visibility scope for this entry. */\n  readonly visibility: ContextVisibilityType;\n  /** Role for role-scoped visibility, or agent DID for agent-scoped. */\n  readonly visibilityTarget: string | undefined;\n}",
              "documentation": "An entry in a session's shared context store.\n\nANVIL Spec section 11.4 -- Shared Context."
            },
            {
              "name": "AgentCapabilityProfile",
              "line": 446,
              "signature": "export interface AgentCapabilityProfile {\n  /** The OAS DID of the agent. */\n  readonly agentDid: string;\n  /** Collaboration roles this agent supports. */\n  readonly supportedRoles: readonly CollaborationRoleType[];\n  /** Task types this agent can handle. */\n  readonly supportedTaskTypes: readonly string[];\n  /** Tool names available to this agent. */\n  readonly availableTools: readonly string[];\n  /** Current load factor (0.0 = idle, 1.0 = fully loaded). */\n  readonly currentLoad: number;\n  /** Maximum number of tasks this agent can execute concurrently. */\n  readonly maxConcurrentTasks: number;\n}",
              "documentation": "An agent's advertised capability profile for task matching.\n\nANVIL Spec section 11.6 -- Agent Capability Profile."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/comm",
      "language": "typescript",
      "version": "0.1.0",
      "description": "ANVIL Communication Contract: message transport, envelopes, and protocol negotiation",
      "manifest": "forge-ts/packages/forge-comm/package.json",
      "manifestSha256": "ced17f3ed7a29daabe39e2b8d8d5b763da46a66786b21ff74dd81e6eba091a6a",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/comm",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-comm/src/error.ts",
          "sha256": "bd33ef247042b3128578bcf2f8c27561a12caeec5bf5a924ca24cdb80ea08126",
          "artifactSha256": "1e58ffb797968eeb356c2e3e74280567a098766fbcf1cde18b018f72e8ca2523",
          "url": "/reference/source/forge-ts/packages/forge-comm/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const CommErrorCode = {",
              "line": 18,
              "signature": "export const CommErrorCode /* type inferred in source */;",
              "documentation": "Error types for the forge-comm package.\n\nAll errors are typed, actionable, and include enough context to diagnose\nissues without reading source code.\n\nANVIL Spec section 10 -- Communication Contract.\nError codes for communication operations.\n\nEach code maps to a specific category of failure in the message\ntransport, serialization, protocol negotiation, or channel lifecycle."
            },
            {
              "name": "CommErrorCodeType",
              "line": 40,
              "signature": "export type CommErrorCodeType =\n  (typeof CommErrorCode)[keyof typeof CommErrorCode];",
              "documentation": "A communication error code value."
            },
            {
              "name": "CommError",
              "line": 55,
              "signature": "export class CommError extends Error {\n  readonly code: CommErrorCodeType;\n  static serializationFailed(reason: string): CommError;\n  static deserializationFailed(reason: string): CommError;\n  static transportFailed(reason: string): CommError;\n  static notConnected(): CommError;\n  static channelClosed(): CommError;\n  static signatureInvalid(sender: string): CommError;\n  static protocolNegotiationFailed(offered: string, reason: string): CommError;\n  static messageTooLarge(size: number, maxSize: number): CommError;\n  static timeout(durationMs: number): CommError;\n}",
              "documentation": "Error type for communication, transport, and protocol negotiation operations.\n\nEvery instance includes actionable context: what failed, why, and what\nthe developer should check."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-comm/src/index.ts",
          "sha256": "6df6fcc633c38e81db92ea7e6e728bd496440692089dbed402b6a640aba04083",
          "artifactSha256": "cdb0d3ab7d0827fb9dd40d72ee319e8ae594b25cd3ba0b71c8fb3ffbe69dbfe3",
          "url": "/reference/source/forge-ts/packages/forge-comm/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { AgentMessage } from './message.js';",
              "line": 23,
              "signature": "export { AgentMessage } from './message.js';",
              "documentation": ""
            },
            {
              "name": "export { type MessageTransport, NoopTransport } from './transport.js';",
              "line": 26,
              "signature": "export { type MessageTransport, NoopTransport } from './transport.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 29,
              "signature": "export {\n  type ProtocolOffer,\n  type ProtocolAccept,\n  negotiateProtocol,\n} from './protocol.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 36,
              "signature": "export {\n  CommErrorCode,\n  type CommErrorCodeType,\n  CommError,\n} from './error.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-comm/src/message.ts",
          "sha256": "e51cae81b671651a78e0e4c940f38235a9872c3923f313afe0f4298de5ad29e8",
          "artifactSha256": "fbe0dbc69e480592c73719823481c55994e1250a67306fe94c937a8215d93296",
          "url": "/reference/source/forge-ts/packages/forge-comm/src/message.ts.txt",
          "declarations": [
            {
              "name": "AgentMessage",
              "line": 46,
              "signature": "export class AgentMessage {\n  readonly id: string;\n  readonly correlationId: string | undefined;\n  readonly replyTo: string | undefined;\n  readonly sender: string;\n  readonly recipient: string;\n  readonly protocol: string;\n  readonly messageType: string;\n  readonly payload: unknown;\n  readonly signature: string | undefined;\n  readonly timestamp: string;\n  static create(\n    sender: string,\n    recipient: string,\n    protocol: string,\n    messageType: string,\n    payload: unknown\n  ): AgentMessage;\n  kind(): string;\n  isSigned(): boolean;\n  withCorrelationId(id: string): AgentMessage;\n  withReplyTo(id: string): AgentMessage;\n  withSignature(sig: string): AgentMessage;\n  toJSON(): Record<string, unknown>;\n}",
              "documentation": "An agent message envelope per ANVIL Spec section 10.2.\n\nThe AgentMessage is the fundamental unit of inter-agent communication.\nIt wraps a JSON payload with routing metadata (sender/recipient DIDs),\nprotocol identification, correlation tracking, and an optional\ncryptographic signature for integrity verification."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-comm/src/protocol.ts",
          "sha256": "5e4956a7fb9cd79747123256861dd9f58148ff445fa5965d992eb5e6e303a801",
          "artifactSha256": "36ad0a140f0b3355ad39c5fb1d9fc61ce8db5e4f3a1ca82e0c7625e30295832a",
          "url": "/reference/source/forge-ts/packages/forge-comm/src/protocol.ts.txt",
          "declarations": [
            {
              "name": "ProtocolOffer",
              "line": 34,
              "signature": "export interface ProtocolOffer {\n  /** The protocol identifier (e.g., \"anvil.task\"). */\n  readonly protocol: string;\n  /** The versions the offering agent supports, ordered by preference. */\n  readonly versions: readonly string[];\n  /** Optional extensions the offering agent supports. */\n  readonly extensions: readonly string[];\n}",
              "documentation": "A protocol version offer sent during negotiation.\n\nThe offering agent lists all protocol versions it supports, ordered\nby preference (first is most preferred). Extensions are optional\ncapabilities the offering agent supports within the protocol.\n\nANVIL Spec section 10.5 -- Protocol Negotiation."
            },
            {
              "name": "ProtocolAccept",
              "line": 60,
              "signature": "export interface ProtocolAccept {\n  /** The agreed-upon protocol identifier. */\n  readonly protocol: string;\n  /** The agreed-upon version string. */\n  readonly version: string;\n  /** The extensions active for this protocol session. */\n  readonly extensions: readonly string[];\n}",
              "documentation": "An accepted protocol version resulting from successful negotiation.\n\nContains the agreed-upon protocol, version, and the extensions\nfrom the offer.\n\nANVIL Spec section 10.5 -- Protocol Negotiation."
            },
            {
              "name": "negotiateProtocol",
              "line": 96,
              "signature": "export function negotiateProtocol(\n  offered: ProtocolOffer,\n  supportedVersions: readonly string[]\n): ProtocolAccept;",
              "documentation": "Negotiate the best matching protocol version between offered and supported.\n\nExamines the offered versions and selects the highest one (by position\nin supportedVersions) that appears in both the offer and the supported\nlist. \"Highest\" means the last matching entry in supportedVersions,\nwhich should be ordered from oldest to newest."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-comm/src/transport.ts",
          "sha256": "fb518ee88e8c921c5a5da36db174ab0b2997baff0194ed44f858cdbfd9ba82d4",
          "artifactSha256": "537af5110609488ca51ee29c99e1b5613d90b436c3439aa1905b4f21435aef51",
          "url": "/reference/source/forge-ts/packages/forge-comm/src/transport.ts.txt",
          "declarations": [
            {
              "name": "MessageTransport",
              "line": 27,
              "signature": "export interface MessageTransport {\n  /**\n   * Send a message to the recipient identified in the message envelope.\n   *\n   * @param message - The agent message envelope to send.\n   * @throws {CommError} If the transport fails, channel is closed, or message is too large.\n   */\n  send(message: AgentMessage): Promise<void>;\n\n  /**\n   * Receive the next available message.\n   *\n   * @returns The next AgentMessage from the transport.\n   * @throws {CommError} If the transport is not connected, channel is closed, or transport fails.\n   */\n  receive(): Promise<AgentMessage>;\n}",
              "documentation": "The message transport contract for ANVIL-compliant agent communication.\n\nImplementations of this interface provide the mechanism by which agents\nexchange AgentMessage envelopes. The interface is intentionally minimal:\nsend a message, receive a message. Higher-level concerns (protocol\nnegotiation, message routing, retry logic) are handled by upper layers.\n\nANVIL Spec section 10.1 -- Communication Contract."
            },
            {
              "name": "NoopTransport",
              "line": 62,
              "signature": "export class NoopTransport implements MessageTransport {\n  async send(_message: AgentMessage): Promise<void>;\n  async receive(): Promise<AgentMessage>;\n}",
              "documentation": "No-op transport for standalone agents.\n\nSilently drops sent messages and throws NotConnected on receive.\nUsed as the default transport for agents that do not participate\nin inter-agent communication.\n\nANVIL Spec section 10.1 -- Communication Contract (default transport)."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/core",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Core types, model interface, telemetry, and configuration for the Forge SDK",
      "manifest": "forge-ts/packages/forge-core/package.json",
      "manifestSha256": "110319b053e40c1dfae0f293c0f7b20be296589d59cc7889017272f4fb7ea97f",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/core",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-core/src/brew-builder.ts",
          "sha256": "654c196ba5cfd998cdb8b6bc81f870edc679469236818e08264ce34f42b1283c",
          "artifactSha256": "f4a25de94d8061f4e55092101f2ea0cec0ee765f4a3704af507304449c9b22f3",
          "url": "/reference/source/forge-ts/packages/forge-core/src/brew-builder.ts.txt",
          "declarations": [
            {
              "name": "BrewBuilder",
              "line": 49,
              "signature": "export class BrewBuilder {\n  constructor(id: string, version: string);\n  addNode(nodeId: string, kind: BrewNodeKind): this;\n  addEdge(from: string, to: string, edgeKind: BrewEdgeKind): this;\n  setEntry(nodeId: string): this;\n  setExit(nodeId: string): this;\n  withTopology(topology: ModelTopology): this;\n  withMetadata(nodeId: string, key: string, value: string): this;\n  build(): Brew;\n}",
              "documentation": ""
            },
            {
              "name": "topologicalSort",
              "line": 264,
              "signature": "export function topologicalSort(\n  nodes: ReadonlyMap<NodeId, BrewNode>,\n  edges: readonly BrewEdge[],\n): NodeId[];",
              "documentation": "Performs Kahn's algorithm for topological sort on the brew graph.\n\nOnly DataFlow and ControlFlow edges participate in cycle detection.\nErrorFlow edges are excluded because they may form intentional cycles."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/brew-resolver.ts",
          "sha256": "8b5bb8dcdb77beeb7af87ae638087572cdd0bb71db527a9673f2c54a7758daab",
          "artifactSha256": "76bde26d5a12dcc5afaced563712df609baaf9668ce08f208ec04eeeeb8c9150",
          "url": "/reference/source/forge-ts/packages/forge-core/src/brew-resolver.ts.txt",
          "declarations": [
            {
              "name": "BrewEnvironment",
              "line": 35,
              "signature": "export interface BrewEnvironment {\n  /** Registered model providers, keyed by their `namespace:model` string. */\n  readonly providers: ReadonlyMap<string, string>;\n  /** Registered tool names available in this environment. */\n  readonly tools: ReadonlySet<string>;\n  /** Connected MCP server identifiers (URIs or aliases). */\n  readonly mcpServers: ReadonlySet<string>;\n  /** Web capabilities available in this environment. */\n  readonly webCapabilities: ReadonlySet<string>;\n}",
              "documentation": "The runtime environment against which a brew is resolved.\n\nCaptures the available providers, tools, MCP servers, and web capabilities\nat a specific point in time."
            },
            {
              "name": "export const BrewResolutionErrorKind = {",
              "line": 53,
              "signature": "export const BrewResolutionErrorKind /* type inferred in source */;",
              "documentation": "The kind of resolution error encountered for a specific node."
            },
            {
              "name": "BrewResolutionErrorKind",
              "line": 67,
              "signature": "export type BrewResolutionErrorKind =\n  (typeof BrewResolutionErrorKind)[keyof typeof BrewResolutionErrorKind];",
              "documentation": "Resolution error kind type."
            },
            {
              "name": "BrewResolutionError",
              "line": 73,
              "signature": "export interface BrewResolutionError {\n  /** The node that failed resolution. */\n  readonly nodeId: NodeId;\n  /** What went wrong. */\n  readonly errorKind: BrewResolutionErrorKind;\n}",
              "documentation": "A resolution error for a specific node in the brew graph."
            },
            {
              "name": "ResolvedBrewPlan",
              "line": 90,
              "signature": "export interface ResolvedBrewPlan {\n  /** Deterministic plan identifier (hash of brew_id + version + env hash). */\n  readonly planId: string;\n  /** The original brew identifier. */\n  readonly brewId: BrewId;\n  /** The original brew version. */\n  readonly brewVersion: BrewVersion;\n  /** ISO 8601 timestamp of when resolution was performed. */\n  readonly resolvedAt: string;\n  /** The resolved node execution order (topological sort). */\n  readonly executionOrder: readonly NodeId[];\n  /** The edges from the original brew. */\n  readonly edges: readonly BrewEdge[];\n  /** The entry nodes. */\n  readonly entryNodes: readonly NodeId[];\n  /** The exit nodes. */\n  readonly exitNodes: readonly NodeId[];\n}",
              "documentation": "A frozen, validated brew plan ready for durable execution.\n\nCreating a `ResolvedBrewPlan` certifies that all symbolic references\nhave been checked against a live environment."
            },
            {
              "name": "resolve",
              "line": 132,
              "signature": "export function resolve(\n  brew: Brew,\n  env: BrewEnvironment,\n): ResolvedBrewPlan;",
              "documentation": "Resolves a brew against a runtime environment.\n\nValidates every symbolic reference in the brew against the environment.\nCollects all errors before returning. Returns either a `ResolvedBrewPlan`\nor an array of all resolution errors found."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/brew.ts",
          "sha256": "1808014702a023eb526a0173992a656f64a9e66c8ff42c7856b98204a6b849b7",
          "artifactSha256": "994f76a0039df47dc5643f109f594e3fb8635bba663f518965bad548019eef88",
          "url": "/reference/source/forge-ts/packages/forge-core/src/brew.ts.txt",
          "declarations": [
            {
              "name": "BrewId",
              "line": 39,
              "signature": "export type BrewId = string;",
              "documentation": "Opaque identifier for a brew definition.\n\nBrew IDs are freeform strings chosen by the author. They are used to\nreference brews in sub-brew composition and the brew registry."
            },
            {
              "name": "NodeId",
              "line": 52,
              "signature": "export type NodeId = string;",
              "documentation": "Opaque identifier for a node within a brew graph.\n\nNode IDs are unique within a single brew. They are freeform strings\nchosen by the brew author."
            },
            {
              "name": "BrewVersion",
              "line": 64,
              "signature": "export type BrewVersion = string;",
              "documentation": "Semantic version string for a brew definition.\n\nVersion strings are freeform (no semver parsing is enforced at this layer)."
            },
            {
              "name": "JoinMode",
              "line": 75,
              "signature": "export type JoinMode =\n  | { readonly type: 'await_all' }\n  | { readonly type: 'first_success' }\n  | { readonly type: 'first_n'; readonly n: number };",
              "documentation": "Strategy for joining results from parallel fork branches.\n\nDetermines when a `ParallelFork` node is considered complete."
            },
            {
              "name": "joinAwaitAll",
              "line": 81,
              "signature": "export function joinAwaitAll(): JoinMode;",
              "documentation": "Helper: await all parallel branches."
            },
            {
              "name": "joinFirstSuccess",
              "line": 86,
              "signature": "export function joinFirstSuccess(): JoinMode;",
              "documentation": "Helper: return on first successful branch."
            },
            {
              "name": "joinFirstN",
              "line": 91,
              "signature": "export function joinFirstN(n: number): JoinMode;",
              "documentation": "Helper: return when N branches complete."
            },
            {
              "name": "BrewNodeKind",
              "line": 107,
              "signature": "export type BrewNodeKind =\n  | {\n      readonly type: 'agent_step';\n      readonly provider: string;\n      readonly systemPrompt?: string;\n      readonly maxSteps: number;\n    }\n  | {\n      readonly type: 'tool_invocation';\n      readonly toolId: string;\n      readonly tier: ToolTier;\n    }\n  | {\n      readonly type: 'mcp_call';\n      readonly serverId: string;\n      readonly toolName: string;\n    }\n  | {\n      readonly type: 'web_operation';\n      readonly operation: string;\n    }\n  | {\n      readonly type: 'conditional_branch';\n      readonly conditionExpr: string;\n      readonly trueTarget: NodeId;\n      readonly falseTarget: NodeId;\n    }\n  | {\n      readonly type: 'parallel_fork';\n      readonly branches: readonly NodeId[];\n      readonly joinMode: JoinMode;\n    }\n  | {\n      readonly type: 'sub_brew_ref';\n      readonly brewId: BrewId;\n    }\n  | {\n      readonly type: 'human_checkpoint';\n      readonly prompt: string;\n      readonly timeoutMs?: number;\n    };",
              "documentation": "The execution semantics of a node in the brew graph.\n\nEach variant describes what kind of work a node performs. Uses discriminated\nunion on the `type` field matching Rust's `#[serde(tag = \"type\")]`.\n\nANVIL Spec SS7.1-7.2."
            },
            {
              "name": "BrewNode",
              "line": 155,
              "signature": "export interface BrewNode {\n  /** Stable identifier within this brew. */\n  readonly id: NodeId;\n  /** The node's execution semantics. */\n  readonly kind: BrewNodeKind;\n  /** Arbitrary key-value metadata for tooling and visualization. */\n  readonly metadata: Readonly<Record<string, string>>;\n}",
              "documentation": ""
            },
            {
              "name": "export const BrewEdgeKind = {",
              "line": 177,
              "signature": "export const BrewEdgeKind /* type inferred in source */;",
              "documentation": "The semantics of a directed edge in the brew graph.\n\n| Kind | Semantics |\n|------|-----------|\n| `data_flow` | Output of source feeds as input to target |\n| `control_flow` | Target executes after source completes |\n| `error_flow` | Target executes when source fails |"
            },
            {
              "name": "BrewEdgeKind",
              "line": 187,
              "signature": "export type BrewEdgeKind = (typeof BrewEdgeKind)[keyof typeof BrewEdgeKind];",
              "documentation": "Edge kind type."
            },
            {
              "name": "BrewEdge",
              "line": 192,
              "signature": "export interface BrewEdge {\n  /** Source node. */\n  readonly from: NodeId;\n  /** Target node. */\n  readonly to: NodeId;\n  /** Edge semantics. */\n  readonly kind: BrewEdgeKind;\n}",
              "documentation": "A directed edge in the brew graph connecting two nodes."
            },
            {
              "name": "Brew",
              "line": 215,
              "signature": "export interface Brew {\n  /** Unique identifier for this brew definition. */\n  readonly id: BrewId;\n  /** Semantic version of this brew definition. */\n  readonly version: BrewVersion;\n  /** The graph's nodes, keyed by stable node ID. */\n  readonly nodes: ReadonlyMap<NodeId, BrewNode>;\n  /** The graph's edges, sorted by (from, to, kind) for determinism. */\n  readonly edges: readonly BrewEdge[];\n  /** Designated entry nodes. Execution begins at these nodes. */\n  readonly entryNodes: readonly NodeId[];\n  /** Designated exit nodes. Execution terminates when all exit nodes complete. */\n  readonly exitNodes: readonly NodeId[];\n  /** Optional model topology for this brew. */\n  readonly topology?: ModelTopology;\n}",
              "documentation": "A composable execution graph of typed nodes and typed edges.\n\nA `Brew` is a mutable, dynamic structure carrying symbolic references\nthat have not yet been validated against a live environment. To execute\na Brew durably, it must first be frozen into a `ResolvedBrewPlan` via\n`resolve`.\n\nANVIL Spec SS7.2 -- Workflows."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/config.ts",
          "sha256": "26569e5ce37fddb2427911d10d8d8bfa292e6b034842575337741be1a4fab676",
          "artifactSha256": "eb3fc520c2397889a6f5eb12471a316b01e2af655e5fea6634dee27026e1551c",
          "url": "/reference/source/forge-ts/packages/forge-core/src/config.ts.txt",
          "declarations": [
            {
              "name": "GenerateOptions",
              "line": 29,
              "signature": "export interface GenerateOptions {\n  /** Sampling temperature (0.0 = deterministic, 2.0 = maximum randomness). */\n  readonly temperature?: number;\n  /** Maximum tokens to generate. */\n  readonly maxTokens?: number;\n  /** Top-p (nucleus) sampling threshold. */\n  readonly topP?: number;\n  /** Stop sequences -- generation stops when any of these are produced. */\n  readonly stopSequences?: readonly string[];\n  /** Frequency penalty (-2.0 to 2.0). */\n  readonly frequencyPenalty?: number;\n  /** Presence penalty (-2.0 to 2.0). */\n  readonly presencePenalty?: number;\n  /** Seed for deterministic generation (if supported by provider). */\n  readonly seed?: number;\n  /** JSON schema for structured output enforcement. */\n  readonly outputSchema?: JsonSchema;\n}",
              "documentation": "Options for text generation calls.\n\nControls model behavior during inference. All fields are optional;\nproviders use sensible defaults when not specified."
            },
            {
              "name": "defaultGenerateOptions",
              "line": 58,
              "signature": "export function defaultGenerateOptions(): GenerateOptions;",
              "documentation": "Creates a default GenerateOptions with no values set."
            },
            {
              "name": "EmbedOptions",
              "line": 70,
              "signature": "export interface EmbedOptions {\n  /** The embedding model to use (if different from default). */\n  readonly model?: string;\n  /** Dimensionality of the output embeddings (if configurable). */\n  readonly dimensions?: number;\n}",
              "documentation": "Options for embedding calls."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/error.ts",
          "sha256": "10f7068014710f8ba2036c3b1cee64434c29414611affb6346ce5049b42ef325",
          "artifactSha256": "1dfd2d2d120bc69e8b2d8a5a3d424021702d2e81fac1f396733e2744a89c6f1e",
          "url": "/reference/source/forge-ts/packages/forge-core/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeErrorCode = {",
              "line": 21,
              "signature": "export const ForgeErrorCode /* type inferred in source */;",
              "documentation": "Forge SDK error types.\n\nAll errors in the Forge SDK are typed and actionable. Error messages include\nenough context for the developer to diagnose the issue without reading source code.\n\nEach Forge package defines its own error class. `ForgeError` is the top-level\naggregate used by `@forge-sdk/sdk`.\n\nANVIL Spec section 14.2 -- all errors are typed, loggable, and carry enough\ncontext for audit trail entries.\nError code enumeration for typed error matching.\n\nError codes enable programmatic handling without string matching on messages."
            },
            {
              "name": "ForgeErrorCode",
              "line": 44,
              "signature": "export type ForgeErrorCode = (typeof ForgeErrorCode)[keyof typeof ForgeErrorCode];",
              "documentation": "Error code type."
            },
            {
              "name": "ForgeError",
              "line": 63,
              "signature": "export class ForgeError extends Error {\n  public readonly code: ForgeErrorCode;\n  constructor(code: ForgeErrorCode, message: string);\n  static providerNotFound(providerRef: string): ForgeError;\n  static invalidProviderRef(input: string): ForgeError;\n  static schemaValidation(path: string, reason: string): ForgeError;\n  static invalidLifecycleTransition(from: string, to: string, reason: string): ForgeError;\n  static toolInvocationDenied(\n    toolName: string,\n    agentDid: string,\n    requiredCapability: string,\n    actId: string\n  ): ForgeError;\n  static toolExecutionFailed(toolName: string, reason: string): ForgeError;\n  static missingConfig(field: string, hint: string): ForgeError;\n  static stopConditionReached(reason: string, steps: number, tokens: number): ForgeError;\n  static unsupportedOperation(model: string, operation: string): ForgeError;\n  static providerUnavailable(providerRef: string, reason: string): ForgeError;\n  static providerAuthenticationFailed(providerRef: string, reason: string): ForgeError;\n  static capabilityUnsupported(providerRef: string, capability: string): ForgeError;\n  static providerNegotiationFailed(providerRef: string, reason: string): ForgeError;\n  static providerSessionExpired(providerRef: string, sessionId: string): ForgeError;\n  static providerInterruptUnsupported(providerRef: string): ForgeError;\n  static providerResumeUnsupported(providerRef: string): ForgeError;\n  static internal(message: string): ForgeError;\n}",
              "documentation": "Base error class for the Forge SDK.\n\nEvery variant includes actionable context: what failed, why, and what the\ndeveloper should check. No generic \"something went wrong\" messages."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/index.ts",
          "sha256": "cbdd0a4336c0c446a2132525b01d6d0681fca3439f7ad2f9169b646fc6630c35",
          "artifactSha256": "83dc30641dd9e5f0c85acac72252137d0c8332a0298195300a0d21e6f4161a9a",
          "url": "/reference/source/forge-ts/packages/forge-core/src/index.ts.txt",
          "declarations": [
            {
              "name": "export {",
              "line": 13,
              "signature": "export {\n  Role,\n  type TextPart,\n  type ImagePart,\n  type ToolCallPart,\n  type ToolResultPart,\n  type MessagePart,\n  type ModelMessage,\n  textPart,\n  imagePart,\n  toolCallPart,\n  toolResultPart,\n  isToolCall,\n  isToolResult,\n  createMessage,\n  createTextMessage,\n  getToolCalls,\n  getTextContent,\n} from './message.js';",
              "documentation": ""
            },
            {
              "name": "export { type LanguageModel } from './model.js';",
              "line": 34,
              "signature": "export { type LanguageModel } from './model.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 37,
              "signature": "export {\n  FinishReason,\n  type Usage,\n  type GenerateResult,\n  type TextDeltaChunk,\n  type ToolCallDeltaChunk,\n  type DoneChunk,\n  type StreamChunk,\n  zeroUsage,\n  addUsage,\n  isComplete,\n  isToolCallFinish,\n  textDeltaChunk,\n  doneChunk,\n  isTextDelta,\n  isDone,\n  chunkText,\n} from './output.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 57,
              "signature": "export {\n  ToolTier,\n  type ToolDefinition,\n  type ToolCall,\n  type ToolResult,\n  type ToolApproval,\n  ToolApprovalDecision,\n  ToolDefinitionBuilder,\n  buildToolDefinition,\n  requiresAuthorization,\n  approve,\n  deny,\n  modify,\n} from './tool.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 73,
              "signature": "export {\n  type GenerateOptions,\n  type EmbedOptions,\n  defaultGenerateOptions,\n} from './config.js';",
              "documentation": ""
            },
            {
              "name": "export { JsonSchema, SchemaType } from './schema.js';",
              "line": 80,
              "signature": "export { JsonSchema, SchemaType } from './schema.js';",
              "documentation": ""
            },
            {
              "name": "export { ForgeError, ForgeErrorCode } from './error.js';",
              "line": 83,
              "signature": "export { ForgeError, ForgeErrorCode } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 86,
              "signature": "export {\n  ForgeSpan,\n  ForgeEvent,\n  SpanStatus,\n  type SpanStatusType,\n  type SpanAttribute,\n  type TelemetryEmitter,\n  NoopEmitter,\n  RecordingEmitter,\n} from './telemetry.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 98,
              "signature": "export {\n  type AgentDid,\n  Timestamp,\n  createAgentDid,\n  trustedAgentDid,\n} from './types.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 106,
              "signature": "export {\n  ProviderRef,\n  ProviderRegistry,\n  type ProviderMetadata,\n  RuntimeCapability,\n  ProviderRuntimeCapabilities,\n  type ProviderNegotiationRequest,\n  type ProviderNegotiationResult,\n  ProviderSessionState,\n  type ProviderUsageSummary,\n  type ProviderSessionEvent,\n} from './provider.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 119,
              "signature": "export {\n  ProviderFamily,\n  AuthStrategy,\n  type ProviderPreset,\n  type ProviderEnvironment,\n  type ProviderExecutionRequest,\n  type ProviderInstallOptions,\n  approvedCodingProviderPresets,\n  approvedDirectProviderPresets,\n  approvedGatewayProviderPresets,\n  registerOfficialCodingProviders,\n  registerDefaultCoreDirectProviders,\n  registerOpenAiModel,\n  registerAnthropicModel,\n  registerGoogleModel,\n  registerXaiModel,\n  registerDeepSeekModel,\n  registerMistralModel,\n  registerCohereModel,\n  registerGroqModel,\n  registerMoonshotModel,\n  registerZaiModel,\n  registerMiniMaxModel,\n  registerOpenRouterModel,\n  registerBedrockModel,\n  registerVertexAiModel,\n  registerMicrosoftFoundryModel,\n  registerFoundryModel,\n  unavailableProviderResult,\n} from './provider-families.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 151,
              "signature": "export {\n  DEFAULT_ROLE,\n  CostPreference,\n  LatencyPreference,\n  type ModelSlot,\n  ModelTopology,\n  TopologyBuilder,\n} from './topology.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 161,
              "signature": "export {\n  TaskMode,\n  taskModeAsRoleName,\n  ExecutionTopology,\n  type RoutingContext,\n  defaultRoutingContext,\n  type ModelCapabilities,\n  defaultModelCapabilities,\n  type ResolvedRoute,\n  type ModelRouter,\n  DefaultModelRouter,\n} from './routing.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 175,
              "signature": "export {\n  type BrewId,\n  type NodeId,\n  type BrewVersion,\n  type JoinMode,\n  joinAwaitAll,\n  joinFirstSuccess,\n  joinFirstN,\n  type BrewNodeKind,\n  type BrewNode,\n  BrewEdgeKind,\n  type BrewEdge,\n  type Brew,\n} from './brew.js';",
              "documentation": ""
            },
            {
              "name": "export { BrewBuilder, topologicalSort } from './brew-builder.js';",
              "line": 191,
              "signature": "export { BrewBuilder, topologicalSort } from './brew-builder.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 194,
              "signature": "export {\n  type BrewEnvironment,\n  BrewResolutionErrorKind,\n  type BrewResolutionError,\n  type ResolvedBrewPlan,\n  resolve,\n} from './brew-resolver.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/message.ts",
          "sha256": "7d44394ef531c2ec2bec273b651b8b82a98919738cebe4f9f5b27c3dfa75304b",
          "artifactSha256": "a516c4552311cfbd56437fba1abcee8c76e18a2e6045d4af10fc5829a09c2426",
          "url": "/reference/source/forge-ts/packages/forge-core/src/message.ts.txt",
          "declarations": [
            {
              "name": "export const Role = {",
              "line": 21,
              "signature": "export const Role /* type inferred in source */;",
              "documentation": "Message types for LLM communication.\n\nMessages represent the conversation history between users, assistants, and tools.\nThey form the input and output of every inference call.\n\nANVIL Spec section 6.1 -- Cognitive Interface defines the message format that\nall ANVIL-compliant runtimes must support.\nThe role of a message participant.\n\nFour roles are defined: System (runtime instructions), User (human input),\nAssistant (model output), and Tool (tool execution results).\n\nANVIL Spec section 6.1"
            },
            {
              "name": "Role",
              "line": 33,
              "signature": "export type Role = (typeof Role)[keyof typeof Role];",
              "documentation": "The role of a message participant."
            },
            {
              "name": "TextPart",
              "line": 43,
              "signature": "export interface TextPart {\n  readonly type: 'text';\n  /** The text content. */\n  readonly text: string;\n}",
              "documentation": "A text content part within a message."
            },
            {
              "name": "ImagePart",
              "line": 57,
              "signature": "export interface ImagePart {\n  readonly type: 'image';\n  /** Base64-encoded image data, or a URL. */\n  readonly data: string;\n  /** MIME type (e.g., \"image/png\"). */\n  readonly mediaType: string;\n}",
              "documentation": "An image content part within a message."
            },
            {
              "name": "ToolCallPart",
              "line": 78,
              "signature": "export interface ToolCallPart {\n  readonly type: 'tool_call';\n  /** Unique identifier for this tool call. */\n  readonly id: string;\n  /** The tool name. */\n  readonly name: string;\n  /** JSON arguments for the tool. */\n  readonly arguments: unknown;\n}",
              "documentation": "A tool call request from the model."
            },
            {
              "name": "ToolResultPart",
              "line": 102,
              "signature": "export interface ToolResultPart {\n  readonly type: 'tool_result';\n  /** The tool call ID this result corresponds to. */\n  readonly toolCallId: string;\n  /** The tool name. */\n  readonly name: string;\n  /** The result content (typically stringified). */\n  readonly content: string;\n  /** Whether the tool execution resulted in an error. */\n  readonly isError: boolean;\n}",
              "documentation": "A result from a tool execution."
            },
            {
              "name": "MessagePart",
              "line": 120,
              "signature": "export type MessagePart = TextPart | ImagePart | ToolCallPart | ToolResultPart;",
              "documentation": "A single part of a message, supporting multi-modal content.\n\nMessages can contain text, images, tool calls, and tool results.\nThis allows a single assistant message to contain both text and tool calls."
            },
            {
              "name": "textPart",
              "line": 133,
              "signature": "export function textPart(text: string): TextPart;",
              "documentation": "Creates a text message part."
            },
            {
              "name": "imagePart",
              "line": 149,
              "signature": "export function imagePart(data: string, mediaType: string): ImagePart;",
              "documentation": "Creates an image message part."
            },
            {
              "name": "toolCallPart",
              "line": 166,
              "signature": "export function toolCallPart(id: string, name: string, args: unknown): ToolCallPart;",
              "documentation": "Creates a tool call message part."
            },
            {
              "name": "toolResultPart",
              "line": 184,
              "signature": "export function toolResultPart(\n  toolCallId: string,\n  name: string,\n  content: string,\n  isError: boolean\n): ToolResultPart;",
              "documentation": "Creates a tool result message part."
            },
            {
              "name": "isToolCall",
              "line": 199,
              "signature": "export function isToolCall(part: MessagePart): part is ToolCallPart;",
              "documentation": "Returns `true` if the part is a tool call."
            },
            {
              "name": "isToolResult",
              "line": 209,
              "signature": "export function isToolResult(part: MessagePart): part is ToolResultPart;",
              "documentation": "Returns `true` if the part is a tool result."
            },
            {
              "name": "ModelMessage",
              "line": 224,
              "signature": "export interface ModelMessage {\n  /** The message participant role. */\n  readonly role: Role;\n  /** One or more content parts. */\n  readonly parts: readonly MessagePart[];\n}",
              "documentation": "A message in a conversation, consisting of a role and content parts."
            },
            {
              "name": "createMessage",
              "line": 243,
              "signature": "export function createMessage(role: Role, parts: MessagePart[]): ModelMessage;",
              "documentation": "Creates a new model message with the given role and parts."
            },
            {
              "name": "createTextMessage",
              "line": 259,
              "signature": "export function createTextMessage(role: Role, text: string): ModelMessage;",
              "documentation": "Creates a simple text message."
            },
            {
              "name": "getToolCalls",
              "line": 274,
              "signature": "export function getToolCalls(message: ModelMessage): readonly ToolCallPart[];",
              "documentation": "Extracts all tool calls from a message."
            },
            {
              "name": "getTextContent",
              "line": 289,
              "signature": "export function getTextContent(message: ModelMessage): string;",
              "documentation": "Returns the concatenated text content of all text parts in a message."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/model.ts",
          "sha256": "6503238e749226b0e2f6c8cd9d2f85cfa286e5eaba656bb776d7fd3dcff75944",
          "artifactSha256": "e7be4bf34591032a159f897075870a5afc2393f94b5d014776f115ebb15d0893",
          "url": "/reference/source/forge-ts/packages/forge-core/src/model.ts.txt",
          "declarations": [
            {
              "name": "LanguageModel",
              "line": 46,
              "signature": "export interface LanguageModel {\n  /** The model identifier (e.g., \"gpt-4o\", \"claude-sonnet-4-5-20250929\"). */\n  readonly modelId: string;\n\n  /** The provider namespace (e.g., \"openai\", \"anthropic\"). */\n  readonly provider: string;\n\n  /** Whether this model supports tool calling. */\n  readonly supportsToolCalling: boolean;\n\n  /** Whether this model supports structured output (JSON mode). */\n  readonly supportsStructuredOutput: boolean;\n\n  /** Whether this model supports image input. */\n  readonly supportsImageInput: boolean;\n\n  /** Whether this model supports streaming. */\n  readonly supportsStreaming: boolean;\n\n  /**\n   * Generates a complete response from the model.\n   *\n   * @param messages - The conversation history.\n   * @param tools - Available tool definitions for this inference call.\n   * @param options - Generation options (temperature, max_tokens, etc.).\n   * @returns A GenerateResult containing the model's response, usage statistics,\n   *   and finish reason.\n   * @throws {ForgeError} If the provider call fails, times out, or returns\n   *   an invalid response.\n   */\n  generate(\n    messages: readonly ModelMessage[],\n    tools: readonly ToolDefinition[],\n    options: GenerateOptions\n  ): Promise<GenerateResult>;\n\n  /**\n   * Streams a response from the model as chunks.\n   *\n   * @param messages - The conversation history.\n   * @param tools - Available tool definitions for this inference call.\n   * @param options - Generation options.\n   * @returns An async generator of StreamChunk values. Callers should process\n   *   chunks as they arrive for real-time output.\n   * @throws {ForgeError} If the provider call fails.\n   */\n  stream(\n    messages: readonly ModelMessage[],\n    tools: readonly ToolDefinition[],\n    options: GenerateOptions\n  ): AsyncGenerator<StreamChunk>;\n}",
              "documentation": "The core language model interface.\n\nEvery LLM provider implements this interface. The interface is intentionally\nminimal: `generate` for synchronous (buffered) inference and `stream` for\nstreaming.\n\nANVIL Spec section 6.1: The cognitive interface defines:\n- `infer()` -- full response (maps to `generate`)\n- `infer_stream()` -- streaming response (maps to `stream`)\n- `model_info()` -- capabilities metadata (maps to `modelId`, `supports*`)"
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/official-providers.ts",
          "sha256": "914b558924e7f1ec25b661eed984a60e77f61e4b0cd3a9159b64194e97421902",
          "artifactSha256": "04ccb7da08cb55ef6e1d73d798798c4d96dd02407f89f9e336783ab7d78862cf",
          "url": "/reference/source/forge-ts/packages/forge-core/src/official-providers.ts.txt",
          "declarations": [
            {
              "name": "ProviderFamily",
              "line": 45,
              "signature": "export enum ProviderFamily {\n  CodingProduct = 'coding_product',\n  DirectModel = 'direct_model',\n  Gateway = 'gateway',\n}",
              "documentation": ""
            },
            {
              "name": "AuthStrategy",
              "line": 51,
              "signature": "export enum AuthStrategy {\n  ApiKey = 'api_key',\n  AccessToken = 'access_token',\n  BrowserAccountLogin = 'browser_account_login',\n  CloudCredentials = 'cloud_credentials',\n}",
              "documentation": ""
            },
            {
              "name": "ProviderPreset",
              "line": 58,
              "signature": "export interface ProviderPreset {\n  readonly namespace: string;\n  readonly family: ProviderFamily;\n  readonly authStrategy: AuthStrategy;\n}",
              "documentation": ""
            },
            {
              "name": "approvedCodingProviderPresets",
              "line": 254,
              "signature": "export function approvedCodingProviderPresets(): readonly ProviderPreset[];",
              "documentation": ""
            },
            {
              "name": "approvedDirectProviderPresets",
              "line": 284,
              "signature": "export function approvedDirectProviderPresets(): readonly ProviderPreset[];",
              "documentation": ""
            },
            {
              "name": "approvedGatewayProviderPresets",
              "line": 304,
              "signature": "export function approvedGatewayProviderPresets(): readonly ProviderPreset[];",
              "documentation": ""
            },
            {
              "name": "registerOfficialCodingProviders",
              "line": 334,
              "signature": "export function registerOfficialCodingProviders(registry: ProviderRegistry): void;",
              "documentation": ""
            },
            {
              "name": "registerDefaultCoreDirectProviders",
              "line": 386,
              "signature": "export function registerDefaultCoreDirectProviders(registry: ProviderRegistry): readonly string[];",
              "documentation": ""
            },
            {
              "name": "registerOpenAiModel",
              "line": 416,
              "signature": "export function registerOpenAiModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerAnthropicModel",
              "line": 427,
              "signature": "export function registerAnthropicModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerGoogleModel",
              "line": 433,
              "signature": "export function registerGoogleModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerXAiModel",
              "line": 439,
              "signature": "export function registerXAiModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerDeepseekModel",
              "line": 450,
              "signature": "export function registerDeepseekModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerMistralModel",
              "line": 461,
              "signature": "export function registerMistralModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerCohereModel",
              "line": 472,
              "signature": "export function registerCohereModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerGroqModel",
              "line": 483,
              "signature": "export function registerGroqModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerMoonshotModel",
              "line": 494,
              "signature": "export function registerMoonshotModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerZaiModel",
              "line": 505,
              "signature": "export function registerZaiModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerMiniMaxModel",
              "line": 516,
              "signature": "export function registerMiniMaxModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerOpenRouterModel",
              "line": 527,
              "signature": "export function registerOpenRouterModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerBedrockModel",
              "line": 538,
              "signature": "export function registerBedrockModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerVertexAiModel",
              "line": 558,
              "signature": "export function registerVertexAiModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            },
            {
              "name": "registerMicrosoftFoundryModel",
              "line": 579,
              "signature": "export function registerMicrosoftFoundryModel(\n  registry: ProviderRegistry,\n  modelId: string\n): string;",
              "documentation": ""
            },
            {
              "name": "registerFoundryModel",
              "line": 604,
              "signature": "export function registerFoundryModel(registry: ProviderRegistry, modelId: string): string;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/output.ts",
          "sha256": "b06ca74110c0dcddd0c0737a1543dc77d4957c82cffa2e3ea9d0de63e9f33178",
          "artifactSha256": "d7297767271a0aeaa60c455ae2029f2b6093a3aa7b7af52db43067b38d5242de",
          "url": "/reference/source/forge-ts/packages/forge-core/src/output.ts.txt",
          "declarations": [
            {
              "name": "export const FinishReason = {",
              "line": 22,
              "signature": "export const FinishReason /* type inferred in source */;",
              "documentation": "The reason generation stopped."
            },
            {
              "name": "FinishReason",
              "line": 38,
              "signature": "export type FinishReason = (typeof FinishReason)[keyof typeof FinishReason];",
              "documentation": "The reason generation stopped."
            },
            {
              "name": "isComplete",
              "line": 46,
              "signature": "export function isComplete(reason: FinishReason): boolean;",
              "documentation": "Returns `true` if generation completed normally (Stop or StopSequence)."
            },
            {
              "name": "isToolCallFinish",
              "line": 56,
              "signature": "export function isToolCallFinish(reason: FinishReason): boolean;",
              "documentation": "Returns `true` if the model wants to call tools."
            },
            {
              "name": "Usage",
              "line": 68,
              "signature": "export interface Usage {\n  /** Tokens consumed by the input prompt. */\n  readonly promptTokens: number;\n  /** Tokens generated in the response. */\n  readonly completionTokens: number;\n  /** Total tokens (prompt + completion). */\n  readonly totalTokens: number;\n}",
              "documentation": "Token usage statistics from an inference call."
            },
            {
              "name": "zeroUsage",
              "line": 82,
              "signature": "export function zeroUsage(): Usage;",
              "documentation": "Creates a zero-usage instance."
            },
            {
              "name": "addUsage",
              "line": 98,
              "signature": "export function addUsage(a: Usage, b: Usage): Usage;",
              "documentation": "Adds two usage statistics together."
            },
            {
              "name": "GenerateResult",
              "line": 121,
              "signature": "export interface GenerateResult {\n  /** The model's response message. */\n  readonly message: ModelMessage;\n  /** Why generation stopped. */\n  readonly finishReason: FinishReason;\n  /** Token usage statistics. */\n  readonly usage: Usage;\n}",
              "documentation": "The result of a text generation call.\n\nContains the model's response message, the reason generation stopped,\nand token usage statistics."
            },
            {
              "name": "TextDeltaChunk",
              "line": 133,
              "signature": "export interface TextDeltaChunk {\n  readonly type: 'text_delta';\n  /** The text fragment. */\n  readonly text: string;\n}",
              "documentation": "A text content delta within a stream."
            },
            {
              "name": "ToolCallDeltaChunk",
              "line": 142,
              "signature": "export interface ToolCallDeltaChunk {\n  readonly type: 'tool_call_delta';\n  /** The tool call index (for parallel tool calls). */\n  readonly index: number;\n  /** The tool call ID (may be empty until fully received). */\n  readonly id: string;\n  /** The tool name (may be empty until fully received). */\n  readonly name: string;\n  /** Partial JSON arguments. */\n  readonly argumentsDelta: string;\n}",
              "documentation": "A tool call delta (streaming tool arguments)."
            },
            {
              "name": "DoneChunk",
              "line": 157,
              "signature": "export interface DoneChunk {\n  readonly type: 'done';\n  /** Why generation stopped. */\n  readonly finishReason: FinishReason;\n  /** Final usage statistics. */\n  readonly usage: Usage;\n}",
              "documentation": "The stream has finished."
            },
            {
              "name": "StreamChunk",
              "line": 171,
              "signature": "export type StreamChunk = TextDeltaChunk | ToolCallDeltaChunk | DoneChunk;",
              "documentation": "A chunk from a streaming response.\n\nDuring streaming, the model produces a series of chunks that together\nform the complete response."
            },
            {
              "name": "textDeltaChunk",
              "line": 179,
              "signature": "export function textDeltaChunk(text: string): TextDeltaChunk;",
              "documentation": "Creates a text delta chunk."
            },
            {
              "name": "doneChunk",
              "line": 190,
              "signature": "export function doneChunk(finishReason: FinishReason, usage: Usage): DoneChunk;",
              "documentation": "Creates a done chunk."
            },
            {
              "name": "isTextDelta",
              "line": 200,
              "signature": "export function isTextDelta(chunk: StreamChunk): chunk is TextDeltaChunk;",
              "documentation": "Returns `true` if this is a text delta chunk."
            },
            {
              "name": "isDone",
              "line": 210,
              "signature": "export function isDone(chunk: StreamChunk): chunk is DoneChunk;",
              "documentation": "Returns `true` if this is the final chunk."
            },
            {
              "name": "chunkText",
              "line": 220,
              "signature": "export function chunkText(chunk: StreamChunk): string | undefined;",
              "documentation": "Extracts the text from a text delta, if applicable."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/provider-families.ts",
          "sha256": "342c0dfc4a8cb07359424f9c0837d32e337b71a11e29d678e57725e41270d13e",
          "artifactSha256": "bbbe3fdb55f0a3d6ea3a7ac7f38cb59cd94300a19777063fbd727424dc0b27f4",
          "url": "/reference/source/forge-ts/packages/forge-core/src/provider-families.ts.txt",
          "declarations": [
            {
              "name": "export const ProviderFamily = {",
              "line": 50,
              "signature": "export const ProviderFamily /* type inferred in source */;",
              "documentation": ""
            },
            {
              "name": "ProviderFamily",
              "line": 56,
              "signature": "export type ProviderFamily = (typeof ProviderFamily)[keyof typeof ProviderFamily];",
              "documentation": ""
            },
            {
              "name": "export const AuthStrategy = {",
              "line": 58,
              "signature": "export const AuthStrategy /* type inferred in source */;",
              "documentation": ""
            },
            {
              "name": "AuthStrategy",
              "line": 65,
              "signature": "export type AuthStrategy = (typeof AuthStrategy)[keyof typeof AuthStrategy];",
              "documentation": ""
            },
            {
              "name": "ProviderPreset",
              "line": 67,
              "signature": "export interface ProviderPreset {\n  readonly namespace: string;\n  readonly family: ProviderFamily;\n  readonly authStrategy: AuthStrategy;\n}",
              "documentation": ""
            },
            {
              "name": "ProviderEnvironment",
              "line": 73,
              "signature": "export type ProviderEnvironment = Readonly<Record<string, string | undefined>>;",
              "documentation": ""
            },
            {
              "name": "ProviderExecutionRequest",
              "line": 75,
              "signature": "export interface ProviderExecutionRequest {\n  readonly providerRef: string;\n  readonly namespace: string;\n  readonly modelId: string;\n  readonly family: ProviderFamily;\n  readonly authStrategy: AuthStrategy;\n  readonly credential: string;\n  readonly baseUrl?: string;\n  readonly messages: readonly ModelMessage[];\n  readonly tools: readonly ToolDefinition[];\n  readonly options: GenerateOptions;\n}",
              "documentation": ""
            },
            {
              "name": "ProviderInstallOptions",
              "line": 88,
              "signature": "export interface ProviderInstallOptions {\n  readonly env?: ProviderEnvironment;\n  readonly generate?: (\n    request: ProviderExecutionRequest\n  ) => Promise<GenerateResult>;\n  readonly stream?: (\n    request: ProviderExecutionRequest\n  ) => AsyncGenerator<StreamChunk>;\n}",
              "documentation": ""
            },
            {
              "name": "approvedCodingProviderPresets",
              "line": 115,
              "signature": "export function approvedCodingProviderPresets(): ProviderPreset[];",
              "documentation": ""
            },
            {
              "name": "approvedDirectProviderPresets",
              "line": 145,
              "signature": "export function approvedDirectProviderPresets(): ProviderPreset[];",
              "documentation": ""
            },
            {
              "name": "approvedGatewayProviderPresets",
              "line": 165,
              "signature": "export function approvedGatewayProviderPresets(): ProviderPreset[];",
              "documentation": ""
            },
            {
              "name": "registerOfficialCodingProviders",
              "line": 195,
              "signature": "export function registerOfficialCodingProviders(\n  registry: ProviderRegistry,\n  options: ProviderInstallOptions = {}\n): void;",
              "documentation": ""
            },
            {
              "name": "registerDefaultCoreDirectProviders",
              "line": 322,
              "signature": "export function registerDefaultCoreDirectProviders(\n  registry: ProviderRegistry,\n  options: ProviderInstallOptions = {}\n): string[];",
              "documentation": ""
            },
            {
              "name": "registerOpenAiModel",
              "line": 333,
              "signature": "export function registerOpenAiModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerAnthropicModel",
              "line": 350,
              "signature": "export function registerAnthropicModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerGoogleModel",
              "line": 371,
              "signature": "export function registerGoogleModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerXaiModel",
              "line": 392,
              "signature": "export function registerXaiModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerDeepSeekModel",
              "line": 409,
              "signature": "export function registerDeepSeekModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerMistralModel",
              "line": 426,
              "signature": "export function registerMistralModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerCohereModel",
              "line": 443,
              "signature": "export function registerCohereModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerGroqModel",
              "line": 460,
              "signature": "export function registerGroqModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerMoonshotModel",
              "line": 477,
              "signature": "export function registerMoonshotModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerZaiModel",
              "line": 494,
              "signature": "export function registerZaiModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerMiniMaxModel",
              "line": 511,
              "signature": "export function registerMiniMaxModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerOpenRouterModel",
              "line": 528,
              "signature": "export function registerOpenRouterModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerBedrockModel",
              "line": 545,
              "signature": "export function registerBedrockModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerVertexAiModel",
              "line": 566,
              "signature": "export function registerVertexAiModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerMicrosoftFoundryModel",
              "line": 587,
              "signature": "export function registerMicrosoftFoundryModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "registerFoundryModel",
              "line": 608,
              "signature": "export function registerFoundryModel(\n  registry: ProviderRegistry,\n  modelId: string,\n  options: ProviderInstallOptions = {}\n): string;",
              "documentation": ""
            },
            {
              "name": "unavailableProviderResult",
              "line": 1116,
              "signature": "export function unavailableProviderResult(providerRef: string): GenerateResult;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/provider.ts",
          "sha256": "23f7404f594990af9783d145f03d01eb785c909bdc91913739bd6c65f32d5fe1",
          "artifactSha256": "833e138d48e121144c1b9a885ca8ea89716dab81c2cad3793cf3079de5a38c0f",
          "url": "/reference/source/forge-ts/packages/forge-core/src/provider.ts.txt",
          "declarations": [
            {
              "name": "ProviderRef",
              "line": 27,
              "signature": "export class ProviderRef {\n  readonly namespace: string;\n  readonly model: string;\n  readonly full: string;\n  static parse(input: string): ProviderRef;\n  toString(): string;\n  toJSON(): { namespace: string; model: string; full: string };\n}",
              "documentation": "A parsed provider reference in `namespace:model` format."
            },
            {
              "name": "ProviderMetadata",
              "line": 88,
              "signature": "export interface ProviderMetadata {\n  /** Human-readable name. */\n  readonly name: string;\n  /** Provider namespace (e.g., \"openai\"). */\n  readonly namespace: string;\n  /** Whether the provider supports tool calling. */\n  readonly supportsToolCalling: boolean;\n  /** Whether the provider supports structured output. */\n  readonly supportsStructuredOutput: boolean;\n  /** Whether the provider supports streaming. */\n  readonly supportsStreaming: boolean;\n  /** Whether the provider supports image input. */\n  readonly supportsImageInput: boolean;\n  /** Provider-session runtime capabilities for coding-style integrations. */\n  readonly runtimeCapabilities: ProviderRuntimeCapabilities;\n}",
              "documentation": "Metadata about a registered provider."
            },
            {
              "name": "RuntimeCapability",
              "line": 108,
              "signature": "export enum RuntimeCapability {\n  ToolCalls = 'tool_calls',\n  DelegatedAgents = 'delegated_agents',\n  TerminalSession = 'terminal_session',\n  StructuredPatch = 'structured_patch',\n  Attachments = 'attachments',\n  Interrupts = 'interrupts',\n  ResumeSession = 'resume_session',\n  ApprovalCheckpoints = 'approval_checkpoints',\n  UsageStreaming = 'usage_streaming',\n  TranscriptExport = 'transcript_export',\n}",
              "documentation": "Advanced provider runtime capabilities beyond the mandatory baseline."
            },
            {
              "name": "ProviderRuntimeCapabilities",
              "line": 124,
              "signature": "export class ProviderRuntimeCapabilities {\n  readonly baselineContract: boolean;\n  readonly capabilities: readonly RuntimeCapability[];\n  constructor(\n    baselineContract = false,\n    capabilities: readonly RuntimeCapability[] = []\n  );\n  static baseline(): ProviderRuntimeCapabilities;\n  withCapability(capability: RuntimeCapability): ProviderRuntimeCapabilities;\n  supports(capability: RuntimeCapability): boolean;\n}",
              "documentation": "Runtime capability descriptor for a provider."
            },
            {
              "name": "ProviderNegotiationRequest",
              "line": 152,
              "signature": "export interface ProviderNegotiationRequest {\n  readonly providerRef: string;\n  readonly requireBaselineContract: boolean;\n  readonly requiredCapabilities: readonly RuntimeCapability[];\n}",
              "documentation": ""
            },
            {
              "name": "ProviderNegotiationResult",
              "line": 158,
              "signature": "export interface ProviderNegotiationResult {\n  readonly providerRef: string;\n  readonly baselineContract: boolean;\n  readonly negotiatedCapabilities: readonly RuntimeCapability[];\n}",
              "documentation": ""
            },
            {
              "name": "ProviderSessionState",
              "line": 164,
              "signature": "export enum ProviderSessionState {\n  Created = 'created',\n  Ready = 'ready',\n  Running = 'running',\n  Interrupted = 'interrupted',\n  Completed = 'completed',\n  Cancelled = 'cancelled',\n  Failed = 'failed',\n  Expired = 'expired',\n  Closed = 'closed',\n}",
              "documentation": ""
            },
            {
              "name": "ProviderUsageSummary",
              "line": 176,
              "signature": "export interface ProviderUsageSummary {\n  readonly inputTokens: number;\n  readonly outputTokens: number;\n  readonly totalTokens: number;\n}",
              "documentation": ""
            },
            {
              "name": "ProviderSessionEvent",
              "line": 182,
              "signature": "export interface ProviderSessionEvent {\n  readonly sessionId: string;\n  readonly state: ProviderSessionState;\n  readonly message?: string;\n  readonly usage?: ProviderUsageSummary;\n}",
              "documentation": ""
            },
            {
              "name": "ProviderRegistry",
              "line": 203,
              "signature": "export class ProviderRegistry {\n  register(providerRef: string, model: LanguageModel): void;\n  registerWithRuntime(\n    providerRef: string,\n    model: LanguageModel,\n    runtimeCapabilities: ProviderRuntimeCapabilities\n  ): void;\n  get(providerRef: string): LanguageModel | undefined;\n  require(providerRef: string): LanguageModel;\n  metadata(providerRef: string): ProviderMetadata | undefined;\n  negotiate(request: ProviderNegotiationRequest): ProviderNegotiationResult;\n  list(): string[];\n  get size(): number;\n  get isEmpty(): boolean;\n}",
              "documentation": "Registry of language model providers.\n\nMaps ProviderRef strings to concrete LanguageModel implementations.\nAgents look up models through this registry rather than constructing\nprovider instances directly."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/routing.ts",
          "sha256": "c38e318ccfffcb016d8bad82b59dd5ec5b34bf990035e529ccde98465d270530",
          "artifactSha256": "6843dc36b231ece3de1a56830aa9364e2a00e0605103847d76f7df9dbdab7ed9",
          "url": "/reference/source/forge-ts/packages/forge-core/src/routing.ts.txt",
          "declarations": [
            {
              "name": "export const TaskMode = {",
              "line": 28,
              "signature": "export const TaskMode /* type inferred in source */;",
              "documentation": "The phase of work a model call serves.\n\nTask modes represent the different phases of agent work. The model\nrouter uses the task mode to select an appropriate model slot."
            },
            {
              "name": "TaskMode",
              "line": 40,
              "signature": "export type TaskMode = (typeof TaskMode)[keyof typeof TaskMode];",
              "documentation": "Task mode type."
            },
            {
              "name": "taskModeAsRoleName",
              "line": 50,
              "signature": "export function taskModeAsRoleName(mode: TaskMode): string;",
              "documentation": "Returns the role name string corresponding to a task mode.\n\nUsed by the router to match task modes to slot role names."
            },
            {
              "name": "export const ExecutionTopology = {",
              "line": 60,
              "signature": "export const ExecutionTopology /* type inferred in source */;",
              "documentation": "How the current model call fits into a larger execution pattern.\n\nExecution topology describes the concurrency pattern surrounding the\ncurrent inference call. This can guide model selection."
            },
            {
              "name": "ExecutionTopology",
              "line": 72,
              "signature": "export type ExecutionTopology = (typeof ExecutionTopology)[keyof typeof ExecutionTopology];",
              "documentation": "Execution topology type."
            },
            {
              "name": "RoutingContext",
              "line": 80,
              "signature": "export interface RoutingContext {\n  /** The domain classification for this call (e.g., \"code\", \"math\"). */\n  readonly domain?: string;\n  /** The task mode for this call. */\n  readonly taskMode?: TaskMode;\n  /** The execution topology for this call. */\n  readonly executionTopology?: ExecutionTopology;\n  /** Tool capabilities required for the model selected by this route. */\n  readonly toolRequirements?: readonly string[];\n  /** Explicit role override. When set, the router returns that slot directly. */\n  readonly roleOverride?: string;\n}",
              "documentation": ""
            },
            {
              "name": "defaultRoutingContext",
              "line": 96,
              "signature": "export function defaultRoutingContext(): RoutingContext;",
              "documentation": "Default routing context with no fields set."
            },
            {
              "name": "ModelCapabilities",
              "line": 105,
              "signature": "export interface ModelCapabilities {\n  readonly textGeneration: boolean;\n  readonly toolCalling: boolean;\n}",
              "documentation": "Model capabilities of a resolved route.\n\nDefault values assume basic text generation and tool calling."
            },
            {
              "name": "defaultModelCapabilities",
              "line": 113,
              "signature": "export function defaultModelCapabilities(): ModelCapabilities;",
              "documentation": "Default model capabilities."
            },
            {
              "name": "ResolvedRoute",
              "line": 122,
              "signature": "export interface ResolvedRoute {\n  /** The role name of the selected slot. */\n  readonly slotRole: string;\n  /** The specific `ProviderRef` to use (primary or one of the fallbacks). */\n  readonly provider: ProviderRef;\n  /** The model capabilities of the selected provider. */\n  readonly modelCapabilities: ModelCapabilities;\n  /** Whether a fallback model was selected instead of the primary. */\n  readonly fallbackUsed: boolean;\n}",
              "documentation": ""
            },
            {
              "name": "ModelRouter",
              "line": 141,
              "signature": "export interface ModelRouter {\n  /** Returns the name of this routing strategy (for telemetry and debugging). */\n  name(): string;\n\n  /**\n   * Selects a slot from the topology.\n   *\n   * @param context - The routing context describing the current task.\n   * @param topology - The model topology to select from.\n   * @returns A `ResolvedRoute` identifying the selected slot and provider.\n   * @throws {ForgeError} If routing fails.\n   */\n  route(context: RoutingContext, topology: ModelTopology): ResolvedRoute;\n}",
              "documentation": "Selects a model slot from a topology given a routing context.\n\nImplementations range from trivial (always return default) to\nsophisticated (heuristic classification, budget-aware optimization).\n\nANVIL Spec SS6.2 -- Provider Abstraction."
            },
            {
              "name": "DefaultModelRouter",
              "line": 176,
              "signature": "export class DefaultModelRouter implements ModelRouter {\n  name(): string;\n  route(context: RoutingContext, topology: ModelTopology): ResolvedRoute;\n}",
              "documentation": "The default model router shipped with Forge.\n\nImplements a cascading match strategy:\n\n1. If `context.roleOverride` is set, return that slot directly.\n2. If the topology has a slot whose role matches `context.domain`, return it.\n3. If the topology has a slot whose role matches `context.taskMode`, return it.\n4. Otherwise, return the \"default\" slot."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/schema.ts",
          "sha256": "e8587842c3c0f99372a44df698ad9b07d1cd2185b457a8d52cea0144b0ec2c24",
          "artifactSha256": "d2285647a4b8f9a57f996b1e2b88fcc6f0233ce509865a35f784ef568dee3b54",
          "url": "/reference/source/forge-ts/packages/forge-core/src/schema.ts.txt",
          "declarations": [
            {
              "name": "export const SchemaType = {",
              "line": 18,
              "signature": "export const SchemaType /* type inferred in source */;",
              "documentation": "The primitive JSON Schema types."
            },
            {
              "name": "SchemaType",
              "line": 29,
              "signature": "export type SchemaType = (typeof SchemaType)[keyof typeof SchemaType];",
              "documentation": "The primitive JSON Schema types."
            },
            {
              "name": "JsonSchema",
              "line": 45,
              "signature": "export class JsonSchema {\n  readonly type: SchemaType;\n  descriptionText?: string;\n  propertiesMap?: Map<string, JsonSchema>;\n  requiredFields?: string[];\n  additionalPropertiesAllowed?: boolean;\n  itemsSchema?: JsonSchema;\n  enumValuesList?: unknown[];\n  minimumValue?: number;\n  maximumValue?: number;\n  minLengthValue?: number;\n  maxLengthValue?: number;\n  static string(): JsonSchema;\n  static number(): JsonSchema;\n  static integer(): JsonSchema;\n  static boolean(): JsonSchema;\n  static array(): JsonSchema;\n  static object(): JsonSchema;\n  static null(): JsonSchema;\n  description(desc: string): this;\n  property(name: string, schema: JsonSchema): this;\n  required(name: string): this;\n  items(schema: JsonSchema): this;\n  enumValues(values: unknown[]): this;\n  minimum(min: number): this;\n  maximum(max: number): this;\n  minLength(len: number): this;\n  maxLength(len: number): this;\n  additionalProperties(allowed: boolean): this;\n  validate(value: unknown): void;\n  toJSON(): Record<string, unknown>;\n}",
              "documentation": "A JSON Schema definition for tool parameters and structured output."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/telemetry.ts",
          "sha256": "730d3f938c8e5d8d2a23c3ea536d3eccde6913c1c30fed24b2a955b77327b976",
          "artifactSha256": "b7ed7d68e8160adaff270613978c7c4a2563a4def263663217d8e4852696e3f4",
          "url": "/reference/source/forge-ts/packages/forge-core/src/telemetry.ts.txt",
          "declarations": [
            {
              "name": "export const SpanStatus = {",
              "line": 19,
              "signature": "export const SpanStatus /* type inferred in source */;",
              "documentation": "Span status following OpenTelemetry conventions."
            },
            {
              "name": "SpanStatusType",
              "line": 29,
              "signature": "export type SpanStatusType = (typeof SpanStatus)[keyof typeof SpanStatus];",
              "documentation": "Span status type."
            },
            {
              "name": "SpanAttribute",
              "line": 32,
              "signature": "export type SpanAttribute = string | number | boolean;",
              "documentation": "An attribute value for spans and events."
            },
            {
              "name": "ForgeSpan",
              "line": 47,
              "signature": "export class ForgeSpan {\n  readonly name: string;\n  readonly startTime: Timestamp;\n  endTime: Timestamp | null;\n  readonly attributes: Map<string, SpanAttribute>;\n  status: SpanStatusType;\n  statusMessage: string | null;\n  parentId: string | null;\n  readonly spanId: string;\n  constructor(name: string);\n  setAttribute(key: string, value: SpanAttribute): void;\n  end(): void;\n  endWithError(message: string): void;\n  withParent(parentId: string): this;\n}",
              "documentation": "A telemetry span representing a unit of work.\n\nSpans follow OpenTelemetry semantics: they have a name, start/end times,\nattributes, and optional parent span ID for distributed tracing."
            },
            {
              "name": "ForgeEvent",
              "line": 128,
              "signature": "export class ForgeEvent {\n  readonly name: string;\n  readonly timestamp: Timestamp;\n  readonly attributes: Map<string, SpanAttribute>;\n  constructor(name: string);\n  setAttribute(key: string, value: SpanAttribute): void;\n}",
              "documentation": "A telemetry event (a point-in-time annotation within a span).\n\nEvents record significant moments: tool invocations, lifecycle transitions,\nerror occurrences, etc."
            },
            {
              "name": "TelemetryEmitter",
              "line": 171,
              "signature": "export interface TelemetryEmitter {\n  /** Emits a completed span. */\n  emitSpan(span: ForgeSpan): void;\n  /** Emits an event. */\n  emitEvent(event: ForgeEvent): void;\n}",
              "documentation": "Interface for emitting telemetry data.\n\nImplementations can send spans and events to OpenTelemetry collectors,\nlog files, or in-memory buffers for testing."
            },
            {
              "name": "NoopEmitter",
              "line": 183,
              "signature": "export class NoopEmitter implements TelemetryEmitter {\n  emitSpan(_span: ForgeSpan): void;\n  emitEvent(_event: ForgeEvent): void;\n}",
              "documentation": "A no-op telemetry emitter that discards all data.\n\nUsed as the default when no telemetry collector is configured."
            },
            {
              "name": "RecordingEmitter",
              "line": 204,
              "signature": "export class RecordingEmitter implements TelemetryEmitter {\n  readonly spans: ForgeSpan[];\n  readonly events: ForgeEvent[];\n  emitSpan(span: ForgeSpan): void;\n  emitEvent(event: ForgeEvent): void;\n}",
              "documentation": "A recording telemetry emitter that captures spans and events in memory.\n\nUseful for testing and debugging."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/tool.ts",
          "sha256": "d3eaca580e16e96ef69258de0045ed2a06de6f2afe19fe0eb8d5b24c67af338d",
          "artifactSha256": "927af17399215db8d5727cab1a6d910098ae53425b0b1d6a71bab1affe3d2cf2",
          "url": "/reference/source/forge-ts/packages/forge-core/src/tool.ts.txt",
          "declarations": [
            {
              "name": "export const ToolTier = {",
              "line": 29,
              "signature": "export const ToolTier /* type inferred in source */;",
              "documentation": "Tool tier classification per ANVIL Spec section 8.1.\n\nThe three tiers determine where a tool executes, how it is discovered,\nand what authorization is required.\n\n| Tier | Name | Location | Auth |\n|------|------|----------|------|\n| 1 | Platform | Inside sandbox | Always available |\n| 2 | External | Outside sandbox | Arsenal ACT required |\n| 3 | Embedded | Inside WASM module | Module-scoped |\n\nNote: `Host` is retained as an alias for backward compatibility. New code\nshould use `External`."
            },
            {
              "name": "ToolTier",
              "line": 49,
              "signature": "export type ToolTier = (typeof ToolTier)[keyof typeof ToolTier];",
              "documentation": "Tool tier classification."
            },
            {
              "name": "requiresAuthorization",
              "line": 69,
              "signature": "export function requiresAuthorization(tier: ToolTier): boolean;",
              "documentation": "Returns `true` if this tier requires Arsenal ACT authorization.\n\nOnly Tier 2 (External/Host) tools require ACT checks. Platform tools are\nalways available, and embedded tools are sandbox-confined.\n\nAccepts both `'external'` and `'host'` for backward compatibility."
            },
            {
              "name": "ToolDefinition",
              "line": 91,
              "signature": "export interface ToolDefinition {\n  /** Unique tool name. */\n  readonly name: string;\n  /** Human-readable description shown to the model. */\n  readonly description: string;\n  /** JSON Schema defining the tool's parameters. */\n  readonly parameters: JsonSchema;\n  /** Tier classification (Platform/External/Embedded). */\n  readonly tier: ToolTier;\n}",
              "documentation": "Definition of a tool that an agent can invoke.\n\nANVIL Spec section 8.2: Every tool has a unique name, human-readable\ndescription, a JSON Schema for its parameters, and a tier classification."
            },
            {
              "name": "buildToolDefinition",
              "line": 117,
              "signature": "export function buildToolDefinition(name: string): ToolDefinitionBuilder;",
              "documentation": "Creates a ToolDefinition using a builder pattern."
            },
            {
              "name": "ToolDefinitionBuilder",
              "line": 126,
              "signature": "export class ToolDefinitionBuilder {\n  constructor(name: string);\n  description(desc: string): this;\n  parameters(schema: JsonSchema): this;\n  tier(tier: ToolTier): this;\n  build(): ToolDefinition;\n}",
              "documentation": "Builder for ToolDefinition.\n\nProvides a fluent API for constructing tool definitions step by step."
            },
            {
              "name": "ToolCall",
              "line": 192,
              "signature": "export interface ToolCall {\n  /** Unique identifier for this call (used to match with results). */\n  readonly id: string;\n  /** The tool name being invoked. */\n  readonly name: string;\n  /** JSON arguments for the tool. */\n  readonly arguments: unknown;\n}",
              "documentation": "A tool invocation request from the model.\n\nGenerated by the model during inference when it decides to call a tool."
            },
            {
              "name": "ToolResult",
              "line": 206,
              "signature": "export interface ToolResult {\n  /** The tool call ID this result corresponds to. */\n  readonly toolCallId: string;\n  /** The tool name. */\n  readonly name: string;\n  /** The result content (stringified). */\n  readonly content: string;\n  /** Whether the tool execution resulted in an error. */\n  readonly isError: boolean;\n}",
              "documentation": "The result of a tool execution.\n\nReturned to the model as context for the next inference step."
            },
            {
              "name": "export const ToolApprovalDecision = {",
              "line": 226,
              "signature": "export const ToolApprovalDecision /* type inferred in source */;",
              "documentation": "Tool approval decision.\n\nBefore executing a tool, the approval handler decides whether to proceed.\nThis enables human-in-the-loop and policy-based tool gating.\n\nANVIL Spec section 8.6: The approval step is mandatory in the tool\nexecution lifecycle."
            },
            {
              "name": "ToolApprovalDecision",
              "line": 236,
              "signature": "export type ToolApprovalDecision =\n  (typeof ToolApprovalDecision)[keyof typeof ToolApprovalDecision];",
              "documentation": "Tool approval decision type."
            },
            {
              "name": "ToolApproval",
              "line": 245,
              "signature": "export type ToolApproval =\n  | { readonly decision: 'approve' }\n  | { readonly decision: 'deny'; readonly reason: string }\n  | { readonly decision: 'modify'; readonly arguments: unknown };",
              "documentation": "A tool approval result.\n\nReturned by the approval handler to indicate whether a tool call should\nproceed, be denied, or be modified."
            },
            {
              "name": "approve",
              "line": 255,
              "signature": "export function approve(): ToolApproval;",
              "documentation": "Creates an \"approve\" approval."
            },
            {
              "name": "deny",
              "line": 265,
              "signature": "export function deny(reason: string): ToolApproval;",
              "documentation": "Creates a \"deny\" approval."
            },
            {
              "name": "modify",
              "line": 275,
              "signature": "export function modify(args: unknown): ToolApproval;",
              "documentation": "Creates a \"modify\" approval."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/topology.ts",
          "sha256": "539a27285463b50e4b2859fd2c189d0e17fd1ab193658138cecba9185cb621b3",
          "artifactSha256": "e1270ba3323eb88a8f13bb4f97cd613af1d5663354a6d70ed195e59d0d17130e",
          "url": "/reference/source/forge-ts/packages/forge-core/src/topology.ts.txt",
          "declarations": [
            {
              "name": "export const DEFAULT_ROLE = 'default';",
              "line": 27,
              "signature": "export const DEFAULT_ROLE /* type inferred in source */;",
              "documentation": "The default role name that every topology must contain."
            },
            {
              "name": "export const CostPreference = {",
              "line": 35,
              "signature": "export const CostPreference /* type inferred in source */;",
              "documentation": "Cost preference for a model slot.\n\nGuides the router's cost-sensitivity when selecting among multiple\neligible slots or fallback candidates."
            },
            {
              "name": "CostPreference",
              "line": 45,
              "signature": "export type CostPreference = (typeof CostPreference)[keyof typeof CostPreference];",
              "documentation": "Cost preference type."
            },
            {
              "name": "export const LatencyPreference = {",
              "line": 53,
              "signature": "export const LatencyPreference /* type inferred in source */;",
              "documentation": "Latency preference for a model slot.\n\nGuides the router's latency-sensitivity when selecting among multiple\neligible slots or fallback candidates."
            },
            {
              "name": "LatencyPreference",
              "line": 63,
              "signature": "export type LatencyPreference = (typeof LatencyPreference)[keyof typeof LatencyPreference];",
              "documentation": "Latency preference type."
            },
            {
              "name": "ModelSlot",
              "line": 75,
              "signature": "export interface ModelSlot {\n  /** The role name for this slot (e.g., \"planner\", \"coder\", \"default\"). */\n  readonly role: string;\n  /** Primary model for this slot. */\n  readonly primary: ProviderRef;\n  /** Ordered fallback models. Tried in sequence when the primary is unavailable. */\n  readonly fallbacks: readonly ProviderRef[];\n  /** Runtime capabilities required for this slot. */\n  readonly requiredCapabilities: readonly RuntimeCapability[];\n  /** Optional cost preference for the router. */\n  readonly costPreference?: CostPreference;\n  /** Optional latency preference for the router. */\n  readonly latencyPreference?: LatencyPreference;\n  /**\n   * Optional Arsenal scope narrowing applied when this slot is selected.\n   * If set, the agent's ACT is intersected with these scopes before\n   * the model call. The intersection can only narrow, never widen.\n   */\n  readonly arsenalScopeNarrowing?: readonly string[];\n}",
              "documentation": "A named model assignment within a topology.\n\nEach slot represents a role that a model fills (e.g., \"planner\",\n\"coder\", \"classifier\"). The slot carries the primary model reference,\nan ordered fallback list, capability requirements, and optional\nArsenal scope narrowing.\n\nANVIL Spec SS6.2 -- Provider Abstraction."
            },
            {
              "name": "ModelTopology",
              "line": 114,
              "signature": "export class ModelTopology {\n  constructor(\n    name: string,\n    slots: Map<string, ModelSlot>,\n    defaultRole: string,\n  );\n  static single(providerRef: ProviderRef): ModelTopology;\n  static builder(): TopologyBuilder;\n  name(): string;\n  defaultRole(): string;\n  defaultSlot(): ModelSlot;\n  slotForRole(role: string): ModelSlot;\n  slots(): ReadonlyMap<string, ModelSlot>;\n  allProviderRefs(): readonly ProviderRef[];\n  hasRole(role: string): boolean;\n  slotCount(): number;\n  toJSON(): Record<string, unknown>;\n}",
              "documentation": ""
            },
            {
              "name": "TopologyBuilder",
              "line": 325,
              "signature": "export class TopologyBuilder {\n  name(name: string): this;\n  slot(role: string, primary: ProviderRef): this;\n  withFallback(role: string, fallback: ProviderRef): this;\n  withRequiredCapability(role: string, cap: RuntimeCapability): this;\n  withCostPreference(role: string, pref: CostPreference): this;\n  withLatencyPreference(role: string, pref: LatencyPreference): this;\n  withScopeNarrowing(role: string, scopes: string[]): this;\n  build(): ModelTopology;\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-core/src/types.ts",
          "sha256": "f643380727ad89e5ff68efd1be9b1c24ae96d9bec515becfda44eb97f5cb92e2",
          "artifactSha256": "cea86b55d1dcdb29ca04ae1ed2ba0ba9c20e1f1d330d46b8f1ec454278c63074",
          "url": "/reference/source/forge-ts/packages/forge-core/src/types.ts.txt",
          "declarations": [
            {
              "name": "AgentDid",
              "line": 23,
              "signature": "export type AgentDid = string & { readonly __brand: 'AgentDid' };",
              "documentation": "Common types used across the Forge SDK.\n\nThese types provide type safety and domain-specific validation for values\nthat would otherwise be bare strings or integers.\nA DID (Decentralized Identifier) representing an agent's identity.\n\nFormat: `did:oas:<namespace>:<kind>:<identifier>`"
            },
            {
              "name": "createAgentDid",
              "line": 43,
              "signature": "export function createAgentDid(did: string): AgentDid | null;",
              "documentation": "Creates a new AgentDid from a DID string.\n\nValidates that the string matches the `did:oas:*` format with at least\n5 colon-separated segments."
            },
            {
              "name": "trustedAgentDid",
              "line": 59,
              "signature": "export function trustedAgentDid(did: string): AgentDid;",
              "documentation": "Creates an AgentDid without validation.\n\nThe caller must ensure the string is a valid OAS DID. This is provided\nfor interop with the OAS SDK which already validates DIDs."
            },
            {
              "name": "Timestamp",
              "line": 74,
              "signature": "export class Timestamp {\n  static now(): Timestamp;\n  static fromISO(s: string): Timestamp | null;\n  static fromDate(date: Date): Timestamp;\n  toISO(): string;\n  toDate(): Date;\n  toEpochMs(): number;\n  toString(): string;\n  toJSON(): string;\n  isAtOrAfter(other: Timestamp): boolean;\n}",
              "documentation": "A UTC timestamp used throughout the Forge SDK.\n\nWraps an ISO 8601 date-time string with Forge-specific construction helpers."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/embed",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Embedding, reranking, vector store, and document chunking for the Forge SDK",
      "manifest": "forge-ts/packages/forge-embed/package.json",
      "manifestSha256": "edabb7540370afd3209e18fb51df977e5e33cffc738399f7f6bdbb2217ece289",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/embed",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-embed/src/chunking.ts",
          "sha256": "c78ef30a78111bcfeb5c5ed82e48a59c3144035d43a0961485dcaded4acb2e93",
          "artifactSha256": "f6e612fce831207c30b367b5556b83b8011d51e0cf982f0d69d04c53ccf28660",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/chunking.ts.txt",
          "declarations": [
            {
              "name": "TextSplitter",
              "line": 26,
              "signature": "export interface TextSplitter {\n  /**\n   * Splits text into chunks.\n   *\n   * @param text - The text to split.\n   * @returns An array of text chunks.\n   */\n  split(text: string): string[];\n}",
              "documentation": "Interface for splitting text into chunks.\n\nText splitters break long documents into smaller pieces suitable for\nembedding. Different strategies optimize for different use cases\n(semantic boundaries, token counts, etc.)."
            },
            {
              "name": "RecursiveCharacterSplitterOptions",
              "line": 39,
              "signature": "export interface RecursiveCharacterSplitterOptions {\n  /** Maximum number of characters per chunk. Defaults to 1000. */\n  readonly chunkSize?: number;\n  /** Number of overlapping characters between consecutive chunks. Defaults to 200. */\n  readonly chunkOverlap?: number;\n  /**\n   * Separator hierarchy from coarsest to finest. Defaults to\n   * `['\\n\\n', '\\n', '. ', ' ', '']` (paragraphs, lines, sentences, words, chars).\n   */\n  readonly separators?: readonly string[];\n}",
              "documentation": ""
            },
            {
              "name": "RecursiveCharacterSplitter",
              "line": 70,
              "signature": "export class RecursiveCharacterSplitter implements TextSplitter {\n  constructor(options: RecursiveCharacterSplitterOptions = {});\n  split(text: string): string[];\n}",
              "documentation": "Splits text recursively using a hierarchy of separators.\n\nThe splitter tries the coarsest separator first (e.g., paragraph breaks),\nand falls back to finer separators when chunks exceed the target size.\nConsecutive chunks overlap by `chunkOverlap` characters to preserve context.\n\nANVIL Spec section 9.3 -- Document chunking for RAG pipelines."
            },
            {
              "name": "TokenSplitterOptions",
              "line": 232,
              "signature": "export interface TokenSplitterOptions {\n  /** Maximum number of tokens per chunk. Defaults to 256. */\n  readonly tokensPerChunk?: number;\n  /** Number of overlapping tokens between consecutive chunks. Defaults to 0. */\n  readonly tokenOverlap?: number;\n}",
              "documentation": ""
            },
            {
              "name": "TokenSplitter",
              "line": 252,
              "signature": "export class TokenSplitter implements TextSplitter {\n  constructor(options: TokenSplitterOptions = {});\n  split(text: string): string[];\n}",
              "documentation": "Splits text by approximate token count using whitespace tokenization.\n\nThis is a simple, zero-dependency token splitter that approximates token\nboundaries by splitting on whitespace. For precise token counts matching\na specific model's tokenizer, use a model-specific tokenizer."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-embed/src/document.ts",
          "sha256": "3d878445022e2b7a05ab30c9e2a5c85910adb9fae3cc3d5b58ec366a8bf474cb",
          "artifactSha256": "69aee9bd6f60be5de140f8c08292e4d15923c6db3b0399f0fd191fb77443cb98",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/document.ts.txt",
          "declarations": [
            {
              "name": "Document",
              "line": 27,
              "signature": "export interface Document {\n  /** The text content of the document. */\n  readonly content: string;\n  /** Optional key-value metadata for filtering and context. */\n  readonly metadata: Record<string, unknown>;\n}",
              "documentation": "A document with content and metadata.\n\nDocuments are the input to embedding pipelines. The content is the text\nto be embedded, and metadata provides additional context for filtering\nand retrieval."
            },
            {
              "name": "DocumentLoader",
              "line": 45,
              "signature": "export interface DocumentLoader {\n  /**\n   * Loads documents from the given source.\n   *\n   * @param source - The source content (text, JSON string, URL, etc.).\n   * @returns An array of loaded documents.\n   * @throws {ForgeEmbedError} If loading fails.\n   */\n  load(source: string): Promise<Document[]>;\n}",
              "documentation": "Interface for loading documents from various sources.\n\nImplementors provide document loading from files, APIs, databases, etc."
            },
            {
              "name": "TextLoader",
              "line": 69,
              "signature": "export class TextLoader implements DocumentLoader {\n  async load(source: string): Promise<Document[]>;\n}",
              "documentation": "Loads raw text as a single document.\n\nThe entire input text becomes the document content. No parsing or\ntransformation is applied."
            },
            {
              "name": "JsonLoader",
              "line": 101,
              "signature": "export class JsonLoader implements DocumentLoader {\n  constructor(contentField?: string);\n  async load(source: string): Promise<Document[]>;\n}",
              "documentation": "Loads documents from a JSON string.\n\nSupports both JSON arrays (each element becomes a document) and single\nJSON objects. When a `contentField` is specified, only that field is\nextracted as the document content; otherwise the entire JSON is used."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-embed/src/embed.ts",
          "sha256": "f975e97d95f3f1309109f31e8d0265b0ccdabb868ca717949e22baa490b5673a",
          "artifactSha256": "fae5899fd8a68a053b57ac05415ea4661ff6b905707d619c41289c252c47a5e3",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/embed.ts.txt",
          "declarations": [
            {
              "name": "EmbeddingResult",
              "line": 22,
              "signature": "export interface EmbeddingResult {\n  /** The embedding vector as an array of floating-point numbers. */\n  readonly vector: readonly number[];\n  /** The model identifier that produced this embedding. */\n  readonly model: string;\n  /** The dimensionality of the embedding vector. */\n  readonly dimensions: number;\n}",
              "documentation": "The result of embedding a single text string."
            },
            {
              "name": "EmbeddingProvider",
              "line": 47,
              "signature": "export interface EmbeddingProvider {\n  /** Returns the model identifier (e.g., 'text-embedding-3-small'). */\n  modelId(): string;\n\n  /**\n   * Embeds one or more text strings into vectors.\n   *\n   * @param texts - The text strings to embed.\n   * @returns An array of EmbeddingResult, one per input text.\n   * @throws {ForgeEmbedError} If the model fails or input is invalid.\n   */\n  embed(texts: string[]): Promise<EmbeddingResult[]>;\n}",
              "documentation": "Interface for embedding text into vector representations.\n\nImplementors connect to an embedding model (e.g., OpenAI text-embedding-3-small,\nCohere embed-english-v3, local ONNX models) and produce dense vectors."
            },
            {
              "name": "embed",
              "line": 78,
              "signature": "export async function embed(\n  provider: EmbeddingProvider,\n  text: string\n): Promise<EmbeddingResult>;",
              "documentation": ""
            },
            {
              "name": "embedMany",
              "line": 120,
              "signature": "export async function embedMany(\n  provider: EmbeddingProvider,\n  texts: string[]\n): Promise<EmbeddingResult[]>;",
              "documentation": "Embeds multiple text strings using the given provider."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-embed/src/error.ts",
          "sha256": "bfad05cc472b9ebce441fd8235b6620d7206e60fa5a11be814364e9ef6ad199d",
          "artifactSha256": "96a88a1b3185740aff7d207e12c8dd87d6f78d52d3ae3439502849c7bf02e8ee",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeEmbedErrorCode = {",
              "line": 13,
              "signature": "export const ForgeEmbedErrorCode /* type inferred in source */;",
              "documentation": "Error types for the `@forge-sdk/embed` package.\n\nAll errors are typed and actionable. Error messages include enough context\nfor the developer to diagnose the issue without reading source code.\nError code enumeration for `@forge-sdk/embed`."
            },
            {
              "name": "ForgeEmbedErrorCodeType",
              "line": 23,
              "signature": "export type ForgeEmbedErrorCodeType = (typeof ForgeEmbedErrorCode)[keyof typeof ForgeEmbedErrorCode];",
              "documentation": "Error code type."
            },
            {
              "name": "ForgeEmbedError",
              "line": 42,
              "signature": "export class ForgeEmbedError extends Error {\n  public readonly code: ForgeEmbedErrorCodeType;\n  static modelError(model: string, reason: string): ForgeEmbedError;\n  static dimensionMismatch(expected: number, actual: number): ForgeEmbedError;\n  static emptyInput(operation: string): ForgeEmbedError;\n  static storeError(operation: string, reason: string): ForgeEmbedError;\n  static chunkingError(reason: string): ForgeEmbedError;\n  static core(reason: string): ForgeEmbedError;\n}",
              "documentation": "Error class for embedding operations.\n\nCovers embedding model errors, dimension mismatches, empty inputs,\nvector store failures, and chunking errors."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-embed/src/index.ts",
          "sha256": "0fa5f724b4e93768ad0d20d4dc1080c2004cb9e1803be041bdf163a00c8c89bf",
          "artifactSha256": "ca728e1ea7dc4c7bb20b51e220a600ae6db7446937dc45e40f85d5ab488aec30",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { ForgeEmbedError, ForgeEmbedErrorCode, type ForgeEmbedErrorCodeType } from './error.js';",
              "line": 29,
              "signature": "export { ForgeEmbedError, ForgeEmbedErrorCode, type ForgeEmbedErrorCodeType } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export { type EmbeddingProvider, type EmbeddingResult, embed, embedMany } from './embed.js';",
              "line": 32,
              "signature": "export { type EmbeddingProvider, type EmbeddingResult, embed, embedMany } from './embed.js';",
              "documentation": ""
            },
            {
              "name": "export { cosineSimilarity, euclideanDistance, dotProduct } from './similarity.js';",
              "line": 35,
              "signature": "export { cosineSimilarity, euclideanDistance, dotProduct } from './similarity.js';",
              "documentation": ""
            },
            {
              "name": "export { type Reranker, type RerankResult, rerank } from './rerank.js';",
              "line": 38,
              "signature": "export { type Reranker, type RerankResult, rerank } from './rerank.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 41,
              "signature": "export {\n  type VectorStore,\n  type VectorEntry,\n  type SearchResult,\n  InMemoryVectorStore,\n} from './vector-store.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 49,
              "signature": "export {\n  type TextSplitter,\n  RecursiveCharacterSplitter,\n  type RecursiveCharacterSplitterOptions,\n  TokenSplitter,\n  type TokenSplitterOptions,\n} from './chunking.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 58,
              "signature": "export {\n  type Document,\n  type DocumentLoader,\n  TextLoader,\n  JsonLoader,\n} from './document.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-embed/src/rerank.ts",
          "sha256": "a3d8d10790b25cf564329f5b6f0b3c6000edd2e3f6dc0f9e9d7a8e5170c8c3a2",
          "artifactSha256": "1055d227b8ecff4700b0ffd15d024247ff26011762d69f28a04fade8f9c0abc4",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/rerank.ts.txt",
          "declarations": [
            {
              "name": "RerankResult",
              "line": 20,
              "signature": "export interface RerankResult {\n  /** The original index of this document in the input array. */\n  readonly index: number;\n  /** The relevance score (higher is more relevant). */\n  readonly score: number;\n  /** The document text. */\n  readonly document: string;\n}",
              "documentation": "The result of reranking a single document.\n\nContains the original index, relevance score, and document text."
            },
            {
              "name": "Reranker",
              "line": 42,
              "signature": "export interface Reranker {\n  /**\n   * Reranks documents by relevance to a query.\n   *\n   * @param query - The search query.\n   * @param documents - The documents to rerank.\n   * @param topK - Maximum number of results to return.\n   * @returns Reranked documents sorted by score descending.\n   */\n  rerank(query: string, documents: string[], topK: number): Promise<RerankResult[]>;\n}",
              "documentation": "Interface for document reranking implementations.\n\nRerankers score and sort documents by relevance to a query. The default\nimplementation uses embedding cosine similarity, but dedicated reranker\nmodels (e.g., Cohere Rerank, cross-encoders) can provide higher quality."
            },
            {
              "name": "rerank",
              "line": 76,
              "signature": "export async function rerank(\n  provider: EmbeddingProvider,\n  query: string,\n  documents: string[],\n  topK: number\n): Promise<RerankResult[]>;",
              "documentation": "Reranks documents by cosine similarity to a query using an embedding provider.\n\nThis function embeds the query and all documents, computes cosine similarity\nbetween the query embedding and each document embedding, and returns the\ntop K results sorted by score descending."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-embed/src/similarity.ts",
          "sha256": "9bbc850743288983d64be5750a058959457d621179b03492c5cd52b4c4c4bb25",
          "artifactSha256": "b45e225885facc8dcac256149f83adedddbbeb98565b417e18e577d7118f7576",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/similarity.ts.txt",
          "declarations": [
            {
              "name": "cosineSimilarity",
              "line": 33,
              "signature": "export function cosineSimilarity(a: readonly number[], b: readonly number[]): number;",
              "documentation": "Computes the cosine similarity between two vectors.\n\nCosine similarity measures the cosine of the angle between two vectors,\nproducing a value in the range [-1, 1] where 1 means identical direction,\n0 means orthogonal, and -1 means opposite direction."
            },
            {
              "name": "euclideanDistance",
              "line": 73,
              "signature": "export function euclideanDistance(a: readonly number[], b: readonly number[]): number;",
              "documentation": "Computes the Euclidean distance between two vectors.\n\nEuclidean distance is the L2 norm of the difference vector. Lower values\nindicate more similar vectors."
            },
            {
              "name": "dotProduct",
              "line": 102,
              "signature": "export function dotProduct(a: readonly number[], b: readonly number[]): number;",
              "documentation": "Computes the dot product of two vectors.\n\nThe dot product is the sum of element-wise products. For normalized vectors,\nthe dot product equals the cosine similarity."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-embed/src/vector-store.ts",
          "sha256": "891f3d1715a5a8ebcf481ff1c2d9588650e0a82b2972c0c0470c3eb37e41dbe1",
          "artifactSha256": "c7c8ceb1c960a28b493000df8a7492ce969f3f2b27aa374e8c59225a0ba3767d",
          "url": "/reference/source/forge-ts/packages/forge-embed/src/vector-store.ts.txt",
          "declarations": [
            {
              "name": "VectorEntry",
              "line": 20,
              "signature": "export interface VectorEntry {\n  /** The unique identifier for this entry. */\n  readonly id: string;\n  /** The embedding vector. */\n  readonly vector: readonly number[];\n  /** Optional key-value metadata for filtering and retrieval. */\n  readonly metadata: Record<string, unknown>;\n}",
              "documentation": "A single entry in a vector store.\n\nEach entry has a unique identifier, a dense vector, and optional\nmetadata for filtering."
            },
            {
              "name": "SearchResult",
              "line": 34,
              "signature": "export interface SearchResult {\n  /** The matching vector entry. */\n  readonly entry: VectorEntry;\n  /** The similarity score (higher is more similar). */\n  readonly score: number;\n}",
              "documentation": "A search result from a vector store query.\n\nContains the matching entry and its similarity score."
            },
            {
              "name": "VectorStore",
              "line": 54,
              "signature": "export interface VectorStore {\n  /**\n   * Inserts a vector entry into the store.\n   *\n   * If an entry with the same ID already exists, it is overwritten.\n   *\n   * @param entry - The vector entry to insert.\n   * @throws {ForgeEmbedError} If the insert fails.\n   */\n  insert(entry: VectorEntry): Promise<void>;\n\n  /**\n   * Searches for the top K most similar vectors to the query.\n   *\n   * @param queryVector - The query vector.\n   * @param topK - Maximum number of results to return.\n   * @returns An array of SearchResult sorted by score descending.\n   * @throws {ForgeEmbedError} If the search fails.\n   */\n  search(queryVector: readonly number[], topK: number): Promise<SearchResult[]>;\n\n  /**\n   * Deletes a vector entry by its identifier.\n   *\n   * @param id - The identifier of the entry to delete.\n   * @returns `true` if the entry was found and deleted, `false` otherwise.\n   * @throws {ForgeEmbedError} If the delete fails.\n   */\n  delete(id: string): Promise<boolean>;\n}",
              "documentation": "Interface for vector storage and similarity search.\n\nImplementations may use various indexing strategies (brute force,\nHNSW, IVF, etc.) and storage backends (in-memory, SQLite, Pinecone, etc.)."
            },
            {
              "name": "InMemoryVectorStore",
              "line": 99,
              "signature": "export class InMemoryVectorStore implements VectorStore {\n  async insert(entry: VectorEntry): Promise<void>;\n  async search(queryVector: readonly number[], topK: number): Promise<SearchResult[]>;\n  async delete(id: string): Promise<boolean>;\n  get size(): number;\n}",
              "documentation": "An in-memory vector store using brute-force cosine similarity.\n\nSuitable for development, testing, and small-scale use cases.\nFor production with large vector collections, use a dedicated\nvector database (Pinecone, Qdrant, Weaviate, etc.)."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/generate",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Text generation, streaming, structured output, and multi-step generation for the Forge SDK.",
      "manifest": "forge-ts/packages/forge-generate/package.json",
      "manifestSha256": "9cd066916f0a3a2d7dea195eee72617ce0181c5d2fa61662a5564e0d8a1c1d65",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/generate",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-generate/src/error.ts",
          "sha256": "0e35d8572112c85b8729523f20241e521acf055bdda35f706e2e09eea5a01b56",
          "artifactSha256": "ddebed0e4e6472ddc47551f55c4b57558cc9b43a29345c88b17a252e8696b451",
          "url": "/reference/source/forge-ts/packages/forge-generate/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeGenerateErrorCode = {",
              "line": 16,
              "signature": "export const ForgeGenerateErrorCode /* type inferred in source */;",
              "documentation": "Error types for the forge-generate package.\n\nAll errors are typed and actionable. Every variant includes enough context\nfor the developer to diagnose the issue without reading source code.\n\nANVIL Spec section 14.2 -- Error Handling requires all errors are typed,\nloggable, and carry enough context for audit trail entries.\nError codes for generation operations."
            },
            {
              "name": "ForgeGenerateErrorCodeType",
              "line": 32,
              "signature": "export type ForgeGenerateErrorCodeType =\n  (typeof ForgeGenerateErrorCode)[keyof typeof ForgeGenerateErrorCode];",
              "documentation": "A forge-generate error code value."
            },
            {
              "name": "ForgeGenerateError",
              "line": 48,
              "signature": "export class ForgeGenerateError extends Error {\n  readonly code: ForgeGenerateErrorCodeType;\n  readonly model?: string;\n  static modelError(model: string, reason: string): ForgeGenerateError;\n  static schemaViolation(model: string, path: string, reason: string): ForgeGenerateError;\n  static stepLimitReached(\n    stepsCompleted: number,\n    limit: number,\n    totalTokens: number\n  ): ForgeGenerateError;\n  static streamInterrupted(\n    model: string,\n    chunksReceived: number,\n    reason: string\n  ): ForgeGenerateError;\n  static noResponse(model: string, messagesCount: number): ForgeGenerateError;\n  static deserializationFailed(\n    model: string,\n    targetType: string,\n    reason: string\n  ): ForgeGenerateError;\n}",
              "documentation": "Error type for generation operations.\n\nCovers model call failures, schema violations, streaming interruptions,\nstep limit exhaustion, and missing responses."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-generate/src/index.ts",
          "sha256": "58151f022e47d033e7472eec481ff52dbfd20fc0330643654c497d3a04cf9eb7",
          "artifactSha256": "629b7ed22fa05d4d933d27ec9bdc4130dd31ed0edb842794b23e9d916cd7b2de",
          "url": "/reference/source/forge-ts/packages/forge-generate/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { ForgeGenerateError, ForgeGenerateErrorCode, type ForgeGenerateErrorCodeType } from './error.js';",
              "line": 15,
              "signature": "export { ForgeGenerateError, ForgeGenerateErrorCode, type ForgeGenerateErrorCodeType } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export { GenerateTextResult, generateText } from './text.js';",
              "line": 18,
              "signature": "export { GenerateTextResult, generateText } from './text.js';",
              "documentation": ""
            },
            {
              "name": "export { TextStreamResult, streamText } from './stream.js';",
              "line": 21,
              "signature": "export { TextStreamResult, streamText } from './stream.js';",
              "documentation": ""
            },
            {
              "name": "export { type ObjectResult, generateObject, streamObject } from './object.js';",
              "line": 24,
              "signature": "export { type ObjectResult, generateObject, streamObject } from './object.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 27,
              "signature": "export {\n  type StopCondition,\n  type StopReason,\n  type StepResult,\n  maxSteps,\n  maxTokens,\n  textMatch,\n  customStop,\n  formatStopReason,\n  finalText,\n  stepCount,\n  completedNaturally,\n  generateSteps,\n} from './step.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-generate/src/object.ts",
          "sha256": "fa20e2428020f59767e7248b0d7521584e03d8ceb38d2ea877d8a2fba1349d42",
          "artifactSha256": "b10276a0df5c8f2a7b70de59612f09b76d35cd93601b353e3ae33a4072dccd99",
          "url": "/reference/source/forge-ts/packages/forge-generate/src/object.ts.txt",
          "declarations": [
            {
              "name": "ObjectResult",
              "line": 47,
              "signature": "export interface ObjectResult<T> {\n  /** The deserialized object. */\n  readonly object: T;\n  /** The raw JSON string from the model output. */\n  readonly rawJson: string;\n  /** Token usage statistics. */\n  readonly usage: Usage;\n  /** Why generation stopped. */\n  readonly finishReason: FinishReason;\n}",
              "documentation": ""
            },
            {
              "name": "generateObject",
              "line": 83,
              "signature": "export async function generateObject<T>(\n  model: LanguageModel,\n  messages: readonly ModelMessage[],\n  schema: JsonSchema,\n  options: GenerateOptions\n): Promise<ObjectResult<T>>;",
              "documentation": "Generates a structured object from a language model.\n\nSends the conversation history to the model with a JSON schema constraint,\nvalidates the response against the schema, and parses it as JSON.\n\nANVIL Spec section 6.1: Structured output generation uses the cognitive\ninterface infer() with a schema constraint."
            },
            {
              "name": "streamObject",
              "line": 164,
              "signature": "export async function streamObject<T>(\n  model: LanguageModel,\n  messages: readonly ModelMessage[],\n  schema: JsonSchema,\n  options: GenerateOptions\n): Promise<ObjectResult<T>>;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-generate/src/step.ts",
          "sha256": "ca69fdc92362404ebcac07a01890379a9d78e5bcbbf44ba25ceccdec6a229ded",
          "artifactSha256": "241b8805d73cf996466b98102cd178ac60988e10a4a946afc0eb65ef38d85b0d",
          "url": "/reference/source/forge-ts/packages/forge-generate/src/step.ts.txt",
          "declarations": [
            {
              "name": "StopCondition",
              "line": 45,
              "signature": "export type StopCondition =\n  | { readonly type: 'max_steps'; readonly maxSteps: number }\n  | { readonly type: 'max_tokens'; readonly maxTokens: number }\n  | { readonly type: 'text_match'; readonly pattern: string }\n  | { readonly type: 'custom'; readonly predicate: (result: GenerateResult) => boolean };",
              "documentation": "A condition that determines when multi-step generation stops.\n\nANVIL Spec section 6.1: The cognitive interface tool loop continues until a\nterminal condition: the model stops requesting tools, a step limit is reached,\nor a token budget is exhausted."
            },
            {
              "name": "maxSteps",
              "line": 57,
              "signature": "export function maxSteps(maxSteps: number): StopCondition;",
              "documentation": "Creates a MaxSteps stop condition."
            },
            {
              "name": "maxTokens",
              "line": 67,
              "signature": "export function maxTokens(maxTokens: number): StopCondition;",
              "documentation": "Creates a MaxTokens stop condition."
            },
            {
              "name": "textMatch",
              "line": 77,
              "signature": "export function textMatch(pattern: string): StopCondition;",
              "documentation": "Creates a TextMatch stop condition."
            },
            {
              "name": "customStop",
              "line": 88,
              "signature": "export function customStop(predicate: (result: GenerateResult) => boolean): StopCondition;",
              "documentation": "Creates a Custom stop condition."
            },
            {
              "name": "StopReason",
              "line": 98,
              "signature": "export type StopReason =\n  | { readonly type: 'model_stopped' }\n  | { readonly type: 'step_limit_reached'; readonly steps: number; readonly limit: number }\n  | { readonly type: 'token_limit_reached'; readonly totalTokens: number; readonly limit: number }\n  | { readonly type: 'text_match_found'; readonly pattern: string }\n  | { readonly type: 'custom_condition' };",
              "documentation": "The reason why multi-step generation stopped.\n\nIncluded in StepResult to let the caller determine whether generation\ncompleted naturally or was cut short by a limit."
            },
            {
              "name": "formatStopReason",
              "line": 111,
              "signature": "export function formatStopReason(reason: StopReason): string;",
              "documentation": "Formats a StopReason as a human-readable string."
            },
            {
              "name": "StepResult",
              "line": 139,
              "signature": "export interface StepResult {\n  /** The ordered sequence of generation results, one per step. */\n  readonly steps: readonly GenerateResult[];\n  /** Cumulative token usage across all steps. */\n  readonly totalUsage: Usage;\n  /** Why multi-step generation stopped. */\n  readonly stopReason: StopReason;\n}",
              "documentation": ""
            },
            {
              "name": "finalText",
              "line": 154,
              "signature": "export function finalText(result: StepResult): string;",
              "documentation": "Returns the text from the final step, or an empty string if no steps completed."
            },
            {
              "name": "stepCount",
              "line": 167,
              "signature": "export function stepCount(result: StepResult): number;",
              "documentation": "Returns the number of completed steps."
            },
            {
              "name": "completedNaturally",
              "line": 177,
              "signature": "export function completedNaturally(result: StepResult): boolean;",
              "documentation": "Returns `true` if the model stopped naturally (no limits hit)."
            },
            {
              "name": "generateSteps",
              "line": 213,
              "signature": "export async function generateSteps(\n  model: LanguageModel,\n  initialMessages: readonly ModelMessage[],\n  tools: readonly ToolDefinition[],\n  options: GenerateOptions,\n  stop: StopCondition\n): Promise<StepResult>;",
              "documentation": "Runs multi-step generation until a stop condition is met.\n\nEach step calls LanguageModel.generate(), appends the model's response\nto the conversation, and checks the stop condition. Generation continues\nuntil the stop condition fires or the model produces a response without\ntool calls (natural completion).\n\nANVIL Spec section 6.1: Implements the tool loop pattern from the\ncognitive interface specification."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-generate/src/stream.ts",
          "sha256": "0690e9b3e90ccf2d3a312fe93f440f44f1b36671ca5fde34ef46498628bb340e",
          "artifactSha256": "98ce25be9a660d27125efe8abc8d04e8a8ac6f33de615c62fdbaa3ee0e7386a5",
          "url": "/reference/source/forge-ts/packages/forge-generate/src/stream.ts.txt",
          "declarations": [
            {
              "name": "TextStreamResult",
              "line": 44,
              "signature": "export class TextStreamResult {\n  constructor(chunks: readonly StreamChunk[]);\n  get fullText(): string;\n  get chunks(): readonly StreamChunk[];\n  get chunkCount(): number;\n  get usage(): Usage;\n  get finishReason(): FinishReason | undefined;\n  get isComplete(): boolean;\n}",
              "documentation": ""
            },
            {
              "name": "streamText",
              "line": 158,
              "signature": "export async function streamText(\n  model: LanguageModel,\n  messages: readonly ModelMessage[],\n  tools: readonly ToolDefinition[],\n  options: GenerateOptions\n): Promise<TextStreamResult>;",
              "documentation": "Streams a text response from a language model.\n\nSends the conversation history and available tools to the model, receives\nthe streamed response as chunks, and wraps the result in a TextStreamResult.\n\nANVIL Spec section 6.1: Implements the infer_stream() operation defined by\nthe ANVIL cognitive interface."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-generate/src/text.ts",
          "sha256": "8ca65cf41a1888cb1311ae919ed27caae9d243fc72da08a858b7179a4b97fc20",
          "artifactSha256": "07bbbede2d28421c26254b0f9db56ff594647b83b90644053e8047f901cbac5c",
          "url": "/reference/source/forge-ts/packages/forge-generate/src/text.ts.txt",
          "declarations": [
            {
              "name": "GenerateTextResult",
              "line": 42,
              "signature": "export class GenerateTextResult {\n  constructor(inner: GenerateResult);\n  get text(): string;\n  get usage(): Usage;\n  get finishReason(): FinishReason;\n  get message(): ModelMessage;\n  get hasToolCalls(): boolean;\n  get inner(): GenerateResult;\n}",
              "documentation": ""
            },
            {
              "name": "generateText",
              "line": 134,
              "signature": "export async function generateText(\n  model: LanguageModel,\n  messages: readonly ModelMessage[],\n  tools: readonly ToolDefinition[],\n  options: GenerateOptions\n): Promise<GenerateTextResult>;",
              "documentation": "Generates a complete text response from a language model.\n\nThis is the primary entry point for buffered (non-streaming) inference. It\nsends the conversation history and available tools to the model, waits for\nthe complete response, and returns it wrapped in a GenerateTextResult.\n\nANVIL Spec section 6.1: Implements the infer() operation defined by the\nANVIL cognitive interface."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/health",
      "language": "typescript",
      "version": "0.1.0",
      "description": "ANVIL health profiles, lifecycle state machine, and monitoring for the Forge SDK.",
      "manifest": "forge-ts/packages/forge-health/package.json",
      "manifestSha256": "9a70dea1100262e1ffb3a6a78606385e4d1bd24aef77ad683c289b43a280b179",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/health",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-health/src/error.ts",
          "sha256": "63e498097776b9282ffba0e30e040471d25a75b9834436d0439407718e0473d4",
          "artifactSha256": "06b0c146f9043c6c5b1ac82a5c7f4da613c6f8737ae3b149112e049b3faa8380",
          "url": "/reference/source/forge-ts/packages/forge-health/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeHealthErrorCode = {",
              "line": 21,
              "signature": "export const ForgeHealthErrorCode /* type inferred in source */;",
              "documentation": "Error codes for forge-health operations.\n\nEach code maps to a specific category of failure."
            },
            {
              "name": "ForgeHealthErrorCodeType",
              "line": 31,
              "signature": "export type ForgeHealthErrorCodeType =\n  (typeof ForgeHealthErrorCode)[keyof typeof ForgeHealthErrorCode];",
              "documentation": "A forge-health error code value."
            },
            {
              "name": "ForgeHealthError",
              "line": 52,
              "signature": "export class ForgeHealthError extends Error {\n  readonly code: ForgeHealthErrorCodeType;\n  readonly from?: LifecycleStateType;\n  readonly to?: LifecycleStateType;\n  static invalidTransition(\n    from: LifecycleStateType,\n    to: LifecycleStateType,\n    reason: string\n  ): ForgeHealthError;\n  static invalidState(state: LifecycleStateType, reason: string): ForgeHealthError;\n  static monitorError(reason: string): ForgeHealthError;\n}",
              "documentation": "Error type for lifecycle, health profile, and monitoring operations.\n\nEvery instance includes actionable context: what failed, why, and what the\ndeveloper should check. No generic \"something went wrong\" messages."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-health/src/events.ts",
          "sha256": "eeb71ad2c8428019f13e28dde3da71ff5b07913759ae34c5435f887af94c6459",
          "artifactSha256": "2b5f96c454f96b495aff216e3e865b468a57b984a2914921d395846fb1bbe5fa",
          "url": "/reference/source/forge-ts/packages/forge-health/src/events.ts.txt",
          "declarations": [
            {
              "name": "LifecycleEvent",
              "line": 54,
              "signature": "export class LifecycleEvent {\n  readonly transition: LifecycleTransition;\n  readonly agentDid: string | undefined;\n  readonly metadata: Record<string, unknown> | undefined;\n  static create(transition: LifecycleTransition): LifecycleEvent;\n  static withAgentDid(transition: LifecycleTransition, agentDid: string): LifecycleEvent;\n  withMetadata(metadata: Record<string, unknown>): LifecycleEvent;\n  toJSON(): Record<string, unknown>;\n}",
              "documentation": "A lifecycle event emitted when an agent transitions between states.\n\nLifecycle events are the primary mechanism for tracking agent state changes.\nThey are:\n- Emitted via the telemetry system as structured events\n- Recorded in the agent's audit trail\n- Signed by the agent's Ed25519 key (when identity is available)\n\nPer ANVIL Spec section 14.2, every lifecycle transition is recorded as an\naudit trail entry with the following data:\n- From state and to state\n- Timestamp\n- Agent DID\n- Optional metadata (e.g., error details for transitions to Error state)"
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-health/src/index.ts",
          "sha256": "ef9c74ad4983109e41313ece4899397fd8b07be9b538528745f05b419f449590",
          "artifactSha256": "a3fbad077256c53efcdd79f173c896979ebe0915b930396c03778565ce025558",
          "url": "/reference/source/forge-ts/packages/forge-health/src/index.ts.txt",
          "declarations": [
            {
              "name": "export {",
              "line": 24,
              "signature": "export {\n  LifecycleState,\n  type LifecycleStateType,\n  validTransitions,\n  isTerminal,\n  isOperational,\n  type LifecycleTransition,\n  LifecycleError,\n  LifecycleManager,\n} from './lifecycle.js';",
              "documentation": ""
            },
            {
              "name": "export { HealthProfile } from './profile.js';",
              "line": 36,
              "signature": "export { HealthProfile } from './profile.js';",
              "documentation": ""
            },
            {
              "name": "export { LifecycleEvent } from './events.js';",
              "line": 39,
              "signature": "export { LifecycleEvent } from './events.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 42,
              "signature": "export {\n  type HealthThresholds,\n  defaultHealthThresholds,\n  HealthMonitor,\n} from './monitoring.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 49,
              "signature": "export {\n  type HealthStatus,\n  healthy,\n  degraded,\n  critical,\n  isHealthy,\n  isCritical,\n  reasons,\n  HealthReport,\n} from './reporting.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 61,
              "signature": "export {\n  ForgeHealthErrorCode,\n  type ForgeHealthErrorCodeType,\n  ForgeHealthError,\n} from './error.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-health/src/lifecycle.ts",
          "sha256": "5e78896b75c650331cd021c89be288c4112eaf7e690d1bfedb3b3cdc3e3af788",
          "artifactSha256": "94742ba5e67d573730980b374144c17ad8a96e6b79760d2b67822b40b6663ec7",
          "url": "/reference/source/forge-ts/packages/forge-health/src/lifecycle.ts.txt",
          "declarations": [
            {
              "name": "export const LifecycleState = {",
              "line": 26,
              "signature": "export const LifecycleState /* type inferred in source */;",
              "documentation": "ANVIL lifecycle states.\n\nThese six states and their valid transitions are **immutable** per\nANVIL Spec section 13.2. No states may be added, removed, or have their\ntransition rules changed without a formal specification amendment.\n\nMigration note: The previous 7-state model (Created, Initializing, Active,\nSuspended, Terminating, Terminated, Error) has been replaced with this\n6-state model per ANVIL Spec v2."
            },
            {
              "name": "LifecycleStateType",
              "line": 42,
              "signature": "export type LifecycleStateType = (typeof LifecycleState)[keyof typeof LifecycleState];",
              "documentation": "A lifecycle state value."
            },
            {
              "name": "validTransitions",
              "line": 86,
              "signature": "export function validTransitions(state: LifecycleStateType): readonly LifecycleStateType[];",
              "documentation": "Returns the set of valid target states from the given state."
            },
            {
              "name": "isTerminal",
              "line": 98,
              "signature": "export function isTerminal(state: LifecycleStateType): boolean;",
              "documentation": "Returns `true` if the given state is a terminal state (no outgoing transitions).\n\nCurrently, only `Terminated` is a terminal state."
            },
            {
              "name": "isOperational",
              "line": 112,
              "signature": "export function isOperational(state: LifecycleStateType): boolean;",
              "documentation": "Returns `true` if the agent can perform work in the given state.\n\nBoth `Ready` and `Running` states are operational per ANVIL Spec section 13.2.\n`Ready` means the agent can accept new work; `Running` means the agent is\nactively processing."
            },
            {
              "name": "LifecycleTransition",
              "line": 123,
              "signature": "export interface LifecycleTransition {\n  /** The state before the transition. */\n  readonly from: LifecycleStateType;\n  /** The state after the transition. */\n  readonly to: LifecycleStateType;\n  /** The UTC timestamp when the transition occurred. */\n  readonly timestamp: Timestamp;\n}",
              "documentation": "A record of a single lifecycle state transition.\n\nEvery transition is timestamped and stored in the LifecycleManager's\nhistory. Transitions are emitted as telemetry events and recorded in the\nagent's audit trail."
            },
            {
              "name": "LifecycleError",
              "line": 137,
              "signature": "export class LifecycleError extends Error {\n  readonly from: LifecycleStateType;\n  readonly to: LifecycleStateType;\n  constructor(from: LifecycleStateType, to: LifecycleStateType, reason: string);\n}",
              "documentation": "Error thrown when an invalid lifecycle transition is attempted.\n\nSee ANVIL Spec section 13.2 for the complete transition table."
            },
            {
              "name": "LifecycleManager",
              "line": 174,
              "signature": "export class LifecycleManager {\n  constructor();\n  get state(): LifecycleStateType;\n  get history(): readonly LifecycleTransition[];\n  transition(target: LifecycleStateType): LifecycleTransition;\n  canTransitionTo(target: LifecycleStateType): boolean;\n  validTransitions(): readonly LifecycleStateType[];\n}",
              "documentation": "Manages the ANVIL lifecycle state machine for a single agent.\n\nThe LifecycleManager enforces the immutable transition table from ANVIL Spec\nsection 13.2. It tracks the current state, validates all transitions, and\nmaintains a complete transition history."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-health/src/monitoring.ts",
          "sha256": "96b5feb299fbd89165168114311770588854b596322851e9a3d38bcd7ac3626a",
          "artifactSha256": "6686b84b90a4b57a50d74b9ac7af7a6585fe651aebe1882364d00a3efc981270",
          "url": "/reference/source/forge-ts/packages/forge-health/src/monitoring.ts.txt",
          "declarations": [
            {
              "name": "HealthThresholds",
              "line": 46,
              "signature": "export interface HealthThresholds {\n  /**\n   * Maximum acceptable error rate in errors per minute.\n   *\n   * When the computed error rate exceeds this threshold, the agent's\n   * health status becomes Degraded or Critical.\n   */\n  readonly maxErrorRate: number;\n\n  /**\n   * Maximum acceptable CPU usage percentage (0.0 to 100.0).\n   *\n   * When CPU usage exceeds this threshold, the agent's health status\n   * becomes Degraded.\n   */\n  readonly maxCpuPercent: number;\n\n  /**\n   * Maximum acceptable memory usage in bytes.\n   *\n   * When memory usage exceeds this threshold, the agent's health status\n   * becomes Critical.\n   */\n  readonly maxMemoryBytes: number;\n\n  /**\n   * Maximum acceptable inference latency in milliseconds.\n   *\n   * This threshold is informational -- it is reported in the health status\n   * reasons but does not directly cause status changes since latency is\n   * not tracked in the profile (it would require per-call timing).\n   */\n  readonly maxInferenceLatencyMs: number;\n}",
              "documentation": ""
            },
            {
              "name": "defaultHealthThresholds",
              "line": 98,
              "signature": "export function defaultHealthThresholds(): HealthThresholds;",
              "documentation": "Returns the default health thresholds.\n\nDefaults:\n- maxErrorRate: 10.0 errors per minute\n- maxCpuPercent: 90.0%\n- maxMemoryBytes: 4 GB (4,294,967,296 bytes)\n- maxInferenceLatencyMs: 5000 ms"
            },
            {
              "name": "HealthMonitor",
              "line": 132,
              "signature": "export class HealthMonitor {\n  readonly profile: HealthProfile;\n  readonly thresholds: HealthThresholds;\n  constructor(thresholds: HealthThresholds);\n  checkHealth(): HealthStatus;\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-health/src/profile.ts",
          "sha256": "1bf459b6e003ea620d596a93680a9427fd13659c8993d0e80ac6b9f7cc5c74c1",
          "artifactSha256": "d49270f424422e5360a2a45ec0b63977c9cd29c2025bd48bbfe485a5a3fcd967",
          "url": "/reference/source/forge-ts/packages/forge-health/src/profile.ts.txt",
          "declarations": [
            {
              "name": "HealthProfile",
              "line": 56,
              "signature": "export class HealthProfile {\n  uptimeSeconds: number;\n  errorCount: number;\n  toolInvocations: number;\n  inferenceCalls: number;\n  inferenceTokens: number;\n  cpuUsagePercent: number;\n  memoryUsageBytes: number;\n  activeTasks: number;\n  completedTasks: number;\n  errorRate: number;\n  avgLatencyMs: number;\n  toolSuccessRate: number;\n  generationSuccessRate: number;\n  lastUpdated: Timestamp;\n  constructor();\n  recordToolInvocation(): void;\n  recordInference(tokens: number): void;\n  recordError(): void;\n  updateResources(cpu: number, memory: number): void;\n  updateUptime(seconds: number): void;\n  recordToolSuccess(): void;\n  recordToolFailure(): void;\n  recordGenerationSuccess(): void;\n  recordGenerationFailure(): void;\n  recordInferenceLatency(latencyMs: number): void;\n  startTask(): void;\n  completeTask(): void;\n  toJSON(): Record<string, unknown>;\n  static fromJSON(obj: Record<string, unknown>): HealthProfile;\n}",
              "documentation": "Runtime health metrics for an ANVIL-compliant agent.\n\nThe health profile tracks operational statistics that enable health\nmonitoring, capacity planning, and audit trail generation. All counters\nare monotonically increasing -- they are never reset during an agent's\nlifetime."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-health/src/reporting.ts",
          "sha256": "c0437f725edf2fc0a1356473f4099994d519a36ab2a068cb54690a895139629b",
          "artifactSha256": "26598b4f72699f7f80f39c1498210ef8177bc9e394ff9dfc77849b4466074f4a",
          "url": "/reference/source/forge-ts/packages/forge-health/src/reporting.ts.txt",
          "declarations": [
            {
              "name": "HealthStatus",
              "line": 40,
              "signature": "export type HealthStatus =\n  | { readonly status: 'healthy' }\n  | { readonly status: 'degraded'; readonly reasons: readonly string[] }\n  | { readonly status: 'critical'; readonly reasons: readonly string[] };",
              "documentation": ""
            },
            {
              "name": "healthy",
              "line": 50,
              "signature": "export function healthy(): HealthStatus;",
              "documentation": "Creates a Healthy status."
            },
            {
              "name": "degraded",
              "line": 60,
              "signature": "export function degraded(reasons: string[]): HealthStatus;",
              "documentation": "Creates a Degraded status with the given reasons."
            },
            {
              "name": "critical",
              "line": 70,
              "signature": "export function critical(reasons: string[]): HealthStatus;",
              "documentation": "Creates a Critical status with the given reasons."
            },
            {
              "name": "isHealthy",
              "line": 86,
              "signature": "export function isHealthy(status: HealthStatus): boolean;",
              "documentation": "Returns `true` if the status is Healthy."
            },
            {
              "name": "isCritical",
              "line": 102,
              "signature": "export function isCritical(status: HealthStatus): boolean;",
              "documentation": "Returns `true` if the status is Critical."
            },
            {
              "name": "reasons",
              "line": 118,
              "signature": "export function reasons(status: HealthStatus): readonly string[];",
              "documentation": "Returns the list of reasons, or an empty array if healthy."
            },
            {
              "name": "HealthReport",
              "line": 151,
              "signature": "export class HealthReport {\n  readonly status: HealthStatus;\n  readonly profile: HealthProfile;\n  readonly lifecycleState: LifecycleStateType;\n  readonly generatedAt: Timestamp;\n  constructor(\n    status: HealthStatus,\n    profile: HealthProfile,\n    lifecycleState: LifecycleStateType\n  );\n  toJSON(): Record<string, unknown>;\n}",
              "documentation": "A structured health report combining status, profile, and lifecycle state.\n\nHealth reports are the primary output of the health monitoring system.\nThey are used for:\n- Audit trail entries (signed by the agent's Ed25519 key)\n- Telemetry emission (health check spans)\n- External health check endpoints (e.g., HTTP /health)\n- Lifecycle decision-making (auto-suspend on critical status)"
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/identity",
      "language": "typescript",
      "version": "0.1.0",
      "description": "OAS identity binding for Forge agents with an explicit production crypto bridge",
      "manifest": "forge-ts/packages/forge-identity/package.json",
      "manifestSha256": "6e0fd4348b60c08aa3b6686a6342eddd51a8cca9d3b63ca11584f7525726880a",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/identity",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-identity/src/agent-identity.ts",
          "sha256": "0af434de2b7e560b26c8f6935a719a855a35a5058e3eb9ac7cb6cf2e66e847b0",
          "artifactSha256": "af83740d09a389eec3f80bfae32a773afc35ac0025a1df693c0c9e0a640291f8",
          "url": "/reference/source/forge-ts/packages/forge-identity/src/agent-identity.ts.txt",
          "declarations": [
            {
              "name": "OasDocument",
              "line": 25,
              "signature": "export interface OasDocument {\n  /** The DID identifier. */\n  readonly id: string;\n  /** The DID document context. */\n  readonly context: readonly string[];\n  /** Verification methods. */\n  readonly verificationMethod: readonly VerificationMethod[];\n  /** Authentication references. */\n  readonly authentication: readonly string[];\n  /** Optional lineage section for derived identities. */\n  readonly lineage?: LineageSection;\n  /** Optional document proof. */\n  readonly proof?: DocumentProof;\n}",
              "documentation": "Represents an OAS Identity Document.\n\nThis is a simplified representation of the OAS document for the TypeScript\nSDK. The full document structure is defined by the OAS specification."
            },
            {
              "name": "VerificationMethod",
              "line": 43,
              "signature": "export interface VerificationMethod {\n  /** The method identifier. */\n  readonly id: string;\n  /** The method type. */\n  readonly type: string;\n  /** The controller DID. */\n  readonly controller: string;\n  /** The public key in multibase encoding. */\n  readonly publicKeyMultibase: string;\n}",
              "documentation": "A verification method in an OAS document."
            },
            {
              "name": "LineageSection",
              "line": 57,
              "signature": "export interface LineageSection {\n  /** The generation (derivation depth) of this entity. */\n  readonly generation: number;\n  /** The DID of the human root in the lineage chain. */\n  readonly humanRootDid: string;\n  /** The DID of the immediate parent. */\n  readonly parentDid: string;\n  /** The derivation path used. */\n  readonly derivationPath: string;\n  /** The lineage proof. */\n  readonly proof: LineageProof;\n}",
              "documentation": "The lineage section of a derived OAS document."
            },
            {
              "name": "LineageProof",
              "line": 73,
              "signature": "export interface LineageProof {\n  /** The proof type (e.g., 'AgentLineageProof2025'). */\n  readonly type: string;\n  /** The ISO 8601 creation timestamp. */\n  readonly created: string;\n  /** The verification method used to create the proof. */\n  readonly verificationMethod: string;\n  /** The proof value (base64url-encoded signature). */\n  readonly proofValue: string;\n}",
              "documentation": "A lineage proof linking a child to its parent."
            },
            {
              "name": "DocumentProof",
              "line": 87,
              "signature": "export interface DocumentProof {\n  /** The proof type. */\n  readonly type: string;\n  /** The ISO 8601 creation timestamp. */\n  readonly created: string;\n  /** The verification method used to create the proof. */\n  readonly verificationMethod: string;\n  /** The proof value (base64url-encoded signature). */\n  readonly proofValue: string;\n}",
              "documentation": "A document proof."
            },
            {
              "name": "CryptoBridge",
              "line": 107,
              "signature": "export interface CryptoBridge {\n  /** Generates a new Ed25519 keypair. Returns [privateKey, publicKey]. */\n  generateKeypair(): [Uint8Array, Uint8Array];\n  /** Signs a message with the given private key. Returns a 64-byte signature. */\n  sign(privateKey: Uint8Array, message: Uint8Array): Uint8Array;\n  /** Verifies a signature. Returns true if valid. */\n  verify(publicKey: Uint8Array, message: Uint8Array, signature: Uint8Array): boolean;\n  /** Derives a child key via HKDF-SHA256. Returns [childPrivateKey, childPublicKey]. */\n  deriveChild(parentPrivateKey: Uint8Array, path: string): [Uint8Array, Uint8Array];\n}",
              "documentation": "The WASM crypto bridge interface for Ed25519 operations.\n\nIn production, all crypto operations are delegated to the Rust WASM module\nto guarantee cross-language parity. This interface defines the bridge contract.\n\nIMPORTANT: TypeScript MUST NOT reimplement Ed25519, HKDF, or BLAKE3.\nAll crypto operations go through this bridge. See Forge CLAUDE.md section 2.4."
            },
            {
              "name": "ForgeAgentIdentity",
              "line": 140,
              "signature": "export class ForgeAgentIdentity {\n  constructor(\n    did: string,\n    kind: string,\n    privateKey: Uint8Array,\n    publicKey: Uint8Array,\n    document: OasDocument,\n    lineageDepth: number,\n    bridge: CryptoBridge\n  );\n  did(): string;\n  kind(): string;\n  document(): OasDocument;\n  lineageDepth(): number;\n  sign(message: Uint8Array): Uint8Array;\n  verify(message: Uint8Array, signature: Uint8Array): void;\n  verifyingKeyBytes(): Uint8Array;\n  toString(): string;\n  _privateKeyBytes(): Uint8Array;\n  _cryptoBridge(): CryptoBridge;\n}",
              "documentation": "A Forge agent's cryptographic identity, binding an OAS DID, keypair, and lineage.\n\nEvery Forge agent has a `ForgeAgentIdentity` from creation. The identity\nincludes the agent's Ed25519 keypair (derived via HKDF-SHA256 from its parent),\nthe OAS DID document, and the lineage proof chain.\n\nSee ANVIL Specification section 11.1 -- OAS Identity Binding.\n\nSECURITY:\n- `toString()` never exposes the private key (`[REDACTED]`).\n- The signing key should be zeroized when no longer needed.\n- Private key bytes are never logged, serialized in plain text, or transmitted."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-identity/src/error.ts",
          "sha256": "cef37ce9291d8fd027a1dfe96471df04bedd7e67594bf69e8843f49ea6d9b9c6",
          "artifactSha256": "d2fb507ade435eca682c911b56322b5c4ee459e02a923542841526f9f9e4fd5f",
          "url": "/reference/source/forge-ts/packages/forge-identity/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeIdentityErrorCode = {",
              "line": 17,
              "signature": "export const ForgeIdentityErrorCode /* type inferred in source */;",
              "documentation": "Error types for the `@forge-sdk/identity` package.\n\nAll errors are typed, actionable, and reference the relevant ANVIL spec\nsection. Error messages include enough context for the developer to\ndiagnose the issue without reading source code.\n\nANVIL Spec section 11.1 -- OAS Identity Binding.\nANVIL Spec section 11.2 -- Lineage Propagation.\nError code enumeration for `@forge-sdk/identity`."
            },
            {
              "name": "ForgeIdentityErrorCodeType",
              "line": 27,
              "signature": "export type ForgeIdentityErrorCodeType =\n  (typeof ForgeIdentityErrorCode)[keyof typeof ForgeIdentityErrorCode];",
              "documentation": "Error code type."
            },
            {
              "name": "ForgeIdentityError",
              "line": 50,
              "signature": "export class ForgeIdentityError extends Error {\n  public readonly code: ForgeIdentityErrorCodeType;\n  static derivationFailed(parentDid: string, path: string, reason: string): ForgeIdentityError;\n  static lineageVerificationFailed(did: string, reason: string): ForgeIdentityError;\n  static chainTooDeep(depth: number, maxDepth: number): ForgeIdentityError;\n  static invalidIdentity(reason: string): ForgeIdentityError;\n  static persistenceFailed(reason: string): ForgeIdentityError;\n  static wasmBridgeError(reason: string): ForgeIdentityError;\n}",
              "documentation": "Error class for identity operations.\n\nCovers identity derivation failures, lineage verification failures,\nchain depth violations, structural validation, and persistence errors.\n\nEvery variant includes actionable context: what failed, why, and the\nrelevant ANVIL specification section."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-identity/src/glyph.ts",
          "sha256": "62728b9e8735f5b4c30a9751f0e6a835ad733f5b56f8606b4f13b35326dac02c",
          "artifactSha256": "1390ed926b4caf1dea884485115cf52fbea4da059a06b7b92c47f5088b2aa319",
          "url": "/reference/source/forge-ts/packages/forge-identity/src/glyph.ts.txt",
          "declarations": [
            {
              "name": "GlyphColor",
              "line": 28,
              "signature": "export interface GlyphColor {\n  /** Red channel (0-255). */\n  readonly r: number;\n  /** Green channel (0-255). */\n  readonly g: number;\n  /** Blue channel (0-255). */\n  readonly b: number;\n}",
              "documentation": "Glyph -- Visual Identity for Forge Agents.\n\nDeterministic visual identity glyphs for OAS agents. A glyph is a\nscannable, aesthetically unique avatar that encodes an agent's `did:oas`\nidentity into a colored block grid.\n\nDeterminism Guarantee: Same DID + same options = identical output bytes.\nAn RGB color triple.\n\nAll channels are 8-bit unsigned (0-255)."
            },
            {
              "name": "glyphColorRgb",
              "line": 45,
              "signature": "export function glyphColorRgb(r: number, g: number, b: number): GlyphColor;",
              "documentation": "Create a GlyphColor from RGB components."
            },
            {
              "name": "glyphColorToHex",
              "line": 55,
              "signature": "export function glyphColorToHex(c: GlyphColor): string;",
              "documentation": "Format a GlyphColor as a CSS hex color string."
            },
            {
              "name": "glyphColorLerp",
              "line": 70,
              "signature": "export function glyphColorLerp(\n  a: GlyphColor,\n  b: GlyphColor,\n  t: number,\n): GlyphColor;",
              "documentation": "Linearly interpolate between two colors."
            },
            {
              "name": "GlyphPalette",
              "line": 101,
              "signature": "export interface GlyphPalette {\n  /** Primary identity color. */\n  readonly primary: GlyphColor;\n  /** Secondary identity color (hue-offset from primary). */\n  readonly secondary: GlyphColor;\n  /** Accent color for kind region and highlights. */\n  readonly accent: GlyphColor;\n  /** Background color (dark, desaturated primary). */\n  readonly background: GlyphColor;\n}",
              "documentation": "A complete glyph color palette derived from an agent's identity.\n\nThe palette is deterministically computed from the hash of the\nDID string. Every field is fully determined by the input; no\nrandomness is involved.\n\n| Field | Derivation |\n|-------|-----------|\n| `primary` | HSL from hash bytes 0-3 (hue), byte 8 (saturation), byte 9 (lightness) |\n| `secondary` | HSL offset 60-180 degrees from primary hue, via hash bytes 4-7 |\n| `accent` | Bright, saturated version of secondary hue |\n| `background` | Dark, desaturated version of primary hue |"
            },
            {
              "name": "export const GlyphEntityKind = {",
              "line": 127,
              "signature": "export const GlyphEntityKind /* type inferred in source */;",
              "documentation": "Entity kinds supported by the glyph system.\n\n| Kind | Value | Visual Motif |\n|------|-------|-------------|\n| `Hmr` | 0 | Shield (human root) |\n| `Mhr` | 1 | Multi-shield (machine root) |\n| `Enr` | 2 | Grid (entity root) |\n| `Agent` | 3 | Diamond (agent) |\n| `Org` | 4 | Hexagon (organization) |"
            },
            {
              "name": "GlyphEntityKind",
              "line": 136,
              "signature": "export type GlyphEntityKind = (typeof GlyphEntityKind)[keyof typeof GlyphEntityKind];",
              "documentation": "Entity kind type."
            },
            {
              "name": "parseGlyphEntityKind",
              "line": 144,
              "signature": "export function parseGlyphEntityKind(s: string): GlyphEntityKind | undefined;",
              "documentation": "Parse a kind string into a `GlyphEntityKind`."
            },
            {
              "name": "glyphEntityKindAsU8",
              "line": 160,
              "signature": "export function glyphEntityKindAsU8(kind: GlyphEntityKind): number;",
              "documentation": "Return the numeric value for a GlyphEntityKind.\n\nValues 0-4 match the upstream `oas-glyph` EntityKind discriminants."
            },
            {
              "name": "glyphEntityKindFromU8",
              "line": 177,
              "signature": "export function glyphEntityKindFromU8(v: number): GlyphEntityKind | undefined;",
              "documentation": "Reconstruct a `GlyphEntityKind` from its numeric value."
            },
            {
              "name": "GlyphDescriptor",
              "line": 195,
              "signature": "export interface GlyphDescriptor {\n  /** The agent's DID string (e.g. `did:oas:l1fe:agent:data-analyst`). */\n  readonly did: string;\n  /** The entity kind that determines the kind-region visual motif. */\n  readonly kind: GlyphEntityKind;\n  /** Optional human-readable label rendered below the glyph. */\n  readonly label?: string;\n}",
              "documentation": "The glyph input contract: describes what to render."
            },
            {
              "name": "export const GlyphRenderTarget = {",
              "line": 207,
              "signature": "export const GlyphRenderTarget /* type inferred in source */;",
              "documentation": "Render target selection."
            },
            {
              "name": "GlyphRenderTarget",
              "line": 215,
              "signature": "export type GlyphRenderTarget =\n  (typeof GlyphRenderTarget)[keyof typeof GlyphRenderTarget];",
              "documentation": "Render target type."
            },
            {
              "name": "GlyphRenderOptions",
              "line": 221,
              "signature": "export interface GlyphRenderOptions {\n  /** The render target (Web or Terminal). */\n  readonly target: GlyphRenderTarget;\n  /** Desired width in pixels (Web) or columns (Terminal). */\n  readonly width?: number;\n  /** Desired height in pixels (Web) or rows (Terminal). */\n  readonly height?: number;\n  /** Optional background color override. */\n  readonly colorOverride?: GlyphColor;\n}",
              "documentation": "Render options controlling the glyph output."
            },
            {
              "name": "export const GlyphRenderFormat = {",
              "line": 235,
              "signature": "export const GlyphRenderFormat /* type inferred in source */;",
              "documentation": "Output format tag for render results."
            },
            {
              "name": "GlyphRenderFormat",
              "line": 244,
              "signature": "export type GlyphRenderFormat =\n  (typeof GlyphRenderFormat)[keyof typeof GlyphRenderFormat];",
              "documentation": "Render format type."
            },
            {
              "name": "GlyphRenderResult",
              "line": 250,
              "signature": "export interface GlyphRenderResult {\n  /** The output format. */\n  readonly format: GlyphRenderFormat;\n  /** The rendered data as a string (SVG, ANSI, etc.). */\n  readonly data: string;\n  /** Width of the rendered output. */\n  readonly width: number;\n  /** Height of the rendered output. */\n  readonly height: number;\n}",
              "documentation": "The output of a glyph render operation."
            },
            {
              "name": "derivePaletteFromDid",
              "line": 283,
              "signature": "export async function derivePaletteFromDid(\n  did: string,\n  kind: GlyphEntityKind,\n): Promise<GlyphPalette>;",
              "documentation": "Derive a deterministic color palette from a DID string and entity kind.\n\nUses SHA-256 to hash the DID bytes, then maps the resulting bytes to HSL\ncolor space. The algorithm is designed to match the Rust implementation's\npalette derivation logic."
            },
            {
              "name": "derivePaletteFromDidSync",
              "line": 304,
              "signature": "export function derivePaletteFromDidSync(\n  did: string,\n  kind: GlyphEntityKind,\n): GlyphPalette;",
              "documentation": "Synchronous palette derivation using a simple hash.\n\nFor environments where `crypto.subtle` is not available or when\nsynchronous execution is required. Uses FNV-1a-based hashing for\ndeterministic output (not cryptographic)."
            },
            {
              "name": "renderGlyph",
              "line": 374,
              "signature": "export function renderGlyph(\n  descriptor: GlyphDescriptor,\n  options: GlyphRenderOptions,\n): GlyphRenderResult;",
              "documentation": "Renders a glyph for the given descriptor and options.\n\nProduces an SVG string for Web targets and ANSI half-block characters\nfor Terminal targets."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-identity/src/index.ts",
          "sha256": "a88cbce5d2b5539a28506110554bde10f3bd35bc708d27d655a6f40fa1c92519",
          "artifactSha256": "69f24e9a356221e30da7461ee3df034b381f6c9952d0a20af19728f291d90d2b",
          "url": "/reference/source/forge-ts/packages/forge-identity/src/index.ts.txt",
          "declarations": [
            {
              "name": "export {",
              "line": 34,
              "signature": "export {\n  ForgeIdentityError,\n  ForgeIdentityErrorCode,\n  type ForgeIdentityErrorCodeType,\n} from './error.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 41,
              "signature": "export {\n  ForgeAgentIdentity,\n  type CryptoBridge,\n  type OasDocument,\n  type VerificationMethod,\n  type LineageSection,\n  type LineageProof,\n  type DocumentProof,\n} from './agent-identity.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 52,
              "signature": "export {\n  createHmrIdentity,\n  createMhrIdentity,\n  deriveAgentIdentity,\n  setCryptoBridge,\n  getCryptoBridge,\n  DEFAULT_MAX_LINEAGE_DEPTH,\n} from './lineage.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 62,
              "signature": "export {\n  saveIdentity,\n  loadIdentity,\n  type ProtectedSigningKey,\n  type IdentityKeyProtector,\n} from './persistence.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 70,
              "signature": "export {\n  type GlyphColor,\n  glyphColorRgb,\n  glyphColorToHex,\n  glyphColorLerp,\n  type GlyphPalette,\n  GlyphEntityKind,\n  parseGlyphEntityKind,\n  glyphEntityKindAsU8,\n  glyphEntityKindFromU8,\n  type GlyphDescriptor,\n  GlyphRenderTarget,\n  type GlyphRenderOptions,\n  GlyphRenderFormat,\n  type GlyphRenderResult,\n  derivePaletteFromDid,\n  derivePaletteFromDidSync,\n  renderGlyph,\n} from './glyph.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 91,
              "signature": "export {\n  FORGE_DEV_METHOD,\n  forgeDevDid,\n  deriveMachineId,\n  deriveMachineIdSync,\n  validateForgeDevDid,\n  type LocalOrg,\n  createLocalOrg,\n  type ForgeDevIdentity,\n  type LocalDevProfile,\n  PROFILE_SCHEMA_VERSION,\n  createLocalDevProfile,\n  deriveAgent,\n  profileToJSON,\n  profileFromJSON,\n} from './local-dev.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-identity/src/lineage.ts",
          "sha256": "b7a0ea54d868588643050b0ecf7789a7e8fa654e4642802270e5a35e7c4871cc",
          "artifactSha256": "99661aa670e0e4a288335a8e4f45af8707348c326557c846f44cef9ae9b8d8e4",
          "url": "/reference/source/forge-ts/packages/forge-identity/src/lineage.ts.txt",
          "declarations": [
            {
              "name": "export const DEFAULT_MAX_LINEAGE_DEPTH = 16;",
              "line": 30,
              "signature": "export const DEFAULT_MAX_LINEAGE_DEPTH /* type inferred in source */;",
              "documentation": "The default maximum lineage chain depth per ANVIL Spec section 11.2.\n\nThe ANVIL specification recommends a maximum of 16 derivation steps\nfrom a human root entity. Chains exceeding this depth are rejected."
            },
            {
              "name": "setCryptoBridge",
              "line": 54,
              "signature": "export function setCryptoBridge(bridge: CryptoBridge): void;",
              "documentation": "Sets the global crypto bridge implementation.\n\nCall this once at application startup to inject the production crypto bridge."
            },
            {
              "name": "getCryptoBridge",
              "line": 63,
              "signature": "export function getCryptoBridge(): CryptoBridge;",
              "documentation": "Returns the configured global crypto bridge."
            },
            {
              "name": "createHmrIdentity",
              "line": 94,
              "signature": "export function createHmrIdentity(\n  namespace: string,\n  identifier: string,\n  bridge?: CryptoBridge\n): ForgeAgentIdentity;",
              "documentation": "Creates a new Human Root (HMR) identity.\n\nGenerates a fresh Ed25519 keypair, constructs an OAS Identity Document\nfor a `did:oas:<namespace>:hmr:<identifier>` DID, and signs it.\n\nHMR identities are the ultimate trust anchors in the lineage chain.\nEvery derived agent traces back to an HMR.\n\nSee ANVIL Spec section 11.1 -- OAS Identity Binding."
            },
            {
              "name": "createMhrIdentity",
              "line": 125,
              "signature": "export function createMhrIdentity(\n  namespace: string,\n  identifier: string,\n  bridge?: CryptoBridge\n): ForgeAgentIdentity;",
              "documentation": "Creates a new Multi-Human Root (MHR) identity.\n\nSimilar to `createHmrIdentity` but for machine-originated root entities.\nMHR identities use `did:oas:<namespace>:mhr:<identifier>`.\n\nSee ANVIL Spec section 11.1 -- OAS Identity Binding."
            },
            {
              "name": "deriveAgentIdentity",
              "line": 163,
              "signature": "export function deriveAgentIdentity(\n  parent: ForgeAgentIdentity,\n  name: string,\n  namespace: string,\n  bridge?: CryptoBridge\n): ForgeAgentIdentity;",
              "documentation": "Derives a child agent identity from a parent identity.\n\nPerforms the complete agent derivation workflow per ANVIL Spec section 11.2:\n\n1. Validates the parent's lineage depth does not exceed the maximum.\n2. Derives a child Ed25519 keypair using HKDF-SHA256.\n3. Generates an AgentLineageProof2025 linking child to parent.\n4. Constructs a signed OAS Identity Document with a complete lineage section.\n\nThe child's lineage depth is `parent.lineageDepth() + 1`."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-identity/src/local-dev.ts",
          "sha256": "61a584ede2936d1f404270b6dcd71eab51e87711903ad43b5d52e3bb7b768369",
          "artifactSha256": "3085829eb8d6b02276096bf0de2669bd9a4bf26d81e21f00fdf28b4876054d3a",
          "url": "/reference/source/forge-ts/packages/forge-identity/src/local-dev.ts.txt",
          "declarations": [
            {
              "name": "export const FORGE_DEV_METHOD = 'forge-dev';",
              "line": 28,
              "signature": "export const FORGE_DEV_METHOD /* type inferred in source */;",
              "documentation": "Local development identity layer for Forge agents.\n\nProvides a lightweight, self-contained identity and authorization\nlayer that works entirely offline without external services. Uses\nthe distinct DID method `did:forge-dev` that is rejected by all\nproduction systems.\n\nArchitecture:\n- `LocalDevProfile` -- top-level profile managing root identity, org, agent cache.\n- `ForgeDevIdentity` -- a dev identity with development metadata.\n- `LocalOrg` -- a local organization container for grouping dev identities.\n- `forgeDevDid()` -- DID construction for the `forge-dev` method.\n- `deriveMachineId()` -- deterministic machine identifier derivation.\n\nSecurity:\n- The `forge-dev` method is not recognized by any production DID resolver.\n- Profile is stored at `~/.forge/dev-profile.json`.\nThe DID method prefix for local development identities."
            },
            {
              "name": "forgeDevDid",
              "line": 53,
              "signature": "export function forgeDevDid(\n  machineId: string,\n  kind: string,\n  identifier: string,\n): string;",
              "documentation": "Constructs a local dev DID string.\n\nFormat: `did:forge-dev:<machine-id>:<kind>:<identifier>`"
            },
            {
              "name": "deriveMachineId",
              "line": 81,
              "signature": "export async function deriveMachineId(\n  hostname: string,\n  username: string,\n  profileName: string,\n): Promise<string>;",
              "documentation": "Derives a deterministic machine identifier from hostname, username,\nand profile name.\n\nAlgorithm: `SHA-256(\"forge-dev-root:\" + hostname + \":\" + username + \":\" + profile_name)`\ntruncated to the first 8 bytes, hex-encoded to 16 characters.\n\nThis is the async variant using Web Crypto API."
            },
            {
              "name": "deriveMachineIdSync",
              "line": 108,
              "signature": "export function deriveMachineIdSync(\n  hostname: string,\n  username: string,\n  profileName: string,\n): string;",
              "documentation": ""
            },
            {
              "name": "validateForgeDevDid",
              "line": 130,
              "signature": "export function validateForgeDevDid(did: string): boolean;",
              "documentation": "Validates that a string is a valid forge-dev DID."
            },
            {
              "name": "LocalOrg",
              "line": 180,
              "signature": "export interface LocalOrg {\n  /** Deterministic org ID. Format: `forge-dev-org:<name>`. */\n  readonly id: string;\n  /** Human-readable org name. */\n  readonly name: string;\n}",
              "documentation": "A local organization for grouping dev identities.\n\nIn production, orgs are managed by external services. In local dev,\nan org is a named container with a deterministic ID."
            },
            {
              "name": "createLocalOrg",
              "line": 195,
              "signature": "export function createLocalOrg(name: string): LocalOrg;",
              "documentation": "Creates a new local org with the given name.\n\nThe org ID is deterministically derived as `\"forge-dev-org:<name>\"`."
            },
            {
              "name": "ForgeDevIdentity",
              "line": 209,
              "signature": "export interface ForgeDevIdentity {\n  /** The `did:forge-dev` identifier string. */\n  readonly did: string;\n  /** The entity kind (e.g., \"mhr\", \"agent\"). */\n  readonly kind: string;\n  /** The lineage depth from the root. */\n  readonly lineageDepth: number;\n  /** The org ID this identity belongs to. */\n  readonly orgId: string;\n  /** ISO 8601 creation timestamp. */\n  readonly createdAt: string;\n  /** Schema version for forward compatibility. */\n  readonly schemaVersion: number;\n}",
              "documentation": "A local development identity with development metadata."
            },
            {
              "name": "LocalDevProfile",
              "line": 228,
              "signature": "export interface LocalDevProfile {\n  /** The local developer's root identity. */\n  readonly root: ForgeDevIdentity;\n  /** The local organization context. */\n  readonly org: LocalOrg;\n  /** Registry of derived agent identities, keyed by agent name. */\n  readonly agents: Readonly<Record<string, ForgeDevIdentity>>;\n  /** The 16-character hex machine identifier. */\n  readonly machineId: string;\n  /** The profile name (e.g., \"default\", \"alice\"). */\n  readonly profileName: string;\n}",
              "documentation": "A local development profile providing identity and authorization\nwithout external services."
            },
            {
              "name": "export const PROFILE_SCHEMA_VERSION = 1;",
              "line": 242,
              "signature": "export const PROFILE_SCHEMA_VERSION /* type inferred in source */;",
              "documentation": "Current schema version for profile persistence."
            },
            {
              "name": "createLocalDevProfile",
              "line": 251,
              "signature": "export function createLocalDevProfile(\n  machineId: string,\n  profileName: string,\n): LocalDevProfile;",
              "documentation": "Creates a new local dev profile."
            },
            {
              "name": "deriveAgent",
              "line": 282,
              "signature": "export function deriveAgent(\n  profile: LocalDevProfile,\n  agentName: string,\n): LocalDevProfile;",
              "documentation": "Derives an agent identity within a local dev profile."
            },
            {
              "name": "profileToJSON",
              "line": 313,
              "signature": "export function profileToJSON(\n  profile: LocalDevProfile,\n): Record<string, unknown>;",
              "documentation": "Serializes a profile to a JSON-compatible object for persistence."
            },
            {
              "name": "profileFromJSON",
              "line": 352,
              "signature": "export function profileFromJSON(\n  data: Record<string, unknown>,\n): LocalDevProfile;",
              "documentation": "Deserializes a profile from a JSON-compatible object."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-identity/src/persistence.ts",
          "sha256": "dd3d9ba2a3e09fa3e5f0abb6c22a7f6e78d1dd094021b4e23fcb756a70dc6797",
          "artifactSha256": "37ae3752f9ef7eb3f241c549e39e53643dd2ffe3ad3e768a2b0338d7217183e7",
          "url": "/reference/source/forge-ts/packages/forge-identity/src/persistence.ts.txt",
          "declarations": [
            {
              "name": "ProtectedSigningKey",
              "line": 28,
              "signature": "export interface ProtectedSigningKey {\n  /** Protection scheme identifier (for example `aws-kms-envelope`). */\n  scheme: string;\n  /** Opaque serialized payload for the selected scheme. */\n  payload: string;\n  /** Optional key reference for KMS or secure-store lookups. */\n  keyId?: string;\n}",
              "documentation": "Protected key payload returned by a production key protector.\n\nThe payload shape is intentionally minimal so SDK consumers can back it\nwith a KMS envelope, HSM reference, platform keychain entry, or another\napproved secure storage mechanism."
            },
            {
              "name": "IdentityKeyProtector",
              "line": 40,
              "signature": "export interface IdentityKeyProtector {\n  /**\n   * Protects a signing key before persistence.\n   *\n   * Implementations should encrypt, seal, or securely externalize the key.\n   */\n  protect(signingKey: Uint8Array): Promise<ProtectedSigningKey>;\n  /**\n   * Restores a protected signing key from persisted storage.\n   *\n   * Implementations must return the raw Ed25519 signing key bytes.\n   */\n  unprotect(protectedSigningKey: ProtectedSigningKey): Promise<Uint8Array>;\n}",
              "documentation": "Contract for protecting and restoring signing keys during persistence."
            },
            {
              "name": "saveIdentity",
              "line": 87,
              "signature": "export async function saveIdentity(\n  identity: ForgeAgentIdentity,\n  protector?: IdentityKeyProtector\n): Promise<string>;",
              "documentation": "Serializes an agent identity to a JSON string.\n\nThe identity is serialized as a PersistedIdentity containing the DID,\nkind, protected signing key payload, public key (hex-encoded), full\ndocument JSON, and lineage depth."
            },
            {
              "name": "loadIdentity",
              "line": 134,
              "signature": "export async function loadIdentity(\n  json: string,\n  protector?: IdentityKeyProtector,\n  bridge?: CryptoBridge\n): Promise<ForgeAgentIdentity>;",
              "documentation": "Deserializes an agent identity from a JSON string.\n\nReads and deserializes a PersistedIdentity, reconstructs the keypair\nfrom the stored key bytes, parses the OAS document, and returns a\nfully functional ForgeAgentIdentity."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/mcp",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Model Context Protocol client, server, and transport for the Forge SDK",
      "manifest": "forge-ts/packages/forge-mcp/package.json",
      "manifestSha256": "bbda0884142a50c5718b82ac78791022a8f390b5c05928401f12d3bb0cc15c7d",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/mcp",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-mcp/src/auth.ts",
          "sha256": "6d726f2751a75a5acff52c25ea4cfca42141df96191608537d21ab7f521f6526",
          "artifactSha256": "c9ee7b58e8c00b91bfdb932e6a841ab2a8ab955d5b4fcd5c651679369dbf6c69",
          "url": "/reference/source/forge-ts/packages/forge-mcp/src/auth.ts.txt",
          "declarations": [
            {
              "name": "OAuthConfig",
              "line": 27,
              "signature": "export interface OAuthConfig {\n  /** The OAuth client ID. */\n  readonly clientId: string;\n  /** The OAuth client secret (optional for public clients). */\n  readonly clientSecret?: string;\n  /** The redirect URI for the authorization callback. */\n  readonly redirectUri: string;\n  /** The authorization endpoint URL. */\n  readonly authUrl: string;\n  /** The token endpoint URL. */\n  readonly tokenUrl: string;\n}",
              "documentation": "OAuth 2.0 configuration for MCP authentication."
            },
            {
              "name": "PkceChallenge",
              "line": 46,
              "signature": "export interface PkceChallenge {\n  /** The code verifier (random string). */\n  readonly verifier: string;\n  /** The code challenge (derived from verifier). */\n  readonly challenge: string;\n  /** The challenge method ('S256'). */\n  readonly method: 'S256';\n}",
              "documentation": "A PKCE (Proof Key for Code Exchange) challenge pair.\n\nUsed in OAuth 2.0 authorization code flow with PKCE to prevent\nauthorization code interception attacks."
            },
            {
              "name": "generatePkceChallenge",
              "line": 72,
              "signature": "export async function generatePkceChallenge(): Promise<PkceChallenge>;",
              "documentation": "Generates a PKCE challenge pair for OAuth 2.0 authorization.\n\nCreates a random 32-byte code verifier, computes its SHA-256 hash,\nand base64url-encodes it as the code challenge."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-mcp/src/client.ts",
          "sha256": "f32fd39732dd7f756230ceddd191b5de072ba572cda710369659a4858eecabac",
          "artifactSha256": "8247d0dd5328921b503f9df1a712b102b431c34cda9aa8881a38d01d87c7c077",
          "url": "/reference/source/forge-ts/packages/forge-mcp/src/client.ts.txt",
          "declarations": [
            {
              "name": "McpClientConfig",
              "line": 36,
              "signature": "export interface McpClientConfig {\n  /** The transport configuration. */\n  readonly transport: TransportConfig;\n  /** Optional OAuth configuration for authenticated connections. */\n  readonly auth?: OAuthConfig;\n}",
              "documentation": "Configuration for an MCP client."
            },
            {
              "name": "McpClient",
              "line": 60,
              "signature": "export class McpClient {\n  constructor(config: McpClientConfig);\n  async connect(): Promise<void>;\n  capabilities(): McpCapabilities | undefined;\n  async listTools(): Promise<McpToolDescriptor[]>;\n  async callTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;\n  async listResources(): Promise<McpResource[]>;\n  async getResource(uri: string): Promise<unknown>;\n  async listPrompts(): Promise<McpPrompt[]>;\n  async getPrompt(name: string, args?: Record<string, string>): Promise<unknown>;\n  async disconnect(): Promise<void>;\n  get connected(): boolean;\n}",
              "documentation": "An MCP client that connects to an MCP server and provides access to\ntools, resources, and prompts.\n\nANVIL Spec section 12.2 -- MCP Client."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-mcp/src/error.ts",
          "sha256": "4b323915c9e1b11ef3d19635ac122dfe1bf36bb396ea3f91bcbd05f4f53ff559",
          "artifactSha256": "d6d0ba7d0782459606eab6df3edc9bb66b45ee1ebfd1d6c2e685a91dfe9eebaa",
          "url": "/reference/source/forge-ts/packages/forge-mcp/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeMcpErrorCode = {",
              "line": 13,
              "signature": "export const ForgeMcpErrorCode /* type inferred in source */;",
              "documentation": "Error types for the `@forge-sdk/mcp` package.\n\nAll errors are typed and actionable with context about the MCP operation\nthat failed, the transport type, and specific reasons.\nError code enumeration for `@forge-sdk/mcp`."
            },
            {
              "name": "ForgeMcpErrorCodeType",
              "line": 24,
              "signature": "export type ForgeMcpErrorCodeType = (typeof ForgeMcpErrorCode)[keyof typeof ForgeMcpErrorCode];",
              "documentation": "Error code type."
            },
            {
              "name": "ForgeMcpError",
              "line": 43,
              "signature": "export class ForgeMcpError extends Error {\n  public readonly code: ForgeMcpErrorCodeType;\n  static connectionFailed(url: string, reason: string): ForgeMcpError;\n  static transportError(transport: string, reason: string): ForgeMcpError;\n  static protocolError(reason: string): ForgeMcpError;\n  static toolNotFound(toolName: string): ForgeMcpError;\n  static serializationError(reason: string): ForgeMcpError;\n  static authError(reason: string): ForgeMcpError;\n  static core(reason: string): ForgeMcpError;\n}",
              "documentation": "Error class for MCP operations.\n\nCovers connection failures, transport errors, protocol violations,\ntool lookup failures, serialization issues, and auth errors."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-mcp/src/index.ts",
          "sha256": "6b12b2145be4fbf44f311a71047b5f7c7dbe3b04d21286de1b49a5181c66f841",
          "artifactSha256": "33fe0f47980d296106557701b70c4da166e34278363f2e35b1409f8902271ac2",
          "url": "/reference/source/forge-ts/packages/forge-mcp/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { ForgeMcpError, ForgeMcpErrorCode, type ForgeMcpErrorCodeType } from './error.js';",
              "line": 25,
              "signature": "export { ForgeMcpError, ForgeMcpErrorCode, type ForgeMcpErrorCodeType } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 28,
              "signature": "export {\n  type McpToolDescriptor,\n  type McpResource,\n  type McpPrompt,\n  type McpPromptArgument,\n  type McpRequest,\n  type McpResponse,\n  type McpErrorObject,\n  type McpRequestId,\n  type McpCapabilities,\n} from './types.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 41,
              "signature": "export {\n  type McpTransport,\n  type TransportConfig,\n  StdioTransport,\n  SseTransport,\n  HttpTransport,\n  createTransport,\n} from './transport.js';",
              "documentation": ""
            },
            {
              "name": "export { McpClient, type McpClientConfig } from './client.js';",
              "line": 51,
              "signature": "export { McpClient, type McpClientConfig } from './client.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 54,
              "signature": "export {\n  McpServer,\n  type McpServerConfig,\n  type ToolHandler,\n  type ResourceHandler,\n  type PromptHandler,\n} from './server.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 63,
              "signature": "export {\n  type OAuthConfig,\n  type PkceChallenge,\n  generatePkceChallenge,\n} from './auth.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-mcp/src/server.ts",
          "sha256": "5259f3a5a20be260c35d61a09b659b5c23acd58d234a104c05629a15a2a918bd",
          "artifactSha256": "aafa924504719cf79590c07fcac52fe25d7f895a9f99b92d72cf370391b4704a",
          "url": "/reference/source/forge-ts/packages/forge-mcp/src/server.ts.txt",
          "declarations": [
            {
              "name": "ToolHandler",
              "line": 25,
              "signature": "export type ToolHandler = (args: Record<string, unknown>) => Promise<unknown>;",
              "documentation": "Handler function for tool calls."
            },
            {
              "name": "ResourceHandler",
              "line": 30,
              "signature": "export type ResourceHandler = (uri: string) => Promise<unknown>;",
              "documentation": "Handler function for resource reads."
            },
            {
              "name": "PromptHandler",
              "line": 35,
              "signature": "export type PromptHandler = (args: Record<string, string>) => Promise<unknown>;",
              "documentation": "Handler function for prompt gets."
            },
            {
              "name": "McpServerConfig",
              "line": 40,
              "signature": "export interface McpServerConfig {\n  /** The server name. */\n  readonly name: string;\n  /** The server version. */\n  readonly version: string;\n}",
              "documentation": "Configuration for an MCP server."
            },
            {
              "name": "McpServer",
              "line": 70,
              "signature": "export class McpServer {\n  constructor(config: McpServerConfig);\n  registerTool(descriptor: McpToolDescriptor, handler: ToolHandler): void;\n  registerResource(resource: McpResource, handler: ResourceHandler): void;\n  registerPrompt(prompt: McpPrompt, handler: PromptHandler): void;\n  capabilities(): McpCapabilities;\n  async handleRequest(request: McpRequest): Promise<McpResponse>;\n}",
              "documentation": "An MCP server that handles incoming JSON-RPC 2.0 requests and dispatches\nto registered tool, resource, and prompt handlers.\n\nANVIL Spec section 12.2 -- MCP Server."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-mcp/src/transport.ts",
          "sha256": "dd3f582cd3ac5f9b13270efde557b0088264174bef27051dd22b9a22ebdc90b7",
          "artifactSha256": "dceab7d7d0a890d2acf91b8ec14d396f400c7532ed2ab5419b814b510ee70a34",
          "url": "/reference/source/forge-ts/packages/forge-mcp/src/transport.ts.txt",
          "declarations": [
            {
              "name": "TransportConfig",
              "line": 23,
              "signature": "export type TransportConfig =\n  | { readonly type: 'stdio' }\n  | { readonly type: 'sse'; readonly url: string }\n  | { readonly type: 'http'; readonly url: string };",
              "documentation": "Transport configuration variants."
            },
            {
              "name": "McpTransport",
              "line": 43,
              "signature": "export interface McpTransport {\n  /**\n   * Sends a JSON-RPC 2.0 request.\n   *\n   * @param request - The request to send.\n   * @throws {ForgeMcpError} If the send fails.\n   */\n  send(request: McpRequest): Promise<void>;\n\n  /**\n   * Receives the next JSON-RPC 2.0 response.\n   *\n   * @returns The response message.\n   * @throws {ForgeMcpError} If the receive fails or the transport is closed.\n   */\n  receive(): Promise<McpResponse>;\n\n  /**\n   * Closes the transport connection.\n   *\n   * After closing, no further sends or receives are allowed.\n   */\n  close(): Promise<void>;\n}",
              "documentation": "Interface for MCP message transport.\n\nImplementations handle the low-level sending and receiving of\nJSON-RPC 2.0 messages over a specific transport mechanism."
            },
            {
              "name": "StdioLineReader",
              "line": 71,
              "signature": "export interface StdioLineReader {\n  /**\n   * Reads the next newline-delimited JSON line.\n   *\n   * Returns `null` on clean EOF.\n   */\n  readLine(): Promise<string | null>;\n}",
              "documentation": "Line-based reader for stdio transports."
            },
            {
              "name": "StdioLineWriter",
              "line": 83,
              "signature": "export interface StdioLineWriter {\n  /**\n   * Writes a single JSON line without a trailing newline.\n   */\n  writeLine(line: string): Promise<void>;\n}",
              "documentation": "Line-based writer for stdio transports."
            },
            {
              "name": "StdioTransportOptions",
              "line": 93,
              "signature": "export interface StdioTransportOptions {\n  readonly reader?: StdioLineReader;\n  readonly writer?: StdioLineWriter;\n}",
              "documentation": "Optional injected stdio adapters for tests and embedded runtimes."
            },
            {
              "name": "StdioTransport",
              "line": 228,
              "signature": "export class StdioTransport implements McpTransport {\n  constructor(options?: StdioTransportOptions);\n  async send(request: McpRequest): Promise<void>;\n  async receive(): Promise<McpResponse>;\n  async close(): Promise<void>;\n}",
              "documentation": "Stdio transport implementation.\n\nCommunicates via stdin/stdout using newline-delimited JSON. This is the\nprimary transport for local MCP servers."
            },
            {
              "name": "SseTransport",
              "line": 300,
              "signature": "export class SseTransport implements McpTransport {\n  constructor(url: string);\n  async send(request: McpRequest): Promise<void>;\n  async receive(): Promise<McpResponse>;\n  async close(): Promise<void>;\n}",
              "documentation": "Server-Sent Events (SSE) transport implementation.\n\nSends requests via HTTP POST and receives responses via an SSE stream.\nThis is the recommended transport for remote MCP servers."
            },
            {
              "name": "HttpTransport",
              "line": 496,
              "signature": "export class HttpTransport implements McpTransport {\n  constructor(url: string);\n  async send(request: McpRequest): Promise<void>;\n  async receive(): Promise<McpResponse>;\n  async close(): Promise<void>;\n}",
              "documentation": "HTTP transport implementation.\n\nSends requests and receives responses as individual HTTP POST requests."
            },
            {
              "name": "createTransport",
              "line": 563,
              "signature": "export function createTransport(config: TransportConfig): McpTransport;",
              "documentation": "Creates a transport from configuration."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-mcp/src/types.ts",
          "sha256": "05b0701a1be7518bb0bf715720563ae0999b5c3457ce6db619fbae7517796c42",
          "artifactSha256": "2c9ab41c9f92c3e5c28a61382926a3e39a337e5c5d1ec09f94c16b804735e50f",
          "url": "/reference/source/forge-ts/packages/forge-mcp/src/types.ts.txt",
          "declarations": [
            {
              "name": "McpToolDescriptor",
              "line": 22,
              "signature": "export interface McpToolDescriptor {\n  /** The unique name of the tool. */\n  readonly name: string;\n  /** A human-readable description of the tool's purpose. */\n  readonly description: string;\n  /** The JSON Schema for the tool's input parameters. */\n  readonly inputSchema: Record<string, unknown>;\n}",
              "documentation": "MCP (Model Context Protocol) type definitions.\n\nDefines the JSON-RPC 2.0 message types and MCP-specific descriptors\nfor tools, resources, and prompts.\nAn MCP tool descriptor exposed by a server."
            },
            {
              "name": "McpResource",
              "line": 34,
              "signature": "export interface McpResource {\n  /** The URI identifying this resource. */\n  readonly uri: string;\n  /** A human-readable name for the resource. */\n  readonly name: string;\n  /** An optional description. */\n  readonly description?: string;\n  /** The MIME type of the resource content. */\n  readonly mimeType?: string;\n}",
              "documentation": "An MCP resource exposed by a server."
            },
            {
              "name": "McpPromptArgument",
              "line": 48,
              "signature": "export interface McpPromptArgument {\n  /** The argument name. */\n  readonly name: string;\n  /** An optional description. */\n  readonly description?: string;\n  /** Whether this argument is required. */\n  readonly required: boolean;\n}",
              "documentation": "An MCP prompt argument."
            },
            {
              "name": "McpPrompt",
              "line": 60,
              "signature": "export interface McpPrompt {\n  /** The unique name of the prompt. */\n  readonly name: string;\n  /** An optional description. */\n  readonly description?: string;\n  /** The prompt's arguments. */\n  readonly arguments: readonly McpPromptArgument[];\n}",
              "documentation": "An MCP prompt template exposed by a server."
            },
            {
              "name": "McpRequestId",
              "line": 72,
              "signature": "export type McpRequestId = number | string | null;",
              "documentation": "JSON-RPC 2.0 request ID type."
            },
            {
              "name": "McpRequest",
              "line": 77,
              "signature": "export interface McpRequest {\n  /** JSON-RPC version. Always '2.0'. */\n  readonly jsonrpc: '2.0';\n  /** The request ID for matching responses. */\n  readonly id: McpRequestId;\n  /** The method name. */\n  readonly method: string;\n  /** Optional parameters. */\n  readonly params?: Record<string, unknown>;\n}",
              "documentation": "A JSON-RPC 2.0 request message."
            },
            {
              "name": "McpErrorObject",
              "line": 91,
              "signature": "export interface McpErrorObject {\n  /** The error code. */\n  readonly code: number;\n  /** A human-readable error message. */\n  readonly message: string;\n  /** Optional additional error data. */\n  readonly data?: unknown;\n}",
              "documentation": "A JSON-RPC 2.0 error object."
            },
            {
              "name": "McpResponse",
              "line": 103,
              "signature": "export interface McpResponse {\n  /** JSON-RPC version. Always '2.0'. */\n  readonly jsonrpc: '2.0';\n  /** The request ID this response corresponds to. */\n  readonly id: McpRequestId;\n  /** The result on success. */\n  readonly result?: unknown;\n  /** The error on failure. */\n  readonly error?: McpErrorObject;\n}",
              "documentation": "A JSON-RPC 2.0 response message."
            },
            {
              "name": "McpCapabilities",
              "line": 117,
              "signature": "export interface McpCapabilities {\n  /** Whether the server provides tools. */\n  readonly tools: boolean;\n  /** Whether the server provides resources. */\n  readonly resources: boolean;\n  /** Whether the server provides prompts. */\n  readonly prompts: boolean;\n}",
              "documentation": "Server capabilities reported during initialization."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/media",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Image generation, speech synthesis, transcription, and video generation for the Forge SDK",
      "manifest": "forge-ts/packages/forge-media/package.json",
      "manifestSha256": "820846db6c50c6645f9657b11622b411badbeb3cfef0f907874eba67f1235dfe",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/media",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-media/src/error.ts",
          "sha256": "11694c3f4152569dad54ee5a3ac553d1c23d22400a05a89921351429b7d07594",
          "artifactSha256": "1a7dec13a0a26f98fe2c3b4ec68cd410e176213b68391a6098198c6c93229100",
          "url": "/reference/source/forge-ts/packages/forge-media/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeMediaErrorCode = {",
              "line": 13,
              "signature": "export const ForgeMediaErrorCode /* type inferred in source */;",
              "documentation": "Error types for the `@forge-sdk/media` package.\n\nAll errors are typed and actionable. Error messages include enough context\nfor the developer to diagnose the issue without reading source code.\nError code enumeration for `@forge-sdk/media`."
            },
            {
              "name": "ForgeMediaErrorCodeType",
              "line": 23,
              "signature": "export type ForgeMediaErrorCodeType = (typeof ForgeMediaErrorCode)[keyof typeof ForgeMediaErrorCode];",
              "documentation": "Error code type."
            },
            {
              "name": "ForgeMediaError",
              "line": 42,
              "signature": "export class ForgeMediaError extends Error {\n  public readonly code: ForgeMediaErrorCodeType;\n  static generationFailed(model: string, reason: string): ForgeMediaError;\n  static transcriptionFailed(model: string, reason: string): ForgeMediaError;\n  static speechFailed(model: string, reason: string): ForgeMediaError;\n  static videoFailed(model: string, reason: string): ForgeMediaError;\n  static unsupportedFormat(format: string, supported: string[]): ForgeMediaError;\n  static core(reason: string): ForgeMediaError;\n}",
              "documentation": "Error class for media operations.\n\nCovers image generation, speech synthesis, transcription, video generation,\nand format compatibility errors."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-media/src/image.ts",
          "sha256": "392397e64374a3219161aeb6442bb56dd25a3fd101ca0c6a488d9d7d01684110",
          "artifactSha256": "68a3be7e485429835e51c292c1f22c3d6c639eae7baa1475a7e349d9f81532cf",
          "url": "/reference/source/forge-ts/packages/forge-media/src/image.ts.txt",
          "declarations": [
            {
              "name": "export const ImageFormat = {",
              "line": 18,
              "signature": "export const ImageFormat /* type inferred in source */;",
              "documentation": "Supported image output formats.\n\nANVIL Spec section 10.1 -- Media formats."
            },
            {
              "name": "ImageFormat",
              "line": 25,
              "signature": "export type ImageFormat = (typeof ImageFormat)[keyof typeof ImageFormat];",
              "documentation": "Image format type."
            },
            {
              "name": "imageMimeType",
              "line": 33,
              "signature": "export function imageMimeType(format: ImageFormat): string;",
              "documentation": "Returns the MIME type for an image format."
            },
            {
              "name": "imageExtension",
              "line": 47,
              "signature": "export function imageExtension(format: ImageFormat): string;",
              "documentation": "Returns the file extension for an image format."
            },
            {
              "name": "ImageOptions",
              "line": 54,
              "signature": "export interface ImageOptions {\n  /** Image width in pixels. */\n  readonly width?: number;\n  /** Image height in pixels. */\n  readonly height?: number;\n  /** Output format. Defaults to PNG. */\n  readonly format?: ImageFormat;\n  /** Quality level (0-100). Only applies to JPEG and WebP. */\n  readonly quality?: number;\n  /** Style hint for the generator (e.g., 'vivid', 'natural'). */\n  readonly style?: string;\n}",
              "documentation": "Options for image generation."
            },
            {
              "name": "ImageResult",
              "line": 70,
              "signature": "export interface ImageResult {\n  /** The raw image data as a Uint8Array. */\n  readonly data: Uint8Array;\n  /** The MIME type of the generated image. */\n  readonly mimeType: string;\n  /** The width of the generated image in pixels. */\n  readonly width: number;\n  /** The height of the generated image in pixels. */\n  readonly height: number;\n  /** The model identifier that produced this image. */\n  readonly model: string;\n}",
              "documentation": "The result of an image generation operation."
            },
            {
              "name": "ImageProvider",
              "line": 100,
              "signature": "export interface ImageProvider {\n  /** Returns the model identifier. */\n  modelId(): string;\n  /** Returns the provider name (e.g., 'openai', 'stability'). */\n  providerName(): string;\n\n  /**\n   * Generates an image from a text prompt.\n   *\n   * @param prompt - The text description of the desired image.\n   * @param options - Optional generation parameters.\n   * @returns The generated image result.\n   * @throws {ForgeMediaError} If generation fails.\n   */\n  generateImage(prompt: string, options?: ImageOptions): Promise<ImageResult>;\n}",
              "documentation": "Interface for image generation providers.\n\nImplementors connect to an image generation model (e.g., DALL-E 3,\nStable Diffusion, Midjourney API) and produce images from text prompts."
            },
            {
              "name": "generateImage",
              "line": 138,
              "signature": "export async function generateImage(\n  provider: ImageProvider,\n  prompt: string,\n  options?: ImageOptions\n): Promise<ImageResult>;",
              "documentation": "Generates an image using the given provider.\n\nThis is a convenience function that delegates to the provider's\n`generateImage` method with error wrapping."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-media/src/index.ts",
          "sha256": "09397e7d35bd7842805caade8973b6f1afd813cef4f1ccba0188019ab292a2df",
          "artifactSha256": "9fb47b965d1054a2084ebf4c9ad87c32b88f7fea9ab8b782a5bc07e83906d24c",
          "url": "/reference/source/forge-ts/packages/forge-media/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { ForgeMediaError, ForgeMediaErrorCode, type ForgeMediaErrorCodeType } from './error.js';",
              "line": 14,
              "signature": "export { ForgeMediaError, ForgeMediaErrorCode, type ForgeMediaErrorCodeType } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 17,
              "signature": "export {\n  type ImageProvider,\n  type ImageOptions,\n  type ImageResult,\n  ImageFormat,\n  imageMimeType,\n  imageExtension,\n  generateImage,\n} from './image.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 28,
              "signature": "export {\n  type SpeechProvider,\n  type SpeechOptions,\n  type SpeechResult,\n  AudioFormat,\n  audioMimeType,\n  speak,\n} from './speech.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 38,
              "signature": "export {\n  type TranscriptionProvider,\n  type TranscriptionOptions,\n  type TranscriptionResult,\n  type TranscriptionSegment,\n  transcribe,\n} from './transcription.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 47,
              "signature": "export {\n  type VideoProvider,\n  type VideoOptions,\n  type VideoResult,\n  VideoFormat,\n  videoMimeType,\n  generateVideo,\n} from './video.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-media/src/speech.ts",
          "sha256": "c66d2fa660ef195bd89a1a2a079a39bfb9c7e6c769c37a749db18823645c9b44",
          "artifactSha256": "29a94114800f08f28ef20a9b261c02af923ef3c64b6b7fb56478225f933ed7c3",
          "url": "/reference/source/forge-ts/packages/forge-media/src/speech.ts.txt",
          "declarations": [
            {
              "name": "export const AudioFormat = {",
              "line": 15,
              "signature": "export const AudioFormat /* type inferred in source */;",
              "documentation": "Supported audio output formats."
            },
            {
              "name": "AudioFormat",
              "line": 23,
              "signature": "export type AudioFormat = (typeof AudioFormat)[keyof typeof AudioFormat];",
              "documentation": "Audio format type."
            },
            {
              "name": "audioMimeType",
              "line": 31,
              "signature": "export function audioMimeType(format: AudioFormat): string;",
              "documentation": "Returns the MIME type for an audio format."
            },
            {
              "name": "SpeechOptions",
              "line": 43,
              "signature": "export interface SpeechOptions {\n  /** Voice identifier (provider-specific). */\n  readonly voice?: string;\n  /** Speech speed multiplier. 1.0 is normal speed. */\n  readonly speed?: number;\n  /** Output audio format. Defaults to MP3. */\n  readonly format?: AudioFormat;\n}",
              "documentation": "Options for speech synthesis."
            },
            {
              "name": "SpeechResult",
              "line": 55,
              "signature": "export interface SpeechResult {\n  /** The raw audio data as a Uint8Array. */\n  readonly audio: Uint8Array;\n  /** The MIME type of the generated audio. */\n  readonly mimeType: string;\n  /** Duration of the audio in seconds, if known. */\n  readonly durationSeconds?: number;\n}",
              "documentation": "The result of a speech synthesis operation."
            },
            {
              "name": "SpeechProvider",
              "line": 81,
              "signature": "export interface SpeechProvider {\n  /** Returns the model identifier. */\n  modelId(): string;\n  /** Returns the provider name. */\n  providerName(): string;\n\n  /**\n   * Synthesizes speech from text.\n   *\n   * @param text - The text to convert to speech.\n   * @param options - Optional synthesis parameters.\n   * @returns The generated speech result.\n   * @throws {ForgeMediaError} If synthesis fails.\n   */\n  speak(text: string, options?: SpeechOptions): Promise<SpeechResult>;\n}",
              "documentation": "Interface for speech synthesis providers.\n\nImplementors connect to a TTS model (e.g., OpenAI TTS, Google Cloud TTS,\nElevenLabs) and produce audio from text."
            },
            {
              "name": "speak",
              "line": 115,
              "signature": "export async function speak(\n  provider: SpeechProvider,\n  text: string,\n  options?: SpeechOptions\n): Promise<SpeechResult>;",
              "documentation": "Synthesizes speech from text using the given provider."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-media/src/transcription.ts",
          "sha256": "7be0cbc6e1d295993b410f0d6055173a101fd9b374078fef6497c095258ea0e3",
          "artifactSha256": "1caebd78728062e46e1441077505be2947dd06a8c0152404d65079634f513f2b",
          "url": "/reference/source/forge-ts/packages/forge-media/src/transcription.ts.txt",
          "declarations": [
            {
              "name": "TranscriptionSegment",
              "line": 15,
              "signature": "export interface TranscriptionSegment {\n  /** Start time of the segment in seconds. */\n  readonly start: number;\n  /** End time of the segment in seconds. */\n  readonly end: number;\n  /** The transcribed text for this segment. */\n  readonly text: string;\n}",
              "documentation": "A segment of transcribed audio with timing information."
            },
            {
              "name": "TranscriptionOptions",
              "line": 27,
              "signature": "export interface TranscriptionOptions {\n  /** Language hint (ISO 639-1 code, e.g., 'en', 'fr', 'de'). */\n  readonly language?: string;\n  /** Prompt hint to guide the transcription model. */\n  readonly prompt?: string;\n}",
              "documentation": "Options for audio transcription."
            },
            {
              "name": "TranscriptionResult",
              "line": 37,
              "signature": "export interface TranscriptionResult {\n  /** The full transcribed text. */\n  readonly text: string;\n  /** The detected or specified language. */\n  readonly language?: string;\n  /** Duration of the audio in seconds, if known. */\n  readonly durationSeconds?: number;\n  /** Word-level or sentence-level timing segments. */\n  readonly segments: readonly TranscriptionSegment[];\n}",
              "documentation": "The result of an audio transcription operation."
            },
            {
              "name": "TranscriptionProvider",
              "line": 65,
              "signature": "export interface TranscriptionProvider {\n  /** Returns the model identifier. */\n  modelId(): string;\n  /** Returns the provider name. */\n  providerName(): string;\n\n  /**\n   * Transcribes audio to text.\n   *\n   * @param audio - The raw audio data.\n   * @param options - Optional transcription parameters.\n   * @returns The transcription result.\n   * @throws {ForgeMediaError} If transcription fails.\n   */\n  transcribe(audio: Uint8Array, options?: TranscriptionOptions): Promise<TranscriptionResult>;\n}",
              "documentation": "Interface for audio transcription providers.\n\nImplementors connect to a STT model (e.g., OpenAI Whisper, Google Cloud STT,\nDeepgram) and produce text from audio."
            },
            {
              "name": "transcribe",
              "line": 97,
              "signature": "export async function transcribe(\n  provider: TranscriptionProvider,\n  audio: Uint8Array,\n  options?: TranscriptionOptions\n): Promise<TranscriptionResult>;",
              "documentation": "Transcribes audio using the given provider."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-media/src/video.ts",
          "sha256": "f0302437dff6d685767c7c0dcc1e0a515f511f5b504274bd88c16f4907d36f47",
          "artifactSha256": "482a5b6e35feb8f991a9a13cb5ed2edb13fa162388765274e0f7f608fa33f2f2",
          "url": "/reference/source/forge-ts/packages/forge-media/src/video.ts.txt",
          "declarations": [
            {
              "name": "export const VideoFormat = {",
              "line": 15,
              "signature": "export const VideoFormat /* type inferred in source */;",
              "documentation": "Supported video output formats."
            },
            {
              "name": "VideoFormat",
              "line": 21,
              "signature": "export type VideoFormat = (typeof VideoFormat)[keyof typeof VideoFormat];",
              "documentation": "Video format type."
            },
            {
              "name": "videoMimeType",
              "line": 29,
              "signature": "export function videoMimeType(format: VideoFormat): string;",
              "documentation": "Returns the MIME type for a video format."
            },
            {
              "name": "VideoOptions",
              "line": 39,
              "signature": "export interface VideoOptions {\n  /** Video width in pixels. */\n  readonly width?: number;\n  /** Video height in pixels. */\n  readonly height?: number;\n  /** Duration of the video in seconds. */\n  readonly durationSeconds?: number;\n  /** Output format. Defaults to MP4. */\n  readonly format?: VideoFormat;\n}",
              "documentation": "Options for video generation."
            },
            {
              "name": "VideoResult",
              "line": 53,
              "signature": "export interface VideoResult {\n  /** The raw video data as a Uint8Array. */\n  readonly data: Uint8Array;\n  /** The MIME type of the generated video. */\n  readonly mimeType: string;\n  /** Duration of the generated video in seconds. */\n  readonly durationSeconds: number;\n  /** The width of the generated video in pixels. */\n  readonly width: number;\n  /** The height of the generated video in pixels. */\n  readonly height: number;\n}",
              "documentation": "The result of a video generation operation."
            },
            {
              "name": "VideoProvider",
              "line": 83,
              "signature": "export interface VideoProvider {\n  /** Returns the model identifier. */\n  modelId(): string;\n  /** Returns the provider name. */\n  providerName(): string;\n\n  /**\n   * Generates a video from a text prompt.\n   *\n   * @param prompt - The text description of the desired video.\n   * @param options - Optional generation parameters.\n   * @returns The generated video result.\n   * @throws {ForgeMediaError} If generation fails.\n   */\n  generateVideo(prompt: string, options?: VideoOptions): Promise<VideoResult>;\n}",
              "documentation": "Interface for video generation providers.\n\nImplementors connect to a video generation model (e.g., Runway, Pika,\nSora) and produce video from text prompts."
            },
            {
              "name": "generateVideo",
              "line": 117,
              "signature": "export async function generateVideo(\n  provider: VideoProvider,\n  prompt: string,\n  options?: VideoOptions\n): Promise<VideoResult>;",
              "documentation": "Generates a video using the given provider."
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/sdk",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Aggregated re-exports for the Forge SDK -- import everything from one package",
      "manifest": "forge-ts/packages/forge-sdk/package.json",
      "manifestSha256": "9875cfc1f93cc7424d3f75e70ab57666916c3736bb4ab207b0fdb18b6c5a77e7",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/sdk",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-sdk/src/index.ts",
          "sha256": "2b705d7e2bd9cee742709749b4688a604fb9dbc0fbe9f74c4a9fc47bec6c2021",
          "artifactSha256": "469a646590bc0fc47e44c2e293f5912a6a38f03317779f17cbe5c12b9d0556ad",
          "url": "/reference/source/forge-ts/packages/forge-sdk/src/index.ts.txt",
          "declarations": [
            {
              "name": "export {",
              "line": 28,
              "signature": "export {\n  // Messages\n  Role,\n  type TextPart,\n  type ImagePart,\n  type ToolCallPart,\n  type ToolResultPart,\n  type MessagePart,\n  type ModelMessage,\n  textPart,\n  imagePart,\n  toolCallPart,\n  toolResultPart,\n  isToolCall,\n  isToolResult,\n  createMessage,\n  createTextMessage,\n  getToolCalls,\n  getTextContent,\n  // Model\n  type LanguageModel,\n  // Output\n  FinishReason,\n  type Usage,\n  type GenerateResult,\n  type TextDeltaChunk,\n  type ToolCallDeltaChunk,\n  type DoneChunk,\n  type StreamChunk,\n  zeroUsage,\n  addUsage,\n  isComplete,\n  isToolCallFinish,\n  textDeltaChunk,\n  doneChunk,\n  isTextDelta,\n  isDone,\n  chunkText,\n  // Tools\n  ToolTier,\n  type ToolDefinition,\n  type ToolCall,\n  type ToolResult,\n  type ToolApproval,\n  ToolApprovalDecision,\n  ToolDefinitionBuilder,\n  buildToolDefinition,\n  requiresAuthorization,\n  approve,\n  deny,\n  modify,\n  // Config\n  type GenerateOptions,\n  type EmbedOptions,\n  defaultGenerateOptions,\n  // Schema\n  JsonSchema,\n  SchemaType,\n  // Errors\n  ForgeError,\n  ForgeErrorCode,\n  // Telemetry\n  ForgeSpan,\n  ForgeEvent,\n  SpanStatus,\n  type SpanStatusType,\n  type SpanAttribute,\n  type TelemetryEmitter,\n  NoopEmitter,\n  RecordingEmitter,\n  // Types\n  type AgentDid,\n  Timestamp,\n  createAgentDid,\n  trustedAgentDid,\n  // Provider\n  ProviderRef,\n  ProviderRegistry,\n  type ProviderMetadata,\n  ProviderFamily,\n  AuthStrategy,\n  type ProviderPreset,\n  type ProviderEnvironment,\n  type ProviderExecutionRequest,\n  type ProviderInstallOptions,\n  approvedCodingProviderPresets,\n  approvedDirectProviderPresets,\n  approvedGatewayProviderPresets,\n  registerOfficialCodingProviders,\n  registerDefaultCoreDirectProviders,\n  registerOpenAiModel,\n  registerAnthropicModel,\n  registerGoogleModel,\n  registerXaiModel,\n  registerDeepSeekModel,\n  registerMistralModel,\n  registerCohereModel,\n  registerGroqModel,\n  registerMoonshotModel,\n  registerZaiModel,\n  registerMiniMaxModel,\n  registerOpenRouterModel,\n  registerBedrockModel,\n  registerVertexAiModel,\n  registerMicrosoftFoundryModel,\n  registerFoundryModel,\n} from '@forge-sdk/core';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 139,
              "signature": "export {\n  ForgeGenerateError,\n  ForgeGenerateErrorCode,\n  type ForgeGenerateErrorCodeType,\n  GenerateTextResult,\n  generateText,\n  TextStreamResult,\n  streamText,\n  type ObjectResult,\n  generateObject,\n  streamObject,\n  type StopCondition,\n  type StopReason,\n  type StepResult,\n  maxSteps,\n  maxTokens,\n  textMatch,\n  customStop as customStopGenerate,\n  formatStopReason,\n  finalText,\n  stepCount,\n  completedNaturally,\n  generateSteps,\n} from '@forge-sdk/generate';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 167,
              "signature": "export {\n  ForgeToolError,\n  ForgeToolErrorCode,\n  type ForgeToolErrorCodeType,\n  ExecutionContext,\n  type TierClassification,\n  classifyTier,\n  tierRequiresAuthorization,\n  executionContextFor,\n  type ToolExecutor,\n  FnToolExecutor,\n  executeToolCall,\n  type ApprovalHandler,\n  AutoApprove,\n  DenyAll,\n  TierBasedApproval,\n  ToolBuilder,\n  ToolRegistry,\n} from '@forge-sdk/tool';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 190,
              "signature": "export {\n  ForgeAgentError,\n  ForgeAgentErrorCode,\n  type ForgeAgentErrorCodeType,\n  AgentStopReason,\n  type AgentStopCondition,\n  type LoopContext,\n  maxIterations,\n  maxTotalTokens,\n  modelStopsNaturally,\n  customStop as customStopAgent,\n  evaluateStopConditions,\n  type ToolLoopConfig,\n  type ToolLoopIteration,\n  type ToolLoopOutput,\n  runToolLoop,\n  type AgentConfig,\n  ToolLoopAgent,\n  type WorkflowStep,\n  type WorkflowResult,\n  type RouterFn,\n  SequentialWorkflow,\n  ParallelWorkflow,\n  RouterWorkflow,\n  type SubAgentConfig,\n  createSubAgent,\n  runSubAgentTask,\n  type AgentMessage,\n  MessageType,\n  type TypedMessage,\n  AgentChannel,\n  createAgentMessage,\n  createTypedMessage,\n} from '@forge-sdk/agent';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 228,
              "signature": "export {\n  ForgeEmbedError,\n  ForgeEmbedErrorCode,\n  type ForgeEmbedErrorCodeType,\n  type EmbeddingProvider,\n  type EmbeddingResult,\n  embed,\n  embedMany,\n  cosineSimilarity,\n  euclideanDistance,\n  dotProduct,\n  type Reranker,\n  type RerankResult,\n  rerank,\n  type VectorStore,\n  type VectorEntry,\n  type SearchResult,\n  InMemoryVectorStore,\n  type TextSplitter,\n  RecursiveCharacterSplitter,\n  type RecursiveCharacterSplitterOptions,\n  TokenSplitter,\n  type TokenSplitterOptions,\n  type Document,\n  type DocumentLoader,\n  TextLoader,\n  JsonLoader,\n} from '@forge-sdk/embed';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 260,
              "signature": "export {\n  ForgeMediaError,\n  ForgeMediaErrorCode,\n  type ForgeMediaErrorCodeType,\n  type ImageProvider,\n  ImageFormat,\n  type ImageOptions,\n  type ImageResult,\n  imageMimeType,\n  imageExtension,\n  generateImage,\n  type SpeechProvider,\n  AudioFormat,\n  audioMimeType,\n  type SpeechOptions,\n  type SpeechResult,\n  speak,\n  type TranscriptionProvider,\n  type TranscriptionSegment,\n  type TranscriptionOptions,\n  type TranscriptionResult,\n  transcribe,\n  type VideoProvider,\n  VideoFormat,\n  videoMimeType,\n  type VideoOptions,\n  type VideoResult,\n  generateVideo,\n} from '@forge-sdk/media';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 293,
              "signature": "export {\n  ForgeMcpError,\n  ForgeMcpErrorCode,\n  type ForgeMcpErrorCodeType,\n  type McpToolDescriptor,\n  type McpResource,\n  type McpPrompt,\n  type McpPromptArgument,\n  type McpRequest,\n  type McpResponse,\n  type McpErrorObject,\n  type McpRequestId,\n  type McpCapabilities,\n  type McpTransport,\n  type TransportConfig,\n  StdioTransport,\n  SseTransport,\n  HttpTransport,\n  createTransport,\n  type OAuthConfig,\n  type PkceChallenge,\n  generatePkceChallenge,\n  McpClient,\n  type McpClientConfig,\n  McpServer,\n  type McpServerConfig,\n  type ToolHandler,\n  type ResourceHandler,\n  type PromptHandler,\n} from '@forge-sdk/mcp';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 327,
              "signature": "export {\n  LifecycleState,\n  type LifecycleStateType,\n  validTransitions,\n  isTerminal,\n  isOperational,\n  type LifecycleTransition,\n  LifecycleError,\n  LifecycleManager,\n  HealthProfile,\n  LifecycleEvent,\n  type HealthThresholds,\n  defaultHealthThresholds,\n  HealthMonitor,\n  type HealthStatus,\n  healthy,\n  degraded,\n  critical,\n  isHealthy,\n  isCritical,\n  reasons,\n  HealthReport,\n  ForgeHealthErrorCode,\n  type ForgeHealthErrorCodeType,\n  ForgeHealthError,\n} from '@forge-sdk/health';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 357,
              "signature": "export {\n  ForgeIdentityError,\n  ForgeIdentityErrorCode,\n  type ForgeIdentityErrorCodeType,\n  ForgeAgentIdentity,\n  type CryptoBridge,\n  type OasDocument,\n  type VerificationMethod,\n  type LineageSection,\n  type LineageProof,\n  type DocumentProof,\n  type ProtectedSigningKey,\n  type IdentityKeyProtector,\n  setCryptoBridge,\n  getCryptoBridge,\n  createHmrIdentity,\n  createMhrIdentity,\n  deriveAgentIdentity,\n  DEFAULT_MAX_LINEAGE_DEPTH,\n  saveIdentity,\n  loadIdentity,\n} from '@forge-sdk/identity';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 383,
              "signature": "export {\n  ForgeAuthError,\n  ForgeAuthErrorCode,\n  type ForgeAuthErrorCodeType,\n  type AgentCapabilityToken,\n  type DelegationConstraints,\n  verifyAct,\n  extractScopes,\n  actAllowsScope,\n  scopeImplies,\n  type ToolAuthorizationRequest,\n  type ToolAuthorizationDecision,\n  ToolAuthorizationDecisionType,\n  authorizeToolInvocation,\n  isAllowed,\n  isDenied,\n  isLegacyMode,\n  buildToolScope,\n  type DelegationRequest,\n  type DelegationResult,\n  delegateCapabilities,\n} from '@forge-sdk/auth';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 409,
              "signature": "export {\n  AgentMessage as CommAgentMessage,\n  type MessageTransport,\n  NoopTransport,\n  type ProtocolOffer,\n  type ProtocolAccept,\n  negotiateProtocol,\n  CommErrorCode,\n  type CommErrorCodeType,\n  CommError,\n} from '@forge-sdk/comm';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 424,
              "signature": "export {\n  CollaborationRole,\n  type CollaborationRoleType,\n  SessionState,\n  type SessionStateType,\n  validSessionTransitions,\n  isSessionTerminal,\n  type SessionParticipant,\n  type CollaborationSession,\n  type SessionTransition,\n  TaskPriority,\n  type TaskPriorityType,\n  TaskStatus,\n  type TaskStatusType,\n  type TaskConstraints,\n  defaultTaskConstraints,\n  type DelegatedTask,\n  type TaskResult as CollabTaskResult,\n  type TaskAcknowledgment,\n  type TaskProgress,\n  InterruptType,\n  type InterruptTypeType,\n  type Interrupt,\n  type InterruptResponse,\n  type InterruptedState,\n  ContextVisibility,\n  type ContextVisibilityType,\n  type ContextEntry,\n  type AgentCapabilityProfile,\n  SessionManager,\n  type CoordinatorContract,\n  type WorkerContract,\n  type PeerContract,\n  CollabErrorCode,\n  type CollabErrorCodeType,\n  CollabError,\n} from '@forge-sdk/collab';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 465,
              "signature": "export {\n  AuditEventKind,\n  type AuditEventKindType,\n  SpanId,\n  AuditEvent,\n  type TelemetryContract,\n  NoopTelemetry,\n  type CompletedSpan,\n  type SpanCollector,\n  NoopCollector,\n  InMemoryCollector,\n  InMemoryTelemetry,\n  type AuditEntry,\n  AuditTrail,\n  TelemetryErrorCode,\n  type TelemetryErrorCodeType,\n  TelemetryError,\n} from '@forge-sdk/telemetry';",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/telemetry",
      "language": "typescript",
      "version": "0.1.0",
      "description": "ANVIL telemetry contract: span collection, audit trails, and observability for the Forge SDK.",
      "manifest": "forge-ts/packages/forge-telemetry/package.json",
      "manifestSha256": "967e0717d6a121085fa156bcfa2940a9dcdd25fdb2d08b6de7c6329add6d006c",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/telemetry",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-telemetry/src/audit.ts",
          "sha256": "ed674f25df1466fb9be1140c36e901abc88cf4c8f2a469ffbf7c4d75b9192a1b",
          "artifactSha256": "c1168667a28021788baed932ede7c98c3b17e3a1346ea46f12a2e8fe3a45e849",
          "url": "/reference/source/forge-ts/packages/forge-telemetry/src/audit.ts.txt",
          "declarations": [
            {
              "name": "AuditEntry",
              "line": 20,
              "signature": "export interface AuditEntry {\n  /** Sequential index in the trail (0-based). */\n  readonly index: number;\n  /** The audit event. */\n  readonly event: AuditEvent;\n}",
              "documentation": "A single audit trail entry.\n\nEach entry has a sequential index assigned by the AuditTrail and wraps\nan AuditEvent with the full event details."
            },
            {
              "name": "AuditTrail",
              "line": 48,
              "signature": "export class AuditTrail {\n  constructor(agentDid: string);\n  append(event: AuditEvent): void;\n  entries(): readonly AuditEntry[];\n  len(): number;\n  isEmpty(): boolean;\n  last(): AuditEntry | undefined;\n  agentDid(): string;\n  filterByKind(kind: AuditEventKindType): AuditEntry[];\n}",
              "documentation": "An append-only audit trail with optional Ed25519 signatures.\n\nPer ANVIL Spec section 14.2, every significant agent operation is recorded\nin the audit trail. Entries are timestamped and optionally signed by the\nagent's Ed25519 key. The trail assigns sequential indices starting from 0."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-telemetry/src/collector.ts",
          "sha256": "571cb2531cb02d67549971d165535c81cb20f88ba37e41801f4f80ddda1fc1fa",
          "artifactSha256": "327480f34a6a1e767d2b7710e66237118c29cc2817fa61f5b5d660a19a0e6f10",
          "url": "/reference/source/forge-ts/packages/forge-telemetry/src/collector.ts.txt",
          "declarations": [
            {
              "name": "CompletedSpan",
              "line": 23,
              "signature": "export interface CompletedSpan {\n  /** The unique identifier for this span. */\n  readonly spanId: SpanId;\n  /** The span name (e.g., \"anvil.generate\", \"anvil.tool.invoke\"). */\n  readonly name: string;\n  /** Key-value attributes associated with this span. */\n  readonly attributes: ReadonlyArray<readonly [string, string]>;\n  /** ISO 8601 timestamp of when the span was started. */\n  readonly startTime: string;\n  /** ISO 8601 timestamp of when the span was ended. */\n  readonly endTime: string;\n  /** The agent's OAS DID, if available. */\n  readonly agentDid: string | undefined;\n}",
              "documentation": "A completed span with timing information.\n\nRepresents a span that has been started and ended, capturing the full\nduration and attributes of the operation."
            },
            {
              "name": "SpanCollector",
              "line": 44,
              "signature": "export interface SpanCollector {\n  /** Record a completed span. */\n  recordSpan(span: CompletedSpan): void;\n  /** Retrieve all recorded spans. */\n  spans(): CompletedSpan[];\n  /** Clear all recorded spans. */\n  clear(): void;\n  /** Number of recorded spans. */\n  len(): number;\n  /** Returns true if no spans have been recorded. */\n  isEmpty(): boolean;\n}",
              "documentation": "Interface for collecting completed telemetry spans.\n\nImplementations can store spans in memory, write them to disk, or forward\nthem to an external collector."
            },
            {
              "name": "NoopCollector",
              "line": 67,
              "signature": "export class NoopCollector implements SpanCollector {\n  recordSpan(_span: CompletedSpan): void;\n  spans(): CompletedSpan[];\n  clear(): void;\n  len(): number;\n  isEmpty(): boolean;\n}",
              "documentation": "Discards all spans. Zero-cost default for standalone agents."
            },
            {
              "name": "InMemoryCollector",
              "line": 106,
              "signature": "export class InMemoryCollector implements SpanCollector {\n  recordSpan(span: CompletedSpan): void;\n  spans(): CompletedSpan[];\n  clear(): void;\n  len(): number;\n  isEmpty(): boolean;\n}",
              "documentation": "Stores spans in memory. Useful for testing and debugging."
            },
            {
              "name": "InMemoryTelemetry",
              "line": 157,
              "signature": "export class InMemoryTelemetry implements TelemetryContract {\n  constructor(agentDid?: string);\n  startSpan(name: string, attributes: ReadonlyArray<readonly [string, string]>): SpanId;\n  endSpan(spanId: SpanId): void;\n  emitEvent(event: AuditEvent): void;\n  flush(): void;\n  completedSpans(): CompletedSpan[];\n  events(): AuditEvent[];\n  clear(): void;\n  spanCount(): number;\n  eventCount(): number;\n}",
              "documentation": "In-memory telemetry implementation that stores both spans and events.\n\nWraps InMemoryCollector for span storage and tracks active spans to\nproduce CompletedSpan records when endSpan is called. Also collects\nemitted AuditEvent entries.\n\nImplements TelemetryContract for use in testing and debugging scenarios.\n\nANVIL Spec section 14.1 -- Telemetry Contract."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-telemetry/src/contract.ts",
          "sha256": "26b1c724b21a71f748efe0b4bf83a8bfd3130fd20af29cdf249cb5e9a2716ca2",
          "artifactSha256": "a6d7e8777d899bdaed111061c135f4b0e0899c44d6e6c0f7f094b26c24912783",
          "url": "/reference/source/forge-ts/packages/forge-telemetry/src/contract.ts.txt",
          "declarations": [
            {
              "name": "export const AuditEventKind = {",
              "line": 21,
              "signature": "export const AuditEventKind /* type inferred in source */;",
              "documentation": "Audit event kinds per ANVIL Spec section 14.3.\n\nEach kind corresponds to a category of agent operation that should be\nrecorded in the audit trail."
            },
            {
              "name": "AuditEventKindType",
              "line": 34,
              "signature": "export type AuditEventKindType =\n  (typeof AuditEventKind)[keyof typeof AuditEventKind];",
              "documentation": "An audit event kind value."
            },
            {
              "name": "SpanId",
              "line": 46,
              "signature": "export class SpanId {\n  readonly value: string;\n  static generate(): SpanId;\n  static fromString(id: string): SpanId;\n  toString(): string;\n}",
              "documentation": "A unique span identifier.\n\nEach span started via the TelemetryContract receives a SpanId that must be\npassed to endSpan when the operation completes. IDs are generated as random\nstrings for global uniqueness.\n\nANVIL Spec section 14.1 -- Telemetry Contract (span identification)."
            },
            {
              "name": "AuditEvent",
              "line": 97,
              "signature": "export class AuditEvent {\n  readonly kind: AuditEventKindType;\n  readonly agentDid: string;\n  readonly timestamp: string;\n  readonly details: Record<string, unknown>;\n  readonly signature: string | undefined;\n  static create(\n    kind: AuditEventKindType,\n    agentDid: string,\n    details: Record<string, unknown>\n  ): AuditEvent;\n  withSignature(signature: string): AuditEvent;\n  isSigned(): boolean;\n  toJSON(): Record<string, unknown>;\n}",
              "documentation": "An audit event recording a significant agent operation.\n\nANVIL Spec section 14.3 -- Audit Events."
            },
            {
              "name": "TelemetryContract",
              "line": 175,
              "signature": "export interface TelemetryContract {\n  /**\n   * Start a new span with the given name and attributes.\n   *\n   * @param name - The span name (use dotted notation, e.g., \"anvil.generate\").\n   * @param attributes - Key-value pairs of span attributes.\n   * @returns A unique SpanId for the started span.\n   */\n  startSpan(name: string, attributes: ReadonlyArray<readonly [string, string]>): SpanId;\n\n  /**\n   * End a previously started span.\n   *\n   * @param spanId - The ID returned by startSpan.\n   */\n  endSpan(spanId: SpanId): void;\n\n  /**\n   * Emit an audit event for the agent's audit trail.\n   *\n   * @param event - The audit event to record.\n   */\n  emitEvent(event: AuditEvent): void;\n\n  /**\n   * Flush any buffered telemetry data to the backend.\n   *\n   * @throws {TelemetryError} If the flush operation fails.\n   */\n  flush(): void;\n}",
              "documentation": "ANVIL Spec section 14.1 -- Telemetry Contract.\n\nDefines the telemetry emission interface for ANVIL-compliant agents.\nImplementations collect spans, emit audit events, and support flushing\nbuffered telemetry data to external systems."
            },
            {
              "name": "NoopTelemetry",
              "line": 223,
              "signature": "export class NoopTelemetry implements TelemetryContract {\n  startSpan(_name: string, _attributes: ReadonlyArray<readonly [string, string]>): SpanId;\n  endSpan(_spanId: SpanId): void;\n  emitEvent(_event: AuditEvent): void;\n  flush(): void;\n}",
              "documentation": "No-op telemetry implementation that discards all telemetry data.\n\nUsed as the default for agents that do not need telemetry collection or\nwhen telemetry is disabled. All operations are zero-cost.\n\nANVIL Spec section 14.1 -- Telemetry Contract (default implementation)."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-telemetry/src/error.ts",
          "sha256": "3fd1dcdea6ede75c8218b10a9841e3214f68c22aabf3afa37019516b840dbe0e",
          "artifactSha256": "8223c35012f9eff033ee31a335637ad7be0e63d7dc0b996a1d604d74621f1826",
          "url": "/reference/source/forge-ts/packages/forge-telemetry/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const TelemetryErrorCode = {",
              "line": 17,
              "signature": "export const TelemetryErrorCode /* type inferred in source */;",
              "documentation": "Error types for the forge-telemetry package.\n\nAll errors are typed, actionable, and include enough context to diagnose the\nissue without reading source code.\n\nANVIL Spec section 14 -- Telemetry error conditions.\nError codes for telemetry operations.\n\nEach code maps to a specific category of failure."
            },
            {
              "name": "TelemetryErrorCodeType",
              "line": 35,
              "signature": "export type TelemetryErrorCodeType =\n  (typeof TelemetryErrorCode)[keyof typeof TelemetryErrorCode];",
              "documentation": "A telemetry error code value."
            },
            {
              "name": "TelemetryError",
              "line": 50,
              "signature": "export class TelemetryError extends Error {\n  readonly code: TelemetryErrorCodeType;\n  static spanNotFound(spanId: string): TelemetryError;\n  static spanAlreadyClosed(spanId: string): TelemetryError;\n  static auditEntryInvalid(reason: string): TelemetryError;\n  static auditTrailCorrupted(index: number, reason: string): TelemetryError;\n  static flushFailed(reason: string): TelemetryError;\n  static collectorFull(capacity: number): TelemetryError;\n  static exportFailed(reason: string): TelemetryError;\n}",
              "documentation": "Error type for telemetry operations.\n\nEvery instance includes actionable context: what failed, why, and what the\ndeveloper should check."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-telemetry/src/index.ts",
          "sha256": "f6a041fd39ee907ddb2a882d8874d6fd715ca08a46b19838796bed71c55a80b1",
          "artifactSha256": "234cca27018db950dab4560cd88e7dd5eaadfe7f13b07457af26502305807d07",
          "url": "/reference/source/forge-ts/packages/forge-telemetry/src/index.ts.txt",
          "declarations": [
            {
              "name": "export {",
              "line": 21,
              "signature": "export {\n  AuditEventKind,\n  type AuditEventKindType,\n  SpanId,\n  AuditEvent,\n  type TelemetryContract,\n  NoopTelemetry,\n} from './contract.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 31,
              "signature": "export {\n  type CompletedSpan,\n  type SpanCollector,\n  NoopCollector,\n  InMemoryCollector,\n  InMemoryTelemetry,\n} from './collector.js';",
              "documentation": ""
            },
            {
              "name": "export { type AuditEntry, AuditTrail } from './audit.js';",
              "line": 40,
              "signature": "export { type AuditEntry, AuditTrail } from './audit.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 43,
              "signature": "export {\n  TelemetryErrorCode,\n  type TelemetryErrorCodeType,\n  TelemetryError,\n} from './error.js';",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "@forge-sdk/tool",
      "language": "typescript",
      "version": "0.1.0",
      "description": "Tool definition, execution, approval, and registry for the Forge SDK",
      "manifest": "forge-ts/packages/forge-tool/package.json",
      "manifestSha256": "399a1ea4cdf322574e953cc436a839576469826c8061168ad486983141f8f9cb",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/typescript/tool",
      "features": {},
      "files": [
        {
          "path": "forge-ts/packages/forge-tool/src/approval.ts",
          "sha256": "b46992776447278b15f73ef023e9e199c814a9b7e8bd364daf015f7e524977b4",
          "artifactSha256": "93b11dfa8a7e82f824dce23e597e7a8f2a731a877eb391ff63f965ceac4da1bf",
          "url": "/reference/source/forge-ts/packages/forge-tool/src/approval.ts.txt",
          "declarations": [
            {
              "name": "ApprovalHandler",
              "line": 44,
              "signature": "export interface ApprovalHandler {\n  /**\n   * Checks whether a tool call should be approved, denied, or modified.\n   *\n   * @param call - The tool call to evaluate.\n   * @param tier - The tool's tier classification.\n   * @returns A ToolApproval indicating the decision.\n   */\n  check(call: ToolCall, tier: ToolTier): Promise<ToolApproval>;\n}",
              "documentation": "Interface for tool approval handlers.\n\nImplementors decide whether a tool call should proceed, be denied, or be\nmodified before execution. The approval handler is invoked after schema\nvalidation but before execution.\n\nANVIL Spec section 8.6: The approval step is mandatory."
            },
            {
              "name": "AutoApprove",
              "line": 72,
              "signature": "export class AutoApprove implements ApprovalHandler {\n  async check(_call: ToolCall, _tier: ToolTier): Promise<ToolApproval>;\n}",
              "documentation": ""
            },
            {
              "name": "DenyAll",
              "line": 99,
              "signature": "export class DenyAll implements ApprovalHandler {\n  constructor(reason: string);\n  async check(_call: ToolCall, _tier: ToolTier): Promise<ToolApproval>;\n}",
              "documentation": "An approval handler that always denies tool calls with a configured reason.\n\nUseful for testing denial flows, maintenance mode, and as a fallback\nwhen no authorization context is available."
            },
            {
              "name": "TierBasedApproval",
              "line": 147,
              "signature": "export class TierBasedApproval implements ApprovalHandler {\n  async check(call: ToolCall, tier: ToolTier): Promise<ToolApproval>;\n}",
              "documentation": "A tier-based approval handler that auto-approves Platform and Embedded tools\nbut denies External-tier tools.\n\nThis is the default ANVIL-compliant approval policy:\n\n| Tier | Decision | Rationale |\n|------|----------|-----------|\n| Platform (1) | Approve | Always available, sandbox-confined |\n| External (2) | Deny | Requires Arsenal ACT authorization |\n| Embedded (3) | Approve | Module-scoped, sandbox-confined |\n\nANVIL Spec section 8.1: External-tier tools execute outside the sandbox and\nMUST be authorized via Arsenal ACTs. Without ACT integration, this handler\nconservatively denies all External-tier calls."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-tool/src/definition.ts",
          "sha256": "cd329423d7fca733da0482c4d98e45532ee36e4c31438d0c1c33d5b149be4042",
          "artifactSha256": "fa1565dec16415407b8965c193516272ea8e92508363c9ba4c0faa38775c2cb6",
          "url": "/reference/source/forge-ts/packages/forge-tool/src/definition.ts.txt",
          "declarations": [
            {
              "name": "ToolBuilder",
              "line": 46,
              "signature": "export class ToolBuilder {\n  constructor(name: string);\n  description(desc: string): this;\n  tier(tier: ToolTier): this;\n  parameters(schema: JsonSchema): this;\n  executor(executor: ToolExecutor): this;\n  handler(handler: (call: ToolCall) => ToolResult | Promise<ToolResult>): this;\n  build(): [ToolDefinition, ToolExecutor | undefined];\n}",
              "documentation": "A fluent builder for constructing tool definitions with optional executors.\n\nToolBuilder pairs a ToolDefinition with an optional ToolExecutor,\nproducing both in a single build step.\n\nANVIL Spec section 8.2: Every tool has a unique name, human-readable\ndescription, parameter schema, and tier classification."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-tool/src/error.ts",
          "sha256": "d242d4eda016a543d53ad7472c8bf988ea4f5e23ddf2b014064021f5fd4f5dca",
          "artifactSha256": "fee21414402113135e2ab021b2f527950d9091c060f1f9b537860852fb47398e",
          "url": "/reference/source/forge-ts/packages/forge-tool/src/error.ts.txt",
          "declarations": [
            {
              "name": "export const ForgeToolErrorCode = {",
              "line": 16,
              "signature": "export const ForgeToolErrorCode /* type inferred in source */;",
              "documentation": "Error types for the forge-tool package.\n\nAll errors are typed, actionable, and include sufficient context for\ndiagnosis without reading source code.\n\nANVIL Spec section 14.2 -- Error Handling requires all errors carry contextual\ninformation suitable for audit trail entries.\nError codes for tool operations."
            },
            {
              "name": "ForgeToolErrorCodeType",
              "line": 32,
              "signature": "export type ForgeToolErrorCodeType = (typeof ForgeToolErrorCode)[keyof typeof ForgeToolErrorCode];",
              "documentation": "A forge-tool error code value."
            },
            {
              "name": "ForgeToolError",
              "line": 47,
              "signature": "export class ForgeToolError extends Error {\n  readonly code: ForgeToolErrorCodeType;\n  readonly toolName?: string;\n  static toolNotFound(name: string): ForgeToolError;\n  static executionFailed(name: string, reason: string): ForgeToolError;\n  static approvalDenied(name: string, reason: string): ForgeToolError;\n  static schemaValidation(name: string, path: string, reason: string): ForgeToolError;\n  static invalidTier(name: string, expected: string, actual: string): ForgeToolError;\n  static registryError(reason: string): ForgeToolError;\n}",
              "documentation": "Error type for tool operations.\n\nCovers tool lookup failures, execution errors, approval denials,\nschema violations, tier mismatches, and registry errors."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-tool/src/execution.ts",
          "sha256": "55e38f75ec08327a76b8771800420975893fee9135d44c9a464c8b1cdf665c79",
          "artifactSha256": "43b4ac97b3f9c852ec3c2c23c2de11a346119157fca47a4acc1f4d26b643f752",
          "url": "/reference/source/forge-ts/packages/forge-tool/src/execution.ts.txt",
          "declarations": [
            {
              "name": "ToolExecutor",
              "line": 45,
              "signature": "export interface ToolExecutor {\n  /** The name of the tool this executor handles. */\n  readonly name: string;\n\n  /**\n   * Executes the tool with the given call arguments.\n   *\n   * @param call - The tool call containing the call ID, tool name, and JSON arguments.\n   * @returns A ToolResult with the execution output.\n   * @throws {ForgeToolError} If the tool logic fails.\n   */\n  execute(call: ToolCall): Promise<ToolResult>;\n}",
              "documentation": "Interface for tool execution implementations.\n\nImplementors provide the actual logic that runs when an agent invokes a tool.\nEach executor is associated with a single tool by name.\n\nANVIL Spec section 8.5: The executor receives a validated, approved ToolCall\nand returns a ToolResult. The executor MUST NOT perform its own authorization\nchecks -- that is the approval handler's responsibility."
            },
            {
              "name": "FnToolExecutor",
              "line": 75,
              "signature": "export class FnToolExecutor implements ToolExecutor {\n  readonly name: string;\n  constructor(\n    name: string,\n    handler: (call: ToolCall) => ToolResult | Promise<ToolResult>\n  );\n  async execute(call: ToolCall): Promise<ToolResult>;\n}",
              "documentation": "A tool executor that wraps a synchronous or async function.\n\nFnToolExecutor allows defining simple tools as functions without\nimplementing the full ToolExecutor interface."
            },
            {
              "name": "executeToolCall",
              "line": 141,
              "signature": "export async function executeToolCall(\n  call: ToolCall,\n  definition: ToolDefinition,\n  executor: ToolExecutor,\n  approvalHandler: ApprovalHandler\n): Promise<ToolResult>;",
              "documentation": "Executes a tool call through the full pipeline: schema validation, approval, execution.\n\nThis function implements the complete ANVIL tool execution lifecycle:\n1. Schema validation -- Validates call.arguments against the tool's parameter schema.\n2. Approval gate -- Checks with the approval handler whether the call is permitted.\n3. Execution -- Delegates to the tool executor.\n\nANVIL Spec section 8.5--8.6: The execution pipeline is mandatory."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-tool/src/index.ts",
          "sha256": "8098d42cbc84b002ac61bbf19aa88ddbd7020eb3757af6e269a2b5002503bf40",
          "artifactSha256": "b89d9f848d33338fcdb8d77b50f706ea6d2e2137e5e0a7c291acc0c4181b9066",
          "url": "/reference/source/forge-ts/packages/forge-tool/src/index.ts.txt",
          "declarations": [
            {
              "name": "export { ForgeToolError, ForgeToolErrorCode, type ForgeToolErrorCodeType } from './error.js';",
              "line": 32,
              "signature": "export { ForgeToolError, ForgeToolErrorCode, type ForgeToolErrorCodeType } from './error.js';",
              "documentation": ""
            },
            {
              "name": "export {",
              "line": 35,
              "signature": "export {\n  ExecutionContext,\n  type TierClassification,\n  classifyTier,\n  tierRequiresAuthorization,\n  executionContextFor,\n} from './tiers.js';",
              "documentation": ""
            },
            {
              "name": "export { type ToolExecutor, FnToolExecutor, executeToolCall } from './execution.js';",
              "line": 44,
              "signature": "export { type ToolExecutor, FnToolExecutor, executeToolCall } from './execution.js';",
              "documentation": ""
            },
            {
              "name": "export { type ApprovalHandler, AutoApprove, DenyAll, TierBasedApproval } from './approval.js';",
              "line": 47,
              "signature": "export { type ApprovalHandler, AutoApprove, DenyAll, TierBasedApproval } from './approval.js';",
              "documentation": ""
            },
            {
              "name": "export { ToolBuilder } from './definition.js';",
              "line": 50,
              "signature": "export { ToolBuilder } from './definition.js';",
              "documentation": ""
            },
            {
              "name": "export { ToolRegistry } from './registry.js';",
              "line": 53,
              "signature": "export { ToolRegistry } from './registry.js';",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-tool/src/registry.ts",
          "sha256": "9b70a071e8f88dbcfbd9134fc416b6f8ba568feccbeab2223029a62a20c77779",
          "artifactSha256": "3161e17426d08688a32cb7bdc01aad7098b8b60604a15b2c5940c88ed1b54deb",
          "url": "/reference/source/forge-ts/packages/forge-tool/src/registry.ts.txt",
          "declarations": [
            {
              "name": "ToolRegistry",
              "line": 40,
              "signature": "export class ToolRegistry {\n  register(definition: ToolDefinition, executor: ToolExecutor): void;\n  get(name: string): [ToolDefinition, ToolExecutor] | undefined;\n  list(): ToolDefinition[];\n  definitions(): ToolDefinition[];\n  get size(): number;\n  get isEmpty(): boolean;\n  remove(name: string): [ToolDefinition, ToolExecutor] | undefined;\n  contains(name: string): boolean;\n}",
              "documentation": "A registry that maps tool names to their definitions and executors.\n\nThe registry provides:\n- Registration -- adding tools with definitions and executors.\n- Lookup -- retrieving a tool by name in O(1) time.\n- Listing -- enumerating all registered tools.\n\nANVIL Spec section 8.3: Tools are registered during agent initialization.\nDuplicate registrations are rejected."
            }
          ]
        },
        {
          "path": "forge-ts/packages/forge-tool/src/tiers.ts",
          "sha256": "927f5ded546cdbfb698716869b9d468a6443f7fcbcb6b7e50cd3ec18c4926846",
          "artifactSha256": "260028aef6a98871729c4c3a36423d0b76256032ac7f2f6a831d8b21aa6a0c44",
          "url": "/reference/source/forge-ts/packages/forge-tool/src/tiers.ts.txt",
          "declarations": [
            {
              "name": "export const ExecutionContext = {",
              "line": 33,
              "signature": "export const ExecutionContext /* type inferred in source */;",
              "documentation": "The execution context for a tool based on its tier classification.\n\nDetermines whether the tool runs inside the WASM sandbox or outside it\nvia host function calls.\n\nANVIL Spec section 8.1:\n- InSandbox: Platform (Tier 1) and Embedded (Tier 3) tools run inside the sandbox.\n- OutOfSandbox: External (Tier 2) tools run outside the sandbox via host functions."
            },
            {
              "name": "ExecutionContext",
              "line": 41,
              "signature": "export type ExecutionContext = (typeof ExecutionContext)[keyof typeof ExecutionContext];",
              "documentation": "Execution context type."
            },
            {
              "name": "TierClassification",
              "line": 56,
              "signature": "export interface TierClassification {\n  /** The name of the tool that was classified. */\n  readonly toolName: string;\n  /** The tool's tier classification. */\n  readonly tier: ToolTier;\n  /** Whether this tool requires Arsenal ACT authorization before execution. */\n  readonly requiresAuthorization: boolean;\n  /** The execution context (sandbox or host) for this tool. */\n  readonly executionContext: ExecutionContext;\n}",
              "documentation": "The result of classifying a tool by its tier.\n\nContains the tier, whether authorization is required, and the execution\ncontext (sandbox or host)."
            },
            {
              "name": "classifyTier",
              "line": 95,
              "signature": "export function classifyTier(toolName: string, tier: ToolTier): TierClassification;",
              "documentation": ""
            },
            {
              "name": "tierRequiresAuthorization",
              "line": 138,
              "signature": "export function tierRequiresAuthorization(tier: ToolTier): boolean;",
              "documentation": "Returns `true` if the given tier requires Arsenal ACT authorization.\n\nAccepts both `'external'` and `'host'` (legacy alias) for Tier 2."
            },
            {
              "name": "executionContextFor",
              "line": 155,
              "signature": "export function executionContextFor(tier: ToolTier): ExecutionContext;",
              "documentation": "Returns the ExecutionContext for a given tier."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.agent",
      "language": "python",
      "version": "0.1.0",
      "description": "Python agent package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/agent",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/agent/__init__.py",
          "sha256": "8b79efd8425c2ad1e89f3a840b2a1dc9a3e55127e1f4e4060280ab8bf9bc1576",
          "artifactSha256": "17a72557dc70fde053f94d7373b940f3342552be47c3722688bb056bffb15c80",
          "url": "/reference/source/forge-py/src/forge/agent/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/agent/agent.py",
          "sha256": "40139c2d88cd34a31006687350806146f230da078d670a3d2441b561119d7ec9",
          "artifactSha256": "e044907e10dd376697b9256b732f874c60cda8788307bf66558fd01c88c3f9f7",
          "url": "/reference/source/forge-py/src/forge/agent/agent.py.txt",
          "declarations": [
            {
              "name": "AgentConfig",
              "line": 21,
              "signature": "class AgentConfig()",
              "documentation": "Configuration for an Agent.\n\nArgs:\n    model_ref: Provider reference (e.g., \"openai:gpt-4o\").\n    system_prompt: Optional system prompt for the agent.\n    max_steps: Maximum tool loop iterations (default: 10).\n    options: Default generation options."
            },
            {
              "name": "AgentOutput",
              "line": 38,
              "signature": "class AgentOutput()",
              "documentation": "Output from an agent run.\n\nArgs:\n    text: The final text output.\n    messages: The complete message history.\n    steps: Number of tool loop steps executed.\n    usage: Aggregate token usage."
            },
            {
              "name": "Agent",
              "line": 54,
              "signature": "class Agent(ABC)",
              "documentation": "Abstract base class for all Forge agents.\n\nEvery agent maintains a lifecycle state machine and health profile.\nConcrete implementations define the ``run`` method.\n\nANVIL Spec section 5.1: Lifecycle State Machine.\nANVIL Spec section 6.1: Cognitive Interface."
            },
            {
              "name": "Agent.__init__",
              "line": 64,
              "signature": "def __init__(self, config: AgentConfig) -> None",
              "documentation": ""
            },
            {
              "name": "Agent.config",
              "line": 70,
              "signature": "def config(self) -> AgentConfig",
              "documentation": "Return the agent configuration.\n\nReturns:\n    The AgentConfig."
            },
            {
              "name": "Agent.health",
              "line": 79,
              "signature": "def health(self) -> HealthProfile",
              "documentation": "Return the health profile.\n\nReturns:\n    The HealthProfile."
            },
            {
              "name": "Agent.lifecycle",
              "line": 88,
              "signature": "def lifecycle(self) -> LifecycleManager",
              "documentation": "Return the lifecycle manager.\n\nReturns:\n    The LifecycleManager."
            },
            {
              "name": "Agent.state",
              "line": 97,
              "signature": "def state(self) -> LifecycleState",
              "documentation": "Return the current lifecycle state.\n\nReturns:\n    The current LifecycleState."
            },
            {
              "name": "Agent.run",
              "line": 106,
              "signature": "async def run(self, input_text: str) -> AgentOutput",
              "documentation": "Run the agent with the given input.\n\nArgs:\n    input_text: The user input to process.\n\nReturns:\n    The agent output.\n\nRaises:\n    ForgeError: If the agent encounters an error."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/agent/loop_control.py",
          "sha256": "20096e1ac88ea3dbbe85630f48dd6609637b1b731d715c79a2cbd08860f84008",
          "artifactSha256": "8ed73ab20d8f56959f5c4a4714bef43f40bbf33b573a9773faf5a7718fb46f82",
          "url": "/reference/source/forge-py/src/forge/agent/loop_control.py.txt",
          "declarations": [
            {
              "name": "LoopControl",
              "line": 13,
              "signature": "class LoopControl(ABC)",
              "documentation": "Abstract base class for tool loop termination control.\n\nImplementations decide whether to continue the tool loop after each step."
            },
            {
              "name": "LoopControl.should_continue",
              "line": 20,
              "signature": "def should_continue(self, step: int, result: GenerateResult) -> bool",
              "documentation": "Decide whether the tool loop should continue.\n\nArgs:\n    step: The current step number (0-indexed).\n    result: The result from the latest generation.\n\nReturns:\n    True if the loop should continue."
            },
            {
              "name": "StopOnCompleteControl",
              "line": 32,
              "signature": "class StopOnCompleteControl(LoopControl)",
              "documentation": "Stop the loop when the model produces a complete response (no tool calls).\n\nThis is the default loop control strategy."
            },
            {
              "name": "StopOnCompleteControl.should_continue",
              "line": 38,
              "signature": "def should_continue(self, step: int, result: GenerateResult) -> bool",
              "documentation": "Continue only if the model requested tool calls.\n\nArgs:\n    step: The current step number.\n    result: The generation result.\n\nReturns:\n    True if the finish reason is TOOL_CALLS."
            },
            {
              "name": "MaxStepsControl",
              "line": 51,
              "signature": "class MaxStepsControl(LoopControl)",
              "documentation": "Stop the loop after a maximum number of steps.\n\nArgs:\n    max_steps: The maximum number of steps."
            },
            {
              "name": "MaxStepsControl.__init__",
              "line": 58,
              "signature": "def __init__(self, max_steps: int) -> None",
              "documentation": ""
            },
            {
              "name": "MaxStepsControl.should_continue",
              "line": 61,
              "signature": "def should_continue(self, step: int, result: GenerateResult) -> bool",
              "documentation": "Continue if under the step limit and the model wants to call tools.\n\nArgs:\n    step: The current step number.\n    result: The generation result.\n\nReturns:\n    True if under the limit and model requested tool calls."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/agent/messaging.py",
          "sha256": "1a5fba4ecbf1f4c97660e917e5d3e8153b62c83dbb8b1e4370b39d7536cbab22",
          "artifactSha256": "6c3e1d3648fa5db948c75a78c9816785a145a209074939436479a53cc8b7bc0f",
          "url": "/reference/source/forge-py/src/forge/agent/messaging.py.txt",
          "declarations": [
            {
              "name": "AgentMessage",
              "line": 15,
              "signature": "class AgentMessage()",
              "documentation": "A message between agents.\n\nUsed for sub-agent delegation and multi-agent orchestration.\n\nArgs:\n    sender_did: The sender agent's DID.\n    recipient_did: The recipient agent's DID.\n    content: The message content.\n    protocol: The communication protocol used.\n    message_type: The message type (e.g., \"request\", \"response\").\n    timestamp: When the message was created.\n    metadata: Optional additional metadata."
            },
            {
              "name": "AgentMessage.to_dict",
              "line": 38,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/agent/subagent.py",
          "sha256": "6d51e16b16ce1e9d0ac39262095f20c5069b2e6f2441370eaaa2f8cf26992894",
          "artifactSha256": "e1447ceddc8162c587eca32c9ca04c7dce77cfd464446d9abc793696390b8401",
          "url": "/reference/source/forge-py/src/forge/agent/subagent.py.txt",
          "declarations": [
            {
              "name": "SubAgentConfig",
              "line": 12,
              "signature": "class SubAgentConfig()",
              "documentation": "Configuration for creating a sub-agent.\n\nThe child agent receives derived identity and narrowed capabilities.\nChild capabilities must be a strict subset of parent capabilities.\n\nANVIL Spec section 11.2: Lineage Propagation.\n\nArgs:\n    name: The sub-agent name (used in DID derivation).\n    model_ref: Provider reference for the sub-agent.\n    system_prompt: Optional system prompt.\n    max_steps: Maximum tool loop iterations.\n    capabilities: List of capability strings requested for the child."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/agent/tool_loop.py",
          "sha256": "acf317d81c79ac6b54a1044878e269c7e3ace7baa4a340804819ca9ae104afb2",
          "artifactSha256": "1ffa20d4181f98ab20a45b3080a274b9c807fda82fdec23e5f45b5682e0d8cd6",
          "url": "/reference/source/forge-py/src/forge/agent/tool_loop.py.txt",
          "declarations": [
            {
              "name": "ToolLoopAgent",
              "line": 29,
              "signature": "class ToolLoopAgent(Agent)",
              "documentation": "An agent that executes a tool loop until completion.\n\nThe tool loop pattern:\n1. Send messages to the model\n2. If model returns tool calls, execute them\n3. Append tool results to messages\n4. Repeat until model returns a final text response or limit reached\n\nANVIL Spec sections 6.1, 8.5-8.7.\n\nArgs:\n    config: Agent configuration.\n    model: The language model to use.\n    tool_registry: The registry of available tools.\n    tool_executor: The tool executor.\n    loop_control: Optional loop termination control.\n\nExample:\n    >>> # With a mock model and tools:\n    >>> # agent = ToolLoopAgent(config, model, registry, executor)\n    >>> # output = await agent.run(\"Hello\")"
            },
            {
              "name": "ToolLoopAgent.__init__",
              "line": 53,
              "signature": "def __init__(self, config: AgentConfig, model: LanguageModel, tool_registry: ToolRegistry, tool_executor: ToolExecutor, loop_control: LoopControl | None=None) -> None",
              "documentation": ""
            },
            {
              "name": "ToolLoopAgent.run",
              "line": 71,
              "signature": "async def run(self, input_text: str) -> AgentOutput",
              "documentation": "Run the tool loop agent with the given input.\n\nTransitions through lifecycle states:\nCreated -> Initializing -> Active -> (processing) -> Terminating -> Terminated\n\nArgs:\n    input_text: The user input to process.\n\nReturns:\n    The agent output with final text, messages, step count, and usage.\n\nRaises:\n    ForgeStopConditionError: If the maximum step limit is reached.\n    ForgeError: If any other error occurs during execution."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/agent/workflow.py",
          "sha256": "03aec45ac26d7a43e6e807fb07c1586e8a54c1fee84cea1fccfe55f4d10f4f2a",
          "artifactSha256": "acc6c050a3dd2f71e219430816486f6a066ca9c2219bc5317201a26f0638e2e2",
          "url": "/reference/source/forge-py/src/forge/agent/workflow.py.txt",
          "declarations": [
            {
              "name": "WorkflowStep",
              "line": 13,
              "signature": "class WorkflowStep()",
              "documentation": "A single step in a workflow.\n\nArgs:\n    name: Human-readable step name.\n    agent_ref: Reference to the agent to execute.\n    input_template: Input template with ``{variable}`` placeholders.\n    output_key: Key to store the step's output for subsequent steps."
            },
            {
              "name": "SequentialWorkflow",
              "line": 29,
              "signature": "class SequentialWorkflow()",
              "documentation": "A workflow that executes steps in sequence.\n\nEach step's output is available as a variable in subsequent steps'\ninput templates.\n\nANVIL Spec section 13: Multi-Agent Orchestration.\n\nArgs:\n    steps: The ordered list of workflow steps.\n\nExample:\n    >>> wf = SequentialWorkflow([\n    ...     WorkflowStep(\"research\", \"research-agent\", \"{input}\", \"research_result\"),\n    ...     WorkflowStep(\"summarize\", \"summary-agent\", \"{research_result}\", \"summary\"),\n    ... ])\n    >>> len(wf.steps)\n    2"
            },
            {
              "name": "SequentialWorkflow.__init__",
              "line": 49,
              "signature": "def __init__(self, steps: list[WorkflowStep]) -> None",
              "documentation": ""
            },
            {
              "name": "SequentialWorkflow.steps",
              "line": 53,
              "signature": "def steps(self) -> list[WorkflowStep]",
              "documentation": "Return the workflow steps.\n\nReturns:\n    List of WorkflowStep instances."
            },
            {
              "name": "SequentialWorkflow.resolve_input",
              "line": 61,
              "signature": "def resolve_input(self, template: str, context: dict[str, str]) -> str",
              "documentation": "Resolve an input template against a context of previous outputs.\n\nArgs:\n    template: The input template with ``{variable}`` placeholders.\n    context: Dictionary of variable names to values.\n\nReturns:\n    The resolved input string."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.auth",
      "language": "python",
      "version": "0.1.0",
      "description": "Python auth package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/auth",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/auth/__init__.py",
          "sha256": "01e1b7ff5b47f19375cb7a70e0b429ce18b77f7679a1b73b52cf78d9ee6818ea",
          "artifactSha256": "9f5999a98d1018cf5fa48471f3b8cf9524e81e902a6ae3cb39d3efcfbbd19f0c",
          "url": "/reference/source/forge-py/src/forge/auth/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/auth/capability.py",
          "sha256": "b1fa0b8a5b6c7ac5e489128e87acd81310973ca4415bd3ee5606a9c892b42c25",
          "artifactSha256": "a6567e7653638c8b5944954dc5d7df9ff9f72a6d88b97192931c1bbf51cc1e01",
          "url": "/reference/source/forge-py/src/forge/auth/capability.py.txt",
          "declarations": [
            {
              "name": "Scope",
              "line": 21,
              "signature": "class Scope()",
              "documentation": "A single capability scope in ``\"service:resource:action\"`` format.\n\nScopes follow the pattern ``service:resource:action`` where each component\nmay be a literal string or a wildcard (``*``). Wildcard scopes match any\nvalue at that position.\n\nANVIL Spec section 8.7.2 -- Scope matching on tool invocation.\n\nArgs:\n    service: The service component (e.g., ``\"forge\"``).\n    resource: The resource component (e.g., ``\"tool.web_search\"``).\n    action: The action component (e.g., ``\"execute\"``).\n\nExample:\n    >>> scope = Scope.parse(\"forge:tool.search:execute\")\n    >>> scope.service\n    'forge'\n    >>> scope.implies(Scope.parse(\"forge:tool.search:execute\"))\n    True"
            },
            {
              "name": "Scope.parse",
              "line": 48,
              "signature": "def parse(scope_str: str) -> Scope",
              "documentation": "Parse a scope from a ``\"service:resource:action\"`` string.\n\nArgs:\n    scope_str: The scope string to parse.\n\nReturns:\n    The parsed Scope.\n\nRaises:\n    InvalidTokenError: If the scope string is malformed.\n\nExample:\n    >>> s = Scope.parse(\"forge:tool.clock:execute\")\n    >>> s.service\n    'forge'"
            },
            {
              "name": "Scope.wildcard",
              "line": 74,
              "signature": "def wildcard() -> Scope",
              "documentation": "Create a global wildcard scope that matches everything.\n\nReturns:\n    A Scope with all components set to ``\"*\"``.\n\nExample:\n    >>> Scope.wildcard().implies(Scope.parse(\"any:thing:here\"))\n    True"
            },
            {
              "name": "Scope.implies",
              "line": 86,
              "signature": "def implies(self, other: Scope) -> bool",
              "documentation": "Check whether this scope implies (grants access to) another scope.\n\nA scope implies another if, for each component (service, resource, action),\neither the component matches exactly or this scope has a wildcard (``\"*\"``).\n\nArgs:\n    other: The scope to check against.\n\nReturns:\n    True if this scope implies the other.\n\nExample:\n    >>> Scope.parse(\"forge:*:*\").implies(Scope.parse(\"forge:tool.x:execute\"))\n    True\n    >>> Scope.parse(\"forge:tool.x:execute\").implies(Scope.parse(\"forge:tool.y:execute\"))\n    False"
            },
            {
              "name": "Scope.as_str",
              "line": 110,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the scope as a ``\"service:resource:action\"`` string.\n\nReturns:\n    The scope string."
            },
            {
              "name": "ScopeSet",
              "line": 123,
              "signature": "class ScopeSet()",
              "documentation": "An ordered set of capability scopes.\n\nProvides methods for checking whether a scope is allowed (using\nwildcard matching) and for computing subset/superset relationships.\n\nANVIL Spec section 8.7.2 -- Scope matching uses ``Scope.implies``\nsemantics with wildcard support at each component position.\n\nExample:\n    >>> ss = ScopeSet.from_strings([\"forge:tool.clock:execute\", \"forge:tool.search:execute\"])\n    >>> ss.allows(Scope.parse(\"forge:tool.clock:execute\"))\n    True\n    >>> ss.allows(Scope.parse(\"forge:tool.admin:execute\"))\n    False"
            },
            {
              "name": "ScopeSet.__init__",
              "line": 140,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "ScopeSet.from_strings",
              "line": 144,
              "signature": "def from_strings(scope_strs: list[str]) -> ScopeSet",
              "documentation": "Create a ScopeSet from a list of scope strings.\n\nArgs:\n    scope_strs: List of ``\"service:resource:action\"`` strings.\n\nReturns:\n    A ScopeSet containing the parsed scopes.\n\nRaises:\n    InvalidTokenError: If any scope string is malformed.\n\nExample:\n    >>> ss = ScopeSet.from_strings([\"a:b:c\", \"d:e:f\"])\n    >>> len(ss)\n    2"
            },
            {
              "name": "ScopeSet.add",
              "line": 166,
              "signature": "def add(self, scope: Scope) -> None",
              "documentation": "Add a scope to the set.\n\nDuplicates are silently ignored (checked by string comparison).\n\nArgs:\n    scope: The scope to add."
            },
            {
              "name": "ScopeSet.allows",
              "line": 180,
              "signature": "def allows(self, requested: Scope) -> bool",
              "documentation": "Check whether any scope in this set implies the requested scope.\n\nArgs:\n    requested: The scope to check.\n\nReturns:\n    True if any scope in this set implies the requested scope.\n\nExample:\n    >>> ss = ScopeSet.from_strings([\"forge:*:*\"])\n    >>> ss.allows(Scope.parse(\"forge:tool.search:execute\"))\n    True"
            },
            {
              "name": "ScopeSet.is_superset_of",
              "line": 196,
              "signature": "def is_superset_of(self, other: ScopeSet) -> bool",
              "documentation": "Check whether this set is a superset of another set.\n\nEvery scope in ``other`` must be implied by at least one scope in\n``self``.\n\nArgs:\n    other: The scope set to check against.\n\nReturns:\n    True if this set is a superset of ``other``.\n\nExample:\n    >>> parent = ScopeSet.from_strings([\"forge:*:*\"])\n    >>> child = ScopeSet.from_strings([\"forge:tool.clock:execute\"])\n    >>> parent.is_superset_of(child)\n    True"
            },
            {
              "name": "ScopeSet.to_strings",
              "line": 219,
              "signature": "def to_strings(self) -> list[str]",
              "documentation": "Return all scopes as a sorted list of strings.\n\nReturns:\n    Sorted list of scope strings."
            },
            {
              "name": "ArsenalACT",
              "line": 241,
              "signature": "class ArsenalACT()",
              "documentation": "An Arsenal Agent Capability Token (ACT).\n\nACTs define what capabilities an agent has. They contain a set of\nscopes (permissions), time validity constraints, and optional delegation\nconstraints.\n\nIn the Python SDK, ACTs are represented as data objects. Cryptographic\nsignature verification is delegated to the WASM bridge module.\n\nANVIL Spec section 8.7 -- Tool Authorization Gate.\n\nArgs:\n    token_id: Unique identifier for this token.\n    agent_did: The DID of the agent this token is issued to.\n    issuer: The entity that issued this token.\n    audience: The intended audience for this token.\n    scopes: The set of capability scopes granted by this token.\n    issued_at: When the token was issued (ISO 8601).\n    not_before: The earliest time the token is valid (ISO 8601).\n    expires_at: When the token expires (ISO 8601).\n    allow_delegation: Whether the token permits delegation to sub-agents.\n    max_delegation_depth: Maximum allowed delegation depth.\n    parent_token_id: The ID of the parent token if this was delegated.\n\nExample:\n    >>> act = ArsenalACT(\n    ...     token_id=\"tok-123\",\n    ...     agent_did=\"did:oas:l1fe:agent:bot\",\n    ...     issuer=\"forge-auth\",\n    ...     audience=\"forge-runtime\",\n    ...     scopes=ScopeSet.from_strings([\"forge:tool.clock:execute\"]),\n    ...     issued_at=\"2026-01-15T00:00:00+00:00\",\n    ...     not_before=\"2026-01-15T00:00:00+00:00\",\n    ...     expires_at=\"2026-01-15T01:00:00+00:00\",\n    ... )\n    >>> act.token_id\n    'tok-123'"
            },
            {
              "name": "ArsenalACT.is_expired",
              "line": 293,
              "signature": "def is_expired(self) -> bool",
              "documentation": "Check whether the token has expired.\n\nReturns:\n    True if the current time is past the token's expiration time.\n\nExample:\n    >>> from datetime import datetime, timezone, timedelta\n    >>> future = (datetime.now(tz=timezone.utc) + timedelta(hours=1)).isoformat()\n    >>> act = ArsenalACT(\n    ...     token_id=\"t\", agent_did=\"d\", issuer=\"i\", audience=\"a\",\n    ...     scopes=ScopeSet.from_strings([\"a:b:c\"]),\n    ...     issued_at=future, not_before=future, expires_at=future,\n    ... )\n    >>> # Note: will depend on exact timing"
            },
            {
              "name": "ArsenalACT.remaining_ttl_seconds",
              "line": 316,
              "signature": "def remaining_ttl_seconds(self) -> int",
              "documentation": "Return the remaining time-to-live in seconds.\n\nReturns:\n    Non-negative integer of remaining seconds. Returns 0 if expired."
            },
            {
              "name": "ArsenalACT.to_dict",
              "line": 330,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize the ACT to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ArsenalACT.from_dict",
              "line": 353,
              "signature": "def from_dict(data: dict[str, Any]) -> ArsenalACT",
              "documentation": "Deserialize an ACT from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ArsenalACT.\n\nRaises:\n    InvalidTokenError: If required fields are missing."
            },
            {
              "name": "ArsenalACT.to_json",
              "line": 382,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string."
            },
            {
              "name": "ArsenalACT.from_json",
              "line": 391,
              "signature": "def from_json(data: str) -> ArsenalACT",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized ArsenalACT."
            },
            {
              "name": "verify_act",
              "line": 403,
              "signature": "def verify_act(act: ArsenalACT) -> None",
              "documentation": "Verify that an Arsenal ACT is structurally valid and time-valid.\n\nThis function performs two checks:\n1. **Structural validation** -- Ensures the token has valid fields\n   (non-empty scopes, valid identifiers).\n2. **Time validity** -- Ensures the token is not expired.\n\nThis does NOT perform cryptographic signature verification. Signature\nverification is the responsibility of the WASM bridge / Arsenal crypto layer.\n\nANVIL Spec section 8.7.1.\n\nArgs:\n    act: The Arsenal ACT to verify.\n\nRaises:\n    TokenExpiredError: If the token's expiration time has passed.\n    InvalidTokenError: If the token fails structural validation.\n\nExample:\n    >>> from datetime import datetime, timezone, timedelta\n    >>> now = datetime.now(tz=timezone.utc)\n    >>> act = ArsenalACT(\n    ...     token_id=\"tok-1\", agent_did=\"did:oas:test:agent:x\",\n    ...     issuer=\"test\", audience=\"test\",\n    ...     scopes=ScopeSet.from_strings([\"a:b:c\"]),\n    ...     issued_at=now.isoformat(),\n    ...     not_before=now.isoformat(),\n    ...     expires_at=(now + timedelta(hours=1)).isoformat(),\n    ... )\n    >>> verify_act(act)  # No exception raised"
            },
            {
              "name": "extract_scopes",
              "line": 457,
              "signature": "def extract_scopes(act: ArsenalACT) -> list[str]",
              "documentation": "Extract all granted scope strings from an Arsenal ACT.\n\nReturns the scopes as a sorted list of strings in the\n``\"service:resource:action\"`` format.\n\nThis function does NOT validate the token. Call ``verify_act`` first\nto ensure the token is valid before relying on its scopes.\n\nArgs:\n    act: The Arsenal ACT from which to extract scopes.\n\nReturns:\n    A sorted list of scope strings.\n\nExample:\n    >>> act = ArsenalACT(\n    ...     token_id=\"t\", agent_did=\"d\", issuer=\"i\", audience=\"a\",\n    ...     scopes=ScopeSet.from_strings([\"z:z:z\", \"a:a:a\"]),\n    ...     issued_at=\"now\", not_before=\"now\", expires_at=\"later\",\n    ... )\n    >>> extract_scopes(act)\n    ['a:a:a', 'z:z:z']"
            },
            {
              "name": "act_allows_scope",
              "line": 484,
              "signature": "def act_allows_scope(act: ArsenalACT, scope_str: str) -> bool",
              "documentation": "Check whether an Arsenal ACT grants a specific scope.\n\nThis function first verifies the token is valid (not expired, structurally\nsound), then checks if any of the token's granted scopes imply the\nrequested scope. Wildcard scopes (e.g., ``\"forge:*:*\"``) will match\nspecific scopes (e.g., ``\"forge:tool.search:execute\"``).\n\nANVIL Spec section 8.7.2.\n\nArgs:\n    act: The Arsenal ACT to check.\n    scope_str: The scope string to check in ``\"service:resource:action\"`` format.\n\nReturns:\n    True if the scope is granted, False if not.\n\nRaises:\n    TokenExpiredError: If the token has expired.\n    InvalidTokenError: If the token is structurally invalid or the scope\n        string is malformed.\n\nExample:\n    >>> from datetime import datetime, timezone, timedelta\n    >>> now = datetime.now(tz=timezone.utc)\n    >>> act = ArsenalACT(\n    ...     token_id=\"tok-1\", agent_did=\"did:oas:test:agent:x\",\n    ...     issuer=\"test\", audience=\"test\",\n    ...     scopes=ScopeSet.from_strings([\"forge:tool.clock:execute\"]),\n    ...     issued_at=now.isoformat(),\n    ...     not_before=now.isoformat(),\n    ...     expires_at=(now + timedelta(hours=1)).isoformat(),\n    ... )\n    >>> act_allows_scope(act, \"forge:tool.clock:execute\")\n    True\n    >>> act_allows_scope(act, \"forge:tool.search:execute\")\n    False"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/auth/delegation.py",
          "sha256": "5ecc85788de57160cb394be857bdef6aeff00285fa91c8e3372d44b9b7db861f",
          "artifactSha256": "2d7b726ad5106a8abfa1496f22b76975032ce85776e3274e0308cc10d5eaf337",
          "url": "/reference/source/forge-py/src/forge/auth/delegation.py.txt",
          "declarations": [
            {
              "name": "DelegationRequest",
              "line": 39,
              "signature": "class DelegationRequest()",
              "documentation": "A request to delegate capabilities from a parent agent to a child agent.\n\nANVIL Spec section 11.3.\n\nThe delegation request captures all information needed to create a\nchild ACT with narrowed capabilities.\n\nArgs:\n    parent_act: The parent agent's Arsenal ACT.\n    parent_did: The parent agent's OAS DID (for error messages).\n    child_did: The child agent's OAS DID (for error messages).\n    requested_scopes: The scopes requested for the child agent.\n        Must be a subset of the parent's scopes.\n    min_ttl_reduction: Minimum TTL reduction in seconds (default: 60).\n\nExample:\n    >>> from forge.auth.capability import ArsenalACT, ScopeSet\n    >>> from datetime import datetime, timezone, timedelta\n    >>> now = datetime.now(tz=timezone.utc)\n    >>> parent_act = ArsenalACT(\n    ...     token_id=\"tok-parent\", agent_did=\"did:oas:l1fe:agent:parent\",\n    ...     issuer=\"test\", audience=\"test\",\n    ...     scopes=ScopeSet.from_strings([\"forge:tool.search:execute\"]),\n    ...     issued_at=now.isoformat(), not_before=now.isoformat(),\n    ...     expires_at=(now + timedelta(hours=1)).isoformat(),\n    ... )\n    >>> req = DelegationRequest(\n    ...     parent_act=parent_act,\n    ...     parent_did=\"did:oas:l1fe:agent:parent\",\n    ...     child_did=\"did:oas:l1fe:agent:child\",\n    ...     requested_scopes=ScopeSet.from_strings([\"forge:tool.search:execute\"]),\n    ... )\n    >>> req.child_did\n    'did:oas:l1fe:agent:child'"
            },
            {
              "name": "delegate_capabilities",
              "line": 83,
              "signature": "def delegate_capabilities(request: DelegationRequest) -> ArsenalACT",
              "documentation": "Delegate capabilities from a parent agent to a child agent.\n\nThis function enforces all delegation constraints defined in ANVIL Spec section 11.3:\n\n1. **Parent ACT validity** -- The parent's token must be valid (not expired,\n   structurally sound).\n2. **Scope narrowing** -- The requested child scopes must be a subset of\n   the parent's scopes. Any scope in ``requested_scopes`` that is not implied\n   by the parent's scopes triggers a ``CapabilityEscalationError``.\n3. **Delegation permission** -- The parent's ACT must allow delegation.\n4. **TTL reduction** -- The child's TTL is the parent's remaining TTL\n   minus ``min_ttl_reduction``. If the result is below ``MIN_CHILD_TTL``,\n   delegation is denied.\n\nOn success, returns a new ``ArsenalACT`` for the child agent.\n\nArgs:\n    request: The delegation request.\n\nReturns:\n    A new ArsenalACT for the child agent.\n\nRaises:\n    TokenExpiredError: If the parent ACT has expired.\n    InvalidTokenError: If the parent ACT is structurally invalid.\n    CapabilityEscalationError: If the child requests scope not in the parent.\n    DelegationDeniedError: If delegation constraints prevent delegation.\n\nExample:\n    >>> from forge.auth.capability import ArsenalACT, ScopeSet\n    >>> from datetime import datetime, timezone, timedelta\n    >>> now = datetime.now(tz=timezone.utc)\n    >>> parent_act = ArsenalACT(\n    ...     token_id=\"tok-parent\", agent_did=\"did:oas:l1fe:agent:parent\",\n    ...     issuer=\"forge\", audience=\"forge-runtime\",\n    ...     scopes=ScopeSet.from_strings([\"forge:tool.search:execute\", \"forge:tool.clock:execute\"]),\n    ...     issued_at=now.isoformat(), not_before=now.isoformat(),\n    ...     expires_at=(now + timedelta(hours=1)).isoformat(),\n    ... )\n    >>> child_scopes = ScopeSet.from_strings([\"forge:tool.clock:execute\"])\n    >>> req = DelegationRequest(\n    ...     parent_act=parent_act,\n    ...     parent_did=\"did:oas:l1fe:agent:parent\",\n    ...     child_did=\"did:oas:l1fe:agent:child\",\n    ...     requested_scopes=child_scopes,\n    ... )\n    >>> child_act = delegate_capabilities(req)\n    >>> child_act.agent_did\n    'did:oas:l1fe:agent:child'"
            },
            {
              "name": "DelegationManager",
              "line": 187,
              "signature": "class DelegationManager()",
              "documentation": "Stateful delegation manager for creating sub-agent ACTs.\n\nProvides a convenient interface for delegating capabilities from a parent\nagent to child agents, tracking delegation history for audit purposes.\n\nANVIL Spec section 11.3 -- Capability Delegation.\n\nArgs:\n    parent_act: The parent agent's Arsenal ACT.\n    parent_did: The parent agent's OAS DID.\n\nExample:\n    >>> from forge.auth.capability import ArsenalACT, ScopeSet\n    >>> from datetime import datetime, timezone, timedelta\n    >>> now = datetime.now(tz=timezone.utc)\n    >>> parent_act = ArsenalACT(\n    ...     token_id=\"tok-parent\", agent_did=\"did:oas:l1fe:agent:parent\",\n    ...     issuer=\"test\", audience=\"test\",\n    ...     scopes=ScopeSet.from_strings([\"forge:tool.search:execute\"]),\n    ...     issued_at=now.isoformat(), not_before=now.isoformat(),\n    ...     expires_at=(now + timedelta(hours=1)).isoformat(),\n    ... )\n    >>> mgr = DelegationManager(parent_act=parent_act, parent_did=\"did:oas:l1fe:agent:parent\")\n    >>> mgr.delegation_count\n    0"
            },
            {
              "name": "DelegationManager.__init__",
              "line": 215,
              "signature": "def __init__(self, parent_act: ArsenalACT, parent_did: str) -> None",
              "documentation": ""
            },
            {
              "name": "DelegationManager.parent_act",
              "line": 221,
              "signature": "def parent_act(self) -> ArsenalACT",
              "documentation": "Return the parent's ACT.\n\nReturns:\n    The parent ArsenalACT."
            },
            {
              "name": "DelegationManager.parent_did",
              "line": 230,
              "signature": "def parent_did(self) -> str",
              "documentation": "Return the parent's DID.\n\nReturns:\n    The parent DID string."
            },
            {
              "name": "DelegationManager.delegation_count",
              "line": 239,
              "signature": "def delegation_count(self) -> int",
              "documentation": "Return the number of delegations performed.\n\nReturns:\n    The number of child ACTs created."
            },
            {
              "name": "DelegationManager.delegations",
              "line": 248,
              "signature": "def delegations(self) -> list[ArsenalACT]",
              "documentation": "Return the list of child ACTs created by delegation.\n\nReturns:\n    List of child ArsenalACTs."
            },
            {
              "name": "DelegationManager.delegate",
              "line": 256,
              "signature": "def delegate(self, child_did: str, requested_scopes: ScopeSet, *, min_ttl_reduction: int=DEFAULT_MIN_TTL_REDUCTION) -> ArsenalACT",
              "documentation": "Delegate capabilities to a child agent.\n\nArgs:\n    child_did: The child agent's OAS DID.\n    requested_scopes: The scopes to grant the child.\n        Must be a subset of the parent's scopes.\n    min_ttl_reduction: Minimum TTL reduction in seconds.\n\nReturns:\n    A new ArsenalACT for the child agent.\n\nRaises:\n    TokenExpiredError: If the parent ACT has expired.\n    InvalidTokenError: If the parent ACT is structurally invalid.\n    CapabilityEscalationError: If child requests scope not in parent.\n    DelegationDeniedError: If delegation constraints prevent delegation.\n\nExample:\n    >>> from forge.auth.capability import ArsenalACT, ScopeSet\n    >>> from datetime import datetime, timezone, timedelta\n    >>> now = datetime.now(tz=timezone.utc)\n    >>> parent_act = ArsenalACT(\n    ...     token_id=\"tok-parent\", agent_did=\"did:oas:l1fe:agent:parent\",\n    ...     issuer=\"test\", audience=\"test\",\n    ...     scopes=ScopeSet.from_strings([\"forge:tool.search:execute\"]),\n    ...     issued_at=now.isoformat(), not_before=now.isoformat(),\n    ...     expires_at=(now + timedelta(hours=1)).isoformat(),\n    ... )\n    >>> mgr = DelegationManager(parent_act=parent_act, parent_did=\"did:oas:l1fe:agent:parent\")\n    >>> child_act = mgr.delegate(\n    ...     \"did:oas:l1fe:agent:child\",\n    ...     ScopeSet.from_strings([\"forge:tool.search:execute\"]),\n    ... )\n    >>> child_act.agent_did\n    'did:oas:l1fe:agent:child'"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/auth/error.py",
          "sha256": "e2b8cd3053e221c4aff2129b3b9e67071f33370f7695f57705ee024999791ea8",
          "artifactSha256": "95332ddd2382fb601456454e50f10cadefba5a03a82679838911e2d97bc2b665",
          "url": "/reference/source/forge-py/src/forge/auth/error.py.txt",
          "declarations": [
            {
              "name": "ForgeAuthError",
              "line": 16,
              "signature": "class ForgeAuthError(ForgeError)",
              "documentation": "Base exception for all forge-auth operations.\n\nEach subclass carries enough context for operators to diagnose the issue\nwithout access to internal state. Error messages never include private keys\nor raw token bytes."
            },
            {
              "name": "ForgeAuthError.error_code",
              "line": 24,
              "signature": "def error_code(self) -> str",
              "documentation": "Return a short error code string suitable for telemetry and logging.\n\nReturns:\n    A string identifying the error category."
            },
            {
              "name": "TokenExpiredError",
              "line": 33,
              "signature": "class TokenExpiredError(ForgeAuthError)",
              "documentation": "The Arsenal ACT has expired and is no longer valid.\n\nAgents must obtain a fresh token before retrying the operation.\n\nANVIL Spec section 8.7.1.\n\nArgs:\n    token_id: The unique identifier of the expired token.\n    agent_did: The DID of the agent that presented the token.\n    expired_at: The timestamp at which the token expired (ISO 8601).\n\nExample:\n    >>> err = TokenExpiredError(\"tok-123\", \"did:oas:l1fe:agent:bot\", \"2026-01-15T00:00:00Z\")\n    >>> \"tok-123\" in str(err)\n    True\n    >>> err.is_expired()\n    True"
            },
            {
              "name": "TokenExpiredError.__init__",
              "line": 53,
              "signature": "def __init__(self, token_id: str, agent_did: str, expired_at: str) -> None",
              "documentation": ""
            },
            {
              "name": "TokenExpiredError.is_expired",
              "line": 62,
              "signature": "def is_expired(self) -> bool",
              "documentation": "Return True. This is a token expiration error."
            },
            {
              "name": "TokenExpiredError.error_code",
              "line": 66,
              "signature": "def error_code(self) -> str",
              "documentation": "Return the error code for token expiration."
            },
            {
              "name": "InsufficientScopeError",
              "line": 71,
              "signature": "class InsufficientScopeError(ForgeAuthError)",
              "documentation": "The agent's ACT does not grant the required scope for the operation.\n\nThe agent must obtain a token with the missing capability, or the\noperation must be re-scoped to match the agent's granted permissions.\n\nANVIL Spec section 8.7.2.\n\nArgs:\n    agent_did: The DID of the agent whose token was checked.\n    required_scope: The scope string that was required but not granted.\n    available_scopes: The scopes that the agent's ACT actually grants.\n\nExample:\n    >>> err = InsufficientScopeError(\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     \"forge:tool.search:execute\",\n    ...     [\"forge:tool.clock:execute\"],\n    ... )\n    >>> \"search\" in str(err)\n    True"
            },
            {
              "name": "InsufficientScopeError.__init__",
              "line": 94,
              "signature": "def __init__(self, agent_did: str, required_scope: str, available_scopes: list[str]) -> None",
              "documentation": ""
            },
            {
              "name": "InsufficientScopeError.error_code",
              "line": 108,
              "signature": "def error_code(self) -> str",
              "documentation": "Return the error code for insufficient scope."
            },
            {
              "name": "CapabilityEscalationError",
              "line": 113,
              "signature": "class CapabilityEscalationError(ForgeAuthError)",
              "documentation": "A sub-agent delegation attempted to grant capabilities exceeding the parent's scope.\n\nChild agent capabilities must be a strict subset of the parent's. This is\na security invariant that prevents privilege escalation via delegation.\n\nANVIL Spec section 11.3.1.\n\nArgs:\n    parent_did: The DID of the parent agent.\n    child_did: The DID of the child agent.\n    requested: The scope string that was requested but exceeds the parent's grant.\n    available: The scopes available in the parent's ACT.\n\nExample:\n    >>> err = CapabilityEscalationError(\n    ...     \"did:oas:l1fe:agent:parent\",\n    ...     \"did:oas:l1fe:agent:child\",\n    ...     \"forge:tool.admin:execute\",\n    ...     [\"forge:tool.read:execute\"],\n    ... )\n    >>> \"escalation\" in str(err)\n    True"
            },
            {
              "name": "CapabilityEscalationError.__init__",
              "line": 138,
              "signature": "def __init__(self, parent_did: str, child_did: str, requested: str, available: list[str]) -> None",
              "documentation": ""
            },
            {
              "name": "CapabilityEscalationError.error_code",
              "line": 154,
              "signature": "def error_code(self) -> str",
              "documentation": "Return the error code for capability escalation."
            },
            {
              "name": "DelegationDeniedError",
              "line": 159,
              "signature": "class DelegationDeniedError(ForgeAuthError)",
              "documentation": "Delegation was denied due to constraint violations in the parent's ACT.\n\nThis covers cases where the parent's token does not permit delegation at all,\nor the target agent is not in the allowed delegates list, or the delegation\ndepth has been exceeded.\n\nANVIL Spec section 11.3.2.\n\nArgs:\n    parent_did: The DID of the parent agent attempting to delegate.\n    child_did: The DID of the intended child agent.\n    reason: Human-readable reason for the denial.\n\nExample:\n    >>> err = DelegationDeniedError(\n    ...     \"did:oas:l1fe:agent:root\",\n    ...     \"did:oas:l1fe:agent:sub\",\n    ...     \"delegation not allowed\",\n    ... )\n    >>> \"root\" in str(err) and \"sub\" in str(err)\n    True"
            },
            {
              "name": "DelegationDeniedError.__init__",
              "line": 183,
              "signature": "def __init__(self, parent_did: str, child_did: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "DelegationDeniedError.error_code",
              "line": 192,
              "signature": "def error_code(self) -> str",
              "documentation": "Return the error code for delegation denial."
            },
            {
              "name": "InvalidTokenError",
              "line": 197,
              "signature": "class InvalidTokenError(ForgeAuthError)",
              "documentation": "The ACT is structurally invalid or malformed.\n\nThis indicates the token could not be validated even before checking\nscopes or time validity. The token may be corrupted, incorrectly\nconstructed, or tampered with.\n\nANVIL Spec section 8.7.3.\n\nArgs:\n    reason: Human-readable explanation of why the token is invalid.\n\nExample:\n    >>> err = InvalidTokenError(\"missing required 'scope' field\")\n    >>> \"scope\" in str(err)\n    True"
            },
            {
              "name": "InvalidTokenError.__init__",
              "line": 215,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "InvalidTokenError.error_code",
              "line": 219,
              "signature": "def error_code(self) -> str",
              "documentation": "Return the error code for invalid token."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/auth/tool_auth.py",
          "sha256": "b30acd4be7fb7f350dc0a546c20da34756956b084242088e684b142d6c4d335b",
          "artifactSha256": "e808e6a0b25e0b63d54f9a1ebfb0c7bbbb5716a653ed6976d8a16b4c96d2b587",
          "url": "/reference/source/forge-py/src/forge/auth/tool_auth.py.txt",
          "declarations": [
            {
              "name": "ToolAuthorizationDecision",
              "line": 31,
              "signature": "class ToolAuthorizationDecision(Enum)",
              "documentation": "The result of a tool authorization check.\n\nANVIL Spec section 8.7.\n\nThe three variants correspond to the three possible outcomes:\n\n- ``ALLOWED`` -- tool invocation proceeds.\n- ``DENIED`` -- tool invocation is blocked.\n- ``LEGACY_MODE`` -- no ACT was provided; tool executes without authorization.\n\nExample:\n    >>> ToolAuthorizationDecision.ALLOWED.is_allowed()\n    True\n    >>> ToolAuthorizationDecision.DENIED.is_allowed()\n    False\n    >>> ToolAuthorizationDecision.LEGACY_MODE.is_allowed()\n    True"
            },
            {
              "name": "ToolAuthorizationDecision.is_allowed",
              "line": 55,
              "signature": "def is_allowed(self) -> bool",
              "documentation": "Return True if the decision allows the tool invocation.\n\nBoth ``ALLOWED`` and ``LEGACY_MODE`` permit execution.\n\nReturns:\n    True if the tool may execute."
            },
            {
              "name": "ToolAuthorizationDecision.is_denied",
              "line": 65,
              "signature": "def is_denied(self) -> bool",
              "documentation": "Return True if the decision denies the tool invocation.\n\nReturns:\n    True if the tool is denied."
            },
            {
              "name": "ToolAuthorizationDecision.is_legacy_mode",
              "line": 73,
              "signature": "def is_legacy_mode(self) -> bool",
              "documentation": "Return True if operating in legacy mode (no ACT).\n\nReturns:\n    True if legacy mode."
            },
            {
              "name": "ToolAuthorizationRequest",
              "line": 83,
              "signature": "class ToolAuthorizationRequest()",
              "documentation": "A request to authorize a tool invocation.\n\nContains the agent's identity, the tool being invoked, its tier, and\nthe optional Arsenal ACT. When ``act`` is None, the system operates\nin legacy mode (no authorization enforcement).\n\nANVIL Spec section 8.7.\n\nArgs:\n    agent_did: The OAS DID of the agent requesting tool invocation.\n    tool_name: The name of the tool being invoked.\n    tool_tier: The tier classification of the tool.\n    act: The agent's Arsenal ACT, if available.\n\nExample:\n    >>> req = ToolAuthorizationRequest(\n    ...     agent_did=\"did:oas:l1fe:agent:bot\",\n    ...     tool_name=\"clock\",\n    ...     tool_tier=ToolTier.PLATFORM,\n    ...     act=None,\n    ... )\n    >>> req.tool_name\n    'clock'"
            },
            {
              "name": "ToolAuthorizationResult",
              "line": 116,
              "signature": "class ToolAuthorizationResult()",
              "documentation": "The full result of a tool authorization check.\n\nContains the decision and, if denied, a reason string.\n\nArgs:\n    decision: The authorization decision.\n    reason: The reason for denial (only set when decision is DENIED).\n\nExample:\n    >>> result = ToolAuthorizationResult(\n    ...     decision=ToolAuthorizationDecision.ALLOWED,\n    ...     reason=None,\n    ... )\n    >>> result.decision.is_allowed()\n    True"
            },
            {
              "name": "build_tool_scope",
              "line": 138,
              "signature": "def build_tool_scope(tool_name: str) -> str",
              "documentation": "Build the required scope string for a tool invocation.\n\nThe scope format is ``\"forge:tool.<tool_name>:execute\"``.\n\nArgs:\n    tool_name: The name of the tool.\n\nReturns:\n    The scope string.\n\nExample:\n    >>> build_tool_scope(\"web_search\")\n    'forge:tool.web_search:execute'"
            },
            {
              "name": "authorize_tool_invocation",
              "line": 156,
              "signature": "def authorize_tool_invocation(request: ToolAuthorizationRequest) -> ToolAuthorizationResult",
              "documentation": "Authorize a tool invocation per ANVIL Spec section 8.7.\n\nThis is the primary authorization gate for all tool invocations in the\nForge runtime. It enforces the three-tier model:\n\n- **Tier 1 (Platform)**: Always returns ``ALLOWED``. Platform tools (clock,\n  crypto, logging, random) are always available to agents.\n- **Tier 2 (Host)**: Requires an Arsenal ACT with a scope that implies\n  ``\"forge:tool.<tool_name>:execute\"``. Returns ``DENIED`` if the scope is\n  missing, or ``LEGACY_MODE`` if no ACT is provided.\n- **Tier 3 (Embedded)**: Always returns ``ALLOWED``. Embedded tools run\n  inside the WASM sandbox and are scoped to the module.\n\nArgs:\n    request: The authorization request containing agent DID, tool name,\n        tier, and optional ACT.\n\nReturns:\n    A ToolAuthorizationResult indicating whether the invocation is allowed,\n    denied, or operating in legacy mode.\n\nRaises:\n    TokenExpiredError: If the ACT has expired.\n    InvalidTokenError: If the ACT is structurally invalid.\n\nExample:\n    >>> from forge.core.tool import ToolTier\n    >>> req = ToolAuthorizationRequest(\n    ...     agent_did=\"did:oas:l1fe:agent:bot\",\n    ...     tool_name=\"clock\",\n    ...     tool_tier=ToolTier.PLATFORM,\n    ...     act=None,\n    ... )\n    >>> result = authorize_tool_invocation(req)\n    >>> result.decision.is_allowed()\n    True"
            },
            {
              "name": "ToolAuthorizer",
              "line": 232,
              "signature": "class ToolAuthorizer()",
              "documentation": "Stateful tool authorization manager.\n\nWraps an optional ``ArsenalACT`` and provides a convenient ``authorize``\nmethod for checking tool invocations. Used by the agent runtime to\ngate tool calls.\n\nANVIL Spec section 8.7 -- Tool Authorization Gate.\n\nArgs:\n    act: The agent's Arsenal ACT, if available.\n    agent_did: The agent's DID for error reporting.\n\nExample:\n    >>> authorizer = ToolAuthorizer(act=None, agent_did=\"did:oas:test:agent:bot\")\n    >>> result = authorizer.authorize(\"clock\", ToolTier.PLATFORM)\n    >>> result.decision.is_allowed()\n    True"
            },
            {
              "name": "ToolAuthorizer.__init__",
              "line": 252,
              "signature": "def __init__(self, act: ArsenalACT | None, agent_did: str) -> None",
              "documentation": ""
            },
            {
              "name": "ToolAuthorizer.act",
              "line": 257,
              "signature": "def act(self) -> ArsenalACT | None",
              "documentation": "Return the current ACT, if any.\n\nReturns:\n    The ArsenalACT or None."
            },
            {
              "name": "ToolAuthorizer.agent_did",
              "line": 266,
              "signature": "def agent_did(self) -> str",
              "documentation": "Return the agent's DID.\n\nReturns:\n    The DID string."
            },
            {
              "name": "ToolAuthorizer.is_legacy_mode",
              "line": 275,
              "signature": "def is_legacy_mode(self) -> bool",
              "documentation": "Return True if no ACT is loaded (legacy mode).\n\nReturns:\n    True if operating without ACT authorization."
            },
            {
              "name": "ToolAuthorizer.authorize",
              "line": 283,
              "signature": "def authorize(self, tool_name: str, tool_tier: ToolTier) -> ToolAuthorizationResult",
              "documentation": "Authorize a tool invocation.\n\nArgs:\n    tool_name: The name of the tool being invoked.\n    tool_tier: The tier classification of the tool.\n\nReturns:\n    A ToolAuthorizationResult.\n\nRaises:\n    TokenExpiredError: If the ACT has expired.\n    InvalidTokenError: If the ACT is structurally invalid.\n\nExample:\n    >>> authorizer = ToolAuthorizer(act=None, agent_did=\"d\")\n    >>> result = authorizer.authorize(\"clock\", ToolTier.PLATFORM)\n    >>> result.decision.is_allowed()\n    True"
            },
            {
              "name": "ToolAuthorizer.update_act",
              "line": 311,
              "signature": "def update_act(self, act: ArsenalACT) -> None",
              "documentation": "Update the stored ACT (e.g., after token refresh).\n\nArgs:\n    act: The new Arsenal ACT."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.collab",
      "language": "python",
      "version": "0.1.0",
      "description": "Python collab package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/collab",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/collab/__init__.py",
          "sha256": "d376d88c49ee97ef6531a69641820aeb63dda9b599648d4c12875ce9296cbfb9",
          "artifactSha256": "9a1a4e8ae42c487f461f0aa3e5c9e57dd55e059ab4f5d67cb877c2ce57368bc2",
          "url": "/reference/source/forge-py/src/forge/collab/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/collab/capability.py",
          "sha256": "ef6044de509764a625f0ef70211dbc5d88c9f226493789361473fa795bff656c",
          "artifactSha256": "c2cfb2f9ba1fdc966af72e9ed0d646a1d1b750613e92cbf9093d29355dbefa2e",
          "url": "/reference/source/forge-py/src/forge/collab/capability.py.txt",
          "declarations": [
            {
              "name": "CapabilityAdvertiser",
              "line": 19,
              "signature": "class CapabilityAdvertiser(Protocol)",
              "documentation": "Capability advertiser contract.\n\nAgents implement this protocol to advertise their capabilities to the\ncollaboration framework. The coordinator uses these advertisements to\nmatch tasks to suitable agents.\n\nANVIL Spec section 11.6 -- Agent Capability Profile."
            },
            {
              "name": "CapabilityAdvertiser.advertise_capabilities",
              "line": 29,
              "signature": "def advertise_capabilities(self) -> AgentCapabilityProfile",
              "documentation": "Return the agent's full capability profile.\n\nReturns:\n    An AgentCapabilityProfile describing the agent's capabilities."
            },
            {
              "name": "CapabilityAdvertiser.can_handle",
              "line": 37,
              "signature": "def can_handle(self, task_type: str) -> bool",
              "documentation": "Return True if this agent can handle the given task type.\n\nArgs:\n    task_type: The task type to check (e.g., \"code-review\").\n\nReturns:\n    True if the agent supports this task type."
            },
            {
              "name": "CapabilityAdvertiser.current_availability",
              "line": 48,
              "signature": "def current_availability(self) -> float",
              "documentation": "Return the agent's current availability (0.0 to 1.0).\n\nThis is the inverse of current_load: availability = 1.0 - load.\n\nReturns:\n    A value between 0.0 and 1.0 representing available capacity."
            },
            {
              "name": "match_task_to_agents",
              "line": 60,
              "signature": "def match_task_to_agents(task: DelegatedTask, agents: list[AgentCapabilityProfile]) -> list[str]",
              "documentation": "Match a task to available agents based on capability profiles.\n\nThe matching algorithm:\n    1. Filters agents that support the task's task_type.\n    2. Filters agents that have all required tools (from\n       constraints.allowed_tools, if non-empty).\n    3. Filters agents with availability > 0.0 (not fully loaded).\n    4. Sorts by availability descending (most available first).\n\nANVIL Spec section 11.6 -- Task-to-Agent Matching.\n\nArgs:\n    task: The task to match.\n    agents: The available agent capability profiles.\n\nReturns:\n    A list of agent DIDs sorted by suitability (most suitable first).\n    Returns an empty list if no agents match.\n\nExample:\n    >>> from forge.collab.types import (\n    ...     AgentCapabilityProfile, CollaborationRole,\n    ...     TaskConstraints, TaskPriority,\n    ... )\n    >>> task = DelegatedTask(\n    ...     task_id=\"task-001\",\n    ...     task_type=\"summarize\",\n    ...     description=\"Summarize document\",\n    ...     input={},\n    ...     constraints=TaskConstraints(),\n    ...     delegator=\"did:oas:agent:coord\",\n    ...     priority=TaskPriority.NORMAL,\n    ... )\n    >>> agents = [\n    ...     AgentCapabilityProfile(\n    ...         agent_did=\"did:oas:agent:w1\",\n    ...         supported_roles=[CollaborationRole.WORKER],\n    ...         supported_task_types=[\"summarize\"],\n    ...         available_tools=[],\n    ...         current_load=0.3,\n    ...         max_concurrent_tasks=5,\n    ...     ),\n    ... ]\n    >>> match_task_to_agents(task, agents)\n    ['did:oas:agent:w1']"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/collab/context.py",
          "sha256": "647005f337ebc632f667479eac6ecc92a81780331283377596ce68aadff19b55",
          "artifactSha256": "57f36d68e7bf70612a6d2352140420462feced8a46d0ef7fa80aea192b4cc207",
          "url": "/reference/source/forge-py/src/forge/collab/context.py.txt",
          "declarations": [
            {
              "name": "SharedContextContract",
              "line": 19,
              "signature": "class SharedContextContract(Protocol)",
              "documentation": "Shared context contract for collaboration sessions.\n\nImplementations provide read/write access to a session-scoped key-value\nstore. Each entry carries versioning, authorship, and visibility metadata.\n\nANVIL Spec section 11.4 -- Shared Context."
            },
            {
              "name": "SharedContextContract.context_read",
              "line": 29,
              "signature": "async def context_read(self, session_id: str, key: str) -> ContextEntry",
              "documentation": "Read a context entry by key from the specified session.\n\nArgs:\n    session_id: The session whose context to read from.\n    key: The key of the entry to read.\n\nReturns:\n    The ContextEntry for the given key.\n\nRaises:\n    ContextKeyNotFoundError: If the key does not exist.\n    SessionNotFoundError: If the session does not exist."
            },
            {
              "name": "SharedContextContract.context_write",
              "line": 50,
              "signature": "async def context_write(self, session_id: str, entry: ContextEntry) -> None",
              "documentation": "Write a context entry to the specified session.\n\nIf the key already exists, the entry is updated with the new value\nand its version is incremented.\n\nArgs:\n    session_id: The session whose context to write to.\n    entry: The context entry to write.\n\nRaises:\n    SessionNotFoundError: If the session does not exist."
            },
            {
              "name": "SharedContextContract.context_keys",
              "line": 70,
              "signature": "async def context_keys(self, session_id: str) -> list[str]",
              "documentation": "List all keys in the specified session's context.\n\nArgs:\n    session_id: The session whose context keys to list.\n\nReturns:\n    A list of key strings.\n\nRaises:\n    SessionNotFoundError: If the session does not exist."
            },
            {
              "name": "InMemorySharedContext",
              "line": 88,
              "signature": "class InMemorySharedContext()",
              "documentation": "In-memory implementation of the shared context store.\n\nStores context entries in a nested dict keyed by session ID and\nthen by entry key. Suitable for testing and single-process deployments.\n\nExample:\n    >>> ctx = InMemorySharedContext()\n    >>> ctx.create_session(\"sess-001\")\n    >>> from forge.collab.types import ContextEntry, ContextVisibility\n    >>> entry = ContextEntry(\n    ...     key=\"result\",\n    ...     value=42,\n    ...     value_type=\"number\",\n    ...     author=\"did:oas:agent:writer\",\n    ...     version=1,\n    ...     timestamp=\"2026-02-19T10:00:00Z\",\n    ...     visibility=ContextVisibility.SESSION,\n    ... )\n    >>> ctx.write_entry(\"sess-001\", entry)\n    >>> ctx.read_entry(\"sess-001\", \"result\").key\n    'result'"
            },
            {
              "name": "InMemorySharedContext.__init__",
              "line": 112,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "InMemorySharedContext.create_session",
              "line": 115,
              "signature": "def create_session(self, session_id: str) -> None",
              "documentation": "Register a session in the context store.\n\nThis must be called before reading or writing context for a session.\nCalling it for an already-registered session is a no-op.\n\nArgs:\n    session_id: The ID of the session to register."
            },
            {
              "name": "InMemorySharedContext.session_count",
              "line": 128,
              "signature": "def session_count(self) -> int",
              "documentation": "Return the number of sessions in the context store."
            },
            {
              "name": "InMemorySharedContext.write_entry",
              "line": 132,
              "signature": "def write_entry(self, session_id: str, entry: ContextEntry) -> None",
              "documentation": "Write a context entry directly.\n\nArgs:\n    session_id: The session to write to.\n    entry: The context entry to write.\n\nRaises:\n    SessionNotFoundError: If the session does not exist."
            },
            {
              "name": "InMemorySharedContext.read_entry",
              "line": 150,
              "signature": "def read_entry(self, session_id: str, key: str) -> ContextEntry",
              "documentation": "Read a context entry directly.\n\nArgs:\n    session_id: The session to read from.\n    key: The key to read.\n\nReturns:\n    The ContextEntry for the given key.\n\nRaises:\n    SessionNotFoundError: If the session does not exist.\n    ContextKeyNotFoundError: If the key does not exist."
            },
            {
              "name": "InMemorySharedContext.list_keys",
              "line": 175,
              "signature": "def list_keys(self, session_id: str) -> list[str]",
              "documentation": "List all keys for a session.\n\nArgs:\n    session_id: The session to list keys for.\n\nReturns:\n    A sorted list of key strings.\n\nRaises:\n    SessionNotFoundError: If the session does not exist."
            },
            {
              "name": "InMemorySharedContext.context_read",
              "line": 196,
              "signature": "async def context_read(self, session_id: str, key: str) -> ContextEntry",
              "documentation": "Read a context entry (async interface).\n\nArgs:\n    session_id: The session to read from.\n    key: The key to read.\n\nReturns:\n    The ContextEntry for the given key.\n\nRaises:\n    SessionNotFoundError: If the session does not exist.\n    ContextKeyNotFoundError: If the key does not exist."
            },
            {
              "name": "InMemorySharedContext.context_write",
              "line": 216,
              "signature": "async def context_write(self, session_id: str, entry: ContextEntry) -> None",
              "documentation": "Write a context entry (async interface).\n\nArgs:\n    session_id: The session to write to.\n    entry: The context entry to write.\n\nRaises:\n    SessionNotFoundError: If the session does not exist."
            },
            {
              "name": "InMemorySharedContext.context_keys",
              "line": 232,
              "signature": "async def context_keys(self, session_id: str) -> list[str]",
              "documentation": "List all keys (async interface).\n\nArgs:\n    session_id: The session to list keys for.\n\nReturns:\n    A sorted list of key strings.\n\nRaises:\n    SessionNotFoundError: If the session does not exist."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/collab/delegation.py",
          "sha256": "6ebeef1e3cf7ab265e5cac12eb0031b82affa0e9b208cbbb0ec6209103df4de4",
          "artifactSha256": "1ffdaff9a74036333d857d49ddbfe73a6606ffc104d3a1382b07ce2d83e6852e",
          "url": "/reference/source/forge-py/src/forge/collab/delegation.py.txt",
          "declarations": [
            {
              "name": "create_delegated_task",
              "line": 24,
              "signature": "def create_delegated_task(delegator_did: str, task_type: str, description: str, input_data: Any, priority: TaskPriority=TaskPriority.NORMAL, constraints: TaskConstraints | None=None) -> DelegatedTask",
              "documentation": "Create a delegated task with a unique ID and timestamp.\n\nThe task ID is generated as a UUID v4 prefixed with ``\"task-\"``.\n\nANVIL Spec section 11.3 -- Delegated Task.\n\nArgs:\n    delegator_did: The OAS DID of the agent delegating the task.\n    task_type: The type of task (e.g., \"code-review\", \"summarize\").\n    description: A human-readable description of the task.\n    input_data: The input data for the task.\n    priority: The task priority level. Defaults to NORMAL.\n    constraints: Execution constraints. Defaults to no limits.\n\nReturns:\n    A new DelegatedTask with a unique ID and current timestamp.\n\nExample:\n    >>> task = create_delegated_task(\n    ...     \"did:oas:agent:coordinator-1\",\n    ...     \"summarize\",\n    ...     \"Summarize the quarterly report\",\n    ...     {\"document_id\": \"doc-123\"},\n    ... )\n    >>> task.task_id.startswith(\"task-\")\n    True\n    >>> task.task_type\n    'summarize'"
            },
            {
              "name": "validate_task_constraints",
              "line": 79,
              "signature": "def validate_task_constraints(constraints: TaskConstraints) -> None",
              "documentation": "Validate that a task's constraints are within acceptable bounds.\n\nChecks:\n    - max_steps, if set, must be greater than 0.\n    - max_tokens, if set, must be greater than 0.\n    - max_duration_seconds, if set, must be greater than 0.\n    - required_confidence, if set, must be between 0.0 and 1.0 inclusive.\n\nANVIL Spec section 11.3 -- Task Constraints.\n\nArgs:\n    constraints: The task constraints to validate.\n\nRaises:\n    DelegationFailedError: If any constraint is invalid.\n\nExample:\n    >>> validate_task_constraints(TaskConstraints())  # OK, defaults\n    >>> validate_task_constraints(TaskConstraints(max_steps=0))\n    Traceback (most recent call last):\n        ...\n    forge.collab.errors.DelegationFailedError: ..."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/collab/errors.py",
          "sha256": "2057cc964f97ad10c7ccaefe126ed07ed0c62d9bff650e4081aaea2534c94df8",
          "artifactSha256": "0248dd09c32504f7a085ea666cc9e7208dae1f7b0f187cfc69d2b8ce7b44144d",
          "url": "/reference/source/forge-py/src/forge/collab/errors.py.txt",
          "declarations": [
            {
              "name": "CollabError",
              "line": 14,
              "signature": "class CollabError(ForgeError)",
              "documentation": "Base error for collaboration operations."
            },
            {
              "name": "SessionNotFoundError",
              "line": 18,
              "signature": "class SessionNotFoundError(CollabError)",
              "documentation": "The specified collaboration session does not exist.\n\nANVIL Spec section 11.2 -- Collaboration Session.\n\nArgs:\n    session_id: The session ID that was not found."
            },
            {
              "name": "SessionNotFoundError.__init__",
              "line": 27,
              "signature": "def __init__(self, session_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "SessionAlreadyActiveError",
              "line": 35,
              "signature": "class SessionAlreadyActiveError(CollabError)",
              "documentation": "A session with the given ID is already active.\n\nANVIL Spec section 11.2 -- Collaboration Session.\n\nArgs:\n    session_id: The session ID that is already active."
            },
            {
              "name": "SessionAlreadyActiveError.__init__",
              "line": 44,
              "signature": "def __init__(self, session_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "InvalidSessionTransitionError",
              "line": 52,
              "signature": "class InvalidSessionTransitionError(CollabError)",
              "documentation": "An invalid session state transition was attempted.\n\nANVIL Spec section 11.2 -- Session State Machine.\n\nArgs:\n    from_state: The current session state.\n    to_state: The target state that was attempted."
            },
            {
              "name": "InvalidSessionTransitionError.__init__",
              "line": 62,
              "signature": "def __init__(self, from_state: str, to_state: str) -> None",
              "documentation": ""
            },
            {
              "name": "NotAParticipantError",
              "line": 71,
              "signature": "class NotAParticipantError(CollabError)",
              "documentation": "The agent is not a participant in the specified session.\n\nANVIL Spec section 11.2 -- Session Participation.\n\nArgs:\n    agent_did: The agent DID that is not a participant.\n    session_id: The session ID."
            },
            {
              "name": "NotAParticipantError.__init__",
              "line": 81,
              "signature": "def __init__(self, agent_did: str, session_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "TaskNotFoundError",
              "line": 90,
              "signature": "class TaskNotFoundError(CollabError)",
              "documentation": "The specified delegated task does not exist.\n\nANVIL Spec section 11.3 -- Delegated Task.\n\nArgs:\n    task_id: The task ID that was not found."
            },
            {
              "name": "TaskNotFoundError.__init__",
              "line": 99,
              "signature": "def __init__(self, task_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "TaskAlreadyAssignedError",
              "line": 107,
              "signature": "class TaskAlreadyAssignedError(CollabError)",
              "documentation": "The task is already assigned to another agent.\n\nANVIL Spec section 11.3 -- Delegated Task.\n\nArgs:\n    task_id: The task ID.\n    assignee: The DID of the agent currently assigned."
            },
            {
              "name": "TaskAlreadyAssignedError.__init__",
              "line": 117,
              "signature": "def __init__(self, task_id: str, assignee: str) -> None",
              "documentation": ""
            },
            {
              "name": "CapabilityMismatchError",
              "line": 126,
              "signature": "class CapabilityMismatchError(CollabError)",
              "documentation": "Agent capabilities do not match the task requirements.\n\nANVIL Spec section 11.6 -- Agent Capability Profile.\n\nArgs:\n    task_type: The task type.\n    agent_did: The agent DID.\n    reason: A human-readable explanation."
            },
            {
              "name": "CapabilityMismatchError.__init__",
              "line": 137,
              "signature": "def __init__(self, task_type: str, agent_did: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ContextKeyNotFoundError",
              "line": 147,
              "signature": "class ContextKeyNotFoundError(CollabError)",
              "documentation": "The specified key was not found in the shared context.\n\nANVIL Spec section 11.4 -- Shared Context.\n\nArgs:\n    key: The key that was not found."
            },
            {
              "name": "ContextKeyNotFoundError.__init__",
              "line": 156,
              "signature": "def __init__(self, key: str) -> None",
              "documentation": ""
            },
            {
              "name": "ContextPermissionDeniedError",
              "line": 163,
              "signature": "class ContextPermissionDeniedError(CollabError)",
              "documentation": "The agent does not have permission to access the context key.\n\nANVIL Spec section 11.4 -- Shared Context.\n\nArgs:\n    key: The context key.\n    agent_did: The agent DID."
            },
            {
              "name": "ContextPermissionDeniedError.__init__",
              "line": 173,
              "signature": "def __init__(self, key: str, agent_did: str) -> None",
              "documentation": ""
            },
            {
              "name": "InterruptRejectedError",
              "line": 182,
              "signature": "class InterruptRejectedError(CollabError)",
              "documentation": "The interrupt was rejected by the target agent.\n\nANVIL Spec section 11.5 -- Interrupts.\n\nArgs:\n    interrupt_id: The interrupt ID.\n    reason: A human-readable explanation."
            },
            {
              "name": "InterruptRejectedError.__init__",
              "line": 192,
              "signature": "def __init__(self, interrupt_id: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "DelegationFailedError",
              "line": 201,
              "signature": "class DelegationFailedError(CollabError)",
              "documentation": "A task delegation operation failed.\n\nANVIL Spec section 11.3 -- Delegated Task.\n\nArgs:\n    reason: A human-readable explanation."
            },
            {
              "name": "DelegationFailedError.__init__",
              "line": 210,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "RoleViolationError",
              "line": 217,
              "signature": "class RoleViolationError(CollabError)",
              "documentation": "The agent attempted an action that violates its assigned role.\n\nANVIL Spec section 11.1 -- Collaboration Roles.\n\nArgs:\n    agent_did: The agent DID.\n    role: The role the agent holds.\n    action: The action the agent attempted."
            },
            {
              "name": "RoleViolationError.__init__",
              "line": 228,
              "signature": "def __init__(self, agent_did: str, role: str, action: str) -> None",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-py/src/forge/collab/interrupt.py",
          "sha256": "d4d11524202a2ef9e53e056e1e0a0e074f7b99f3d9433662a16efc7cb8764e6f",
          "artifactSha256": "7684cf917abeaba1836a8c57b1db3a06ac1218fc499fe2ae44646ea6aa67c25f",
          "url": "/reference/source/forge-py/src/forge/collab/interrupt.py.txt",
          "declarations": [
            {
              "name": "InterruptHandler",
              "line": 26,
              "signature": "class InterruptHandler(Protocol)",
              "documentation": "Interrupt handler contract.\n\nAgents implement this protocol to handle incoming interrupts. The handler\ndecides whether to acknowledge the interrupt and optionally reports\nits interrupted state for potential resumption.\n\nANVIL Spec section 11.5 -- Interrupts."
            },
            {
              "name": "InterruptHandler.on_interrupt",
              "line": 37,
              "signature": "async def on_interrupt(self, interrupt: Interrupt) -> InterruptResponse",
              "documentation": "Handle an incoming interrupt.\n\nThe handler inspects the interrupt type and priority, then decides\nwhether to acknowledge it.\n\nArgs:\n    interrupt: The interrupt to handle.\n\nReturns:\n    An InterruptResponse indicating acknowledgment and optional state.\n\nRaises:\n    InterruptRejectedError: If the interrupt cannot be handled."
            },
            {
              "name": "InterruptHandler.on_preempt",
              "line": 58,
              "signature": "async def on_preempt(self, interrupt: Interrupt) -> InterruptedState",
              "documentation": "Called when the agent must be preempted by a higher-priority task.\n\nThe agent should save its current state and prepare for the current\ntask to be suspended or aborted.\n\nArgs:\n    interrupt: The preemption interrupt.\n\nReturns:\n    An InterruptedState snapshot of the agent's state.\n\nRaises:\n    InterruptRejectedError: If preemption is not possible."
            },
            {
              "name": "create_interrupt",
              "line": 80,
              "signature": "def create_interrupt(interrupt_type: InterruptType, source_did: str, priority: TaskPriority, payload: Any) -> Interrupt",
              "documentation": "Create an interrupt with a unique ID and current timestamp.\n\nThe interrupt ID is generated as a UUID v4 prefixed with ``\"int-\"``.\n\nANVIL Spec section 11.5 -- Interrupts.\n\nArgs:\n    interrupt_type: The type of interrupt.\n    source_did: The OAS DID of the agent sending the interrupt.\n    priority: The priority of the interrupt.\n    payload: Arbitrary payload data for the interrupt.\n\nReturns:\n    A new Interrupt with a unique ID and current timestamp.\n\nExample:\n    >>> interrupt = create_interrupt(\n    ...     InterruptType.SUSPEND,\n    ...     \"did:oas:agent:coordinator-1\",\n    ...     TaskPriority.HIGH,\n    ...     {\"reason\": \"higher priority work\"},\n    ... )\n    >>> interrupt.interrupt_id.startswith(\"int-\")\n    True\n    >>> interrupt.interrupt_type\n    <InterruptType.SUSPEND: 'suspend'>"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/collab/roles.py",
          "sha256": "8e1b99b76cd16b2768a5db2ba1a611a8fea8ec10003caee5453af3e16f42426b",
          "artifactSha256": "e9d6d77aa7c5bea94b6dc5af404d59d624674e7c47ec410027200d75d52ddac9",
          "url": "/reference/source/forge-py/src/forge/collab/roles.py.txt",
          "declarations": [
            {
              "name": "CoordinatorContract",
              "line": 24,
              "signature": "class CoordinatorContract(Protocol)",
              "documentation": "Coordinator role contract -- decomposes and assigns tasks.\n\nThe coordinator is responsible for breaking down high-level objectives\ninto individual tasks, assigning them to suitable workers, collecting\nresults, and handling worker failures. There is at most one coordinator\nper collaboration session.\n\nANVIL Spec section 11.1 -- Coordinator Role."
            },
            {
              "name": "CoordinatorContract.decompose_task",
              "line": 36,
              "signature": "async def decompose_task(self, task: DelegatedTask) -> list[DelegatedTask]",
              "documentation": "Decompose a high-level task into smaller sub-tasks.\n\nArgs:\n    task: The task to decompose.\n\nReturns:\n    A list of sub-tasks derived from the original task.\n\nRaises:\n    DelegationFailedError: If the task cannot be decomposed."
            },
            {
              "name": "CoordinatorContract.assign_task",
              "line": 54,
              "signature": "async def assign_task(self, task: DelegatedTask, worker_did: str) -> TaskAcknowledgment",
              "documentation": "Assign a task to a specific worker agent.\n\nArgs:\n    task: The task to assign.\n    worker_did: The OAS DID of the target worker.\n\nReturns:\n    A TaskAcknowledgment from the worker.\n\nRaises:\n    CapabilityMismatchError: If the worker cannot handle the task.\n    DelegationFailedError: If the assignment fails."
            },
            {
              "name": "CoordinatorContract.aggregate_results",
              "line": 75,
              "signature": "async def aggregate_results(self, results: list[TaskResult]) -> TaskResult",
              "documentation": "Aggregate results from multiple worker tasks into a single result.\n\nArgs:\n    results: The results from all completed sub-tasks.\n\nReturns:\n    A single aggregated TaskResult.\n\nRaises:\n    DelegationFailedError: If the results cannot be aggregated."
            },
            {
              "name": "CoordinatorContract.handle_worker_failure",
              "line": 93,
              "signature": "async def handle_worker_failure(self, task_id: str, worker_did: str, error: str) -> None",
              "documentation": "Handle a failure reported by a worker.\n\nArgs:\n    task_id: The ID of the failed task.\n    worker_did: The DID of the worker that failed.\n    error: A description of the failure.\n\nRaises:\n    DelegationFailedError: If recovery is not possible."
            },
            {
              "name": "WorkerContract",
              "line": 112,
              "signature": "class WorkerContract(Protocol)",
              "documentation": "Worker role contract -- executes delegated tasks, reports progress.\n\nWorkers receive tasks from coordinators, execute them within the given\nconstraints, report progress periodically, and submit results upon\ncompletion.\n\nANVIL Spec section 11.1 -- Worker Role."
            },
            {
              "name": "WorkerContract.on_task_delegated",
              "line": 123,
              "signature": "async def on_task_delegated(self, task: DelegatedTask) -> TaskAcknowledgment",
              "documentation": "Called when a task is delegated to this worker.\n\nArgs:\n    task: The delegated task to evaluate.\n\nReturns:\n    A TaskAcknowledgment indicating acceptance or rejection.\n\nRaises:\n    CollabError: If the acknowledgment cannot be produced."
            },
            {
              "name": "WorkerContract.report_progress",
              "line": 141,
              "signature": "async def report_progress(self, progress: TaskProgress) -> None",
              "documentation": "Report progress on an in-flight task.\n\nArgs:\n    progress: The progress report.\n\nRaises:\n    TaskNotFoundError: If the task ID does not match an active task."
            },
            {
              "name": "WorkerContract.submit_result",
              "line": 156,
              "signature": "async def submit_result(self, result: TaskResult) -> None",
              "documentation": "Submit the result of a completed task.\n\nArgs:\n    result: The task result to submit.\n\nRaises:\n    TaskNotFoundError: If the task ID does not match an active task."
            },
            {
              "name": "WorkerContract.on_task_cancelled",
              "line": 171,
              "signature": "async def on_task_cancelled(self, task_id: str, reason: str) -> None",
              "documentation": "Called when a task is cancelled by the coordinator.\n\nArgs:\n    task_id: The ID of the cancelled task.\n    reason: A human-readable cancellation reason.\n\nRaises:\n    TaskNotFoundError: If the task is not known."
            },
            {
              "name": "PeerContract",
              "line": 188,
              "signature": "class PeerContract(Protocol)",
              "documentation": "Peer role contract -- participates in consensus-based collaboration.\n\nIn peer-mode collaboration, all agents have equal standing. Peers propose\nactions, vote on proposals, and act on consensus decisions.\n\nANVIL Spec section 11.1 -- Peer Role."
            },
            {
              "name": "PeerContract.propose",
              "line": 198,
              "signature": "async def propose(self, proposal: Any) -> str",
              "documentation": "Submit a proposal for peer consensus.\n\nArgs:\n    proposal: The proposal data to submit for voting.\n\nReturns:\n    A unique proposal ID string.\n\nRaises:\n    DelegationFailedError: If the proposal cannot be submitted."
            },
            {
              "name": "PeerContract.vote",
              "line": 216,
              "signature": "async def vote(self, proposal_id: str, approve: bool) -> None",
              "documentation": "Vote on an existing proposal.\n\nArgs:\n    proposal_id: The ID of the proposal to vote on.\n    approve: True to approve, False to reject.\n\nRaises:\n    DelegationFailedError: If voting has closed or proposal not found."
            },
            {
              "name": "PeerContract.on_consensus",
              "line": 233,
              "signature": "async def on_consensus(self, proposal_id: str, result: Any) -> None",
              "documentation": "Called when consensus is reached on a proposal.\n\nArgs:\n    proposal_id: The ID of the proposal that reached consensus.\n    result: The consensus result data.\n\nRaises:\n    CollabError: If the agent cannot act on the consensus."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/collab/session.py",
          "sha256": "a078e69a8acb49b7b729f5bccca63916aa8f34875804672616d21736b226d1d9",
          "artifactSha256": "586ea77ab05978cd65a13343f3e39fe09344a6c4fd0de2cdb2f2ba199650c495",
          "url": "/reference/source/forge-py/src/forge/collab/session.py.txt",
          "declarations": [
            {
              "name": "SessionContract",
              "line": 34,
              "signature": "class SessionContract(Protocol)",
              "documentation": "Session lifecycle contract.\n\nAgents implement this protocol to receive notifications about session\nlifecycle events: joining, state transitions, and leaving.\n\nANVIL Spec section 11.2 -- Session Lifecycle."
            },
            {
              "name": "SessionContract.on_session_join",
              "line": 43,
              "signature": "async def on_session_join(self, session: CollaborationSession, role: CollaborationRole) -> None",
              "documentation": "Called when the agent joins a collaboration session.\n\nArgs:\n    session: The session being joined.\n    role: The role assigned to this agent in the session.\n\nRaises:\n    CollabError: If the agent cannot join the session."
            },
            {
              "name": "SessionContract.on_session_transition",
              "line": 59,
              "signature": "async def on_session_transition(self, session_id: str, from_state: SessionState, to_state: SessionState) -> None",
              "documentation": "Called when the session transitions between states.\n\nArgs:\n    session_id: The ID of the session.\n    from_state: The previous state.\n    to_state: The new state.\n\nRaises:\n    CollabError: If the agent cannot handle the transition."
            },
            {
              "name": "SessionContract.on_session_leave",
              "line": 77,
              "signature": "async def on_session_leave(self, session_id: str, reason: str) -> None",
              "documentation": "Called when the agent leaves a collaboration session.\n\nArgs:\n    session_id: The ID of the session being left.\n    reason: A human-readable reason for leaving.\n\nRaises:\n    CollabError: If cleanup fails."
            },
            {
              "name": "SessionManager",
              "line": 94,
              "signature": "class SessionManager()",
              "documentation": "Manages the session state machine per ANVIL Spec section 11.2.\n\nThe SessionManager enforces the immutable transition table for\ncollaboration sessions. It tracks the current state, validates all\ntransitions, and maintains a complete transition history.\n\nSessions start in the PROPOSED state and progress through ACTIVE\nand COMPLETING to terminal states (COMPLETED, TIMED_OUT, DISSOLVED).\n\nExample:\n    >>> mgr = SessionManager()\n    >>> mgr.state\n    <SessionState.PROPOSED: 'proposed'>\n    >>> t = mgr.transition(SessionState.ACTIVE)\n    >>> t.from_state\n    <SessionState.PROPOSED: 'proposed'>\n    >>> mgr.state\n    <SessionState.ACTIVE: 'active'>"
            },
            {
              "name": "SessionManager.__init__",
              "line": 115,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "SessionManager.state",
              "line": 120,
              "signature": "def state(self) -> SessionState",
              "documentation": "Return the current session state."
            },
            {
              "name": "SessionManager.transition",
              "line": 125,
              "signature": "def transition(self, target: SessionState) -> SessionTransition",
              "documentation": "Attempt to transition to the given target state.\n\nValidates the transition against the ANVIL Spec section 11.2\ntransition table. If valid, the state is updated and a\nSessionTransition is recorded. If invalid, an error is raised\nand the state is unchanged.\n\nArgs:\n    target: The desired target SessionState.\n\nReturns:\n    A SessionTransition record on success.\n\nRaises:\n    InvalidSessionTransitionError: If the transition is invalid\n        or is a self-transition.\n\nExample:\n    >>> mgr = SessionManager()\n    >>> t = mgr.transition(SessionState.ACTIVE)\n    >>> t.to_state\n    <SessionState.ACTIVE: 'active'>"
            },
            {
              "name": "SessionManager.can_transition_to",
              "line": 172,
              "signature": "def can_transition_to(self, target: SessionState) -> bool",
              "documentation": "Return True if the transition to target is valid.\n\nArgs:\n    target: The candidate target SessionState.\n\nReturns:\n    True if the transition is permitted by the ANVIL table.\n\nExample:\n    >>> mgr = SessionManager()\n    >>> mgr.can_transition_to(SessionState.ACTIVE)\n    True\n    >>> mgr.can_transition_to(SessionState.COMPLETING)\n    False"
            },
            {
              "name": "SessionManager.valid_transitions",
              "line": 190,
              "signature": "def valid_transitions(self) -> list[SessionState]",
              "documentation": "Return the set of valid target states from the current state.\n\nReturns:\n    A list of valid target states. Empty for terminal states."
            },
            {
              "name": "SessionManager.history",
              "line": 199,
              "signature": "def history(self) -> list[SessionTransition]",
              "documentation": "Return the complete transition history.\n\nThe history is ordered chronologically -- the first entry is the\nfirst transition that occurred.\n\nReturns:\n    A list of all SessionTransition records."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/collab/types.py",
          "sha256": "31d97df4d4baecc0d4975a899e27934961b5e8d3a343055279307cf69dfdb5ba",
          "artifactSha256": "4c4fb74788f03a91f0d492e771bf8a75d35b85456b7573e02e8ac6639cf903ce",
          "url": "/reference/source/forge-py/src/forge/collab/types.py.txt",
          "declarations": [
            {
              "name": "CollaborationRole",
              "line": 27,
              "signature": "class CollaborationRole(Enum)",
              "documentation": "Role an agent plays in a collaboration session.\n\nRoles define the set of actions available to an agent within a session.\nA Coordinator decomposes and assigns tasks; a Worker executes delegated\ntasks; a Peer participates in consensus-based decision-making.\n\nANVIL Spec section 11.1 -- Collaboration Roles.\n\nExample:\n    >>> role = CollaborationRole.COORDINATOR\n    >>> role.value\n    'coordinator'"
            },
            {
              "name": "SessionState",
              "line": 51,
              "signature": "class SessionState(Enum)",
              "documentation": "State of a collaboration session.\n\nThe session state machine controls which operations are valid. Sessions\nstart in the PROPOSED state and progress through ACTIVE and COMPLETING\nstates to terminal states.\n\nANVIL Spec section 11.2 -- Session State Machine.\n\nTransition Table (IMMUTABLE -- ANVIL Spec section 11.2):\n\n| Current State | Valid Next States                    |\n|---------------|--------------------------------------|\n| PROPOSED      | ACTIVE, DISSOLVED                    |\n| ACTIVE        | COMPLETING, DISSOLVED, TIMED_OUT     |\n| COMPLETING    | COMPLETED, DISSOLVED                 |\n| COMPLETED     | *(terminal)*                         |\n| TIMED_OUT     | *(terminal)*                         |\n| DISSOLVED     | *(terminal)*                         |\n\nExample:\n    >>> state = SessionState.ACTIVE\n    >>> state.is_terminal()\n    False\n    >>> SessionState.COMPLETED.is_terminal()\n    True"
            },
            {
              "name": "SessionState.valid_transitions",
              "line": 87,
              "signature": "def valid_transitions(self) -> list[SessionState]",
              "documentation": "Return the valid target states from this state.\n\nReturns:\n    A list of SessionState values that are valid targets.\n    Returns an empty list for terminal states.\n\nExample:\n    >>> targets = SessionState.ACTIVE.valid_transitions()\n    >>> SessionState.COMPLETING in targets\n    True"
            },
            {
              "name": "SessionState.is_terminal",
              "line": 113,
              "signature": "def is_terminal(self) -> bool",
              "documentation": "Return True if this is a terminal state (no outgoing transitions).\n\nTerminal states are COMPLETED, TIMED_OUT, and DISSOLVED.\n\nExample:\n    >>> SessionState.PROPOSED.is_terminal()\n    False\n    >>> SessionState.COMPLETED.is_terminal()\n    True"
            },
            {
              "name": "TaskStatus",
              "line": 135,
              "signature": "class TaskStatus(Enum)",
              "documentation": "Status of a completed delegated task.\n\nANVIL Spec section 11.3 -- Task Status.\n\nExample:\n    >>> TaskStatus.COMPLETED.value\n    'completed'"
            },
            {
              "name": "TaskPriority",
              "line": 150,
              "signature": "class TaskPriority(Enum)",
              "documentation": "Priority level for task scheduling.\n\nHigher priority tasks are scheduled before lower priority tasks.\nThe default priority is NORMAL.\n\nANVIL Spec section 11.3 -- Task Priority.\n\nExample:\n    >>> TaskPriority.NORMAL.value\n    'normal'"
            },
            {
              "name": "InterruptType",
              "line": 173,
              "signature": "class InterruptType(Enum)",
              "documentation": "Type of interrupt that can be sent to an agent.\n\nANVIL Spec section 11.5 -- Interrupt Types.\n\nExample:\n    >>> InterruptType.SUSPEND.value\n    'suspend'"
            },
            {
              "name": "ContextVisibility",
              "line": 195,
              "signature": "class ContextVisibility(Enum)",
              "documentation": "Visibility scope for a shared context entry.\n\nControls which agents can read a context entry. Entries may be visible\nto the entire session, to agents with a specific role, or to a single\nnamed agent.\n\nANVIL Spec section 11.4 -- Context Visibility.\n\nNote:\n    For role-based and agent-based visibility, use the factory methods\n    ``for_role`` and ``for_agent`` on ContextEntry, or set the\n    visibility_target field alongside the enum value.\n\nExample:\n    >>> ContextVisibility.SESSION.value\n    'session'"
            },
            {
              "name": "SessionParticipant",
              "line": 224,
              "signature": "class SessionParticipant()",
              "documentation": "A participant in a collaboration session.\n\nEach participant has an assigned role and a status indicating whether\nthey are actively participating.\n\nANVIL Spec section 11.2 -- Collaboration Session.\n\nArgs:\n    agent_did: The OAS DID of the participating agent.\n    role: The role this agent plays in the session.\n    joined_at: ISO 8601 timestamp when the agent joined.\n    status: Current participation status (e.g., \"active\", \"left\").\n\nExample:\n    >>> p = SessionParticipant(\n    ...     agent_did=\"did:oas:agent:worker-1\",\n    ...     role=CollaborationRole.WORKER,\n    ...     joined_at=\"2026-02-19T10:00:00Z\",\n    ...     status=\"active\",\n    ... )\n    >>> p.role\n    <CollaborationRole.WORKER: 'worker'>"
            },
            {
              "name": "TaskConstraints",
              "line": 256,
              "signature": "class TaskConstraints()",
              "documentation": "Constraints bounding a delegated task's execution.\n\nConstraints prevent runaway tasks by limiting steps, tokens, duration,\nand tool access. The worker must respect these bounds during execution.\n\nANVIL Spec section 11.3 -- Task Constraints.\n\nExample:\n    >>> c = TaskConstraints()\n    >>> c.max_steps is None\n    True"
            },
            {
              "name": "DelegatedTask",
              "line": 278,
              "signature": "class DelegatedTask()",
              "documentation": "A task delegated from a coordinator to a worker agent.\n\nDelegated tasks carry input data, constraint bounds, output expectations,\nand context key references that the worker may read from the shared\ncontext store.\n\nANVIL Spec section 11.3 -- Delegated Task.\n\nArgs:\n    task_id: Unique identifier for this task.\n    task_type: The type of task (e.g., \"code-review\", \"summarize\").\n    description: Human-readable description of the task.\n    input: Input data for the task.\n    constraints: Constraints bounding the task execution.\n    delegator: The OAS DID of the agent that delegated this task.\n    priority: Priority level for task scheduling.\n    output_schema: Optional JSON Schema for the expected output.\n    deadline: Optional ISO 8601 deadline for task completion.\n    context_keys: Keys in the shared context that this task may read.\n\nExample:\n    >>> task = DelegatedTask(\n    ...     task_id=\"task-001\",\n    ...     task_type=\"summarize\",\n    ...     description=\"Summarize the document\",\n    ...     input={\"doc_id\": \"doc-1\"},\n    ...     constraints=TaskConstraints(),\n    ...     delegator=\"did:oas:agent:coord\",\n    ...     priority=TaskPriority.NORMAL,\n    ... )\n    >>> task.task_type\n    'summarize'"
            },
            {
              "name": "TaskResult",
              "line": 326,
              "signature": "class TaskResult()",
              "documentation": "The result of a completed delegated task.\n\nWorkers submit results with a status, output data, optional confidence\nscore, metadata, and an optional cryptographic signature.\n\nANVIL Spec section 11.3 -- Task Result.\n\nArgs:\n    task_id: The ID of the task this result corresponds to.\n    status: The completion status of the task.\n    output: The output data produced by the worker.\n    confidence: Optional confidence score (0.0 to 1.0).\n    metadata: Arbitrary metadata about the task execution.\n    signature: Optional Ed25519 signature over the result.\n\nExample:\n    >>> result = TaskResult(\n    ...     task_id=\"task-001\",\n    ...     status=TaskStatus.COMPLETED,\n    ...     output={\"summary\": \"LGTM\"},\n    ... )\n    >>> result.status\n    <TaskStatus.COMPLETED: 'completed'>"
            },
            {
              "name": "TaskAcknowledgment",
              "line": 361,
              "signature": "class TaskAcknowledgment()",
              "documentation": "A worker's acknowledgment of a delegated task.\n\nWhen a task is delegated, the worker responds with an acknowledgment\nindicating whether it accepts or rejects the task.\n\nANVIL Spec section 11.3 -- Task Acknowledgment.\n\nArgs:\n    task_id: The ID of the task being acknowledged.\n    accepted: Whether the worker accepts the task.\n    rejection_reason: Reason for rejection, if not accepted.\n    estimated_completion_seconds: Estimated time to completion.\n\nExample:\n    >>> ack = TaskAcknowledgment(\n    ...     task_id=\"task-001\",\n    ...     accepted=True,\n    ... )\n    >>> ack.accepted\n    True"
            },
            {
              "name": "TaskProgress",
              "line": 391,
              "signature": "class TaskProgress()",
              "documentation": "Progress report for an in-flight delegated task.\n\nWorkers periodically report progress to the coordinator.\n\nANVIL Spec section 11.3 -- Task Progress.\n\nArgs:\n    task_id: The ID of the task this progress report corresponds to.\n    percentage: Completion percentage (0.0 to 100.0).\n    message: Human-readable status message.\n\nExample:\n    >>> progress = TaskProgress(\n    ...     task_id=\"task-001\",\n    ...     percentage=50.0,\n    ...     message=\"Halfway through\",\n    ... )\n    >>> progress.percentage\n    50.0"
            },
            {
              "name": "Interrupt",
              "line": 419,
              "signature": "class Interrupt()",
              "documentation": "An interrupt sent to an agent during task execution.\n\nInterrupts allow coordinators (or the platform) to preempt, suspend,\nresume, abort, or redirect an agent's current work.\n\nANVIL Spec section 11.5 -- Interrupts.\n\nArgs:\n    interrupt_id: Unique identifier for this interrupt.\n    interrupt_type: The type of interrupt.\n    source: The OAS DID of the agent that sent the interrupt.\n    priority: Priority of the interrupt.\n    payload: Arbitrary payload data for the interrupt.\n    timestamp: ISO 8601 timestamp when the interrupt was created.\n\nExample:\n    >>> interrupt = Interrupt(\n    ...     interrupt_id=\"int-001\",\n    ...     interrupt_type=InterruptType.SUSPEND,\n    ...     source=\"did:oas:agent:coord\",\n    ...     priority=TaskPriority.HIGH,\n    ...     payload={\"reason\": \"higher priority\"},\n    ...     timestamp=\"2026-02-19T10:30:00Z\",\n    ... )\n    >>> interrupt.interrupt_type\n    <InterruptType.SUSPEND: 'suspend'>"
            },
            {
              "name": "InterruptResponse",
              "line": 457,
              "signature": "class InterruptResponse()",
              "documentation": "An agent's response to an interrupt.\n\nAfter receiving an interrupt, the agent acknowledges it and optionally\nreports its interrupted state for potential resumption.\n\nANVIL Spec section 11.5 -- Interrupt Response.\n\nArgs:\n    interrupt_id: The ID of the interrupt being responded to.\n    acknowledged: Whether the agent acknowledged the interrupt.\n    current_state: The agent's state at the time of interruption.\n\nExample:\n    >>> response = InterruptResponse(\n    ...     interrupt_id=\"int-001\",\n    ...     acknowledged=True,\n    ... )\n    >>> response.acknowledged\n    True"
            },
            {
              "name": "InterruptedState",
              "line": 485,
              "signature": "class InterruptedState()",
              "documentation": "Snapshot of an agent's state at the moment of interruption.\n\nCaptures enough information to resume the task later if the\ninterrupt type supports resumption.\n\nANVIL Spec section 11.5 -- Interrupted State.\n\nArgs:\n    task_id: The ID of the task that was interrupted, if any.\n    step_count: The number of steps completed before interruption.\n    progress_percentage: Progress percentage at interruption (0-100).\n    can_resume: Whether the task can be resumed from this state.\n\nExample:\n    >>> state = InterruptedState(\n    ...     step_count=5,\n    ...     progress_percentage=42.0,\n    ...     can_resume=True,\n    ... )\n    >>> state.can_resume\n    True"
            },
            {
              "name": "ContextEntry",
              "line": 516,
              "signature": "class ContextEntry()",
              "documentation": "An entry in a session's shared context store.\n\nContext entries are key-value pairs with versioning, authorship tracking,\nand visibility controls.\n\nANVIL Spec section 11.4 -- Shared Context.\n\nArgs:\n    key: The key identifying this context entry.\n    value: The value stored in this entry.\n    value_type: The type of the value (e.g., \"json\", \"text\").\n    author: The OAS DID of the agent that wrote this entry.\n    version: Monotonically increasing version number for this key.\n    timestamp: ISO 8601 timestamp when this version was written.\n    visibility: Visibility control for this entry.\n    visibility_target: Role or DID for ROLE/AGENT visibility.\n\nExample:\n    >>> entry = ContextEntry(\n    ...     key=\"analysis.result\",\n    ...     value={\"score\": 0.95},\n    ...     value_type=\"json\",\n    ...     author=\"did:oas:agent:worker-1\",\n    ...     version=1,\n    ...     timestamp=\"2026-02-19T10:15:00Z\",\n    ...     visibility=ContextVisibility.SESSION,\n    ... )\n    >>> entry.version\n    1"
            },
            {
              "name": "AgentCapabilityProfile",
              "line": 559,
              "signature": "class AgentCapabilityProfile()",
              "documentation": "An agent's advertised capability profile for task matching.\n\nCapability profiles describe what an agent can do (supported roles,\ntask types, available tools), its current load, and its maximum\nconcurrency.\n\nANVIL Spec section 11.6 -- Agent Capability Profile.\n\nArgs:\n    agent_did: The OAS DID of the agent.\n    supported_roles: Collaboration roles this agent supports.\n    supported_task_types: Task types this agent can handle.\n    available_tools: Tool names available to this agent.\n    current_load: Current load factor (0.0=idle, 1.0=full).\n    max_concurrent_tasks: Maximum concurrent tasks.\n\nExample:\n    >>> profile = AgentCapabilityProfile(\n    ...     agent_did=\"did:oas:agent:analyzer\",\n    ...     supported_roles=[CollaborationRole.WORKER],\n    ...     supported_task_types=[\"summarize\"],\n    ...     available_tools=[\"read_file\"],\n    ...     current_load=0.3,\n    ...     max_concurrent_tasks=5,\n    ... )\n    >>> profile.max_concurrent_tasks\n    5"
            },
            {
              "name": "SessionTransition",
              "line": 598,
              "signature": "class SessionTransition()",
              "documentation": "A record of a single session state transition.\n\nEvery session transition is timestamped and stored in the session's\ntransition history for audit trail purposes.\n\nANVIL Spec section 11.2 -- Session State Machine.\n\nArgs:\n    from_state: The state before the transition.\n    to_state: The state after the transition.\n    timestamp: ISO 8601 timestamp when the transition occurred.\n\nExample:\n    >>> t = SessionTransition(\n    ...     from_state=SessionState.PROPOSED,\n    ...     to_state=SessionState.ACTIVE,\n    ...     timestamp=\"2026-02-19T10:00:00Z\",\n    ... )\n    >>> t.from_state\n    <SessionState.PROPOSED: 'proposed'>"
            },
            {
              "name": "CollaborationSession",
              "line": 627,
              "signature": "class CollaborationSession()",
              "documentation": "A collaboration session grouping agents for coordinated work.\n\nSessions have a typed purpose, a set of participants with assigned roles,\nan optional coordinator, and an optional shared context store.\n\nANVIL Spec section 11.2 -- Collaboration Session.\n\nArgs:\n    session_id: Unique identifier for this session.\n    session_type: The type of collaboration (e.g., \"code-review\").\n    participants: The agents participating in this session.\n    created_at: ISO 8601 timestamp when the session was created.\n    coordinator: The DID of the coordinator agent, if any.\n    shared_context_id: The ID of the shared context store.\n    timeout_seconds: Optional session timeout in seconds.\n    metadata: Arbitrary metadata for application-specific properties.\n\nExample:\n    >>> session = CollaborationSession(\n    ...     session_id=\"sess-001\",\n    ...     session_type=\"code-review\",\n    ...     participants=[],\n    ...     created_at=\"2026-02-19T10:00:00Z\",\n    ... )\n    >>> session.session_id\n    'sess-001'"
            }
          ]
        }
      ]
    },
    {
      "name": "forge.comm",
      "language": "python",
      "version": "0.1.0",
      "description": "Python comm package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/comm",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/comm/__init__.py",
          "sha256": "2fdca6da76c24368cb3f4baa3f0ccf435d1031b59aabfa8827294cb84b06e3f6",
          "artifactSha256": "d975dd34a530df503f7633beeab41ac523f17290af96c25a8cc53c367f50d0e9",
          "url": "/reference/source/forge-py/src/forge/comm/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/comm/channel.py",
          "sha256": "2d25831e013ea36b74f374405e2dc820a74ea1de5549d7beb7213793e9a30475",
          "artifactSha256": "803d5dd4bf1e467d202a3a87a8042eab04552802f1eb8315d5241ce20f9e5055",
          "url": "/reference/source/forge-py/src/forge/comm/channel.py.txt",
          "declarations": [
            {
              "name": "ChannelTransport",
              "line": 17,
              "signature": "class ChannelTransport()",
              "documentation": "In-memory async channel transport.\n\nCreated in pairs via the ``create_pair`` class method. Each side\nsends messages to the other's receive queue.\n\nANVIL Spec section 10.3 -- Transport Contract.\n\nExample:\n    >>> import asyncio\n    >>> async def demo():\n    ...     a, b = ChannelTransport.create_pair(capacity=16)\n    ...     msg = AgentMessage.new(\n    ...         \"did:oas:l1fe:agent:a\",\n    ...         \"did:oas:l1fe:agent:b\",\n    ...         \"anvil.task.v1\",\n    ...         \"request\",\n    ...         {\"data\": 42},\n    ...     )\n    ...     await a.send(msg)\n    ...     received = await b.receive()\n    ...     return received.sender\n    >>> asyncio.run(demo())\n    'did:oas:l1fe:agent:a'"
            },
            {
              "name": "ChannelTransport.__init__",
              "line": 43,
              "signature": "def __init__(self, send_queue: asyncio.Queue[AgentMessage], recv_queue: asyncio.Queue[AgentMessage]) -> None",
              "documentation": ""
            },
            {
              "name": "ChannelTransport.create_pair",
              "line": 53,
              "signature": "def create_pair(cls, capacity: int=32) -> tuple[ChannelTransport, ChannelTransport]",
              "documentation": "Create a bidirectional pair of channel transports.\n\nMessages sent on one side are received on the other.\n\nArgs:\n    capacity: The maximum number of messages buffered per direction.\n\nReturns:\n    A tuple of two ChannelTransport instances."
            },
            {
              "name": "ChannelTransport.send",
              "line": 70,
              "signature": "async def send(self, message: AgentMessage) -> None",
              "documentation": "Send a message to the other side of the channel.\n\nArgs:\n    message: The message to send.\n\nRaises:\n    CommChannelClosedError: If the channel has been closed."
            },
            {
              "name": "ChannelTransport.receive",
              "line": 83,
              "signature": "async def receive(self) -> AgentMessage",
              "documentation": "Receive the next message from the channel.\n\nBlocks until a message is available.\n\nReturns:\n    The next AgentMessage.\n\nRaises:\n    CommChannelClosedError: If the channel has been closed."
            },
            {
              "name": "ChannelTransport.close",
              "line": 98,
              "signature": "def close(self) -> None",
              "documentation": "Close this side of the channel.\n\nAfter closing, send and receive will raise CommChannelClosedError."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/comm/errors.py",
          "sha256": "3280a385b03a55f37d49f6427c9eb5939177fc58e209526b367fc38b76d8c12b",
          "artifactSha256": "549955bce214abc256d1a0a4c04ef31e9fd05f24904889ce1cbf7b31d3d58d88",
          "url": "/reference/source/forge-py/src/forge/comm/errors.py.txt",
          "declarations": [
            {
              "name": "CommError",
              "line": 14,
              "signature": "class CommError(ForgeError)",
              "documentation": "Base error for communication operations."
            },
            {
              "name": "CommSerializationError",
              "line": 18,
              "signature": "class CommSerializationError(CommError)",
              "documentation": "Message serialization failed.\n\nArgs:\n    reason: What went wrong during serialization."
            },
            {
              "name": "CommSerializationError.__init__",
              "line": 25,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "CommDeserializationError",
              "line": 30,
              "signature": "class CommDeserializationError(CommError)",
              "documentation": "Message deserialization failed.\n\nArgs:\n    reason: What went wrong during deserialization."
            },
            {
              "name": "CommDeserializationError.__init__",
              "line": 37,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "CommTransportError",
              "line": 42,
              "signature": "class CommTransportError(CommError)",
              "documentation": "Transport-level communication failed.\n\nArgs:\n    reason: What went wrong with the transport."
            },
            {
              "name": "CommTransportError.__init__",
              "line": 49,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "CommNotConnectedError",
              "line": 54,
              "signature": "class CommNotConnectedError(CommError)",
              "documentation": "The transport is not connected.\n\nANVIL Spec section 10.3 -- Transport Contract."
            },
            {
              "name": "CommNotConnectedError.__init__",
              "line": 60,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "CommChannelClosedError",
              "line": 67,
              "signature": "class CommChannelClosedError(CommError)",
              "documentation": "The communication channel has been closed.\n\nArgs:\n    reason: Why the channel was closed."
            },
            {
              "name": "CommChannelClosedError.__init__",
              "line": 74,
              "signature": "def __init__(self, reason: str='channel closed') -> None",
              "documentation": ""
            },
            {
              "name": "CommSignatureInvalidError",
              "line": 79,
              "signature": "class CommSignatureInvalidError(CommError)",
              "documentation": "Message signature verification failed.\n\nANVIL Spec section 10.4 -- Message Integrity.\n\nArgs:\n    message_id: The ID of the message with the invalid signature."
            },
            {
              "name": "CommSignatureInvalidError.__init__",
              "line": 88,
              "signature": "def __init__(self, message_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "CommProtocolNegotiationError",
              "line": 96,
              "signature": "class CommProtocolNegotiationError(CommError)",
              "documentation": "Protocol negotiation failed.\n\nANVIL Spec section 10.5 -- Protocol Negotiation.\n\nArgs:\n    reason: Why negotiation failed."
            },
            {
              "name": "CommProtocolNegotiationError.__init__",
              "line": 105,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "CommMessageTooLargeError",
              "line": 113,
              "signature": "class CommMessageTooLargeError(CommError)",
              "documentation": "Message exceeds the maximum permitted size.\n\nArgs:\n    size: The actual message size in bytes.\n    max_size: The maximum permitted size in bytes."
            },
            {
              "name": "CommMessageTooLargeError.__init__",
              "line": 121,
              "signature": "def __init__(self, size: int, max_size: int) -> None",
              "documentation": ""
            },
            {
              "name": "CommTimeoutError",
              "line": 129,
              "signature": "class CommTimeoutError(CommError)",
              "documentation": "A communication operation timed out.\n\nArgs:\n    operation: The operation that timed out.\n    timeout_seconds: The timeout duration in seconds."
            },
            {
              "name": "CommTimeoutError.__init__",
              "line": 137,
              "signature": "def __init__(self, operation: str, timeout_seconds: float) -> None",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-py/src/forge/comm/message.py",
          "sha256": "52be33fb24fe57790d06f4a306c09e7a04b29976e51362df5f28888499535590",
          "artifactSha256": "9fdace0b49b4dc1b45d3fd49c5741f98efa020c7e2099d978298af504df2bc0a",
          "url": "/reference/source/forge-py/src/forge/comm/message.py.txt",
          "declarations": [
            {
              "name": "AgentMessage",
              "line": 23,
              "signature": "class AgentMessage()",
              "documentation": "An agent message envelope per ANVIL Spec section 10.2.\n\nThe AgentMessage is the fundamental unit of inter-agent communication.\nIt wraps a JSON payload with routing metadata (sender/recipient DIDs),\nprotocol identification, correlation tracking, and an optional\ncryptographic signature for integrity verification.\n\nANVIL Spec section 10.2 -- Agent Message Envelope.\n\nArgs:\n    sender: Sender's OAS DID.\n    recipient: Recipient's OAS DID.\n    protocol: Protocol identifier (e.g., \"anvil.task.v1\").\n    message_type: Message type within the protocol (e.g., \"request\").\n    payload: Arbitrary JSON-serializable payload.\n\nExample:\n    >>> msg = AgentMessage.new(\n    ...     \"did:oas:l1fe:agent:sender\",\n    ...     \"did:oas:l1fe:agent:receiver\",\n    ...     \"anvil.task.v1\",\n    ...     \"request\",\n    ...     {\"task\": \"analyze\"},\n    ... )\n    >>> msg.sender\n    'did:oas:l1fe:agent:sender'\n    >>> msg.is_signed()\n    False"
            },
            {
              "name": "AgentMessage.new",
              "line": 66,
              "signature": "def new(sender: str, recipient: str, protocol: str, message_type: str, payload: Any) -> AgentMessage",
              "documentation": "Create a new AgentMessage with a generated UUID and current timestamp.\n\nANVIL Spec section 10.2 -- Agent Message Envelope.\n\nArgs:\n    sender: The sender's OAS DID string.\n    recipient: The recipient's OAS DID string.\n    protocol: The protocol identifier (e.g., \"anvil.task.v1\").\n    message_type: The message type within the protocol.\n    payload: The JSON payload body.\n\nReturns:\n    A new AgentMessage with a UUID v4 id and the current UTC timestamp."
            },
            {
              "name": "AgentMessage.kind",
              "line": 97,
              "signature": "def kind(self) -> str",
              "documentation": "Return the message type.\n\nReturns:\n    The message type string."
            },
            {
              "name": "AgentMessage.is_signed",
              "line": 105,
              "signature": "def is_signed(self) -> bool",
              "documentation": "Return whether this message has an Ed25519 signature.\n\nANVIL Spec section 10.4 -- Message Integrity.\n\nReturns:\n    True if the signature field is set, False otherwise."
            },
            {
              "name": "AgentMessage.with_correlation_id",
              "line": 115,
              "signature": "def with_correlation_id(self, correlation_id: str) -> AgentMessage",
              "documentation": "Set the correlation ID.\n\nArgs:\n    correlation_id: The correlation ID string.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "AgentMessage.with_reply_to",
              "line": 127,
              "signature": "def with_reply_to(self, reply_to: str) -> AgentMessage",
              "documentation": "Set the reply-to message ID.\n\nArgs:\n    reply_to: The ID of the message this is a reply to.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "AgentMessage.to_dict",
              "line": 139,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "AgentMessage.from_dict",
              "line": 163,
              "signature": "def from_dict(data: dict[str, Any]) -> AgentMessage",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized AgentMessage."
            },
            {
              "name": "AgentMessage.to_json",
              "line": 185,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string."
            },
            {
              "name": "AgentMessage.from_json",
              "line": 190,
              "signature": "def from_json(data: str) -> AgentMessage",
              "documentation": "Deserialize from JSON string."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/comm/noop.py",
          "sha256": "ce09540eff2d669ae7f22de05cf6390804620333f2233c397a8b1027e076d970",
          "artifactSha256": "2a5a27b50995c24b6b514ca7280b322520a9685fc9c4a54515c9a853c0a6d2a0",
          "url": "/reference/source/forge-py/src/forge/comm/noop.py.txt",
          "declarations": [
            {
              "name": "NoopTransport",
              "line": 15,
              "signature": "class NoopTransport()",
              "documentation": "No-op transport that discards all sent messages.\n\nSending always succeeds silently; receiving always raises\nCommNotConnectedError because there is no underlying connection.\n\nANVIL Spec section 10.3 -- Transport Contract (default implementation).\n\nExample:\n    >>> import asyncio\n    >>> transport = NoopTransport()\n    >>> msg = AgentMessage.new(\n    ...     \"did:oas:l1fe:agent:a\",\n    ...     \"did:oas:l1fe:agent:b\",\n    ...     \"anvil.task.v1\",\n    ...     \"request\",\n    ...     {},\n    ... )\n    >>> asyncio.run(transport.send(msg))  # Silently succeeds"
            },
            {
              "name": "NoopTransport.send",
              "line": 36,
              "signature": "async def send(self, message: AgentMessage) -> None",
              "documentation": "Discard the message silently.\n\nArgs:\n    message: The message to discard."
            },
            {
              "name": "NoopTransport.receive",
              "line": 43,
              "signature": "async def receive(self) -> AgentMessage",
              "documentation": "Always raises CommNotConnectedError.\n\nReturns:\n    Never returns; always raises.\n\nRaises:\n    CommNotConnectedError: Always raised because noop transport\n        has no underlying connection."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/comm/protocol.py",
          "sha256": "16c866ebd6ff3a0e2050d88576f43a95e40e580a7712bdf6ff861170a7ff4550",
          "artifactSha256": "1bbad76b53108dd58cfaa1df9def897acee039cddfadd29d1dad9829563dd2a2",
          "url": "/reference/source/forge-py/src/forge/comm/protocol.py.txt",
          "declarations": [
            {
              "name": "ProtocolOffer",
              "line": 18,
              "signature": "class ProtocolOffer()",
              "documentation": "A protocol negotiation offer.\n\nSent by the initiating agent to propose a set of protocols and versions\nit supports.\n\nANVIL Spec section 10.5 -- Protocol Negotiation.\n\nArgs:\n    protocol: The protocol name (e.g., \"anvil.task\").\n    versions: Supported versions, sorted ascending.\n\nExample:\n    >>> offer = ProtocolOffer(protocol=\"anvil.task\", versions=[1, 2, 3])\n    >>> offer.protocol\n    'anvil.task'"
            },
            {
              "name": "ProtocolAccept",
              "line": 41,
              "signature": "class ProtocolAccept()",
              "documentation": "A protocol negotiation acceptance.\n\nSent by the responding agent to confirm the selected protocol and version.\n\nANVIL Spec section 10.5 -- Protocol Negotiation.\n\nArgs:\n    protocol: The agreed-upon protocol name.\n    version: The selected version.\n\nExample:\n    >>> accept = ProtocolAccept(protocol=\"anvil.task\", version=2)\n    >>> accept.version\n    2"
            },
            {
              "name": "negotiate_protocol",
              "line": 62,
              "signature": "def negotiate_protocol(offer: ProtocolOffer, supported_versions: list[int]) -> ProtocolAccept",
              "documentation": "Negotiate a protocol version from an offer and supported versions.\n\nSelects the highest version that both sides support.\n\nANVIL Spec section 10.5 -- Protocol Negotiation.\n\nArgs:\n    offer: The protocol offer from the initiating agent.\n    supported_versions: The versions supported by the responding agent.\n\nReturns:\n    A ProtocolAccept with the highest common version.\n\nRaises:\n    CommProtocolNegotiationError: If no common version exists.\n\nExample:\n    >>> offer = ProtocolOffer(protocol=\"anvil.task\", versions=[1, 2, 3])\n    >>> accept = negotiate_protocol(offer, [2, 3, 4])\n    >>> accept.version\n    3"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/comm/transport.py",
          "sha256": "aa30ccae8e5e7dc5495ca50fd136bd8dd6630a095abbd8bf537b87a5facab874",
          "artifactSha256": "5f2922f948642c1fb2b62e6088845beeeac5bb51fb88984a08a71179d945e90d",
          "url": "/reference/source/forge-py/src/forge/comm/transport.py.txt",
          "declarations": [
            {
              "name": "MessageTransport",
              "line": 16,
              "signature": "class MessageTransport(Protocol)",
              "documentation": "Async message transport contract.\n\nImplementations provide the send/receive mechanism for inter-agent\ncommunication. The transport is agnostic to the message content and\nprotocol -- it only moves AgentMessage envelopes between endpoints.\n\nANVIL Spec section 10.3 -- Transport Contract."
            },
            {
              "name": "MessageTransport.send",
              "line": 26,
              "signature": "async def send(self, message: AgentMessage) -> None",
              "documentation": "Send a message to the recipient.\n\nANVIL Spec section 10.3 -- Transport Contract: send.\n\nArgs:\n    message: The message to send.\n\nRaises:\n    CommTransportError: If the send operation fails.\n    CommNotConnectedError: If the transport is not connected."
            },
            {
              "name": "MessageTransport.receive",
              "line": 40,
              "signature": "async def receive(self) -> AgentMessage",
              "documentation": "Receive the next message.\n\nBlocks until a message is available or an error occurs.\n\nANVIL Spec section 10.3 -- Transport Contract: receive.\n\nReturns:\n    The next AgentMessage in the receive queue.\n\nRaises:\n    CommNotConnectedError: If the transport is not connected.\n    CommChannelClosedError: If the channel has been closed."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.core",
      "language": "python",
      "version": "0.1.0",
      "description": "Python core package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/core",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/core/__init__.py",
          "sha256": "0bb91f7f170e3b488bcf5fc3b5fb16885bd77c0ad28662752322cfa0d686b332",
          "artifactSha256": "e6cffbd26e89ab329ed5a3b31ff2ea6c284ea6623e079181daf1240d9ce75bb3",
          "url": "/reference/source/forge-py/src/forge/core/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/core/brew.py",
          "sha256": "74181c2a257bae3139fc1fb5b3bbff7be5c46879d692a3845deb813dbc007f14",
          "artifactSha256": "5d12053882e84aed54d28f7296f79bb566da38e5416fbec941dfadff16d2343a",
          "url": "/reference/source/forge-py/src/forge/core/brew.py.txt",
          "declarations": [
            {
              "name": "JoinMode",
              "line": 26,
              "signature": "class JoinMode(Enum)",
              "documentation": "Strategy for joining results from parallel fork branches.\n\n``AWAIT_ALL``: Wait for all branches to complete.\n``FIRST_SUCCESS``: Return as soon as one branch completes.\n``FIRST_N``: Return as soon as N branches complete (use ``JoinModeFirstN``)."
            },
            {
              "name": "JoinModeFirstN",
              "line": 39,
              "signature": "class JoinModeFirstN()",
              "documentation": "Join mode: return as soon as N branches complete successfully.\n\nArgs:\n    n: The number of branches required."
            },
            {
              "name": "JoinModeFirstN.to_dict",
              "line": 48,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary with ``first_n`` key."
            },
            {
              "name": "join_mode_to_dict",
              "line": 57,
              "signature": "def join_mode_to_dict(mode: JoinMode | JoinModeFirstN) -> Any",
              "documentation": "Serialize a join mode to a JSON-compatible value.\n\nArgs:\n    mode: The join mode.\n\nReturns:\n    A string or dict depending on the join mode type."
            },
            {
              "name": "join_mode_from_dict",
              "line": 71,
              "signature": "def join_mode_from_dict(data: Any) -> JoinMode | JoinModeFirstN",
              "documentation": "Deserialize a join mode from a JSON-compatible value.\n\nArgs:\n    data: A string or dict.\n\nReturns:\n    The deserialized join mode."
            },
            {
              "name": "BrewId",
              "line": 86,
              "signature": "class BrewId()",
              "documentation": "Opaque identifier for a brew definition.\n\nArgs:\n    value: The identifier string.\n\nExample:\n    >>> bid = BrewId(\"research-pipeline\")\n    >>> bid.as_str()\n    'research-pipeline'"
            },
            {
              "name": "BrewId.as_str",
              "line": 100,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the inner string.\n\nReturns:\n    The identifier string."
            },
            {
              "name": "NodeId",
              "line": 113,
              "signature": "class NodeId()",
              "documentation": "Opaque identifier for a node within a brew graph.\n\nArgs:\n    value: The node identifier string.\n\nExample:\n    >>> nid = NodeId(\"fetch-data\")\n    >>> nid.as_str()\n    'fetch-data'"
            },
            {
              "name": "NodeId.as_str",
              "line": 127,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the inner string.\n\nReturns:\n    The node identifier string."
            },
            {
              "name": "BrewVersion",
              "line": 140,
              "signature": "class BrewVersion()",
              "documentation": "Semantic version string for a brew definition.\n\nArgs:\n    value: The version string.\n\nExample:\n    >>> v = BrewVersion(\"1.0.0\")\n    >>> v.as_str()\n    '1.0.0'"
            },
            {
              "name": "BrewVersion.as_str",
              "line": 154,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the inner string.\n\nReturns:\n    The version string."
            },
            {
              "name": "BrewEdgeKind",
              "line": 166,
              "signature": "class BrewEdgeKind(Enum)",
              "documentation": "The semantics of a directed edge in the brew graph.\n\n``DATA_FLOW``: Output of source feeds as input to target.\n``CONTROL_FLOW``: Target executes after source completes.\n``ERROR_FLOW``: Target executes when source fails."
            },
            {
              "name": "BrewEdge",
              "line": 180,
              "signature": "class BrewEdge()",
              "documentation": "A directed edge in the brew graph connecting two nodes.\n\nArgs:\n    from_node: The source node identifier.\n    to_node: The target node identifier.\n    kind: The edge semantics."
            },
            {
              "name": "BrewEdge.to_dict",
              "line": 193,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "BrewEdge.from_dict",
              "line": 206,
              "signature": "def from_dict(data: dict[str, Any]) -> BrewEdge",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized BrewEdge."
            },
            {
              "name": "BrewEdge.sort_key",
              "line": 221,
              "signature": "def sort_key(self) -> tuple[str, str, str]",
              "documentation": "Return a sort key for deterministic ordering.\n\nReturns:\n    A tuple of (from, to, kind) strings."
            },
            {
              "name": "AgentStepNode",
              "line": 235,
              "signature": "class AgentStepNode()",
              "documentation": "An agent step: send a prompt to a model, optionally with tools.\n\nArgs:\n    provider: Provider reference (e.g., ``openai:gpt-4o``).\n    system_prompt: Optional system prompt for this step.\n    max_steps: Maximum tool-loop steps for this agent invocation."
            },
            {
              "name": "ToolInvocationNode",
              "line": 250,
              "signature": "class ToolInvocationNode()",
              "documentation": "A direct tool invocation without an LLM in the loop.\n\nArgs:\n    tool_id: Tool identifier.\n    tier: Tool tier classification."
            },
            {
              "name": "McpCallNode",
              "line": 263,
              "signature": "class McpCallNode()",
              "documentation": "An MCP tool call routed through a connected MCP server.\n\nArgs:\n    server_id: MCP server identifier (URI or alias).\n    tool_name: MCP tool name on the remote server."
            },
            {
              "name": "WebOperationNode",
              "line": 276,
              "signature": "class WebOperationNode()",
              "documentation": "A web operation (HTTP request, browser action, etc.).\n\nArgs:\n    operation: The operation kind identifier."
            },
            {
              "name": "ConditionalBranchNode",
              "line": 287,
              "signature": "class ConditionalBranchNode()",
              "documentation": "A conditional branch routing to one of two targets.\n\nArgs:\n    condition_expr: JSONPath or simple expression evaluated against data.\n    true_target: The node to route to when the condition is true.\n    false_target: The node to route to when the condition is false."
            },
            {
              "name": "ParallelForkNode",
              "line": 302,
              "signature": "class ParallelForkNode()",
              "documentation": "A parallel fork spawning concurrent execution of branches.\n\nArgs:\n    branches: The set of branch targets to execute concurrently.\n    join_mode: Strategy for joining parallel results."
            },
            {
              "name": "SubBrewRefNode",
              "line": 315,
              "signature": "class SubBrewRefNode()",
              "documentation": "A reference to another brew, enabling composition.\n\nArgs:\n    brew_id: The referenced brew's identifier."
            },
            {
              "name": "HumanCheckpointNode",
              "line": 326,
              "signature": "class HumanCheckpointNode()",
              "documentation": "A human-in-the-loop checkpoint.\n\nArgs:\n    prompt: The prompt displayed to the human reviewer.\n    timeout_ms: Maximum wait time in milliseconds. None means indefinite."
            },
            {
              "name": "brew_node_kind_to_dict",
              "line": 350,
              "signature": "def brew_node_kind_to_dict(kind: BrewNodeKind) -> dict[str, Any]",
              "documentation": "Serialize a BrewNodeKind to a dictionary with type tag.\n\nArgs:\n    kind: The node kind.\n\nReturns:\n    Dictionary with a ``type`` discriminator."
            },
            {
              "name": "brew_node_kind_from_dict",
              "line": 409,
              "signature": "def brew_node_kind_from_dict(data: dict[str, Any]) -> BrewNodeKind",
              "documentation": "Deserialize a BrewNodeKind from a dictionary with type tag.\n\nArgs:\n    data: Dictionary with ``type`` discriminator.\n\nReturns:\n    The deserialized BrewNodeKind.\n\nRaises:\n    ValueError: If the type tag is unknown."
            },
            {
              "name": "BrewNode",
              "line": 463,
              "signature": "class BrewNode()",
              "documentation": "A single node in the brew execution graph.\n\nArgs:\n    id: Stable identifier within this brew.\n    kind: The node's execution semantics.\n    metadata: Arbitrary key-value metadata for tooling."
            },
            {
              "name": "BrewNode.to_dict",
              "line": 476,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "BrewNode.from_dict",
              "line": 491,
              "signature": "def from_dict(data: dict[str, Any]) -> BrewNode",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized BrewNode."
            },
            {
              "name": "Brew",
              "line": 508,
              "signature": "class Brew()",
              "documentation": "A composable execution graph of typed nodes and typed edges.\n\nA ``Brew`` is a mutable, dynamic structure carrying symbolic references\nthat have not yet been validated against a live environment.\n\nANVIL Spec Reference: ANVIL Spec SS7.2 -- Workflows.\n\nArgs:\n    id: Unique identifier for this brew definition.\n    version: Semantic version of this brew definition.\n    nodes: The graph's nodes, keyed by stable node ID string.\n    edges: The graph's edges.\n    entry_nodes: Designated entry nodes.\n    exit_nodes: Designated exit nodes.\n    topology: Optional model topology for this brew."
            },
            {
              "name": "Brew.to_dict",
              "line": 534,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation with deterministic ordering."
            },
            {
              "name": "Brew.from_dict",
              "line": 559,
              "signature": "def from_dict(data: dict[str, Any]) -> Brew",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized Brew."
            },
            {
              "name": "Brew.to_json",
              "line": 581,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string."
            },
            {
              "name": "Brew.from_json",
              "line": 590,
              "signature": "def from_json(data: str) -> Brew",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized Brew."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/brew_builder.py",
          "sha256": "e3ec9469ced6efc5cb7548ef0674508c4afce052f0861672e9d144e6ae3ae464",
          "artifactSha256": "faca7329ac874c3d4c3ca7e3da818843067178e21ac2377ebd24c1b4ccf8b7cf",
          "url": "/reference/source/forge-py/src/forge/core/brew_builder.py.txt",
          "declarations": [
            {
              "name": "BrewBuilder",
              "line": 35,
              "signature": "class BrewBuilder()",
              "documentation": "Builder for constructing ``Brew`` instances with structural validation.\n\nThe builder accumulates nodes and edges, then validates the graph\nstructure at ``build()`` time.\n\nExample:\n    >>> from forge.core.brew import WebOperationNode\n    >>> builder = BrewBuilder(\"pipeline\", \"1.0.0\")\n    >>> builder.add_node(\"start\", WebOperationNode(operation=\"fetch\"))\n    <...>\n    >>> builder.set_entry(\"start\").set_exit(\"start\")\n    <...>\n    >>> brew = builder.build()\n    >>> len(brew.nodes)\n    1"
            },
            {
              "name": "BrewBuilder.__init__",
              "line": 53,
              "signature": "def __init__(self, brew_id: str, version: str) -> None",
              "documentation": "Create a new BrewBuilder.\n\nArgs:\n    brew_id: The brew identifier string.\n    version: The semantic version string."
            },
            {
              "name": "BrewBuilder.add_node",
              "line": 68,
              "signature": "def add_node(self, node_id: str, kind: BrewNodeKind) -> BrewBuilder",
              "documentation": "Add a node to the brew graph.\n\nIf a node with the same ID already exists, it is replaced.\n\nArgs:\n    node_id: The unique node identifier within this brew.\n    kind: The execution semantics of the node.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "BrewBuilder.add_edge",
              "line": 84,
              "signature": "def add_edge(self, from_id: str, to_id: str, edge_kind: BrewEdgeKind) -> BrewBuilder",
              "documentation": "Add a directed edge between two nodes.\n\nEdge validity is checked at build time, not at insertion time.\n\nArgs:\n    from_id: The source node identifier.\n    to_id: The target node identifier.\n    edge_kind: The edge semantics.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "BrewBuilder.set_entry",
              "line": 108,
              "signature": "def set_entry(self, node_id: str) -> BrewBuilder",
              "documentation": "Designate a node as an entry node.\n\nArgs:\n    node_id: The node identifier to designate as an entry.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "BrewBuilder.set_exit",
              "line": 120,
              "signature": "def set_exit(self, node_id: str) -> BrewBuilder",
              "documentation": "Designate a node as an exit node.\n\nArgs:\n    node_id: The node identifier to designate as an exit.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "BrewBuilder.with_topology",
              "line": 132,
              "signature": "def with_topology(self, topology: ModelTopology) -> BrewBuilder",
              "documentation": "Set the model topology for this brew.\n\nArgs:\n    topology: The model topology to associate with this brew.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "BrewBuilder.with_metadata",
              "line": 144,
              "signature": "def with_metadata(self, node_id: str, key: str, value: str) -> BrewBuilder",
              "documentation": "Add a metadata key-value pair to a specific node.\n\nIf the node does not exist, this method is a no-op.\n\nArgs:\n    node_id: The node to annotate.\n    key: The metadata key.\n    value: The metadata value.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "BrewBuilder.build",
              "line": 162,
              "signature": "def build(self) -> Brew",
              "documentation": "Build the brew, validating all structural invariants.\n\nReturns:\n    A validated Brew.\n\nRaises:\n    ForgeSchemaValidationError: If any invariant is violated."
            },
            {
              "name": "topological_sort",
              "line": 228,
              "signature": "def topological_sort(nodes: dict[str, BrewNode], edges: list[BrewEdge]) -> list[str]",
              "documentation": "Perform Kahn's algorithm for topological sort on the brew graph.\n\nOnly DataFlow and ControlFlow edges participate in cycle detection.\nErrorFlow edges are excluded because they may form intentional cycles.\n\nArgs:\n    nodes: The graph nodes keyed by ID string.\n    edges: The graph edges.\n\nReturns:\n    The sorted node IDs.\n\nRaises:\n    ForgeSchemaValidationError: If the graph contains a cycle."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/brew_resolver.py",
          "sha256": "87c16b6a6537a646d2c11b131dbe881b14b104bb07ef10f8a9f2e8345b38dc62",
          "artifactSha256": "217e2f1d8956707c5fd42b6a24e09016e6d8af492abf67e368ea5f2f23729cb8",
          "url": "/reference/source/forge-py/src/forge/core/brew_resolver.py.txt",
          "declarations": [
            {
              "name": "BrewResolutionErrorKind",
              "line": 44,
              "signature": "class BrewResolutionErrorKind(Enum)",
              "documentation": "The kind of resolution error encountered for a specific node."
            },
            {
              "name": "BrewResolutionError",
              "line": 55,
              "signature": "class BrewResolutionError()",
              "documentation": "A resolution error for a specific node in the brew graph.\n\nArgs:\n    node_id: The node that failed resolution.\n    error_kind: What went wrong."
            },
            {
              "name": "BrewResolutionError.to_dict",
              "line": 69,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "BrewEnvironment",
              "line": 82,
              "signature": "class BrewEnvironment()",
              "documentation": "The runtime environment against which a brew is resolved.\n\nArgs:\n    providers: Registered model providers, keyed by ``namespace:model``.\n    tools: Registered tool names available in this environment.\n    mcp_servers: Connected MCP server identifiers.\n    web_capabilities: Web capabilities available in this environment."
            },
            {
              "name": "BrewEnvironment.to_dict",
              "line": 97,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "BrewEnvironment.compute_hash",
              "line": 110,
              "signature": "def compute_hash(self) -> str",
              "documentation": "Compute a deterministic hash of this environment.\n\nReturns:\n    A hex-encoded SHA-256 hash string."
            },
            {
              "name": "ResolvedBrewPlan",
              "line": 121,
              "signature": "class ResolvedBrewPlan()",
              "documentation": "A frozen, validated execution plan produced by resolving a Brew.\n\nArgs:\n    plan_id: Deterministic identifier for this plan.\n    brew_id: The source brew's identifier.\n    brew_version: The source brew's version.\n    execution_order: Topologically sorted node IDs.\n    edges: The validated edges.\n    entry_nodes: Designated entry node IDs.\n    exit_nodes: Designated exit node IDs.\n    environment_hash: Hash of the environment used for resolution.\n    resolved_at: ISO 8601 timestamp of resolution."
            },
            {
              "name": "ResolvedBrewPlan.to_dict",
              "line": 146,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "BrewResolutionFailed",
              "line": 165,
              "signature": "class BrewResolutionFailed(Exception)",
              "documentation": "Raised when brew resolution fails with one or more errors.\n\nArgs:\n    errors: The list of resolution errors."
            },
            {
              "name": "BrewResolutionFailed.__init__",
              "line": 172,
              "signature": "def __init__(self, errors: list[BrewResolutionError]) -> None",
              "documentation": ""
            },
            {
              "name": "resolve",
              "line": 181,
              "signature": "def resolve(brew: Brew, env: BrewEnvironment) -> ResolvedBrewPlan",
              "documentation": "Resolve a Brew against a runtime environment.\n\nValidates every symbolic reference in the brew against the environment\nand collects all errors before returning.\n\nArgs:\n    brew: The dynamic brew to resolve.\n    env: The runtime environment.\n\nReturns:\n    A frozen ResolvedBrewPlan.\n\nRaises:\n    BrewResolutionFailed: If any node references cannot be resolved."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/config.py",
          "sha256": "f635578ffed23e7673dac184ad116436c88515e7b355bf679de11e2ee0958dbd",
          "artifactSha256": "dba648c69b689516bd966f5dbb739cedde4bda3e861917171b59ae5667097b73",
          "url": "/reference/source/forge-py/src/forge/core/config.py.txt",
          "declarations": [
            {
              "name": "GenerateOptions",
              "line": 20,
              "signature": "class GenerateOptions()",
              "documentation": "Options for text generation calls.\n\nControls model behavior during inference. All fields are optional;\nproviders use sensible defaults when not specified.\n\nANVIL Spec section 6.1: The cognitive interface accepts inference options.\n\nExample:\n    >>> opts = GenerateOptions()\n    >>> opts = opts.with_temperature(0.7).with_max_tokens(1024)\n    >>> opts.temperature\n    0.7\n    >>> opts.max_tokens\n    1024"
            },
            {
              "name": "GenerateOptions.with_temperature",
              "line": 46,
              "signature": "def with_temperature(self, temperature: float) -> GenerateOptions",
              "documentation": "Set the temperature.\n\nArgs:\n    temperature: Sampling temperature (0.0 = deterministic, 2.0 = max randomness).\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.with_max_tokens",
              "line": 58,
              "signature": "def with_max_tokens(self, max_tokens: int) -> GenerateOptions",
              "documentation": "Set the maximum tokens.\n\nArgs:\n    max_tokens: Maximum tokens to generate.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.with_top_p",
              "line": 70,
              "signature": "def with_top_p(self, top_p: float) -> GenerateOptions",
              "documentation": "Set the top-p value.\n\nArgs:\n    top_p: Top-p (nucleus) sampling threshold.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.with_stop_sequences",
              "line": 82,
              "signature": "def with_stop_sequences(self, sequences: list[str]) -> GenerateOptions",
              "documentation": "Set the stop sequences.\n\nArgs:\n    sequences: List of stop sequences.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.with_frequency_penalty",
              "line": 94,
              "signature": "def with_frequency_penalty(self, penalty: float) -> GenerateOptions",
              "documentation": "Set the frequency penalty.\n\nArgs:\n    penalty: Frequency penalty (-2.0 to 2.0).\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.with_presence_penalty",
              "line": 106,
              "signature": "def with_presence_penalty(self, penalty: float) -> GenerateOptions",
              "documentation": "Set the presence penalty.\n\nArgs:\n    penalty: Presence penalty (-2.0 to 2.0).\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.with_seed",
              "line": 118,
              "signature": "def with_seed(self, seed: int) -> GenerateOptions",
              "documentation": "Set the seed for deterministic generation.\n\nArgs:\n    seed: Random seed value.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.with_output_schema",
              "line": 130,
              "signature": "def with_output_schema(self, schema: JsonSchema) -> GenerateOptions",
              "documentation": "Set the output schema for structured generation.\n\nArgs:\n    schema: JSON Schema for structured output.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "GenerateOptions.to_dict",
              "line": 142,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary, omitting None values.\n\nReturns:\n    Dictionary representation with only set fields."
            },
            {
              "name": "GenerateOptions.from_dict",
              "line": 168,
              "signature": "def from_dict(data: dict[str, Any]) -> GenerateOptions",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized GenerateOptions."
            },
            {
              "name": "GenerateOptions.to_json",
              "line": 189,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string."
            },
            {
              "name": "GenerateOptions.from_json",
              "line": 194,
              "signature": "def from_json(data: str) -> GenerateOptions",
              "documentation": "Deserialize from JSON string."
            },
            {
              "name": "EmbedOptions",
              "line": 200,
              "signature": "class EmbedOptions()",
              "documentation": "Options for embedding calls.\n\nExample:\n    >>> opts = EmbedOptions()\n    >>> opts.model is None\n    True"
            },
            {
              "name": "EmbedOptions.with_model",
              "line": 212,
              "signature": "def with_model(self, model: str) -> EmbedOptions",
              "documentation": "Set the embedding model.\n\nArgs:\n    model: Model identifier.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "EmbedOptions.with_dimensions",
              "line": 224,
              "signature": "def with_dimensions(self, dimensions: int) -> EmbedOptions",
              "documentation": "Set the embedding dimensions.\n\nArgs:\n    dimensions: Number of dimensions.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "EmbedOptions.to_dict",
              "line": 236,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary, omitting None values.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "EmbedOptions.from_dict",
              "line": 250,
              "signature": "def from_dict(data: dict[str, Any]) -> EmbedOptions",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized EmbedOptions."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/error.py",
          "sha256": "1463e316f7c6090f85b1bfd041dbae575fb0f38e1d34ca5b55ceced41e6f7364",
          "artifactSha256": "3b8fda5af128f45493c8e294b412e2b336095e97ffa45eb2a8c03afd4ea5d2b4",
          "url": "/reference/source/forge-py/src/forge/core/error.py.txt",
          "declarations": [
            {
              "name": "ForgeError",
              "line": 16,
              "signature": "class ForgeError(Exception)",
              "documentation": "Base exception for all Forge SDK errors.\n\nEvery subclass includes actionable context: what failed, why, and what the\ndeveloper should check. No generic \"something went wrong\" messages."
            },
            {
              "name": "ForgeProviderNotFoundError",
              "line": 24,
              "signature": "class ForgeProviderNotFoundError(ForgeError)",
              "documentation": "A provider was not found in the registry.\n\nArgs:\n    provider_ref: The provider reference that was looked up (e.g., \"openai:gpt-4o\").\n\nExample:\n    >>> raise ForgeProviderNotFoundError(\"openai:gpt-4o\")\n    Traceback (most recent call last):\n        ...\n    forge.core.error.ForgeProviderNotFoundError: ...register..."
            },
            {
              "name": "ForgeProviderNotFoundError.__init__",
              "line": 37,
              "signature": "def __init__(self, provider_ref: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeInvalidProviderRefError",
              "line": 45,
              "signature": "class ForgeInvalidProviderRefError(ForgeError)",
              "documentation": "A provider reference string is malformed.\n\nArgs:\n    input_str: The malformed input string."
            },
            {
              "name": "ForgeInvalidProviderRefError.__init__",
              "line": 52,
              "signature": "def __init__(self, input_str: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeSchemaValidationError",
              "line": 60,
              "signature": "class ForgeSchemaValidationError(ForgeError)",
              "documentation": "JSON schema validation failed.\n\nArgs:\n    path: JSON pointer path to the failing field.\n    reason: Human-readable description of what was expected."
            },
            {
              "name": "ForgeSchemaValidationError.__init__",
              "line": 68,
              "signature": "def __init__(self, path: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "InvalidLifecycleTransitionError",
              "line": 74,
              "signature": "class InvalidLifecycleTransitionError(ForgeError)",
              "documentation": "An invalid lifecycle state transition was attempted.\n\nSee ANVIL Spec section 13.2 -- Lifecycle State Machine for valid transitions.\n\nArgs:\n    from_state: The current state name.\n    to_state: The attempted target state name.\n    reason: Why this transition is invalid."
            },
            {
              "name": "InvalidLifecycleTransitionError.__init__",
              "line": 85,
              "signature": "def __init__(self, from_state: str, to_state: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeToolInvocationDeniedError",
              "line": 95,
              "signature": "class ForgeToolInvocationDeniedError(ForgeError)",
              "documentation": "A tool invocation was denied due to insufficient capabilities.\n\nArgs:\n    tool_name: The tool that was being invoked.\n    agent_did: The agent's DID.\n    required_capability: The capability that was required but missing.\n    act_id: The ACT that was checked."
            },
            {
              "name": "ForgeToolInvocationDeniedError.__init__",
              "line": 105,
              "signature": "def __init__(self, tool_name: str, agent_did: str, required_capability: str, act_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeToolExecutionError",
              "line": 122,
              "signature": "class ForgeToolExecutionError(ForgeError)",
              "documentation": "A tool execution failed.\n\nArgs:\n    tool_name: The tool that failed.\n    reason: What went wrong."
            },
            {
              "name": "ForgeToolExecutionError.__init__",
              "line": 130,
              "signature": "def __init__(self, tool_name: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeJsonError",
              "line": 136,
              "signature": "class ForgeJsonError(ForgeError)",
              "documentation": "JSON serialization or deserialization failed.\n\nArgs:\n    message: The JSON error message."
            },
            {
              "name": "ForgeJsonError.__init__",
              "line": 143,
              "signature": "def __init__(self, message: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeMissingConfigError",
              "line": 148,
              "signature": "class ForgeMissingConfigError(ForgeError)",
              "documentation": "A required configuration value is missing.\n\nArgs:\n    field: The configuration field name.\n    hint: A hint about where to set this value."
            },
            {
              "name": "ForgeMissingConfigError.__init__",
              "line": 156,
              "signature": "def __init__(self, field: str, hint: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeStopConditionError",
              "line": 162,
              "signature": "class ForgeStopConditionError(ForgeError)",
              "documentation": "The stop condition limit was reached.\n\nArgs:\n    reason: Why generation was stopped.\n    steps: Number of steps completed.\n    tokens: Total tokens consumed."
            },
            {
              "name": "ForgeStopConditionError.__init__",
              "line": 171,
              "signature": "def __init__(self, reason: str, steps: int, tokens: int) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeTelemetryError",
              "line": 180,
              "signature": "class ForgeTelemetryError(ForgeError)",
              "documentation": "A telemetry emission failed. Non-fatal but logged.\n\nArgs:\n    reason: What went wrong with telemetry."
            },
            {
              "name": "ForgeTelemetryError.__init__",
              "line": 187,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeUnsupportedOperationError",
              "line": 192,
              "signature": "class ForgeUnsupportedOperationError(ForgeError)",
              "documentation": "The model does not support the requested operation.\n\nArgs:\n    model: The model identifier.\n    operation: The operation that was requested."
            },
            {
              "name": "ForgeUnsupportedOperationError.__init__",
              "line": 200,
              "signature": "def __init__(self, model: str, operation: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeProviderUnavailableError",
              "line": 206,
              "signature": "class ForgeProviderUnavailableError(ForgeError)",
              "documentation": "The provider exists but is not currently available."
            },
            {
              "name": "ForgeProviderUnavailableError.__init__",
              "line": 209,
              "signature": "def __init__(self, provider_ref: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeProviderAuthenticationFailedError",
              "line": 215,
              "signature": "class ForgeProviderAuthenticationFailedError(ForgeError)",
              "documentation": "Provider authentication failed."
            },
            {
              "name": "ForgeProviderAuthenticationFailedError.__init__",
              "line": 218,
              "signature": "def __init__(self, provider_ref: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeCapabilityUnsupportedError",
              "line": 224,
              "signature": "class ForgeCapabilityUnsupportedError(ForgeError)",
              "documentation": "The provider does not support a required runtime capability."
            },
            {
              "name": "ForgeCapabilityUnsupportedError.__init__",
              "line": 227,
              "signature": "def __init__(self, provider_ref: str, capability: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeProviderNegotiationFailedError",
              "line": 235,
              "signature": "class ForgeProviderNegotiationFailedError(ForgeError)",
              "documentation": "Provider runtime negotiation failed."
            },
            {
              "name": "ForgeProviderNegotiationFailedError.__init__",
              "line": 238,
              "signature": "def __init__(self, provider_ref: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeProviderSessionExpiredError",
              "line": 244,
              "signature": "class ForgeProviderSessionExpiredError(ForgeError)",
              "documentation": "The provider session expired before the requested action completed."
            },
            {
              "name": "ForgeProviderSessionExpiredError.__init__",
              "line": 247,
              "signature": "def __init__(self, provider_ref: str, session_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeProviderInterruptUnsupportedError",
              "line": 255,
              "signature": "class ForgeProviderInterruptUnsupportedError(ForgeError)",
              "documentation": "The provider does not support session interrupts."
            },
            {
              "name": "ForgeProviderInterruptUnsupportedError.__init__",
              "line": 258,
              "signature": "def __init__(self, provider_ref: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeProviderResumeUnsupportedError",
              "line": 263,
              "signature": "class ForgeProviderResumeUnsupportedError(ForgeError)",
              "documentation": "The provider does not support resuming sessions."
            },
            {
              "name": "ForgeProviderResumeUnsupportedError.__init__",
              "line": 266,
              "signature": "def __init__(self, provider_ref: str) -> None",
              "documentation": ""
            },
            {
              "name": "ForgeInternalError",
              "line": 271,
              "signature": "class ForgeInternalError(ForgeError)",
              "documentation": "An internal error that should not occur in normal operation.\n\nArgs:\n    message: Description of the internal error."
            },
            {
              "name": "ForgeInternalError.__init__",
              "line": 278,
              "signature": "def __init__(self, message: str) -> None",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/message.py",
          "sha256": "03402bf69ba4770958bd6c70169b00e8b4ed5b9b7db0cc5f2ff38cdc8224351e",
          "artifactSha256": "c0939b4f22466c3c766be02f26c7673ff33146ab46ef7dd96388bc82892fbf42",
          "url": "/reference/source/forge-py/src/forge/core/message.py.txt",
          "declarations": [
            {
              "name": "Role",
              "line": 18,
              "signature": "class Role(Enum)",
              "documentation": "The role of a message participant.\n\nANVIL Spec section 6.1: Four roles are defined: System (runtime instructions),\nUser (human input), Assistant (model output), and Tool (tool execution results).\n\nExample:\n    >>> Role.SYSTEM.value\n    'system'\n    >>> Role.ASSISTANT.value\n    'assistant'"
            },
            {
              "name": "Role.as_str",
              "line": 36,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the role as a lowercase string.\n\nReturns:\n    The lowercase role string."
            },
            {
              "name": "TextPart",
              "line": 50,
              "signature": "class TextPart()",
              "documentation": "Plain text content part.\n\nArgs:\n    text: The text content."
            },
            {
              "name": "ImagePart",
              "line": 62,
              "signature": "class ImagePart()",
              "documentation": "An image part (base64 or URL).\n\nArgs:\n    data: Base64-encoded image data, or a URL.\n    media_type: MIME type (e.g., \"image/png\")."
            },
            {
              "name": "ToolCallPart",
              "line": 76,
              "signature": "class ToolCallPart()",
              "documentation": "A tool call request from the model.\n\nArgs:\n    id: Unique identifier for this tool call.\n    name: The tool name.\n    arguments: JSON arguments for the tool."
            },
            {
              "name": "ToolResultPart",
              "line": 92,
              "signature": "class ToolResultPart()",
              "documentation": "A result from a tool execution.\n\nArgs:\n    tool_call_id: The tool call ID this result corresponds to.\n    name: The tool name.\n    content: The result content (typically stringified).\n    is_error: Whether the tool execution resulted in an error."
            },
            {
              "name": "ModelMessage",
              "line": 176,
              "signature": "class ModelMessage()",
              "documentation": "A message in a conversation, consisting of a role and content parts.\n\nANVIL Spec section 6.1: Messages carry the conversation history for inference.\n\nExample:\n    >>> msg = ModelMessage.text(Role.USER, \"What is 2+2?\")\n    >>> msg.role\n    <Role.USER: 'user'>\n    >>> len(msg.parts)\n    1"
            },
            {
              "name": "ModelMessage.new",
              "line": 193,
              "signature": "def new(role: Role, parts: list[MessagePart]) -> ModelMessage",
              "documentation": "Create a new message with the given role and content parts.\n\nArgs:\n    role: The message participant role.\n    parts: One or more content parts.\n\nReturns:\n    A new ModelMessage."
            },
            {
              "name": "ModelMessage.text",
              "line": 206,
              "signature": "def text(role: Role, text: str) -> ModelMessage",
              "documentation": "Create a simple text message.\n\nArgs:\n    role: The message participant role.\n    text: The text content.\n\nReturns:\n    A ModelMessage with a single TextPart.\n\nExample:\n    >>> msg = ModelMessage.text(Role.SYSTEM, \"You are a helpful assistant.\")\n    >>> msg.text_content()\n    'You are a helpful assistant.'"
            },
            {
              "name": "ModelMessage.tool_calls",
              "line": 223,
              "signature": "def tool_calls(self) -> list[ToolCallPart]",
              "documentation": "Extract all tool calls from this message.\n\nReturns:\n    List of ToolCallPart instances found in this message."
            },
            {
              "name": "ModelMessage.text_content",
              "line": 231,
              "signature": "def text_content(self) -> str",
              "documentation": "Return the concatenated text content of all text parts.\n\nReturns:\n    Concatenated text from all TextPart instances."
            },
            {
              "name": "ModelMessage.to_dict",
              "line": 239,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation suitable for JSON serialization."
            },
            {
              "name": "ModelMessage.from_dict",
              "line": 251,
              "signature": "def from_dict(data: dict[str, Any]) -> ModelMessage",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary with 'role' and 'parts' keys.\n\nReturns:\n    The deserialized ModelMessage."
            },
            {
              "name": "ModelMessage.to_json",
              "line": 264,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string representation."
            },
            {
              "name": "ModelMessage.from_json",
              "line": 273,
              "signature": "def from_json(data: str) -> ModelMessage",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized ModelMessage."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/model.py",
          "sha256": "918fcb914f00f4611621c2345adcf4969359f4af91c0a450c2c81b8e183aa606",
          "artifactSha256": "f2f73cd5c15c825c4caa8e176d2a7cfe3f4d0933648ada4ef9f1d4348555ffef",
          "url": "/reference/source/forge-py/src/forge/core/model.py.txt",
          "declarations": [
            {
              "name": "LanguageModel",
              "line": 23,
              "signature": "class LanguageModel(ABC)",
              "documentation": "The core language model interface.\n\nEvery LLM provider implements this abstract class. The interface is\nintentionally minimal: ``generate`` for buffered inference and ``stream``\nfor streaming.\n\nANVIL Spec section 6.1:\n    - ``infer()`` maps to ``generate``\n    - ``infer_stream()`` maps to ``stream``\n    - ``model_info()`` maps to ``model_id``, ``supports_*``\n\nExample:\n    Implement a custom provider::\n\n        class MyModel(LanguageModel):\n            @property\n            def model_id(self) -> str:\n                return \"my-model-v1\"\n\n            @property\n            def provider(self) -> str:\n                return \"custom\"\n\n            async def generate(self, messages, tools, options):\n                ...\n\n            async def stream(self, messages, tools, options):\n                ..."
            },
            {
              "name": "LanguageModel.model_id",
              "line": 56,
              "signature": "def model_id(self) -> str",
              "documentation": "Return the model identifier (e.g., \"gpt-4o\", \"claude-sonnet-4-5-20250929\").\n\nReturns:\n    The model identifier string."
            },
            {
              "name": "LanguageModel.provider",
              "line": 65,
              "signature": "def provider(self) -> str",
              "documentation": "Return the provider namespace (e.g., \"openai\", \"anthropic\").\n\nReturns:\n    The provider namespace string."
            },
            {
              "name": "LanguageModel.generate",
              "line": 73,
              "signature": "async def generate(self, messages: list[object], tools: list[ToolDefinition], options: GenerateOptions) -> GenerateResult",
              "documentation": "Generate a complete response from the model.\n\nArgs:\n    messages: The conversation history (list of ModelMessage).\n    tools: Available tool definitions for this inference call.\n    options: Generation options (temperature, max_tokens, etc.).\n\nReturns:\n    A GenerateResult containing the model's response, usage statistics,\n    and finish reason.\n\nRaises:\n    ForgeError: If the provider call fails, times out, or returns\n        an invalid response."
            },
            {
              "name": "LanguageModel.stream",
              "line": 96,
              "signature": "async def stream(self, messages: list[object], tools: list[ToolDefinition], options: GenerateOptions) -> AsyncGenerator[StreamChunk, None]",
              "documentation": "Stream a response from the model as chunks.\n\nArgs:\n    messages: The conversation history (list of ModelMessage).\n    tools: Available tool definitions for this inference call.\n    options: Generation options.\n\nYields:\n    StreamChunk instances representing the streamed response.\n\nRaises:\n    ForgeError: If the provider call fails."
            },
            {
              "name": "LanguageModel.supports_tool_calling",
              "line": 120,
              "signature": "def supports_tool_calling(self) -> bool",
              "documentation": "Return True if this model supports tool calling.\n\nReturns:\n    True by default."
            },
            {
              "name": "LanguageModel.supports_structured_output",
              "line": 129,
              "signature": "def supports_structured_output(self) -> bool",
              "documentation": "Return True if this model supports structured output (JSON mode).\n\nReturns:\n    True by default."
            },
            {
              "name": "LanguageModel.supports_image_input",
              "line": 138,
              "signature": "def supports_image_input(self) -> bool",
              "documentation": "Return True if this model supports image input.\n\nReturns:\n    False by default."
            },
            {
              "name": "LanguageModel.supports_streaming",
              "line": 147,
              "signature": "def supports_streaming(self) -> bool",
              "documentation": "Return True if this model supports streaming.\n\nReturns:\n    True by default."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/output.py",
          "sha256": "e989eae23d455fc1de5cc331ba256be4ac4b62ca639ec97d541f42e5da0e861f",
          "artifactSha256": "43f95697bc405edf5da1199cb5d5084add4a424c4330bad1936e95eab1fb491e",
          "url": "/reference/source/forge-py/src/forge/core/output.py.txt",
          "declarations": [
            {
              "name": "FinishReason",
              "line": 17,
              "signature": "class FinishReason(Enum)",
              "documentation": "The reason generation stopped.\n\nExample:\n    >>> FinishReason.STOP.is_complete()\n    True\n    >>> FinishReason.TOOL_CALLS.is_tool_call()\n    True"
            },
            {
              "name": "FinishReason.is_complete",
              "line": 34,
              "signature": "def is_complete(self) -> bool",
              "documentation": "Return True if generation completed normally (Stop or StopSequence).\n\nReturns:\n    True if this is a normal completion."
            },
            {
              "name": "FinishReason.is_tool_call",
              "line": 42,
              "signature": "def is_tool_call(self) -> bool",
              "documentation": "Return True if the model wants to call tools.\n\nReturns:\n    True if this is a tool call finish reason."
            },
            {
              "name": "Usage",
              "line": 56,
              "signature": "class Usage()",
              "documentation": "Token usage statistics from an inference call.\n\nArgs:\n    prompt_tokens: Tokens consumed by the input prompt.\n    completion_tokens: Tokens generated in the response.\n    total_tokens: Total tokens (prompt + completion)."
            },
            {
              "name": "Usage.zero",
              "line": 70,
              "signature": "def zero() -> Usage",
              "documentation": "Create a zero-usage instance.\n\nReturns:\n    Usage with all counters at zero."
            },
            {
              "name": "Usage.add",
              "line": 78,
              "signature": "def add(self, other: Usage) -> Usage",
              "documentation": "Add two usage statistics together.\n\nArgs:\n    other: The other Usage to add.\n\nReturns:\n    A new Usage with summed counters."
            },
            {
              "name": "Usage.to_dict",
              "line": 93,
              "signature": "def to_dict(self) -> dict[str, int]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "Usage.from_dict",
              "line": 106,
              "signature": "def from_dict(data: dict[str, Any]) -> Usage",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized Usage."
            },
            {
              "name": "Usage.to_json",
              "line": 121,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string."
            },
            {
              "name": "Usage.from_json",
              "line": 126,
              "signature": "def from_json(data: str) -> Usage",
              "documentation": "Deserialize from JSON string."
            },
            {
              "name": "GenerateResult",
              "line": 132,
              "signature": "class GenerateResult()",
              "documentation": "The result of a text generation call.\n\nContains the model's response message, the reason generation stopped,\nand token usage statistics.\n\nArgs:\n    message: The model's response message.\n    finish_reason: Why generation stopped.\n    usage: Token usage statistics."
            },
            {
              "name": "GenerateResult.text",
              "line": 148,
              "signature": "def text(self) -> str",
              "documentation": "Return the text content of the response message.\n\nReturns:\n    Concatenated text from all text parts."
            },
            {
              "name": "GenerateResult.has_tool_calls",
              "line": 156,
              "signature": "def has_tool_calls(self) -> bool",
              "documentation": "Return True if the response contains tool calls.\n\nReturns:\n    True if any parts are tool calls."
            },
            {
              "name": "GenerateResult.to_dict",
              "line": 164,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "GenerateResult.from_dict",
              "line": 177,
              "signature": "def from_dict(data: dict[str, Any]) -> GenerateResult",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized GenerateResult."
            },
            {
              "name": "GenerateResult.to_json",
              "line": 192,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string."
            },
            {
              "name": "GenerateResult.from_json",
              "line": 197,
              "signature": "def from_json(data: str) -> GenerateResult",
              "documentation": "Deserialize from JSON string."
            },
            {
              "name": "TextDelta",
              "line": 206,
              "signature": "class TextDelta()",
              "documentation": "A text content delta in a streaming response.\n\nArgs:\n    text: The text fragment."
            },
            {
              "name": "TextDelta.as_text",
              "line": 216,
              "signature": "def as_text(self) -> str | None",
              "documentation": "Extract the text content.\n\nReturns:\n    The text string."
            },
            {
              "name": "ToolCallDelta",
              "line": 226,
              "signature": "class ToolCallDelta()",
              "documentation": "A tool call delta (streaming tool arguments).\n\nArgs:\n    index: The tool call index (for parallel tool calls).\n    id: The tool call ID (may be empty until fully received).\n    name: The tool name (may be empty until fully received).\n    arguments_delta: Partial JSON arguments."
            },
            {
              "name": "ToolCallDelta.as_text",
              "line": 242,
              "signature": "def as_text(self) -> str | None",
              "documentation": "Extract text content (not applicable for tool deltas).\n\nReturns:\n    None."
            },
            {
              "name": "StreamDone",
              "line": 252,
              "signature": "class StreamDone()",
              "documentation": "The stream has finished.\n\nArgs:\n    finish_reason: Why generation stopped.\n    usage: Final usage statistics."
            },
            {
              "name": "StreamDone.as_text",
              "line": 264,
              "signature": "def as_text(self) -> str | None",
              "documentation": "Extract text content (not applicable for done chunks).\n\nReturns:\n    None."
            },
            {
              "name": "stream_chunk_text_delta",
              "line": 276,
              "signature": "def stream_chunk_text_delta(text: str) -> TextDelta",
              "documentation": "Create a text delta chunk.\n\nArgs:\n    text: The text fragment.\n\nReturns:\n    A TextDelta stream chunk."
            },
            {
              "name": "stream_chunk_done",
              "line": 288,
              "signature": "def stream_chunk_done(finish_reason: FinishReason, usage: Usage) -> StreamDone",
              "documentation": "Create a done chunk.\n\nArgs:\n    finish_reason: Why generation stopped.\n    usage: Final usage statistics.\n\nReturns:\n    A StreamDone chunk."
            },
            {
              "name": "is_text_delta",
              "line": 301,
              "signature": "def is_text_delta(chunk: StreamChunk) -> bool",
              "documentation": "Return True if the chunk is a text delta.\n\nArgs:\n    chunk: The stream chunk to check.\n\nReturns:\n    True if it is a TextDelta."
            },
            {
              "name": "is_done",
              "line": 313,
              "signature": "def is_done(chunk: StreamChunk) -> bool",
              "documentation": "Return True if the chunk is a done marker.\n\nArgs:\n    chunk: The stream chunk to check.\n\nReturns:\n    True if it is a StreamDone."
            },
            {
              "name": "stream_chunk_to_dict",
              "line": 325,
              "signature": "def stream_chunk_to_dict(chunk: StreamChunk) -> dict[str, Any]",
              "documentation": "Serialize a StreamChunk to a dictionary.\n\nArgs:\n    chunk: The chunk to serialize.\n\nReturns:\n    Dictionary with type discriminator."
            },
            {
              "name": "stream_chunk_from_dict",
              "line": 354,
              "signature": "def stream_chunk_from_dict(data: dict[str, Any]) -> StreamChunk",
              "documentation": "Deserialize a StreamChunk from a dictionary.\n\nArgs:\n    data: Dictionary with type discriminator.\n\nReturns:\n    The deserialized StreamChunk.\n\nRaises:\n    ValueError: If the type is unknown."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/provider.py",
          "sha256": "79890e8e26703deeba873014554c6b35743bc4c254851ae66b654e04b1014279",
          "artifactSha256": "40b01ddb60fc687d4e9a259cc48c654499dc41bc98d57a9e351c5182a1bd1f32",
          "url": "/reference/source/forge-py/src/forge/core/provider.py.txt",
          "declarations": [
            {
              "name": "ProviderRef",
              "line": 47,
              "signature": "class ProviderRef()",
              "documentation": "A parsed provider reference in ``namespace:model`` format.\n\nArgs:\n    namespace: The provider namespace (e.g., \"openai\").\n    model: The model name (e.g., \"gpt-4o\").\n    full: The full reference string.\n\nExample:\n    >>> ref = ProviderRef.parse(\"openai:gpt-4o\")\n    >>> ref.namespace\n    'openai'\n    >>> ref.model\n    'gpt-4o'\n    >>> ref.as_str()\n    'openai:gpt-4o'"
            },
            {
              "name": "ProviderRef.parse",
              "line": 70,
              "signature": "def parse(input_str: str) -> ProviderRef",
              "documentation": "Parse a provider reference string.\n\nArgs:\n    input_str: A string in ``namespace:model`` format.\n\nReturns:\n    The parsed ProviderRef.\n\nRaises:\n    ForgeInvalidProviderRefError: If the input does not contain exactly\n        one colon separator, or if either part is empty.\n\nExample:\n    >>> ProviderRef.parse(\"anthropic:claude-sonnet-4-5-20250929\").namespace\n    'anthropic'"
            },
            {
              "name": "ProviderRef.as_str",
              "line": 92,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the full reference string (e.g., \"openai:gpt-4o\").\n\nReturns:\n    The full provider reference string."
            },
            {
              "name": "ProviderRef.to_json",
              "line": 100,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON.\n\nReturns:\n    JSON string."
            },
            {
              "name": "ProviderRef.from_json",
              "line": 113,
              "signature": "def from_json(data: str) -> ProviderRef",
              "documentation": "Deserialize from JSON.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized ProviderRef."
            },
            {
              "name": "ProviderMetadata",
              "line": 131,
              "signature": "class ProviderMetadata()",
              "documentation": "Metadata about a registered provider.\n\nArgs:\n    name: Human-readable name.\n    namespace: Provider namespace (e.g., \"openai\").\n    supports_tool_calling: Whether the provider supports tool calling.\n    supports_structured_output: Whether the provider supports structured output.\n    supports_streaming: Whether the provider supports streaming.\n    supports_image_input: Whether the provider supports image input."
            },
            {
              "name": "ProviderMetadata.to_dict",
              "line": 153,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "RuntimeCapability",
              "line": 170,
              "signature": "class RuntimeCapability(str, Enum)",
              "documentation": "Advanced provider runtime capabilities beyond the mandatory baseline."
            },
            {
              "name": "RuntimeCapability.ordinal",
              "line": 185,
              "signature": "def ordinal(self) -> int",
              "documentation": ""
            },
            {
              "name": "ProviderRuntimeCapabilities",
              "line": 190,
              "signature": "class ProviderRuntimeCapabilities()",
              "documentation": "Runtime capability descriptor for a provider."
            },
            {
              "name": "ProviderRuntimeCapabilities.baseline",
              "line": 197,
              "signature": "def baseline() -> ProviderRuntimeCapabilities",
              "documentation": ""
            },
            {
              "name": "ProviderRuntimeCapabilities.with_capability",
              "line": 200,
              "signature": "def with_capability(self, capability: RuntimeCapability) -> ProviderRuntimeCapabilities",
              "documentation": ""
            },
            {
              "name": "ProviderRuntimeCapabilities.supports",
              "line": 211,
              "signature": "def supports(self, capability: RuntimeCapability) -> bool",
              "documentation": ""
            },
            {
              "name": "ProviderRuntimeCapabilities.to_dict",
              "line": 214,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": ""
            },
            {
              "name": "ProviderNegotiationRequest",
              "line": 222,
              "signature": "class ProviderNegotiationRequest()",
              "documentation": ""
            },
            {
              "name": "ProviderNegotiationResult",
              "line": 229,
              "signature": "class ProviderNegotiationResult()",
              "documentation": ""
            },
            {
              "name": "ProviderSessionState",
              "line": 235,
              "signature": "class ProviderSessionState(str, Enum)",
              "documentation": ""
            },
            {
              "name": "ProviderUsageSummary",
              "line": 248,
              "signature": "class ProviderUsageSummary()",
              "documentation": ""
            },
            {
              "name": "ProviderSessionEvent",
              "line": 255,
              "signature": "class ProviderSessionEvent()",
              "documentation": ""
            },
            {
              "name": "ProviderRegistry",
              "line": 262,
              "signature": "class ProviderRegistry()",
              "documentation": "Registry of language model providers.\n\nMaps ``ProviderRef`` strings to concrete ``LanguageModel`` implementations.\nAgents look up models through this registry rather than constructing\nprovider instances directly.\n\nANVIL Spec section 6.2: Provider Abstraction.\n\nExample:\n    >>> registry = ProviderRegistry()\n    >>> registry.is_empty()\n    True\n    >>> registry.get(\"openai:gpt-4o\") is None\n    True"
            },
            {
              "name": "ProviderRegistry.__init__",
              "line": 279,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "ProviderRegistry.register",
              "line": 283,
              "signature": "def register(self, provider_ref: str, model: LanguageModel) -> None",
              "documentation": "Register a language model with its provider reference.\n\nArgs:\n    provider_ref: The ``namespace:model`` reference string.\n    model: The LanguageModel implementation.\n\nRaises:\n    ForgeInvalidProviderRefError: If the reference is malformed."
            },
            {
              "name": "ProviderRegistry.register_with_runtime",
              "line": 297,
              "signature": "def register_with_runtime(self, provider_ref: str, model: LanguageModel, runtime_capabilities: ProviderRuntimeCapabilities) -> None",
              "documentation": ""
            },
            {
              "name": "ProviderRegistry.get",
              "line": 316,
              "signature": "def get(self, provider_ref: str) -> LanguageModel | None",
              "documentation": "Retrieve a registered language model.\n\nArgs:\n    provider_ref: The ``namespace:model`` reference string.\n\nReturns:\n    The registered model, or None if not found."
            },
            {
              "name": "ProviderRegistry.require",
              "line": 327,
              "signature": "def require(self, provider_ref: str) -> LanguageModel",
              "documentation": "Retrieve a registered language model, raising an error if not found.\n\nArgs:\n    provider_ref: The ``namespace:model`` reference string.\n\nReturns:\n    The registered model.\n\nRaises:\n    ForgeProviderNotFoundError: If the provider is not registered."
            },
            {
              "name": "ProviderRegistry.metadata",
              "line": 344,
              "signature": "def metadata(self, provider_ref: str) -> ProviderMetadata | None",
              "documentation": "Return metadata for a registered provider.\n\nArgs:\n    provider_ref: The ``namespace:model`` reference string.\n\nReturns:\n    The provider metadata, or None if not found."
            },
            {
              "name": "ProviderRegistry.list",
              "line": 355,
              "signature": "def list(self) -> list[str]",
              "documentation": "List all registered provider reference strings.\n\nReturns:\n    List of registered provider references."
            },
            {
              "name": "ProviderRegistry.is_empty",
              "line": 367,
              "signature": "def is_empty(self) -> bool",
              "documentation": "Return True if no providers are registered.\n\nReturns:\n    True if the registry is empty."
            },
            {
              "name": "ProviderRegistry.negotiate",
              "line": 375,
              "signature": "def negotiate(self, request: ProviderNegotiationRequest) -> ProviderNegotiationResult",
              "documentation": ""
            },
            {
              "name": "ProviderFamily",
              "line": 433,
              "signature": "class ProviderFamily(str, Enum)",
              "documentation": ""
            },
            {
              "name": "AuthStrategy",
              "line": 439,
              "signature": "class AuthStrategy(str, Enum)",
              "documentation": ""
            },
            {
              "name": "ProviderPreset",
              "line": 448,
              "signature": "class ProviderPreset()",
              "documentation": ""
            },
            {
              "name": "ProviderExecutionRequest",
              "line": 460,
              "signature": "class ProviderExecutionRequest()",
              "documentation": ""
            },
            {
              "name": "ProviderInstallOptions",
              "line": 474,
              "signature": "class ProviderInstallOptions()",
              "documentation": ""
            },
            {
              "name": "approved_coding_provider_presets",
              "line": 499,
              "signature": "def approved_coding_provider_presets() -> list[ProviderPreset]",
              "documentation": ""
            },
            {
              "name": "approved_direct_provider_presets",
              "line": 509,
              "signature": "def approved_direct_provider_presets() -> list[ProviderPreset]",
              "documentation": ""
            },
            {
              "name": "approved_gateway_provider_presets",
              "line": 528,
              "signature": "def approved_gateway_provider_presets() -> list[ProviderPreset]",
              "documentation": ""
            },
            {
              "name": "register_official_coding_providers",
              "line": 538,
              "signature": "def register_official_coding_providers(registry: ProviderRegistry, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> None",
              "documentation": ""
            },
            {
              "name": "register_default_core_direct_providers",
              "line": 637,
              "signature": "def register_default_core_direct_providers(registry: ProviderRegistry, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> list[str]",
              "documentation": ""
            },
            {
              "name": "register_openai_model",
              "line": 651,
              "signature": "def register_openai_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_anthropic_model",
              "line": 676,
              "signature": "def register_anthropic_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_google_model",
              "line": 701,
              "signature": "def register_google_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_xai_model",
              "line": 726,
              "signature": "def register_xai_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_deepseek_model",
              "line": 730,
              "signature": "def register_deepseek_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_mistral_model",
              "line": 734,
              "signature": "def register_mistral_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_cohere_model",
              "line": 738,
              "signature": "def register_cohere_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_groq_model",
              "line": 742,
              "signature": "def register_groq_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_moonshot_model",
              "line": 746,
              "signature": "def register_moonshot_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_zai_model",
              "line": 750,
              "signature": "def register_zai_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_minimax_model",
              "line": 754,
              "signature": "def register_minimax_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_openrouter_model",
              "line": 758,
              "signature": "def register_openrouter_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_bedrock_model",
              "line": 762,
              "signature": "def register_bedrock_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_vertex_ai_model",
              "line": 778,
              "signature": "def register_vertex_ai_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_microsoft_foundry_model",
              "line": 794,
              "signature": "def register_microsoft_foundry_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            },
            {
              "name": "register_foundry_model",
              "line": 810,
              "signature": "def register_foundry_model(registry: ProviderRegistry, model_id: str, *, env: ProviderEnvironment | None=None, generate: ProviderGenerateHook | None=None, stream: ProviderStreamHook | None=None) -> str",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/routing.py",
          "sha256": "3b5742e5dfeba17804286b7e03f0c120173de971098fbc4cdc215776f8d165ca",
          "artifactSha256": "23a4a872977b8cdc4bb8b20d3ae4fe50bc4f551a4b0268925e879d637732207d",
          "url": "/reference/source/forge-py/src/forge/core/routing.py.txt",
          "declarations": [
            {
              "name": "TaskMode",
              "line": 24,
              "signature": "class TaskMode(Enum)",
              "documentation": "The phase of work a model call serves.\n\nTask modes represent the different phases of agent work. The model\nrouter uses the task mode to select an appropriate model slot."
            },
            {
              "name": "TaskMode.as_role_name",
              "line": 36,
              "signature": "def as_role_name(self) -> str",
              "documentation": "Return the role name string corresponding to this task mode.\n\nReturns:\n    A string matching the lowercase variant name."
            },
            {
              "name": "ExecutionTopology",
              "line": 45,
              "signature": "class ExecutionTopology(Enum)",
              "documentation": "How the current model call fits into a larger execution pattern.\n\nExecution topology describes the concurrency pattern surrounding the\ncurrent inference call."
            },
            {
              "name": "ModelCapabilities",
              "line": 59,
              "signature": "class ModelCapabilities()",
              "documentation": "Capabilities of a resolved model.\n\nArgs:\n    text_generation: Whether the model supports text generation.\n    structured_output: Whether the model supports structured output.\n    tool_calling: Whether the model supports tool calling.\n    vision: Whether the model supports vision (image input).\n    audio: Whether the model supports audio input/output.\n    embedding: Whether the model supports embedding generation.\n    max_context_tokens: Maximum tokens in the context window.\n    max_output_tokens: Maximum tokens per response."
            },
            {
              "name": "ModelCapabilities.to_dict",
              "line": 82,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ModelCapabilities.from_dict",
              "line": 100,
              "signature": "def from_dict(data: dict[str, Any]) -> ModelCapabilities",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ModelCapabilities."
            },
            {
              "name": "RoutingContext",
              "line": 122,
              "signature": "class RoutingContext()",
              "documentation": "The context supplied to a ModelRouter when requesting a routing decision.\n\nAll fields are optional. A caller that provides no context gets the\ndefault slot from the topology.\n\nArgs:\n    domain: What subject area the task concerns.\n    task_mode: The phase of work.\n    execution_topology: Whether the call is sequential, parallel, etc.\n    tool_requirements: Tool capabilities the selected model must support.\n    role_override: Explicit role override."
            },
            {
              "name": "RoutingContext.to_dict",
              "line": 142,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "RoutingContext.from_dict",
              "line": 162,
              "signature": "def from_dict(data: dict[str, Any]) -> RoutingContext",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized RoutingContext."
            },
            {
              "name": "RoutingContext.to_json",
              "line": 185,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string."
            },
            {
              "name": "RoutingContext.from_json",
              "line": 194,
              "signature": "def from_json(data: str) -> RoutingContext",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized RoutingContext."
            },
            {
              "name": "ResolvedRoute",
              "line": 207,
              "signature": "class ResolvedRoute()",
              "documentation": "A routing decision: which slot was selected and why.\n\nArgs:\n    slot_role: The role name of the selected slot.\n    provider: The specific ProviderRef to use.\n    model_capabilities: The model capabilities of the selected provider.\n    fallback_used: Whether a fallback model was selected."
            },
            {
              "name": "ResolvedRoute.to_dict",
              "line": 222,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ResolvedRoute.from_dict",
              "line": 236,
              "signature": "def from_dict(data: dict[str, Any]) -> ResolvedRoute",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ResolvedRoute."
            },
            {
              "name": "ModelRouter",
              "line": 255,
              "signature": "class ModelRouter(ABC)",
              "documentation": "Selects a model slot from a topology given a routing context.\n\nImplementations range from trivial (always return default) to\nsophisticated (heuristic classification, budget-aware optimization)."
            },
            {
              "name": "ModelRouter.name",
              "line": 263,
              "signature": "def name(self) -> str",
              "documentation": "Return the name of this routing strategy.\n\nReturns:\n    The strategy name string."
            },
            {
              "name": "ModelRouter.route",
              "line": 271,
              "signature": "def route(self, context: RoutingContext, topology: ModelTopology) -> ResolvedRoute",
              "documentation": "Select a slot from the topology.\n\nArgs:\n    context: The routing context describing the current task.\n    topology: The model topology to select from.\n\nReturns:\n    A ResolvedRoute identifying the selected slot and provider.\n\nRaises:\n    ForgeSchemaValidationError: If routing fails."
            },
            {
              "name": "DefaultModelRouter",
              "line": 290,
              "signature": "class DefaultModelRouter(ModelRouter)",
              "documentation": "The default model router shipped with Forge.\n\nImplements a cascading match strategy:\n\n1. If ``context.role_override`` is set, return that slot directly.\n2. If the topology has a slot whose role matches ``context.domain``,\n   return it.\n3. If the topology has a slot whose role matches ``context.task_mode``,\n   return it.\n4. Otherwise, return the \"default\" slot."
            },
            {
              "name": "DefaultModelRouter.name",
              "line": 303,
              "signature": "def name(self) -> str",
              "documentation": "Return \"default\" as the strategy name.\n\nReturns:\n    The string \"default\"."
            },
            {
              "name": "DefaultModelRouter.route",
              "line": 311,
              "signature": "def route(self, context: RoutingContext, topology: ModelTopology) -> ResolvedRoute",
              "documentation": "Route using the cascading match strategy.\n\nArgs:\n    context: The routing context.\n    topology: The model topology.\n\nReturns:\n    A ResolvedRoute with the selected slot's primary model.\n\nRaises:\n    ForgeSchemaValidationError: If an explicit role override\n        references a role that does not exist."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/schema.py",
          "sha256": "ade6156e26eeecc31f4ba3027cd1559a826b1c8b4dea4d17397be184c0d58679",
          "artifactSha256": "a6c95bef8c071fa18f9b38b9406d883a5bbc0ec69570237475111785cde2d6ba",
          "url": "/reference/source/forge-py/src/forge/core/schema.py.txt",
          "declarations": [
            {
              "name": "SchemaType",
              "line": 26,
              "signature": "class SchemaType(Enum)",
              "documentation": "The primitive JSON Schema types.\n\nExample:\n    >>> SchemaType.STRING.value\n    'string'"
            },
            {
              "name": "JsonSchema",
              "line": 44,
              "signature": "class JsonSchema()",
              "documentation": "A JSON Schema definition for tool parameters and structured output.\n\nExample:\n    >>> schema = JsonSchema.object_().property(\"name\", JsonSchema.string())\n    >>> schema.required_(\"name\")  # doctest: +ELLIPSIS\n    JsonSchema(...)"
            },
            {
              "name": "JsonSchema.string",
              "line": 68,
              "signature": "def string() -> JsonSchema",
              "documentation": "Create a string schema.\n\nReturns:\n    A JsonSchema with type STRING."
            },
            {
              "name": "JsonSchema.number",
              "line": 77,
              "signature": "def number() -> JsonSchema",
              "documentation": "Create a number schema.\n\nReturns:\n    A JsonSchema with type NUMBER."
            },
            {
              "name": "JsonSchema.integer",
              "line": 86,
              "signature": "def integer() -> JsonSchema",
              "documentation": "Create an integer schema.\n\nReturns:\n    A JsonSchema with type INTEGER."
            },
            {
              "name": "JsonSchema.boolean",
              "line": 95,
              "signature": "def boolean() -> JsonSchema",
              "documentation": "Create a boolean schema.\n\nReturns:\n    A JsonSchema with type BOOLEAN."
            },
            {
              "name": "JsonSchema.array",
              "line": 104,
              "signature": "def array() -> JsonSchema",
              "documentation": "Create an array schema.\n\nReturns:\n    A JsonSchema with type ARRAY."
            },
            {
              "name": "JsonSchema.object_",
              "line": 113,
              "signature": "def object_() -> JsonSchema",
              "documentation": "Create an object schema.\n\nReturns:\n    A JsonSchema with type OBJECT.\n\nNote:\n    Named ``object_`` to avoid shadowing Python's built-in ``object``."
            },
            {
              "name": "JsonSchema.null",
              "line": 125,
              "signature": "def null() -> JsonSchema",
              "documentation": "Create a null schema.\n\nReturns:\n    A JsonSchema with type NULL."
            },
            {
              "name": "JsonSchema.set_description",
              "line": 135,
              "signature": "def set_description(self, desc: str) -> JsonSchema",
              "documentation": "Set the description.\n\nArgs:\n    desc: Human-readable description.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.property",
              "line": 147,
              "signature": "def property(self, name: str, schema: JsonSchema) -> JsonSchema",
              "documentation": "Add a property (for object schemas).\n\nArgs:\n    name: Property name.\n    schema: Property schema.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.required_",
              "line": 162,
              "signature": "def required_(self, name: str) -> JsonSchema",
              "documentation": "Mark a property as required (for object schemas).\n\nArgs:\n    name: Property name to mark as required.\n\nReturns:\n    Self for chaining.\n\nNote:\n    Named ``required_`` to avoid shadowing the concept name."
            },
            {
              "name": "JsonSchema.items_schema",
              "line": 179,
              "signature": "def items_schema(self, schema: JsonSchema) -> JsonSchema",
              "documentation": "Set the items schema (for array schemas).\n\nArgs:\n    schema: Schema for array items.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.set_enum_values",
              "line": 191,
              "signature": "def set_enum_values(self, values: list[Any]) -> JsonSchema",
              "documentation": "Set allowed enum values.\n\nArgs:\n    values: List of allowed values.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.set_minimum",
              "line": 203,
              "signature": "def set_minimum(self, min_val: float) -> JsonSchema",
              "documentation": "Set the minimum numeric value.\n\nArgs:\n    min_val: Minimum allowed value.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.set_maximum",
              "line": 215,
              "signature": "def set_maximum(self, max_val: float) -> JsonSchema",
              "documentation": "Set the maximum numeric value.\n\nArgs:\n    max_val: Maximum allowed value.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.set_min_length",
              "line": 227,
              "signature": "def set_min_length(self, length: int) -> JsonSchema",
              "documentation": "Set the minimum string length.\n\nArgs:\n    length: Minimum string length.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.set_max_length",
              "line": 239,
              "signature": "def set_max_length(self, length: int) -> JsonSchema",
              "documentation": "Set the maximum string length.\n\nArgs:\n    length: Maximum string length.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.set_additional_properties",
              "line": 251,
              "signature": "def set_additional_properties(self, allowed: bool) -> JsonSchema",
              "documentation": "Set whether additional properties are allowed (for object schemas).\n\nArgs:\n    allowed: Whether to allow additional properties.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "JsonSchema.validate",
              "line": 265,
              "signature": "def validate(self, value: Any) -> None",
              "documentation": "Validate a JSON-compatible value against this schema.\n\nArgs:\n    value: The value to validate (Python object, not raw JSON string).\n\nRaises:\n    ForgeSchemaValidationError: If validation fails.\n\nExample:\n    >>> schema = JsonSchema.string()\n    >>> schema.validate(\"hello\")  # passes\n    >>> try:\n    ...     schema.validate(42)\n    ... except ForgeSchemaValidationError:\n    ...     print(\"validation failed\")\n    validation failed"
            },
            {
              "name": "JsonSchema.to_dict",
              "line": 415,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary compatible with JSON Schema.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "JsonSchema.from_dict",
              "line": 445,
              "signature": "def from_dict(data: dict[str, Any]) -> JsonSchema",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation of a JSON Schema.\n\nReturns:\n    The deserialized JsonSchema."
            },
            {
              "name": "JsonSchema.to_json",
              "line": 471,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string representation."
            },
            {
              "name": "JsonSchema.from_json",
              "line": 480,
              "signature": "def from_json(data: str) -> JsonSchema",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized JsonSchema."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/telemetry.py",
          "sha256": "527738083224d5d969d059dee445d628d492c6027a806be24d36febe34466595",
          "artifactSha256": "de6ed7e0bab8bf4edb6741db70d53ec224d0f437c7c5502ad8652ff6dab4fa01",
          "url": "/reference/source/forge-py/src/forge/core/telemetry.py.txt",
          "declarations": [
            {
              "name": "SpanAttributeString",
              "line": 25,
              "signature": "class SpanAttributeString()",
              "documentation": "A string span attribute value."
            },
            {
              "name": "SpanAttributeInt",
              "line": 32,
              "signature": "class SpanAttributeInt()",
              "documentation": "An integer span attribute value."
            },
            {
              "name": "SpanAttributeFloat",
              "line": 39,
              "signature": "class SpanAttributeFloat()",
              "documentation": "A float span attribute value."
            },
            {
              "name": "SpanAttributeBool",
              "line": 46,
              "signature": "class SpanAttributeBool()",
              "documentation": "A boolean span attribute value."
            },
            {
              "name": "to_span_attribute",
              "line": 55,
              "signature": "def to_span_attribute(value: str | int | float | bool) -> SpanAttribute",
              "documentation": "Convert a Python primitive to a SpanAttribute.\n\nArgs:\n    value: The primitive value to wrap.\n\nReturns:\n    The wrapped SpanAttribute.\n\nRaises:\n    TypeError: If the value type is not supported."
            },
            {
              "name": "span_attribute_value",
              "line": 79,
              "signature": "def span_attribute_value(attr: SpanAttribute) -> str | int | float | bool",
              "documentation": "Extract the raw value from a SpanAttribute.\n\nArgs:\n    attr: The span attribute.\n\nReturns:\n    The underlying primitive value."
            },
            {
              "name": "SpanStatusCode",
              "line": 93,
              "signature": "class SpanStatusCode(Enum)",
              "documentation": "Span status code following OpenTelemetry conventions."
            },
            {
              "name": "SpanStatusUnset",
              "line": 102,
              "signature": "class SpanStatusUnset()",
              "documentation": "Status not set (default)."
            },
            {
              "name": "SpanStatusOk",
              "line": 109,
              "signature": "class SpanStatusOk()",
              "documentation": "Operation completed successfully."
            },
            {
              "name": "SpanStatusError",
              "line": 116,
              "signature": "class SpanStatusError()",
              "documentation": "Operation failed with an error.\n\nArgs:\n    message: Error message."
            },
            {
              "name": "ForgeSpan",
              "line": 133,
              "signature": "class ForgeSpan()",
              "documentation": "A telemetry span representing a unit of work.\n\nSpans follow OpenTelemetry semantics: they have a name, start/end times,\nattributes, and optional parent span ID for distributed tracing.\n\nArgs:\n    name: The span name (use dotted notation: \"forge.agent.generate\").\n\nExample:\n    >>> span = ForgeSpan(\"forge.agent.tool_loop.step\")\n    >>> span.name\n    'forge.agent.tool_loop.step'"
            },
            {
              "name": "ForgeSpan.set_attribute",
              "line": 156,
              "signature": "def set_attribute(self, key: str, value: str | int | float | bool) -> None",
              "documentation": "Set an attribute on this span.\n\nArgs:\n    key: The attribute key.\n    value: The attribute value."
            },
            {
              "name": "ForgeSpan.end",
              "line": 165,
              "signature": "def end(self) -> None",
              "documentation": "Mark this span as completed. End time is set to now."
            },
            {
              "name": "ForgeSpan.end_with_error",
              "line": 169,
              "signature": "def end_with_error(self, message: str) -> None",
              "documentation": "Mark this span as completed with an error.\n\nArgs:\n    message: The error message."
            },
            {
              "name": "ForgeSpan.with_parent",
              "line": 178,
              "signature": "def with_parent(self, parent_id: str) -> ForgeSpan",
              "documentation": "Set the parent span ID.\n\nArgs:\n    parent_id: The parent span's ID.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "ForgeEvent",
              "line": 192,
              "signature": "class ForgeEvent()",
              "documentation": "A telemetry event (a point-in-time annotation within a span).\n\nEvents record significant moments: tool invocations, lifecycle transitions,\nerror occurrences, etc.\n\nArgs:\n    name: The event name.\n\nExample:\n    >>> event = ForgeEvent(\"forge.tool.invoked\")\n    >>> event.set_attribute(\"tool.name\", \"search\")"
            },
            {
              "name": "ForgeEvent.set_attribute",
              "line": 210,
              "signature": "def set_attribute(self, key: str, value: str | int | float | bool) -> None",
              "documentation": "Set an attribute on this event.\n\nArgs:\n    key: The attribute key.\n    value: The attribute value."
            },
            {
              "name": "TelemetryEmitter",
              "line": 222,
              "signature": "class TelemetryEmitter(ABC)",
              "documentation": "Abstract base class for emitting telemetry data.\n\nImplementations can send spans and events to OpenTelemetry collectors,\nlog files, or in-memory buffers for testing."
            },
            {
              "name": "TelemetryEmitter.emit_span",
              "line": 230,
              "signature": "def emit_span(self, span: ForgeSpan) -> None",
              "documentation": "Emit a completed span.\n\nArgs:\n    span: The span to emit."
            },
            {
              "name": "TelemetryEmitter.emit_event",
              "line": 238,
              "signature": "def emit_event(self, event: ForgeEvent) -> None",
              "documentation": "Emit an event.\n\nArgs:\n    event: The event to emit."
            },
            {
              "name": "NoopEmitter",
              "line": 246,
              "signature": "class NoopEmitter(TelemetryEmitter)",
              "documentation": "A no-op telemetry emitter that discards all data."
            },
            {
              "name": "NoopEmitter.emit_span",
              "line": 249,
              "signature": "def emit_span(self, span: ForgeSpan) -> None",
              "documentation": "Discard the span."
            },
            {
              "name": "NoopEmitter.emit_event",
              "line": 252,
              "signature": "def emit_event(self, event: ForgeEvent) -> None",
              "documentation": "Discard the event."
            },
            {
              "name": "RecordingEmitter",
              "line": 256,
              "signature": "class RecordingEmitter(TelemetryEmitter)",
              "documentation": "A telemetry emitter that records all spans and events for testing.\n\nExample:\n    >>> emitter = RecordingEmitter()\n    >>> span = ForgeSpan(\"test\")\n    >>> span.end()\n    >>> emitter.emit_span(span)\n    >>> len(emitter.spans)\n    1"
            },
            {
              "name": "RecordingEmitter.__init__",
              "line": 268,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "RecordingEmitter.emit_span",
              "line": 272,
              "signature": "def emit_span(self, span: ForgeSpan) -> None",
              "documentation": "Record the span.\n\nArgs:\n    span: The span to record."
            },
            {
              "name": "RecordingEmitter.emit_event",
              "line": 280,
              "signature": "def emit_event(self, event: ForgeEvent) -> None",
              "documentation": "Record the event.\n\nArgs:\n    event: The event to record."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/tool.py",
          "sha256": "ccb5ad8af2baf0c71bbfbb7b12855a6aa3a434ce1a8c347432d59b42a2b6d338",
          "artifactSha256": "a6f3826d2fe6d66d2049b6bab6cfa953734aa2c12f597d98e2cad42891e66400",
          "url": "/reference/source/forge-py/src/forge/core/tool.py.txt",
          "declarations": [
            {
              "name": "ToolTier",
              "line": 20,
              "signature": "class ToolTier(Enum)",
              "documentation": "Tool tier classification per ANVIL Spec section 8.1.\n\nThe three tiers determine where a tool executes, how it is discovered,\nand what authorization is required.\n\n========= ========= ==================== ===========================\nTier      Name      Location             Auth\n========= ========= ==================== ===========================\n1         Platform  Inside sandbox       Always available\n2         External  Outside sandbox      Arsenal ACT required\n3         Embedded  Inside WASM module   Module-scoped\n========= ========= ==================== ==========================="
            },
            {
              "name": "ToolTier.requires_authorization",
              "line": 39,
              "signature": "def requires_authorization(self) -> bool",
              "documentation": "Return True if this tier requires Arsenal ACT authorization.\n\nOnly Tier 2 (External) tools require ACT checks. Platform tools are\nalways available, and embedded tools are sandbox-confined.\n\nReturns:\n    True if authorization is required."
            },
            {
              "name": "ToolTier.as_str",
              "line": 50,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the tier as a string.\n\nReturns:\n    Lowercase tier name."
            },
            {
              "name": "ToolDefinition",
              "line": 64,
              "signature": "class ToolDefinition()",
              "documentation": "Definition of a tool that an agent can invoke.\n\nANVIL Spec section 8.2: Every tool has a unique name, human-readable\ndescription, a JSON Schema for its parameters, and a tier classification.\n\nArgs:\n    name: Unique tool name.\n    description: Human-readable description shown to the model.\n    parameters: JSON Schema defining the tool's parameters.\n    tier: Tier classification (Platform/External/Embedded).\n\nExample:\n    >>> from forge.core.schema import JsonSchema\n    >>> tool = ToolDefinition(\n    ...     name=\"get_weather\",\n    ...     description=\"Get weather for a city\",\n    ...     parameters=JsonSchema.object_(),\n    ...     tier=ToolTier.EXTERNAL,\n    ... )\n    >>> tool.name\n    'get_weather'"
            },
            {
              "name": "ToolDefinition.builder",
              "line": 94,
              "signature": "def builder(name: str) -> ToolDefinitionBuilder",
              "documentation": "Create a builder for constructing a ToolDefinition.\n\nArgs:\n    name: The unique tool name.\n\nReturns:\n    A ToolDefinitionBuilder."
            },
            {
              "name": "ToolDefinition.to_dict",
              "line": 105,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ToolDefinition.from_dict",
              "line": 119,
              "signature": "def from_dict(data: dict[str, Any]) -> ToolDefinition",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ToolDefinition."
            },
            {
              "name": "ToolDefinition.to_json",
              "line": 135,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string."
            },
            {
              "name": "ToolDefinition.from_json",
              "line": 144,
              "signature": "def from_json(data: str) -> ToolDefinition",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized ToolDefinition."
            },
            {
              "name": "ToolDefinitionBuilder",
              "line": 156,
              "signature": "class ToolDefinitionBuilder()",
              "documentation": "Builder for ToolDefinition.\n\nArgs:\n    name: The tool name."
            },
            {
              "name": "ToolDefinitionBuilder.__init__",
              "line": 163,
              "signature": "def __init__(self, name: str) -> None",
              "documentation": ""
            },
            {
              "name": "ToolDefinitionBuilder.description",
              "line": 169,
              "signature": "def description(self, desc: str) -> ToolDefinitionBuilder",
              "documentation": "Set the tool description.\n\nArgs:\n    desc: Human-readable description.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "ToolDefinitionBuilder.parameters",
              "line": 181,
              "signature": "def parameters(self, schema: JsonSchema) -> ToolDefinitionBuilder",
              "documentation": "Set the parameter schema.\n\nArgs:\n    schema: JSON Schema for parameters.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "ToolDefinitionBuilder.tier",
              "line": 193,
              "signature": "def tier(self, tier: ToolTier) -> ToolDefinitionBuilder",
              "documentation": "Set the tool tier classification.\n\nArgs:\n    tier: The tool tier.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "ToolDefinitionBuilder.build",
              "line": 205,
              "signature": "def build(self) -> ToolDefinition",
              "documentation": "Build the ToolDefinition.\n\nReturns:\n    The constructed ToolDefinition."
            },
            {
              "name": "ToolCall",
              "line": 220,
              "signature": "class ToolCall()",
              "documentation": "A tool invocation request from the model.\n\nGenerated by the model during inference when it decides to call a tool.\n\nArgs:\n    id: Unique identifier for this call (used to match with results).\n    name: The tool name being invoked.\n    arguments: JSON arguments for the tool."
            },
            {
              "name": "ToolCall.to_dict",
              "line": 235,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ToolCall.from_dict",
              "line": 244,
              "signature": "def from_dict(data: dict[str, Any]) -> ToolCall",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ToolCall."
            },
            {
              "name": "ToolCall.to_json",
              "line": 255,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string."
            },
            {
              "name": "ToolCall.from_json",
              "line": 260,
              "signature": "def from_json(data: str) -> ToolCall",
              "documentation": "Deserialize from JSON string."
            },
            {
              "name": "ToolResult",
              "line": 266,
              "signature": "class ToolResult()",
              "documentation": "The result of a tool execution.\n\nReturned to the model as context for the next inference step.\n\nArgs:\n    tool_call_id: The tool call ID this result corresponds to.\n    name: The tool name.\n    content: The result content (stringified).\n    is_error: Whether the tool execution resulted in an error."
            },
            {
              "name": "ToolResult.to_dict",
              "line": 283,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary."
            },
            {
              "name": "ToolResult.from_dict",
              "line": 293,
              "signature": "def from_dict(data: dict[str, Any]) -> ToolResult",
              "documentation": "Deserialize from a dictionary."
            },
            {
              "name": "ToolResult.to_json",
              "line": 302,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string."
            },
            {
              "name": "ToolResult.from_json",
              "line": 307,
              "signature": "def from_json(data: str) -> ToolResult",
              "documentation": "Deserialize from JSON string."
            },
            {
              "name": "ToolApprovalApprove",
              "line": 313,
              "signature": "class ToolApprovalApprove()",
              "documentation": "The tool call is approved as-is.\n\nANVIL Spec section 8.6: Approval step in the tool execution lifecycle."
            },
            {
              "name": "ToolApprovalDeny",
              "line": 323,
              "signature": "class ToolApprovalDeny()",
              "documentation": "The tool call is denied with a reason.\n\nANVIL Spec section 8.6: Approval step in the tool execution lifecycle.\n\nArgs:\n    reason: Why the tool call was denied."
            },
            {
              "name": "ToolApprovalModify",
              "line": 337,
              "signature": "class ToolApprovalModify()",
              "documentation": "The tool call is approved but with modified arguments.\n\nANVIL Spec section 8.6: Approval step in the tool execution lifecycle.\n\nArgs:\n    arguments: The modified arguments to use instead."
            },
            {
              "name": "tool_approval_to_dict",
              "line": 353,
              "signature": "def tool_approval_to_dict(approval: ToolApproval) -> dict[str, Any]",
              "documentation": "Serialize a ToolApproval to a dictionary.\n\nArgs:\n    approval: The approval decision.\n\nReturns:\n    Dictionary representation with type discriminator."
            },
            {
              "name": "tool_approval_from_dict",
              "line": 372,
              "signature": "def tool_approval_from_dict(data: dict[str, Any]) -> ToolApproval",
              "documentation": "Deserialize a ToolApproval from a dictionary.\n\nArgs:\n    data: Dictionary with type discriminator.\n\nReturns:\n    The deserialized ToolApproval.\n\nRaises:\n    ValueError: If the type is unknown."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/topology.py",
          "sha256": "1837aebb8f262829daeb1acb69d0d5cf54c98522726dd0e3834a3d246e901d29",
          "artifactSha256": "6393ee7f082a617c1f9e5266affda8ebe481a11171168c0e17f69fbb896ad220",
          "url": "/reference/source/forge-py/src/forge/core/topology.py.txt",
          "declarations": [
            {
              "name": "CostPreference",
              "line": 29,
              "signature": "class CostPreference(Enum)",
              "documentation": "Cost preference for a model slot.\n\nGuides the router's cost-sensitivity when selecting among multiple\neligible slots or fallback candidates."
            },
            {
              "name": "CostPreference.as_str",
              "line": 40,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the preference as a lowercase string.\n\nReturns:\n    Lowercase preference name."
            },
            {
              "name": "LatencyPreference",
              "line": 49,
              "signature": "class LatencyPreference(Enum)",
              "documentation": "Latency preference for a model slot.\n\nGuides the router's latency-sensitivity when selecting among multiple\neligible slots or fallback candidates."
            },
            {
              "name": "LatencyPreference.as_str",
              "line": 60,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the preference as a lowercase string.\n\nReturns:\n    Lowercase preference name."
            },
            {
              "name": "ModelSlot",
              "line": 70,
              "signature": "class ModelSlot()",
              "documentation": "A named model assignment within a topology.\n\nEach slot represents a role that a model fills (e.g., \"planner\",\n\"coder\", \"classifier\"). The slot carries the primary model reference,\nan ordered fallback list, capability requirements, and optional\nArsenal scope narrowing.\n\nANVIL Spec Reference: ANVIL Spec SS6.2 -- Provider Abstraction.\n\nArgs:\n    role: The role name for this slot.\n    primary: Primary model for this slot.\n    fallbacks: Ordered fallback models.\n    required_capabilities: Runtime capabilities required for this slot.\n    cost_preference: Optional cost preference for the router.\n    latency_preference: Optional latency preference for the router.\n    arsenal_scope_narrowing: Optional Arsenal scope narrowing."
            },
            {
              "name": "ModelSlot.to_dict",
              "line": 98,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ModelSlot.from_dict",
              "line": 119,
              "signature": "def from_dict(data: dict[str, Any]) -> ModelSlot",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ModelSlot."
            },
            {
              "name": "ModelTopology",
              "line": 148,
              "signature": "class ModelTopology()",
              "documentation": "The complete model assignment for an agent or Brew.\n\nA topology is a named collection of ``ModelSlot`` entries keyed by role.\nEvery topology must contain exactly one slot with ``role == \"default\"``.\nSlots are stored sorted by role name for deterministic serialization.\n\nANVIL Spec Reference: ANVIL Spec SS6.1-6.2.\n\nArgs:\n    name: Human-readable name for this topology.\n    slots: The model slots keyed by role name.\n    default_role: The role name designated as the default."
            },
            {
              "name": "ModelTopology.single",
              "line": 168,
              "signature": "def single(provider_ref: ProviderRef) -> ModelTopology",
              "documentation": "Create a single-model topology with one \"default\" slot.\n\nThis is the backward-compatible constructor for agents that use a\nsingle model for everything.\n\nArgs:\n    provider_ref: The provider reference for the sole model.\n\nReturns:\n    A ModelTopology with one default slot.\n\nExample:\n    >>> ref = ProviderRef.parse(\"openai:gpt-4o\")\n    >>> topology = ModelTopology.single(ref)\n    >>> topology.default_slot().role\n    'default'"
            },
            {
              "name": "ModelTopology.builder",
              "line": 194,
              "signature": "def builder() -> TopologyBuilder",
              "documentation": "Return a builder for multi-slot topologies.\n\nReturns:\n    A new TopologyBuilder."
            },
            {
              "name": "ModelTopology.default_slot",
              "line": 202,
              "signature": "def default_slot(self) -> ModelSlot",
              "documentation": "Return the default slot.\n\nThis method is guaranteed to return a valid slot because the\ntopology is validated at construction time.\n\nReturns:\n    The default ModelSlot."
            },
            {
              "name": "ModelTopology.slot_for_role",
              "line": 217,
              "signature": "def slot_for_role(self, role: str) -> ModelSlot",
              "documentation": "Return the slot for the given role, or the default slot.\n\nArgs:\n    role: The role name to look up.\n\nReturns:\n    The slot for the given role, or the default slot if not found."
            },
            {
              "name": "ModelTopology.has_role",
              "line": 231,
              "signature": "def has_role(self, role: str) -> bool",
              "documentation": "Return True if a slot with the given role name exists.\n\nArgs:\n    role: The role name to check.\n\nReturns:\n    True if the role exists."
            },
            {
              "name": "ModelTopology.slot_count",
              "line": 242,
              "signature": "def slot_count(self) -> int",
              "documentation": "Return the number of slots in this topology.\n\nReturns:\n    The slot count."
            },
            {
              "name": "ModelTopology.all_provider_refs",
              "line": 250,
              "signature": "def all_provider_refs(self) -> list[ProviderRef]",
              "documentation": "Return all distinct ProviderRef values, sorted and deduplicated.\n\nReturns:\n    A sorted, deduplicated list of ProviderRef values."
            },
            {
              "name": "ModelTopology.to_dict",
              "line": 269,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ModelTopology.from_dict",
              "line": 284,
              "signature": "def from_dict(data: dict[str, Any]) -> ModelTopology",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ModelTopology."
            },
            {
              "name": "ModelTopology.to_json",
              "line": 302,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string."
            },
            {
              "name": "ModelTopology.from_json",
              "line": 311,
              "signature": "def from_json(data: str) -> ModelTopology",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized ModelTopology."
            },
            {
              "name": "TopologyBuilder",
              "line": 323,
              "signature": "class TopologyBuilder()",
              "documentation": "Builder for constructing ModelTopology instances with validation.\n\nThe builder enforces two invariants at build time:\n1. Exactly one slot must have the role \"default\".\n2. At least one slot must exist.\n\nExample:\n    >>> builder = ModelTopology.builder()\n    >>> builder.slot(\"default\", ProviderRef.parse(\"openai:gpt-4o\"))\n    <...>\n    >>> topology = builder.build()\n    >>> topology.slot_count()\n    1"
            },
            {
              "name": "TopologyBuilder.__init__",
              "line": 339,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "TopologyBuilder.name",
              "line": 343,
              "signature": "def name(self, name: str) -> TopologyBuilder",
              "documentation": "Set the topology name.\n\nArgs:\n    name: Human-readable name for this topology.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "TopologyBuilder.slot",
              "line": 355,
              "signature": "def slot(self, role: str, primary: ProviderRef) -> TopologyBuilder",
              "documentation": "Add a slot with the given role and primary model.\n\nIf a slot with the same role already exists, it is replaced.\n\nArgs:\n    role: The role name.\n    primary: The primary model for this slot.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "TopologyBuilder.with_fallback",
              "line": 370,
              "signature": "def with_fallback(self, role: str, fallback: ProviderRef) -> TopologyBuilder",
              "documentation": "Add a fallback model to an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\nArgs:\n    role: The role name of the slot.\n    fallback: The fallback model to append.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "TopologyBuilder.with_required_capability",
              "line": 387,
              "signature": "def with_required_capability(self, role: str, cap: RuntimeCapability) -> TopologyBuilder",
              "documentation": "Add a required runtime capability to an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\nArgs:\n    role: The role name of the slot.\n    cap: The runtime capability to require.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "TopologyBuilder.with_cost_preference",
              "line": 406,
              "signature": "def with_cost_preference(self, role: str, pref: CostPreference) -> TopologyBuilder",
              "documentation": "Set the cost preference for an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\nArgs:\n    role: The role name of the slot.\n    pref: The cost preference to set.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "TopologyBuilder.with_latency_preference",
              "line": 425,
              "signature": "def with_latency_preference(self, role: str, pref: LatencyPreference) -> TopologyBuilder",
              "documentation": "Set the latency preference for an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\nArgs:\n    role: The role name of the slot.\n    pref: The latency preference to set.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "TopologyBuilder.with_scope_narrowing",
              "line": 444,
              "signature": "def with_scope_narrowing(self, role: str, scopes: list[str]) -> TopologyBuilder",
              "documentation": "Set Arsenal scope narrowing for an existing slot.\n\nIf the specified role does not exist, this method is a no-op.\n\nArgs:\n    role: The role name of the slot.\n    scopes: The scope names to narrow to.\n\nReturns:\n    Self for chaining."
            },
            {
              "name": "TopologyBuilder.build",
              "line": 463,
              "signature": "def build(self) -> ModelTopology",
              "documentation": "Build the topology, validating invariants.\n\nReturns:\n    A validated ModelTopology.\n\nRaises:\n    ForgeSchemaValidationError: If the topology has no \"default\" slot\n        or is empty."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/core/types.py",
          "sha256": "51e173002332d0cba1bb6c4f89232f212d4dbfef504fa477cc56bda14c7e1756",
          "artifactSha256": "c5d12e25715549deef3b56e8259cbe4cfe3b22eb2343ddeb86244cd7c4c6d1a9",
          "url": "/reference/source/forge-py/src/forge/core/types.py.txt",
          "declarations": [
            {
              "name": "AgentDid",
              "line": 15,
              "signature": "class AgentDid()",
              "documentation": "A DID (Decentralized Identifier) representing an agent's identity.\n\nFormat: ``did:oas:<namespace>:<kind>:<identifier>``\n\nANVIL Spec Reference: Agent identity binding per ANVIL Spec section 11.1.\n\nArgs:\n    value: The full DID string.\n\nExample:\n    >>> did = AgentDid.new(\"did:oas:l1fe:agent:data-analyzer\")\n    >>> did is not None\n    True\n    >>> did.as_str()\n    'did:oas:l1fe:agent:data-analyzer'"
            },
            {
              "name": "AgentDid.new",
              "line": 36,
              "signature": "def new(did: str) -> AgentDid | None",
              "documentation": "Create a new AgentDid from a DID string.\n\nArgs:\n    did: A DID string in the format ``did:oas:<namespace>:<kind>:<identifier>``.\n\nReturns:\n    The validated AgentDid, or None if the format is invalid.\n\nExample:\n    >>> AgentDid.new(\"did:oas:l1fe:agent:bot-1\") is not None\n    True\n    >>> AgentDid.new(\"not-a-did\") is None\n    True"
            },
            {
              "name": "AgentDid.from_trusted",
              "line": 56,
              "signature": "def from_trusted(did: str) -> AgentDid",
              "documentation": "Create an AgentDid without validation.\n\nThe caller must ensure the string is a valid OAS DID. This is provided\nfor interop with the OAS SDK which already validates DIDs.\n\nArgs:\n    did: A trusted DID string.\n\nReturns:\n    The AgentDid wrapper."
            },
            {
              "name": "AgentDid.as_str",
              "line": 70,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the DID string.\n\nReturns:\n    The raw DID string value."
            },
            {
              "name": "AgentDid.to_json",
              "line": 78,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON-encoded DID string."
            },
            {
              "name": "AgentDid.from_json",
              "line": 87,
              "signature": "def from_json(data: str) -> AgentDid",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON-encoded DID string.\n\nReturns:\n    The deserialized AgentDid.\n\nRaises:\n    ValueError: If the JSON is invalid or DID format is wrong."
            },
            {
              "name": "Timestamp",
              "line": 112,
              "signature": "class Timestamp()",
              "documentation": "A UTC timestamp used throughout the Forge SDK.\n\nWraps a ``datetime`` with Forge-specific serialization.\n\nExample:\n    >>> ts = Timestamp.now()\n    >>> iso = ts.to_iso8601()\n    >>> \"T\" in iso\n    True"
            },
            {
              "name": "Timestamp.now",
              "line": 127,
              "signature": "def now() -> Timestamp",
              "documentation": "Create a Timestamp for the current UTC time.\n\nReturns:\n    A Timestamp representing the current moment."
            },
            {
              "name": "Timestamp.from_iso8601",
              "line": 136,
              "signature": "def from_iso8601(s: str) -> Timestamp | None",
              "documentation": "Create a Timestamp from an ISO 8601 string.\n\nArgs:\n    s: An ISO 8601 formatted date-time string.\n\nReturns:\n    The parsed Timestamp, or None if parsing fails.\n\nExample:\n    >>> Timestamp.from_iso8601(\"2026-01-15T00:00:00Z\") is not None\n    True\n    >>> Timestamp.from_iso8601(\"not-a-date\") is None\n    True"
            },
            {
              "name": "Timestamp.to_iso8601",
              "line": 159,
              "signature": "def to_iso8601(self) -> str",
              "documentation": "Format this timestamp as an ISO 8601 string.\n\nReturns:\n    ISO 8601 formatted string with timezone info."
            },
            {
              "name": "Timestamp.to_json",
              "line": 167,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON.\n\nReturns:\n    JSON string containing the ISO 8601 timestamp."
            },
            {
              "name": "Timestamp.from_json",
              "line": 176,
              "signature": "def from_json(data: str) -> Timestamp | None",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string containing an ISO 8601 timestamp.\n\nReturns:\n    The parsed Timestamp, or None if invalid."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.embed",
      "language": "python",
      "version": "0.1.0",
      "description": "Python embed package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/embed",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/embed/__init__.py",
          "sha256": "35798c44845fca00ac378e847197c43eff1fdd9c450621b83fc0ed93cee22531",
          "artifactSha256": "0c63075cbfe447859bbb38e42e89e9e1c126bba14ba6e4e8b96fcbc8789c9c3b",
          "url": "/reference/source/forge-py/src/forge/embed/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/embed/chunking.py",
          "sha256": "2d96def3f76fca9e1809f511f6be5dd6337a3914121d29d05a47425aa353c422",
          "artifactSha256": "b37790fe44ada4160e0e91f200350ff34e8457b7e643900b03d6aa5db2edb65e",
          "url": "/reference/source/forge-py/src/forge/embed/chunking.py.txt",
          "declarations": [
            {
              "name": "Chunk",
              "line": 9,
              "signature": "class Chunk()",
              "documentation": "A chunk of text extracted from a document.\n\nArgs:\n    text: The chunk text content.\n    start: Starting character offset in the original text.\n    end: Ending character offset in the original text.\n    index: The chunk index (0-based)."
            },
            {
              "name": "TextChunker",
              "line": 25,
              "signature": "class TextChunker()",
              "documentation": "Configurable text chunker for splitting documents.\n\nArgs:\n    chunk_size: Target size of each chunk in characters.\n    overlap: Number of overlapping characters between consecutive chunks.\n\nExample:\n    >>> chunker = TextChunker(chunk_size=100, overlap=20)\n    >>> chunks = chunker.chunk(\"Hello world. \" * 20)\n    >>> len(chunks) > 1\n    True"
            },
            {
              "name": "TextChunker.__init__",
              "line": 39,
              "signature": "def __init__(self, chunk_size: int=1000, overlap: int=200) -> None",
              "documentation": ""
            },
            {
              "name": "TextChunker.chunk",
              "line": 52,
              "signature": "def chunk(self, text: str) -> list[Chunk]",
              "documentation": "Split text into overlapping chunks.\n\nArgs:\n    text: The text to chunk.\n\nReturns:\n    List of Chunk instances."
            },
            {
              "name": "chunk_text",
              "line": 80,
              "signature": "def chunk_text(text: str, chunk_size: int=1000, overlap: int=200) -> list[Chunk]",
              "documentation": "Convenience function for splitting text into chunks.\n\nArgs:\n    text: The text to chunk.\n    chunk_size: Target chunk size in characters.\n    overlap: Overlap between consecutive chunks.\n\nReturns:\n    List of Chunk instances."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/embed/provider.py",
          "sha256": "4037be6fc9a2531a3ab89c44c4cffc4f23518b42d747e8f72284307a02580485",
          "artifactSha256": "f15e6ca937ad015bc7173fd5c3af11e2e02721073720287952d4520e95133e6b",
          "url": "/reference/source/forge-py/src/forge/embed/provider.py.txt",
          "declarations": [
            {
              "name": "EmbeddingResult",
              "line": 12,
              "signature": "class EmbeddingResult()",
              "documentation": "Result of an embedding operation.\n\nArgs:\n    embeddings: List of embedding vectors (each a list of floats).\n    model: The model used for embedding.\n    usage_tokens: Total tokens consumed."
            },
            {
              "name": "EmbeddingProvider",
              "line": 26,
              "signature": "class EmbeddingProvider(ABC)",
              "documentation": "Abstract base class for embedding providers.\n\nImplementations generate vector embeddings from text inputs."
            },
            {
              "name": "EmbeddingProvider.provider_name",
              "line": 34,
              "signature": "def provider_name(self) -> str",
              "documentation": "Return the provider name.\n\nReturns:\n    The provider name string."
            },
            {
              "name": "EmbeddingProvider.embed",
              "line": 42,
              "signature": "async def embed(self, texts: list[str], options: EmbedOptions | None=None) -> EmbeddingResult",
              "documentation": "Generate embeddings for the given texts.\n\nArgs:\n    texts: List of text strings to embed.\n    options: Optional embedding options.\n\nReturns:\n    The embedding result."
            },
            {
              "name": "EmbeddingProvider.embed_single",
              "line": 57,
              "signature": "async def embed_single(self, text: str, options: EmbedOptions | None=None) -> tuple[float, ...]",
              "documentation": "Generate an embedding for a single text.\n\nArgs:\n    text: The text to embed.\n    options: Optional embedding options.\n\nReturns:\n    The embedding vector."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/embed/similarity.py",
          "sha256": "a043c0f6b4d040cf3556dc571433aee31d54039c7fa4430106a16a40e7894c9d",
          "artifactSha256": "a1530f7de1ad478d14f43f53f661989ee61bb88a079eacd4de9b4d67495c4e0a",
          "url": "/reference/source/forge-py/src/forge/embed/similarity.py.txt",
          "declarations": [
            {
              "name": "cosine_similarity",
              "line": 8,
              "signature": "def cosine_similarity(a: tuple[float, ...], b: tuple[float, ...]) -> float",
              "documentation": "Compute the cosine similarity between two vectors.\n\nArgs:\n    a: First vector.\n    b: Second vector.\n\nReturns:\n    Cosine similarity in range [-1.0, 1.0].\n\nRaises:\n    ValueError: If vectors have different lengths or are zero-length.\n\nExample:\n    >>> cosine_similarity((1.0, 0.0), (1.0, 0.0))\n    1.0\n    >>> abs(cosine_similarity((1.0, 0.0), (0.0, 1.0))) < 1e-10\n    True"
            },
            {
              "name": "dot_product",
              "line": 44,
              "signature": "def dot_product(a: tuple[float, ...], b: tuple[float, ...]) -> float",
              "documentation": "Compute the dot product of two vectors.\n\nArgs:\n    a: First vector.\n    b: Second vector.\n\nReturns:\n    The dot product.\n\nRaises:\n    ValueError: If vectors have different lengths.\n\nExample:\n    >>> dot_product((1.0, 2.0, 3.0), (4.0, 5.0, 6.0))\n    32.0"
            },
            {
              "name": "euclidean_distance",
              "line": 67,
              "signature": "def euclidean_distance(a: tuple[float, ...], b: tuple[float, ...]) -> float",
              "documentation": "Compute the Euclidean distance between two vectors.\n\nArgs:\n    a: First vector.\n    b: Second vector.\n\nReturns:\n    The Euclidean distance (always non-negative).\n\nRaises:\n    ValueError: If vectors have different lengths.\n\nExample:\n    >>> euclidean_distance((0.0, 0.0), (3.0, 4.0))\n    5.0"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/embed/vector_store.py",
          "sha256": "1db031e2dfca0238b3fb90fd5b385df20b1d8819b3357064935a97cc4bcec0e7",
          "artifactSha256": "bec0fa1ff9c6d8c1acdd911b5b06ec6618e8ff7bcc43c1793dbfb35b652ea738",
          "url": "/reference/source/forge-py/src/forge/embed/vector_store.py.txt",
          "declarations": [
            {
              "name": "SearchResult",
              "line": 12,
              "signature": "class SearchResult()",
              "documentation": "A search result from the vector store.\n\nArgs:\n    id: The document identifier.\n    score: The similarity score.\n    metadata: Optional metadata associated with the document."
            },
            {
              "name": "VectorStore",
              "line": 26,
              "signature": "class VectorStore()",
              "documentation": "In-memory vector store for RAG applications.\n\nStores document embeddings and supports similarity search.\nUses cosine similarity by default.\n\nExample:\n    >>> store = VectorStore()\n    >>> store.add(\"doc1\", (0.1, 0.2, 0.3))\n    >>> results = store.search((0.1, 0.2, 0.3), top_k=1)\n    >>> results[0].id\n    'doc1'"
            },
            {
              "name": "VectorStore.__init__",
              "line": 40,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "VectorStore.add",
              "line": 44,
              "signature": "def add(self, doc_id: str, embedding: tuple[float, ...], metadata: dict[str, Any] | None=None) -> None",
              "documentation": "Add a document embedding to the store.\n\nArgs:\n    doc_id: Unique document identifier.\n    embedding: The embedding vector.\n    metadata: Optional metadata dictionary."
            },
            {
              "name": "VectorStore.search",
              "line": 60,
              "signature": "def search(self, query: tuple[float, ...], top_k: int=10) -> list[SearchResult]",
              "documentation": "Search for the most similar documents.\n\nArgs:\n    query: The query embedding vector.\n    top_k: Maximum number of results to return.\n\nReturns:\n    List of SearchResult sorted by descending similarity score."
            },
            {
              "name": "VectorStore.remove",
              "line": 88,
              "signature": "def remove(self, doc_id: str) -> bool",
              "documentation": "Remove a document from the store.\n\nArgs:\n    doc_id: The document identifier.\n\nReturns:\n    True if the document was found and removed."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.generate",
      "language": "python",
      "version": "0.1.0",
      "description": "Python generate package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/generate",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/generate/__init__.py",
          "sha256": "9489a759d4ee02c8947720df5c97f747a6035433c73c58f46c1d9c9fbe79a1ff",
          "artifactSha256": "aeae9c8c009269d44766ae3fb95ec5de63b8fb2cb7f2a2632e355f5b06cc0249",
          "url": "/reference/source/forge-py/src/forge/generate/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/generate/object.py",
          "sha256": "796b0ca8d1acef0f8095093bffb6558812920f1361a23c73f0216719944ff80f",
          "artifactSha256": "b8e269ff29dd3a6c4b28e94770c4b0333a24a7ee308e10c1aedb3c2b520177bc",
          "url": "/reference/source/forge-py/src/forge/generate/object.py.txt",
          "declarations": [
            {
              "name": "generate_object",
              "line": 31,
              "signature": "async def generate_object(model: LanguageModel, messages: list[ModelMessage], schema: JsonSchema, *, options: GenerateOptions | None=None, system: str | None=None) -> tuple[Any, GenerateResult]",
              "documentation": "Generate a structured object response from a language model.\n\nThe model is instructed to produce JSON conforming to the given schema.\nThe response is parsed and validated before returning.\n\nArgs:\n    model: The language model to use.\n    messages: The conversation history.\n    schema: The JSON Schema the output must conform to.\n    options: Optional generation options.\n    system: Optional system prompt.\n\nReturns:\n    A tuple of (parsed_object, GenerateResult).\n\nRaises:\n    ForgeUnsupportedOperationError: If the model does not support structured output.\n    ForgeSchemaValidationError: If the response does not conform to the schema.\n    ForgeJsonError: If the response is not valid JSON."
            },
            {
              "name": "stream_object",
              "line": 89,
              "signature": "async def stream_object(model: LanguageModel, messages: list[ModelMessage], schema: JsonSchema, *, options: GenerateOptions | None=None, system: str | None=None) -> AsyncGenerator[str, None]",
              "documentation": "Stream a structured object response, yielding partial JSON strings.\n\nEach yield contains a portion of the JSON output. The final concatenation\nof all yields produces the complete JSON object.\n\nArgs:\n    model: The language model to use.\n    messages: The conversation history.\n    schema: The JSON Schema the output must conform to.\n    options: Optional generation options.\n    system: Optional system prompt.\n\nYields:\n    Partial JSON string fragments.\n\nRaises:\n    ForgeUnsupportedOperationError: If the model does not support\n        streaming or structured output."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/generate/stream.py",
          "sha256": "d1d007f87379f843f2f34a427dee1e7939bcd95ed9d5f6285218c427b4abb002",
          "artifactSha256": "86bc6c314c519176fa370f8a6a7889dd7144256e140aab906d40f8b7cb99ad50",
          "url": "/reference/source/forge-py/src/forge/generate/stream.py.txt",
          "declarations": [
            {
              "name": "stream_text",
              "line": 24,
              "signature": "async def stream_text(model: LanguageModel, messages: list[ModelMessage], *, tools: list[ToolDefinition] | None=None, options: GenerateOptions | None=None, system: str | None=None) -> AsyncGenerator[StreamChunk, None]",
              "documentation": "Stream a text response from a language model.\n\nThis function returns an async generator that yields StreamChunk instances\nas they arrive from the model.\n\nANVIL Spec section 6.1: Maps to the ``infer_stream()`` cognitive interface method.\n\nArgs:\n    model: The language model to use.\n    messages: The conversation history.\n    tools: Optional tool definitions available for this call.\n    options: Optional generation options.\n    system: Optional system prompt.\n\nYields:\n    StreamChunk instances (TextDelta, ToolCallDelta, or StreamDone).\n\nRaises:\n    ForgeUnsupportedOperationError: If the model does not support streaming.\n    ForgeError: If the provider call fails."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/generate/text.py",
          "sha256": "6ef01753b4bd32e15f8dac949ceb73452ea6cf6f0bc811953f226abfd16c128d",
          "artifactSha256": "3ba17ee2c04ead13be55f77e0039198079588f05e068259eefc2c5e0f940739a",
          "url": "/reference/source/forge-py/src/forge/generate/text.py.txt",
          "declarations": [
            {
              "name": "generate_text",
              "line": 23,
              "signature": "async def generate_text(model: LanguageModel, messages: list[ModelMessage], *, tools: list[ToolDefinition] | None=None, options: GenerateOptions | None=None, system: str | None=None) -> GenerateResult",
              "documentation": "Generate a complete text response from a language model.\n\nThis is the primary text generation function. It sends messages to the\nmodel and waits for the complete response.\n\nANVIL Spec section 6.1: Maps to the ``infer()`` cognitive interface method.\n\nArgs:\n    model: The language model to use.\n    messages: The conversation history.\n    tools: Optional tool definitions available for this call.\n    options: Optional generation options (temperature, max_tokens, etc.).\n    system: Optional system prompt (prepended as a system message).\n\nReturns:\n    A GenerateResult containing the model's response.\n\nRaises:\n    ForgeUnsupportedOperationError: If the model does not support the\n        requested operation.\n    ForgeError: If the provider call fails.\n\nExample:\n    >>> # With a mock model:\n    >>> # result = await generate_text(model, [ModelMessage.text(Role.USER, \"Hi\")])"
            }
          ]
        }
      ]
    },
    {
      "name": "forge.health",
      "language": "python",
      "version": "0.1.0",
      "description": "Python health package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/health",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/health/__init__.py",
          "sha256": "bff2d8e49f528ee5ca38343052495de7e022f22678b16607164e66ae31c918c2",
          "artifactSha256": "857b20bfc17d2e7bb3bb5348b0d80a0670d8267f5b4e8ebbe587a19a0a4fd62f",
          "url": "/reference/source/forge-py/src/forge/health/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/health/events.py",
          "sha256": "2cee77133b9767621d5d02eed94202eae8776d301b580a0506beea2b4e5d821c",
          "artifactSha256": "774b8cebb521158ea90e78f1d0b3535fd921f419a33d0f8c9062d512c9269132",
          "url": "/reference/source/forge-py/src/forge/health/events.py.txt",
          "declarations": [
            {
              "name": "HealthEventKind",
              "line": 15,
              "signature": "class HealthEventKind(Enum)",
              "documentation": "Types of health events."
            },
            {
              "name": "HealthEvent",
              "line": 30,
              "signature": "class HealthEvent()",
              "documentation": "A significant health-related event.\n\nArgs:\n    kind: The type of health event.\n    message: Human-readable description.\n    details: Optional key-value details.\n    timestamp: When the event occurred."
            },
            {
              "name": "HealthEvent.to_dict",
              "line": 45,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/health/lifecycle.py",
          "sha256": "e6b64df78d0834c6e10652172088791e0b2285b17e7c4ad5d7b3fa0aaf14699e",
          "artifactSha256": "0db200f52b79003c375d56940e071ec5c8d56de75da023a5ab071c28ec328d43",
          "url": "/reference/source/forge-py/src/forge/health/lifecycle.py.txt",
          "declarations": [
            {
              "name": "LifecycleState",
              "line": 42,
              "signature": "class LifecycleState(Enum)",
              "documentation": "ANVIL lifecycle states.\n\nThese six states and their valid transitions are IMMUTABLE per\nANVIL Spec section 13.2. No states may be added, removed,\nor have their transition rules changed without a formal specification\namendment.\n\nExample:\n    >>> LifecycleState.RUNNING.is_operational()\n    True\n    >>> LifecycleState.READY.is_operational()\n    True\n    >>> LifecycleState.TERMINATED.is_terminal()\n    True"
            },
            {
              "name": "LifecycleState.valid_transitions",
              "line": 66,
              "signature": "def valid_transitions(self) -> tuple[LifecycleState, ...]",
              "documentation": "Return the set of valid target states from this state.\n\nThe transition table is defined by ANVIL Spec section 13.2\nand is immutable.\n\nReturns:\n    Tuple of valid target states.\n\nExample:\n    >>> targets = LifecycleState.RUNNING.valid_transitions()\n    >>> LifecycleState.PAUSED in targets\n    True"
            },
            {
              "name": "LifecycleState.is_terminal",
              "line": 83,
              "signature": "def is_terminal(self) -> bool",
              "documentation": "Return True if this is a terminal state (no outgoing transitions).\n\nCurrently, only Terminated is a terminal state.\n\nReturns:\n    True if terminal."
            },
            {
              "name": "LifecycleState.is_operational",
              "line": 93,
              "signature": "def is_operational(self) -> bool",
              "documentation": "Return True if the agent can perform work in this state.\n\nBoth Ready and Running are operational states. Ready means the\nagent can accept new work; Running means it is actively processing.\n\nANVIL Spec section 13.2.\n\nReturns:\n    True if operational."
            },
            {
              "name": "LifecycleTransition",
              "line": 141,
              "signature": "class LifecycleTransition()",
              "documentation": "A record of a single lifecycle state transition.\n\nEvery transition is timestamped and stored in the LifecycleManager's history.\n\nArgs:\n    from_state: The state before the transition.\n    to_state: The state after the transition.\n    timestamp: The UTC timestamp when the transition occurred."
            },
            {
              "name": "LifecycleManager",
              "line": 157,
              "signature": "class LifecycleManager()",
              "documentation": "Manages the ANVIL lifecycle state machine for a single agent.\n\nThe LifecycleManager enforces the immutable transition table from ANVIL Spec\nsection 13.2. It tracks the current state, validates all\ntransitions, and maintains a complete transition history.\n\nEvery agent starts in the Initializing state per ANVIL Spec section 13.2.\n\nExample:\n    >>> mgr = LifecycleManager()\n    >>> mgr.state\n    <LifecycleState.INITIALIZING: 'Initializing'>\n    >>> t = mgr.transition(LifecycleState.READY)\n    >>> t.from_state\n    <LifecycleState.INITIALIZING: 'Initializing'>\n    >>> mgr.state\n    <LifecycleState.READY: 'Ready'>"
            },
            {
              "name": "LifecycleManager.__init__",
              "line": 177,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "LifecycleManager.state",
              "line": 182,
              "signature": "def state(self) -> LifecycleState",
              "documentation": "Return the current lifecycle state.\n\nReturns:\n    The current LifecycleState."
            },
            {
              "name": "LifecycleManager.transition",
              "line": 190,
              "signature": "def transition(self, target: LifecycleState) -> LifecycleTransition",
              "documentation": "Attempt to transition to the given target state.\n\nValidates the transition against the ANVIL Spec section 13.2\ntransition table. If valid, the state is updated and a LifecycleTransition\nis recorded. If invalid, an error is raised and the state is unchanged.\n\nANVIL Spec section 13.2 -- Lifecycle State Machine.\n\nArgs:\n    target: The desired target LifecycleState.\n\nReturns:\n    A LifecycleTransition record.\n\nRaises:\n    InvalidLifecycleTransitionError: If the transition is not in the\n        ANVIL transition table or is a self-transition.\n\nExample:\n    >>> mgr = LifecycleManager()\n    >>> t = mgr.transition(LifecycleState.READY)\n    >>> t.to_state\n    <LifecycleState.READY: 'Ready'>"
            },
            {
              "name": "LifecycleManager.can_transition_to",
              "line": 248,
              "signature": "def can_transition_to(self, target: LifecycleState) -> bool",
              "documentation": "Return True if the transition from the current state to target is valid.\n\nArgs:\n    target: The candidate target LifecycleState.\n\nReturns:\n    True if the transition is permitted."
            },
            {
              "name": "LifecycleManager.valid_transitions",
              "line": 259,
              "signature": "def valid_transitions(self) -> list[LifecycleState]",
              "documentation": "Return the set of valid target states from the current state.\n\nReturns:\n    List of valid target states."
            },
            {
              "name": "LifecycleManager.history",
              "line": 267,
              "signature": "def history(self) -> list[LifecycleTransition]",
              "documentation": "Return the complete transition history.\n\nThe history is ordered chronologically.\n\nReturns:\n    List of all LifecycleTransition records."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/health/monitoring.py",
          "sha256": "bd7db074d076ba7fde7530d8f0bb5d69637620f33c7a761c402717384e3ab502",
          "artifactSha256": "3614da58d48de230161d47f47e5557128c3e73039e7acf02db037ae58dad3b11",
          "url": "/reference/source/forge-py/src/forge/health/monitoring.py.txt",
          "declarations": [
            {
              "name": "HealthStatus",
              "line": 14,
              "signature": "class HealthStatus(Enum)",
              "documentation": "Overall health status of an agent.\n\nANVIL Spec section 14.1 -- Telemetry Contract."
            },
            {
              "name": "HealthThresholds",
              "line": 30,
              "signature": "class HealthThresholds()",
              "documentation": "Configurable thresholds for health monitoring.\n\nArgs:\n    max_error_rate: Maximum error rate (errors / total calls) before degraded.\n    max_cpu_percent: CPU usage threshold for degraded status.\n    max_memory_bytes: Memory usage threshold for degraded status.\n    critical_error_count: Error count threshold for critical status."
            },
            {
              "name": "HealthMonitor",
              "line": 46,
              "signature": "class HealthMonitor()",
              "documentation": "Monitors agent health based on configurable thresholds.\n\nThe monitor evaluates a HealthProfile against thresholds to determine\nthe overall health status.\n\nArgs:\n    thresholds: The health thresholds to apply.\n\nExample:\n    >>> monitor = HealthMonitor()\n    >>> profile = HealthProfile()\n    >>> monitor.evaluate(profile)\n    <HealthStatus.HEALTHY: 'healthy'>"
            },
            {
              "name": "HealthMonitor.__init__",
              "line": 62,
              "signature": "def __init__(self, thresholds: HealthThresholds | None=None) -> None",
              "documentation": ""
            },
            {
              "name": "HealthMonitor.evaluate",
              "line": 65,
              "signature": "def evaluate(self, profile: HealthProfile) -> HealthStatus",
              "documentation": "Evaluate the health status of a profile.\n\nArgs:\n    profile: The health profile to evaluate.\n\nReturns:\n    The overall health status."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/health/profile.py",
          "sha256": "5997917589466f7b42de166bd9856b8ee6fa2cf972278e17ebffa6eec843d98d",
          "artifactSha256": "6e906352cb78940e49aec6f61ec5fac7acb3544d26ff44340797d957da8630a4",
          "url": "/reference/source/forge-py/src/forge/health/profile.py.txt",
          "declarations": [
            {
              "name": "HealthProfile",
              "line": 21,
              "signature": "class HealthProfile()",
              "documentation": "Runtime health metrics for an ANVIL-compliant agent.\n\nThe health profile tracks operational statistics that enable health\nmonitoring, capacity planning, and audit trail generation. All counters\nare monotonically increasing -- they are never reset during an agent's\nlifetime.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> profile = HealthProfile()\n    >>> profile.record_tool_invocation()\n    >>> profile.record_inference(256)\n    >>> profile.record_error()\n    >>> profile.tool_invocations\n    1\n    >>> profile.inference_tokens\n    256\n    >>> profile.error_count\n    1"
            },
            {
              "name": "HealthProfile.record_tool_invocation",
              "line": 63,
              "signature": "def record_tool_invocation(self) -> None",
              "documentation": "Record a tool invocation.\n\nIncrements the tool_invocations counter by one and updates\nthe last_updated timestamp."
            },
            {
              "name": "HealthProfile.record_inference",
              "line": 72,
              "signature": "def record_inference(self, tokens: int) -> None",
              "documentation": "Record an inference call with the given token count.\n\nIncrements the inference_calls counter by one, adds tokens to\nthe inference_tokens total, and updates the last_updated timestamp.\n\nArgs:\n    tokens: The number of tokens consumed by this inference call."
            },
            {
              "name": "HealthProfile.record_error",
              "line": 85,
              "signature": "def record_error(self) -> None",
              "documentation": "Record an error occurrence.\n\nIncrements the error_count counter by one and updates the\nlast_updated timestamp."
            },
            {
              "name": "HealthProfile.update_resources",
              "line": 94,
              "signature": "def update_resources(self, cpu: float, memory: int) -> None",
              "documentation": "Update the point-in-time resource usage metrics.\n\nCPU percentage is clamped to the range [0.0, 100.0].\n\nArgs:\n    cpu: Current CPU usage as a percentage (0.0 to 100.0).\n    memory: Current memory usage in bytes."
            },
            {
              "name": "HealthProfile.update_uptime",
              "line": 107,
              "signature": "def update_uptime(self, seconds: int) -> None",
              "documentation": "Update the uptime counter.\n\nArgs:\n    seconds: The total uptime in seconds since the agent became Running."
            },
            {
              "name": "HealthProfile.record_task_started",
              "line": 116,
              "signature": "def record_task_started(self) -> None",
              "documentation": "Record the start of a new task.\n\nIncrements the active_tasks gauge by one and updates the\nlast_updated timestamp.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> profile = HealthProfile()\n    >>> profile.record_task_started()\n    >>> profile.active_tasks\n    1"
            },
            {
              "name": "HealthProfile.record_task_completed",
              "line": 133,
              "signature": "def record_task_completed(self) -> None",
              "documentation": "Record the completion of a task.\n\nDecrements the active_tasks gauge by one (saturating at zero) and\nincrements the completed_tasks counter by one. Updates the\nlast_updated timestamp.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> profile = HealthProfile()\n    >>> profile.record_task_started()\n    >>> profile.record_task_completed()\n    >>> profile.active_tasks\n    0\n    >>> profile.completed_tasks\n    1"
            },
            {
              "name": "HealthProfile.record_generation_success",
              "line": 155,
              "signature": "def record_generation_success(self) -> None",
              "documentation": "Record a successful generation call.\n\nUpdates generation_success_rate and error_rate based on the\nrunning totals of successes and failures. Updates the\nlast_updated timestamp.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> profile = HealthProfile()\n    >>> profile.record_generation_success()\n    >>> abs(profile.generation_success_rate - 1.0) < 1e-9\n    True"
            },
            {
              "name": "HealthProfile.record_generation_failure",
              "line": 174,
              "signature": "def record_generation_failure(self) -> None",
              "documentation": "Record a failed generation call.\n\nUpdates generation_success_rate and error_rate based on the\nrunning totals of successes and failures. Also increments\nerror_count. Updates the last_updated timestamp.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> profile = HealthProfile()\n    >>> profile.record_generation_failure()\n    >>> abs(profile.error_rate - 1.0) < 1e-9\n    True"
            },
            {
              "name": "HealthProfile.to_dict",
              "line": 201,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "HealthProfile.from_dict",
              "line": 225,
              "signature": "def from_dict(data: dict[str, Any]) -> HealthProfile",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized HealthProfile."
            },
            {
              "name": "HealthProfile.to_json",
              "line": 253,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string."
            },
            {
              "name": "HealthProfile.from_json",
              "line": 258,
              "signature": "def from_json(data: str) -> HealthProfile",
              "documentation": "Deserialize from JSON string."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/health/reporting.py",
          "sha256": "b931bedf00fd2f367ff7cac3a72ef8c988d44030a4b9211c204ac160cfbc7154",
          "artifactSha256": "c79e545566248a868019da8edb8f9ee3134266615bb77430243c9e49471daef0",
          "url": "/reference/source/forge-py/src/forge/health/reporting.py.txt",
          "declarations": [
            {
              "name": "HealthReport",
              "line": 19,
              "signature": "class HealthReport()",
              "documentation": "A structured health report for an agent.\n\nArgs:\n    status: The overall health status.\n    lifecycle_state: The current lifecycle state.\n    profile: The health profile snapshot.\n    agent_did: Optional agent DID.\n    generated_at: When the report was generated."
            },
            {
              "name": "HealthReport.to_dict",
              "line": 36,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "HealthReport.to_json",
              "line": 52,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string representation."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.identity",
      "language": "python",
      "version": "0.1.0",
      "description": "Python identity package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/identity",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/identity/__init__.py",
          "sha256": "932b964d9c669884f65c38b46f8ee0d897fc3dddcddc5c0fc0c51f4a5e85f691",
          "artifactSha256": "a7a72cfa86aa1407978ba05e8c9c279455dd920b5be37b5f6d72428a8aef8cd5",
          "url": "/reference/source/forge-py/src/forge/identity/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/identity/agent_identity.py",
          "sha256": "29772125018bd01be1a924306258f75eaf1bbdcf8b7442ae8ba9861e5cb5bbf9",
          "artifactSha256": "1bae8f71bc9811e5c15e6d92df09b1ecce37bb2d719a3ea1a947e8b823b4950c",
          "url": "/reference/source/forge-py/src/forge/identity/agent_identity.py.txt",
          "declarations": [
            {
              "name": "OasDocumentRef",
              "line": 32,
              "signature": "class OasDocumentRef()",
              "documentation": "A reference to an OAS Identity Document.\n\nIn the Python SDK, the OAS document is stored as a JSON-serializable\ndictionary. Cryptographic operations act on the document's proof material\nand verification methods.\n\nArgs:\n    id: The DID string from the document.\n    data: The full document data as a dictionary.\n\nExample:\n    >>> doc = OasDocumentRef(id=\"did:oas:test:hmr:alice\", data={\"id\": \"did:oas:test:hmr:alice\"})\n    >>> doc.id\n    'did:oas:test:hmr:alice'"
            },
            {
              "name": "OasDocumentRef.has_proof",
              "line": 53,
              "signature": "def has_proof(self) -> bool",
              "documentation": "Return True if the document contains a proof section.\n\nReturns:\n    True if a proof section is present."
            },
            {
              "name": "OasDocumentRef.has_lineage",
              "line": 62,
              "signature": "def has_lineage(self) -> bool",
              "documentation": "Return True if the document contains a lineage section.\n\nReturns:\n    True if a lineage section is present."
            },
            {
              "name": "OasDocumentRef.lineage_generation",
              "line": 71,
              "signature": "def lineage_generation(self) -> int | None",
              "documentation": "Return the lineage generation number if present.\n\nReturns:\n    The generation number, or None if no lineage section."
            },
            {
              "name": "OasDocumentRef.human_root_did",
              "line": 85,
              "signature": "def human_root_did(self) -> str | None",
              "documentation": "Return the human root DID from the lineage section if present.\n\nReturns:\n    The human root DID string, or None if no lineage section."
            },
            {
              "name": "OasDocumentRef.to_json",
              "line": 98,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize the document to a JSON string.\n\nReturns:\n    JSON string representation."
            },
            {
              "name": "OasDocumentRef.from_json",
              "line": 107,
              "signature": "def from_json(data: str) -> OasDocumentRef",
              "documentation": "Deserialize an OAS document from a JSON string.\n\nArgs:\n    data: JSON string representation.\n\nReturns:\n    The deserialized OasDocumentRef.\n\nRaises:\n    ValueError: If the JSON is invalid or missing the ``id`` field."
            },
            {
              "name": "WasmKeyRef",
              "line": 128,
              "signature": "class WasmKeyRef()",
              "documentation": "A reference to an Ed25519 keypair managed by the active crypto backend.\n\nThe Python SDK retains public key bytes for verification and may keep\nprivate key bytes in memory when the active backend is the bundled\nsoftware implementation.\n\nArgs:\n    public_key_bytes: The 32-byte Ed25519 verifying (public) key.\n    key_id: An opaque identifier for the keypair in the crypto backend.\n    private_key_bytes: Optional 32-byte Ed25519 signing key seed.\n\nExample:\n    >>> key = WasmKeyRef(public_key_bytes=bytes(32), key_id=\"test-key-1\")\n    >>> len(key.public_key_bytes)\n    32"
            },
            {
              "name": "ForgeAgentIdentity",
              "line": 151,
              "signature": "class ForgeAgentIdentity()",
              "documentation": "A Forge agent's cryptographic identity, binding an OAS DID, keypair, and lineage.\n\nEvery Forge agent has a ``ForgeAgentIdentity`` from creation. The identity\nincludes the agent's Ed25519 keypair reference (via WASM bridge), the OAS\nDID document, and the lineage proof chain.\n\nSee ANVIL Specification section 11.1 -- OAS Identity Binding.\n\nSecurity:\n    - The ``__repr__`` implementation never exposes the private key.\n    - Signing operations are delegated to the WASM bridge module.\n    - The keypair reference (``WasmKeyRef``) only holds the public key bytes.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> hmr.did\n    'did:oas:test:hmr:alice'\n    >>> hmr.kind\n    'hmr'\n    >>> hmr.lineage_depth\n    0"
            },
            {
              "name": "ForgeAgentIdentity.__init__",
              "line": 176,
              "signature": "def __init__(self, did: str, kind: str, keypair: WasmKeyRef, document: OasDocumentRef, lineage_depth: int) -> None",
              "documentation": "Create a new ForgeAgentIdentity from its constituent parts.\n\nThis is the internal constructor used by the lineage module.\nExternal callers should use ``create_hmr_identity`` or\n``derive_agent_identity`` instead.\n\nANVIL Spec section 11.1 -- OAS Identity Binding.\n\nArgs:\n    did: The ``did:oas`` identifier string.\n    kind: The entity kind (e.g., ``\"hmr\"``, ``\"mhr\"``, ``\"agent\"``).\n    keypair: The Ed25519 keypair reference.\n    document: The signed OAS Identity Document.\n    lineage_depth: The number of derivation steps from the human root.\n\nRaises:\n    InvalidIdentityError: If the DID is empty or the document ID\n        does not match the provided DID."
            },
            {
              "name": "ForgeAgentIdentity.did",
              "line": 218,
              "signature": "def did(self) -> str",
              "documentation": "Return the ``did:oas`` identifier string for this agent.\n\nReturns:\n    The DID string.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> hmr.did\n    'did:oas:test:hmr:alice'"
            },
            {
              "name": "ForgeAgentIdentity.kind",
              "line": 233,
              "signature": "def kind(self) -> str",
              "documentation": "Return the entity kind (e.g., ``\"hmr\"``, ``\"mhr\"``, ``\"agent\"``).\n\nReturns:\n    The entity kind string.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> hmr.kind\n    'hmr'"
            },
            {
              "name": "ForgeAgentIdentity.keypair",
              "line": 248,
              "signature": "def keypair(self) -> WasmKeyRef",
              "documentation": "Return a reference to the WASM-managed keypair.\n\nSecurity:\n    This provides access to the public key only. The signing key\n    is managed by the WASM bridge and never enters Python memory.\n\nReturns:\n    The WasmKeyRef for this identity."
            },
            {
              "name": "ForgeAgentIdentity.document",
              "line": 261,
              "signature": "def document(self) -> OasDocumentRef",
              "documentation": "Return a reference to the signed OAS Identity Document.\n\nThe document contains the full DID document structure including\nverification methods, authentication references, lineage section,\nand document proof.\n\nReturns:\n    The OasDocumentRef.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> hmr.document.has_proof\n    True"
            },
            {
              "name": "ForgeAgentIdentity.lineage_depth",
              "line": 280,
              "signature": "def lineage_depth(self) -> int",
              "documentation": "Return the lineage depth (number of derivation steps from human root).\n\n- ``0`` for HMR and MHR root entities.\n- ``1`` for agents derived directly from a root.\n- ``n`` for agents ``n`` steps removed from the root.\n\nSee ANVIL Spec section 11.2 -- Lineage Propagation.\n\nReturns:\n    The lineage depth as a non-negative integer.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> hmr.lineage_depth\n    0"
            },
            {
              "name": "ForgeAgentIdentity.verifying_key_bytes",
              "line": 300,
              "signature": "def verifying_key_bytes(self) -> bytes",
              "documentation": "Return the raw 32-byte Ed25519 verifying (public) key bytes.\n\nThis is the agent's public key that can be shared freely. Use it\nto verify signatures produced by the agent's signing key.\n\nReturns:\n    A 32-byte bytes object containing the Ed25519 public key.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> len(hmr.verifying_key_bytes())\n    32"
            },
            {
              "name": "ForgeAgentIdentity.sign",
              "line": 317,
              "signature": "def sign(self, message: bytes) -> bytes",
              "documentation": "Sign a message with this agent's Ed25519 signing key.\n\nUses the configured crypto backend to produce an Ed25519 signature.\n\nArgs:\n    message: The raw bytes to sign.\n\nReturns:\n    A 64-byte Ed25519 signature.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> sig = hmr.sign(b\"audit trail entry\")\n    >>> len(sig)\n    64"
            },
            {
              "name": "ForgeAgentIdentity.verify",
              "line": 344,
              "signature": "def verify(self, message: bytes, signature: bytes) -> bool",
              "documentation": "Verify an Ed25519 signature against this agent's public key.\n\nUses the configured crypto backend for Ed25519 verification.\n\nArgs:\n    message: The original message that was signed.\n    signature: The 64-byte Ed25519 signature to verify.\n\nReturns:\n    True if the signature is valid, False otherwise.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> sig = hmr.sign(b\"test\")\n    >>> hmr.verify(b\"test\", sig)\n    True\n    >>> hmr.verify(b\"tampered\", sig)\n    False"
            },
            {
              "name": "ForgeAgentIdentity.to_dict",
              "line": 372,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize the identity to a dictionary.\n\nSecurity: The private key reference is NOT included in the output.\nOnly the public key bytes are serialized (hex-encoded).\n\nReturns:\n    Dictionary representation of the identity."
            },
            {
              "name": "ForgeAgentIdentity.from_dict",
              "line": 390,
              "signature": "def from_dict(data: dict[str, Any]) -> ForgeAgentIdentity",
              "documentation": "Deserialize an identity from a dictionary.\n\nNote: The private key is not restored. A new WasmKeyRef is created\nwith only the public key bytes. Signing operations require the caller\nto reconnect a secure key source before use.\n\nArgs:\n    data: Dictionary representation of the identity.\n\nReturns:\n    The deserialized ForgeAgentIdentity.\n\nRaises:\n    InvalidIdentityError: If required fields are missing.\n    KeyError: If the dictionary is missing expected keys."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/identity/error.py",
          "sha256": "3f85e17efbfaaa4ac2c9540f3447a9c915d80ff05ca6c40047dc5260501244e0",
          "artifactSha256": "e7d20d249f9fb3e95a08ed763b76d439242efbb1bee72343f710b92f528ddf28",
          "url": "/reference/source/forge-py/src/forge/identity/error.py.txt",
          "declarations": [
            {
              "name": "ForgeIdentityError",
              "line": 16,
              "signature": "class ForgeIdentityError(ForgeError)",
              "documentation": "Base exception for all forge-identity operations.\n\nSubclasses carry actionable context: what failed, why, and the\nrelevant ANVIL specification section."
            },
            {
              "name": "IdentityDerivationError",
              "line": 24,
              "signature": "class IdentityDerivationError(ForgeIdentityError)",
              "documentation": "HKDF key derivation failed for the specified derivation path.\n\nThis indicates a failure in the cryptographic key derivation process\nwhen creating a child agent identity from a parent.\n\nSee ANVIL Spec section 11.1 -- OAS Identity Binding.\n\nArgs:\n    parent_did: The parent's DID from which derivation was attempted.\n    path: The HKDF derivation path that was used.\n    reason: A description of why the derivation failed.\n\nExample:\n    >>> err = IdentityDerivationError(\"did:oas:test:hmr:alice\", \"agent/bot\", \"HKDF failed\")\n    >>> \"alice\" in str(err)\n    True"
            },
            {
              "name": "IdentityDerivationError.__init__",
              "line": 43,
              "signature": "def __init__(self, parent_did: str, path: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "LineageVerificationError",
              "line": 53,
              "signature": "class LineageVerificationError(ForgeIdentityError)",
              "documentation": "Lineage chain verification failed for the specified identity.\n\nThe cryptographic chain from the agent to its human root could not be\nverified. This may indicate a tampered identity, a missing parent\ndocument, or an invalid proof signature.\n\nSee ANVIL Spec section 11.2 -- Lineage Propagation.\n\nArgs:\n    did: The DID of the identity whose lineage failed verification.\n    reason: A description of why verification failed.\n\nExample:\n    >>> err = LineageVerificationError(\"did:oas:test:agent:bot\", \"parent not found\")\n    >>> \"bot\" in str(err)\n    True"
            },
            {
              "name": "LineageVerificationError.__init__",
              "line": 72,
              "signature": "def __init__(self, did: str, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "ChainTooDeepError",
              "line": 78,
              "signature": "class ChainTooDeepError(ForgeIdentityError)",
              "documentation": "Lineage chain exceeds the maximum allowed generation depth.\n\nANVIL Spec section 11.2 defines a maximum lineage depth to prevent\nunbounded delegation chains. The default maximum is 16.\n\nArgs:\n    depth: The actual depth of the lineage chain.\n    max_depth: The configured maximum depth.\n\nExample:\n    >>> err = ChainTooDeepError(20, 16)\n    >>> \"20\" in str(err) and \"16\" in str(err) and \"ANVIL\" in str(err)\n    True"
            },
            {
              "name": "ChainTooDeepError.__init__",
              "line": 94,
              "signature": "def __init__(self, depth: int, max_depth: int) -> None",
              "documentation": ""
            },
            {
              "name": "InvalidIdentityError",
              "line": 103,
              "signature": "class InvalidIdentityError(ForgeIdentityError)",
              "documentation": "The identity is malformed or fails structural validation.\n\nThis covers cases like missing DID fields, invalid document structure,\nor inconsistent lineage sections.\n\nArgs:\n    reason: A description of the structural problem.\n\nExample:\n    >>> err = InvalidIdentityError(\"missing verification method\")\n    >>> \"missing\" in str(err)\n    True"
            },
            {
              "name": "InvalidIdentityError.__init__",
              "line": 118,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "IdentityPersistenceError",
              "line": 123,
              "signature": "class IdentityPersistenceError(ForgeIdentityError)",
              "documentation": "Saving or loading an identity to/from persistent storage failed.\n\nThis may indicate I/O errors, permission problems, or corrupted\nidentity files on disk.\n\nArgs:\n    reason: A description of the persistence failure.\n\nExample:\n    >>> err = IdentityPersistenceError(\"file not found: /tmp/id.json\")\n    >>> \"file not found\" in str(err)\n    True"
            },
            {
              "name": "IdentityPersistenceError.__init__",
              "line": 138,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-py/src/forge/identity/glyph.py",
          "sha256": "7cad42cfd1a68b4c9950fb95b197548b076d113e813ce03f41e209216619ecff",
          "artifactSha256": "da955a8764319b8bcff4b1fca104d063bdf36b28ffe4880cd484e4031c0d815d",
          "url": "/reference/source/forge-py/src/forge/identity/glyph.py.txt",
          "declarations": [
            {
              "name": "GlyphEntityKind",
              "line": 24,
              "signature": "class GlyphEntityKind(Enum)",
              "documentation": "Entity kinds supported by the glyph system.\n\nMaps to the upstream ``oas-glyph`` entity kind taxonomy:\n\n========= =============== ================\nKind      Upstream Value  Visual Motif\n========= =============== ================\nHMR       0               Shield (human)\nMHR       1               Multi-shield\nENR       2               Grid (entity)\nAGENT     3               Diamond (agent)\nORG       4               Hexagon (org)\n========= =============== ================"
            },
            {
              "name": "GlyphEntityKind.parse_kind",
              "line": 47,
              "signature": "def parse_kind(s: str) -> GlyphEntityKind | None",
              "documentation": "Parse a kind string into a GlyphEntityKind.\n\nArgs:\n    s: A lowercase kind string.\n\nReturns:\n    The parsed kind, or None if unknown.\n\nExample:\n    >>> GlyphEntityKind.parse_kind(\"agent\")\n    <GlyphEntityKind.AGENT: 'agent'>"
            },
            {
              "name": "GlyphEntityKind.as_str",
              "line": 65,
              "signature": "def as_str(self) -> str",
              "documentation": "Return the canonical string representation.\n\nReturns:\n    Lowercase kind name."
            },
            {
              "name": "GlyphEntityKind.as_u8",
              "line": 73,
              "signature": "def as_u8(self) -> int",
              "documentation": "Return the numeric value used in payload encoding.\n\nReturns:\n    Integer 0-4 matching the upstream oas-glyph discriminants."
            },
            {
              "name": "GlyphEntityKind.from_u8",
              "line": 89,
              "signature": "def from_u8(v: int) -> GlyphEntityKind | None",
              "documentation": "Reconstruct a GlyphEntityKind from its numeric value.\n\nArgs:\n    v: The numeric value.\n\nReturns:\n    The kind, or None if the value is invalid."
            },
            {
              "name": "GlyphColor",
              "line": 109,
              "signature": "class GlyphColor()",
              "documentation": "An RGB color triple.\n\nAll channels are 8-bit unsigned (0-255).\n\nArgs:\n    r: Red channel.\n    g: Green channel.\n    b: Blue channel."
            },
            {
              "name": "GlyphColor.to_hex",
              "line": 124,
              "signature": "def to_hex(self) -> str",
              "documentation": "Format as a CSS hex color string.\n\nReturns:\n    Hex color string (e.g., ``#ff8040``).\n\nExample:\n    >>> GlyphColor(255, 128, 64).to_hex()\n    '#ff8040'"
            },
            {
              "name": "GlyphColor.rgb",
              "line": 137,
              "signature": "def rgb(r: int, g: int, b: int) -> GlyphColor",
              "documentation": "Create a color from RGB components.\n\nArgs:\n    r: Red channel (0-255).\n    g: Green channel (0-255).\n    b: Blue channel (0-255).\n\nReturns:\n    A new GlyphColor."
            },
            {
              "name": "GlyphColor.to_dict",
              "line": 150,
              "signature": "def to_dict(self) -> dict[str, int]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary with r, g, b keys."
            },
            {
              "name": "GlyphColor.from_dict",
              "line": 159,
              "signature": "def from_dict(data: dict[str, int]) -> GlyphColor",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary with r, g, b keys.\n\nReturns:\n    The deserialized GlyphColor."
            },
            {
              "name": "GlyphPalette",
              "line": 172,
              "signature": "class GlyphPalette()",
              "documentation": "A color palette derived from the DID hash.\n\nArgs:\n    primary: The primary color.\n    secondary: The secondary color.\n    accent: The accent color.\n    background: The background color."
            },
            {
              "name": "GlyphDescriptor",
              "line": 189,
              "signature": "class GlyphDescriptor()",
              "documentation": "The glyph input contract: describes what to render.\n\nArgs:\n    did: The agent's DID string.\n    kind: The entity kind.\n    label: Optional human-readable label.\n\nExample:\n    >>> desc = GlyphDescriptor(\n    ...     did=\"did:oas:l1fe:agent:data-analyst\",\n    ...     kind=GlyphEntityKind.AGENT,\n    ...     label=\"Data Analyst\",\n    ... )\n    >>> desc.did\n    'did:oas:l1fe:agent:data-analyst'"
            },
            {
              "name": "GlyphDescriptor.to_dict",
              "line": 211,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "GlyphDescriptor.from_dict",
              "line": 223,
              "signature": "def from_dict(data: dict[str, Any]) -> GlyphDescriptor",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized GlyphDescriptor."
            },
            {
              "name": "GlyphDescriptor.to_json",
              "line": 238,
              "signature": "def to_json(self) -> str",
              "documentation": "Serialize to JSON string.\n\nReturns:\n    JSON string."
            },
            {
              "name": "GlyphDescriptor.from_json",
              "line": 247,
              "signature": "def from_json(data: str) -> GlyphDescriptor",
              "documentation": "Deserialize from JSON string.\n\nArgs:\n    data: JSON string.\n\nReturns:\n    The deserialized GlyphDescriptor."
            },
            {
              "name": "GlyphRenderTarget",
              "line": 259,
              "signature": "class GlyphRenderTarget(Enum)",
              "documentation": "Render target selection.\n\n``WEB``: SVG output for web rendering.\n``TERMINAL``: ANSI-colored terminal output."
            },
            {
              "name": "GlyphRenderFormat",
              "line": 270,
              "signature": "class GlyphRenderFormat(Enum)",
              "documentation": "Output format tag for render results."
            },
            {
              "name": "GlyphRenderOptions",
              "line": 281,
              "signature": "class GlyphRenderOptions()",
              "documentation": "Render options controlling the glyph output.\n\nArgs:\n    target: The render target (Web or Terminal).\n    width: Desired width in pixels (Web) or columns (Terminal).\n    height: Desired height in pixels (Web) or rows (Terminal).\n    color_override: Optional background color override."
            },
            {
              "name": "GlyphRenderResult",
              "line": 298,
              "signature": "class GlyphRenderResult()",
              "documentation": "The output of a glyph render operation.\n\nArgs:\n    format: The output format.\n    data: The rendered data bytes.\n    width: Width of the rendered output.\n    height: Height of the rendered output."
            },
            {
              "name": "GlyphRenderResult.svg_data",
              "line": 313,
              "signature": "def svg_data(self) -> str | None",
              "documentation": "Extract the rendered data as a UTF-8 string if text-based.\n\nReturns ``None`` for binary formats like PNG.\n\nReturns:\n    The string data, or None for binary formats."
            },
            {
              "name": "derive_palette",
              "line": 334,
              "signature": "def derive_palette(did: str, kind: GlyphEntityKind) -> GlyphPalette",
              "documentation": "Derive a deterministic color palette from a DID string.\n\nUses SHA-256 of the DID to derive hue values, producing a unique\nbut deterministic palette for each identity.\n\nArgs:\n    did: The DID string.\n    kind: The entity kind.\n\nReturns:\n    A GlyphPalette with four derived colors."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/identity/lineage.py",
          "sha256": "4ff72aeae5c99adbd3c91035fafd98b7b4ec540456f03b635296c43d19f56aa4",
          "artifactSha256": "3b90452e2492ffc1143d29939b3bcf9b8dbd388bd4360077172bc80dd76aef67",
          "url": "/reference/source/forge-py/src/forge/identity/lineage.py.txt",
          "declarations": [
            {
              "name": "LineageProof",
              "line": 51,
              "signature": "class LineageProof()",
              "documentation": "A cryptographic proof linking a child identity to its parent.\n\nEach hop in the lineage chain produces a ``LineageProof`` that contains\nthe parent DID, the derivation path used, a signature from the parent's\nkey, and a timestamp.\n\nANVIL Spec section 11.2 -- Lineage Propagation.\n\nArgs:\n    proof_type: The proof type identifier (``\"AgentLineageProof2025\"``).\n    parent_did: The DID of the parent identity.\n    child_did: The DID of the child identity.\n    derivation_path: The HKDF derivation path used.\n    signature_hex: The hex-encoded parent signature over the proof payload.\n    created: The ISO 8601 timestamp when the proof was created.\n\nExample:\n    >>> proof = LineageProof(\n    ...     proof_type=\"AgentLineageProof2025\",\n    ...     parent_did=\"did:oas:test:hmr:alice\",\n    ...     child_did=\"did:oas:test:agent:bot\",\n    ...     derivation_path=\"agent/bot\",\n    ...     signature_hex=\"deadbeef\" * 16,\n    ...     created=\"2026-01-15T00:00:00+00:00\",\n    ... )\n    >>> proof.proof_type\n    'AgentLineageProof2025'"
            },
            {
              "name": "LineageProof.to_dict",
              "line": 88,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize the proof to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "LineageProof.from_dict",
              "line": 104,
              "signature": "def from_dict(data: dict[str, Any]) -> LineageProof",
              "documentation": "Deserialize a proof from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized LineageProof."
            },
            {
              "name": "LineageChain",
              "line": 124,
              "signature": "class LineageChain()",
              "documentation": "A complete lineage chain from child to root.\n\nThe chain is an ordered sequence of ``LineageProof`` objects, from the\nmost recent child to the oldest ancestor (the root).\n\nANVIL Spec section 11.2 -- Lineage Propagation.\n\nArgs:\n    proofs: Ordered tuple of lineage proofs (child-to-root).\n    root_did: The DID of the chain's root identity (HMR or MHR).\n\nExample:\n    >>> chain = LineageChain(proofs=(), root_did=\"did:oas:test:hmr:alice\")\n    >>> chain.depth\n    0"
            },
            {
              "name": "LineageChain.depth",
              "line": 146,
              "signature": "def depth(self) -> int",
              "documentation": "Return the chain depth (number of hops from root).\n\nReturns:\n    The number of proofs in the chain."
            },
            {
              "name": "LineageChain.is_root",
              "line": 155,
              "signature": "def is_root(self) -> bool",
              "documentation": "Return True if this chain represents a root identity (no proofs).\n\nReturns:\n    True if the chain has zero proofs."
            },
            {
              "name": "LineageChain.to_dict",
              "line": 163,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize the chain to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "LineageChain.from_dict",
              "line": 175,
              "signature": "def from_dict(data: dict[str, Any]) -> LineageChain",
              "documentation": "Deserialize a chain from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized LineageChain."
            },
            {
              "name": "create_hmr_identity",
              "line": 188,
              "signature": "def create_hmr_identity(namespace: str, identifier: str) -> ForgeAgentIdentity",
              "documentation": "Create a new Human Root (HMR) identity.\n\nGenerates a fresh Ed25519 keypair, constructs an OAS\nIdentity Document for a ``did:oas:<namespace>:hmr:<identifier>`` DID,\nand signs it.\n\nHMR identities are the ultimate trust anchors in the lineage chain.\nEvery derived agent traces back to an HMR.\n\nSee ANVIL Spec section 11.1 -- OAS Identity Binding.\n\nArgs:\n    namespace: The OAS namespace (e.g., ``\"l1fe\"``, ``\"test\"``).\n    identifier: The unique identifier within the namespace.\n\nReturns:\n    A ForgeAgentIdentity with lineage depth 0 and kind ``\"hmr\"``.\n\nRaises:\n    InvalidIdentityError: If the resulting identity fails structural validation.\n\nExample:\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> hmr.did\n    'did:oas:test:hmr:alice'\n    >>> hmr.kind\n    'hmr'\n    >>> hmr.lineage_depth\n    0"
            },
            {
              "name": "create_mhr_identity",
              "line": 226,
              "signature": "def create_mhr_identity(namespace: str, identifier: str) -> ForgeAgentIdentity",
              "documentation": "Create a new Multi-Human Root (MHR) identity.\n\nSimilar to ``create_hmr_identity`` but for machine-originated root entities.\nMHR identities use ``did:oas:<namespace>:mhr:<identifier>``.\n\nSee ANVIL Spec section 11.1 -- OAS Identity Binding.\n\nArgs:\n    namespace: The OAS namespace (e.g., ``\"l1fe\"``, ``\"test\"``).\n    identifier: The unique identifier within the namespace.\n\nReturns:\n    A ForgeAgentIdentity with lineage depth 0 and kind ``\"mhr\"``.\n\nRaises:\n    InvalidIdentityError: If the resulting identity fails structural validation.\n\nExample:\n    >>> mhr = create_mhr_identity(\"test\", \"system1\")\n    >>> mhr.did\n    'did:oas:test:mhr:system1'\n    >>> mhr.kind\n    'mhr'\n    >>> mhr.lineage_depth\n    0"
            },
            {
              "name": "derive_agent_identity",
              "line": 260,
              "signature": "def derive_agent_identity(parent: ForgeAgentIdentity, name: str, namespace: str, *, max_depth: int=DEFAULT_MAX_LINEAGE_DEPTH) -> ForgeAgentIdentity",
              "documentation": "Derive a child agent identity from a parent identity.\n\nPerforms the complete agent derivation workflow per ANVIL Spec section 11.2:\n\n1. Validates the parent's lineage depth does not exceed the maximum.\n2. Derives a child Ed25519 keypair using HKDF-SHA256.\n3. Generates an AgentLineageProof2025 linking child to parent.\n4. Constructs a signed OAS Identity Document with a complete lineage section.\n\nThe child's lineage depth is ``parent.lineage_depth + 1``.\n\nArgs:\n    parent: The parent identity (HMR, MHR, or another agent).\n    name: The child agent's identifier (e.g., ``\"analyzer\"``, ``\"scraper\"``).\n    namespace: The child's namespace (often the same as the parent's).\n    max_depth: Maximum allowed lineage depth (default: 16).\n\nReturns:\n    A ForgeAgentIdentity with kind ``\"agent\"`` and an incremented lineage depth.\n\nRaises:\n    ChainTooDeepError: If the parent's lineage depth plus one exceeds ``max_depth``.\n    InvalidIdentityError: If the resulting identity fails structural validation.\n\nExample:\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> agent = derive_agent_identity(hmr, \"analyzer\", \"test\")\n    >>> agent.did\n    'did:oas:test:agent:analyzer'\n    >>> agent.kind\n    'agent'\n    >>> agent.lineage_depth\n    1"
            },
            {
              "name": "verify_lineage_chain",
              "line": 376,
              "signature": "def verify_lineage_chain(identity: ForgeAgentIdentity, document_store: dict[str, dict[str, Any]] | None=None) -> LineageChain",
              "documentation": "Verify the lineage chain for a given agent identity.\n\nWalks the cryptographic chain from the agent to its human root,\nverifying each hop's AgentLineageProof2025 signature against the\nresolved parent document's public key.\n\nSee ANVIL Spec section 11.2 -- Lineage Propagation.\n\nArgs:\n    identity: The agent identity whose lineage to verify.\n    document_store: A mapping from DID strings to OAS document\n        dictionaries. Used to resolve parent documents. If None,\n        only root identities (depth 0) can be verified.\n\nReturns:\n    A LineageChain containing all verified proofs.\n\nRaises:\n    LineageVerificationError: If any step of the verification fails\n        (missing parent, invalid signature, etc.).\n\nExample:\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> chain = verify_lineage_chain(hmr)\n    >>> chain.depth\n    0"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/identity/local_dev.py",
          "sha256": "5307c95a3523b807d5717d3ca74323bf82b1e12c237507e5a07e494da25e0d5a",
          "artifactSha256": "6f4dc06e38fa5637cbbd76d85036e2e321a50924899f3de22821a53a763cf94e",
          "url": "/reference/source/forge-py/src/forge/identity/local_dev.py.txt",
          "declarations": [
            {
              "name": "forge_dev_did",
              "line": 35,
              "signature": "def forge_dev_did(machine_id: str, kind: str, identifier: str) -> str",
              "documentation": "Construct a local dev DID string.\n\nArgs:\n    machine_id: The 16-char hex machine identifier from the profile.\n    kind: One of ``\"mhr\"``, ``\"hmr\"``, ``\"agent\"``, ``\"org\"``.\n    identifier: The entity name or derived fingerprint.\n\nReturns:\n    A DID string in ``did:forge-dev:<machine-id>:<kind>:<identifier>`` format.\n\nExample:\n    >>> forge_dev_did(\"a1b2c3d4e5f6a7b8\", \"agent\", \"data-analyst\")\n    'did:forge-dev:a1b2c3d4e5f6a7b8:agent:data-analyst'"
            },
            {
              "name": "derive_machine_id",
              "line": 53,
              "signature": "def derive_machine_id(profile_name: str) -> str",
              "documentation": "Derive a deterministic machine identifier from the current machine.\n\nThe ID is stable across sessions on the same machine for the same user\nand same profile, ensuring agent DIDs remain consistent across restarts.\n\nAlgorithm::\n\n    SHA-256(\"forge-dev-root:\" + hostname + \":\" + username + \":\" + profile_name)\n\ntruncated to the first 8 bytes, hex-encoded to 16 characters.\n\nArgs:\n    profile_name: The profile name (e.g., ``\"default\"``, ``\"alice\"``).\n\nReturns:\n    A 16-character hex string.\n\nExample:\n    >>> id1 = derive_machine_id(\"default\")\n    >>> id2 = derive_machine_id(\"default\")\n    >>> id1 == id2\n    True\n    >>> len(id1)\n    16"
            },
            {
              "name": "derive_machine_id_from_parts",
              "line": 84,
              "signature": "def derive_machine_id_from_parts(hostname: str, username: str, profile_name: str) -> str",
              "documentation": "Derive a machine identifier from explicit hostname, username, and profile.\n\nThis is the deterministic core of ``derive_machine_id``, exposed for\ncross-language parity testing where hostname and username must be fixed.\n\nArgs:\n    hostname: The machine hostname.\n    username: The OS username.\n    profile_name: The profile name.\n\nReturns:\n    A 16-character hex string.\n\nExample:\n    >>> derive_machine_id_from_parts(\"dev-machine\", \"alice\", \"default\")\n    ... # doctest: +SKIP\n    'a1b2c3d4e5f6a7b8'"
            },
            {
              "name": "validate_forge_dev_did",
              "line": 110,
              "signature": "def validate_forge_dev_did(did: str) -> str | None",
              "documentation": "Validate that a string is a valid forge-dev DID.\n\nArgs:\n    did: The DID string to validate.\n\nReturns:\n    None if valid, or an error message string if invalid.\n\nExample:\n    >>> validate_forge_dev_did(\"did:forge-dev:a1b2c3d4e5f6a7b8:agent:bot\")\n    >>> validate_forge_dev_did(\"did:oas:x:agent:bot\")\n    \"DID 'did:oas:x:agent:bot' does not use the 'forge-dev' method...\""
            },
            {
              "name": "LocalOrg",
              "line": 161,
              "signature": "class LocalOrg()",
              "documentation": "A local organization for grouping dev identities.\n\nIn production, orgs are managed by external services. In local dev,\nan org is a named container with a deterministic ID.\n\nArgs:\n    name: Human-readable org name. Defaults to ``\"local\"``."
            },
            {
              "name": "LocalOrg.id",
              "line": 174,
              "signature": "def id(self) -> str",
              "documentation": "Return the deterministic org ID.\n\nFormat: ``forge-dev-org:<name>``.\n\nReturns:\n    The org identifier string."
            },
            {
              "name": "ForgeDevIdentity",
              "line": 186,
              "signature": "class ForgeDevIdentity()",
              "documentation": "A local development identity wrapping agent metadata.\n\nThis is intentionally simplified compared to the Rust implementation\n(which wraps a full ``ForgeAgentIdentity`` with Ed25519 keys). The\nPython version stores the DID, kind, and metadata for development use.\n\nArgs:\n    did: The ``did:forge-dev`` identifier string.\n    kind: The entity kind (e.g., ``\"mhr\"``, ``\"agent\"``).\n    org_id: The local org this identity belongs to.\n    created_at: ISO 8601 creation timestamp.\n    lineage_depth: Lineage depth from the root identity."
            },
            {
              "name": "ForgeDevIdentity.to_dict",
              "line": 214,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            },
            {
              "name": "ForgeDevIdentity.from_dict",
              "line": 229,
              "signature": "def from_dict(data: dict[str, Any]) -> ForgeDevIdentity",
              "documentation": "Deserialize from a dictionary.\n\nArgs:\n    data: Dictionary representation.\n\nReturns:\n    The deserialized ForgeDevIdentity."
            },
            {
              "name": "LocalDevProfile",
              "line": 248,
              "signature": "class LocalDevProfile()",
              "documentation": "A local development profile providing identity without external services.\n\n``LocalDevProfile`` provisions a local root identity, derives agent\nidentities on demand, and groups them under a local organization.\n\nArgs:\n    root: The local developer's root identity.\n    org: The local organization context.\n    agents: Registry of derived agent identities, keyed by agent name.\n    machine_id: The 16-character hex machine identifier.\n    profile_name: The profile name."
            },
            {
              "name": "LocalDevProfile.create",
              "line": 269,
              "signature": "def create(profile_name: str='default') -> LocalDevProfile",
              "documentation": "Create a new local dev profile.\n\nDerives a machine ID from the current system and creates a root\nidentity with ``kind=mhr``.\n\nArgs:\n    profile_name: The profile name.\n\nReturns:\n    A new LocalDevProfile."
            },
            {
              "name": "LocalDevProfile.agent_identity",
              "line": 304,
              "signature": "def agent_identity(self, agent_name: str) -> ForgeDevIdentity",
              "documentation": "Derive or retrieve a cached agent identity.\n\nAgent identities are derived lazily from the root identity.\nOnce derived, they are cached in the profile.\n\nArgs:\n    agent_name: The agent's identifier (e.g., ``\"data-analyst\"``).\n\nReturns:\n    The cached or newly derived ForgeDevIdentity."
            },
            {
              "name": "LocalDevProfile.agent_count",
              "line": 336,
              "signature": "def agent_count(self) -> int",
              "documentation": "Return the number of cached agent identities.\n\nReturns:\n    The agent count."
            },
            {
              "name": "LocalDevProfile.to_dict",
              "line": 344,
              "signature": "def to_dict(self) -> dict[str, Any]",
              "documentation": "Serialize to a dictionary.\n\nReturns:\n    Dictionary representation."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/identity/persistence.py",
          "sha256": "957815486ba4e3fd0be40a432daf5b3d21f38855444cd84ce0a846ff968cd44d",
          "artifactSha256": "a330cdb6755ebc937f20ba255ff51bc707af5b8e769efbd12c47f1e15932bca7",
          "url": "/reference/source/forge-py/src/forge/identity/persistence.py.txt",
          "declarations": [
            {
              "name": "IdentityStore",
              "line": 27,
              "signature": "class IdentityStore(ABC)",
              "documentation": "Abstract base class for identity persistence backends.\n\nImplementations provide storage for ``ForgeAgentIdentity`` objects,\nkeyed by DID string.\n\nExample:\n    >>> store = MemoryIdentityStore()\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> store.save(hmr)\n    >>> loaded = store.load(hmr.did)\n    >>> loaded is not None and loaded.did == hmr.did\n    True"
            },
            {
              "name": "IdentityStore.save",
              "line": 44,
              "signature": "def save(self, identity: ForgeAgentIdentity) -> None",
              "documentation": "Save an identity to the store.\n\nArgs:\n    identity: The identity to persist.\n\nRaises:\n    IdentityPersistenceError: If the save operation fails."
            },
            {
              "name": "IdentityStore.load",
              "line": 55,
              "signature": "def load(self, did: str) -> ForgeAgentIdentity | None",
              "documentation": "Load an identity from the store by DID.\n\nArgs:\n    did: The DID string to look up.\n\nReturns:\n    The identity if found, or None if not in the store.\n\nRaises:\n    IdentityPersistenceError: If the load operation fails."
            },
            {
              "name": "IdentityStore.delete",
              "line": 69,
              "signature": "def delete(self, did: str) -> bool",
              "documentation": "Delete an identity from the store.\n\nArgs:\n    did: The DID string to delete.\n\nReturns:\n    True if the identity was found and deleted, False if not found.\n\nRaises:\n    IdentityPersistenceError: If the delete operation fails."
            },
            {
              "name": "IdentityStore.list_dids",
              "line": 83,
              "signature": "def list_dids(self) -> list[str]",
              "documentation": "List all DID strings in the store.\n\nReturns:\n    A list of DID strings."
            },
            {
              "name": "MemoryIdentityStore",
              "line": 91,
              "signature": "class MemoryIdentityStore(IdentityStore)",
              "documentation": "In-memory identity store for testing and development.\n\nIdentities are stored in a Python dictionary and are not persisted\nacross process restarts.\n\nExample:\n    >>> store = MemoryIdentityStore()\n    >>> store.list_dids()\n    []"
            },
            {
              "name": "MemoryIdentityStore.__init__",
              "line": 103,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "MemoryIdentityStore.save",
              "line": 106,
              "signature": "def save(self, identity: ForgeAgentIdentity) -> None",
              "documentation": "Save an identity to the in-memory store.\n\nArgs:\n    identity: The identity to save."
            },
            {
              "name": "MemoryIdentityStore.load",
              "line": 114,
              "signature": "def load(self, did: str) -> ForgeAgentIdentity | None",
              "documentation": "Load an identity from the in-memory store by DID.\n\nArgs:\n    did: The DID string to look up.\n\nReturns:\n    The identity if found, or None."
            },
            {
              "name": "MemoryIdentityStore.delete",
              "line": 125,
              "signature": "def delete(self, did: str) -> bool",
              "documentation": "Delete an identity from the in-memory store.\n\nArgs:\n    did: The DID string to delete.\n\nReturns:\n    True if found and deleted, False otherwise."
            },
            {
              "name": "MemoryIdentityStore.list_dids",
              "line": 139,
              "signature": "def list_dids(self) -> list[str]",
              "documentation": "List all DIDs in the in-memory store.\n\nReturns:\n    A list of DID strings."
            },
            {
              "name": "save_identity",
              "line": 152,
              "signature": "def save_identity(identity: ForgeAgentIdentity, path: Path | str) -> None",
              "documentation": "Save an agent identity to a JSON file at the specified path.\n\nThe identity is serialized as a JSON object containing the DID, kind,\npublic key (hex-encoded), full document data, and lineage depth.\n\nSecurity:\n    **WARNING**: The signing key reference is stored without encryption.\n    In production, use encrypted storage (AES-256-GCM or similar). This\n    function is suitable for development and testing only.\n\nSee ANVIL Spec section 11.1 -- OAS Identity Binding.\n\nArgs:\n    identity: The agent identity to save.\n    path: The filesystem path to write the JSON file to.\n\nRaises:\n    IdentityPersistenceError: If serialization or file I/O fails.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> import tempfile, os\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> path = os.path.join(tempfile.mkdtemp(), \"test-id.json\")\n    >>> save_identity(hmr, path)"
            },
            {
              "name": "load_identity",
              "line": 190,
              "signature": "def load_identity(path: Path | str) -> ForgeAgentIdentity",
              "documentation": "Load an agent identity from a JSON file at the specified path.\n\nReads and deserializes the identity JSON, reconstructs the public key\nreference, parses the OAS document, and returns a ``ForgeAgentIdentity``.\n\nSee ANVIL Spec section 11.1 -- OAS Identity Binding.\n\nArgs:\n    path: The filesystem path to read the JSON file from.\n\nReturns:\n    A ForgeAgentIdentity reconstructed from the persisted data.\n\nRaises:\n    IdentityPersistenceError: If the file cannot be read, the JSON is\n        malformed, or the identity fails validation.\n\nExample:\n    >>> from forge.identity.lineage import create_hmr_identity\n    >>> import tempfile, os\n    >>> hmr = create_hmr_identity(\"test\", \"alice\")\n    >>> path = os.path.join(tempfile.mkdtemp(), \"test-id.json\")\n    >>> save_identity(hmr, path)\n    >>> loaded = load_identity(path)\n    >>> loaded.did == hmr.did\n    True"
            }
          ]
        }
      ]
    },
    {
      "name": "forge.mcp",
      "language": "python",
      "version": "0.1.0",
      "description": "Python mcp package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/mcp",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/mcp/__init__.py",
          "sha256": "d6d678ad58a9c6dfba3f81000ed07fdcf8b4bbe4a5c28c2c6817aa987b7ca227",
          "artifactSha256": "e93c7e514865c05c53871bd70e8f2dd0b99a07ef7bea405b9cf0df20a9b47cf3",
          "url": "/reference/source/forge-py/src/forge/mcp/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/mcp/client.py",
          "sha256": "c75f09b08554e881fd868a09e1d2b16b8c958e623bca14611e1d77c9aa96c0f0",
          "artifactSha256": "ae9c32efadc172440a521ed1ba0273d6ab800e273acebe0406b9dfe8d1bd9439",
          "url": "/reference/source/forge-py/src/forge/mcp/client.py.txt",
          "declarations": [
            {
              "name": "McpClient",
              "line": 13,
              "signature": "class McpClient()",
              "documentation": "Client for connecting to MCP servers.\n\nThe client discovers tools and resources from an MCP server\nand enables agents to use them.\n\nArgs:\n    transport: The transport layer for communication.\n\nExample:\n    >>> # client = McpClient(StdioTransport())\n    >>> # tools = await client.list_tools()"
            },
            {
              "name": "McpClient.__init__",
              "line": 27,
              "signature": "def __init__(self, transport: Transport) -> None",
              "documentation": ""
            },
            {
              "name": "McpClient.initialize",
              "line": 36,
              "signature": "async def initialize(self) -> dict[str, Any]",
              "documentation": "Initialize the MCP session.\n\nReturns:\n    The server's initialization response."
            },
            {
              "name": "McpClient.list_tools",
              "line": 49,
              "signature": "async def list_tools(self) -> list[McpTool]",
              "documentation": "List all tools available from the server.\n\nReturns:\n    List of McpTool definitions."
            },
            {
              "name": "McpClient.call_tool",
              "line": 66,
              "signature": "async def call_tool(self, name: str, arguments: dict[str, Any]) -> Any",
              "documentation": "Call a tool on the server.\n\nArgs:\n    name: The tool name.\n    arguments: The tool arguments.\n\nReturns:\n    The tool result."
            },
            {
              "name": "McpClient.list_resources",
              "line": 82,
              "signature": "async def list_resources(self) -> list[McpResource]",
              "documentation": "List all resources available from the server.\n\nReturns:\n    List of McpResource definitions."
            },
            {
              "name": "McpClient.read_resource",
              "line": 99,
              "signature": "async def read_resource(self, uri: str) -> Any",
              "documentation": "Read a resource from the server.\n\nArgs:\n    uri: The resource URI.\n\nReturns:\n    The resource content."
            },
            {
              "name": "McpClient.close",
              "line": 111,
              "signature": "async def close(self) -> None",
              "documentation": "Close the MCP client connection."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/mcp/server.py",
          "sha256": "94075544b846c3d6ca47b67490bb05518df4d0db141423a0806d7e465256b108",
          "artifactSha256": "16af14429929700b31e071695ff0ee3038cada1d74eab6063476e92a11a72f60",
          "url": "/reference/source/forge-py/src/forge/mcp/server.py.txt",
          "declarations": [
            {
              "name": "McpServer",
              "line": 13,
              "signature": "class McpServer()",
              "documentation": "Server that exposes tools and resources via the MCP protocol.\n\nArgs:\n    name: The server name.\n    version: The server version.\n\nExample:\n    >>> server = McpServer(\"my-server\", \"1.0.0\")\n    >>> server.name\n    'my-server'"
            },
            {
              "name": "McpServer.__init__",
              "line": 26,
              "signature": "def __init__(self, name: str, version: str) -> None",
              "documentation": ""
            },
            {
              "name": "McpServer.add_tool",
              "line": 32,
              "signature": "def add_tool(self, tool: McpTool, handler: Callable[..., Awaitable[Any]]) -> None",
              "documentation": "Register a tool with a handler.\n\nArgs:\n    tool: The tool definition.\n    handler: Async handler function for the tool."
            },
            {
              "name": "McpServer.add_resource",
              "line": 45,
              "signature": "def add_resource(self, resource: McpResource, handler: Callable[..., Awaitable[Any]]) -> None",
              "documentation": "Register a resource with a handler.\n\nArgs:\n    resource: The resource definition.\n    handler: Async handler function for the resource."
            },
            {
              "name": "McpServer.serve",
              "line": 58,
              "signature": "async def serve(self, transport: Transport) -> None",
              "documentation": "Start serving requests on the given transport.\n\nRuns the server loop, handling JSON-RPC requests until the\ntransport is closed.\n\nArgs:\n    transport: The transport layer to use."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/mcp/transport.py",
          "sha256": "3fa773799897db8219d92dfe0e3dd14bc0ade06c1c12b975ecf3b3fde6bbfe1a",
          "artifactSha256": "6a9745c97648dcd441498e23830e6550e94d173601b07b9477c75d7fd88ced78",
          "url": "/reference/source/forge-py/src/forge/mcp/transport.py.txt",
          "declarations": [
            {
              "name": "Transport",
              "line": 11,
              "signature": "class Transport(ABC)",
              "documentation": "Abstract base class for MCP transports.\n\nTransports handle the bidirectional communication between\nMCP client and server."
            },
            {
              "name": "Transport.send",
              "line": 19,
              "signature": "async def send(self, message: dict[str, Any]) -> None",
              "documentation": "Send a JSON-RPC message.\n\nArgs:\n    message: The JSON-RPC message as a dictionary."
            },
            {
              "name": "Transport.receive",
              "line": 27,
              "signature": "async def receive(self) -> dict[str, Any] | None",
              "documentation": "Receive a JSON-RPC message.\n\nReturns:\n    The received message as a dictionary, or None if the\n    transport is closed."
            },
            {
              "name": "Transport.close",
              "line": 36,
              "signature": "async def close(self) -> None",
              "documentation": "Close the transport."
            },
            {
              "name": "StdioTransport",
              "line": 40,
              "signature": "class StdioTransport(Transport)",
              "documentation": "MCP transport over stdin/stdout.\n\nMessages are sent as JSON lines (one JSON object per line).\nThis is the standard MCP transport for subprocess-based servers."
            },
            {
              "name": "StdioTransport.__init__",
              "line": 47,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "StdioTransport.send",
              "line": 50,
              "signature": "async def send(self, message: dict[str, Any]) -> None",
              "documentation": "Write a JSON-RPC message to stdout.\n\nArgs:\n    message: The message to send."
            },
            {
              "name": "StdioTransport.receive",
              "line": 62,
              "signature": "async def receive(self) -> dict[str, Any] | None",
              "documentation": "Read a JSON-RPC message from stdin.\n\nReturns:\n    The parsed message, or None if EOF."
            },
            {
              "name": "StdioTransport.close",
              "line": 78,
              "signature": "async def close(self) -> None",
              "documentation": "Mark the transport as closed."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/mcp/types.py",
          "sha256": "ce2be3f8e12810494b24bdf200090937f5458268f06140ba0b49b416acacf5b0",
          "artifactSha256": "b61fbf604d3db2d774a504111cab54e00624cbe25e4404af496da508092e63d5",
          "url": "/reference/source/forge-py/src/forge/mcp/types.py.txt",
          "declarations": [
            {
              "name": "McpTool",
              "line": 12,
              "signature": "class McpTool()",
              "documentation": "An MCP tool definition.\n\nArgs:\n    name: The tool name.\n    description: Human-readable description.\n    input_schema: JSON Schema for the tool's input."
            },
            {
              "name": "McpResource",
              "line": 27,
              "signature": "class McpResource()",
              "documentation": "An MCP resource definition.\n\nArgs:\n    uri: The resource URI.\n    name: Human-readable name.\n    description: Human-readable description.\n    mime_type: The MIME type of the resource content."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.media",
      "language": "python",
      "version": "0.1.0",
      "description": "Python media package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/media",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/media/__init__.py",
          "sha256": "798335bfbfc22319961734618b739d1ed3c69bd7477bf32c8f90417d83d13916",
          "artifactSha256": "26125ca0e1b413ba1d053820b4b9dc1b89ae8808b177e06be5c7c5cc007f4f72",
          "url": "/reference/source/forge-py/src/forge/media/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/media/image.py",
          "sha256": "a86acad2afdf90e0f769b04e39424e6311efe8c507e89e2bccad04c4089f703a",
          "artifactSha256": "676af883b817b6ba7a8a235bd608f0c980de3386879c58a2e182a63435ddcce1",
          "url": "/reference/source/forge-py/src/forge/media/image.py.txt",
          "declarations": [
            {
              "name": "GeneratedImage",
              "line": 10,
              "signature": "class GeneratedImage()",
              "documentation": "A generated image result.\n\nArgs:\n    data: Base64-encoded image data or URL.\n    media_type: MIME type (e.g., \"image/png\").\n    revised_prompt: The prompt after model revision (if applicable)."
            },
            {
              "name": "ImageGenerationProvider",
              "line": 24,
              "signature": "class ImageGenerationProvider(ABC)",
              "documentation": "Abstract base class for image generation providers."
            },
            {
              "name": "ImageGenerationProvider.provider_name",
              "line": 29,
              "signature": "def provider_name(self) -> str",
              "documentation": "Return the provider name."
            },
            {
              "name": "ImageGenerationProvider.generate",
              "line": 33,
              "signature": "async def generate(self, prompt: str, *, size: str='1024x1024', quality: str='standard', n: int=1) -> list[GeneratedImage]",
              "documentation": "Generate images from a text prompt.\n\nArgs:\n    prompt: The text description of the desired image.\n    size: Image dimensions (e.g., \"1024x1024\").\n    quality: Image quality (\"standard\" or \"hd\").\n    n: Number of images to generate.\n\nReturns:\n    List of generated images."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/media/speech.py",
          "sha256": "2048f5400116d8b0f7409d2d1e5f00310fe2f9c5ff097e1e9ad8e27e184a0b76",
          "artifactSha256": "b8f04abd9226542492fb73a0461f30a5ec1506679f5e3d54b22326aad62ce260",
          "url": "/reference/source/forge-py/src/forge/media/speech.py.txt",
          "declarations": [
            {
              "name": "SpeechResult",
              "line": 10,
              "signature": "class SpeechResult()",
              "documentation": "A speech synthesis result.\n\nArgs:\n    audio_data: Raw audio bytes.\n    format: Audio format (e.g., \"mp3\", \"wav\").\n    duration_seconds: Duration of the generated audio."
            },
            {
              "name": "SpeechProvider",
              "line": 24,
              "signature": "class SpeechProvider(ABC)",
              "documentation": "Abstract base class for text-to-speech providers."
            },
            {
              "name": "SpeechProvider.provider_name",
              "line": 29,
              "signature": "def provider_name(self) -> str",
              "documentation": "Return the provider name."
            },
            {
              "name": "SpeechProvider.synthesize",
              "line": 33,
              "signature": "async def synthesize(self, text: str, *, voice: str='default', speed: float=1.0, format: str='mp3') -> SpeechResult",
              "documentation": "Synthesize speech from text.\n\nArgs:\n    text: The text to convert to speech.\n    voice: Voice identifier.\n    speed: Speech speed multiplier.\n    format: Output audio format.\n\nReturns:\n    The speech result."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/media/transcription.py",
          "sha256": "1eb89728ae88341161d721a517385000d6e7856dc716886473b06b4bbf35826d",
          "artifactSha256": "05843f8ff14ea40bd8adde21df82b569f30e3b11d42b2cd3d5588d7ec0c452a4",
          "url": "/reference/source/forge-py/src/forge/media/transcription.py.txt",
          "declarations": [
            {
              "name": "TranscriptionResult",
              "line": 10,
              "signature": "class TranscriptionResult()",
              "documentation": "A transcription result.\n\nArgs:\n    text: The transcribed text.\n    language: The detected language code (e.g., \"en\").\n    duration_seconds: Duration of the audio in seconds."
            },
            {
              "name": "TranscriptionProvider",
              "line": 24,
              "signature": "class TranscriptionProvider(ABC)",
              "documentation": "Abstract base class for audio transcription providers."
            },
            {
              "name": "TranscriptionProvider.provider_name",
              "line": 29,
              "signature": "def provider_name(self) -> str",
              "documentation": "Return the provider name."
            },
            {
              "name": "TranscriptionProvider.transcribe",
              "line": 33,
              "signature": "async def transcribe(self, audio_data: bytes, *, language: str | None=None, format: str='wav') -> TranscriptionResult",
              "documentation": "Transcribe audio to text.\n\nArgs:\n    audio_data: Raw audio bytes.\n    language: Optional language hint.\n    format: Audio format (e.g., \"wav\", \"mp3\").\n\nReturns:\n    The transcription result."
            }
          ]
        }
      ]
    },
    {
      "name": "forge.telemetry",
      "language": "python",
      "version": "0.1.0",
      "description": "Python telemetry package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/telemetry",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/telemetry/__init__.py",
          "sha256": "6b52b205836ca6a929276d4bdbfaddc8c7bf3c19f03135ba7fb0408fc83e538e",
          "artifactSha256": "95ffe7062d38f2855dd6acba64946a74b861f8d163a19f88e833f9f5d51e9eb7",
          "url": "/reference/source/forge-py/src/forge/telemetry/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/telemetry/audit.py",
          "sha256": "6962dbb720ecafdffbb49086fc8b5f4e5a28d25251378ff3cfb462b3aacade51",
          "artifactSha256": "b00348e033710147ed63e234a5551514ed3cdba8a10a62e8300990145acc8a6d",
          "url": "/reference/source/forge-py/src/forge/telemetry/audit.py.txt",
          "declarations": [
            {
              "name": "AuditEntry",
              "line": 25,
              "signature": "class AuditEntry()",
              "documentation": "A single audit trail entry.\n\nEach entry has a sequential index assigned by the AuditTrail and wraps\nan AuditEvent with the full event details.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    index: Sequential index in the trail (0-based).\n    event: The audit event.\n\nExample:\n    >>> from forge.telemetry.contract import AuditEvent, AuditEventKind\n    >>> event = AuditEvent.new(\n    ...     AuditEventKind.AGENT_INSTANTIATED,\n    ...     \"did:oas:l1fe:agent:test\",\n    ...     {},\n    ... )\n    >>> entry = AuditEntry(index=0, event=event)\n    >>> entry.index\n    0"
            },
            {
              "name": "AuditTrail",
              "line": 57,
              "signature": "class AuditTrail()",
              "documentation": "An append-only audit trail with optional Ed25519 signatures.\n\nPer ANVIL Spec section 14.2, every significant agent operation is recorded\nin the audit trail. Entries are timestamped and optionally signed by the\nagent's Ed25519 key. The trail assigns sequential indices starting from 0.\n\nInvariants:\n    - Entries are append-only; removal is not supported.\n    - Each entry's index equals its position in the trail.\n    - The agent DID is set at creation and does not change.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    agent_did: The agent's OAS DID string.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:analyst\")\n    >>> trail.is_empty()\n    True\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.AGENT_INSTANTIATED,\n    ...     \"did:oas:l1fe:agent:analyst\",\n    ...     {\"module_hash\": \"abc123\"},\n    ... ))\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:analyst\",\n    ...     {\"tool\": \"calculator\", \"status\": \"success\"},\n    ... ))\n    >>> len(trail)\n    2\n    >>> trail.entries()[0].index\n    0\n    >>> trail.entries()[1].index\n    1"
            },
            {
              "name": "AuditTrail.__init__",
              "line": 96,
              "signature": "def __init__(self, agent_did: str) -> None",
              "documentation": ""
            },
            {
              "name": "AuditTrail.agent_did",
              "line": 101,
              "signature": "def agent_did(self) -> str",
              "documentation": "Return the agent DID associated with this trail.\n\nReturns:\n    The agent's OAS DID string."
            },
            {
              "name": "AuditTrail.append",
              "line": 109,
              "signature": "def append(self, event: AuditEvent) -> None",
              "documentation": "Append an audit event to the trail.\n\nThe event is wrapped in an AuditEntry with a sequential index\nequal to the current length of the trail.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    event: The audit event to append.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:bot\")\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.CAPABILITY_CHECK,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"capability\": \"web_search\", \"granted\": True},\n    ... ))\n    >>> len(trail)\n    1"
            },
            {
              "name": "AuditTrail.entries",
              "line": 133,
              "signature": "def entries(self) -> list[AuditEntry]",
              "documentation": "Return all entries in the trail.\n\nReturns:\n    A list of AuditEntry in sequential order."
            },
            {
              "name": "AuditTrail.is_empty",
              "line": 145,
              "signature": "def is_empty(self) -> bool",
              "documentation": "Return True if the trail contains no entries."
            },
            {
              "name": "AuditTrail.last",
              "line": 149,
              "signature": "def last(self) -> AuditEntry | None",
              "documentation": "Return the last entry in the trail, or None if empty.\n\nReturns:\n    The most recently appended entry, or None.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:bot\")\n    >>> trail.last() is None\n    True\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.AGENT_INSTANTIATED,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {},\n    ... ))\n    >>> trail.last() is not None\n    True"
            },
            {
              "name": "AuditTrail.filter_by_kind",
              "line": 171,
              "signature": "def filter_by_kind(self, kind: AuditEventKind) -> list[AuditEntry]",
              "documentation": "Return all entries matching the given AuditEventKind.\n\nANVIL Spec section 14.2 -- Audit Trail (filtering).\n\nArgs:\n    kind: The kind of audit event to filter for.\n\nReturns:\n    A list of entries whose event kind matches.\n\nExample:\n    >>> trail = AuditTrail(\"did:oas:l1fe:agent:bot\")\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"tool\": \"search\"},\n    ... ))\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.NETWORK_ACCESS,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"url\": \"https://example.com\"},\n    ... ))\n    >>> trail.append(AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:bot\",\n    ...     {\"tool\": \"calculator\"},\n    ... ))\n    >>> tools = trail.filter_by_kind(AuditEventKind.TOOL_INVOCATION)\n    >>> len(tools)\n    2\n    >>> network = trail.filter_by_kind(AuditEventKind.NETWORK_ACCESS)\n    >>> len(network)\n    1"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/telemetry/collector.py",
          "sha256": "afad2373c17cbf04cba2597a7b7a00aa8af60a4b8ecc62bfe080c8f47b1241e4",
          "artifactSha256": "211ab97b1e825acf56d2b93b2839fcd44bcbe0aad18391ed311e579b88451af0",
          "url": "/reference/source/forge-py/src/forge/telemetry/collector.py.txt",
          "declarations": [
            {
              "name": "CompletedSpan",
              "line": 31,
              "signature": "class CompletedSpan()",
              "documentation": "A completed span with timing information.\n\nRepresents a span that has been started and ended, capturing the full\nduration and attributes of the operation.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    span_id: The unique identifier for this span.\n    name: The span name (e.g., ``\"anvil.generate\"``, ``\"anvil.tool.invoke\"``).\n    attributes: Key-value attributes associated with this span.\n    start_time: ISO 8601 timestamp of when the span was started.\n    end_time: ISO 8601 timestamp of when the span was ended.\n    agent_did: The agent's OAS DID, if available.\n\nExample:\n    >>> span = CompletedSpan(\n    ...     span_id=SpanId.generate(),\n    ...     name=\"anvil.generate\",\n    ...     attributes=[(\"model\", \"gpt-4o\")],\n    ...     start_time=\"2026-02-19T00:00:00Z\",\n    ...     end_time=\"2026-02-19T00:00:01Z\",\n    ...     agent_did=\"did:oas:l1fe:agent:test\",\n    ... )\n    >>> span.name\n    'anvil.generate'"
            },
            {
              "name": "SpanCollector",
              "line": 72,
              "signature": "class SpanCollector(Protocol)",
              "documentation": "Protocol for collecting completed telemetry spans.\n\nImplementations can store spans in memory, write them to disk, or forward\nthem to an external collector.\n\nANVIL Spec section 14.1 -- Telemetry Contract (span collection)."
            },
            {
              "name": "SpanCollector.record_span",
              "line": 81,
              "signature": "def record_span(self, span: CompletedSpan) -> None",
              "documentation": "Record a completed span.\n\nArgs:\n    span: The completed span to record."
            },
            {
              "name": "SpanCollector.spans",
              "line": 89,
              "signature": "def spans(self) -> list[CompletedSpan]",
              "documentation": "Retrieve all recorded spans.\n\nReturns:\n    A list of all completed spans recorded so far."
            },
            {
              "name": "SpanCollector.clear",
              "line": 97,
              "signature": "def clear(self) -> None",
              "documentation": "Clear all recorded spans."
            },
            {
              "name": "SpanCollector.is_empty",
              "line": 105,
              "signature": "def is_empty(self) -> bool",
              "documentation": "Return True if no spans have been recorded."
            },
            {
              "name": "NoopCollector",
              "line": 114,
              "signature": "class NoopCollector()",
              "documentation": "Discards all spans. Zero-cost default for standalone agents.\n\nUse NoopCollector when span collection is not needed. All operations\nare no-ops and allocate nothing.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> collector = NoopCollector()\n    >>> collector.record_span(CompletedSpan(\n    ...     span_id=SpanId.generate(),\n    ...     name=\"discarded\",\n    ...     attributes=[],\n    ...     start_time=\"2026-01-01T00:00:00Z\",\n    ...     end_time=\"2026-01-01T00:00:01Z\",\n    ... ))\n    >>> len(collector)\n    0\n    >>> collector.is_empty()\n    True"
            },
            {
              "name": "NoopCollector.record_span",
              "line": 137,
              "signature": "def record_span(self, span: CompletedSpan) -> None",
              "documentation": "No-op: discards the span."
            },
            {
              "name": "NoopCollector.spans",
              "line": 140,
              "signature": "def spans(self) -> list[CompletedSpan]",
              "documentation": "Always returns an empty list."
            },
            {
              "name": "NoopCollector.clear",
              "line": 144,
              "signature": "def clear(self) -> None",
              "documentation": "No-op: nothing to clear."
            },
            {
              "name": "NoopCollector.is_empty",
              "line": 151,
              "signature": "def is_empty(self) -> bool",
              "documentation": "Always returns True."
            },
            {
              "name": "InMemoryCollector",
              "line": 160,
              "signature": "class InMemoryCollector()",
              "documentation": "Stores spans in memory. Useful for testing and debugging.\n\nThread-safe via ``threading.Lock``. Not intended for high-throughput\nproduction use; use a dedicated exporter for production telemetry.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nExample:\n    >>> collector = InMemoryCollector()\n    >>> collector.is_empty()\n    True\n    >>> collector.record_span(CompletedSpan(\n    ...     span_id=SpanId.from_string(\"span-1\"),\n    ...     name=\"test.span\",\n    ...     attributes=[(\"key\", \"value\")],\n    ...     start_time=\"2026-01-01T00:00:00Z\",\n    ...     end_time=\"2026-01-01T00:00:01Z\",\n    ...     agent_did=\"did:oas:l1fe:agent:test\",\n    ... ))\n    >>> len(collector)\n    1"
            },
            {
              "name": "InMemoryCollector.__init__",
              "line": 184,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "InMemoryCollector.record_span",
              "line": 188,
              "signature": "def record_span(self, span: CompletedSpan) -> None",
              "documentation": "Record a completed span.\n\nArgs:\n    span: The completed span to record."
            },
            {
              "name": "InMemoryCollector.spans",
              "line": 197,
              "signature": "def spans(self) -> list[CompletedSpan]",
              "documentation": "Retrieve all recorded spans.\n\nReturns:\n    A list of all completed spans recorded so far."
            },
            {
              "name": "InMemoryCollector.clear",
              "line": 206,
              "signature": "def clear(self) -> None",
              "documentation": "Clear all recorded spans."
            },
            {
              "name": "InMemoryCollector.is_empty",
              "line": 216,
              "signature": "def is_empty(self) -> bool",
              "documentation": "Return True if no spans have been recorded."
            },
            {
              "name": "InMemoryTelemetry",
              "line": 239,
              "signature": "class InMemoryTelemetry()",
              "documentation": "In-memory telemetry implementation that stores both spans and events.\n\nWraps InMemoryCollector for span storage and tracks active spans to\nproduce CompletedSpan records when end_span is called. Also collects\nemitted AuditEvent entries.\n\nImplements the TelemetryContract interface for use in testing and\ndebugging scenarios.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    agent_did: Optional agent DID to associate with recorded spans.\n\nExample:\n    >>> telemetry = InMemoryTelemetry()\n    >>> span_id = telemetry.start_span(\"anvil.generate\", [(\"model\", \"gpt-4o\")])\n    >>> telemetry.end_span(span_id)\n    >>> telemetry.span_count()\n    1"
            },
            {
              "name": "InMemoryTelemetry.__init__",
              "line": 262,
              "signature": "def __init__(self, agent_did: str | None=None) -> None",
              "documentation": ""
            },
            {
              "name": "InMemoryTelemetry.start_span",
              "line": 271,
              "signature": "def start_span(self, name: str, attributes: list[tuple[str, str]] | None=None) -> SpanId",
              "documentation": "Start a new span with the given name and attributes.\n\nArgs:\n    name: The span name (use dotted notation, e.g., ``\"anvil.generate\"``).\n    attributes: Key-value pairs of span attributes.\n\nReturns:\n    A unique SpanId for the started span."
            },
            {
              "name": "InMemoryTelemetry.end_span",
              "line": 296,
              "signature": "def end_span(self, span_id: SpanId) -> None",
              "documentation": "End a previously started span.\n\nIf the span_id is not found among active spans, this is a silent no-op\n(matching the Rust reference behavior).\n\nArgs:\n    span_id: The ID returned by start_span."
            },
            {
              "name": "InMemoryTelemetry.emit_event",
              "line": 325,
              "signature": "def emit_event(self, event: AuditEvent) -> None",
              "documentation": "Emit an audit event for the agent's audit trail.\n\nArgs:\n    event: The audit event to record."
            },
            {
              "name": "InMemoryTelemetry.flush",
              "line": 334,
              "signature": "def flush(self) -> None",
              "documentation": "Flush buffered telemetry data. Always succeeds for in-memory storage."
            },
            {
              "name": "InMemoryTelemetry.completed_spans",
              "line": 339,
              "signature": "def completed_spans(self) -> list[CompletedSpan]",
              "documentation": "Return all completed spans.\n\nReturns:\n    A list of all completed spans that have been started and ended."
            },
            {
              "name": "InMemoryTelemetry.events",
              "line": 347,
              "signature": "def events(self) -> list[AuditEvent]",
              "documentation": "Return all emitted audit events.\n\nReturns:\n    A list of all audit events emitted via emit_event."
            },
            {
              "name": "InMemoryTelemetry.clear",
              "line": 356,
              "signature": "def clear(self) -> None",
              "documentation": "Clear all collected spans and events."
            },
            {
              "name": "InMemoryTelemetry.span_count",
              "line": 363,
              "signature": "def span_count(self) -> int",
              "documentation": "Return the number of completed spans."
            },
            {
              "name": "InMemoryTelemetry.event_count",
              "line": 367,
              "signature": "def event_count(self) -> int",
              "documentation": "Return the number of emitted events."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/telemetry/contract.py",
          "sha256": "a8fb592a5293cd8f06ae73bd3106860a109fdb3f3fe50838e980503f29bb6e94",
          "artifactSha256": "82a4bb01a5f1ce36d3e54ddb96ed59aa8f25a98cc40575baf3be64384d32f176",
          "url": "/reference/source/forge-py/src/forge/telemetry/contract.py.txt",
          "declarations": [
            {
              "name": "SpanId",
              "line": 25,
              "signature": "class SpanId()",
              "documentation": "A unique span identifier.\n\nEach span started via the TelemetryContract receives a SpanId that\nmust be passed to end_span when the operation completes. IDs are\ngenerated as UUID v4 strings for global uniqueness.\n\nANVIL Spec section 14.1 -- Telemetry Contract (span identification).\n\nExample:\n    >>> span_id = SpanId.generate()\n    >>> len(span_id.value) > 0\n    True"
            },
            {
              "name": "SpanId.__init__",
              "line": 42,
              "signature": "def __init__(self, value: str) -> None",
              "documentation": ""
            },
            {
              "name": "SpanId.generate",
              "line": 46,
              "signature": "def generate(cls) -> SpanId",
              "documentation": "Create a new random span ID using UUID v4.\n\nReturns:\n    A globally unique SpanId.\n\nExample:\n    >>> a = SpanId.generate()\n    >>> b = SpanId.generate()\n    >>> a.value != b.value\n    True"
            },
            {
              "name": "SpanId.from_string",
              "line": 61,
              "signature": "def from_string(cls, value: str) -> SpanId",
              "documentation": "Create a SpanId from an existing string value.\n\nArgs:\n    value: The span identifier string.\n\nReturns:\n    A SpanId wrapping the given string."
            },
            {
              "name": "AuditEventKind",
              "line": 91,
              "signature": "class AuditEventKind(Enum)",
              "documentation": "Kinds of audit events that agents can emit.\n\nANVIL Spec section 14.3 -- Audit Events.\n\nExample:\n    >>> AuditEventKind.TOOL_INVOCATION.value\n    'tool_invocation'"
            },
            {
              "name": "AuditEvent",
              "line": 120,
              "signature": "class AuditEvent()",
              "documentation": "An audit event recording a significant agent operation.\n\nEach event is associated with an agent DID, timestamped, and optionally\nsigned by the agent's Ed25519 key. Audit events form the foundation of\nthe agent's audit trail.\n\nANVIL Spec section 14.3 -- Audit Events.\n\nArgs:\n    kind: The kind of event.\n    agent_did: The agent's OAS DID.\n    details: Event-specific details as a dict/JSON value.\n    timestamp: ISO 8601 timestamp. Defaults to current UTC time.\n    signature: Optional Ed25519 signature (hex-encoded).\n\nExample:\n    >>> event = AuditEvent.new(\n    ...     AuditEventKind.TOOL_INVOCATION,\n    ...     \"did:oas:l1fe:agent:analyzer\",\n    ...     {\"tool\": \"web_search\", \"status\": \"success\"},\n    ... )\n    >>> event.kind\n    <AuditEventKind.TOOL_INVOCATION: 'tool_invocation'>"
            },
            {
              "name": "AuditEvent.new",
              "line": 153,
              "signature": "def new(cls, kind: AuditEventKind, agent_did: str, details: Any) -> AuditEvent",
              "documentation": "Create a new AuditEvent with the current UTC timestamp.\n\nThe signature is initially None. Call with_signature to attach an\nEd25519 signature after construction.\n\nArgs:\n    kind: The kind of audit event.\n    agent_did: The agent's OAS DID string.\n    details: Event-specific details.\n\nReturns:\n    A new AuditEvent with the timestamp set to the current UTC time."
            },
            {
              "name": "AuditEvent.with_signature",
              "line": 180,
              "signature": "def with_signature(self, signature: str) -> AuditEvent",
              "documentation": "Attach an Ed25519 signature to this event.\n\nArgs:\n    signature: The hex-encoded Ed25519 signature.\n\nReturns:\n    Self with the signature attached (builder pattern)."
            },
            {
              "name": "TelemetryContract",
              "line": 197,
              "signature": "class TelemetryContract(Protocol)",
              "documentation": "ANVIL Spec section 14.1 -- Telemetry Contract.\n\nDefines the telemetry emission interface for ANVIL-compliant agents.\nImplementations collect spans, emit audit events, and support flushing\nbuffered telemetry data to external systems.\n\nContract Guarantees:\n    - start_span always returns a valid SpanId\n    - end_span is idempotent for implementations that track span state\n    - emit_event is non-blocking (events may be buffered)\n    - flush ensures all buffered data is written to the backend"
            },
            {
              "name": "TelemetryContract.start_span",
              "line": 211,
              "signature": "def start_span(self, name: str, attributes: list[tuple[str, str]] | None=None) -> SpanId",
              "documentation": "Start a new span with the given name and attributes.\n\nArgs:\n    name: The span name (use dotted notation, e.g., \"anvil.generate\").\n    attributes: Key-value pairs of span attributes.\n\nReturns:\n    A unique SpanId for the started span."
            },
            {
              "name": "TelemetryContract.end_span",
              "line": 227,
              "signature": "def end_span(self, span_id: SpanId) -> None",
              "documentation": "End a previously started span.\n\nArgs:\n    span_id: The ID returned by start_span."
            },
            {
              "name": "TelemetryContract.emit_event",
              "line": 235,
              "signature": "def emit_event(self, event: AuditEvent) -> None",
              "documentation": "Emit an audit event for the agent's audit trail.\n\nArgs:\n    event: The audit event to record."
            },
            {
              "name": "TelemetryContract.flush",
              "line": 243,
              "signature": "def flush(self) -> None",
              "documentation": "Flush any buffered telemetry data to the backend.\n\nRaises:\n    FlushFailedError: If the flush operation fails."
            },
            {
              "name": "NoopTelemetry",
              "line": 256,
              "signature": "class NoopTelemetry()",
              "documentation": "No-op telemetry implementation that discards all telemetry data.\n\nUsed as the default for agents that do not need telemetry collection\nor when telemetry is disabled. All operations are zero-cost.\n\nANVIL Spec section 14.1 -- Telemetry Contract (default implementation).\n\nExample:\n    >>> noop = NoopTelemetry()\n    >>> span = noop.start_span(\"test\")\n    >>> noop.end_span(span)\n    >>> noop.flush()"
            },
            {
              "name": "NoopTelemetry.start_span",
              "line": 271,
              "signature": "def start_span(self, name: str, attributes: list[tuple[str, str]] | None=None) -> SpanId",
              "documentation": "Return a generated SpanId without recording any span data."
            },
            {
              "name": "NoopTelemetry.end_span",
              "line": 279,
              "signature": "def end_span(self, span_id: SpanId) -> None",
              "documentation": "No-op: does nothing."
            },
            {
              "name": "NoopTelemetry.emit_event",
              "line": 282,
              "signature": "def emit_event(self, event: AuditEvent) -> None",
              "documentation": "No-op: discards the event."
            },
            {
              "name": "NoopTelemetry.flush",
              "line": 285,
              "signature": "def flush(self) -> None",
              "documentation": "Always succeeds: no data to flush."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/telemetry/errors.py",
          "sha256": "60176e32cba3c6f2414d94f1ca523a5d34cfdeebd7c3adde6f4b5b77be2c5acf",
          "artifactSha256": "f44b43dcbe5edb1fa74f352b4d4ba5ba28230f5ddc421228171e4c3a200494a6",
          "url": "/reference/source/forge-py/src/forge/telemetry/errors.py.txt",
          "declarations": [
            {
              "name": "TelemetryError",
              "line": 14,
              "signature": "class TelemetryError(ForgeError)",
              "documentation": "Base error for telemetry operations."
            },
            {
              "name": "SpanNotFoundError",
              "line": 18,
              "signature": "class SpanNotFoundError(TelemetryError)",
              "documentation": "A span with the given ID was not found in the collector.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    span_id: The span ID that was not found."
            },
            {
              "name": "SpanNotFoundError.__init__",
              "line": 27,
              "signature": "def __init__(self, span_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "SpanAlreadyClosedError",
              "line": 35,
              "signature": "class SpanAlreadyClosedError(TelemetryError)",
              "documentation": "An attempt was made to close a span that is already closed.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    span_id: The span ID that was already closed."
            },
            {
              "name": "SpanAlreadyClosedError.__init__",
              "line": 44,
              "signature": "def __init__(self, span_id: str) -> None",
              "documentation": ""
            },
            {
              "name": "AuditEntryInvalidError",
              "line": 52,
              "signature": "class AuditEntryInvalidError(TelemetryError)",
              "documentation": "An audit entry failed validation.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    reason: The reason the entry is invalid."
            },
            {
              "name": "AuditEntryInvalidError.__init__",
              "line": 61,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "AuditTrailCorruptedError",
              "line": 69,
              "signature": "class AuditTrailCorruptedError(TelemetryError)",
              "documentation": "The audit trail integrity check failed at the given index.\n\nANVIL Spec section 14.2 -- Audit Trail.\n\nArgs:\n    index: The index where corruption was detected.\n    reason: The reason for the corruption."
            },
            {
              "name": "AuditTrailCorruptedError.__init__",
              "line": 79,
              "signature": "def __init__(self, index: int, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "FlushFailedError",
              "line": 88,
              "signature": "class FlushFailedError(TelemetryError)",
              "documentation": "Flushing buffered telemetry data to the backend failed.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    reason: The reason the flush failed."
            },
            {
              "name": "FlushFailedError.__init__",
              "line": 97,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            },
            {
              "name": "CollectorFullError",
              "line": 105,
              "signature": "class CollectorFullError(TelemetryError)",
              "documentation": "The span collector has reached its capacity limit.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    capacity: The maximum number of spans the collector can hold."
            },
            {
              "name": "CollectorFullError.__init__",
              "line": 114,
              "signature": "def __init__(self, capacity: int) -> None",
              "documentation": ""
            },
            {
              "name": "ExportFailedError",
              "line": 122,
              "signature": "class ExportFailedError(TelemetryError)",
              "documentation": "Exporting telemetry data to an external system failed.\n\nANVIL Spec section 14.1 -- Telemetry Contract.\n\nArgs:\n    reason: The reason the export failed."
            },
            {
              "name": "ExportFailedError.__init__",
              "line": 131,
              "signature": "def __init__(self, reason: str) -> None",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "forge.tool",
      "language": "python",
      "version": "0.1.0",
      "description": "Python tool package; imports are explicit from this package.",
      "manifest": "forge-py/pyproject.toml",
      "manifestSha256": "7f96957378b21995bf2e583af2afd1b9e6fb3b0089ff3559d62c7e012a034696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/python/tool",
      "features": {},
      "files": [
        {
          "path": "forge-py/src/forge/tool/__init__.py",
          "sha256": "047fa45989a08b35c130afdbb798c19668f64b516f24fa022f5b2eb460a3185f",
          "artifactSha256": "28d69b72fa6f67aa35514ea203324675498d278be7ac7383814ec012dc8704dd",
          "url": "/reference/source/forge-py/src/forge/tool/__init__.py.txt",
          "declarations": []
        },
        {
          "path": "forge-py/src/forge/tool/approval.py",
          "sha256": "6ee6480bab1381f983e59a7fe4216b5ff7e7c2873f8d637bc451381465cd37bb",
          "artifactSha256": "0804957fbde857b92bc1fe5bb01c6d43f31975aad1433750686a99e7edf4fc52",
          "url": "/reference/source/forge-py/src/forge/tool/approval.py.txt",
          "declarations": [
            {
              "name": "ApprovalHandler",
              "line": 22,
              "signature": "class ApprovalHandler(ABC)",
              "documentation": "Abstract base class for tool approval decisions.\n\nANVIL Spec section 8.6: The approval step is mandatory."
            },
            {
              "name": "ApprovalHandler.approve",
              "line": 29,
              "signature": "async def approve(self, tool_call: ToolCall, tool_definition: ToolDefinition) -> ToolApproval",
              "documentation": "Decide whether to approve a tool call.\n\nArgs:\n    tool_call: The tool call to evaluate.\n    tool_definition: The tool definition.\n\nReturns:\n    An approval decision (Approve, Deny, or Modify)."
            },
            {
              "name": "AutoApproveHandler",
              "line": 45,
              "signature": "class AutoApproveHandler(ApprovalHandler)",
              "documentation": "An approval handler that automatically approves all tool calls.\n\nThis is the default handler for development and testing. Production\ndeployments should use a more restrictive handler.\n\nExample:\n    >>> import asyncio\n    >>> from forge.core.tool import ToolCall, ToolDefinition, ToolTier\n    >>> from forge.core.schema import JsonSchema\n    >>> handler = AutoApproveHandler()\n    >>> call = ToolCall(id=\"c1\", name=\"test\", arguments={})\n    >>> defn = ToolDefinition(\n    ...     name=\"test\", description=\"test\", parameters=JsonSchema.object_(), tier=ToolTier.EXTERNAL\n    ... )\n    >>> # result = asyncio.run(handler.approve(call, defn))"
            },
            {
              "name": "AutoApproveHandler.approve",
              "line": 63,
              "signature": "async def approve(self, tool_call: ToolCall, tool_definition: ToolDefinition) -> ToolApproval",
              "documentation": "Automatically approve the tool call.\n\nArgs:\n    tool_call: The tool call (ignored).\n    tool_definition: The tool definition (ignored).\n\nReturns:\n    ToolApprovalApprove."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/tool/definition.py",
          "sha256": "4443e54f5aa9acaf27a32023e85a3146940fcf64f5d7160c45b48a02f19fb1b1",
          "artifactSha256": "e90f7aae5f0b7236851021d4a753476b0711a70f27cac881e1072de86d513ddd",
          "url": "/reference/source/forge-py/src/forge/tool/definition.py.txt",
          "declarations": [
            {
              "name": "ToolWithHandler",
              "line": 21,
              "signature": "class ToolWithHandler()",
              "documentation": "A tool definition paired with its execution handler.\n\nArgs:\n    definition: The tool definition.\n    handler: Async function that executes the tool."
            },
            {
              "name": "create_tool",
              "line": 33,
              "signature": "def create_tool(name: str, description: str, parameters: JsonSchema, handler: ToolHandler, *, tier: ToolTier=ToolTier.EXTERNAL) -> ToolWithHandler",
              "documentation": "Create a tool definition with an execution handler.\n\nThis is the primary way to define tools in the Forge SDK.\n\nANVIL Spec section 8.2: Every tool has a name, description, parameters, and tier.\n\nArgs:\n    name: Unique tool name.\n    description: Human-readable description shown to the model.\n    parameters: JSON Schema for the tool's parameters.\n    handler: Async function that processes tool arguments and returns a string result.\n    tier: Tool tier classification (default: External/Tier 2).\n\nReturns:\n    A ToolWithHandler containing both the definition and handler.\n\nExample:\n    >>> import asyncio\n    >>> from forge.core.schema import JsonSchema\n    >>> async def my_handler(args: dict) -> str:\n    ...     return f\"Result: {args}\"\n    >>> tool = create_tool(\"my_tool\", \"Does something\", JsonSchema.object_(), my_handler)\n    >>> tool.definition.name\n    'my_tool'"
            }
          ]
        },
        {
          "path": "forge-py/src/forge/tool/execution.py",
          "sha256": "5da0ac8ee79b67c3372036fa8dda969ebb1fcd58eff9f9322f0385b9914fb967",
          "artifactSha256": "8a485ba34c6ac1c32765e21551b9b4788fe0e0098af101e126ffcda6c2668196",
          "url": "/reference/source/forge-py/src/forge/tool/execution.py.txt",
          "declarations": [
            {
              "name": "ToolExecutor",
              "line": 21,
              "signature": "class ToolExecutor()",
              "documentation": "Executes tool calls through validation, approval, and invocation.\n\nThe executor follows the ANVIL tool execution lifecycle:\n1. Look up tool definition in registry\n2. Validate arguments against parameter schema\n3. Submit to approval handler\n4. Execute the handler function\n5. Return the result\n\nANVIL Spec sections 8.5-8.7: Tool Execution Lifecycle.\n\nArgs:\n    registry: The tool registry containing available tools.\n    approval_handler: The approval handler for gating tool calls.\n        Defaults to AutoApproveHandler.\n\nExample:\n    >>> executor = ToolExecutor(ToolRegistry())"
            },
            {
              "name": "ToolExecutor.__init__",
              "line": 42,
              "signature": "def __init__(self, registry: ToolRegistry, approval_handler: ApprovalHandler | None=None) -> None",
              "documentation": ""
            },
            {
              "name": "ToolExecutor.execute",
              "line": 50,
              "signature": "async def execute(self, tool_call: ToolCall) -> ToolResult",
              "documentation": "Execute a tool call through the full lifecycle.\n\nArgs:\n    tool_call: The tool call to execute.\n\nReturns:\n    The tool result.\n\nRaises:\n    ForgeToolExecutionError: If the tool is not found, validation fails,\n        the call is denied, or execution fails."
            }
          ]
        },
        {
          "path": "forge-py/src/forge/tool/registry.py",
          "sha256": "651bca180e21638b5fe19459750a79b687e8e26ef7615346d392b347050a8cf0",
          "artifactSha256": "5027f7740a1aeba06af540e0eef707c8375d1e855378c09059d3aba7afcd8f4b",
          "url": "/reference/source/forge-py/src/forge/tool/registry.py.txt",
          "declarations": [
            {
              "name": "ToolRegistry",
              "line": 12,
              "signature": "class ToolRegistry()",
              "documentation": "Registry of tools available to an agent.\n\nThe registry maps tool names to their definitions and handlers. Agents\nuse the registry to discover available tools and execute them.\n\nANVIL Spec section 8.3: Tool Discovery.\n\nExample:\n    >>> registry = ToolRegistry()\n    >>> registry.is_empty()\n    True"
            },
            {
              "name": "ToolRegistry.__init__",
              "line": 26,
              "signature": "def __init__(self) -> None",
              "documentation": ""
            },
            {
              "name": "ToolRegistry.register",
              "line": 29,
              "signature": "def register(self, tool: ToolWithHandler) -> None",
              "documentation": "Register a tool.\n\nArgs:\n    tool: The tool definition with handler to register.\n\nRaises:\n    ValueError: If a tool with the same name is already registered."
            },
            {
              "name": "ToolRegistry.get",
              "line": 43,
              "signature": "def get(self, name: str) -> ToolWithHandler | None",
              "documentation": "Retrieve a registered tool by name.\n\nArgs:\n    name: The tool name.\n\nReturns:\n    The tool with handler, or None if not found."
            },
            {
              "name": "ToolRegistry.get_definition",
              "line": 54,
              "signature": "def get_definition(self, name: str) -> ToolDefinition | None",
              "documentation": "Retrieve a tool definition by name.\n\nArgs:\n    name: The tool name.\n\nReturns:\n    The tool definition, or None if not found."
            },
            {
              "name": "ToolRegistry.get_handler",
              "line": 66,
              "signature": "def get_handler(self, name: str) -> ToolHandler | None",
              "documentation": "Retrieve a tool handler by name.\n\nArgs:\n    name: The tool name.\n\nReturns:\n    The tool handler function, or None if not found."
            },
            {
              "name": "ToolRegistry.definitions",
              "line": 78,
              "signature": "def definitions(self) -> list[ToolDefinition]",
              "documentation": "Return all registered tool definitions.\n\nReturns:\n    List of all tool definitions."
            },
            {
              "name": "ToolRegistry.names",
              "line": 86,
              "signature": "def names(self) -> list[str]",
              "documentation": "Return all registered tool names.\n\nReturns:\n    List of tool names."
            },
            {
              "name": "ToolRegistry.is_empty",
              "line": 98,
              "signature": "def is_empty(self) -> bool",
              "documentation": "Return True if no tools are registered.\n\nReturns:\n    True if the registry is empty."
            },
            {
              "name": "ToolRegistry.unregister",
              "line": 106,
              "signature": "def unregister(self, name: str) -> bool",
              "documentation": "Remove a tool from the registry.\n\nArgs:\n    name: The tool name to remove.\n\nReturns:\n    True if the tool was found and removed."
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/agent",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go agent package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/agent",
      "features": {},
      "files": [
        {
          "path": "forge-go/agent/agent.go",
          "sha256": "bb530aa59caa939029221929ce95cd670ded13342191b87c90af3909bac48fec",
          "artifactSha256": "05e319de257addcf1e7c8040e895fc1223fd69f2b3dbd50c590f7c17753234b6",
          "url": "/reference/source/forge-go/agent/agent.go.txt",
          "declarations": [
            {
              "name": "const DefaultMaxSteps;",
              "line": 18,
              "signature": "const DefaultMaxSteps;",
              "documentation": ""
            },
            {
              "name": "type Agent interface",
              "line": 27,
              "signature": "type Agent interface",
              "documentation": ""
            },
            {
              "name": "type AgentOutput struct",
              "line": 48,
              "signature": "type AgentOutput struct",
              "documentation": ""
            },
            {
              "name": "type AgentConfig struct",
              "line": 66,
              "signature": "type AgentConfig struct",
              "documentation": ""
            },
            {
              "name": "func (c *AgentConfig) EffectiveMaxSteps() int",
              "line": 96,
              "signature": "func (c *AgentConfig) EffectiveMaxSteps() int",
              "documentation": ""
            },
            {
              "name": "func (c *AgentConfig) EffectiveTelemetry() core.TelemetryEmitter",
              "line": 104,
              "signature": "func (c *AgentConfig) EffectiveTelemetry() core.TelemetryEmitter",
              "documentation": ""
            },
            {
              "name": "func (c *AgentConfig) IsLegacyMode() bool",
              "line": 117,
              "signature": "func (c *AgentConfig) IsLegacyMode() bool",
              "documentation": ""
            },
            {
              "name": "type AgentConfigBuilder struct",
              "line": 122,
              "signature": "type AgentConfigBuilder struct",
              "documentation": ""
            },
            {
              "name": "func NewAgentConfigBuilder() *AgentConfigBuilder",
              "line": 127,
              "signature": "func NewAgentConfigBuilder() *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) Name(name string) *AgentConfigBuilder",
              "line": 132,
              "signature": "func (b *AgentConfigBuilder) Name(name string) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) Model(model core.LanguageModel) *AgentConfigBuilder",
              "line": 138,
              "signature": "func (b *AgentConfigBuilder) Model(model core.LanguageModel) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) Tools(tools *tool.Registry) *AgentConfigBuilder",
              "line": 144,
              "signature": "func (b *AgentConfigBuilder) Tools(tools *tool.Registry) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) MaxSteps(n int) *AgentConfigBuilder",
              "line": 150,
              "signature": "func (b *AgentConfigBuilder) MaxSteps(n int) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) SystemPrompt(prompt string) *AgentConfigBuilder",
              "line": 156,
              "signature": "func (b *AgentConfigBuilder) SystemPrompt(prompt string) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) Identity(id *identity.ForgeAgentIdentity) *AgentConfigBuilder",
              "line": 162,
              "signature": "func (b *AgentConfigBuilder) Identity(id *identity.ForgeAgentIdentity) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) ACT(act *auth.ArsenalACT) *AgentConfigBuilder",
              "line": 168,
              "signature": "func (b *AgentConfigBuilder) ACT(act *auth.ArsenalACT) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) ApprovalHandler(handler core.ToolApprovalHandler) *AgentConfigBuilder",
              "line": 174,
              "signature": "func (b *AgentConfigBuilder) ApprovalHandler(handler core.ToolApprovalHandler) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) Telemetry(emitter core.TelemetryEmitter) *AgentConfigBuilder",
              "line": 180,
              "signature": "func (b *AgentConfigBuilder) Telemetry(emitter core.TelemetryEmitter) *AgentConfigBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *AgentConfigBuilder) Build() (*AgentConfig, error)",
              "line": 186,
              "signature": "func (b *AgentConfigBuilder) Build() (*AgentConfig, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/agent/loopcontrol.go",
          "sha256": "1b368e1cd041be872b1dabd9c975479b046c8701180a3f683e52acc0ed8230af",
          "artifactSha256": "eae220d9903b9834bdc8e1e8e8806075834fc6695b9e26066a7a0558186dc4de",
          "url": "/reference/source/forge-go/agent/loopcontrol.go.txt",
          "declarations": [
            {
              "name": "type StopCondition func(result *core.GenerateResult, step int) bool",
              "line": 10,
              "signature": "type StopCondition func(result *core.GenerateResult, step int) bool\n\n// MaxStepsCondition creates a StopCondition that stops after n steps.\nfunc MaxStepsCondition(n int) StopCondition",
              "documentation": ""
            },
            {
              "name": "func MaxStepsCondition(n int) StopCondition",
              "line": 13,
              "signature": "func MaxStepsCondition(n int) StopCondition",
              "documentation": ""
            },
            {
              "name": "func MaxTokensCondition(maxTokens int64) StopCondition",
              "line": 21,
              "signature": "func MaxTokensCondition(maxTokens int64) StopCondition",
              "documentation": ""
            },
            {
              "name": "func NoToolCallsCondition() StopCondition",
              "line": 30,
              "signature": "func NoToolCallsCondition() StopCondition",
              "documentation": ""
            },
            {
              "name": "func TextContainsCondition(substr string) StopCondition",
              "line": 38,
              "signature": "func TextContainsCondition(substr string) StopCondition",
              "documentation": ""
            },
            {
              "name": "func AnyStopCondition(conditions ...StopCondition) StopCondition",
              "line": 46,
              "signature": "func AnyStopCondition(conditions ...StopCondition) StopCondition",
              "documentation": ""
            },
            {
              "name": "func AllStopConditions(conditions ...StopCondition) StopCondition",
              "line": 58,
              "signature": "func AllStopConditions(conditions ...StopCondition) StopCondition",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/agent/messaging.go",
          "sha256": "82e725d8e22670f28d55733ceb34713f3f80916d31e2b35cd8b7ba7d1bb47a99",
          "artifactSha256": "6cb6d80d27e68d760bea81f478953fa8feb428629597d92f1c427ee32e0fe51c",
          "url": "/reference/source/forge-go/agent/messaging.go.txt",
          "declarations": [
            {
              "name": "type ConversationBuilder struct",
              "line": 7,
              "signature": "type ConversationBuilder struct",
              "documentation": ""
            },
            {
              "name": "func NewConversation() *ConversationBuilder",
              "line": 12,
              "signature": "func NewConversation() *ConversationBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *ConversationBuilder) System(text string) *ConversationBuilder",
              "line": 17,
              "signature": "func (b *ConversationBuilder) System(text string) *ConversationBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *ConversationBuilder) User(text string) *ConversationBuilder",
              "line": 23,
              "signature": "func (b *ConversationBuilder) User(text string) *ConversationBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *ConversationBuilder) Assistant(text string) *ConversationBuilder",
              "line": 29,
              "signature": "func (b *ConversationBuilder) Assistant(text string) *ConversationBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *ConversationBuilder) ToolResult(result core.ToolResult) *ConversationBuilder",
              "line": 35,
              "signature": "func (b *ConversationBuilder) ToolResult(result core.ToolResult) *ConversationBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *ConversationBuilder) Message(msg core.ModelMessage) *ConversationBuilder",
              "line": 41,
              "signature": "func (b *ConversationBuilder) Message(msg core.ModelMessage) *ConversationBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *ConversationBuilder) Build() []core.ModelMessage",
              "line": 47,
              "signature": "func (b *ConversationBuilder) Build() []core.ModelMessage",
              "documentation": ""
            },
            {
              "name": "func (b *ConversationBuilder) Count() int",
              "line": 54,
              "signature": "func (b *ConversationBuilder) Count() int",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/agent/subagent.go",
          "sha256": "a6f90affcbb4c7b7fa46362837968753f6076ede147f6f455c1e4406766df28a",
          "artifactSha256": "d366bac2ba6a7cfcb0d6bb023f668107cc0f48a9f93add0c62ecb2992d5f5a14",
          "url": "/reference/source/forge-go/agent/subagent.go.txt",
          "declarations": [
            {
              "name": "type SubAgentConfig struct",
              "line": 14,
              "signature": "type SubAgentConfig struct",
              "documentation": ""
            },
            {
              "name": "func CreateSubAgent(parent Agent, config SubAgentConfig) (*ToolLoopAgent, error)",
              "line": 42,
              "signature": "func CreateSubAgent(parent Agent, config SubAgentConfig) (*ToolLoopAgent, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/agent/toolloop.go",
          "sha256": "14a69dcf21b93ad9aa1fc8a97cf5fd1a231d2e507318d6283c91a6dfeb4a2a65",
          "artifactSha256": "a1300df0f27585ef5122fc9ad95af6283c07657bb5561d7e3e26f3d6e93dd236",
          "url": "/reference/source/forge-go/agent/toolloop.go.txt",
          "declarations": [
            {
              "name": "type ToolLoopAgent struct",
              "line": 18,
              "signature": "type ToolLoopAgent struct",
              "documentation": ""
            },
            {
              "name": "func NewToolLoopAgent(config *AgentConfig) (*ToolLoopAgent, error)",
              "line": 27,
              "signature": "func NewToolLoopAgent(config *AgentConfig) (*ToolLoopAgent, error)",
              "documentation": ""
            },
            {
              "name": "func (a *ToolLoopAgent) Config() *AgentConfig",
              "line": 47,
              "signature": "func (a *ToolLoopAgent) Config() *AgentConfig",
              "documentation": ""
            },
            {
              "name": "func (a *ToolLoopAgent) Health() *health.HealthProfile",
              "line": 52,
              "signature": "func (a *ToolLoopAgent) Health() *health.HealthProfile",
              "documentation": ""
            },
            {
              "name": "func (a *ToolLoopAgent) Lifecycle() *health.LifecycleManager",
              "line": 57,
              "signature": "func (a *ToolLoopAgent) Lifecycle() *health.LifecycleManager",
              "documentation": ""
            },
            {
              "name": "func (a *ToolLoopAgent) Run(ctx context.Context, prompt string) (*AgentOutput, error)",
              "line": 67,
              "signature": "func (a *ToolLoopAgent) Run(ctx context.Context, prompt string) (*AgentOutput, error)",
              "documentation": ""
            },
            {
              "name": "func (a *ToolLoopAgent) RunWithMessages(ctx context.Context, messages []core.ModelMessage) (*AgentOutput, error)",
              "line": 77,
              "signature": "func (a *ToolLoopAgent) RunWithMessages(ctx context.Context, messages []core.ModelMessage) (*AgentOutput, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/agent/workflow.go",
          "sha256": "218b805be10a7e9a740c09be4c1854490503c71ef105d28ce0144aade0547bb0",
          "artifactSha256": "93f609d619dadc70224bf38212426d1fba448bc60daebd4447bb7eb9e935a528",
          "url": "/reference/source/forge-go/agent/workflow.go.txt",
          "declarations": [
            {
              "name": "type WorkflowStep struct",
              "line": 11,
              "signature": "type WorkflowStep struct",
              "documentation": ""
            },
            {
              "name": "func RunWorkflow(ctx context.Context, steps []WorkflowStep) (*AgentOutput, error)",
              "line": 36,
              "signature": "func RunWorkflow(ctx context.Context, steps []WorkflowStep) (*AgentOutput, error)",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/auth",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go auth package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/auth",
      "features": {},
      "files": [
        {
          "path": "forge-go/auth/capability.go",
          "sha256": "9a863f35960b6ca003c4e5bec31a40ee12a5607ee9e51bd238a8c6e960508e5e",
          "artifactSha256": "9ec95234e6f096d4612cda96d61f80d87d8c1956afe9bf58c2f6cc8a1108b793",
          "url": "/reference/source/forge-go/auth/capability.go.txt",
          "declarations": [
            {
              "name": "type Scope struct",
              "line": 19,
              "signature": "type Scope struct",
              "documentation": ""
            },
            {
              "name": "func NewScope(s string) (Scope, error)",
              "line": 36,
              "signature": "func NewScope(s string) (Scope, error)",
              "documentation": ""
            },
            {
              "name": "func WildcardScope() Scope",
              "line": 56,
              "signature": "func WildcardScope() Scope",
              "documentation": ""
            },
            {
              "name": "func (s Scope) String() string",
              "line": 61,
              "signature": "func (s Scope) String() string",
              "documentation": ""
            },
            {
              "name": "func (s Scope) Implies(other Scope) bool",
              "line": 73,
              "signature": "func (s Scope) Implies(other Scope) bool",
              "documentation": ""
            },
            {
              "name": "type ScopeSet struct",
              "line": 83,
              "signature": "type ScopeSet struct",
              "documentation": ""
            },
            {
              "name": "func NewScopeSet(scopes ...Scope) ScopeSet",
              "line": 88,
              "signature": "func NewScopeSet(scopes ...Scope) ScopeSet",
              "documentation": ""
            },
            {
              "name": "func ParseScopeSet(scopeStrs ...string) (ScopeSet, error)",
              "line": 95,
              "signature": "func ParseScopeSet(scopeStrs ...string) (ScopeSet, error)",
              "documentation": ""
            },
            {
              "name": "func (ss ScopeSet) Allows(requested Scope) bool",
              "line": 110,
              "signature": "func (ss ScopeSet) Allows(requested Scope) bool",
              "documentation": ""
            },
            {
              "name": "func (ss ScopeSet) Strings() []string",
              "line": 120,
              "signature": "func (ss ScopeSet) Strings() []string",
              "documentation": ""
            },
            {
              "name": "func (ss ScopeSet) Len() int",
              "line": 129,
              "signature": "func (ss ScopeSet) Len() int",
              "documentation": ""
            },
            {
              "name": "func (ss ScopeSet) IsEmpty() bool",
              "line": 134,
              "signature": "func (ss ScopeSet) IsEmpty() bool",
              "documentation": ""
            },
            {
              "name": "func (ss ScopeSet) IsSubsetOf(other ScopeSet) bool",
              "line": 145,
              "signature": "func (ss ScopeSet) IsSubsetOf(other ScopeSet) bool",
              "documentation": ""
            },
            {
              "name": "type DelegationConstraints struct",
              "line": 160,
              "signature": "type DelegationConstraints struct",
              "documentation": ""
            },
            {
              "name": "type ArsenalACT struct",
              "line": 179,
              "signature": "type ArsenalACT struct",
              "documentation": ""
            },
            {
              "name": "func (a *ArsenalACT) IsExpired() bool",
              "line": 210,
              "signature": "func (a *ArsenalACT) IsExpired() bool",
              "documentation": ""
            },
            {
              "name": "func (a *ArsenalACT) IsNotYetValid() bool",
              "line": 215,
              "signature": "func (a *ArsenalACT) IsNotYetValid() bool",
              "documentation": ""
            },
            {
              "name": "func (a *ArsenalACT) TTLRemaining() time.Duration",
              "line": 221,
              "signature": "func (a *ArsenalACT) TTLRemaining() time.Duration",
              "documentation": ""
            },
            {
              "name": "func VerifyACT(act *ArsenalACT) error",
              "line": 251,
              "signature": "func VerifyACT(act *ArsenalACT) error",
              "documentation": ""
            },
            {
              "name": "func ExtractScopes(act *ArsenalACT) []string",
              "line": 297,
              "signature": "func ExtractScopes(act *ArsenalACT) []string",
              "documentation": ""
            },
            {
              "name": "func ACTAllowsScope(act *ArsenalACT, scope string) (bool, error)",
              "line": 320,
              "signature": "func ACTAllowsScope(act *ArsenalACT, scope string) (bool, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/auth/delegation.go",
          "sha256": "e674b58b3046c610a5653e8b4d115ae0b363b671aea1091be99512606d9f8597",
          "artifactSha256": "d9d925e9d146a28d6b0b4291f2b4e57da549edb5074aed9499654bd0d4078e78",
          "url": "/reference/source/forge-go/auth/delegation.go.txt",
          "declarations": [
            {
              "name": "type DelegationRequest struct",
              "line": 20,
              "signature": "type DelegationRequest struct",
              "documentation": ""
            },
            {
              "name": "func DelegateCapabilities(req DelegationRequest) (*ArsenalACT, error)",
              "line": 62,
              "signature": "func DelegateCapabilities(req DelegationRequest) (*ArsenalACT, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/auth/error.go",
          "sha256": "47419d6861b33db30aa64dd6fa1547b7082421bf208aabd5b07f0762533f3935",
          "artifactSha256": "40f1a9864ced9dc439a0a71c6cb432647aa23847e3af836bc092384b2c692a1b",
          "url": "/reference/source/forge-go/auth/error.go.txt",
          "declarations": [
            {
              "name": "type ErrKind string",
              "line": 21,
              "signature": "type ErrKind string\n\nconst (\n// ErrKindTokenExpired indicates that the ACT has expired.\nErrKindTokenExpired ErrKind;",
              "documentation": ""
            },
            {
              "name": "type AuthError struct",
              "line": 48,
              "signature": "type AuthError struct",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) Error() string",
              "line": 63,
              "signature": "func (e *AuthError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) Unwrap() error",
              "line": 71,
              "signature": "func (e *AuthError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) Is(target error) bool",
              "line": 76,
              "signature": "func (e *AuthError) Is(target error) bool",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) IsExpired() bool",
              "line": 85,
              "signature": "func (e *AuthError) IsExpired() bool",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) IsInsufficientScope() bool",
              "line": 90,
              "signature": "func (e *AuthError) IsInsufficientScope() bool",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) IsCapabilityEscalation() bool",
              "line": 95,
              "signature": "func (e *AuthError) IsCapabilityEscalation() bool",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) IsDelegationDenied() bool",
              "line": 100,
              "signature": "func (e *AuthError) IsDelegationDenied() bool",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) IsInvalidToken() bool",
              "line": 105,
              "signature": "func (e *AuthError) IsInvalidToken() bool",
              "documentation": ""
            },
            {
              "name": "func (e *AuthError) ErrorCode() string",
              "line": 110,
              "signature": "func (e *AuthError) ErrorCode() string",
              "documentation": ""
            },
            {
              "name": "func NewTokenExpiredError(tokenID, agentDID, expiredAt string) *AuthError",
              "line": 150,
              "signature": "func NewTokenExpiredError(tokenID, agentDID, expiredAt string) *AuthError",
              "documentation": ""
            },
            {
              "name": "func NewInsufficientScopeError(agentDID, requiredScope string, availableScopes []string) *AuthError",
              "line": 169,
              "signature": "func NewInsufficientScopeError(agentDID, requiredScope string, availableScopes []string) *AuthError",
              "documentation": ""
            },
            {
              "name": "func NewCapabilityEscalationError(parentDID, childDID, requested string, available []string) *AuthError",
              "line": 187,
              "signature": "func NewCapabilityEscalationError(parentDID, childDID, requested string, available []string) *AuthError",
              "documentation": ""
            },
            {
              "name": "func NewDelegationDeniedError(parentDID, childDID, reason string) *AuthError",
              "line": 206,
              "signature": "func NewDelegationDeniedError(parentDID, childDID, reason string) *AuthError",
              "documentation": ""
            },
            {
              "name": "func NewInvalidTokenError(reason string) *AuthError",
              "line": 225,
              "signature": "func NewInvalidTokenError(reason string) *AuthError",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/auth/tool_auth.go",
          "sha256": "1e7d3c45176f39c794243c244343e3377cf7c8a631058ca2c42a73b450d541dc",
          "artifactSha256": "7f516d45d86ea47afdf5ea50690df876058aff840e1c1b35ce6a36d0c831e6ec",
          "url": "/reference/source/forge-go/auth/tool_auth.go.txt",
          "declarations": [
            {
              "name": "type ToolTier int",
              "line": 11,
              "signature": "type ToolTier int\n\nconst (\n// ToolTierPlatform (Tier 1) tools run inside the sandbox and are always\n// available without authorization.\nToolTierPlatform ToolTier;",
              "documentation": ""
            },
            {
              "name": "func (t ToolTier) String() string",
              "line": 28,
              "signature": "func (t ToolTier) String() string",
              "documentation": ""
            },
            {
              "name": "func (t ToolTier) RequiresAuthorization() bool",
              "line": 45,
              "signature": "func (t ToolTier) RequiresAuthorization() bool",
              "documentation": ""
            },
            {
              "name": "type ToolAuthorizationRequest struct",
              "line": 53,
              "signature": "type ToolAuthorizationRequest struct",
              "documentation": ""
            },
            {
              "name": "type ToolAuthorizationDecision int",
              "line": 71,
              "signature": "type ToolAuthorizationDecision int\n\nconst (\n// Allowed indicates the tool invocation is authorized.\nAllowed ToolAuthorizationDecision;",
              "documentation": ""
            },
            {
              "name": "func (d ToolAuthorizationDecision) String() string",
              "line": 86,
              "signature": "func (d ToolAuthorizationDecision) String() string",
              "documentation": ""
            },
            {
              "name": "type ToolAuthorizationResult struct",
              "line": 101,
              "signature": "type ToolAuthorizationResult struct",
              "documentation": ""
            },
            {
              "name": "func AuthorizeToolInvocation(req ToolAuthorizationRequest) (*ToolAuthorizationResult, error)",
              "line": 132,
              "signature": "func AuthorizeToolInvocation(req ToolAuthorizationRequest) (*ToolAuthorizationResult, error)",
              "documentation": ""
            },
            {
              "name": "func BuildToolScope(toolName string) string",
              "line": 194,
              "signature": "func BuildToolScope(toolName string) string",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/collab",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go collab package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/collab",
      "features": {},
      "files": [
        {
          "path": "forge-go/collab/context.go",
          "sha256": "50291fe6c88ad741d0adc8a28a88e1eb3a559abb838e72dfe5be67e33a06bbab",
          "artifactSha256": "4576ada77ff6d83f54880cca676f01c4ba6e2d965e71744462c97c01734a92d5",
          "url": "/reference/source/forge-go/collab/context.go.txt",
          "declarations": [
            {
              "name": "type SharedContextContract interface",
              "line": 12,
              "signature": "type SharedContextContract interface",
              "documentation": ""
            },
            {
              "name": "type InMemorySharedContext struct",
              "line": 29,
              "signature": "type InMemorySharedContext struct",
              "documentation": ""
            },
            {
              "name": "func NewInMemorySharedContext() *InMemorySharedContext",
              "line": 35,
              "signature": "func NewInMemorySharedContext() *InMemorySharedContext",
              "documentation": ""
            },
            {
              "name": "func (c *InMemorySharedContext) CreateSession(sessionID string)",
              "line": 42,
              "signature": "func (c *InMemorySharedContext) CreateSession(sessionID string)",
              "documentation": ""
            },
            {
              "name": "func (c *InMemorySharedContext) ContextRead(sessionID, key string) (ContextEntry, error)",
              "line": 54,
              "signature": "func (c *InMemorySharedContext) ContextRead(sessionID, key string) (ContextEntry, error)",
              "documentation": ""
            },
            {
              "name": "func (c *InMemorySharedContext) ContextWrite(sessionID string, entry ContextEntry) error",
              "line": 72,
              "signature": "func (c *InMemorySharedContext) ContextWrite(sessionID string, entry ContextEntry) error",
              "documentation": ""
            },
            {
              "name": "func (c *InMemorySharedContext) ContextKeys(sessionID string) ([]string, error)",
              "line": 88,
              "signature": "func (c *InMemorySharedContext) ContextKeys(sessionID string) ([]string, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/collab/errors.go",
          "sha256": "89998b39aa52820c9ec4d5d32700fdbe3af404605ba441939d0051f4a8625588",
          "artifactSha256": "7d39e50235d78c66a40db443fd9e435b09f655edad1c1acdb6a1523fa313504a",
          "url": "/reference/source/forge-go/collab/errors.go.txt",
          "declarations": [
            {
              "name": "type CollabError struct",
              "line": 17,
              "signature": "type CollabError struct",
              "documentation": ""
            },
            {
              "name": "type CollabErrorKind string",
              "line": 29,
              "signature": "type CollabErrorKind string\n\nconst (\n// ErrKindSessionNotFound indicates the session does not exist.\nErrKindSessionNotFound CollabErrorKind;",
              "documentation": ""
            },
            {
              "name": "func (e *CollabError) Error() string",
              "line": 73,
              "signature": "func (e *CollabError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *CollabError) Unwrap() error",
              "line": 81,
              "signature": "func (e *CollabError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func NewSessionNotFoundError(sessionID string) *CollabError",
              "line": 86,
              "signature": "func NewSessionNotFoundError(sessionID string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewSessionAlreadyActiveError(sessionID string) *CollabError",
              "line": 94,
              "signature": "func NewSessionAlreadyActiveError(sessionID string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewInvalidSessionTransitionError(from, to string) *CollabError",
              "line": 102,
              "signature": "func NewInvalidSessionTransitionError(from, to string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewNotAParticipantError(agentDID, sessionID string) *CollabError",
              "line": 110,
              "signature": "func NewNotAParticipantError(agentDID, sessionID string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewTaskNotFoundError(taskID string) *CollabError",
              "line": 118,
              "signature": "func NewTaskNotFoundError(taskID string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewTaskAlreadyAssignedError(taskID, assignee string) *CollabError",
              "line": 126,
              "signature": "func NewTaskAlreadyAssignedError(taskID, assignee string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewCapabilityMismatchError(taskType, agentDID, reason string) *CollabError",
              "line": 134,
              "signature": "func NewCapabilityMismatchError(taskType, agentDID, reason string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewContextKeyNotFoundError(key string) *CollabError",
              "line": 142,
              "signature": "func NewContextKeyNotFoundError(key string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewContextPermissionDeniedError(key, agentDID string) *CollabError",
              "line": 150,
              "signature": "func NewContextPermissionDeniedError(key, agentDID string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewInterruptRejectedError(interruptID, reason string) *CollabError",
              "line": 158,
              "signature": "func NewInterruptRejectedError(interruptID, reason string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewDelegationFailedError(reason string) *CollabError",
              "line": 166,
              "signature": "func NewDelegationFailedError(reason string) *CollabError",
              "documentation": ""
            },
            {
              "name": "func NewRoleViolationError(agentDID, role, action string) *CollabError",
              "line": 174,
              "signature": "func NewRoleViolationError(agentDID, role, action string) *CollabError",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/collab/roles.go",
          "sha256": "7a7c0cc7c0abfa8ba1b0d8b63dde3395628d43e1876e075bba67bd4eb16f3dac",
          "artifactSha256": "93f36aecca43f349fad7dc855541fecb9432e719299e7e480d3293c2533e59f8",
          "url": "/reference/source/forge-go/collab/roles.go.txt",
          "declarations": [
            {
              "name": "type CoordinatorContract interface",
              "line": 7,
              "signature": "type CoordinatorContract interface",
              "documentation": ""
            },
            {
              "name": "type WorkerContract interface",
              "line": 25,
              "signature": "type WorkerContract interface",
              "documentation": ""
            },
            {
              "name": "type PeerContract interface",
              "line": 43,
              "signature": "type PeerContract interface",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/collab/session.go",
          "sha256": "0313c519ff0c59211d3d766856f091c136a3ab58a7cc150bb482cd1f8373348a",
          "artifactSha256": "254a97a6b47b83f972c302b62945703462b71b4876b27c9e0eb8694eba7e31b4",
          "url": "/reference/source/forge-go/collab/session.go.txt",
          "declarations": [
            {
              "name": "type SessionTransition struct",
              "line": 43,
              "signature": "type SessionTransition struct",
              "documentation": ""
            },
            {
              "name": "type SessionManager struct",
              "line": 63,
              "signature": "type SessionManager struct",
              "documentation": ""
            },
            {
              "name": "func NewSessionManager(sessionID string, timeoutSeconds int64) *SessionManager",
              "line": 75,
              "signature": "func NewSessionManager(sessionID string, timeoutSeconds int64) *SessionManager",
              "documentation": ""
            },
            {
              "name": "func (sm *SessionManager) Session() CollaborationSession",
              "line": 89,
              "signature": "func (sm *SessionManager) Session() CollaborationSession",
              "documentation": ""
            },
            {
              "name": "func (sm *SessionManager) State() SessionState",
              "line": 100,
              "signature": "func (sm *SessionManager) State() SessionState",
              "documentation": ""
            },
            {
              "name": "func (sm *SessionManager) Transition(target SessionState, reason string) error",
              "line": 112,
              "signature": "func (sm *SessionManager) Transition(target SessionState, reason string) error",
              "documentation": ""
            },
            {
              "name": "func (sm *SessionManager) CanTransitionTo(target SessionState) bool",
              "line": 136,
              "signature": "func (sm *SessionManager) CanTransitionTo(target SessionState) bool",
              "documentation": ""
            },
            {
              "name": "func (sm *SessionManager) AddParticipant(agentDID string, role CollaborationRole)",
              "line": 143,
              "signature": "func (sm *SessionManager) AddParticipant(agentDID string, role CollaborationRole)",
              "documentation": ""
            },
            {
              "name": "func (sm *SessionManager) History() []SessionTransition",
              "line": 154,
              "signature": "func (sm *SessionManager) History() []SessionTransition",
              "documentation": ""
            },
            {
              "name": "type SessionContract interface",
              "line": 166,
              "signature": "type SessionContract interface",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/collab/types.go",
          "sha256": "cd26b1f6aeafe15d26e01ae4aad61b2c75836df1b3e92f4538a12251f734ab4b",
          "artifactSha256": "b5f6cae7958656f47556217bbdd458f5db5ce12e288e503b80befaa047453503",
          "url": "/reference/source/forge-go/collab/types.go.txt",
          "declarations": [
            {
              "name": "type CollaborationRole string",
              "line": 8,
              "signature": "type CollaborationRole string\n\nconst (\n// RoleCoordinator decomposes tasks, assigns work, and aggregates results.\nRoleCoordinator CollaborationRole;",
              "documentation": ""
            },
            {
              "name": "func (r CollaborationRole) String() string",
              "line": 22,
              "signature": "func (r CollaborationRole) String() string",
              "documentation": ""
            },
            {
              "name": "type SessionState string",
              "line": 29,
              "signature": "type SessionState string\n\nconst (\n// SessionProposed indicates the session has been proposed but not yet accepted.\nSessionProposed SessionState;",
              "documentation": ""
            },
            {
              "name": "func (s SessionState) String() string",
              "line": 52,
              "signature": "func (s SessionState) String() string",
              "documentation": ""
            },
            {
              "name": "func (s SessionState) IsTerminal() bool",
              "line": 57,
              "signature": "func (s SessionState) IsTerminal() bool",
              "documentation": ""
            },
            {
              "name": "type TaskPriority string",
              "line": 64,
              "signature": "type TaskPriority string\n\nconst (\n// PriorityCritical is the highest priority.\nPriorityCritical TaskPriority;",
              "documentation": ""
            },
            {
              "name": "type TaskStatus string",
              "line": 83,
              "signature": "type TaskStatus string\n\nconst (\n// TaskPending indicates the task has been created but not yet assigned.\nTaskPending TaskStatus;",
              "documentation": ""
            },
            {
              "name": "type InterruptType string",
              "line": 108,
              "signature": "type InterruptType string\n\nconst (\n// InterruptPriorityOverride overrides the current task with higher priority work.\nInterruptPriorityOverride InterruptType;",
              "documentation": ""
            },
            {
              "name": "type ContextVisibility string",
              "line": 133,
              "signature": "type ContextVisibility string\n\nconst (\n// VisibilitySession makes the entry visible to all session participants.\nVisibilitySession ContextVisibility;",
              "documentation": ""
            },
            {
              "name": "type SessionParticipant struct",
              "line": 149,
              "signature": "type SessionParticipant struct",
              "documentation": ""
            },
            {
              "name": "type CollaborationSession struct",
              "line": 163,
              "signature": "type CollaborationSession struct",
              "documentation": ""
            },
            {
              "name": "type DelegatedTask struct",
              "line": 187,
              "signature": "type DelegatedTask struct",
              "documentation": ""
            },
            {
              "name": "type TaskConstraints struct",
              "line": 223,
              "signature": "type TaskConstraints struct",
              "documentation": ""
            },
            {
              "name": "type TaskResult struct",
              "line": 237,
              "signature": "type TaskResult struct",
              "documentation": ""
            },
            {
              "name": "type TaskProgress struct",
              "line": 257,
              "signature": "type TaskProgress struct",
              "documentation": ""
            },
            {
              "name": "type Interrupt struct",
              "line": 274,
              "signature": "type Interrupt struct",
              "documentation": ""
            },
            {
              "name": "type InterruptResponse struct",
              "line": 297,
              "signature": "type InterruptResponse struct",
              "documentation": ""
            },
            {
              "name": "type ContextEntry struct",
              "line": 311,
              "signature": "type ContextEntry struct",
              "documentation": ""
            },
            {
              "name": "type AgentCapabilityProfile struct",
              "line": 331,
              "signature": "type AgentCapabilityProfile struct",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/comm",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go comm package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/comm",
      "features": {},
      "files": [
        {
          "path": "forge-go/comm/channel.go",
          "sha256": "135179faddbd9009d78def1a8f8aec35b3b59c823ca39946637d4cba47ac36d5",
          "artifactSha256": "d59acec4b34f68f57975eeabf6b8e884d3d87283b654cc7f02a1d6aa9f237c17",
          "url": "/reference/source/forge-go/comm/channel.go.txt",
          "declarations": [
            {
              "name": "type ChannelTransport struct",
              "line": 9,
              "signature": "type ChannelTransport struct",
              "documentation": ""
            },
            {
              "name": "func NewChannelPair(capacity int) (*ChannelTransport, *ChannelTransport)",
              "line": 23,
              "signature": "func NewChannelPair(capacity int) (*ChannelTransport, *ChannelTransport)",
              "documentation": ""
            },
            {
              "name": "func (t *ChannelTransport) Send(msg AgentMessage) error",
              "line": 36,
              "signature": "func (t *ChannelTransport) Send(msg AgentMessage) error",
              "documentation": ""
            },
            {
              "name": "func (t *ChannelTransport) Receive() (AgentMessage, error)",
              "line": 56,
              "signature": "func (t *ChannelTransport) Receive() (AgentMessage, error)",
              "documentation": ""
            },
            {
              "name": "func (t *ChannelTransport) CloseChannel()",
              "line": 67,
              "signature": "func (t *ChannelTransport) CloseChannel()",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/comm/errors.go",
          "sha256": "d138671f7c367005657b693537bc60f85e05b28a7ef55ebf2d1296502fc9333a",
          "artifactSha256": "9fe173139a998bc8f3859270f0e75e37531544de1655c1f1a1b813534d4b0f36",
          "url": "/reference/source/forge-go/comm/errors.go.txt",
          "declarations": [
            {
              "name": "type CommError struct",
              "line": 15,
              "signature": "type CommError struct",
              "documentation": ""
            },
            {
              "name": "type CommErrorKind string",
              "line": 27,
              "signature": "type CommErrorKind string\n\nconst (\n// ErrKindSerializationFailed indicates message serialization failed.\nErrKindSerializationFailed CommErrorKind;",
              "documentation": ""
            },
            {
              "name": "func (e *CommError) Error() string",
              "line": 59,
              "signature": "func (e *CommError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *CommError) Unwrap() error",
              "line": 67,
              "signature": "func (e *CommError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func NewSerializationError(message string, cause error) *CommError",
              "line": 72,
              "signature": "func NewSerializationError(message string, cause error) *CommError",
              "documentation": ""
            },
            {
              "name": "func NewDeserializationError(message string, cause error) *CommError",
              "line": 81,
              "signature": "func NewDeserializationError(message string, cause error) *CommError",
              "documentation": ""
            },
            {
              "name": "func NewTransportError(message string, cause error) *CommError",
              "line": 90,
              "signature": "func NewTransportError(message string, cause error) *CommError",
              "documentation": ""
            },
            {
              "name": "func NewNotConnectedError(message string) *CommError",
              "line": 99,
              "signature": "func NewNotConnectedError(message string) *CommError",
              "documentation": ""
            },
            {
              "name": "func NewChannelClosedError(message string) *CommError",
              "line": 107,
              "signature": "func NewChannelClosedError(message string) *CommError",
              "documentation": ""
            },
            {
              "name": "func NewProtocolNegotiationError(message string) *CommError",
              "line": 115,
              "signature": "func NewProtocolNegotiationError(message string) *CommError",
              "documentation": ""
            },
            {
              "name": "func NewMessageTooLargeError(size, maxSize int) *CommError",
              "line": 123,
              "signature": "func NewMessageTooLargeError(size, maxSize int) *CommError",
              "documentation": ""
            },
            {
              "name": "func NewTimeoutError(operation string) *CommError",
              "line": 131,
              "signature": "func NewTimeoutError(operation string) *CommError",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/comm/message.go",
          "sha256": "d7fe319db584527031dae32ee7a4ab667e071f1f91c7392a8dbb280c386bb370",
          "artifactSha256": "292a0da7bc54d97e16e45a8d1930809f0704ccbf01d548680299e93492ae5a77",
          "url": "/reference/source/forge-go/comm/message.go.txt",
          "declarations": [
            {
              "name": "type AgentMessage struct",
              "line": 15,
              "signature": "type AgentMessage struct",
              "documentation": ""
            },
            {
              "name": "func NewAgentMessage(sender, recipient, protocol, messageType string, payload []byte) AgentMessage",
              "line": 58,
              "signature": "func NewAgentMessage(sender, recipient, protocol, messageType string, payload []byte) AgentMessage",
              "documentation": ""
            },
            {
              "name": "func (m AgentMessage) WithCorrelationID(id string) AgentMessage",
              "line": 71,
              "signature": "func (m AgentMessage) WithCorrelationID(id string) AgentMessage",
              "documentation": ""
            },
            {
              "name": "func (m AgentMessage) WithReplyTo(id string) AgentMessage",
              "line": 77,
              "signature": "func (m AgentMessage) WithReplyTo(id string) AgentMessage",
              "documentation": ""
            },
            {
              "name": "func (m AgentMessage) IsSigned() bool",
              "line": 83,
              "signature": "func (m AgentMessage) IsSigned() bool",
              "documentation": ""
            },
            {
              "name": "func (m AgentMessage) Kind() string",
              "line": 89,
              "signature": "func (m AgentMessage) Kind() string",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/comm/noop.go",
          "sha256": "6d4a41ff575b3058bb5e2292b1e72b2046027a2ac5ad3db73b0c4a40400f7251",
          "artifactSha256": "b3b2685bc0262e7d5637aa1e88c24efa8947b1bb8de0ec963009bab915d96662",
          "url": "/reference/source/forge-go/comm/noop.go.txt",
          "declarations": [
            {
              "name": "type NoopTransport struct",
              "line": 10,
              "signature": "type NoopTransport struct",
              "documentation": ""
            },
            {
              "name": "func (NoopTransport) Send(_ AgentMessage) error",
              "line": 13,
              "signature": "func (NoopTransport) Send(_ AgentMessage) error",
              "documentation": ""
            },
            {
              "name": "func (NoopTransport) Receive() (AgentMessage, error)",
              "line": 19,
              "signature": "func (NoopTransport) Receive() (AgentMessage, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/comm/protocol.go",
          "sha256": "b15cc906eb6773ad1b20bfb75d33538694ff12552d4274e821b1666093702296",
          "artifactSha256": "4f9a72ac7fbadbde0dcbfbf355d5b988bdfb0564bf53c28da7f2e6db1247e353",
          "url": "/reference/source/forge-go/comm/protocol.go.txt",
          "declarations": [
            {
              "name": "type ProtocolOffer struct",
              "line": 8,
              "signature": "type ProtocolOffer struct",
              "documentation": ""
            },
            {
              "name": "type ProtocolAccept struct",
              "line": 22,
              "signature": "type ProtocolAccept struct",
              "documentation": ""
            },
            {
              "name": "func NegotiateProtocol(initiator, responder ProtocolOffer) (*ProtocolAccept, error)",
              "line": 42,
              "signature": "func NegotiateProtocol(initiator, responder ProtocolOffer) (*ProtocolAccept, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/comm/transport.go",
          "sha256": "3e3b9a042dbbdfca3459c56238138f09bd55077055e1bca71ae5f444df00ed0a",
          "artifactSha256": "536bae34feda4c23e65c9c7ea38b0ece559f67887ade6c8d4dc091984b7d90e0",
          "url": "/reference/source/forge-go/comm/transport.go.txt",
          "declarations": [
            {
              "name": "type MessageTransport interface",
              "line": 10,
              "signature": "type MessageTransport interface",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/core",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go core package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/core",
      "features": {},
      "files": [
        {
          "path": "forge-go/core/brew.go",
          "sha256": "79bbcff0253c23a87c2638e6e4779420713fbf498629278fe80747581cbc5999",
          "artifactSha256": "ba58639dd5de9ab5bad3fdb6de23fe8c19789e5b92bf277876c93525b2608448",
          "url": "/reference/source/forge-go/core/brew.go.txt",
          "declarations": [
            {
              "name": "type BrewNodeKindType string",
              "line": 9,
              "signature": "type BrewNodeKindType string\n\nconst (\nBrewNodeKindAgentStep         BrewNodeKindType;",
              "documentation": ""
            },
            {
              "name": "type BrewNodeKind struct",
              "line": 29,
              "signature": "type BrewNodeKind struct",
              "documentation": ""
            },
            {
              "name": "func NewAgentStepNode(provider ProviderRef, systemPrompt string, maxSteps uint32) BrewNodeKind",
              "line": 67,
              "signature": "func NewAgentStepNode(provider ProviderRef, systemPrompt string, maxSteps uint32) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "func NewToolInvocationNode(toolID string, tier ToolTier) BrewNodeKind",
              "line": 77,
              "signature": "func NewToolInvocationNode(toolID string, tier ToolTier) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "func NewMcpCallNode(serverID, toolName string) BrewNodeKind",
              "line": 86,
              "signature": "func NewMcpCallNode(serverID, toolName string) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "func NewWebOperationNode(operation string) BrewNodeKind",
              "line": 95,
              "signature": "func NewWebOperationNode(operation string) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "func NewConditionalBranchNode(conditionExpr, trueTarget, falseTarget string) BrewNodeKind",
              "line": 103,
              "signature": "func NewConditionalBranchNode(conditionExpr, trueTarget, falseTarget string) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "func NewParallelForkNode(branches []string, joinMode JoinMode) BrewNodeKind",
              "line": 113,
              "signature": "func NewParallelForkNode(branches []string, joinMode JoinMode) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "func NewSubBrewRefNode(brewID string) BrewNodeKind",
              "line": 122,
              "signature": "func NewSubBrewRefNode(brewID string) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "func NewHumanCheckpointNode(prompt string, timeoutMs *uint64) BrewNodeKind",
              "line": 130,
              "signature": "func NewHumanCheckpointNode(prompt string, timeoutMs *uint64) BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "type JoinMode string",
              "line": 141,
              "signature": "type JoinMode string\n\nconst (\n// JoinModeAwaitAll waits for all branches to complete. Fail if any branch fails.\nJoinModeAwaitAll JoinMode;",
              "documentation": ""
            },
            {
              "name": "func JoinModeFirstN(n uint32) JoinMode",
              "line": 151,
              "signature": "func JoinModeFirstN(n uint32) JoinMode",
              "documentation": ""
            },
            {
              "name": "type BrewEdgeKind string",
              "line": 161,
              "signature": "type BrewEdgeKind string\n\nconst (\n// BrewEdgeKindDataFlow means the output of source is fed as input to target.\nBrewEdgeKindDataFlow BrewEdgeKind;",
              "documentation": ""
            },
            {
              "name": "type BrewEdge struct",
              "line": 173,
              "signature": "type BrewEdge struct",
              "documentation": ""
            },
            {
              "name": "type BrewNode struct",
              "line": 188,
              "signature": "type BrewNode struct",
              "documentation": ""
            },
            {
              "name": "type Brew struct",
              "line": 205,
              "signature": "type Brew struct",
              "documentation": ""
            },
            {
              "name": "func (b *Brew) SortedNodeIDs() []string",
              "line": 223,
              "signature": "func (b *Brew) SortedNodeIDs() []string",
              "documentation": ""
            },
            {
              "name": "func (b *Brew) SortedEdges() []BrewEdge",
              "line": 233,
              "signature": "func (b *Brew) SortedEdges() []BrewEdge",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/brew_builder.go",
          "sha256": "e973e7a8d8d47732d9445a1ae86e20fd0ffb5940cc59ef3f606cf3dfdc712276",
          "artifactSha256": "1588f4a01628960d878278eda1af8afe3d58ce6c6645c1223b2b81847cc6fd99",
          "url": "/reference/source/forge-go/core/brew_builder.go.txt",
          "declarations": [
            {
              "name": "type BrewBuilder struct",
              "line": 21,
              "signature": "type BrewBuilder struct",
              "documentation": ""
            },
            {
              "name": "func NewBrewBuilder(id, version string) *BrewBuilder",
              "line": 32,
              "signature": "func NewBrewBuilder(id, version string) *BrewBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *BrewBuilder) AddNode(nodeID string, kind BrewNodeKind) *BrewBuilder",
              "line": 42,
              "signature": "func (b *BrewBuilder) AddNode(nodeID string, kind BrewNodeKind) *BrewBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *BrewBuilder) AddEdge(from, to string, kind BrewEdgeKind) *BrewBuilder",
              "line": 53,
              "signature": "func (b *BrewBuilder) AddEdge(from, to string, kind BrewEdgeKind) *BrewBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *BrewBuilder) SetEntry(nodeID string) *BrewBuilder",
              "line": 63,
              "signature": "func (b *BrewBuilder) SetEntry(nodeID string) *BrewBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *BrewBuilder) SetExit(nodeID string) *BrewBuilder",
              "line": 69,
              "signature": "func (b *BrewBuilder) SetExit(nodeID string) *BrewBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *BrewBuilder) WithTopology(topology *ModelTopology) *BrewBuilder",
              "line": 75,
              "signature": "func (b *BrewBuilder) WithTopology(topology *ModelTopology) *BrewBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *BrewBuilder) WithMetadata(nodeID, key, value string) *BrewBuilder",
              "line": 82,
              "signature": "func (b *BrewBuilder) WithMetadata(nodeID, key, value string) *BrewBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *BrewBuilder) Build() (*Brew, error)",
              "line": 99,
              "signature": "func (b *BrewBuilder) Build() (*Brew, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/brew_resolver.go",
          "sha256": "15d7e97de5780c5a2e200a3fcad8526443180d5820e493d9dbc6e2038a2bfb7a",
          "artifactSha256": "d68cf60830ca27f196e25146f10fc95a267e4e23efc757b1eb03a1fd1dfecd68",
          "url": "/reference/source/forge-go/core/brew_resolver.go.txt",
          "declarations": [
            {
              "name": "type BrewEnvironment struct",
              "line": 17,
              "signature": "type BrewEnvironment struct",
              "documentation": ""
            },
            {
              "name": "type BrewResolutionErrorKind string",
              "line": 29,
              "signature": "type BrewResolutionErrorKind string\n\nconst (\n// BrewResolutionProviderUnavailable means a provider reference is not registered.\nBrewResolutionProviderUnavailable BrewResolutionErrorKind;",
              "documentation": ""
            },
            {
              "name": "type BrewResolutionError struct",
              "line": 45,
              "signature": "type BrewResolutionError struct",
              "documentation": ""
            },
            {
              "name": "func (e *BrewResolutionError) Error() string",
              "line": 53,
              "signature": "func (e *BrewResolutionError) Error() string",
              "documentation": ""
            },
            {
              "name": "type BrewResolutionErrors struct",
              "line": 58,
              "signature": "type BrewResolutionErrors struct",
              "documentation": ""
            },
            {
              "name": "func (e *BrewResolutionErrors) Error() string",
              "line": 63,
              "signature": "func (e *BrewResolutionErrors) Error() string",
              "documentation": ""
            },
            {
              "name": "type ResolvedBrewPlan struct",
              "line": 78,
              "signature": "type ResolvedBrewPlan struct",
              "documentation": ""
            },
            {
              "name": "func ResolveBrew(brew *Brew, env *BrewEnvironment) (*ResolvedBrewPlan, error)",
              "line": 105,
              "signature": "func ResolveBrew(brew *Brew, env *BrewEnvironment) (*ResolvedBrewPlan, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/config.go",
          "sha256": "b2d4972c998dca23f0c2feb03ab4676ce4d64bccca928fb92e2607171794519a",
          "artifactSha256": "f6ae5dc24b78906440a9ed1901194cd9bb47b4e07f2514eb81102f5335c5315d",
          "url": "/reference/source/forge-go/core/config.go.txt",
          "declarations": [
            {
              "name": "type GenerateOptions struct",
              "line": 8,
              "signature": "type GenerateOptions struct",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithTemperature(t float64) GenerateOptions",
              "line": 50,
              "signature": "func (o GenerateOptions) WithTemperature(t float64) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithMaxTokens(n int) GenerateOptions",
              "line": 56,
              "signature": "func (o GenerateOptions) WithMaxTokens(n int) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithTopP(p float64) GenerateOptions",
              "line": 62,
              "signature": "func (o GenerateOptions) WithTopP(p float64) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithTopK(k int) GenerateOptions",
              "line": 68,
              "signature": "func (o GenerateOptions) WithTopK(k int) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithFrequencyPenalty(p float64) GenerateOptions",
              "line": 74,
              "signature": "func (o GenerateOptions) WithFrequencyPenalty(p float64) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithPresencePenalty(p float64) GenerateOptions",
              "line": 80,
              "signature": "func (o GenerateOptions) WithPresencePenalty(p float64) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithStopSequences(seqs ...string) GenerateOptions",
              "line": 86,
              "signature": "func (o GenerateOptions) WithStopSequences(seqs ...string) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithSeed(seed int64) GenerateOptions",
              "line": 92,
              "signature": "func (o GenerateOptions) WithSeed(seed int64) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithResponseFormat(format string) GenerateOptions",
              "line": 98,
              "signature": "func (o GenerateOptions) WithResponseFormat(format string) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "func (o GenerateOptions) WithSchema(schema *JsonSchema) GenerateOptions",
              "line": 104,
              "signature": "func (o GenerateOptions) WithSchema(schema *JsonSchema) GenerateOptions",
              "documentation": ""
            },
            {
              "name": "type EmbedOptions struct",
              "line": 112,
              "signature": "type EmbedOptions struct",
              "documentation": ""
            },
            {
              "name": "func (o EmbedOptions) WithModel(model string) EmbedOptions",
              "line": 122,
              "signature": "func (o EmbedOptions) WithModel(model string) EmbedOptions",
              "documentation": ""
            },
            {
              "name": "func (o EmbedOptions) WithDimensions(d int) EmbedOptions",
              "line": 128,
              "signature": "func (o EmbedOptions) WithDimensions(d int) EmbedOptions",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/error.go",
          "sha256": "a0747ef15c4a77495e376be1517addaa0838d711f39294fa766ad083b2ac2247",
          "artifactSha256": "d6314bf4ff69dae937a46b59f13f38e55c71f354c03ce7c3536a0b3af774e77b",
          "url": "/reference/source/forge-go/core/error.go.txt",
          "declarations": [
            {
              "name": "type ErrKind string",
              "line": 9,
              "signature": "type ErrKind string\n\nconst (\n// ErrKindProvider indicates a provider-related error (network, auth, rate limit).\nErrKindProvider ErrKind;",
              "documentation": ""
            },
            {
              "name": "type ForgeError struct",
              "line": 50,
              "signature": "type ForgeError struct",
              "documentation": ""
            },
            {
              "name": "func (e *ForgeError) Error() string",
              "line": 65,
              "signature": "func (e *ForgeError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *ForgeError) Unwrap() error",
              "line": 73,
              "signature": "func (e *ForgeError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func (e *ForgeError) Is(target error) bool",
              "line": 79,
              "signature": "func (e *ForgeError) Is(target error) bool",
              "documentation": ""
            },
            {
              "name": "func (e *ForgeError) WithContext(key, value string) *ForgeError",
              "line": 88,
              "signature": "func (e *ForgeError) WithContext(key, value string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewProviderError(providerRef, message string, cause error) *ForgeError",
              "line": 140,
              "signature": "func NewProviderError(providerRef, message string, cause error) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewProviderUnavailableError(providerRef, reason string) *ForgeError",
              "line": 150,
              "signature": "func NewProviderUnavailableError(providerRef, reason string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewProviderAuthenticationError(providerRef, reason string) *ForgeError",
              "line": 159,
              "signature": "func NewProviderAuthenticationError(providerRef, reason string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewCapabilityUnsupportedError(providerRef string, capability RuntimeCapability) *ForgeError",
              "line": 168,
              "signature": "func NewCapabilityUnsupportedError(providerRef string, capability RuntimeCapability) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewProviderNegotiationError(providerRef, reason string) *ForgeError",
              "line": 180,
              "signature": "func NewProviderNegotiationError(providerRef, reason string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewProviderSessionExpiredError(providerRef, sessionID string) *ForgeError",
              "line": 189,
              "signature": "func NewProviderSessionExpiredError(providerRef, sessionID string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewProviderInterruptUnsupportedError(providerRef string) *ForgeError",
              "line": 201,
              "signature": "func NewProviderInterruptUnsupportedError(providerRef string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewProviderResumeUnsupportedError(providerRef string) *ForgeError",
              "line": 210,
              "signature": "func NewProviderResumeUnsupportedError(providerRef string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewValidationError(message string) *ForgeError",
              "line": 223,
              "signature": "func NewValidationError(message string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewToolError(toolName, message string, cause error) *ForgeError",
              "line": 235,
              "signature": "func NewToolError(toolName, message string, cause error) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewIdentityError(operation, message string, cause error) *ForgeError",
              "line": 249,
              "signature": "func NewIdentityError(operation, message string, cause error) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewAuthError(agentDID, actID, message string) *ForgeError",
              "line": 263,
              "signature": "func NewAuthError(agentDID, actID, message string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewLifecycleError(from, to, message string) *ForgeError",
              "line": 279,
              "signature": "func NewLifecycleError(from, to, message string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewSchemaError(path, message string) *ForgeError",
              "line": 295,
              "signature": "func NewSchemaError(path, message string) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewSerializationError(message string, cause error) *ForgeError",
              "line": 304,
              "signature": "func NewSerializationError(message string, cause error) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewTimeoutError(operation string, cause error) *ForgeError",
              "line": 313,
              "signature": "func NewTimeoutError(operation string, cause error) *ForgeError",
              "documentation": ""
            },
            {
              "name": "func NewCancelledError(operation string) *ForgeError",
              "line": 323,
              "signature": "func NewCancelledError(operation string) *ForgeError",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/message.go",
          "sha256": "3ea2c2745123c0d65d5d161fe2e2d0a2eb46255bb420be7f14c58fd168d167f8",
          "artifactSha256": "07a8b3b8b53295167d551f965b764e91e509495b0ff7f695d18a45a1aa728654",
          "url": "/reference/source/forge-go/core/message.go.txt",
          "declarations": [
            {
              "name": "type Role string",
              "line": 20,
              "signature": "type Role string\n\nconst (\n// RoleSystem is the system instruction role.\nRoleSystem Role;",
              "documentation": ""
            },
            {
              "name": "func (r Role) String() string",
              "line": 34,
              "signature": "func (r Role) String() string",
              "documentation": ""
            },
            {
              "name": "func (r Role) IsValid() bool",
              "line": 39,
              "signature": "func (r Role) IsValid() bool",
              "documentation": ""
            },
            {
              "name": "type MessagePartType string",
              "line": 49,
              "signature": "type MessagePartType string\n\nconst (\n// MessagePartText is a text content part.\nMessagePartText MessagePartType;",
              "documentation": ""
            },
            {
              "name": "type MessagePart struct",
              "line": 68,
              "signature": "type MessagePart struct",
              "documentation": ""
            },
            {
              "name": "func NewTextPart(text string) MessagePart",
              "line": 89,
              "signature": "func NewTextPart(text string) MessagePart",
              "documentation": ""
            },
            {
              "name": "func NewImagePart(url, mimeType string) MessagePart",
              "line": 97,
              "signature": "func NewImagePart(url, mimeType string) MessagePart",
              "documentation": ""
            },
            {
              "name": "func NewToolCallPart(tc ToolCall) MessagePart",
              "line": 106,
              "signature": "func NewToolCallPart(tc ToolCall) MessagePart",
              "documentation": ""
            },
            {
              "name": "func NewToolResultPart(tr ToolResult) MessagePart",
              "line": 114,
              "signature": "func NewToolResultPart(tr ToolResult) MessagePart",
              "documentation": ""
            },
            {
              "name": "type ModelMessage struct",
              "line": 125,
              "signature": "type ModelMessage struct",
              "documentation": ""
            },
            {
              "name": "func NewModelMessage(role Role, parts ...MessagePart) ModelMessage",
              "line": 134,
              "signature": "func NewModelMessage(role Role, parts ...MessagePart) ModelMessage",
              "documentation": ""
            },
            {
              "name": "func NewTextMessage(role Role, text string) ModelMessage",
              "line": 145,
              "signature": "func NewTextMessage(role Role, text string) ModelMessage",
              "documentation": ""
            },
            {
              "name": "func NewSystemMessage(text string) ModelMessage",
              "line": 153,
              "signature": "func NewSystemMessage(text string) ModelMessage",
              "documentation": ""
            },
            {
              "name": "func NewUserMessage(text string) ModelMessage",
              "line": 158,
              "signature": "func NewUserMessage(text string) ModelMessage",
              "documentation": ""
            },
            {
              "name": "func NewAssistantMessage(text string) ModelMessage",
              "line": 163,
              "signature": "func NewAssistantMessage(text string) ModelMessage",
              "documentation": ""
            },
            {
              "name": "func (m ModelMessage) TextContent() string",
              "line": 169,
              "signature": "func (m ModelMessage) TextContent() string",
              "documentation": ""
            },
            {
              "name": "func (m ModelMessage) ToolCalls() []ToolCall",
              "line": 181,
              "signature": "func (m ModelMessage) ToolCalls() []ToolCall",
              "documentation": ""
            },
            {
              "name": "func (m ModelMessage) ToolResults() []ToolResult",
              "line": 193,
              "signature": "func (m ModelMessage) ToolResults() []ToolResult",
              "documentation": ""
            },
            {
              "name": "func (m ModelMessage) HasToolCalls() bool",
              "line": 204,
              "signature": "func (m ModelMessage) HasToolCalls() bool",
              "documentation": ""
            },
            {
              "name": "func (m ModelMessage) MarshalJSON() ([]byte, error)",
              "line": 214,
              "signature": "func (m ModelMessage) MarshalJSON() ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (m *ModelMessage) UnmarshalJSON(data []byte) error",
              "line": 220,
              "signature": "func (m *ModelMessage) UnmarshalJSON(data []byte) error",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/model.go",
          "sha256": "f70b1918207e2d2b8642480c041974b25ebbb0dab893e5de044366b68d5e8622",
          "artifactSha256": "17b07f8f4abec15774fca1d4399a8c444d51e874f09e046ab1f49f5a78959c97",
          "url": "/reference/source/forge-go/core/model.go.txt",
          "declarations": [
            {
              "name": "type LanguageModel interface",
              "line": 13,
              "signature": "type LanguageModel interface",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/output.go",
          "sha256": "dabc23013d93e42c0f7b9fe0afd7e4546a3035e34c300116f032e12a49e6cd18",
          "artifactSha256": "7e28a2e68ec1cbacf50d03c86cedd52778d30cef91614804bd3bbe8e085c870b",
          "url": "/reference/source/forge-go/core/output.go.txt",
          "declarations": [
            {
              "name": "type FinishReason string",
              "line": 8,
              "signature": "type FinishReason string\n\nconst (\n// FinishReasonStop indicates the model generated a natural stop token.\nFinishReasonStop FinishReason;",
              "documentation": ""
            },
            {
              "name": "func (f FinishReason) String() string",
              "line": 31,
              "signature": "func (f FinishReason) String() string",
              "documentation": ""
            },
            {
              "name": "type Usage struct",
              "line": 39,
              "signature": "type Usage struct",
              "documentation": ""
            },
            {
              "name": "func (u Usage) Add(other Usage) Usage",
              "line": 52,
              "signature": "func (u Usage) Add(other Usage) Usage",
              "documentation": ""
            },
            {
              "name": "type GenerateResult struct",
              "line": 75,
              "signature": "type GenerateResult struct",
              "documentation": ""
            },
            {
              "name": "func (r *GenerateResult) Text() string",
              "line": 88,
              "signature": "func (r *GenerateResult) Text() string",
              "documentation": ""
            },
            {
              "name": "func (r *GenerateResult) HasToolCalls() bool",
              "line": 93,
              "signature": "func (r *GenerateResult) HasToolCalls() bool",
              "documentation": ""
            },
            {
              "name": "type StreamChunkType string",
              "line": 98,
              "signature": "type StreamChunkType string\n\nconst (\n// StreamChunkTextDelta is an incremental text fragment.\nStreamChunkTextDelta StreamChunkType;",
              "documentation": ""
            },
            {
              "name": "type StreamChunk struct",
              "line": 115,
              "signature": "type StreamChunk struct",
              "documentation": ""
            },
            {
              "name": "func NewTextDelta(text string) StreamChunk",
              "line": 144,
              "signature": "func NewTextDelta(text string) StreamChunk",
              "documentation": ""
            },
            {
              "name": "func NewToolCallDelta(callID, name, argsDelta string) StreamChunk",
              "line": 152,
              "signature": "func NewToolCallDelta(callID, name, argsDelta string) StreamChunk",
              "documentation": ""
            },
            {
              "name": "func NewStreamDone(reason FinishReason, usage Usage) StreamChunk",
              "line": 162,
              "signature": "func NewStreamDone(reason FinishReason, usage Usage) StreamChunk",
              "documentation": ""
            },
            {
              "name": "func NewStreamError(err error) StreamChunk",
              "line": 171,
              "signature": "func NewStreamError(err error) StreamChunk",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/provider.go",
          "sha256": "fec739fcf05dc55a4518ef700a1896ca4afe545856e5cf586494959e3faeaaf6",
          "artifactSha256": "42f273a23e5b412bc6c05f0fa66ce09e082f854530780aac99157d0a1a4a6493",
          "url": "/reference/source/forge-go/core/provider.go.txt",
          "declarations": [
            {
              "name": "type ProviderRef struct",
              "line": 17,
              "signature": "type ProviderRef struct",
              "documentation": ""
            },
            {
              "name": "func ParseProviderRef(ref string) (ProviderRef, error)",
              "line": 29,
              "signature": "func ParseProviderRef(ref string) (ProviderRef, error)",
              "documentation": ""
            },
            {
              "name": "func (p ProviderRef) String() string",
              "line": 47,
              "signature": "func (p ProviderRef) String() string",
              "documentation": ""
            },
            {
              "name": "type ProviderMetadata struct",
              "line": 52,
              "signature": "type ProviderMetadata struct",
              "documentation": ""
            },
            {
              "name": "type RuntimeCapability string",
              "line": 81,
              "signature": "type RuntimeCapability string\n\nconst (\nRuntimeCapabilityToolCalls           RuntimeCapability;",
              "documentation": ""
            },
            {
              "name": "type ProviderRuntimeCapabilities struct",
              "line": 97,
              "signature": "type ProviderRuntimeCapabilities struct",
              "documentation": ""
            },
            {
              "name": "func BaselineProviderRuntimeCapabilities() ProviderRuntimeCapabilities",
              "line": 107,
              "signature": "func BaselineProviderRuntimeCapabilities() ProviderRuntimeCapabilities",
              "documentation": ""
            },
            {
              "name": "func (c ProviderRuntimeCapabilities) WithCapability(capability RuntimeCapability) ProviderRuntimeCapabilities",
              "line": 116,
              "signature": "func (c ProviderRuntimeCapabilities) WithCapability(capability RuntimeCapability) ProviderRuntimeCapabilities",
              "documentation": ""
            },
            {
              "name": "func (c ProviderRuntimeCapabilities) Supports(capability RuntimeCapability) bool",
              "line": 127,
              "signature": "func (c ProviderRuntimeCapabilities) Supports(capability RuntimeCapability) bool",
              "documentation": ""
            },
            {
              "name": "type ProviderNegotiationRequest struct",
              "line": 132,
              "signature": "type ProviderNegotiationRequest struct",
              "documentation": ""
            },
            {
              "name": "type ProviderNegotiationResult struct",
              "line": 139,
              "signature": "type ProviderNegotiationResult struct",
              "documentation": ""
            },
            {
              "name": "type ProviderFactory func(ref ProviderRef) (LanguageModel, error)",
              "line": 148,
              "signature": "type ProviderFactory func(ref ProviderRef) (LanguageModel, error)\n\n// ProviderRegistry manages the set of available language model providers.\n//\n// Providers are registered by namespace. When an agent needs a model,\n// it resolves a ProviderRef against the registry to get a LanguageModel.\n//\n// The registry is safe for concurrent use.\n//\n// ANVIL Spec Section 4.6 -- Provider registry and dispatch.\ntype ProviderRegistry struct",
              "documentation": ""
            },
            {
              "name": "type ProviderRegistry struct",
              "line": 158,
              "signature": "type ProviderRegistry struct",
              "documentation": ""
            },
            {
              "name": "func NewProviderRegistry() *ProviderRegistry",
              "line": 167,
              "signature": "func NewProviderRegistry() *ProviderRegistry",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) Register(namespace string, factory ProviderFactory, meta ProviderMetadata)",
              "line": 179,
              "signature": "func (r *ProviderRegistry) Register(namespace string, factory ProviderFactory, meta ProviderMetadata)",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) RegisterWithRuntime(",
              "line": 185,
              "signature": "func (r *ProviderRegistry) RegisterWithRuntime(\nnamespace string,\nfactory ProviderFactory,\nmeta ProviderMetadata,\nruntime ProviderRuntimeCapabilities,\n)",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) Resolve(ref ProviderRef) (LanguageModel, error)",
              "line": 232,
              "signature": "func (r *ProviderRegistry) Resolve(ref ProviderRef) (LanguageModel, error)",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) ResolveString(ref string) (LanguageModel, error)",
              "line": 264,
              "signature": "func (r *ProviderRegistry) ResolveString(ref string) (LanguageModel, error)",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) Metadata(namespace string) (ProviderMetadata, bool)",
              "line": 273,
              "signature": "func (r *ProviderRegistry) Metadata(namespace string) (ProviderMetadata, bool)",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) Namespaces() []string",
              "line": 284,
              "signature": "func (r *ProviderRegistry) Namespaces() []string",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) Has(namespace string) bool",
              "line": 295,
              "signature": "func (r *ProviderRegistry) Has(namespace string) bool",
              "documentation": ""
            },
            {
              "name": "func (r *ProviderRegistry) Negotiate(request ProviderNegotiationRequest) (ProviderNegotiationResult, error)",
              "line": 303,
              "signature": "func (r *ProviderRegistry) Negotiate(request ProviderNegotiationRequest) (ProviderNegotiationResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/provider_official.go",
          "sha256": "eabefa8535c3f37df0365d3a7eae88780592017f934fcfb789eaeae430a7bbb9",
          "artifactSha256": "e423beb795f1033bf39ee39b6b6d5a356a8eda48de3c3d57a1c34df98cf5fc51",
          "url": "/reference/source/forge-go/core/provider_official.go.txt",
          "declarations": [
            {
              "name": "type ProviderFamily string",
              "line": 36,
              "signature": "type ProviderFamily string\n\nconst (\nProviderFamilyCodingProduct ProviderFamily;",
              "documentation": ""
            },
            {
              "name": "type AuthStrategy string",
              "line": 45,
              "signature": "type AuthStrategy string\n\nconst (\nAuthStrategyAPIKey              AuthStrategy;",
              "documentation": ""
            },
            {
              "name": "type ProviderPreset struct",
              "line": 56,
              "signature": "type ProviderPreset struct",
              "documentation": ""
            },
            {
              "name": "func ApprovedCodingProviderPresets() []ProviderPreset",
              "line": 63,
              "signature": "func ApprovedCodingProviderPresets() []ProviderPreset",
              "documentation": ""
            },
            {
              "name": "func ApprovedDirectProviderPresets() []ProviderPreset",
              "line": 74,
              "signature": "func ApprovedDirectProviderPresets() []ProviderPreset",
              "documentation": ""
            },
            {
              "name": "func ApprovedGatewayProviderPresets() []ProviderPreset",
              "line": 91,
              "signature": "func ApprovedGatewayProviderPresets() []ProviderPreset",
              "documentation": ""
            },
            {
              "name": "func RegisterOfficialCodingProviders(registry *ProviderRegistry) error",
              "line": 102,
              "signature": "func RegisterOfficialCodingProviders(registry *ProviderRegistry) error",
              "documentation": ""
            },
            {
              "name": "func RegisterDefaultCoreDirectProviders(registry *ProviderRegistry) error",
              "line": 118,
              "signature": "func RegisterDefaultCoreDirectProviders(registry *ProviderRegistry) error",
              "documentation": ""
            },
            {
              "name": "func RegisterClaudeCodeProvider(registry *ProviderRegistry) (string, error)",
              "line": 131,
              "signature": "func RegisterClaudeCodeProvider(registry *ProviderRegistry) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterCodexProvider(registry *ProviderRegistry) (string, error)",
              "line": 149,
              "signature": "func RegisterCodexProvider(registry *ProviderRegistry) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterKimiCodingProvider(registry *ProviderRegistry) (string, error)",
              "line": 167,
              "signature": "func RegisterKimiCodingProvider(registry *ProviderRegistry) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterGLMCodingProvider(registry *ProviderRegistry) (string, error)",
              "line": 183,
              "signature": "func RegisterGLMCodingProvider(registry *ProviderRegistry) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterMiniMaxCodingProvider(registry *ProviderRegistry) (string, error)",
              "line": 199,
              "signature": "func RegisterMiniMaxCodingProvider(registry *ProviderRegistry) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterOpenAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 215,
              "signature": "func RegisterOpenAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterAnthropicModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 231,
              "signature": "func RegisterAnthropicModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterGoogleModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 246,
              "signature": "func RegisterGoogleModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterXAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 261,
              "signature": "func RegisterXAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterDeepSeekModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 265,
              "signature": "func RegisterDeepSeekModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterMistralModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 269,
              "signature": "func RegisterMistralModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterCohereModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 273,
              "signature": "func RegisterCohereModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterGroqModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 277,
              "signature": "func RegisterGroqModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterMoonshotModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 281,
              "signature": "func RegisterMoonshotModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterZAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 285,
              "signature": "func RegisterZAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterMiniMaxModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 289,
              "signature": "func RegisterMiniMaxModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterOpenRouterModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 293,
              "signature": "func RegisterOpenRouterModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterFoundryModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 297,
              "signature": "func RegisterFoundryModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterBedrockModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 313,
              "signature": "func RegisterBedrockModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterVertexAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 328,
              "signature": "func RegisterVertexAIModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func RegisterMicrosoftFoundryModel(registry *ProviderRegistry, modelID string) (string, error)",
              "line": 343,
              "signature": "func RegisterMicrosoftFoundryModel(registry *ProviderRegistry, modelID string) (string, error)",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) Generate(ctx context.Context, messages []ModelMessage, tools []ToolDefinition, options GenerateOptions) (*GenerateResult, error)",
              "line": 758,
              "signature": "func (m *officialProviderModel) Generate(ctx context.Context, messages []ModelMessage, tools []ToolDefinition, options GenerateOptions) (*GenerateResult, error)",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) Stream(ctx context.Context, messages []ModelMessage, tools []ToolDefinition, options GenerateOptions) (<-chan StreamChunk, error)",
              "line": 770,
              "signature": "func (m *officialProviderModel) Stream(ctx context.Context, messages []ModelMessage, tools []ToolDefinition, options GenerateOptions) (<-chan StreamChunk, error)",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) ModelID() string",
              "line": 798,
              "signature": "func (m *officialProviderModel) ModelID() string",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) Provider() string",
              "line": 799,
              "signature": "func (m *officialProviderModel) Provider() string",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) SupportsTools() bool",
              "line": 800,
              "signature": "func (m *officialProviderModel) SupportsTools() bool",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) SupportsImages() bool",
              "line": 801,
              "signature": "func (m *officialProviderModel) SupportsImages() bool",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) SupportsStreaming() bool",
              "line": 802,
              "signature": "func (m *officialProviderModel) SupportsStreaming() bool",
              "documentation": ""
            },
            {
              "name": "func (m *officialProviderModel) SupportsObjectGeneration() bool",
              "line": 803,
              "signature": "func (m *officialProviderModel) SupportsObjectGeneration() bool",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/routing.go",
          "sha256": "e4dd02692e27b599a535f9d77a4746a0c60652249f382c5faaa248fd008a7051",
          "artifactSha256": "376f4b8cbdf886ba9b05f85ace4b3d1a04a34f53513879d80bf1e941838db090",
          "url": "/reference/source/forge-go/core/routing.go.txt",
          "declarations": [
            {
              "name": "type TaskMode string",
              "line": 14,
              "signature": "type TaskMode string\n\nconst (\n// TaskModePlanning represents strategic reasoning, goal decomposition, plan generation.\nTaskModePlanning TaskMode;",
              "documentation": ""
            },
            {
              "name": "func (m TaskMode) AsRoleName() string",
              "line": 28,
              "signature": "func (m TaskMode) AsRoleName() string",
              "documentation": ""
            },
            {
              "name": "type ExecutionTopology string",
              "line": 38,
              "signature": "type ExecutionTopology string\n\nconst (\n// ExecutionTopologySequential is a single sequential call.\nExecutionTopologySequential ExecutionTopology;",
              "documentation": ""
            },
            {
              "name": "type RoutingContext struct",
              "line": 62,
              "signature": "type RoutingContext struct",
              "documentation": ""
            },
            {
              "name": "type ResolvedRoute struct",
              "line": 83,
              "signature": "type ResolvedRoute struct",
              "documentation": ""
            },
            {
              "name": "type ModelRouter interface",
              "line": 98,
              "signature": "type ModelRouter interface",
              "documentation": ""
            },
            {
              "name": "type DefaultModelRouter struct",
              "line": 117,
              "signature": "type DefaultModelRouter struct",
              "documentation": ""
            },
            {
              "name": "func (r DefaultModelRouter) Name() string",
              "line": 120,
              "signature": "func (r DefaultModelRouter) Name() string",
              "documentation": ""
            },
            {
              "name": "func (r DefaultModelRouter) Route(ctx *RoutingContext, topology *ModelTopology) (ResolvedRoute, error)",
              "line": 131,
              "signature": "func (r DefaultModelRouter) Route(ctx *RoutingContext, topology *ModelTopology) (ResolvedRoute, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/schema.go",
          "sha256": "dc71d95b3d08f051558fe5fd16e3503c3403ca84234f61daf6923555cb9b45fe",
          "artifactSha256": "7c582e8b4f8ab4aa24ed2bfe07dd8f84a60fb03cc9517501d434d6764ae4d2ac",
          "url": "/reference/source/forge-go/core/schema.go.txt",
          "declarations": [
            {
              "name": "type SchemaType string",
              "line": 11,
              "signature": "type SchemaType string\n\nconst (\nSchemaTypeString  SchemaType;",
              "documentation": ""
            },
            {
              "name": "type JsonSchema struct",
              "line": 31,
              "signature": "type JsonSchema struct",
              "documentation": ""
            },
            {
              "name": "func ObjectSchema(description string, properties map[string]*JsonSchema, required []string) *JsonSchema",
              "line": 78,
              "signature": "func ObjectSchema(description string, properties map[string]*JsonSchema, required []string) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func StringSchema(description string) *JsonSchema",
              "line": 88,
              "signature": "func StringSchema(description string) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func NumberSchema(description string) *JsonSchema",
              "line": 96,
              "signature": "func NumberSchema(description string) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func IntegerSchema(description string) *JsonSchema",
              "line": 104,
              "signature": "func IntegerSchema(description string) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func BooleanSchema(description string) *JsonSchema",
              "line": 112,
              "signature": "func BooleanSchema(description string) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func ArraySchema(description string, items *JsonSchema) *JsonSchema",
              "line": 120,
              "signature": "func ArraySchema(description string, items *JsonSchema) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func NullSchema(description string) *JsonSchema",
              "line": 129,
              "signature": "func NullSchema(description string) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithMinLength(n int) *JsonSchema",
              "line": 137,
              "signature": "func (s *JsonSchema) WithMinLength(n int) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithMaxLength(n int) *JsonSchema",
              "line": 143,
              "signature": "func (s *JsonSchema) WithMaxLength(n int) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithMinimum(v float64) *JsonSchema",
              "line": 149,
              "signature": "func (s *JsonSchema) WithMinimum(v float64) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithMaximum(v float64) *JsonSchema",
              "line": 155,
              "signature": "func (s *JsonSchema) WithMaximum(v float64) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithMinItems(n int) *JsonSchema",
              "line": 161,
              "signature": "func (s *JsonSchema) WithMinItems(n int) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithMaxItems(n int) *JsonSchema",
              "line": 167,
              "signature": "func (s *JsonSchema) WithMaxItems(n int) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithEnum(values ...any) *JsonSchema",
              "line": 173,
              "signature": "func (s *JsonSchema) WithEnum(values ...any) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithDefault(v any) *JsonSchema",
              "line": 179,
              "signature": "func (s *JsonSchema) WithDefault(v any) *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) WithNoAdditionalProperties() *JsonSchema",
              "line": 185,
              "signature": "func (s *JsonSchema) WithNoAdditionalProperties() *JsonSchema",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) Validate(value any, path string) error",
              "line": 196,
              "signature": "func (s *JsonSchema) Validate(value any, path string) error",
              "documentation": ""
            },
            {
              "name": "func (s *JsonSchema) ValidateJSON(data []byte) error",
              "line": 236,
              "signature": "func (s *JsonSchema) ValidateJSON(data []byte) error",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/telemetry.go",
          "sha256": "f94fa83e72e3f02c451df164dad90536cc5cb87e5d0ad31a3664d9eab6a8789d",
          "artifactSha256": "279ba06b83ed636f3f8f7822e48ea566c093c9e1be52f1a17873abbcd35e221c",
          "url": "/reference/source/forge-go/core/telemetry.go.txt",
          "declarations": [
            {
              "name": "type SpanStatus string",
              "line": 11,
              "signature": "type SpanStatus string\n\nconst (\n// SpanStatusOK indicates the operation completed successfully.\nSpanStatusOK SpanStatus;",
              "documentation": ""
            },
            {
              "name": "type SpanAttribute struct",
              "line": 25,
              "signature": "type SpanAttribute struct",
              "documentation": ""
            },
            {
              "name": "func NewSpanAttribute(key, value string) SpanAttribute",
              "line": 31,
              "signature": "func NewSpanAttribute(key, value string) SpanAttribute",
              "documentation": ""
            },
            {
              "name": "type ForgeSpan struct",
              "line": 42,
              "signature": "type ForgeSpan struct",
              "documentation": ""
            },
            {
              "name": "func (s ForgeSpan) Duration() time.Duration",
              "line": 72,
              "signature": "func (s ForgeSpan) Duration() time.Duration",
              "documentation": ""
            },
            {
              "name": "type ForgeEvent struct",
              "line": 82,
              "signature": "type ForgeEvent struct",
              "documentation": ""
            },
            {
              "name": "type TelemetryEmitter interface",
              "line": 102,
              "signature": "type TelemetryEmitter interface",
              "documentation": ""
            },
            {
              "name": "type NoopEmitter struct",
              "line": 115,
              "signature": "type NoopEmitter struct",
              "documentation": ""
            },
            {
              "name": "func (NoopEmitter) EmitSpan(_ ForgeSpan)",
              "line": 118,
              "signature": "func (NoopEmitter) EmitSpan(_ ForgeSpan)",
              "documentation": ""
            },
            {
              "name": "func (NoopEmitter) EmitEvent(_ ForgeEvent)",
              "line": 121,
              "signature": "func (NoopEmitter) EmitEvent(_ ForgeEvent)",
              "documentation": ""
            },
            {
              "name": "func (NoopEmitter) Flush()",
              "line": 124,
              "signature": "func (NoopEmitter) Flush()",
              "documentation": ""
            },
            {
              "name": "type InMemoryEmitter struct",
              "line": 128,
              "signature": "type InMemoryEmitter struct",
              "documentation": ""
            },
            {
              "name": "func NewInMemoryEmitter() *InMemoryEmitter",
              "line": 135,
              "signature": "func NewInMemoryEmitter() *InMemoryEmitter",
              "documentation": ""
            },
            {
              "name": "func (e *InMemoryEmitter) EmitSpan(span ForgeSpan)",
              "line": 140,
              "signature": "func (e *InMemoryEmitter) EmitSpan(span ForgeSpan)",
              "documentation": ""
            },
            {
              "name": "func (e *InMemoryEmitter) EmitEvent(event ForgeEvent)",
              "line": 147,
              "signature": "func (e *InMemoryEmitter) EmitEvent(event ForgeEvent)",
              "documentation": ""
            },
            {
              "name": "func (e *InMemoryEmitter) Flush()",
              "line": 154,
              "signature": "func (e *InMemoryEmitter) Flush()",
              "documentation": ""
            },
            {
              "name": "func (e *InMemoryEmitter) Spans() []ForgeSpan",
              "line": 157,
              "signature": "func (e *InMemoryEmitter) Spans() []ForgeSpan",
              "documentation": ""
            },
            {
              "name": "func (e *InMemoryEmitter) Events() []ForgeEvent",
              "line": 166,
              "signature": "func (e *InMemoryEmitter) Events() []ForgeEvent",
              "documentation": ""
            },
            {
              "name": "func (e *InMemoryEmitter) Reset()",
              "line": 175,
              "signature": "func (e *InMemoryEmitter) Reset()",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/tool.go",
          "sha256": "318aa768e82b58d97de7d95dda0a64da41813c9ddd51220862de819bf1a2c3aa",
          "artifactSha256": "e39f516a151398bd37e3aad52edf4c508aaa62bc3f6f70f45009ed0039e2cb49",
          "url": "/reference/source/forge-go/core/tool.go.txt",
          "declarations": [
            {
              "name": "type ToolTier int",
              "line": 10,
              "signature": "type ToolTier int\n\nconst (\n// ToolTierPlatform (Tier 1) tools run inside the sandbox and are always\n// available without authorization. Examples: clock, crypto, logging, random.\nToolTierPlatform ToolTier;",
              "documentation": ""
            },
            {
              "name": "func (t ToolTier) String() string",
              "line": 28,
              "signature": "func (t ToolTier) String() string",
              "documentation": ""
            },
            {
              "name": "func (t ToolTier) RequiresAuthorization() bool",
              "line": 46,
              "signature": "func (t ToolTier) RequiresAuthorization() bool",
              "documentation": ""
            },
            {
              "name": "func (t ToolTier) MarshalJSON() ([]byte, error)",
              "line": 51,
              "signature": "func (t ToolTier) MarshalJSON() ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (t *ToolTier) UnmarshalJSON(data []byte) error",
              "line": 56,
              "signature": "func (t *ToolTier) UnmarshalJSON(data []byte) error",
              "documentation": ""
            },
            {
              "name": "type ToolDefinition struct",
              "line": 81,
              "signature": "type ToolDefinition struct",
              "documentation": ""
            },
            {
              "name": "func NewToolDefinition(name, description string, tier ToolTier, parameters *JsonSchema) (ToolDefinition, error)",
              "line": 106,
              "signature": "func NewToolDefinition(name, description string, tier ToolTier, parameters *JsonSchema) (ToolDefinition, error)",
              "documentation": ""
            },
            {
              "name": "type ToolCall struct",
              "line": 125,
              "signature": "type ToolCall struct",
              "documentation": ""
            },
            {
              "name": "func (tc ToolCall) ParseArguments(target any) error",
              "line": 140,
              "signature": "func (tc ToolCall) ParseArguments(target any) error",
              "documentation": ""
            },
            {
              "name": "type ToolResult struct",
              "line": 152,
              "signature": "type ToolResult struct",
              "documentation": ""
            },
            {
              "name": "func NewToolResult(callID, content string) ToolResult",
              "line": 164,
              "signature": "func NewToolResult(callID, content string) ToolResult",
              "documentation": ""
            },
            {
              "name": "func NewToolResultError(callID, errMsg string) ToolResult",
              "line": 173,
              "signature": "func NewToolResultError(callID, errMsg string) ToolResult",
              "documentation": ""
            },
            {
              "name": "type ToolApproval struct",
              "line": 186,
              "signature": "type ToolApproval struct",
              "documentation": ""
            },
            {
              "name": "type ApprovalDecision int",
              "line": 199,
              "signature": "type ApprovalDecision int\n\nconst (\n// ApprovalApprove allows the tool call to proceed as-is.\nApprovalApprove ApprovalDecision;",
              "documentation": ""
            },
            {
              "name": "func (d ApprovalDecision) String() string",
              "line": 211,
              "signature": "func (d ApprovalDecision) String() string",
              "documentation": ""
            },
            {
              "name": "func Approve() ToolApproval",
              "line": 225,
              "signature": "func Approve() ToolApproval",
              "documentation": ""
            },
            {
              "name": "func Deny(reason string) ToolApproval",
              "line": 230,
              "signature": "func Deny(reason string) ToolApproval",
              "documentation": ""
            },
            {
              "name": "func Modify(modifiedArgs string) ToolApproval",
              "line": 235,
              "signature": "func Modify(modifiedArgs string) ToolApproval",
              "documentation": ""
            },
            {
              "name": "type ToolApprovalHandler func(call ToolCall, def ToolDefinition) ToolApproval",
              "line": 246,
              "signature": "type ToolApprovalHandler func(call ToolCall, def ToolDefinition) ToolApproval",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/topology.go",
          "sha256": "f89be10413cf86365a2554704667c591c37e057b0f79296459f7bf6ca5a18ebe",
          "artifactSha256": "e3d767ee70fce18fe3d124a70519aef0884bb9256f6c4ae26630ffd981ab531a",
          "url": "/reference/source/forge-go/core/topology.go.txt",
          "declarations": [
            {
              "name": "const DefaultRole;",
              "line": 10,
              "signature": "const DefaultRole;",
              "documentation": ""
            },
            {
              "name": "type CostPreference string",
              "line": 16,
              "signature": "type CostPreference string\n\nconst (\n// CostPreferenceMinimize prefers the cheapest model that satisfies requirements.\nCostPreferenceMinimize CostPreference;",
              "documentation": ""
            },
            {
              "name": "type LatencyPreference string",
              "line": 31,
              "signature": "type LatencyPreference string\n\nconst (\n// LatencyPreferenceLow prefers the lowest-latency model.\nLatencyPreferenceLow LatencyPreference;",
              "documentation": ""
            },
            {
              "name": "type ModelSlot struct",
              "line": 49,
              "signature": "type ModelSlot struct",
              "documentation": ""
            },
            {
              "name": "type ModelTopology struct",
              "line": 87,
              "signature": "type ModelTopology struct",
              "documentation": ""
            },
            {
              "name": "func NewSingleTopology(provider ProviderRef) *ModelTopology",
              "line": 95,
              "signature": "func NewSingleTopology(provider ProviderRef) *ModelTopology",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) Name() string",
              "line": 108,
              "signature": "func (t *ModelTopology) Name() string",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) DefaultRoleName() string",
              "line": 113,
              "signature": "func (t *ModelTopology) DefaultRoleName() string",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) DefaultSlot() ModelSlot",
              "line": 122,
              "signature": "func (t *ModelTopology) DefaultSlot() ModelSlot",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) SlotForRole(role string) ModelSlot",
              "line": 134,
              "signature": "func (t *ModelTopology) SlotForRole(role string) ModelSlot",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) Slots() map[string]ModelSlot",
              "line": 142,
              "signature": "func (t *ModelTopology) Slots() map[string]ModelSlot",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) SortedRoles() []string",
              "line": 151,
              "signature": "func (t *ModelTopology) SortedRoles() []string",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) HasRole(role string) bool",
              "line": 161,
              "signature": "func (t *ModelTopology) HasRole(role string) bool",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) SlotCount() int",
              "line": 167,
              "signature": "func (t *ModelTopology) SlotCount() int",
              "documentation": ""
            },
            {
              "name": "func (t *ModelTopology) AllProviderRefs() []ProviderRef",
              "line": 173,
              "signature": "func (t *ModelTopology) AllProviderRefs() []ProviderRef",
              "documentation": ""
            },
            {
              "name": "type TopologyBuilder struct",
              "line": 198,
              "signature": "type TopologyBuilder struct",
              "documentation": ""
            },
            {
              "name": "func NewTopologyBuilder() *TopologyBuilder",
              "line": 204,
              "signature": "func NewTopologyBuilder() *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) Name(name string) *TopologyBuilder",
              "line": 211,
              "signature": "func (b *TopologyBuilder) Name(name string) *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) Slot(role string, primary ProviderRef) *TopologyBuilder",
              "line": 219,
              "signature": "func (b *TopologyBuilder) Slot(role string, primary ProviderRef) *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) WithFallback(role string, fallback ProviderRef) *TopologyBuilder",
              "line": 230,
              "signature": "func (b *TopologyBuilder) WithFallback(role string, fallback ProviderRef) *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) WithRequiredCapability(role string, cap RuntimeCapability) *TopologyBuilder",
              "line": 241,
              "signature": "func (b *TopologyBuilder) WithRequiredCapability(role string, cap RuntimeCapability) *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) WithCostPreference(role string, pref CostPreference) *TopologyBuilder",
              "line": 252,
              "signature": "func (b *TopologyBuilder) WithCostPreference(role string, pref CostPreference) *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) WithLatencyPreference(role string, pref LatencyPreference) *TopologyBuilder",
              "line": 263,
              "signature": "func (b *TopologyBuilder) WithLatencyPreference(role string, pref LatencyPreference) *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) WithScopeNarrowing(role string, scopes []string) *TopologyBuilder",
              "line": 274,
              "signature": "func (b *TopologyBuilder) WithScopeNarrowing(role string, scopes []string) *TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *TopologyBuilder) Build() (*ModelTopology, error)",
              "line": 285,
              "signature": "func (b *TopologyBuilder) Build() (*ModelTopology, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/core/types.go",
          "sha256": "12fa828133b7394d1d769c00e773bf3e7abb0b36661d7cc2e17b635f1b529b59",
          "artifactSha256": "1ca6488d778b1ae92606f648550fde3f0b009a4d02174c2493d733354151a84e",
          "url": "/reference/source/forge-go/core/types.go.txt",
          "declarations": [
            {
              "name": "type AgentDID struct",
              "line": 17,
              "signature": "type AgentDID struct",
              "documentation": ""
            },
            {
              "name": "func NewAgentDID(did string) (AgentDID, error)",
              "line": 30,
              "signature": "func NewAgentDID(did string) (AgentDID, error)",
              "documentation": ""
            },
            {
              "name": "func NewCanonicalAgentDID(did string) (AgentDID, error)",
              "line": 38,
              "signature": "func NewCanonicalAgentDID(did string) (AgentDID, error)",
              "documentation": ""
            },
            {
              "name": "func (d AgentDID) String() string",
              "line": 53,
              "signature": "func (d AgentDID) String() string",
              "documentation": ""
            },
            {
              "name": "func (d AgentDID) IsZero() bool",
              "line": 58,
              "signature": "func (d AgentDID) IsZero() bool",
              "documentation": ""
            },
            {
              "name": "func (d AgentDID) Namespace() string",
              "line": 63,
              "signature": "func (d AgentDID) Namespace() string",
              "documentation": ""
            },
            {
              "name": "func (d AgentDID) Kind() string",
              "line": 73,
              "signature": "func (d AgentDID) Kind() string",
              "documentation": ""
            },
            {
              "name": "func (d AgentDID) Identifier() string",
              "line": 83,
              "signature": "func (d AgentDID) Identifier() string",
              "documentation": ""
            },
            {
              "name": "type Timestamp struct",
              "line": 141,
              "signature": "type Timestamp struct",
              "documentation": ""
            },
            {
              "name": "func Now() Timestamp",
              "line": 146,
              "signature": "func Now() Timestamp",
              "documentation": ""
            },
            {
              "name": "func NewTimestamp(t time.Time) Timestamp",
              "line": 152,
              "signature": "func NewTimestamp(t time.Time) Timestamp",
              "documentation": ""
            },
            {
              "name": "func ParseTimestamp(s string) (Timestamp, error)",
              "line": 157,
              "signature": "func ParseTimestamp(s string) (Timestamp, error)",
              "documentation": ""
            },
            {
              "name": "func (ts Timestamp) Time() time.Time",
              "line": 170,
              "signature": "func (ts Timestamp) Time() time.Time",
              "documentation": ""
            },
            {
              "name": "func (ts Timestamp) String() string",
              "line": 175,
              "signature": "func (ts Timestamp) String() string",
              "documentation": ""
            },
            {
              "name": "func (ts Timestamp) IsZero() bool",
              "line": 180,
              "signature": "func (ts Timestamp) IsZero() bool",
              "documentation": ""
            },
            {
              "name": "func (ts Timestamp) Before(other Timestamp) bool",
              "line": 185,
              "signature": "func (ts Timestamp) Before(other Timestamp) bool",
              "documentation": ""
            },
            {
              "name": "func (ts Timestamp) After(other Timestamp) bool",
              "line": 190,
              "signature": "func (ts Timestamp) After(other Timestamp) bool",
              "documentation": ""
            },
            {
              "name": "func (ts Timestamp) Since() time.Duration",
              "line": 195,
              "signature": "func (ts Timestamp) Since() time.Duration",
              "documentation": ""
            },
            {
              "name": "func (ts Timestamp) MarshalJSON() ([]byte, error)",
              "line": 200,
              "signature": "func (ts Timestamp) MarshalJSON() ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (ts *Timestamp) UnmarshalJSON(data []byte) error",
              "line": 205,
              "signature": "func (ts *Timestamp) UnmarshalJSON(data []byte) error",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/embed",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go embed package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/embed",
      "features": {},
      "files": [
        {
          "path": "forge-go/embed/chunking.go",
          "sha256": "8933ba6e32e403d5a9416d68397bba2624f697f2985d45f0c700579514d6942f",
          "artifactSha256": "73ede53c07ec7bea93c1c7b7df11e40ba7a49eeb6dcc5473748e48049c36c5bc",
          "url": "/reference/source/forge-go/embed/chunking.go.txt",
          "declarations": [
            {
              "name": "type TextSplitter interface",
              "line": 15,
              "signature": "type TextSplitter interface",
              "documentation": ""
            },
            {
              "name": "type RecursiveCharacterSplitter struct",
              "line": 32,
              "signature": "type RecursiveCharacterSplitter struct",
              "documentation": ""
            },
            {
              "name": "func NewRecursiveCharacterSplitter(chunkSize, chunkOverlap int) *RecursiveCharacterSplitter",
              "line": 55,
              "signature": "func NewRecursiveCharacterSplitter(chunkSize, chunkOverlap int) *RecursiveCharacterSplitter",
              "documentation": ""
            },
            {
              "name": "func (s *RecursiveCharacterSplitter) Split(text string) []string",
              "line": 76,
              "signature": "func (s *RecursiveCharacterSplitter) Split(text string) []string",
              "documentation": ""
            },
            {
              "name": "type TokenSplitter struct",
              "line": 214,
              "signature": "type TokenSplitter struct",
              "documentation": ""
            },
            {
              "name": "func NewTokenSplitter(maxTokens, tokenOverlap int) *TokenSplitter",
              "line": 229,
              "signature": "func NewTokenSplitter(maxTokens, tokenOverlap int) *TokenSplitter",
              "documentation": ""
            },
            {
              "name": "func (s *TokenSplitter) Split(text string) []string",
              "line": 248,
              "signature": "func (s *TokenSplitter) Split(text string) []string",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/embed/document.go",
          "sha256": "7f9733627461629062d7952cfa871afefb507da3168fdc36e3784dff15a9d83f",
          "artifactSha256": "9aadefe0ede9713d4955be8be48c690f5dad5af38d62065d667c50ea226d296a",
          "url": "/reference/source/forge-go/embed/document.go.txt",
          "declarations": [
            {
              "name": "type Document struct",
              "line": 15,
              "signature": "type Document struct",
              "documentation": ""
            },
            {
              "name": "func NewDocument(content string, metadata json.RawMessage) Document",
              "line": 28,
              "signature": "func NewDocument(content string, metadata json.RawMessage) Document",
              "documentation": ""
            },
            {
              "name": "type DocumentLoader interface",
              "line": 41,
              "signature": "type DocumentLoader interface",
              "documentation": ""
            },
            {
              "name": "type TextLoader struct",
              "line": 52,
              "signature": "type TextLoader struct",
              "documentation": ""
            },
            {
              "name": "func NewTextLoader(text string, metadata json.RawMessage) *TextLoader",
              "line": 61,
              "signature": "func NewTextLoader(text string, metadata json.RawMessage) *TextLoader",
              "documentation": ""
            },
            {
              "name": "func (l *TextLoader) Load(_ context.Context) ([]Document, error)",
              "line": 71,
              "signature": "func (l *TextLoader) Load(_ context.Context) ([]Document, error)",
              "documentation": ""
            },
            {
              "name": "type JsonLoader struct",
              "line": 84,
              "signature": "type JsonLoader struct",
              "documentation": ""
            },
            {
              "name": "func NewJsonLoader(data, contentField string) *JsonLoader",
              "line": 98,
              "signature": "func NewJsonLoader(data, contentField string) *JsonLoader",
              "documentation": ""
            },
            {
              "name": "func (l *JsonLoader) Load(_ context.Context) ([]Document, error)",
              "line": 111,
              "signature": "func (l *JsonLoader) Load(_ context.Context) ([]Document, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/embed/embed.go",
          "sha256": "c1ff9ff84ecd9fc5122d4b29a9ec40a77f5671b102a2635ef56c88138b560740",
          "artifactSha256": "dd1a664e8e275bae90ed35b8779e80b30e70fd90cab9b24ba4e95c9682e705c8",
          "url": "/reference/source/forge-go/embed/embed.go.txt",
          "declarations": [
            {
              "name": "type EmbeddingProvider interface",
              "line": 14,
              "signature": "type EmbeddingProvider interface",
              "documentation": ""
            },
            {
              "name": "type EmbeddingResult struct",
              "line": 34,
              "signature": "type EmbeddingResult struct",
              "documentation": ""
            },
            {
              "name": "func Embed(ctx context.Context, provider EmbeddingProvider, text string) (*EmbeddingResult, error)",
              "line": 62,
              "signature": "func Embed(ctx context.Context, provider EmbeddingProvider, text string) (*EmbeddingResult, error)",
              "documentation": ""
            },
            {
              "name": "func EmbedMany(ctx context.Context, provider EmbeddingProvider, texts []string) (*EmbeddingResult, error)",
              "line": 96,
              "signature": "func EmbedMany(ctx context.Context, provider EmbeddingProvider, texts []string) (*EmbeddingResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/embed/error.go",
          "sha256": "44ebe6c150721faf8048d61e61369649176ae48543bf8d1210b169202f43b521",
          "artifactSha256": "847b03e8403266c8231fffbd852a5eb9ea3920187bc40017438e7064c715069d",
          "url": "/reference/source/forge-go/embed/error.go.txt",
          "declarations": [
            {
              "name": "type ErrKind string",
              "line": 17,
              "signature": "type ErrKind string\n\nconst (\n// ErrKindModel indicates a model/provider error during embedding or reranking.\nErrKindModel ErrKind;",
              "documentation": ""
            },
            {
              "name": "type EmbedError struct",
              "line": 40,
              "signature": "type EmbedError struct",
              "documentation": ""
            },
            {
              "name": "func (e *EmbedError) Error() string",
              "line": 55,
              "signature": "func (e *EmbedError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *EmbedError) Unwrap() error",
              "line": 63,
              "signature": "func (e *EmbedError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func (e *EmbedError) Is(target error) bool",
              "line": 68,
              "signature": "func (e *EmbedError) Is(target error) bool",
              "documentation": ""
            },
            {
              "name": "func NewModelError(model, message string, cause error) *EmbedError",
              "line": 99,
              "signature": "func NewModelError(model, message string, cause error) *EmbedError",
              "documentation": ""
            },
            {
              "name": "func NewDimensionMismatchError(expected, got int) *EmbedError",
              "line": 113,
              "signature": "func NewDimensionMismatchError(expected, got int) *EmbedError",
              "documentation": ""
            },
            {
              "name": "func NewEmptyInputError(operation string) *EmbedError",
              "line": 129,
              "signature": "func NewEmptyInputError(operation string) *EmbedError",
              "documentation": ""
            },
            {
              "name": "func NewStoreError(operation, message string, cause error) *EmbedError",
              "line": 142,
              "signature": "func NewStoreError(operation, message string, cause error) *EmbedError",
              "documentation": ""
            },
            {
              "name": "func NewChunkingError(message string) *EmbedError",
              "line": 156,
              "signature": "func NewChunkingError(message string) *EmbedError",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/embed/rerank.go",
          "sha256": "06f806b3f84708c795a6eea046478d2716e7a026a52b9177cc1638c7494b7f40",
          "artifactSha256": "477d301f0d4a67e3eac433d614eb0b0cc25bad187589c923b7be03f239ef0e81",
          "url": "/reference/source/forge-go/embed/rerank.go.txt",
          "declarations": [
            {
              "name": "type Reranker interface",
              "line": 15,
              "signature": "type Reranker interface",
              "documentation": ""
            },
            {
              "name": "type RerankResult struct",
              "line": 30,
              "signature": "type RerankResult struct",
              "documentation": ""
            },
            {
              "name": "type EmbeddingReranker struct",
              "line": 45,
              "signature": "type EmbeddingReranker struct",
              "documentation": ""
            },
            {
              "name": "func NewEmbeddingReranker(provider EmbeddingProvider) *EmbeddingReranker",
              "line": 50,
              "signature": "func NewEmbeddingReranker(provider EmbeddingProvider) *EmbeddingReranker",
              "documentation": ""
            },
            {
              "name": "func (r *EmbeddingReranker) Rerank(ctx context.Context, query string, documents []string, topK int) ([]RerankResult, error)",
              "line": 70,
              "signature": "func (r *EmbeddingReranker) Rerank(ctx context.Context, query string, documents []string, topK int) ([]RerankResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/embed/similarity.go",
          "sha256": "2a3788c615f4417ac391026e92ef50ee4e0c35e53e6c1cb69ee27095a4db6ad5",
          "artifactSha256": "ea363c5565d46ca8072366160482b63af130bee1917b3b515ecd96895e507447",
          "url": "/reference/source/forge-go/embed/similarity.go.txt",
          "declarations": [
            {
              "name": "func CosineSimilarity(a, b []float64) (float64, error)",
              "line": 22,
              "signature": "func CosineSimilarity(a, b []float64) (float64, error)",
              "documentation": ""
            },
            {
              "name": "func EuclideanDistance(a, b []float64) (float64, error)",
              "line": 61,
              "signature": "func EuclideanDistance(a, b []float64) (float64, error)",
              "documentation": ""
            },
            {
              "name": "func DotProduct(a, b []float64) (float64, error)",
              "line": 94,
              "signature": "func DotProduct(a, b []float64) (float64, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/embed/vector_store.go",
          "sha256": "0c4df1e6d1649ef202c3eaee6c2231a472647d547b212415a562562032004f8d",
          "artifactSha256": "b3ab6870ed5da40b90bb7bbf0191b63e097f48b5af99e1289e5e7840d0831af3",
          "url": "/reference/source/forge-go/embed/vector_store.go.txt",
          "declarations": [
            {
              "name": "type VectorStore interface",
              "line": 17,
              "signature": "type VectorStore interface",
              "documentation": ""
            },
            {
              "name": "type VectorEntry struct",
              "line": 43,
              "signature": "type VectorEntry struct",
              "documentation": ""
            },
            {
              "name": "type SearchResult struct",
              "line": 55,
              "signature": "type SearchResult struct",
              "documentation": ""
            },
            {
              "name": "type InMemoryVectorStore struct",
              "line": 70,
              "signature": "type InMemoryVectorStore struct",
              "documentation": ""
            },
            {
              "name": "func NewInMemoryVectorStore() *InMemoryVectorStore",
              "line": 76,
              "signature": "func NewInMemoryVectorStore() *InMemoryVectorStore",
              "documentation": ""
            },
            {
              "name": "func (s *InMemoryVectorStore) Insert(_ context.Context, entry VectorEntry) error",
              "line": 84,
              "signature": "func (s *InMemoryVectorStore) Insert(_ context.Context, entry VectorEntry) error",
              "documentation": ""
            },
            {
              "name": "func (s *InMemoryVectorStore) Search(_ context.Context, query []float64, topK int) ([]SearchResult, error)",
              "line": 106,
              "signature": "func (s *InMemoryVectorStore) Search(_ context.Context, query []float64, topK int) ([]SearchResult, error)",
              "documentation": ""
            },
            {
              "name": "func (s *InMemoryVectorStore) Delete(_ context.Context, id string) error",
              "line": 142,
              "signature": "func (s *InMemoryVectorStore) Delete(_ context.Context, id string) error",
              "documentation": ""
            },
            {
              "name": "func (s *InMemoryVectorStore) Len() int",
              "line": 155,
              "signature": "func (s *InMemoryVectorStore) Len() int",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/generate",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go generate package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/generate",
      "features": {},
      "files": [
        {
          "path": "forge-go/generate/generate.go",
          "sha256": "e0e2d279e99e7dcd405b79407569df158d49c5aba033eb39cf98049aeeb04eb6",
          "artifactSha256": "ffea094e457149d63efb078c8782892f0822df9246bcb9cb649f65219003b3bb",
          "url": "/reference/source/forge-go/generate/generate.go.txt",
          "declarations": [
            {
              "name": "type GenerateTextResult struct",
              "line": 23,
              "signature": "type GenerateTextResult struct",
              "documentation": ""
            },
            {
              "name": "func (r *GenerateTextResult) Text() string",
              "line": 29,
              "signature": "func (r *GenerateTextResult) Text() string",
              "documentation": ""
            },
            {
              "name": "func (r *GenerateTextResult) FinishReason() core.FinishReason",
              "line": 34,
              "signature": "func (r *GenerateTextResult) FinishReason() core.FinishReason",
              "documentation": ""
            },
            {
              "name": "func (r *GenerateTextResult) Usage() core.Usage",
              "line": 39,
              "signature": "func (r *GenerateTextResult) Usage() core.Usage",
              "documentation": ""
            },
            {
              "name": "func (r *GenerateTextResult) Message() core.ModelMessage",
              "line": 44,
              "signature": "func (r *GenerateTextResult) Message() core.ModelMessage",
              "documentation": ""
            },
            {
              "name": "func (r *GenerateTextResult) HasToolCalls() bool",
              "line": 49,
              "signature": "func (r *GenerateTextResult) HasToolCalls() bool",
              "documentation": ""
            },
            {
              "name": "func GenerateText(ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, options core.GenerateOptions) (*GenerateTextResult, error)",
              "line": 69,
              "signature": "func GenerateText(ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, options core.GenerateOptions) (*GenerateTextResult, error)",
              "documentation": ""
            },
            {
              "name": "func GenerateTextWithTools(ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, tools []core.ToolDefinition, options core.GenerateOptions) (*GenerateTextResult, error)",
              "line": 107,
              "signature": "func GenerateTextWithTools(ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, tools []core.ToolDefinition, options core.GenerateOptions) (*GenerateTextResult, error)",
              "documentation": ""
            },
            {
              "name": "type TextStreamResult struct",
              "line": 140,
              "signature": "type TextStreamResult struct",
              "documentation": ""
            },
            {
              "name": "func (r *TextStreamResult) FullText() string",
              "line": 149,
              "signature": "func (r *TextStreamResult) FullText() string",
              "documentation": ""
            },
            {
              "name": "func (r *TextStreamResult) Chunks() []string",
              "line": 154,
              "signature": "func (r *TextStreamResult) Chunks() []string",
              "documentation": ""
            },
            {
              "name": "func (r *TextStreamResult) FinishReason() core.FinishReason",
              "line": 161,
              "signature": "func (r *TextStreamResult) FinishReason() core.FinishReason",
              "documentation": ""
            },
            {
              "name": "func (r *TextStreamResult) Usage() *core.Usage",
              "line": 166,
              "signature": "func (r *TextStreamResult) Usage() *core.Usage",
              "documentation": ""
            },
            {
              "name": "func (r *TextStreamResult) IsComplete() bool",
              "line": 171,
              "signature": "func (r *TextStreamResult) IsComplete() bool",
              "documentation": ""
            },
            {
              "name": "func (r *TextStreamResult) Err() error",
              "line": 176,
              "signature": "func (r *TextStreamResult) Err() error",
              "documentation": ""
            },
            {
              "name": "func StreamText(ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, options core.GenerateOptions) (<-chan core.StreamChunk, *TextStreamResult, error)",
              "line": 196,
              "signature": "func StreamText(ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, options core.GenerateOptions) (<-chan core.StreamChunk, *TextStreamResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/generate/object.go",
          "sha256": "4f12e21010d434070fb1df0885780d0fdc6c592b0b81ddb30fe6077f07d3ac51",
          "artifactSha256": "1f6752877b1144ed422c20444a778f7c61947736d560f1ce24cc9d7bcdabd4e7",
          "url": "/reference/source/forge-go/generate/object.go.txt",
          "declarations": [
            {
              "name": "type ObjectResult[T any] struct",
              "line": 17,
              "signature": "type ObjectResult[T any] struct",
              "documentation": ""
            },
            {
              "name": "func GenerateObject[T any](ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, schema *core.JsonSchema, options core.GenerateOptions) (*ObjectResult[T], error)",
              "line": 45,
              "signature": "func GenerateObject[T any](ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, schema *core.JsonSchema, options core.GenerateOptions) (*ObjectResult[T], error)",
              "documentation": ""
            },
            {
              "name": "func StreamObject[T any](ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, schema *core.JsonSchema, options core.GenerateOptions) (<-chan core.StreamChunk, *ObjectStreamResult[T], error)",
              "line": 120,
              "signature": "func StreamObject[T any](ctx context.Context, model core.LanguageModel, messages []core.ModelMessage, schema *core.JsonSchema, options core.GenerateOptions) (<-chan core.StreamChunk, *ObjectStreamResult[T], error)",
              "documentation": ""
            },
            {
              "name": "type ObjectStreamResult[T any] struct",
              "line": 206,
              "signature": "type ObjectStreamResult[T any] struct",
              "documentation": ""
            },
            {
              "name": "func (r *ObjectStreamResult[T]) Object() *T",
              "line": 217,
              "signature": "func (r *ObjectStreamResult[T]) Object() *T",
              "documentation": ""
            },
            {
              "name": "func (r *ObjectStreamResult[T]) RawJSON() string",
              "line": 222,
              "signature": "func (r *ObjectStreamResult[T]) RawJSON() string",
              "documentation": ""
            },
            {
              "name": "func (r *ObjectStreamResult[T]) FinishReason() core.FinishReason",
              "line": 227,
              "signature": "func (r *ObjectStreamResult[T]) FinishReason() core.FinishReason",
              "documentation": ""
            },
            {
              "name": "func (r *ObjectStreamResult[T]) Usage() *core.Usage",
              "line": 232,
              "signature": "func (r *ObjectStreamResult[T]) Usage() *core.Usage",
              "documentation": ""
            },
            {
              "name": "func (r *ObjectStreamResult[T]) IsComplete() bool",
              "line": 237,
              "signature": "func (r *ObjectStreamResult[T]) IsComplete() bool",
              "documentation": ""
            },
            {
              "name": "func (r *ObjectStreamResult[T]) Err() error",
              "line": 242,
              "signature": "func (r *ObjectStreamResult[T]) Err() error",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/health",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go health package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/health",
      "features": {},
      "files": [
        {
          "path": "forge-go/health/events.go",
          "sha256": "bd967641de42b915e93863ab011ed28b3bf29b90d6a64b79d1f6f0deabc4e00b",
          "artifactSha256": "ed913802d5dc71a32bbaa353dc60414688947d6ab5e603c89558a0999d4c7526",
          "url": "/reference/source/forge-go/health/events.go.txt",
          "declarations": [
            {
              "name": "func EmitLifecycleEvent(emitter core.TelemetryEmitter, transition LifecycleTransition, agentDID string)",
              "line": 13,
              "signature": "func EmitLifecycleEvent(emitter core.TelemetryEmitter, transition LifecycleTransition, agentDID string)",
              "documentation": ""
            },
            {
              "name": "func EmitHealthSnapshot(emitter core.TelemetryEmitter, profile *HealthProfile, agentDID string)",
              "line": 39,
              "signature": "func EmitHealthSnapshot(emitter core.TelemetryEmitter, profile *HealthProfile, agentDID string)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/health/lifecycle.go",
          "sha256": "75ed638d1cf107851dddb520a6fc1ca18da38cecab296ba7886418407b2241a0",
          "artifactSha256": "890920eb4d8e23fbc55fdc581b517b3e69d2e9ab9e69b3d6ac65a019abf4c96e",
          "url": "/reference/source/forge-go/health/lifecycle.go.txt",
          "declarations": [
            {
              "name": "type LifecycleState string",
              "line": 20,
              "signature": "type LifecycleState string\n\nconst (\n// StateInitializing is the initial state during agent setup (loading config, identity).\nStateInitializing LifecycleState;",
              "documentation": ""
            },
            {
              "name": "func (s LifecycleState) String() string",
              "line": 43,
              "signature": "func (s LifecycleState) String() string",
              "documentation": ""
            },
            {
              "name": "func (s LifecycleState) IsTerminal() bool",
              "line": 48,
              "signature": "func (s LifecycleState) IsTerminal() bool",
              "documentation": ""
            },
            {
              "name": "func (s LifecycleState) CanTransitionTo(target LifecycleState) bool",
              "line": 73,
              "signature": "func (s LifecycleState) CanTransitionTo(target LifecycleState) bool",
              "documentation": ""
            },
            {
              "name": "type LifecycleTransition struct",
              "line": 87,
              "signature": "type LifecycleTransition struct",
              "documentation": ""
            },
            {
              "name": "type LifecycleManager struct",
              "line": 107,
              "signature": "type LifecycleManager struct",
              "documentation": ""
            },
            {
              "name": "func NewLifecycleManager() *LifecycleManager",
              "line": 118,
              "signature": "func NewLifecycleManager() *LifecycleManager",
              "documentation": ""
            },
            {
              "name": "func (lm *LifecycleManager) State() LifecycleState",
              "line": 126,
              "signature": "func (lm *LifecycleManager) State() LifecycleState",
              "documentation": ""
            },
            {
              "name": "func (lm *LifecycleManager) CreatedAt() time.Time",
              "line": 133,
              "signature": "func (lm *LifecycleManager) CreatedAt() time.Time",
              "documentation": ""
            },
            {
              "name": "func (lm *LifecycleManager) Transition(target LifecycleState, reason string) error",
              "line": 145,
              "signature": "func (lm *LifecycleManager) Transition(target LifecycleState, reason string) error",
              "documentation": ""
            },
            {
              "name": "func (lm *LifecycleManager) History() []LifecycleTransition",
              "line": 175,
              "signature": "func (lm *LifecycleManager) History() []LifecycleTransition",
              "documentation": ""
            },
            {
              "name": "func (lm *LifecycleManager) OnTransition(fn func(LifecycleTransition))",
              "line": 186,
              "signature": "func (lm *LifecycleManager) OnTransition(fn func(LifecycleTransition))",
              "documentation": ""
            },
            {
              "name": "func (lm *LifecycleManager) TransitionCount() int",
              "line": 193,
              "signature": "func (lm *LifecycleManager) TransitionCount() int",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/health/profile.go",
          "sha256": "569b9098eb2262b72b37d67d7654d251c62983aa73b70ad5c5796d69625735f3",
          "artifactSha256": "175b04dd96183c426b7d06d05c07d4ba4172b436126d7193b39b4f1ea01aa526",
          "url": "/reference/source/forge-go/health/profile.go.txt",
          "declarations": [
            {
              "name": "type HealthStatus string",
              "line": 12,
              "signature": "type HealthStatus string\n\nconst (\n// HealthStatusHealthy indicates the agent is operating normally.\nHealthStatusHealthy HealthStatus;",
              "documentation": ""
            },
            {
              "name": "func (s HealthStatus) String() string",
              "line": 26,
              "signature": "func (s HealthStatus) String() string",
              "documentation": ""
            },
            {
              "name": "type HealthProfile struct",
              "line": 36,
              "signature": "type HealthProfile struct",
              "documentation": ""
            },
            {
              "name": "func NewHealthProfile() *HealthProfile",
              "line": 80,
              "signature": "func NewHealthProfile() *HealthProfile",
              "documentation": ""
            },
            {
              "name": "type Snapshot struct",
              "line": 87,
              "signature": "type Snapshot struct",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) Snapshot() Snapshot",
              "line": 104,
              "signature": "func (p *HealthProfile) Snapshot() Snapshot",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) RecordError()",
              "line": 125,
              "signature": "func (p *HealthProfile) RecordError()",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) RecordToolInvocation()",
              "line": 132,
              "signature": "func (p *HealthProfile) RecordToolInvocation()",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) RecordInference(tokens int64)",
              "line": 139,
              "signature": "func (p *HealthProfile) RecordInference(tokens int64)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) UpdateCPUUsage(percent float64)",
              "line": 147,
              "signature": "func (p *HealthProfile) UpdateCPUUsage(percent float64)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) UpdateMemoryUsage(bytes int64)",
              "line": 154,
              "signature": "func (p *HealthProfile) UpdateMemoryUsage(bytes int64)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) SetActiveTasks(count uint32)",
              "line": 161,
              "signature": "func (p *HealthProfile) SetActiveTasks(count uint32)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) RecordTaskCompleted()",
              "line": 168,
              "signature": "func (p *HealthProfile) RecordTaskCompleted()",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) UpdateErrorRate(rate float64)",
              "line": 177,
              "signature": "func (p *HealthProfile) UpdateErrorRate(rate float64)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) UpdateAvgLatencyMs(ms float64)",
              "line": 184,
              "signature": "func (p *HealthProfile) UpdateAvgLatencyMs(ms float64)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) UpdateToolSuccessRate(rate float64)",
              "line": 191,
              "signature": "func (p *HealthProfile) UpdateToolSuccessRate(rate float64)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) UpdateGenerationSuccessRate(rate float64)",
              "line": 198,
              "signature": "func (p *HealthProfile) UpdateGenerationSuccessRate(rate float64)",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) ErrorCount() int64",
              "line": 205,
              "signature": "func (p *HealthProfile) ErrorCount() int64",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) ToolInvocations() int64",
              "line": 212,
              "signature": "func (p *HealthProfile) ToolInvocations() int64",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) InferenceCalls() int64",
              "line": 219,
              "signature": "func (p *HealthProfile) InferenceCalls() int64",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) InferenceTokens() int64",
              "line": 226,
              "signature": "func (p *HealthProfile) InferenceTokens() int64",
              "documentation": ""
            },
            {
              "name": "func (p *HealthProfile) UptimeSeconds() float64",
              "line": 233,
              "signature": "func (p *HealthProfile) UptimeSeconds() float64",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/identity",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go identity package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/identity",
      "features": {},
      "files": [
        {
          "path": "forge-go/identity/glyph.go",
          "sha256": "472615561d190cb48e0339857a9f3181dd6720e99f21536e31a98f588bbae157",
          "artifactSha256": "7dd3624889c7e396b7c755069562315a0b42e582d3caa1f4b291a1296add9ba1",
          "url": "/reference/source/forge-go/identity/glyph.go.txt",
          "declarations": [
            {
              "name": "type GlyphEntityKind string",
              "line": 19,
              "signature": "type GlyphEntityKind string\n\nconst (\nGlyphEntityKindHmr   GlyphEntityKind;",
              "documentation": ""
            },
            {
              "name": "func ParseGlyphEntityKind(s string) (GlyphEntityKind, bool)",
              "line": 31,
              "signature": "func ParseGlyphEntityKind(s string) (GlyphEntityKind, bool)",
              "documentation": ""
            },
            {
              "name": "func (k GlyphEntityKind) AsU8() uint8",
              "line": 49,
              "signature": "func (k GlyphEntityKind) AsU8() uint8",
              "documentation": ""
            },
            {
              "name": "func GlyphEntityKindFromU8(v uint8) (GlyphEntityKind, bool)",
              "line": 68,
              "signature": "func GlyphEntityKindFromU8(v uint8) (GlyphEntityKind, bool)",
              "documentation": ""
            },
            {
              "name": "type GlyphDescriptor struct",
              "line": 86,
              "signature": "type GlyphDescriptor struct",
              "documentation": ""
            },
            {
              "name": "type GlyphRenderTarget string",
              "line": 96,
              "signature": "type GlyphRenderTarget string\n\nconst (\n// GlyphRenderTargetWeb produces a self-contained SVG string.\nGlyphRenderTargetWeb GlyphRenderTarget;",
              "documentation": ""
            },
            {
              "name": "type GlyphRenderOptions struct",
              "line": 106,
              "signature": "type GlyphRenderOptions struct",
              "documentation": ""
            },
            {
              "name": "type GlyphColor struct",
              "line": 118,
              "signature": "type GlyphColor struct",
              "documentation": ""
            },
            {
              "name": "type GlyphPalette struct",
              "line": 125,
              "signature": "type GlyphPalette struct",
              "documentation": ""
            },
            {
              "name": "type GlyphRenderFormat string",
              "line": 137,
              "signature": "type GlyphRenderFormat string\n\nconst (\nGlyphRenderFormatSvg       GlyphRenderFormat;",
              "documentation": ""
            },
            {
              "name": "type GlyphRenderResult struct",
              "line": 148,
              "signature": "type GlyphRenderResult struct",
              "documentation": ""
            },
            {
              "name": "func (r *GlyphRenderResult) SvgData() (string, bool)",
              "line": 162,
              "signature": "func (r *GlyphRenderResult) SvgData() (string, bool)",
              "documentation": ""
            },
            {
              "name": "func RenderGlyph(desc *GlyphDescriptor, opts *GlyphRenderOptions) (*GlyphRenderResult, error)",
              "line": 177,
              "signature": "func RenderGlyph(desc *GlyphDescriptor, opts *GlyphRenderOptions) (*GlyphRenderResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/identity/identity.go",
          "sha256": "e60373a45e426fe4f7bd88a25ad256153f28176eb8730f3e424d302788645dee",
          "artifactSha256": "64b56407f45496b7b004bc01738c12cf97e8cff1d2014c1b7431cd5589305791",
          "url": "/reference/source/forge-go/identity/identity.go.txt",
          "declarations": [
            {
              "name": "const DefaultMaxLineageDepth;",
              "line": 25,
              "signature": "const DefaultMaxLineageDepth;",
              "documentation": ""
            },
            {
              "name": "type IdentityKind string",
              "line": 28,
              "signature": "type IdentityKind string\n\nconst (\n// KindHMR is a Human Root identity.\nKindHMR IdentityKind;",
              "documentation": ""
            },
            {
              "name": "type ForgeAgentIdentity struct",
              "line": 47,
              "signature": "type ForgeAgentIdentity struct",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) DID() core.AgentDID",
              "line": 72,
              "signature": "func (id *ForgeAgentIdentity) DID() core.AgentDID",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) Kind() IdentityKind",
              "line": 77,
              "signature": "func (id *ForgeAgentIdentity) Kind() IdentityKind",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) PublicKey() []byte",
              "line": 82,
              "signature": "func (id *ForgeAgentIdentity) PublicKey() []byte",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) LineageDepth() int",
              "line": 89,
              "signature": "func (id *ForgeAgentIdentity) LineageDepth() int",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) CreatedAt() time.Time",
              "line": 94,
              "signature": "func (id *ForgeAgentIdentity) CreatedAt() time.Time",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) Sign(message []byte) ([]byte, error)",
              "line": 102,
              "signature": "func (id *ForgeAgentIdentity) Sign(message []byte) ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) Verify(message, signature []byte) bool",
              "line": 110,
              "signature": "func (id *ForgeAgentIdentity) Verify(message, signature []byte) bool",
              "documentation": ""
            },
            {
              "name": "func (id *ForgeAgentIdentity) String() string",
              "line": 115,
              "signature": "func (id *ForgeAgentIdentity) String() string",
              "documentation": ""
            },
            {
              "name": "func CreateHMRIdentity(namespace string) (*ForgeAgentIdentity, error)",
              "line": 129,
              "signature": "func CreateHMRIdentity(namespace string) (*ForgeAgentIdentity, error)",
              "documentation": ""
            },
            {
              "name": "func CreateHMRIdentityWithIdentifier(namespace, identifier string) (*ForgeAgentIdentity, error)",
              "line": 135,
              "signature": "func CreateHMRIdentityWithIdentifier(namespace, identifier string) (*ForgeAgentIdentity, error)",
              "documentation": ""
            },
            {
              "name": "func CreateMHRIdentity(namespace string) (*ForgeAgentIdentity, error)",
              "line": 142,
              "signature": "func CreateMHRIdentity(namespace string) (*ForgeAgentIdentity, error)",
              "documentation": ""
            },
            {
              "name": "func CreateMHRIdentityWithIdentifier(namespace, identifier string) (*ForgeAgentIdentity, error)",
              "line": 148,
              "signature": "func CreateMHRIdentityWithIdentifier(namespace, identifier string) (*ForgeAgentIdentity, error)",
              "documentation": ""
            },
            {
              "name": "func DeriveAgentIdentity(parent *ForgeAgentIdentity, label, namespace string) (*ForgeAgentIdentity, error)",
              "line": 217,
              "signature": "func DeriveAgentIdentity(parent *ForgeAgentIdentity, label, namespace string) (*ForgeAgentIdentity, error)",
              "documentation": ""
            },
            {
              "name": "func VerifyLineageChain(chain []*ForgeAgentIdentity) error",
              "line": 282,
              "signature": "func VerifyLineageChain(chain []*ForgeAgentIdentity) error",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/identity/lineage.go",
          "sha256": "39382aad662ac553dbaabaca9c467d4513e28c8d4eb5c3cdd736c5cbff8618e2",
          "artifactSha256": "fbcd2e1cf4ebe189dd01353412b9022dc4059066b7566de2b283b111312f9c7e",
          "url": "/reference/source/forge-go/identity/lineage.go.txt",
          "declarations": [
            {
              "name": "type LineageProof struct",
              "line": 12,
              "signature": "type LineageProof struct",
              "documentation": ""
            },
            {
              "name": "func CreateLineageProof(parent, child *ForgeAgentIdentity, label string) (*LineageProof, error)",
              "line": 39,
              "signature": "func CreateLineageProof(parent, child *ForgeAgentIdentity, label string) (*LineageProof, error)",
              "documentation": ""
            },
            {
              "name": "func VerifyLineageProof(proof *LineageProof, parent *ForgeAgentIdentity) bool",
              "line": 71,
              "signature": "func VerifyLineageProof(proof *LineageProof, parent *ForgeAgentIdentity) bool",
              "documentation": ""
            },
            {
              "name": "type LineageChainBuilder struct",
              "line": 92,
              "signature": "type LineageChainBuilder struct",
              "documentation": ""
            },
            {
              "name": "func NewLineageChainBuilder(root *ForgeAgentIdentity) *LineageChainBuilder",
              "line": 98,
              "signature": "func NewLineageChainBuilder(root *ForgeAgentIdentity) *LineageChainBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *LineageChainBuilder) Derive(label, namespace string) (*LineageChainBuilder, error)",
              "line": 105,
              "signature": "func (b *LineageChainBuilder) Derive(label, namespace string) (*LineageChainBuilder, error)",
              "documentation": ""
            },
            {
              "name": "func (b *LineageChainBuilder) Identities() []*ForgeAgentIdentity",
              "line": 123,
              "signature": "func (b *LineageChainBuilder) Identities() []*ForgeAgentIdentity",
              "documentation": ""
            },
            {
              "name": "func (b *LineageChainBuilder) Proofs() []*LineageProof",
              "line": 128,
              "signature": "func (b *LineageChainBuilder) Proofs() []*LineageProof",
              "documentation": ""
            },
            {
              "name": "func (b *LineageChainBuilder) Leaf() *ForgeAgentIdentity",
              "line": 133,
              "signature": "func (b *LineageChainBuilder) Leaf() *ForgeAgentIdentity",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/identity/local_dev.go",
          "sha256": "c214dc532121722c1c22d44fc6e4b9b68b0ed400d3a20a0020b76559c8bfd8ad",
          "artifactSha256": "b7589f2bd89ff4d670211486bd299dd1b61ea1e651d957d7c4f2bf816d445778",
          "url": "/reference/source/forge-go/identity/local_dev.go.txt",
          "declarations": [
            {
              "name": "const ForgeDevMethod;",
              "line": 13,
              "signature": "const ForgeDevMethod;",
              "documentation": ""
            },
            {
              "name": "func ForgeDevDID(machineID, kind, identifier string) string",
              "line": 21,
              "signature": "func ForgeDevDID(machineID, kind, identifier string) string",
              "documentation": ""
            },
            {
              "name": "func DeriveMachineID(profileName string) string",
              "line": 33,
              "signature": "func DeriveMachineID(profileName string) string",
              "documentation": ""
            },
            {
              "name": "func DeriveMachineIDFromParts(hostname, username, profileName string) string",
              "line": 44,
              "signature": "func DeriveMachineIDFromParts(hostname, username, profileName string) string",
              "documentation": ""
            },
            {
              "name": "func ValidateForgeDevDID(did string) error",
              "line": 53,
              "signature": "func ValidateForgeDevDID(did string) error",
              "documentation": ""
            },
            {
              "name": "type LocalDevProfile struct",
              "line": 102,
              "signature": "type LocalDevProfile struct",
              "documentation": ""
            },
            {
              "name": "func NewLocalDevProfile(profileName string) *LocalDevProfile",
              "line": 116,
              "signature": "func NewLocalDevProfile(profileName string) *LocalDevProfile",
              "documentation": ""
            },
            {
              "name": "type ForgeDevIdentity struct",
              "line": 134,
              "signature": "type ForgeDevIdentity struct",
              "documentation": ""
            },
            {
              "name": "type LocalOrg struct",
              "line": 146,
              "signature": "type LocalOrg struct",
              "documentation": ""
            },
            {
              "name": "func NewLocalOrg(name string) LocalOrg",
              "line": 154,
              "signature": "func NewLocalOrg(name string) LocalOrg",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/identity/persistence.go",
          "sha256": "4157497e56566099b841502faf6cc4087f3a8bed6d8aafae20e0760d574cd87c",
          "artifactSha256": "505cf617a32810fd7c2271c8e7d90a60f7885153710bfaaa9bedb2a6926541da",
          "url": "/reference/source/forge-go/identity/persistence.go.txt",
          "declarations": [
            {
              "name": "type ProtectedPrivateKey struct",
              "line": 14,
              "signature": "type ProtectedPrivateKey struct",
              "documentation": ""
            },
            {
              "name": "type IdentityKeyProtector interface",
              "line": 21,
              "signature": "type IdentityKeyProtector interface",
              "documentation": ""
            },
            {
              "name": "type SerializedIdentity struct",
              "line": 29,
              "signature": "type SerializedIdentity struct",
              "documentation": ""
            },
            {
              "name": "func Serialize(id *ForgeAgentIdentity, protector IdentityKeyProtector) (*SerializedIdentity, error)",
              "line": 44,
              "signature": "func Serialize(id *ForgeAgentIdentity, protector IdentityKeyProtector) (*SerializedIdentity, error)",
              "documentation": ""
            },
            {
              "name": "func Deserialize(s *SerializedIdentity, protector IdentityKeyProtector) (*ForgeAgentIdentity, error)",
              "line": 78,
              "signature": "func Deserialize(s *SerializedIdentity, protector IdentityKeyProtector) (*ForgeAgentIdentity, error)",
              "documentation": ""
            },
            {
              "name": "func MarshalJSON(id *ForgeAgentIdentity, protector IdentityKeyProtector) ([]byte, error)",
              "line": 146,
              "signature": "func MarshalJSON(id *ForgeAgentIdentity, protector IdentityKeyProtector) ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func UnmarshalJSON(data []byte, protector IdentityKeyProtector) (*ForgeAgentIdentity, error)",
              "line": 155,
              "signature": "func UnmarshalJSON(data []byte, protector IdentityKeyProtector) (*ForgeAgentIdentity, error)",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/mcp",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go mcp package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/mcp",
      "features": {},
      "files": [
        {
          "path": "forge-go/mcp/auth.go",
          "sha256": "abdab6515edf234a9a5d96cda0ef3c02babdc8b3afc150cbbdc1d946444bcfbf",
          "artifactSha256": "ee274f2ff6ba61bc69a17355578ce344b4db23c3e00d4202b0b5a8ace8c5831f",
          "url": "/reference/source/forge-go/mcp/auth.go.txt",
          "declarations": [
            {
              "name": "type OAuthConfig struct",
              "line": 15,
              "signature": "type OAuthConfig struct",
              "documentation": ""
            },
            {
              "name": "type PkceChallenge struct",
              "line": 40,
              "signature": "type PkceChallenge struct",
              "documentation": ""
            },
            {
              "name": "func GeneratePkceChallenge() (*PkceChallenge, error)",
              "line": 63,
              "signature": "func GeneratePkceChallenge() (*PkceChallenge, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/mcp/client.go",
          "sha256": "d36d5568aade9c2b7312d1a5471403ffbdd828873635fe49d3384f2000a81cb4",
          "artifactSha256": "50a697f7924e78f9d2cd2c1ddc09ee9030f8fd4cd09e7462c5bb5ba81217892b",
          "url": "/reference/source/forge-go/mcp/client.go.txt",
          "declarations": [
            {
              "name": "type McpClientConfig struct",
              "line": 12,
              "signature": "type McpClientConfig struct",
              "documentation": ""
            },
            {
              "name": "type McpClient struct",
              "line": 29,
              "signature": "type McpClient struct",
              "documentation": ""
            },
            {
              "name": "func NewMcpClient(transport McpTransport, oauth *OAuthConfig) *McpClient",
              "line": 39,
              "signature": "func NewMcpClient(transport McpTransport, oauth *OAuthConfig) *McpClient",
              "documentation": ""
            },
            {
              "name": "func NewMcpClientFromConfig(config McpClientConfig) (*McpClient, error)",
              "line": 57,
              "signature": "func NewMcpClientFromConfig(config McpClientConfig) (*McpClient, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) Connect(ctx context.Context) (McpCapabilities, error)",
              "line": 81,
              "signature": "func (c *McpClient) Connect(ctx context.Context) (McpCapabilities, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) ListTools(ctx context.Context) ([]McpToolDescriptor, error)",
              "line": 138,
              "signature": "func (c *McpClient) ListTools(ctx context.Context) ([]McpToolDescriptor, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) CallTool(ctx context.Context, name string, arguments any) (json.RawMessage, error)",
              "line": 174,
              "signature": "func (c *McpClient) CallTool(ctx context.Context, name string, arguments any) (json.RawMessage, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) ListResources(ctx context.Context) ([]McpResource, error)",
              "line": 206,
              "signature": "func (c *McpClient) ListResources(ctx context.Context) ([]McpResource, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) GetResource(ctx context.Context, uri string) (json.RawMessage, error)",
              "line": 240,
              "signature": "func (c *McpClient) GetResource(ctx context.Context, uri string) (json.RawMessage, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) ListPrompts(ctx context.Context) ([]McpPrompt, error)",
              "line": 268,
              "signature": "func (c *McpClient) ListPrompts(ctx context.Context) ([]McpPrompt, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) GetPrompt(ctx context.Context, name string, arguments map[string]string) (json.RawMessage, error)",
              "line": 303,
              "signature": "func (c *McpClient) GetPrompt(ctx context.Context, name string, arguments map[string]string) (json.RawMessage, error)",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) Disconnect() error",
              "line": 324,
              "signature": "func (c *McpClient) Disconnect() error",
              "documentation": ""
            },
            {
              "name": "func (c *McpClient) Capabilities() McpCapabilities",
              "line": 331,
              "signature": "func (c *McpClient) Capabilities() McpCapabilities",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/mcp/error.go",
          "sha256": "be6e00003b1b970b5caf133ea185e266f8fefb67b997971e5f5c35ded2e3dd8c",
          "artifactSha256": "630d02004836bac8ee2cbcdbb0e2aed590f9cb34edd7fc868670ee481a6856d3",
          "url": "/reference/source/forge-go/mcp/error.go.txt",
          "declarations": [
            {
              "name": "type ErrKind string",
              "line": 17,
              "signature": "type ErrKind string\n\nconst (\n// ErrKindConnection indicates a connection establishment error.\nErrKindConnection ErrKind;",
              "documentation": ""
            },
            {
              "name": "type McpError struct",
              "line": 43,
              "signature": "type McpError struct",
              "documentation": ""
            },
            {
              "name": "func (e *McpError) Error() string",
              "line": 58,
              "signature": "func (e *McpError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *McpError) Unwrap() error",
              "line": 66,
              "signature": "func (e *McpError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func (e *McpError) Is(target error) bool",
              "line": 71,
              "signature": "func (e *McpError) Is(target error) bool",
              "documentation": ""
            },
            {
              "name": "func NewConnectionError(target, message string, cause error) *McpError",
              "line": 101,
              "signature": "func NewConnectionError(target, message string, cause error) *McpError",
              "documentation": ""
            },
            {
              "name": "func NewTransportError(operation, message string, cause error) *McpError",
              "line": 111,
              "signature": "func NewTransportError(operation, message string, cause error) *McpError",
              "documentation": ""
            },
            {
              "name": "func NewProtocolError(method, message string) *McpError",
              "line": 121,
              "signature": "func NewProtocolError(method, message string) *McpError",
              "documentation": ""
            },
            {
              "name": "func NewToolNotFoundError(toolName string) *McpError",
              "line": 130,
              "signature": "func NewToolNotFoundError(toolName string) *McpError",
              "documentation": ""
            },
            {
              "name": "func NewSerializationError(message string, cause error) *McpError",
              "line": 139,
              "signature": "func NewSerializationError(message string, cause error) *McpError",
              "documentation": ""
            },
            {
              "name": "func NewAuthError(message string, cause error) *McpError",
              "line": 148,
              "signature": "func NewAuthError(message string, cause error) *McpError",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/mcp/server.go",
          "sha256": "6a53a0c669c8cb47a79257395621b1aab7c0427a90c0da157a987d9fde870bc9",
          "artifactSha256": "c4ebf5f70b35a52a63e63f236e97ac242d5d8ac04b223485d1de3f1e3ce4d4bf",
          "url": "/reference/source/forge-go/mcp/server.go.txt",
          "declarations": [
            {
              "name": "type ToolHandler func(ctx context.Context, arguments json.RawMessage) (json.RawMessage, error)",
              "line": 17,
              "signature": "type ToolHandler func(ctx context.Context, arguments json.RawMessage) (json.RawMessage, error)\n\n// ResourceHandler is a function that handles an MCP resource read.\n//\n// Parameters:\n//   - ctx: context for cancellation and timeout\n//\n// Returns the resource content as raw JSON or an error.\ntype ResourceHandler func(ctx context.Context) (json.RawMessage, error)\n\n// PromptHandler is a function that handles an MCP prompt request.\n//\n// Parameters:\n//   - ctx: context for cancellation and timeout\n//   - arguments: the prompt arguments as key-value pairs\n//\n// Returns the rendered prompt as raw JSON or an error.\ntype PromptHandler func(ctx context.Context, arguments map[string]string) (json.RawMessage, error)\n\n// McpServerConfig configures an MCP server.\n//\n// ANVIL Spec Section 12.9 -- MCP Server Configuration.\ntype McpServerConfig struct",
              "documentation": ""
            },
            {
              "name": "type ResourceHandler func(ctx context.Context) (json.RawMessage, error)",
              "line": 25,
              "signature": "type ResourceHandler func(ctx context.Context) (json.RawMessage, error)\n\n// PromptHandler is a function that handles an MCP prompt request.\n//\n// Parameters:\n//   - ctx: context for cancellation and timeout\n//   - arguments: the prompt arguments as key-value pairs\n//\n// Returns the rendered prompt as raw JSON or an error.\ntype PromptHandler func(ctx context.Context, arguments map[string]string) (json.RawMessage, error)\n\n// McpServerConfig configures an MCP server.\n//\n// ANVIL Spec Section 12.9 -- MCP Server Configuration.\ntype McpServerConfig struct",
              "documentation": ""
            },
            {
              "name": "type PromptHandler func(ctx context.Context, arguments map[string]string) (json.RawMessage, error)",
              "line": 34,
              "signature": "type PromptHandler func(ctx context.Context, arguments map[string]string) (json.RawMessage, error)\n\n// McpServerConfig configures an MCP server.\n//\n// ANVIL Spec Section 12.9 -- MCP Server Configuration.\ntype McpServerConfig struct",
              "documentation": ""
            },
            {
              "name": "type McpServerConfig struct",
              "line": 39,
              "signature": "type McpServerConfig struct",
              "documentation": ""
            },
            {
              "name": "type McpServer struct",
              "line": 59,
              "signature": "type McpServer struct",
              "documentation": ""
            },
            {
              "name": "func NewMcpServer(config McpServerConfig) *McpServer",
              "line": 84,
              "signature": "func NewMcpServer(config McpServerConfig) *McpServer",
              "documentation": ""
            },
            {
              "name": "func (s *McpServer) RegisterTool(descriptor McpToolDescriptor, handler ToolHandler)",
              "line": 102,
              "signature": "func (s *McpServer) RegisterTool(descriptor McpToolDescriptor, handler ToolHandler)",
              "documentation": ""
            },
            {
              "name": "func (s *McpServer) RegisterResource(resource McpResource, handler ResourceHandler)",
              "line": 120,
              "signature": "func (s *McpServer) RegisterResource(resource McpResource, handler ResourceHandler)",
              "documentation": ""
            },
            {
              "name": "func (s *McpServer) RegisterPrompt(prompt McpPrompt, handler PromptHandler)",
              "line": 138,
              "signature": "func (s *McpServer) RegisterPrompt(prompt McpPrompt, handler PromptHandler)",
              "documentation": ""
            },
            {
              "name": "func (s *McpServer) HandleRequest(ctx context.Context, req *McpRequest) *McpResponse",
              "line": 159,
              "signature": "func (s *McpServer) HandleRequest(ctx context.Context, req *McpRequest) *McpResponse",
              "documentation": ""
            },
            {
              "name": "func (s *McpServer) Serve(ctx context.Context, transport McpTransport) error",
              "line": 192,
              "signature": "func (s *McpServer) Serve(ctx context.Context, transport McpTransport) error",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/mcp/transport.go",
          "sha256": "4b33971f31ffb853577999bcf544515ea6bae3308339fcb5c040b26bc0360806",
          "artifactSha256": "339a13ea7827ec3a79298333cc0c36dd91c63250f52ed04112820433c9940647",
          "url": "/reference/source/forge-go/mcp/transport.go.txt",
          "declarations": [
            {
              "name": "type TransportType string",
              "line": 18,
              "signature": "type TransportType string\n\nconst (\n// TransportTypeStdio uses standard input/output for communication.\nTransportTypeStdio TransportType;",
              "documentation": ""
            },
            {
              "name": "type TransportConfig struct",
              "line": 34,
              "signature": "type TransportConfig struct",
              "documentation": ""
            },
            {
              "name": "type McpTransport interface",
              "line": 52,
              "signature": "type McpTransport interface",
              "documentation": ""
            },
            {
              "name": "func CreateTransport(config TransportConfig) (McpTransport, error)",
              "line": 86,
              "signature": "func CreateTransport(config TransportConfig) (McpTransport, error)",
              "documentation": ""
            },
            {
              "name": "type StdioTransport struct",
              "line": 108,
              "signature": "type StdioTransport struct",
              "documentation": ""
            },
            {
              "name": "func NewStdioTransport(r io.Reader, w io.Writer) *StdioTransport",
              "line": 120,
              "signature": "func NewStdioTransport(r io.Reader, w io.Writer) *StdioTransport",
              "documentation": ""
            },
            {
              "name": "func (t *StdioTransport) Send(_ context.Context, data []byte) error",
              "line": 128,
              "signature": "func (t *StdioTransport) Send(_ context.Context, data []byte) error",
              "documentation": ""
            },
            {
              "name": "func (t *StdioTransport) Receive(_ context.Context) ([]byte, error)",
              "line": 146,
              "signature": "func (t *StdioTransport) Receive(_ context.Context) ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (t *StdioTransport) Close() error",
              "line": 163,
              "signature": "func (t *StdioTransport) Close() error",
              "documentation": ""
            },
            {
              "name": "type SSETransport struct",
              "line": 178,
              "signature": "type SSETransport struct",
              "documentation": ""
            },
            {
              "name": "func NewSSETransport(url string) *SSETransport",
              "line": 189,
              "signature": "func NewSSETransport(url string) *SSETransport",
              "documentation": ""
            },
            {
              "name": "func (t *SSETransport) Send(ctx context.Context, data []byte) error",
              "line": 199,
              "signature": "func (t *SSETransport) Send(ctx context.Context, data []byte) error",
              "documentation": ""
            },
            {
              "name": "func (t *SSETransport) Receive(ctx context.Context) ([]byte, error)",
              "line": 227,
              "signature": "func (t *SSETransport) Receive(ctx context.Context) ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (t *SSETransport) ConnectSSE(ctx context.Context) error",
              "line": 249,
              "signature": "func (t *SSETransport) ConnectSSE(ctx context.Context) error",
              "documentation": ""
            },
            {
              "name": "func (t *SSETransport) Close() error",
              "line": 303,
              "signature": "func (t *SSETransport) Close() error",
              "documentation": ""
            },
            {
              "name": "type HTTPTransport struct",
              "line": 315,
              "signature": "type HTTPTransport struct",
              "documentation": ""
            },
            {
              "name": "func NewHTTPTransport(url string) *HTTPTransport",
              "line": 324,
              "signature": "func NewHTTPTransport(url string) *HTTPTransport",
              "documentation": ""
            },
            {
              "name": "func (t *HTTPTransport) Send(ctx context.Context, data []byte) error",
              "line": 333,
              "signature": "func (t *HTTPTransport) Send(ctx context.Context, data []byte) error",
              "documentation": ""
            },
            {
              "name": "func (t *HTTPTransport) Receive(ctx context.Context) ([]byte, error)",
              "line": 365,
              "signature": "func (t *HTTPTransport) Receive(ctx context.Context) ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (t *HTTPTransport) Close() error",
              "line": 382,
              "signature": "func (t *HTTPTransport) Close() error",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/mcp/types.go",
          "sha256": "63ccddd93e8b1e9880013e01b910cff2203e97abfa6fe808661f72f56b08cb2d",
          "artifactSha256": "4179aa5a9ba1b43d3ceae4abd3aa154b5598cb059907f5f66931f85614f470eb",
          "url": "/reference/source/forge-go/mcp/types.go.txt",
          "declarations": [
            {
              "name": "type McpToolDescriptor struct",
              "line": 11,
              "signature": "type McpToolDescriptor struct",
              "documentation": ""
            },
            {
              "name": "type McpResource struct",
              "line": 25,
              "signature": "type McpResource struct",
              "documentation": ""
            },
            {
              "name": "type McpPrompt struct",
              "line": 42,
              "signature": "type McpPrompt struct",
              "documentation": ""
            },
            {
              "name": "type McpPromptArgument struct",
              "line": 54,
              "signature": "type McpPromptArgument struct",
              "documentation": ""
            },
            {
              "name": "type McpCapabilities struct",
              "line": 68,
              "signature": "type McpCapabilities struct",
              "documentation": ""
            },
            {
              "name": "func AllCapabilities() McpCapabilities",
              "line": 80,
              "signature": "func AllCapabilities() McpCapabilities",
              "documentation": ""
            },
            {
              "name": "func NoCapabilities() McpCapabilities",
              "line": 89,
              "signature": "func NoCapabilities() McpCapabilities",
              "documentation": ""
            },
            {
              "name": "func DefaultCapabilities() McpCapabilities",
              "line": 95,
              "signature": "func DefaultCapabilities() McpCapabilities",
              "documentation": ""
            },
            {
              "name": "type McpRequestID struct",
              "line": 102,
              "signature": "type McpRequestID struct",
              "documentation": ""
            },
            {
              "name": "func NumberID(n int64) McpRequestID",
              "line": 107,
              "signature": "func NumberID(n int64) McpRequestID",
              "documentation": ""
            },
            {
              "name": "func StringID(s string) McpRequestID",
              "line": 112,
              "signature": "func StringID(s string) McpRequestID",
              "documentation": ""
            },
            {
              "name": "func NullID() McpRequestID",
              "line": 117,
              "signature": "func NullID() McpRequestID",
              "documentation": ""
            },
            {
              "name": "func (id McpRequestID) Value() any",
              "line": 122,
              "signature": "func (id McpRequestID) Value() any",
              "documentation": ""
            },
            {
              "name": "func (id McpRequestID) MarshalJSON() ([]byte, error)",
              "line": 127,
              "signature": "func (id McpRequestID) MarshalJSON() ([]byte, error)",
              "documentation": ""
            },
            {
              "name": "func (id *McpRequestID) UnmarshalJSON(data []byte) error",
              "line": 132,
              "signature": "func (id *McpRequestID) UnmarshalJSON(data []byte) error",
              "documentation": ""
            },
            {
              "name": "type McpRequest struct",
              "line": 164,
              "signature": "type McpRequest struct",
              "documentation": ""
            },
            {
              "name": "func NewRequest(id McpRequestID, method string, params any) (*McpRequest, error)",
              "line": 186,
              "signature": "func NewRequest(id McpRequestID, method string, params any) (*McpRequest, error)",
              "documentation": ""
            },
            {
              "name": "type McpResponse struct",
              "line": 207,
              "signature": "type McpResponse struct",
              "documentation": ""
            },
            {
              "name": "func (r *McpResponse) IsError() bool",
              "line": 224,
              "signature": "func (r *McpResponse) IsError() bool",
              "documentation": ""
            },
            {
              "name": "type McpErrorObject struct",
              "line": 231,
              "signature": "type McpErrorObject struct",
              "documentation": ""
            },
            {
              "name": "func (e *McpErrorObject) Error() string",
              "line": 245,
              "signature": "func (e *McpErrorObject) Error() string",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/media",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go media package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/media",
      "features": {},
      "files": [
        {
          "path": "forge-go/media/error.go",
          "sha256": "a01f6c99d680f79f964dfc0ac3723fdb7ec2d3d240d6c56132ffdabf880514bb",
          "artifactSha256": "d1837143af683537582f8a79bc5702faadddc8c7a22e0f647cf483d95fa658d7",
          "url": "/reference/source/forge-go/media/error.go.txt",
          "declarations": [
            {
              "name": "type ErrKind string",
              "line": 17,
              "signature": "type ErrKind string\n\nconst (\n// ErrKindGeneration indicates an image or video generation error.\nErrKindGeneration ErrKind;",
              "documentation": ""
            },
            {
              "name": "type MediaError struct",
              "line": 40,
              "signature": "type MediaError struct",
              "documentation": ""
            },
            {
              "name": "func (e *MediaError) Error() string",
              "line": 55,
              "signature": "func (e *MediaError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *MediaError) Unwrap() error",
              "line": 63,
              "signature": "func (e *MediaError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func (e *MediaError) Is(target error) bool",
              "line": 68,
              "signature": "func (e *MediaError) Is(target error) bool",
              "documentation": ""
            },
            {
              "name": "func NewGenerationError(model, message string, cause error) *MediaError",
              "line": 99,
              "signature": "func NewGenerationError(model, message string, cause error) *MediaError",
              "documentation": ""
            },
            {
              "name": "func NewTranscriptionError(model, message string, cause error) *MediaError",
              "line": 113,
              "signature": "func NewTranscriptionError(model, message string, cause error) *MediaError",
              "documentation": ""
            },
            {
              "name": "func NewSpeechError(model, message string, cause error) *MediaError",
              "line": 127,
              "signature": "func NewSpeechError(model, message string, cause error) *MediaError",
              "documentation": ""
            },
            {
              "name": "func NewVideoError(model, message string, cause error) *MediaError",
              "line": 141,
              "signature": "func NewVideoError(model, message string, cause error) *MediaError",
              "documentation": ""
            },
            {
              "name": "func NewUnsupportedFormatError(format, operation string) *MediaError",
              "line": 155,
              "signature": "func NewUnsupportedFormatError(format, operation string) *MediaError",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/media/image.go",
          "sha256": "3584e4211fb55e5467d210dd192a8b6887e96404995072ec57e7bb15d428df12",
          "artifactSha256": "bc1560aae5777fc43cdf0778c8d04e9097de8ca7628c603f9ace9a91113d43c4",
          "url": "/reference/source/forge-go/media/image.go.txt",
          "declarations": [
            {
              "name": "type ImageFormat string",
              "line": 8,
              "signature": "type ImageFormat string\n\nconst (\n// ImageFormatPNG is the PNG image format.\nImageFormatPNG ImageFormat;",
              "documentation": ""
            },
            {
              "name": "func (f ImageFormat) MimeType() string",
              "line": 22,
              "signature": "func (f ImageFormat) MimeType() string",
              "documentation": ""
            },
            {
              "name": "func (f ImageFormat) Extension() string",
              "line": 36,
              "signature": "func (f ImageFormat) Extension() string",
              "documentation": ""
            },
            {
              "name": "type ImageOptions struct",
              "line": 46,
              "signature": "type ImageOptions struct",
              "documentation": ""
            },
            {
              "name": "type ImageResult struct",
              "line": 66,
              "signature": "type ImageResult struct",
              "documentation": ""
            },
            {
              "name": "type ImageProvider interface",
              "line": 89,
              "signature": "type ImageProvider interface",
              "documentation": ""
            },
            {
              "name": "func GenerateImage(ctx context.Context, provider ImageProvider, prompt string, options ImageOptions) (*ImageResult, error)",
              "line": 122,
              "signature": "func GenerateImage(ctx context.Context, provider ImageProvider, prompt string, options ImageOptions) (*ImageResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/media/speech.go",
          "sha256": "9dcdf4560cd330205fdc6370352b4bf57e85061e9e155be4a6aa60e8cbe4abb8",
          "artifactSha256": "d73c087fdfda1e0b646b8a5aa8164437c0408d947bace5123f487b7eebeebb91",
          "url": "/reference/source/forge-go/media/speech.go.txt",
          "declarations": [
            {
              "name": "type AudioFormat string",
              "line": 8,
              "signature": "type AudioFormat string\n\nconst (\n// AudioFormatMP3 is the MP3 audio format.\nAudioFormatMP3 AudioFormat;",
              "documentation": ""
            },
            {
              "name": "func (f AudioFormat) MimeType() string",
              "line": 25,
              "signature": "func (f AudioFormat) MimeType() string",
              "documentation": ""
            },
            {
              "name": "func (f AudioFormat) Extension() string",
              "line": 41,
              "signature": "func (f AudioFormat) Extension() string",
              "documentation": ""
            },
            {
              "name": "type SpeechOptions struct",
              "line": 51,
              "signature": "type SpeechOptions struct",
              "documentation": ""
            },
            {
              "name": "type SpeechResult struct",
              "line": 67,
              "signature": "type SpeechResult struct",
              "documentation": ""
            },
            {
              "name": "type SpeechProvider interface",
              "line": 88,
              "signature": "type SpeechProvider interface",
              "documentation": ""
            },
            {
              "name": "func Speak(ctx context.Context, provider SpeechProvider, text string, options SpeechOptions) (*SpeechResult, error)",
              "line": 121,
              "signature": "func Speak(ctx context.Context, provider SpeechProvider, text string, options SpeechOptions) (*SpeechResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/media/transcription.go",
          "sha256": "23aa905928295d152daaec2078ab691776189553c4648bcb2d3e282df9aea49a",
          "artifactSha256": "76c59858e9392a53e376c44e8308235597a9255bc1b385dc95541a19dd0645bc",
          "url": "/reference/source/forge-go/media/transcription.go.txt",
          "declarations": [
            {
              "name": "type TranscriptionSegment struct",
              "line": 11,
              "signature": "type TranscriptionSegment struct",
              "documentation": ""
            },
            {
              "name": "func (s TranscriptionSegment) Duration() float64",
              "line": 25,
              "signature": "func (s TranscriptionSegment) Duration() float64",
              "documentation": ""
            },
            {
              "name": "type TranscriptionOptions struct",
              "line": 35,
              "signature": "type TranscriptionOptions struct",
              "documentation": ""
            },
            {
              "name": "type TranscriptionResult struct",
              "line": 47,
              "signature": "type TranscriptionResult struct",
              "documentation": ""
            },
            {
              "name": "type TranscriptionProvider interface",
              "line": 72,
              "signature": "type TranscriptionProvider interface",
              "documentation": ""
            },
            {
              "name": "func Transcribe(ctx context.Context, provider TranscriptionProvider, audio []byte, options TranscriptionOptions) (*TranscriptionResult, error)",
              "line": 105,
              "signature": "func Transcribe(ctx context.Context, provider TranscriptionProvider, audio []byte, options TranscriptionOptions) (*TranscriptionResult, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/media/video.go",
          "sha256": "67df47aa45f4faaa2d01ba0b5de4e6d357024ef358d09bfa786a53eb48ec6aac",
          "artifactSha256": "00d62470e452df4d86a6e44f374c96ffc1497545d8e9d0db488fe21817b1111d",
          "url": "/reference/source/forge-go/media/video.go.txt",
          "declarations": [
            {
              "name": "type VideoFormat string",
              "line": 8,
              "signature": "type VideoFormat string\n\nconst (\n// VideoFormatMP4 is the MP4 video format.\nVideoFormatMP4 VideoFormat;",
              "documentation": ""
            },
            {
              "name": "func (f VideoFormat) MimeType() string",
              "line": 19,
              "signature": "func (f VideoFormat) MimeType() string",
              "documentation": ""
            },
            {
              "name": "func (f VideoFormat) Extension() string",
              "line": 31,
              "signature": "func (f VideoFormat) Extension() string",
              "documentation": ""
            },
            {
              "name": "type VideoOptions struct",
              "line": 41,
              "signature": "type VideoOptions struct",
              "documentation": ""
            },
            {
              "name": "type VideoResult struct",
              "line": 58,
              "signature": "type VideoResult struct",
              "documentation": ""
            },
            {
              "name": "type VideoProvider interface",
              "line": 84,
              "signature": "type VideoProvider interface",
              "documentation": ""
            },
            {
              "name": "func GenerateVideo(ctx context.Context, provider VideoProvider, prompt string, options VideoOptions) (*VideoResult, error)",
              "line": 117,
              "signature": "func GenerateVideo(ctx context.Context, provider VideoProvider, prompt string, options VideoOptions) (*VideoResult, error)",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/telemetry",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go telemetry package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/telemetry",
      "features": {},
      "files": [
        {
          "path": "forge-go/telemetry/audit.go",
          "sha256": "822afc0a1820408a6abf4c27fc3c27996cc3f44342998e5e86aa68c54e44979d",
          "artifactSha256": "a283d9895e3736baf9dc858df61578e43f454031c0b8269fa9402292ff5fc8e8",
          "url": "/reference/source/forge-go/telemetry/audit.go.txt",
          "declarations": [
            {
              "name": "type AuditEntry struct",
              "line": 11,
              "signature": "type AuditEntry struct",
              "documentation": ""
            },
            {
              "name": "type AuditTrail struct",
              "line": 34,
              "signature": "type AuditTrail struct",
              "documentation": ""
            },
            {
              "name": "func NewAuditTrail(agentDID string) *AuditTrail",
              "line": 41,
              "signature": "func NewAuditTrail(agentDID string) *AuditTrail",
              "documentation": ""
            },
            {
              "name": "func (t *AuditTrail) Append(event AuditEvent)",
              "line": 51,
              "signature": "func (t *AuditTrail) Append(event AuditEvent)",
              "documentation": ""
            },
            {
              "name": "func (t *AuditTrail) Entries() []AuditEntry",
              "line": 62,
              "signature": "func (t *AuditTrail) Entries() []AuditEntry",
              "documentation": ""
            },
            {
              "name": "func (t *AuditTrail) Len() int",
              "line": 71,
              "signature": "func (t *AuditTrail) Len() int",
              "documentation": ""
            },
            {
              "name": "func (t *AuditTrail) IsEmpty() bool",
              "line": 78,
              "signature": "func (t *AuditTrail) IsEmpty() bool",
              "documentation": ""
            },
            {
              "name": "func (t *AuditTrail) Last() *AuditEntry",
              "line": 85,
              "signature": "func (t *AuditTrail) Last() *AuditEntry",
              "documentation": ""
            },
            {
              "name": "func (t *AuditTrail) AgentDID() string",
              "line": 96,
              "signature": "func (t *AuditTrail) AgentDID() string",
              "documentation": ""
            },
            {
              "name": "func (t *AuditTrail) FilterByKind(kind AuditEventKind) []AuditEntry",
              "line": 101,
              "signature": "func (t *AuditTrail) FilterByKind(kind AuditEventKind) []AuditEntry",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/telemetry/collector.go",
          "sha256": "e3215141845ecaa04b4859871a4813641016422ec005b36ceb268b38c36503ca",
          "artifactSha256": "469a753bda0f3ab230c02c4a54d899ef3d03ec70e46940cd970039f5fa19e82b",
          "url": "/reference/source/forge-go/telemetry/collector.go.txt",
          "declarations": [
            {
              "name": "type CompletedSpan struct",
              "line": 12,
              "signature": "type CompletedSpan struct",
              "documentation": ""
            },
            {
              "name": "type SpanCollector interface",
              "line": 35,
              "signature": "type SpanCollector interface",
              "documentation": ""
            },
            {
              "name": "type NoopCollector struct",
              "line": 53,
              "signature": "type NoopCollector struct",
              "documentation": ""
            },
            {
              "name": "func (NoopCollector) RecordSpan(_ CompletedSpan)",
              "line": 56,
              "signature": "func (NoopCollector) RecordSpan(_ CompletedSpan)",
              "documentation": ""
            },
            {
              "name": "func (NoopCollector) Spans() []CompletedSpan",
              "line": 59,
              "signature": "func (NoopCollector) Spans() []CompletedSpan",
              "documentation": ""
            },
            {
              "name": "func (NoopCollector) Clear()",
              "line": 62,
              "signature": "func (NoopCollector) Clear()",
              "documentation": ""
            },
            {
              "name": "func (NoopCollector) Len() int",
              "line": 65,
              "signature": "func (NoopCollector) Len() int",
              "documentation": ""
            },
            {
              "name": "func (NoopCollector) IsEmpty() bool",
              "line": 68,
              "signature": "func (NoopCollector) IsEmpty() bool",
              "documentation": ""
            },
            {
              "name": "type InMemoryCollector struct",
              "line": 74,
              "signature": "type InMemoryCollector struct",
              "documentation": ""
            },
            {
              "name": "func NewInMemoryCollector() *InMemoryCollector",
              "line": 80,
              "signature": "func NewInMemoryCollector() *InMemoryCollector",
              "documentation": ""
            },
            {
              "name": "func (c *InMemoryCollector) RecordSpan(span CompletedSpan)",
              "line": 85,
              "signature": "func (c *InMemoryCollector) RecordSpan(span CompletedSpan)",
              "documentation": ""
            },
            {
              "name": "func (c *InMemoryCollector) Spans() []CompletedSpan",
              "line": 92,
              "signature": "func (c *InMemoryCollector) Spans() []CompletedSpan",
              "documentation": ""
            },
            {
              "name": "func (c *InMemoryCollector) Clear()",
              "line": 101,
              "signature": "func (c *InMemoryCollector) Clear()",
              "documentation": ""
            },
            {
              "name": "func (c *InMemoryCollector) Len() int",
              "line": 108,
              "signature": "func (c *InMemoryCollector) Len() int",
              "documentation": ""
            },
            {
              "name": "func (c *InMemoryCollector) IsEmpty() bool",
              "line": 115,
              "signature": "func (c *InMemoryCollector) IsEmpty() bool",
              "documentation": ""
            },
            {
              "name": "type InMemoryTelemetry struct",
              "line": 134,
              "signature": "type InMemoryTelemetry struct",
              "documentation": ""
            },
            {
              "name": "func NewInMemoryTelemetry() *InMemoryTelemetry",
              "line": 142,
              "signature": "func NewInMemoryTelemetry() *InMemoryTelemetry",
              "documentation": ""
            },
            {
              "name": "func (t *InMemoryTelemetry) StartSpan(name string, agentDID string) SpanID",
              "line": 150,
              "signature": "func (t *InMemoryTelemetry) StartSpan(name string, agentDID string) SpanID",
              "documentation": ""
            },
            {
              "name": "func (t *InMemoryTelemetry) EndSpan(spanID SpanID) error",
              "line": 165,
              "signature": "func (t *InMemoryTelemetry) EndSpan(spanID SpanID) error",
              "documentation": ""
            },
            {
              "name": "func (t *InMemoryTelemetry) EmitEvent(event AuditEvent)",
              "line": 190,
              "signature": "func (t *InMemoryTelemetry) EmitEvent(event AuditEvent)",
              "documentation": ""
            },
            {
              "name": "func (t *InMemoryTelemetry) Flush() error",
              "line": 197,
              "signature": "func (t *InMemoryTelemetry) Flush() error",
              "documentation": ""
            },
            {
              "name": "func (t *InMemoryTelemetry) CompletedSpans() []CompletedSpan",
              "line": 202,
              "signature": "func (t *InMemoryTelemetry) CompletedSpans() []CompletedSpan",
              "documentation": ""
            },
            {
              "name": "func (t *InMemoryTelemetry) Events() []AuditEvent",
              "line": 207,
              "signature": "func (t *InMemoryTelemetry) Events() []AuditEvent",
              "documentation": ""
            },
            {
              "name": "func (t *InMemoryTelemetry) ActiveSpanCount() int",
              "line": 216,
              "signature": "func (t *InMemoryTelemetry) ActiveSpanCount() int",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/telemetry/contract.go",
          "sha256": "706b98e915b2f9201dad34aeb9a3ba57be2069376a43b63aef28396cc919349d",
          "artifactSha256": "f8c179b6db18e8e124c09c0fcc23be0a25059cbb42c859e0d1f64510789e189a",
          "url": "/reference/source/forge-go/telemetry/contract.go.txt",
          "declarations": [
            {
              "name": "type SpanID string",
              "line": 10,
              "signature": "type SpanID string\n\n// NewSpanID generates a new random span identifier.\nfunc NewSpanID() SpanID",
              "documentation": ""
            },
            {
              "name": "func NewSpanID() SpanID",
              "line": 13,
              "signature": "func NewSpanID() SpanID",
              "documentation": ""
            },
            {
              "name": "func (id SpanID) String() string",
              "line": 20,
              "signature": "func (id SpanID) String() string",
              "documentation": ""
            },
            {
              "name": "type AuditEventKind string",
              "line": 27,
              "signature": "type AuditEventKind string\n\nconst (\n// AuditLifecycleTransition records a lifecycle state change.\nAuditLifecycleTransition AuditEventKind;",
              "documentation": ""
            },
            {
              "name": "type AuditEvent struct",
              "line": 52,
              "signature": "type AuditEvent struct",
              "documentation": ""
            },
            {
              "name": "type TelemetryContract interface",
              "line": 76,
              "signature": "type TelemetryContract interface",
              "documentation": ""
            },
            {
              "name": "type NoopTelemetry struct",
              "line": 104,
              "signature": "type NoopTelemetry struct",
              "documentation": ""
            },
            {
              "name": "func (NoopTelemetry) StartSpan(_ string, _ string) SpanID",
              "line": 107,
              "signature": "func (NoopTelemetry) StartSpan(_ string, _ string) SpanID",
              "documentation": ""
            },
            {
              "name": "func (NoopTelemetry) EndSpan(_ SpanID) error",
              "line": 112,
              "signature": "func (NoopTelemetry) EndSpan(_ SpanID) error",
              "documentation": ""
            },
            {
              "name": "func (NoopTelemetry) EmitEvent(_ AuditEvent)",
              "line": 117,
              "signature": "func (NoopTelemetry) EmitEvent(_ AuditEvent)",
              "documentation": ""
            },
            {
              "name": "func (NoopTelemetry) Flush() error",
              "line": 120,
              "signature": "func (NoopTelemetry) Flush() error",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/telemetry/errors.go",
          "sha256": "6acbcb6431f081bd95db59f82d3a5dad3600353528d073d3ad62f6d4bbaeb6d7",
          "artifactSha256": "d06a1590c872efdf1929d51e0107d2e4310823df526fffeb3394e8fade0998c9",
          "url": "/reference/source/forge-go/telemetry/errors.go.txt",
          "declarations": [
            {
              "name": "type TelemetryError struct",
              "line": 12,
              "signature": "type TelemetryError struct",
              "documentation": ""
            },
            {
              "name": "type TelemetryErrorKind string",
              "line": 24,
              "signature": "type TelemetryErrorKind string\n\nconst (\n// ErrKindSpanNotFound indicates the span does not exist.\nErrKindSpanNotFound TelemetryErrorKind;",
              "documentation": ""
            },
            {
              "name": "func (e *TelemetryError) Error() string",
              "line": 50,
              "signature": "func (e *TelemetryError) Error() string",
              "documentation": ""
            },
            {
              "name": "func (e *TelemetryError) Unwrap() error",
              "line": 58,
              "signature": "func (e *TelemetryError) Unwrap() error",
              "documentation": ""
            },
            {
              "name": "func NewSpanNotFoundError(spanID string) *TelemetryError",
              "line": 63,
              "signature": "func NewSpanNotFoundError(spanID string) *TelemetryError",
              "documentation": ""
            },
            {
              "name": "func NewSpanAlreadyClosedError(spanID string) *TelemetryError",
              "line": 71,
              "signature": "func NewSpanAlreadyClosedError(spanID string) *TelemetryError",
              "documentation": ""
            },
            {
              "name": "func NewAuditEntryInvalidError(reason string) *TelemetryError",
              "line": 79,
              "signature": "func NewAuditEntryInvalidError(reason string) *TelemetryError",
              "documentation": ""
            },
            {
              "name": "func NewFlushFailedError(cause error) *TelemetryError",
              "line": 87,
              "signature": "func NewFlushFailedError(cause error) *TelemetryError",
              "documentation": ""
            },
            {
              "name": "func NewCollectorFullError(capacity int) *TelemetryError",
              "line": 96,
              "signature": "func NewCollectorFullError(capacity int) *TelemetryError",
              "documentation": ""
            },
            {
              "name": "func NewExportFailedError(dest string, cause error) *TelemetryError",
              "line": 104,
              "signature": "func NewExportFailedError(dest string, cause error) *TelemetryError",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "github.com/l1fe-labs/forge-go/tool",
      "language": "go",
      "version": "module source snapshot",
      "description": "Go tool package.",
      "manifest": "forge-go/go.mod",
      "manifestSha256": "dee97864d07a64c4c93c79104137d155f0cbae6962945f3b56ceb7744a03cc82",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/go/tool",
      "features": {},
      "files": [
        {
          "path": "forge-go/tool/approval.go",
          "sha256": "cfdd204ea12bfec8e881ad5a8d8281f74bda92c1c2d58eb61296f1425750c230",
          "artifactSha256": "f6a046a0c33e735ea8df173678890c282304e0aa468be85ea9c6529a55c44c4a",
          "url": "/reference/source/forge-go/tool/approval.go.txt",
          "declarations": [
            {
              "name": "func AutoApproveHandler(_ core.ToolCall, _ core.ToolDefinition) core.ToolApproval",
              "line": 7,
              "signature": "func AutoApproveHandler(_ core.ToolCall, _ core.ToolDefinition) core.ToolApproval",
              "documentation": ""
            },
            {
              "name": "func DenyAllHandler(_ core.ToolCall, _ core.ToolDefinition) core.ToolApproval",
              "line": 13,
              "signature": "func DenyAllHandler(_ core.ToolCall, _ core.ToolDefinition) core.ToolApproval",
              "documentation": ""
            },
            {
              "name": "func TierBasedHandler(externalApprover core.ToolApprovalHandler) core.ToolApprovalHandler",
              "line": 25,
              "signature": "func TierBasedHandler(externalApprover core.ToolApprovalHandler) core.ToolApprovalHandler",
              "documentation": ""
            },
            {
              "name": "func AllowListHandler(allowed map[string]bool) core.ToolApprovalHandler",
              "line": 43,
              "signature": "func AllowListHandler(allowed map[string]bool) core.ToolApprovalHandler",
              "documentation": ""
            },
            {
              "name": "func DenyListHandler(denied map[string]bool) core.ToolApprovalHandler",
              "line": 54,
              "signature": "func DenyListHandler(denied map[string]bool) core.ToolApprovalHandler",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/tool/definition.go",
          "sha256": "e7def1796247ab4b0733ea352eb40d8eef8495f3b03b805c3b1f5ea46183f4d1",
          "artifactSha256": "f14982d0f74f5c1ef019f7e4a33b6429b3db859301d624617b842ef6042f19c9",
          "url": "/reference/source/forge-go/tool/definition.go.txt",
          "declarations": [
            {
              "name": "type DefinitionBuilder struct",
              "line": 8,
              "signature": "type DefinitionBuilder struct",
              "documentation": ""
            },
            {
              "name": "func NewDefinitionBuilder(name string) *DefinitionBuilder",
              "line": 16,
              "signature": "func NewDefinitionBuilder(name string) *DefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *DefinitionBuilder) Description(desc string) *DefinitionBuilder",
              "line": 21,
              "signature": "func (b *DefinitionBuilder) Description(desc string) *DefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *DefinitionBuilder) Tier(tier core.ToolTier) *DefinitionBuilder",
              "line": 27,
              "signature": "func (b *DefinitionBuilder) Tier(tier core.ToolTier) *DefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *DefinitionBuilder) Parameters(schema *core.JsonSchema) *DefinitionBuilder",
              "line": 33,
              "signature": "func (b *DefinitionBuilder) Parameters(schema *core.JsonSchema) *DefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "func (b *DefinitionBuilder) Build() (core.ToolDefinition, error)",
              "line": 39,
              "signature": "func (b *DefinitionBuilder) Build() (core.ToolDefinition, error)",
              "documentation": ""
            },
            {
              "name": "func (b *DefinitionBuilder) MustBuild() core.ToolDefinition",
              "line": 45,
              "signature": "func (b *DefinitionBuilder) MustBuild() core.ToolDefinition",
              "documentation": ""
            },
            {
              "name": "func PlatformTool(name, description string, params *core.JsonSchema) (core.ToolDefinition, error)",
              "line": 57,
              "signature": "func PlatformTool(name, description string, params *core.JsonSchema) (core.ToolDefinition, error)",
              "documentation": ""
            },
            {
              "name": "func ExternalTool(name, description string, params *core.JsonSchema) (core.ToolDefinition, error)",
              "line": 65,
              "signature": "func ExternalTool(name, description string, params *core.JsonSchema) (core.ToolDefinition, error)",
              "documentation": ""
            },
            {
              "name": "func EmbeddedTool(name, description string, params *core.JsonSchema) (core.ToolDefinition, error)",
              "line": 73,
              "signature": "func EmbeddedTool(name, description string, params *core.JsonSchema) (core.ToolDefinition, error)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/tool/execution.go",
          "sha256": "8ef0418c43a6866f27386a1d3ecab07b1430eee45c1aa1c74ed16fe43223af66",
          "artifactSha256": "811e8392427b2ef41901a8e27d186ae6de7fcc19e3175e0b77bc10f2ec2c52c0",
          "url": "/reference/source/forge-go/tool/execution.go.txt",
          "declarations": [
            {
              "name": "type ExecutionResult struct",
              "line": 11,
              "signature": "type ExecutionResult struct",
              "documentation": ""
            },
            {
              "name": "func ExecuteTool(ctx context.Context, registry *Registry, call core.ToolCall, approvalHandler core.ToolApprovalHandler) (*ExecutionResult, error)",
              "line": 32,
              "signature": "func ExecuteTool(ctx context.Context, registry *Registry, call core.ToolCall, approvalHandler core.ToolApprovalHandler) (*ExecutionResult, error)",
              "documentation": ""
            },
            {
              "name": "func ExecuteToolCalls(ctx context.Context, registry *Registry, calls []core.ToolCall, approvalHandler core.ToolApprovalHandler) []core.ToolResult",
              "line": 96,
              "signature": "func ExecuteToolCalls(ctx context.Context, registry *Registry, calls []core.ToolCall, approvalHandler core.ToolApprovalHandler) []core.ToolResult",
              "documentation": ""
            },
            {
              "name": "func BuildToolResultMessage(results []core.ToolResult) core.ModelMessage",
              "line": 112,
              "signature": "func BuildToolResultMessage(results []core.ToolResult) core.ModelMessage",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-go/tool/registry.go",
          "sha256": "0a23844aabaf7dbffba7ecc80680577c053bf6d17ef5a45289fd544cde4bdf61",
          "artifactSha256": "011d9faa5ed33fe8cf24424d4e7f846b219ff918f7243ad2454e24f6b29c3991",
          "url": "/reference/source/forge-go/tool/registry.go.txt",
          "declarations": [
            {
              "name": "type Handler func(arguments string) (string, error)",
              "line": 17,
              "signature": "type Handler func(arguments string) (string, error)\n\n// Registration bundles a tool definition with its execution handler.\ntype Registration struct",
              "documentation": ""
            },
            {
              "name": "type Registration struct",
              "line": 20,
              "signature": "type Registration struct",
              "documentation": ""
            },
            {
              "name": "type Registry struct",
              "line": 33,
              "signature": "type Registry struct",
              "documentation": ""
            },
            {
              "name": "func NewRegistry() *Registry",
              "line": 39,
              "signature": "func NewRegistry() *Registry",
              "documentation": ""
            },
            {
              "name": "func (r *Registry) Register(def core.ToolDefinition, handler Handler) error",
              "line": 49,
              "signature": "func (r *Registry) Register(def core.ToolDefinition, handler Handler) error",
              "documentation": ""
            },
            {
              "name": "func (r *Registry) Unregister(name string) bool",
              "line": 65,
              "signature": "func (r *Registry) Unregister(name string) bool",
              "documentation": ""
            },
            {
              "name": "func (r *Registry) Get(name string) (Registration, bool)",
              "line": 77,
              "signature": "func (r *Registry) Get(name string) (Registration, bool)",
              "documentation": ""
            },
            {
              "name": "func (r *Registry) Has(name string) bool",
              "line": 85,
              "signature": "func (r *Registry) Has(name string) bool",
              "documentation": ""
            },
            {
              "name": "func (r *Registry) Definitions() []core.ToolDefinition",
              "line": 94,
              "signature": "func (r *Registry) Definitions() []core.ToolDefinition",
              "documentation": ""
            },
            {
              "name": "func (r *Registry) Names() []string",
              "line": 105,
              "signature": "func (r *Registry) Names() []string",
              "documentation": ""
            },
            {
              "name": "func (r *Registry) Count() int",
              "line": 116,
              "signature": "func (r *Registry) Count() int",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeCore",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeCore library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeCore",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeCore/Brew.swift",
          "sha256": "d7b559d1d2d0ad629fdd3e0d86ff7488ec278494e60699f32d813e110f27b790",
          "artifactSha256": "8671152c56728bf8fdd6c42dde0167374c5573224d176d1a39cecf3afa0d0926",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Brew.swift.txt",
          "declarations": [
            {
              "name": "public struct BrewId: Codable, Sendable, Hashable, Comparable",
              "line": 20,
              "signature": "public struct BrewId: Codable, Sendable, Hashable, Comparable",
              "documentation": ""
            },
            {
              "name": "public init(_ id: String)",
              "line": 24,
              "signature": "public init(_ id: String)",
              "documentation": ""
            },
            {
              "name": "public var asStr: String",
              "line": 29,
              "signature": "public var asStr: String",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 31,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 36,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public static func < (lhs: BrewId, rhs: BrewId) -> Bool",
              "line": 41,
              "signature": "public static func < (lhs: BrewId, rhs: BrewId) -> Bool",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 47,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct NodeId: Codable, Sendable, Hashable, Comparable",
              "line": 53,
              "signature": "public struct NodeId: Codable, Sendable, Hashable, Comparable",
              "documentation": ""
            },
            {
              "name": "public init(_ id: String)",
              "line": 57,
              "signature": "public init(_ id: String)",
              "documentation": ""
            },
            {
              "name": "public var asStr: String",
              "line": 62,
              "signature": "public var asStr: String",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 64,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 69,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public static func < (lhs: NodeId, rhs: NodeId) -> Bool",
              "line": 74,
              "signature": "public static func < (lhs: NodeId, rhs: NodeId) -> Bool",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 80,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct BrewVersion: Codable, Sendable, Hashable, Comparable",
              "line": 86,
              "signature": "public struct BrewVersion: Codable, Sendable, Hashable, Comparable",
              "documentation": ""
            },
            {
              "name": "public init(_ version: String)",
              "line": 90,
              "signature": "public init(_ version: String)",
              "documentation": ""
            },
            {
              "name": "public var asStr: String",
              "line": 95,
              "signature": "public var asStr: String",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 97,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 102,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public static func < (lhs: BrewVersion, rhs: BrewVersion) -> Bool",
              "line": 107,
              "signature": "public static func < (lhs: BrewVersion, rhs: BrewVersion) -> Bool",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 113,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public enum JoinMode: Codable, Sendable, Hashable",
              "line": 119,
              "signature": "public enum JoinMode: Codable, Sendable, Hashable",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 131,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 152,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public enum BrewNodeKind: Codable, Sendable",
              "line": 173,
              "signature": "public enum BrewNodeKind: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 218,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 272,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public enum BrewEdgeKind: String, Codable, Sendable, Hashable, Comparable, CaseIterable",
              "line": 314,
              "signature": "public enum BrewEdgeKind: String, Codable, Sendable, Hashable, Comparable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public static func < (lhs: BrewEdgeKind, rhs: BrewEdgeKind) -> Bool",
              "line": 322,
              "signature": "public static func < (lhs: BrewEdgeKind, rhs: BrewEdgeKind) -> Bool",
              "documentation": ""
            },
            {
              "name": "public struct BrewNode: Codable, Sendable",
              "line": 330,
              "signature": "public struct BrewNode: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let id: NodeId",
              "line": 332,
              "signature": "public let id: NodeId\n/// The node's execution semantics.\npublic let kind: BrewNodeKind\n/// Arbitrary key-value metadata for tooling and visualization.\npublic var metadata: [String: String]\n\npublic init(id: NodeId, kind: BrewNodeKind, metadata: [String: String];",
              "documentation": ""
            },
            {
              "name": "public let kind: BrewNodeKind",
              "line": 334,
              "signature": "public let kind: BrewNodeKind\n/// Arbitrary key-value metadata for tooling and visualization.\npublic var metadata: [String: String]\n\npublic init(id: NodeId, kind: BrewNodeKind, metadata: [String: String];",
              "documentation": ""
            },
            {
              "name": "public var metadata: [String: String]",
              "line": 336,
              "signature": "public var metadata: [String: String]\n\npublic init(id: NodeId, kind: BrewNodeKind, metadata: [String: String];",
              "documentation": ""
            },
            {
              "name": "public init(id: NodeId, kind: BrewNodeKind, metadata: [String: String];",
              "line": 338,
              "signature": "public init(id: NodeId, kind: BrewNodeKind, metadata: [String: String];",
              "documentation": ""
            },
            {
              "name": "public struct BrewEdge: Codable, Sendable, Hashable, Comparable",
              "line": 348,
              "signature": "public struct BrewEdge: Codable, Sendable, Hashable, Comparable",
              "documentation": ""
            },
            {
              "name": "public let from: NodeId",
              "line": 350,
              "signature": "public let from: NodeId\n/// Target node.\npublic let to: NodeId\n/// Edge semantics.\npublic let kind: BrewEdgeKind\n\npublic init(from: NodeId, to: NodeId, kind: BrewEdgeKind)",
              "documentation": ""
            },
            {
              "name": "public let to: NodeId",
              "line": 352,
              "signature": "public let to: NodeId\n/// Edge semantics.\npublic let kind: BrewEdgeKind\n\npublic init(from: NodeId, to: NodeId, kind: BrewEdgeKind)",
              "documentation": ""
            },
            {
              "name": "public let kind: BrewEdgeKind",
              "line": 354,
              "signature": "public let kind: BrewEdgeKind\n\npublic init(from: NodeId, to: NodeId, kind: BrewEdgeKind)",
              "documentation": ""
            },
            {
              "name": "public init(from: NodeId, to: NodeId, kind: BrewEdgeKind)",
              "line": 356,
              "signature": "public init(from: NodeId, to: NodeId, kind: BrewEdgeKind)",
              "documentation": ""
            },
            {
              "name": "public static func < (lhs: BrewEdge, rhs: BrewEdge) -> Bool",
              "line": 362,
              "signature": "public static func < (lhs: BrewEdge, rhs: BrewEdge) -> Bool",
              "documentation": ""
            },
            {
              "name": "public struct Brew: Codable, Sendable",
              "line": 379,
              "signature": "public struct Brew: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let id: BrewId",
              "line": 381,
              "signature": "public let id: BrewId\n/// Semantic version of this brew definition.\npublic let version: BrewVersion\n/// The graph's nodes, keyed by stable node ID.\npublic var nodes: [NodeId: BrewNode]\n/// The graph's edges.\npublic var edges: Set<BrewEdge>\n/// Designated entry nodes. Execution begins at these nodes.\npublic var entryNodes: [NodeId]\n/// Designated exit nodes. When all exit nodes complete, the brew is complete.\npublic var exitNodes: [NodeId]\n/// Optional model topology for this brew.\npublic var topology: ModelTopology?\n\npublic init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public let version: BrewVersion",
              "line": 383,
              "signature": "public let version: BrewVersion\n/// The graph's nodes, keyed by stable node ID.\npublic var nodes: [NodeId: BrewNode]\n/// The graph's edges.\npublic var edges: Set<BrewEdge>\n/// Designated entry nodes. Execution begins at these nodes.\npublic var entryNodes: [NodeId]\n/// Designated exit nodes. When all exit nodes complete, the brew is complete.\npublic var exitNodes: [NodeId]\n/// Optional model topology for this brew.\npublic var topology: ModelTopology?\n\npublic init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public var nodes: [NodeId: BrewNode]",
              "line": 385,
              "signature": "public var nodes: [NodeId: BrewNode]\n/// The graph's edges.\npublic var edges: Set<BrewEdge>\n/// Designated entry nodes. Execution begins at these nodes.\npublic var entryNodes: [NodeId]\n/// Designated exit nodes. When all exit nodes complete, the brew is complete.\npublic var exitNodes: [NodeId]\n/// Optional model topology for this brew.\npublic var topology: ModelTopology?\n\npublic init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public var edges: Set<BrewEdge>",
              "line": 387,
              "signature": "public var edges: Set<BrewEdge>\n/// Designated entry nodes. Execution begins at these nodes.\npublic var entryNodes: [NodeId]\n/// Designated exit nodes. When all exit nodes complete, the brew is complete.\npublic var exitNodes: [NodeId]\n/// Optional model topology for this brew.\npublic var topology: ModelTopology?\n\npublic init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public var entryNodes: [NodeId]",
              "line": 389,
              "signature": "public var entryNodes: [NodeId]\n/// Designated exit nodes. When all exit nodes complete, the brew is complete.\npublic var exitNodes: [NodeId]\n/// Optional model topology for this brew.\npublic var topology: ModelTopology?\n\npublic init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public var exitNodes: [NodeId]",
              "line": 391,
              "signature": "public var exitNodes: [NodeId]\n/// Optional model topology for this brew.\npublic var topology: ModelTopology?\n\npublic init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public var topology: ModelTopology?",
              "line": 393,
              "signature": "public var topology: ModelTopology?\n\npublic init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 395,
              "signature": "public init(\nid: BrewId,\nversion: BrewVersion,\nnodes: [NodeId: BrewNode];",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 420,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 432,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/BrewBuilder.swift",
          "sha256": "15f1ad4600e9be768f0e9f0ef0376cce1a40b6f00e6071ca84bcfe14e46c777c",
          "artifactSha256": "c66cf4af1f4fd05ceb9e0ca29cc84c9dc1daccb626ed83827d2d3c13da16e8a8",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/BrewBuilder.swift.txt",
          "declarations": [
            {
              "name": "public final class BrewBuilder: @unchecked Sendable",
              "line": 20,
              "signature": "public final class BrewBuilder: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init(_ id: String, _ version: String)",
              "line": 34,
              "signature": "public init(_ id: String, _ version: String)",
              "documentation": ""
            },
            {
              "name": "public func addNode(_ nodeId: String, _ kind: BrewNodeKind) -> BrewBuilder",
              "line": 48,
              "signature": "public func addNode(_ nodeId: String, _ kind: BrewNodeKind) -> BrewBuilder",
              "documentation": ""
            },
            {
              "name": "public func addEdge(_ from: String, _ to: String, _ kind: BrewEdgeKind) -> BrewBuilder",
              "line": 64,
              "signature": "public func addEdge(_ from: String, _ to: String, _ kind: BrewEdgeKind) -> BrewBuilder",
              "documentation": ""
            },
            {
              "name": "public func setEntry(_ nodeId: String) -> BrewBuilder",
              "line": 74,
              "signature": "public func setEntry(_ nodeId: String) -> BrewBuilder",
              "documentation": ""
            },
            {
              "name": "public func setExit(_ nodeId: String) -> BrewBuilder",
              "line": 84,
              "signature": "public func setExit(_ nodeId: String) -> BrewBuilder",
              "documentation": ""
            },
            {
              "name": "public func withTopology(_ topology: ModelTopology) -> BrewBuilder",
              "line": 94,
              "signature": "public func withTopology(_ topology: ModelTopology) -> BrewBuilder",
              "documentation": ""
            },
            {
              "name": "public func withMetadata(_ nodeId: String, key: String, value: String) -> BrewBuilder",
              "line": 109,
              "signature": "public func withMetadata(_ nodeId: String, key: String, value: String) -> BrewBuilder",
              "documentation": ""
            },
            {
              "name": "public func build() throws -> Brew",
              "line": 119,
              "signature": "public func build() throws -> Brew",
              "documentation": ""
            },
            {
              "name": "public func topologicalSort(nodes: [NodeId: BrewNode], edges: Set<BrewEdge>) throws -> [NodeId]",
              "line": 200,
              "signature": "public func topologicalSort(nodes: [NodeId: BrewNode], edges: Set<BrewEdge>) throws -> [NodeId]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/BrewResolver.swift",
          "sha256": "aff0741b73e8ac116bb77d8da5d94a5ee900fc60c4b732d42ea673ff1839dee5",
          "artifactSha256": "fec09fdcd60f8aca92c8dd28acd7366a2415d5fb1aaacaf3f9f3a1408287a6e6",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/BrewResolver.swift.txt",
          "declarations": [
            {
              "name": "public struct BrewEnvironment: Codable, Sendable",
              "line": 23,
              "signature": "public struct BrewEnvironment: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var providers: [String: ProviderRef]",
              "line": 25,
              "signature": "public var providers: [String: ProviderRef]\n/// Registered tool names available in this environment.\npublic var tools: Set<String>\n/// Connected MCP server identifiers (URIs or aliases).\npublic var mcpServers: Set<String>\n/// Web capabilities available in this environment.\npublic var webCapabilities: Set<String>\n\npublic init(\nproviders: [String: ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var tools: Set<String>",
              "line": 27,
              "signature": "public var tools: Set<String>\n/// Connected MCP server identifiers (URIs or aliases).\npublic var mcpServers: Set<String>\n/// Web capabilities available in this environment.\npublic var webCapabilities: Set<String>\n\npublic init(\nproviders: [String: ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var mcpServers: Set<String>",
              "line": 29,
              "signature": "public var mcpServers: Set<String>\n/// Web capabilities available in this environment.\npublic var webCapabilities: Set<String>\n\npublic init(\nproviders: [String: ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var webCapabilities: Set<String>",
              "line": 31,
              "signature": "public var webCapabilities: Set<String>\n\npublic init(\nproviders: [String: ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 33,
              "signature": "public init(\nproviders: [String: ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public enum BrewResolutionErrorKind: String, Codable, Sendable, Hashable",
              "line": 55,
              "signature": "public enum BrewResolutionErrorKind: String, Codable, Sendable, Hashable",
              "documentation": ""
            },
            {
              "name": "public struct BrewResolutionError: Error, Codable, Sendable, Hashable",
              "line": 71,
              "signature": "public struct BrewResolutionError: Error, Codable, Sendable, Hashable",
              "documentation": ""
            },
            {
              "name": "public let nodeId: NodeId",
              "line": 73,
              "signature": "public let nodeId: NodeId\n/// What went wrong.\npublic let errorKind: BrewResolutionErrorKind\n\npublic init(nodeId: NodeId, errorKind: BrewResolutionErrorKind)",
              "documentation": ""
            },
            {
              "name": "public let errorKind: BrewResolutionErrorKind",
              "line": 75,
              "signature": "public let errorKind: BrewResolutionErrorKind\n\npublic init(nodeId: NodeId, errorKind: BrewResolutionErrorKind)",
              "documentation": ""
            },
            {
              "name": "public init(nodeId: NodeId, errorKind: BrewResolutionErrorKind)",
              "line": 77,
              "signature": "public init(nodeId: NodeId, errorKind: BrewResolutionErrorKind)",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 89,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            },
            {
              "name": "public enum ResolvedNodeKind: Codable, Sendable",
              "line": 98,
              "signature": "public enum ResolvedNodeKind: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 128,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 182,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public struct ResolvedNode: Codable, Sendable",
              "line": 224,
              "signature": "public struct ResolvedNode: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let id: NodeId",
              "line": 226,
              "signature": "public let id: NodeId\n/// The resolved (verified) node kind.\npublic let kind: ResolvedNodeKind\n\npublic init(id: NodeId, kind: ResolvedNodeKind)",
              "documentation": ""
            },
            {
              "name": "public let kind: ResolvedNodeKind",
              "line": 228,
              "signature": "public let kind: ResolvedNodeKind\n\npublic init(id: NodeId, kind: ResolvedNodeKind)",
              "documentation": ""
            },
            {
              "name": "public init(id: NodeId, kind: ResolvedNodeKind)",
              "line": 230,
              "signature": "public init(id: NodeId, kind: ResolvedNodeKind)",
              "documentation": ""
            },
            {
              "name": "public struct ResolvedBrewPlan: Codable, Sendable",
              "line": 242,
              "signature": "public struct ResolvedBrewPlan: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let planId: String",
              "line": 244,
              "signature": "public let planId: String\n/// The source brew's identifier.\npublic let brewId: BrewId\n/// The source brew's version.\npublic let brewVersion: BrewVersion\n/// ISO 8601 timestamp of when resolution occurred.\npublic let resolvedAt: String\n/// SHA-256 hash of the serialized `BrewEnvironment`.\npublic let environmentHash: String\n/// Resolved nodes keyed by node ID.\npublic let nodes: [NodeId: ResolvedNode]\n/// Edges from the original brew.\npublic let edges: Set<BrewEdge>\n/// Topologically sorted execution order.\npublic let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let brewId: BrewId",
              "line": 246,
              "signature": "public let brewId: BrewId\n/// The source brew's version.\npublic let brewVersion: BrewVersion\n/// ISO 8601 timestamp of when resolution occurred.\npublic let resolvedAt: String\n/// SHA-256 hash of the serialized `BrewEnvironment`.\npublic let environmentHash: String\n/// Resolved nodes keyed by node ID.\npublic let nodes: [NodeId: ResolvedNode]\n/// Edges from the original brew.\npublic let edges: Set<BrewEdge>\n/// Topologically sorted execution order.\npublic let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let brewVersion: BrewVersion",
              "line": 248,
              "signature": "public let brewVersion: BrewVersion\n/// ISO 8601 timestamp of when resolution occurred.\npublic let resolvedAt: String\n/// SHA-256 hash of the serialized `BrewEnvironment`.\npublic let environmentHash: String\n/// Resolved nodes keyed by node ID.\npublic let nodes: [NodeId: ResolvedNode]\n/// Edges from the original brew.\npublic let edges: Set<BrewEdge>\n/// Topologically sorted execution order.\npublic let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let resolvedAt: String",
              "line": 250,
              "signature": "public let resolvedAt: String\n/// SHA-256 hash of the serialized `BrewEnvironment`.\npublic let environmentHash: String\n/// Resolved nodes keyed by node ID.\npublic let nodes: [NodeId: ResolvedNode]\n/// Edges from the original brew.\npublic let edges: Set<BrewEdge>\n/// Topologically sorted execution order.\npublic let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let environmentHash: String",
              "line": 252,
              "signature": "public let environmentHash: String\n/// Resolved nodes keyed by node ID.\npublic let nodes: [NodeId: ResolvedNode]\n/// Edges from the original brew.\npublic let edges: Set<BrewEdge>\n/// Topologically sorted execution order.\npublic let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let nodes: [NodeId: ResolvedNode]",
              "line": 254,
              "signature": "public let nodes: [NodeId: ResolvedNode]\n/// Edges from the original brew.\npublic let edges: Set<BrewEdge>\n/// Topologically sorted execution order.\npublic let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let edges: Set<BrewEdge>",
              "line": 256,
              "signature": "public let edges: Set<BrewEdge>\n/// Topologically sorted execution order.\npublic let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let executionOrder: [NodeId]",
              "line": 258,
              "signature": "public let executionOrder: [NodeId]\n/// Entry nodes from the original brew.\npublic let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let entryNodes: [NodeId]",
              "line": 260,
              "signature": "public let entryNodes: [NodeId]\n/// Exit nodes from the original brew.\npublic let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let exitNodes: [NodeId]",
              "line": 262,
              "signature": "public let exitNodes: [NodeId]\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 276,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 291,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public func resolveBrew(_ brew: Brew, environment: BrewEnvironment) throws -> ResolvedBrewPlan",
              "line": 344,
              "signature": "public func resolveBrew(_ brew: Brew, environment: BrewEnvironment) throws -> ResolvedBrewPlan",
              "documentation": ""
            },
            {
              "name": "public struct BrewResolutionErrors: Error, Sendable",
              "line": 383,
              "signature": "public struct BrewResolutionErrors: Error, Sendable",
              "documentation": ""
            },
            {
              "name": "public let errors: [BrewResolutionError]",
              "line": 385,
              "signature": "public let errors: [BrewResolutionError]\n}\n\nextension BrewResolutionErrors: LocalizedError",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 389,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Config.swift",
          "sha256": "585aeb82c6b2cfb39edbc5099f6b22a995b84759e2f3343c134db204b9b44644",
          "artifactSha256": "7a44e6fe4ea2e5b4ed867f4dc63652991deb8d93f5dbb555d4359906683c7b4b",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Config.swift.txt",
          "declarations": [
            {
              "name": "public struct GenerateOptions: Codable, Sendable, Equatable",
              "line": 25,
              "signature": "public struct GenerateOptions: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var temperature: Double?",
              "line": 27,
              "signature": "public var temperature: Double?\n/// Maximum tokens to generate.\npublic var maxTokens: Int?\n/// Top-p (nucleus) sampling threshold.\npublic var topP: Double?\n/// Stop sequences -- generation stops when any of these are produced.\npublic var stopSequences: [String]?\n/// Frequency penalty (-2.0 to 2.0).\npublic var frequencyPenalty: Double?\n/// Presence penalty (-2.0 to 2.0).\npublic var presencePenalty: Double?\n/// Seed for deterministic generation (if supported by provider).\npublic var seed: Int?\n/// JSON schema for structured output enforcement.\npublic var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public var maxTokens: Int?",
              "line": 29,
              "signature": "public var maxTokens: Int?\n/// Top-p (nucleus) sampling threshold.\npublic var topP: Double?\n/// Stop sequences -- generation stops when any of these are produced.\npublic var stopSequences: [String]?\n/// Frequency penalty (-2.0 to 2.0).\npublic var frequencyPenalty: Double?\n/// Presence penalty (-2.0 to 2.0).\npublic var presencePenalty: Double?\n/// Seed for deterministic generation (if supported by provider).\npublic var seed: Int?\n/// JSON schema for structured output enforcement.\npublic var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public var topP: Double?",
              "line": 31,
              "signature": "public var topP: Double?\n/// Stop sequences -- generation stops when any of these are produced.\npublic var stopSequences: [String]?\n/// Frequency penalty (-2.0 to 2.0).\npublic var frequencyPenalty: Double?\n/// Presence penalty (-2.0 to 2.0).\npublic var presencePenalty: Double?\n/// Seed for deterministic generation (if supported by provider).\npublic var seed: Int?\n/// JSON schema for structured output enforcement.\npublic var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public var stopSequences: [String]?",
              "line": 33,
              "signature": "public var stopSequences: [String]?\n/// Frequency penalty (-2.0 to 2.0).\npublic var frequencyPenalty: Double?\n/// Presence penalty (-2.0 to 2.0).\npublic var presencePenalty: Double?\n/// Seed for deterministic generation (if supported by provider).\npublic var seed: Int?\n/// JSON schema for structured output enforcement.\npublic var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public var frequencyPenalty: Double?",
              "line": 35,
              "signature": "public var frequencyPenalty: Double?\n/// Presence penalty (-2.0 to 2.0).\npublic var presencePenalty: Double?\n/// Seed for deterministic generation (if supported by provider).\npublic var seed: Int?\n/// JSON schema for structured output enforcement.\npublic var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public var presencePenalty: Double?",
              "line": 37,
              "signature": "public var presencePenalty: Double?\n/// Seed for deterministic generation (if supported by provider).\npublic var seed: Int?\n/// JSON schema for structured output enforcement.\npublic var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public var seed: Int?",
              "line": 39,
              "signature": "public var seed: Int?\n/// JSON schema for structured output enforcement.\npublic var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public var outputSchema: JsonSchema?",
              "line": 41,
              "signature": "public var outputSchema: JsonSchema?\n\n/// Creates default generate options with all fields nil.\npublic init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 44,
              "signature": "public init(\ntemperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public func withTemperature(_ temperature: Double) -> GenerateOptions",
              "line": 68,
              "signature": "public func withTemperature(_ temperature: Double) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public func withMaxTokens(_ maxTokens: Int) -> GenerateOptions",
              "line": 78,
              "signature": "public func withMaxTokens(_ maxTokens: Int) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public func withTopP(_ topP: Double) -> GenerateOptions",
              "line": 88,
              "signature": "public func withTopP(_ topP: Double) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public func withStopSequences(_ sequences: [String]) -> GenerateOptions",
              "line": 98,
              "signature": "public func withStopSequences(_ sequences: [String]) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public func withFrequencyPenalty(_ penalty: Double) -> GenerateOptions",
              "line": 108,
              "signature": "public func withFrequencyPenalty(_ penalty: Double) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public func withPresencePenalty(_ penalty: Double) -> GenerateOptions",
              "line": 118,
              "signature": "public func withPresencePenalty(_ penalty: Double) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public func withSeed(_ seed: Int) -> GenerateOptions",
              "line": 128,
              "signature": "public func withSeed(_ seed: Int) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public func withOutputSchema(_ schema: JsonSchema) -> GenerateOptions",
              "line": 138,
              "signature": "public func withOutputSchema(_ schema: JsonSchema) -> GenerateOptions",
              "documentation": ""
            },
            {
              "name": "public struct EmbedOptions: Codable, Sendable, Equatable",
              "line": 148,
              "signature": "public struct EmbedOptions: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var model: String?",
              "line": 150,
              "signature": "public var model: String?\n/// Dimensionality of the output embeddings (if configurable).\npublic var dimensions: Int?\n\n/// Creates default embed options.\npublic init(model: String?;",
              "documentation": ""
            },
            {
              "name": "public var dimensions: Int?",
              "line": 152,
              "signature": "public var dimensions: Int?\n\n/// Creates default embed options.\npublic init(model: String?;",
              "documentation": ""
            },
            {
              "name": "public init(model: String?;",
              "line": 155,
              "signature": "public init(model: String?;",
              "documentation": ""
            },
            {
              "name": "public func withModel(_ model: String) -> EmbedOptions",
              "line": 164,
              "signature": "public func withModel(_ model: String) -> EmbedOptions",
              "documentation": ""
            },
            {
              "name": "public func withDimensions(_ dimensions: Int) -> EmbedOptions",
              "line": 174,
              "signature": "public func withDimensions(_ dimensions: Int) -> EmbedOptions",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Error.swift",
          "sha256": "d38896eb891e40a473424300b4a5ff2d3eded84552346c1263dfdf7c1383c37f",
          "artifactSha256": "8650ca59b0dc9c3e3e6ac335b135df09db099d73aa864ead0688eeac67ba550c",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Error.swift.txt",
          "declarations": [
            {
              "name": "public enum ForgeError: Error, Sendable, Equatable",
              "line": 20,
              "signature": "public enum ForgeError: Error, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 86,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Message.swift",
          "sha256": "49a7a4d70356de9d72adaa7eb930e4fc675c63d7ca4d1e9c7b69c8b59da4461d",
          "artifactSha256": "4e0d51f67748d4d39c03e954a13c0f8b617be08ffa7b728bb917c061cc06510d",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Message.swift.txt",
          "declarations": [
            {
              "name": "public enum Role: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 24,
              "signature": "public enum Role: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 36,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public enum MessagePart: Sendable, Equatable",
              "line": 47,
              "signature": "public enum MessagePart: Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var isToolCall: Bool",
              "line": 60,
              "signature": "public var isToolCall: Bool",
              "documentation": ""
            },
            {
              "name": "public var isToolResult: Bool",
              "line": 66,
              "signature": "public var isToolResult: Bool",
              "documentation": ""
            },
            {
              "name": "public var asText: String?",
              "line": 74,
              "signature": "public var asText: String?",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 89,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 121,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public struct ModelMessage: Codable, Sendable, Equatable",
              "line": 154,
              "signature": "public struct ModelMessage: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let role: Role",
              "line": 156,
              "signature": "public let role: Role\n/// One or more content parts.\npublic var parts: [MessagePart]\n\n/// Creates a new message with the given role and content parts.\n///\n/// - Parameters:\n///   - role: The message participant role.\n///   - parts: One or more content parts.\npublic init(role: Role, parts: [MessagePart])",
              "documentation": ""
            },
            {
              "name": "public var parts: [MessagePart]",
              "line": 158,
              "signature": "public var parts: [MessagePart]\n\n/// Creates a new message with the given role and content parts.\n///\n/// - Parameters:\n///   - role: The message participant role.\n///   - parts: One or more content parts.\npublic init(role: Role, parts: [MessagePart])",
              "documentation": ""
            },
            {
              "name": "public init(role: Role, parts: [MessagePart])",
              "line": 165,
              "signature": "public init(role: Role, parts: [MessagePart])",
              "documentation": ""
            },
            {
              "name": "public static func text(_ role: Role, _ text: String) -> ModelMessage",
              "line": 177,
              "signature": "public static func text(_ role: Role, _ text: String) -> ModelMessage",
              "documentation": ""
            },
            {
              "name": "public func toolCalls() -> [MessagePart]",
              "line": 184,
              "signature": "public func toolCalls() -> [MessagePart]",
              "documentation": ""
            },
            {
              "name": "public func textContent() -> String",
              "line": 193,
              "signature": "public func textContent() -> String",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Model.swift",
          "sha256": "da8b66acadd73c22991e70e0de0718ce2ab99a96df6b3ebe98ddfdec34423909",
          "artifactSha256": "a0aaf5fff5ba2ae03221642558224afd2e1c407de6b0be14510dd2749a648dcd",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Model.swift.txt",
          "declarations": [
            {
              "name": "public protocol LanguageModel: Sendable",
              "line": 25,
              "signature": "public protocol LanguageModel: Sendable",
              "documentation": ""
            },
            {
              "name": "public var supportsToolCalling: Bool",
              "line": 77,
              "signature": "public var supportsToolCalling: Bool",
              "documentation": ""
            },
            {
              "name": "public var supportsStructuredOutput: Bool",
              "line": 78,
              "signature": "public var supportsStructuredOutput: Bool",
              "documentation": ""
            },
            {
              "name": "public var supportsImageInput: Bool",
              "line": 79,
              "signature": "public var supportsImageInput: Bool",
              "documentation": ""
            },
            {
              "name": "public var supportsStreaming: Bool",
              "line": 80,
              "signature": "public var supportsStreaming: Bool",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Output.swift",
          "sha256": "a5595119f48983130b5e670719717f943a078153e633e849a3bc257a3a3c9bb1",
          "artifactSha256": "3ea15d9b10503099e74a52871331e3f97c0c78cd596846610d8761e4f28e3e6f",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Output.swift.txt",
          "declarations": [
            {
              "name": "public enum FinishReason: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 16,
              "signature": "public enum FinishReason: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public var isComplete: Bool",
              "line": 33,
              "signature": "public var isComplete: Bool",
              "documentation": ""
            },
            {
              "name": "public var isToolCall: Bool",
              "line": 38,
              "signature": "public var isToolCall: Bool",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 44,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct Usage: Codable, Sendable, Equatable",
              "line": 50,
              "signature": "public struct Usage: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let promptTokens: Int",
              "line": 52,
              "signature": "public let promptTokens: Int\n/// Tokens generated in the response.\npublic let completionTokens: Int\n/// Total tokens (prompt + completion).\npublic let totalTokens: Int\n\npublic init(promptTokens: Int, completionTokens: Int, totalTokens: Int)",
              "documentation": ""
            },
            {
              "name": "public let completionTokens: Int",
              "line": 54,
              "signature": "public let completionTokens: Int\n/// Total tokens (prompt + completion).\npublic let totalTokens: Int\n\npublic init(promptTokens: Int, completionTokens: Int, totalTokens: Int)",
              "documentation": ""
            },
            {
              "name": "public let totalTokens: Int",
              "line": 56,
              "signature": "public let totalTokens: Int\n\npublic init(promptTokens: Int, completionTokens: Int, totalTokens: Int)",
              "documentation": ""
            },
            {
              "name": "public init(promptTokens: Int, completionTokens: Int, totalTokens: Int)",
              "line": 58,
              "signature": "public init(promptTokens: Int, completionTokens: Int, totalTokens: Int)",
              "documentation": ""
            },
            {
              "name": "public static func zero() -> Usage",
              "line": 65,
              "signature": "public static func zero() -> Usage",
              "documentation": ""
            },
            {
              "name": "public func adding(_ other: Usage) -> Usage",
              "line": 73,
              "signature": "public func adding(_ other: Usage) -> Usage",
              "documentation": ""
            },
            {
              "name": "public struct GenerateResult: Sendable",
              "line": 88,
              "signature": "public struct GenerateResult: Sendable",
              "documentation": ""
            },
            {
              "name": "public let message: ModelMessage",
              "line": 90,
              "signature": "public let message: ModelMessage\n/// Why generation stopped.\npublic let finishReason: FinishReason\n/// Token usage statistics.\npublic let usage: Usage\n\npublic init(message: ModelMessage, finishReason: FinishReason, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public let finishReason: FinishReason",
              "line": 92,
              "signature": "public let finishReason: FinishReason\n/// Token usage statistics.\npublic let usage: Usage\n\npublic init(message: ModelMessage, finishReason: FinishReason, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public let usage: Usage",
              "line": 94,
              "signature": "public let usage: Usage\n\npublic init(message: ModelMessage, finishReason: FinishReason, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public init(message: ModelMessage, finishReason: FinishReason, usage: Usage)",
              "line": 96,
              "signature": "public init(message: ModelMessage, finishReason: FinishReason, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public var text: String",
              "line": 103,
              "signature": "public var text: String",
              "documentation": ""
            },
            {
              "name": "public var hasToolCalls: Bool",
              "line": 108,
              "signature": "public var hasToolCalls: Bool",
              "documentation": ""
            },
            {
              "name": "public enum StreamChunk: Sendable, Equatable",
              "line": 119,
              "signature": "public enum StreamChunk: Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public static func text(_ text: String) -> StreamChunk",
              "line": 133,
              "signature": "public static func text(_ text: String) -> StreamChunk",
              "documentation": ""
            },
            {
              "name": "public var isTextDelta: Bool",
              "line": 138,
              "signature": "public var isTextDelta: Bool",
              "documentation": ""
            },
            {
              "name": "public var isDone: Bool",
              "line": 144,
              "signature": "public var isDone: Bool",
              "documentation": ""
            },
            {
              "name": "public var asText: String?",
              "line": 150,
              "signature": "public var asText: String?",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 161,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 188,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Provider.swift",
          "sha256": "74a2d6d36da0307a4808db60e16cfd537250ac8a2ef035765146ef4da67b117d",
          "artifactSha256": "c033f77a933002d5168f2d47e6e8c902de391737c606cc6704af9f64a904e219",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Provider.swift.txt",
          "declarations": [
            {
              "name": "public struct ProviderRef: Codable, Sendable, Hashable, Equatable",
              "line": 23,
              "signature": "public struct ProviderRef: Codable, Sendable, Hashable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let namespace: String",
              "line": 25,
              "signature": "public let namespace: String\n/// The model name (e.g., \"gpt-4o\").\npublic let model: String\n/// The full reference string (e.g., \"openai:gpt-4o\").\npublic let full: String\n\n/// Parses a provider reference string.\n///\n/// - Parameter input: A string in `namespace:model` format.\n/// - Returns: The parsed `ProviderRef`.\n/// - Throws: `ForgeError.invalidProviderRef` if the input does not contain\n///   exactly one colon separator, or if either part is empty.\npublic static func parse(_ input: String) throws -> ProviderRef",
              "documentation": ""
            },
            {
              "name": "public let model: String",
              "line": 27,
              "signature": "public let model: String\n/// The full reference string (e.g., \"openai:gpt-4o\").\npublic let full: String\n\n/// Parses a provider reference string.\n///\n/// - Parameter input: A string in `namespace:model` format.\n/// - Returns: The parsed `ProviderRef`.\n/// - Throws: `ForgeError.invalidProviderRef` if the input does not contain\n///   exactly one colon separator, or if either part is empty.\npublic static func parse(_ input: String) throws -> ProviderRef",
              "documentation": ""
            },
            {
              "name": "public let full: String",
              "line": 29,
              "signature": "public let full: String\n\n/// Parses a provider reference string.\n///\n/// - Parameter input: A string in `namespace:model` format.\n/// - Returns: The parsed `ProviderRef`.\n/// - Throws: `ForgeError.invalidProviderRef` if the input does not contain\n///   exactly one colon separator, or if either part is empty.\npublic static func parse(_ input: String) throws -> ProviderRef",
              "documentation": ""
            },
            {
              "name": "public static func parse(_ input: String) throws -> ProviderRef",
              "line": 37,
              "signature": "public static func parse(_ input: String) throws -> ProviderRef",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 47,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct ProviderMetadata: Codable, Sendable",
              "line": 53,
              "signature": "public struct ProviderMetadata: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 55,
              "signature": "public let name: String\n/// Provider namespace (e.g., \"openai\").\npublic let namespace: String\n/// Whether the provider supports tool calling.\npublic let supportsToolCalling: Bool\n/// Whether the provider supports structured output.\npublic let supportsStructuredOutput: Bool\n/// Whether the provider supports streaming.\npublic let supportsStreaming: Bool\n/// Whether the provider supports image input.\npublic let supportsImageInput: Bool\n/// Provider-session runtime capabilities for coding-style integrations.\npublic let runtimeCapabilities: ProviderRuntimeCapabilities\n\npublic init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let namespace: String",
              "line": 57,
              "signature": "public let namespace: String\n/// Whether the provider supports tool calling.\npublic let supportsToolCalling: Bool\n/// Whether the provider supports structured output.\npublic let supportsStructuredOutput: Bool\n/// Whether the provider supports streaming.\npublic let supportsStreaming: Bool\n/// Whether the provider supports image input.\npublic let supportsImageInput: Bool\n/// Provider-session runtime capabilities for coding-style integrations.\npublic let runtimeCapabilities: ProviderRuntimeCapabilities\n\npublic init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let supportsToolCalling: Bool",
              "line": 59,
              "signature": "public let supportsToolCalling: Bool\n/// Whether the provider supports structured output.\npublic let supportsStructuredOutput: Bool\n/// Whether the provider supports streaming.\npublic let supportsStreaming: Bool\n/// Whether the provider supports image input.\npublic let supportsImageInput: Bool\n/// Provider-session runtime capabilities for coding-style integrations.\npublic let runtimeCapabilities: ProviderRuntimeCapabilities\n\npublic init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let supportsStructuredOutput: Bool",
              "line": 61,
              "signature": "public let supportsStructuredOutput: Bool\n/// Whether the provider supports streaming.\npublic let supportsStreaming: Bool\n/// Whether the provider supports image input.\npublic let supportsImageInput: Bool\n/// Provider-session runtime capabilities for coding-style integrations.\npublic let runtimeCapabilities: ProviderRuntimeCapabilities\n\npublic init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let supportsStreaming: Bool",
              "line": 63,
              "signature": "public let supportsStreaming: Bool\n/// Whether the provider supports image input.\npublic let supportsImageInput: Bool\n/// Provider-session runtime capabilities for coding-style integrations.\npublic let runtimeCapabilities: ProviderRuntimeCapabilities\n\npublic init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let supportsImageInput: Bool",
              "line": 65,
              "signature": "public let supportsImageInput: Bool\n/// Provider-session runtime capabilities for coding-style integrations.\npublic let runtimeCapabilities: ProviderRuntimeCapabilities\n\npublic init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let runtimeCapabilities: ProviderRuntimeCapabilities",
              "line": 67,
              "signature": "public let runtimeCapabilities: ProviderRuntimeCapabilities\n\npublic init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 69,
              "signature": "public init(\nname: String,\nnamespace: String,\nsupportsToolCalling: Bool,\nsupportsStructuredOutput: Bool,\nsupportsStreaming: Bool,\nsupportsImageInput: Bool,\nruntimeCapabilities: ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public enum RuntimeCapability: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 89,
              "signature": "public enum RuntimeCapability: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct ProviderRuntimeCapabilities: Codable, Sendable, Equatable",
              "line": 103,
              "signature": "public struct ProviderRuntimeCapabilities: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let baselineContract: Bool",
              "line": 104,
              "signature": "public let baselineContract: Bool\npublic let capabilities: Set<RuntimeCapability>\n\npublic init(\nbaselineContract: Bool;",
              "documentation": ""
            },
            {
              "name": "public let capabilities: Set<RuntimeCapability>",
              "line": 105,
              "signature": "public let capabilities: Set<RuntimeCapability>\n\npublic init(\nbaselineContract: Bool;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 107,
              "signature": "public init(\nbaselineContract: Bool;",
              "documentation": ""
            },
            {
              "name": "public static func baseline() -> ProviderRuntimeCapabilities",
              "line": 115,
              "signature": "public static func baseline() -> ProviderRuntimeCapabilities",
              "documentation": ""
            },
            {
              "name": "public func withCapability(_ capability: RuntimeCapability) -> ProviderRuntimeCapabilities",
              "line": 119,
              "signature": "public func withCapability(_ capability: RuntimeCapability) -> ProviderRuntimeCapabilities",
              "documentation": ""
            },
            {
              "name": "public func supports(_ capability: RuntimeCapability) -> Bool",
              "line": 128,
              "signature": "public func supports(_ capability: RuntimeCapability) -> Bool",
              "documentation": ""
            },
            {
              "name": "public struct ProviderNegotiationRequest: Codable, Sendable, Equatable",
              "line": 133,
              "signature": "public struct ProviderNegotiationRequest: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let providerRef: String",
              "line": 134,
              "signature": "public let providerRef: String\npublic let requireBaselineContract: Bool\npublic let requiredCapabilities: [RuntimeCapability]\n\npublic init(\nproviderRef: String,\nrequireBaselineContract: Bool,\nrequiredCapabilities: [RuntimeCapability]\n)",
              "documentation": ""
            },
            {
              "name": "public let requireBaselineContract: Bool",
              "line": 135,
              "signature": "public let requireBaselineContract: Bool\npublic let requiredCapabilities: [RuntimeCapability]\n\npublic init(\nproviderRef: String,\nrequireBaselineContract: Bool,\nrequiredCapabilities: [RuntimeCapability]\n)",
              "documentation": ""
            },
            {
              "name": "public let requiredCapabilities: [RuntimeCapability]",
              "line": 136,
              "signature": "public let requiredCapabilities: [RuntimeCapability]\n\npublic init(\nproviderRef: String,\nrequireBaselineContract: Bool,\nrequiredCapabilities: [RuntimeCapability]\n)",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 138,
              "signature": "public init(\nproviderRef: String,\nrequireBaselineContract: Bool,\nrequiredCapabilities: [RuntimeCapability]\n)",
              "documentation": ""
            },
            {
              "name": "public struct ProviderNegotiationResult: Codable, Sendable, Equatable",
              "line": 149,
              "signature": "public struct ProviderNegotiationResult: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let providerRef: String",
              "line": 150,
              "signature": "public let providerRef: String\npublic let baselineContract: Bool\npublic let negotiatedCapabilities: [RuntimeCapability]\n}\n\npublic enum ProviderSessionState: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public let baselineContract: Bool",
              "line": 151,
              "signature": "public let baselineContract: Bool\npublic let negotiatedCapabilities: [RuntimeCapability]\n}\n\npublic enum ProviderSessionState: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public let negotiatedCapabilities: [RuntimeCapability]",
              "line": 152,
              "signature": "public let negotiatedCapabilities: [RuntimeCapability]\n}\n\npublic enum ProviderSessionState: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public enum ProviderSessionState: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 155,
              "signature": "public enum ProviderSessionState: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct ProviderUsageSummary: Codable, Sendable, Equatable",
              "line": 167,
              "signature": "public struct ProviderUsageSummary: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let inputTokens: UInt64",
              "line": 168,
              "signature": "public let inputTokens: UInt64\npublic let outputTokens: UInt64\npublic let totalTokens: UInt64\n\npublic init(inputTokens: UInt64;",
              "documentation": ""
            },
            {
              "name": "public let outputTokens: UInt64",
              "line": 169,
              "signature": "public let outputTokens: UInt64\npublic let totalTokens: UInt64\n\npublic init(inputTokens: UInt64;",
              "documentation": ""
            },
            {
              "name": "public let totalTokens: UInt64",
              "line": 170,
              "signature": "public let totalTokens: UInt64\n\npublic init(inputTokens: UInt64;",
              "documentation": ""
            },
            {
              "name": "public init(inputTokens: UInt64;",
              "line": 172,
              "signature": "public init(inputTokens: UInt64;",
              "documentation": ""
            },
            {
              "name": "public struct ProviderSessionEvent: Codable, Sendable, Equatable",
              "line": 179,
              "signature": "public struct ProviderSessionEvent: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let sessionId: String",
              "line": 180,
              "signature": "public let sessionId: String\npublic let state: ProviderSessionState\npublic let message: String?\npublic let usage: ProviderUsageSummary?\n\npublic init(\nsessionId: String,\nstate: ProviderSessionState,\nmessage: String?;",
              "documentation": ""
            },
            {
              "name": "public let state: ProviderSessionState",
              "line": 181,
              "signature": "public let state: ProviderSessionState\npublic let message: String?\npublic let usage: ProviderUsageSummary?\n\npublic init(\nsessionId: String,\nstate: ProviderSessionState,\nmessage: String?;",
              "documentation": ""
            },
            {
              "name": "public let message: String?",
              "line": 182,
              "signature": "public let message: String?\npublic let usage: ProviderUsageSummary?\n\npublic init(\nsessionId: String,\nstate: ProviderSessionState,\nmessage: String?;",
              "documentation": ""
            },
            {
              "name": "public let usage: ProviderUsageSummary?",
              "line": 183,
              "signature": "public let usage: ProviderUsageSummary?\n\npublic init(\nsessionId: String,\nstate: ProviderSessionState,\nmessage: String?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 185,
              "signature": "public init(\nsessionId: String,\nstate: ProviderSessionState,\nmessage: String?;",
              "documentation": ""
            },
            {
              "name": "public final class ProviderRegistry: @unchecked Sendable",
              "line": 207,
              "signature": "public final class ProviderRegistry: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 213,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func register(_ providerRef: String, model: any LanguageModel) throws",
              "line": 221,
              "signature": "public func register(_ providerRef: String, model: any LanguageModel) throws",
              "documentation": ""
            },
            {
              "name": "public func registerWithRuntime(",
              "line": 230,
              "signature": "public func registerWithRuntime(\n_ providerRef: String,\nmodel: any LanguageModel,\nruntimeCapabilities: ProviderRuntimeCapabilities\n) throws",
              "documentation": ""
            },
            {
              "name": "public func get(_ providerRef: String) -> (any LanguageModel)?",
              "line": 255,
              "signature": "public func get(_ providerRef: String) -> (any LanguageModel)?",
              "documentation": ""
            },
            {
              "name": "public func require(_ providerRef: String) throws -> any LanguageModel",
              "line": 266,
              "signature": "public func require(_ providerRef: String) throws -> any LanguageModel",
              "documentation": ""
            },
            {
              "name": "public func getMetadata(_ providerRef: String) -> ProviderMetadata?",
              "line": 277,
              "signature": "public func getMetadata(_ providerRef: String) -> ProviderMetadata?",
              "documentation": ""
            },
            {
              "name": "public func list() -> [String]",
              "line": 286,
              "signature": "public func list() -> [String]",
              "documentation": ""
            },
            {
              "name": "public var count: Int",
              "line": 293,
              "signature": "public var count: Int",
              "documentation": ""
            },
            {
              "name": "public var isEmpty: Bool",
              "line": 300,
              "signature": "public var isEmpty: Bool",
              "documentation": ""
            },
            {
              "name": "public func negotiate(",
              "line": 307,
              "signature": "public func negotiate(\n_ request: ProviderNegotiationRequest\n) throws -> ProviderNegotiationResult",
              "documentation": ""
            },
            {
              "name": "public enum ProviderFamily: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 340,
              "signature": "public enum ProviderFamily: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public enum AuthStrategy: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 346,
              "signature": "public enum AuthStrategy: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct ProviderPreset: Codable, Sendable, Equatable",
              "line": 354,
              "signature": "public struct ProviderPreset: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let namespace: String",
              "line": 355,
              "signature": "public let namespace: String\npublic let family: ProviderFamily\npublic let authStrategy: AuthStrategy\n\npublic init(namespace: String, family: ProviderFamily, authStrategy: AuthStrategy)",
              "documentation": ""
            },
            {
              "name": "public let family: ProviderFamily",
              "line": 356,
              "signature": "public let family: ProviderFamily\npublic let authStrategy: AuthStrategy\n\npublic init(namespace: String, family: ProviderFamily, authStrategy: AuthStrategy)",
              "documentation": ""
            },
            {
              "name": "public let authStrategy: AuthStrategy",
              "line": 357,
              "signature": "public let authStrategy: AuthStrategy\n\npublic init(namespace: String, family: ProviderFamily, authStrategy: AuthStrategy)",
              "documentation": ""
            },
            {
              "name": "public init(namespace: String, family: ProviderFamily, authStrategy: AuthStrategy)",
              "line": 359,
              "signature": "public init(namespace: String, family: ProviderFamily, authStrategy: AuthStrategy)",
              "documentation": ""
            },
            {
              "name": "public typealias ProviderEnvironment;",
              "line": 366,
              "signature": "public typealias ProviderEnvironment;",
              "documentation": ""
            },
            {
              "name": "public typealias ProviderGenerateHandler;",
              "line": 367,
              "signature": "public typealias ProviderGenerateHandler;",
              "documentation": ""
            },
            {
              "name": "public typealias ProviderStreamHandler;",
              "line": 368,
              "signature": "public typealias ProviderStreamHandler;",
              "documentation": ""
            },
            {
              "name": "public struct ProviderExecutionRequest: Sendable",
              "line": 370,
              "signature": "public struct ProviderExecutionRequest: Sendable",
              "documentation": ""
            },
            {
              "name": "public let providerRef: String",
              "line": 371,
              "signature": "public let providerRef: String\npublic let namespace: String\npublic let modelId: String\npublic let family: ProviderFamily\npublic let authStrategy: AuthStrategy\npublic let credential: String\npublic let baseURL: String?\npublic let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let namespace: String",
              "line": 372,
              "signature": "public let namespace: String\npublic let modelId: String\npublic let family: ProviderFamily\npublic let authStrategy: AuthStrategy\npublic let credential: String\npublic let baseURL: String?\npublic let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let modelId: String",
              "line": 373,
              "signature": "public let modelId: String\npublic let family: ProviderFamily\npublic let authStrategy: AuthStrategy\npublic let credential: String\npublic let baseURL: String?\npublic let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let family: ProviderFamily",
              "line": 374,
              "signature": "public let family: ProviderFamily\npublic let authStrategy: AuthStrategy\npublic let credential: String\npublic let baseURL: String?\npublic let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let authStrategy: AuthStrategy",
              "line": 375,
              "signature": "public let authStrategy: AuthStrategy\npublic let credential: String\npublic let baseURL: String?\npublic let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let credential: String",
              "line": 376,
              "signature": "public let credential: String\npublic let baseURL: String?\npublic let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let baseURL: String?",
              "line": 377,
              "signature": "public let baseURL: String?\npublic let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let messages: [ModelMessage]",
              "line": 378,
              "signature": "public let messages: [ModelMessage]\npublic let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let tools: [ToolDefinition]",
              "line": 379,
              "signature": "public let tools: [ToolDefinition]\npublic let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public let options: GenerateOptions",
              "line": 380,
              "signature": "public let options: GenerateOptions\n\npublic init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 382,
              "signature": "public init(\nproviderRef: String,\nnamespace: String,\nmodelId: String,\nfamily: ProviderFamily,\nauthStrategy: AuthStrategy,\ncredential: String,\nbaseURL: String?,\nmessages: [ModelMessage],\ntools: [ToolDefinition],\noptions: GenerateOptions\n)",
              "documentation": ""
            },
            {
              "name": "public struct ProviderInstallOptions: Sendable",
              "line": 407,
              "signature": "public struct ProviderInstallOptions: Sendable",
              "documentation": ""
            },
            {
              "name": "public let environment: ProviderEnvironment?",
              "line": 408,
              "signature": "public let environment: ProviderEnvironment?\npublic let generate: ProviderGenerateHandler?\npublic let stream: ProviderStreamHandler?\n\npublic init(\nenvironment: ProviderEnvironment?;",
              "documentation": ""
            },
            {
              "name": "public let generate: ProviderGenerateHandler?",
              "line": 409,
              "signature": "public let generate: ProviderGenerateHandler?\npublic let stream: ProviderStreamHandler?\n\npublic init(\nenvironment: ProviderEnvironment?;",
              "documentation": ""
            },
            {
              "name": "public let stream: ProviderStreamHandler?",
              "line": 410,
              "signature": "public let stream: ProviderStreamHandler?\n\npublic init(\nenvironment: ProviderEnvironment?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 412,
              "signature": "public init(\nenvironment: ProviderEnvironment?;",
              "documentation": ""
            },
            {
              "name": "public func approvedCodingProviderPresets() -> [ProviderPreset]",
              "line": 474,
              "signature": "public func approvedCodingProviderPresets() -> [ProviderPreset]",
              "documentation": ""
            },
            {
              "name": "public func approvedDirectProviderPresets() -> [ProviderPreset]",
              "line": 484,
              "signature": "public func approvedDirectProviderPresets() -> [ProviderPreset]",
              "documentation": ""
            },
            {
              "name": "public func approvedGatewayProviderPresets() -> [ProviderPreset]",
              "line": 502,
              "signature": "public func approvedGatewayProviderPresets() -> [ProviderPreset]",
              "documentation": ""
            },
            {
              "name": "public func registerOfficialCodingProviders(",
              "line": 512,
              "signature": "public func registerOfficialCodingProviders(\n_ registry: ProviderRegistry,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerDefaultCoreDirectProviders(",
              "line": 643,
              "signature": "public func registerDefaultCoreDirectProviders(\n_ registry: ProviderRegistry,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerOpenAiModel(",
              "line": 655,
              "signature": "public func registerOpenAiModel(\n_ registry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerAnthropicModel(",
              "line": 683,
              "signature": "public func registerAnthropicModel(\n_ registry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerGoogleModel(",
              "line": 711,
              "signature": "public func registerGoogleModel(\n_ registry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerXaiModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 739,
              "signature": "public func registerXaiModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerDeepSeekModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 744,
              "signature": "public func registerDeepSeekModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerMistralModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 749,
              "signature": "public func registerMistralModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerCohereModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 754,
              "signature": "public func registerCohereModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerGroqModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 759,
              "signature": "public func registerGroqModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerMoonshotModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 764,
              "signature": "public func registerMoonshotModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerZaiModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 769,
              "signature": "public func registerZaiModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerMiniMaxModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 774,
              "signature": "public func registerMiniMaxModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerOpenRouterModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 779,
              "signature": "public func registerOpenRouterModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerBedrockModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 784,
              "signature": "public func registerBedrockModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerVertexAiModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 808,
              "signature": "public func registerVertexAiModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerMicrosoftFoundryModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 832,
              "signature": "public func registerMicrosoftFoundryModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public func registerFoundryModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 856,
              "signature": "public func registerFoundryModel(_ registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Routing.swift",
          "sha256": "9c9235156e18c33ed42e76e41305698885f2b07fbb0df0c61f0c2d410d22e62c",
          "artifactSha256": "69da661c6e6d66efcefc72448b3d8473304b7f53611fd780bac849eb937f67ac",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Routing.swift.txt",
          "declarations": [
            {
              "name": "public enum TaskMode: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 20,
              "signature": "public enum TaskMode: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public var roleName: String",
              "line": 31,
              "signature": "public var roleName: String",
              "documentation": ""
            },
            {
              "name": "public enum ExecutionTopology: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 40,
              "signature": "public enum ExecutionTopology: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct RoutingContext: Codable, Sendable",
              "line": 57,
              "signature": "public struct RoutingContext: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var domain: String?",
              "line": 59,
              "signature": "public var domain: String?\n\n/// The task mode for this call.\npublic var taskMode: TaskMode?\n\n/// The execution topology for this call.\npublic var executionTopology: ExecutionTopology?\n\n/// Tool capabilities required for the model selected by this route.\npublic var toolRequirements: [String]\n\n/// Explicit role override. When set, the router returns the slot with\n/// this role name without applying strategy logic.\npublic var roleOverride: String?\n\npublic init(\ndomain: String?;",
              "documentation": ""
            },
            {
              "name": "public var taskMode: TaskMode?",
              "line": 62,
              "signature": "public var taskMode: TaskMode?\n\n/// The execution topology for this call.\npublic var executionTopology: ExecutionTopology?\n\n/// Tool capabilities required for the model selected by this route.\npublic var toolRequirements: [String]\n\n/// Explicit role override. When set, the router returns the slot with\n/// this role name without applying strategy logic.\npublic var roleOverride: String?\n\npublic init(\ndomain: String?;",
              "documentation": ""
            },
            {
              "name": "public var executionTopology: ExecutionTopology?",
              "line": 65,
              "signature": "public var executionTopology: ExecutionTopology?\n\n/// Tool capabilities required for the model selected by this route.\npublic var toolRequirements: [String]\n\n/// Explicit role override. When set, the router returns the slot with\n/// this role name without applying strategy logic.\npublic var roleOverride: String?\n\npublic init(\ndomain: String?;",
              "documentation": ""
            },
            {
              "name": "public var toolRequirements: [String]",
              "line": 68,
              "signature": "public var toolRequirements: [String]\n\n/// Explicit role override. When set, the router returns the slot with\n/// this role name without applying strategy logic.\npublic var roleOverride: String?\n\npublic init(\ndomain: String?;",
              "documentation": ""
            },
            {
              "name": "public var roleOverride: String?",
              "line": 72,
              "signature": "public var roleOverride: String?\n\npublic init(\ndomain: String?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 74,
              "signature": "public init(\ndomain: String?;",
              "documentation": ""
            },
            {
              "name": "public struct ModelCapabilities: Codable, Sendable",
              "line": 102,
              "signature": "public struct ModelCapabilities: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var textGeneration: Bool",
              "line": 104,
              "signature": "public var textGeneration: Bool\n/// Whether the model supports structured output (JSON mode).\npublic var structuredOutput: Bool\n/// Whether the model supports tool calling.\npublic var toolCalling: Bool\n/// Whether the model supports vision (image input).\npublic var vision: Bool\n/// Whether the model supports audio input/output.\npublic var audio: Bool\n/// Whether the model supports embedding generation.\npublic var embedding: Bool\n/// Maximum number of tokens in the context window.\npublic var maxContextTokens: UInt32\n/// Maximum number of tokens the model can generate in a single response.\npublic var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public var structuredOutput: Bool",
              "line": 106,
              "signature": "public var structuredOutput: Bool\n/// Whether the model supports tool calling.\npublic var toolCalling: Bool\n/// Whether the model supports vision (image input).\npublic var vision: Bool\n/// Whether the model supports audio input/output.\npublic var audio: Bool\n/// Whether the model supports embedding generation.\npublic var embedding: Bool\n/// Maximum number of tokens in the context window.\npublic var maxContextTokens: UInt32\n/// Maximum number of tokens the model can generate in a single response.\npublic var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public var toolCalling: Bool",
              "line": 108,
              "signature": "public var toolCalling: Bool\n/// Whether the model supports vision (image input).\npublic var vision: Bool\n/// Whether the model supports audio input/output.\npublic var audio: Bool\n/// Whether the model supports embedding generation.\npublic var embedding: Bool\n/// Maximum number of tokens in the context window.\npublic var maxContextTokens: UInt32\n/// Maximum number of tokens the model can generate in a single response.\npublic var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public var vision: Bool",
              "line": 110,
              "signature": "public var vision: Bool\n/// Whether the model supports audio input/output.\npublic var audio: Bool\n/// Whether the model supports embedding generation.\npublic var embedding: Bool\n/// Maximum number of tokens in the context window.\npublic var maxContextTokens: UInt32\n/// Maximum number of tokens the model can generate in a single response.\npublic var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public var audio: Bool",
              "line": 112,
              "signature": "public var audio: Bool\n/// Whether the model supports embedding generation.\npublic var embedding: Bool\n/// Maximum number of tokens in the context window.\npublic var maxContextTokens: UInt32\n/// Maximum number of tokens the model can generate in a single response.\npublic var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public var embedding: Bool",
              "line": 114,
              "signature": "public var embedding: Bool\n/// Maximum number of tokens in the context window.\npublic var maxContextTokens: UInt32\n/// Maximum number of tokens the model can generate in a single response.\npublic var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public var maxContextTokens: UInt32",
              "line": 116,
              "signature": "public var maxContextTokens: UInt32\n/// Maximum number of tokens the model can generate in a single response.\npublic var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public var maxOutputTokens: UInt32",
              "line": 118,
              "signature": "public var maxOutputTokens: UInt32\n\npublic init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 120,
              "signature": "public init(\ntextGeneration: Bool;",
              "documentation": ""
            },
            {
              "name": "public struct ResolvedRoute: Codable, Sendable",
              "line": 155,
              "signature": "public struct ResolvedRoute: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let slotRole: String",
              "line": 157,
              "signature": "public let slotRole: String\n\n/// The specific `ProviderRef` to use (primary or one of the fallbacks).\npublic let provider: ProviderRef\n\n/// The model capabilities of the selected provider.\npublic let modelCapabilities: ModelCapabilities\n\n/// Whether a fallback model was selected instead of the primary.\npublic let fallbackUsed: Bool\n\npublic init(\nslotRole: String,\nprovider: ProviderRef,\nmodelCapabilities: ModelCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let provider: ProviderRef",
              "line": 160,
              "signature": "public let provider: ProviderRef\n\n/// The model capabilities of the selected provider.\npublic let modelCapabilities: ModelCapabilities\n\n/// Whether a fallback model was selected instead of the primary.\npublic let fallbackUsed: Bool\n\npublic init(\nslotRole: String,\nprovider: ProviderRef,\nmodelCapabilities: ModelCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let modelCapabilities: ModelCapabilities",
              "line": 163,
              "signature": "public let modelCapabilities: ModelCapabilities\n\n/// Whether a fallback model was selected instead of the primary.\npublic let fallbackUsed: Bool\n\npublic init(\nslotRole: String,\nprovider: ProviderRef,\nmodelCapabilities: ModelCapabilities;",
              "documentation": ""
            },
            {
              "name": "public let fallbackUsed: Bool",
              "line": 166,
              "signature": "public let fallbackUsed: Bool\n\npublic init(\nslotRole: String,\nprovider: ProviderRef,\nmodelCapabilities: ModelCapabilities;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 168,
              "signature": "public init(\nslotRole: String,\nprovider: ProviderRef,\nmodelCapabilities: ModelCapabilities;",
              "documentation": ""
            },
            {
              "name": "public protocol ModelRouter: Sendable",
              "line": 196,
              "signature": "public protocol ModelRouter: Sendable",
              "documentation": ""
            },
            {
              "name": "public struct DefaultModelRouter: ModelRouter, Sendable",
              "line": 221,
              "signature": "public struct DefaultModelRouter: ModelRouter, Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String;",
              "line": 222,
              "signature": "public let name: String;",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 224,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func route(context: RoutingContext, topology: ModelTopology) throws -> ResolvedRoute",
              "line": 226,
              "signature": "public func route(context: RoutingContext, topology: ModelTopology) throws -> ResolvedRoute",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Schema.swift",
          "sha256": "0b69bdbdfce3ba40c7341620834693b5cf703866c59091a86f08f7ed436a6ed7",
          "artifactSha256": "324900e19b8075dac427d93bb2469346253d742be1b9c5cdba9e57ae7f93c83d",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Schema.swift.txt",
          "declarations": [
            {
              "name": "public enum SchemaType: String, Codable, Sendable, Hashable",
              "line": 16,
              "signature": "public enum SchemaType: String, Codable, Sendable, Hashable",
              "documentation": ""
            },
            {
              "name": "public struct JsonSchema: Codable, Sendable, Equatable",
              "line": 38,
              "signature": "public struct JsonSchema: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var schemaType: SchemaType",
              "line": 40,
              "signature": "public var schemaType: SchemaType\n\n/// Human-readable description of this schema element.\npublic var schemaDescription: String?\n\n/// Properties (for object type).\npublic var properties: [String: JsonSchema]?\n\n/// Required property names (for object type).\npublic var requiredFields: [String]?\n\n/// Whether additional properties are allowed (for object type).\npublic var additionalProperties: Bool?\n\n/// Items schema (for array type).\npublic var items: Box<JsonSchema>?\n\n/// Allowed values.\npublic var enumValues: [JSONValue]?\n\n/// Minimum numeric value.\npublic var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n",
              "documentation": ""
            },
            {
              "name": "public var schemaDescription: String?",
              "line": 43,
              "signature": "public var schemaDescription: String?\n\n/// Properties (for object type).\npublic var properties: [String: JsonSchema]?\n\n/// Required property names (for object type).\npublic var requiredFields: [String]?\n\n/// Whether additional properties are allowed (for object type).\npublic var additionalProperties: Bool?\n\n/// Items schema (for array type).\npublic var items: Box<JsonSchema>?\n\n/// Allowed values.\npublic var enumValues: [JSONValue]?\n\n/// Minimum numeric value.\npublic var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n",
              "documentation": ""
            },
            {
              "name": "public var properties: [String: JsonSchema]?",
              "line": 46,
              "signature": "public var properties: [String: JsonSchema]?\n\n/// Required property names (for object type).\npublic var requiredFields: [String]?\n\n/// Whether additional properties are allowed (for object type).\npublic var additionalProperties: Bool?\n\n/// Items schema (for array type).\npublic var items: Box<JsonSchema>?\n\n/// Allowed values.\npublic var enumValues: [JSONValue]?\n\n/// Minimum numeric value.\npublic var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n",
              "documentation": ""
            },
            {
              "name": "public var requiredFields: [String]?",
              "line": 49,
              "signature": "public var requiredFields: [String]?\n\n/// Whether additional properties are allowed (for object type).\npublic var additionalProperties: Bool?\n\n/// Items schema (for array type).\npublic var items: Box<JsonSchema>?\n\n/// Allowed values.\npublic var enumValues: [JSONValue]?\n\n/// Minimum numeric value.\npublic var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public var additionalProperties: Bool?",
              "line": 52,
              "signature": "public var additionalProperties: Bool?\n\n/// Items schema (for array type).\npublic var items: Box<JsonSchema>?\n\n/// Allowed values.\npublic var enumValues: [JSONValue]?\n\n/// Minimum numeric value.\npublic var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public var items: Box<JsonSchema>?",
              "line": 55,
              "signature": "public var items: Box<JsonSchema>?\n\n/// Allowed values.\npublic var enumValues: [JSONValue]?\n\n/// Minimum numeric value.\npublic var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public var enumValues: [JSONValue]?",
              "line": 58,
              "signature": "public var enumValues: [JSONValue]?\n\n/// Minimum numeric value.\npublic var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public var minimum: Double?",
              "line": 61,
              "signature": "public var minimum: Double?\n\n/// Maximum numeric value.\npublic var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public var maximum: Double?",
              "line": 64,
              "signature": "public var maximum: Double?\n\n/// Minimum string length.\npublic var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public var minLength: UInt64?",
              "line": 67,
              "signature": "public var minLength: UInt64?\n\n/// Maximum string length.\npublic var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public var maxLength: UInt64?",
              "line": 70,
              "signature": "public var maxLength: UInt64?\n\n// MARK: - CodingKeys\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public static func string() -> JsonSchema",
              "line": 91,
              "signature": "public static func string() -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public static func number() -> JsonSchema",
              "line": 94,
              "signature": "public static func number() -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public static func integer() -> JsonSchema",
              "line": 97,
              "signature": "public static func integer() -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public static func boolean() -> JsonSchema",
              "line": 100,
              "signature": "public static func boolean() -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public static func array() -> JsonSchema",
              "line": 103,
              "signature": "public static func array() -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public static func object() -> JsonSchema",
              "line": 106,
              "signature": "public static func object() -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public static func null() -> JsonSchema",
              "line": 109,
              "signature": "public static func null() -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func description(_ desc: String) -> JsonSchema",
              "line": 117,
              "signature": "public func description(_ desc: String) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func property(_ name: String, _ schema: JsonSchema) -> JsonSchema",
              "line": 129,
              "signature": "public func property(_ name: String, _ schema: JsonSchema) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func required(_ name: String) -> JsonSchema",
              "line": 141,
              "signature": "public func required(_ name: String) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func itemsSchema(_ schema: JsonSchema) -> JsonSchema",
              "line": 153,
              "signature": "public func itemsSchema(_ schema: JsonSchema) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func enumValues(_ values: [JSONValue]) -> JsonSchema",
              "line": 163,
              "signature": "public func enumValues(_ values: [JSONValue]) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func minimum(_ min: Double) -> JsonSchema",
              "line": 173,
              "signature": "public func minimum(_ min: Double) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func maximum(_ max: Double) -> JsonSchema",
              "line": 183,
              "signature": "public func maximum(_ max: Double) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func minLength(_ len: UInt64) -> JsonSchema",
              "line": 193,
              "signature": "public func minLength(_ len: UInt64) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func maxLength(_ len: UInt64) -> JsonSchema",
              "line": 203,
              "signature": "public func maxLength(_ len: UInt64) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func additionalProperties(_ allowed: Bool) -> JsonSchema",
              "line": 213,
              "signature": "public func additionalProperties(_ allowed: Bool) -> JsonSchema",
              "documentation": ""
            },
            {
              "name": "public func validate(_ value: JSONValue) throws",
              "line": 225,
              "signature": "public func validate(_ value: JSONValue) throws",
              "documentation": ""
            },
            {
              "name": "public final class Box<T: Codable & Sendable & Equatable>: Codable, Sendable, Equatable",
              "line": 390,
              "signature": "public final class Box<T: Codable & Sendable & Equatable>: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let value: T",
              "line": 391,
              "signature": "public let value: T\n\npublic init(_ value: T)",
              "documentation": ""
            },
            {
              "name": "public init(_ value: T)",
              "line": 393,
              "signature": "public init(_ value: T)",
              "documentation": ""
            },
            {
              "name": "public static func == (lhs: Box<T>, rhs: Box<T>) -> Bool",
              "line": 397,
              "signature": "public static func == (lhs: Box<T>, rhs: Box<T>) -> Bool",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 401,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 406,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Telemetry.swift",
          "sha256": "345305dd83ba85f70ad920ca0e60f319c88039d2753bb6dd5959116b7315943b",
          "artifactSha256": "d07d16f5ffc2a775f80093b3406019f482f6a984ad15388c8835d9194577b5da",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Telemetry.swift.txt",
          "declarations": [
            {
              "name": "public enum SpanAttribute: Codable, Sendable, Equatable",
              "line": 17,
              "signature": "public enum SpanAttribute: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 25,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 45,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public init(stringLiteral value: String)",
              "line": 57,
              "signature": "public init(stringLiteral value: String)",
              "documentation": ""
            },
            {
              "name": "public init(integerLiteral value: Int64)",
              "line": 61,
              "signature": "public init(integerLiteral value: Int64)",
              "documentation": ""
            },
            {
              "name": "public init(floatLiteral value: Double)",
              "line": 65,
              "signature": "public init(floatLiteral value: Double)",
              "documentation": ""
            },
            {
              "name": "public init(booleanLiteral value: Bool)",
              "line": 69,
              "signature": "public init(booleanLiteral value: Bool)",
              "documentation": ""
            },
            {
              "name": "public enum SpanStatus: Codable, Sendable, Equatable",
              "line": 75,
              "signature": "public enum SpanStatus: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 89,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 108,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public struct ForgeSpan: Codable, Sendable",
              "line": 128,
              "signature": "public struct ForgeSpan: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var name: String",
              "line": 130,
              "signature": "public var name: String\n/// Span start time.\npublic var startTime: Timestamp\n/// Span end time (set when span completes).\npublic var endTime: Timestamp?\n/// Key-value attributes.\npublic var attributes: [String: SpanAttribute]\n/// Span status.\npublic var status: SpanStatus\n/// Parent span ID for distributed tracing.\npublic var parentId: String?\n/// This span's unique ID.\npublic var spanId: String\n\n/// Creates a new span with the given name. Start time is set to now.\n///\n/// - Parameter name: The span name (use dotted notation: \"forge.agent.generate\").\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var startTime: Timestamp",
              "line": 132,
              "signature": "public var startTime: Timestamp\n/// Span end time (set when span completes).\npublic var endTime: Timestamp?\n/// Key-value attributes.\npublic var attributes: [String: SpanAttribute]\n/// Span status.\npublic var status: SpanStatus\n/// Parent span ID for distributed tracing.\npublic var parentId: String?\n/// This span's unique ID.\npublic var spanId: String\n\n/// Creates a new span with the given name. Start time is set to now.\n///\n/// - Parameter name: The span name (use dotted notation: \"forge.agent.generate\").\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var endTime: Timestamp?",
              "line": 134,
              "signature": "public var endTime: Timestamp?\n/// Key-value attributes.\npublic var attributes: [String: SpanAttribute]\n/// Span status.\npublic var status: SpanStatus\n/// Parent span ID for distributed tracing.\npublic var parentId: String?\n/// This span's unique ID.\npublic var spanId: String\n\n/// Creates a new span with the given name. Start time is set to now.\n///\n/// - Parameter name: The span name (use dotted notation: \"forge.agent.generate\").\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var attributes: [String: SpanAttribute]",
              "line": 136,
              "signature": "public var attributes: [String: SpanAttribute]\n/// Span status.\npublic var status: SpanStatus\n/// Parent span ID for distributed tracing.\npublic var parentId: String?\n/// This span's unique ID.\npublic var spanId: String\n\n/// Creates a new span with the given name. Start time is set to now.\n///\n/// - Parameter name: The span name (use dotted notation: \"forge.agent.generate\").\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var status: SpanStatus",
              "line": 138,
              "signature": "public var status: SpanStatus\n/// Parent span ID for distributed tracing.\npublic var parentId: String?\n/// This span's unique ID.\npublic var spanId: String\n\n/// Creates a new span with the given name. Start time is set to now.\n///\n/// - Parameter name: The span name (use dotted notation: \"forge.agent.generate\").\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var parentId: String?",
              "line": 140,
              "signature": "public var parentId: String?\n/// This span's unique ID.\npublic var spanId: String\n\n/// Creates a new span with the given name. Start time is set to now.\n///\n/// - Parameter name: The span name (use dotted notation: \"forge.agent.generate\").\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var spanId: String",
              "line": 142,
              "signature": "public var spanId: String\n\n/// Creates a new span with the given name. Start time is set to now.\n///\n/// - Parameter name: The span name (use dotted notation: \"forge.agent.generate\").\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public init(name: String)",
              "line": 147,
              "signature": "public init(name: String)",
              "documentation": ""
            },
            {
              "name": "public mutating func setAttribute(_ key: String, _ value: SpanAttribute)",
              "line": 162,
              "signature": "public mutating func setAttribute(_ key: String, _ value: SpanAttribute)",
              "documentation": ""
            },
            {
              "name": "public mutating func end()",
              "line": 167,
              "signature": "public mutating func end()",
              "documentation": ""
            },
            {
              "name": "public mutating func endWithError(_ message: String)",
              "line": 174,
              "signature": "public mutating func endWithError(_ message: String)",
              "documentation": ""
            },
            {
              "name": "public func withParent(_ parentId: String) -> ForgeSpan",
              "line": 183,
              "signature": "public func withParent(_ parentId: String) -> ForgeSpan",
              "documentation": ""
            },
            {
              "name": "public struct ForgeEvent: Codable, Sendable",
              "line": 196,
              "signature": "public struct ForgeEvent: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var name: String",
              "line": 198,
              "signature": "public var name: String\n/// When the event occurred.\npublic var timestamp: Timestamp\n/// Key-value attributes.\npublic var attributes: [String: SpanAttribute]\n\n/// Creates a new event with the given name. Timestamp is set to now.\n///\n/// - Parameter name: The event name.\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var timestamp: Timestamp",
              "line": 200,
              "signature": "public var timestamp: Timestamp\n/// Key-value attributes.\npublic var attributes: [String: SpanAttribute]\n\n/// Creates a new event with the given name. Timestamp is set to now.\n///\n/// - Parameter name: The event name.\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public var attributes: [String: SpanAttribute]",
              "line": 202,
              "signature": "public var attributes: [String: SpanAttribute]\n\n/// Creates a new event with the given name. Timestamp is set to now.\n///\n/// - Parameter name: The event name.\npublic init(name: String)",
              "documentation": ""
            },
            {
              "name": "public init(name: String)",
              "line": 207,
              "signature": "public init(name: String)",
              "documentation": ""
            },
            {
              "name": "public mutating func setAttribute(_ key: String, _ value: SpanAttribute)",
              "line": 218,
              "signature": "public mutating func setAttribute(_ key: String, _ value: SpanAttribute)",
              "documentation": ""
            },
            {
              "name": "public protocol TelemetryEmitter: Sendable",
              "line": 229,
              "signature": "public protocol TelemetryEmitter: Sendable",
              "documentation": ""
            },
            {
              "name": "public struct NoopEmitter: TelemetryEmitter, Sendable",
              "line": 242,
              "signature": "public struct NoopEmitter: TelemetryEmitter, Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 243,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func emitSpan(_ span: ForgeSpan)",
              "line": 244,
              "signature": "public func emitSpan(_ span: ForgeSpan)",
              "documentation": ""
            },
            {
              "name": "public func emitEvent(_ event: ForgeEvent)",
              "line": 245,
              "signature": "public func emitEvent(_ event: ForgeEvent)",
              "documentation": ""
            },
            {
              "name": "public final class RecordingEmitter: TelemetryEmitter, @unchecked Sendable",
              "line": 249,
              "signature": "public final class RecordingEmitter: TelemetryEmitter, @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 254,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func emitSpan(_ span: ForgeSpan)",
              "line": 256,
              "signature": "public func emitSpan(_ span: ForgeSpan)",
              "documentation": ""
            },
            {
              "name": "public func emitEvent(_ event: ForgeEvent)",
              "line": 262,
              "signature": "public func emitEvent(_ event: ForgeEvent)",
              "documentation": ""
            },
            {
              "name": "public var spans: [ForgeSpan]",
              "line": 269,
              "signature": "public var spans: [ForgeSpan]",
              "documentation": ""
            },
            {
              "name": "public var events: [ForgeEvent]",
              "line": 276,
              "signature": "public var events: [ForgeEvent]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Tool.swift",
          "sha256": "6df75118c89ff7e86caf8876b2b23188463f5f708f369390a594046a55e21dce",
          "artifactSha256": "77bc28721da5da41bb9d7d34e476a5b04d360f4f9c19c49f35b93de1e6989792",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Tool.swift.txt",
          "declarations": [
            {
              "name": "public enum ToolTier: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 25,
              "signature": "public enum ToolTier: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public var requiresAuthorization: Bool",
              "line": 44,
              "signature": "public var requiresAuthorization: Bool",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 50,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct ToolDefinition: Codable, Sendable, Equatable",
              "line": 61,
              "signature": "public struct ToolDefinition: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 63,
              "signature": "public let name: String\n/// Human-readable description shown to the model.\npublic let toolDescription: String\n/// JSON Schema defining the tool's parameters.\npublic let parameters: JsonSchema\n/// Tier classification (Platform/External/Embedded).\npublic let tier: ToolTier\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let toolDescription: String",
              "line": 65,
              "signature": "public let toolDescription: String\n/// JSON Schema defining the tool's parameters.\npublic let parameters: JsonSchema\n/// Tier classification (Platform/External/Embedded).\npublic let tier: ToolTier\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let parameters: JsonSchema",
              "line": 67,
              "signature": "public let parameters: JsonSchema\n/// Tier classification (Platform/External/Embedded).\npublic let tier: ToolTier\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public let tier: ToolTier",
              "line": 69,
              "signature": "public let tier: ToolTier\n\nprivate enum CodingKeys: String, CodingKey",
              "documentation": ""
            },
            {
              "name": "public static func builder(_ name: String) -> ToolDefinitionBuilder",
              "line": 82,
              "signature": "public static func builder(_ name: String) -> ToolDefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "public struct ToolDefinitionBuilder: Sendable",
              "line": 100,
              "signature": "public struct ToolDefinitionBuilder: Sendable",
              "documentation": ""
            },
            {
              "name": "public func description(_ desc: String) -> ToolDefinitionBuilder",
              "line": 114,
              "signature": "public func description(_ desc: String) -> ToolDefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "public func parameters(_ schema: JsonSchema) -> ToolDefinitionBuilder",
              "line": 124,
              "signature": "public func parameters(_ schema: JsonSchema) -> ToolDefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "public func tier(_ tier: ToolTier) -> ToolDefinitionBuilder",
              "line": 134,
              "signature": "public func tier(_ tier: ToolTier) -> ToolDefinitionBuilder",
              "documentation": ""
            },
            {
              "name": "public func build() -> ToolDefinition",
              "line": 143,
              "signature": "public func build() -> ToolDefinition",
              "documentation": ""
            },
            {
              "name": "public struct ToolCall: Codable, Sendable, Equatable",
              "line": 158,
              "signature": "public struct ToolCall: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 160,
              "signature": "public let id: String\n/// The tool name being invoked.\npublic let name: String\n/// JSON arguments for the tool.\npublic let arguments: JSONValue\n\npublic init(id: String, name: String, arguments: JSONValue)",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 162,
              "signature": "public let name: String\n/// JSON arguments for the tool.\npublic let arguments: JSONValue\n\npublic init(id: String, name: String, arguments: JSONValue)",
              "documentation": ""
            },
            {
              "name": "public let arguments: JSONValue",
              "line": 164,
              "signature": "public let arguments: JSONValue\n\npublic init(id: String, name: String, arguments: JSONValue)",
              "documentation": ""
            },
            {
              "name": "public init(id: String, name: String, arguments: JSONValue)",
              "line": 166,
              "signature": "public init(id: String, name: String, arguments: JSONValue)",
              "documentation": ""
            },
            {
              "name": "public struct ToolResult: Codable, Sendable, Equatable",
              "line": 178,
              "signature": "public struct ToolResult: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let toolCallId: String",
              "line": 180,
              "signature": "public let toolCallId: String\n/// The tool name.\npublic let name: String\n/// The result content (stringified).\npublic let content: String\n/// Whether the tool execution resulted in an error.\npublic let isError: Bool\n\npublic init(toolCallId: String, name: String, content: String, isError: Bool)",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 182,
              "signature": "public let name: String\n/// The result content (stringified).\npublic let content: String\n/// Whether the tool execution resulted in an error.\npublic let isError: Bool\n\npublic init(toolCallId: String, name: String, content: String, isError: Bool)",
              "documentation": ""
            },
            {
              "name": "public let content: String",
              "line": 184,
              "signature": "public let content: String\n/// Whether the tool execution resulted in an error.\npublic let isError: Bool\n\npublic init(toolCallId: String, name: String, content: String, isError: Bool)",
              "documentation": ""
            },
            {
              "name": "public let isError: Bool",
              "line": 186,
              "signature": "public let isError: Bool\n\npublic init(toolCallId: String, name: String, content: String, isError: Bool)",
              "documentation": ""
            },
            {
              "name": "public init(toolCallId: String, name: String, content: String, isError: Bool)",
              "line": 188,
              "signature": "public init(toolCallId: String, name: String, content: String, isError: Bool)",
              "documentation": ""
            },
            {
              "name": "public enum ToolApproval: Sendable, Equatable",
              "line": 204,
              "signature": "public enum ToolApproval: Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 218,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 240,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Topology.swift",
          "sha256": "48447391fa94467b4218fe02fd524e3555ee857dcca3870b52aadd4d8b3cde95",
          "artifactSha256": "40efeb5710e93c719845dde1b3ad2d02ee62b2be351b09b75d75dda63a20ffe2",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Topology.swift.txt",
          "declarations": [
            {
              "name": "public let defaultRole: String;",
              "line": 19,
              "signature": "public let defaultRole: String;",
              "documentation": ""
            },
            {
              "name": "public enum CostPreference: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 27,
              "signature": "public enum CostPreference: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public enum LatencyPreference: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 42,
              "signature": "public enum LatencyPreference: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct ModelSlot: Codable, Sendable",
              "line": 61,
              "signature": "public struct ModelSlot: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let role: String",
              "line": 63,
              "signature": "public let role: String\n\n/// Primary model for this slot.\npublic let primary: ProviderRef\n\n/// Ordered fallback models. Tried in sequence when the primary is\n/// unavailable or fails negotiation.\npublic var fallbacks: [ProviderRef]\n\n/// Runtime capabilities required for this slot.\npublic var requiredCapabilities: [RuntimeCapability]\n\n/// Optional cost preference for the router.\npublic var costPreference: CostPreference?\n\n/// Optional latency preference for the router.\npublic var latencyPreference: LatencyPreference?\n\n/// Optional Arsenal scope narrowing applied when this slot is selected.\npublic var arsenalScopeNarrowing: [String]?\n\npublic init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public let primary: ProviderRef",
              "line": 66,
              "signature": "public let primary: ProviderRef\n\n/// Ordered fallback models. Tried in sequence when the primary is\n/// unavailable or fails negotiation.\npublic var fallbacks: [ProviderRef]\n\n/// Runtime capabilities required for this slot.\npublic var requiredCapabilities: [RuntimeCapability]\n\n/// Optional cost preference for the router.\npublic var costPreference: CostPreference?\n\n/// Optional latency preference for the router.\npublic var latencyPreference: LatencyPreference?\n\n/// Optional Arsenal scope narrowing applied when this slot is selected.\npublic var arsenalScopeNarrowing: [String]?\n\npublic init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var fallbacks: [ProviderRef]",
              "line": 70,
              "signature": "public var fallbacks: [ProviderRef]\n\n/// Runtime capabilities required for this slot.\npublic var requiredCapabilities: [RuntimeCapability]\n\n/// Optional cost preference for the router.\npublic var costPreference: CostPreference?\n\n/// Optional latency preference for the router.\npublic var latencyPreference: LatencyPreference?\n\n/// Optional Arsenal scope narrowing applied when this slot is selected.\npublic var arsenalScopeNarrowing: [String]?\n\npublic init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var requiredCapabilities: [RuntimeCapability]",
              "line": 73,
              "signature": "public var requiredCapabilities: [RuntimeCapability]\n\n/// Optional cost preference for the router.\npublic var costPreference: CostPreference?\n\n/// Optional latency preference for the router.\npublic var latencyPreference: LatencyPreference?\n\n/// Optional Arsenal scope narrowing applied when this slot is selected.\npublic var arsenalScopeNarrowing: [String]?\n\npublic init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var costPreference: CostPreference?",
              "line": 76,
              "signature": "public var costPreference: CostPreference?\n\n/// Optional latency preference for the router.\npublic var latencyPreference: LatencyPreference?\n\n/// Optional Arsenal scope narrowing applied when this slot is selected.\npublic var arsenalScopeNarrowing: [String]?\n\npublic init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var latencyPreference: LatencyPreference?",
              "line": 79,
              "signature": "public var latencyPreference: LatencyPreference?\n\n/// Optional Arsenal scope narrowing applied when this slot is selected.\npublic var arsenalScopeNarrowing: [String]?\n\npublic init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public var arsenalScopeNarrowing: [String]?",
              "line": 82,
              "signature": "public var arsenalScopeNarrowing: [String]?\n\npublic init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 84,
              "signature": "public init(\nrole: String,\nprimary: ProviderRef,\nfallbacks: [ProviderRef];",
              "documentation": ""
            },
            {
              "name": "public struct ModelTopology: Codable, Sendable",
              "line": 120,
              "signature": "public struct ModelTopology: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var name: String",
              "line": 145,
              "signature": "public var name: String",
              "documentation": ""
            },
            {
              "name": "public var defaultRoleName: String",
              "line": 148,
              "signature": "public var defaultRoleName: String",
              "documentation": ""
            },
            {
              "name": "public var slots: [String: ModelSlot]",
              "line": 151,
              "signature": "public var slots: [String: ModelSlot]",
              "documentation": ""
            },
            {
              "name": "public var slotCount: Int",
              "line": 154,
              "signature": "public var slotCount: Int",
              "documentation": ""
            },
            {
              "name": "public func hasRole(_ role: String) -> Bool",
              "line": 157,
              "signature": "public func hasRole(_ role: String) -> Bool",
              "documentation": ""
            },
            {
              "name": "public var defaultSlot: ModelSlot",
              "line": 165,
              "signature": "public var defaultSlot: ModelSlot",
              "documentation": ""
            },
            {
              "name": "public func slotForRole(_ role: String) -> ModelSlot",
              "line": 176,
              "signature": "public func slotForRole(_ role: String) -> ModelSlot",
              "documentation": ""
            },
            {
              "name": "public func allProviderRefs() -> [ProviderRef]",
              "line": 182,
              "signature": "public func allProviderRefs() -> [ProviderRef]",
              "documentation": ""
            },
            {
              "name": "public static func single(_ providerRef: ProviderRef) -> ModelTopology",
              "line": 198,
              "signature": "public static func single(_ providerRef: ProviderRef) -> ModelTopology",
              "documentation": ""
            },
            {
              "name": "public static func builder() -> TopologyBuilder",
              "line": 208,
              "signature": "public static func builder() -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public final class TopologyBuilder: @unchecked Sendable",
              "line": 220,
              "signature": "public final class TopologyBuilder: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public func name(_ name: String) -> TopologyBuilder",
              "line": 229,
              "signature": "public func name(_ name: String) -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public func slot(_ role: String, _ primary: ProviderRef) -> TopologyBuilder",
              "line": 243,
              "signature": "public func slot(_ role: String, _ primary: ProviderRef) -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public func withFallback(_ role: String, _ fallback: ProviderRef) -> TopologyBuilder",
              "line": 257,
              "signature": "public func withFallback(_ role: String, _ fallback: ProviderRef) -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public func withRequiredCapability(_ role: String, _ capability: RuntimeCapability) -> TopologyBuilder",
              "line": 271,
              "signature": "public func withRequiredCapability(_ role: String, _ capability: RuntimeCapability) -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public func withCostPreference(_ role: String, _ pref: CostPreference) -> TopologyBuilder",
              "line": 285,
              "signature": "public func withCostPreference(_ role: String, _ pref: CostPreference) -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public func withLatencyPreference(_ role: String, _ pref: LatencyPreference) -> TopologyBuilder",
              "line": 299,
              "signature": "public func withLatencyPreference(_ role: String, _ pref: LatencyPreference) -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public func withScopeNarrowing(_ role: String, _ scopes: [String]) -> TopologyBuilder",
              "line": 313,
              "signature": "public func withScopeNarrowing(_ role: String, _ scopes: [String]) -> TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public func build() throws -> ModelTopology",
              "line": 323,
              "signature": "public func build() throws -> ModelTopology",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCore/Types.swift",
          "sha256": "fb30f8461dac6ed1d3dbf7e72a01ede6cba93a0ef6b686da64346b9181d45e0c",
          "artifactSha256": "4abe9d0199098f3c198601721144ca2e656f777775c8a4584ed05298d795e68d",
          "url": "/reference/source/forge-swift/Sources/ForgeCore/Types.swift.txt",
          "declarations": [
            {
              "name": "public enum JSONValue: Sendable, Equatable, Hashable",
              "line": 17,
              "signature": "public enum JSONValue: Sendable, Equatable, Hashable",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 28,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 54,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public init(stringLiteral value: String)",
              "line": 76,
              "signature": "public init(stringLiteral value: String)",
              "documentation": ""
            },
            {
              "name": "public init(integerLiteral value: Int)",
              "line": 80,
              "signature": "public init(integerLiteral value: Int)",
              "documentation": ""
            },
            {
              "name": "public init(floatLiteral value: Double)",
              "line": 84,
              "signature": "public init(floatLiteral value: Double)",
              "documentation": ""
            },
            {
              "name": "public init(booleanLiteral value: Bool)",
              "line": 88,
              "signature": "public init(booleanLiteral value: Bool)",
              "documentation": ""
            },
            {
              "name": "public init(nilLiteral: ())",
              "line": 92,
              "signature": "public init(nilLiteral: ())",
              "documentation": ""
            },
            {
              "name": "public init(arrayLiteral elements: JSONValue...)",
              "line": 96,
              "signature": "public init(arrayLiteral elements: JSONValue...)",
              "documentation": ""
            },
            {
              "name": "public init(dictionaryLiteral elements: (String, JSONValue)...)",
              "line": 100,
              "signature": "public init(dictionaryLiteral elements: (String, JSONValue)...)",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 106,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct AgentDid: Codable, Sendable, Hashable, Equatable",
              "line": 128,
              "signature": "public struct AgentDid: Codable, Sendable, Hashable, Equatable",
              "documentation": ""
            },
            {
              "name": "public init?(_ did: String)",
              "line": 135,
              "signature": "public init?(_ did: String)",
              "documentation": ""
            },
            {
              "name": "public static func fromTrusted(_ trustedDid: String) -> AgentDid",
              "line": 150,
              "signature": "public static func fromTrusted(_ trustedDid: String) -> AgentDid",
              "documentation": ""
            },
            {
              "name": "public var asString: String",
              "line": 159,
              "signature": "public var asString: String",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 161,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 167,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 174,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct Timestamp: Codable, Sendable, Equatable, Comparable",
              "line": 182,
              "signature": "public struct Timestamp: Codable, Sendable, Equatable, Comparable",
              "documentation": ""
            },
            {
              "name": "public let date: Date",
              "line": 184,
              "signature": "public let date: Date\n\n/// Creates a `Timestamp` for the current UTC time.\npublic static func now() -> Timestamp",
              "documentation": ""
            },
            {
              "name": "public static func now() -> Timestamp",
              "line": 187,
              "signature": "public static func now() -> Timestamp",
              "documentation": ""
            },
            {
              "name": "public init(date: Date)",
              "line": 194,
              "signature": "public init(date: Date)",
              "documentation": ""
            },
            {
              "name": "public init?(iso8601 string: String)",
              "line": 202,
              "signature": "public init?(iso8601 string: String)",
              "documentation": ""
            },
            {
              "name": "public func toISO8601() -> String",
              "line": 218,
              "signature": "public func toISO8601() -> String",
              "documentation": ""
            },
            {
              "name": "public static func < (lhs: Timestamp, rhs: Timestamp) -> Bool",
              "line": 224,
              "signature": "public static func < (lhs: Timestamp, rhs: Timestamp) -> Bool",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 228,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 242,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 249,
              "signature": "public var description: String",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeGenerate",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeGenerate library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeGenerate",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeGenerate/GenerateObject.swift",
          "sha256": "99111f7d10b8c434ea3005b4dee72788abe83dc8fd3645ed21c277572c34a12f",
          "artifactSha256": "10639f56f26f611e8a2572c4d0e55f82c8b40f37f795af777a6bd6096daa393e",
          "url": "/reference/source/forge-swift/Sources/ForgeGenerate/GenerateObject.swift.txt",
          "declarations": [
            {
              "name": "public func generateObject<T: Decodable & Sendable>(",
              "line": 27,
              "signature": "public func generateObject<T: Decodable & Sendable>(\nmodel: any LanguageModel,\nmessages: [ModelMessage],\nschema: JsonSchema,\ntype: T.Type,\noptions: GenerateOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeGenerate/GenerateText.swift",
          "sha256": "d636423dc96b33fdf473214062bd2ae4625d9b8803836d589c7e8910f3ac1a87",
          "artifactSha256": "a9b477d7846fcefe2408849e4a6f673807b116ce3be53a0b1b7241914dbd8ffe",
          "url": "/reference/source/forge-swift/Sources/ForgeGenerate/GenerateText.swift.txt",
          "declarations": [
            {
              "name": "public func generateText(",
              "line": 23,
              "signature": "public func generateText(\nmodel: any LanguageModel,\nmessages: [ModelMessage],\ntools: [ToolDefinition];",
              "documentation": ""
            },
            {
              "name": "public func generateText(",
              "line": 57,
              "signature": "public func generateText(\nmodel: any LanguageModel,\nprompt: String,\nsystem: String?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeGenerate/StreamObject.swift",
          "sha256": "b2ef473e1c9ebd6610cc8ac6a59fc528ec5f1ecfb6cc030c1fe0bbf77f635abb",
          "artifactSha256": "e3cafa051e71ed8831338681a3261849c53b54dd6a53bc17b636060bcf4ffd6f",
          "url": "/reference/source/forge-swift/Sources/ForgeGenerate/StreamObject.swift.txt",
          "declarations": [
            {
              "name": "public struct PartialObjectChunk: Sendable",
              "line": 15,
              "signature": "public struct PartialObjectChunk: Sendable",
              "documentation": ""
            },
            {
              "name": "public let partialJson: String",
              "line": 17,
              "signature": "public let partialJson: String\n/// Whether the object is complete and ready for decoding.\npublic let isComplete: Bool\n\npublic init(partialJson: String, isComplete: Bool)",
              "documentation": ""
            },
            {
              "name": "public let isComplete: Bool",
              "line": 19,
              "signature": "public let isComplete: Bool\n\npublic init(partialJson: String, isComplete: Bool)",
              "documentation": ""
            },
            {
              "name": "public init(partialJson: String, isComplete: Bool)",
              "line": 21,
              "signature": "public init(partialJson: String, isComplete: Bool)",
              "documentation": ""
            },
            {
              "name": "public func streamObject(",
              "line": 39,
              "signature": "public func streamObject(\nmodel: any LanguageModel,\nmessages: [ModelMessage],\nschema: JsonSchema,\noptions: GenerateOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeGenerate/StreamText.swift",
          "sha256": "da3aa33068af4c0ec909665ceba34a2e31e63010dfef957d3d496837519d781b",
          "artifactSha256": "e726224626025cd2f6d18f71e06dd291e42aec6830f68303d16f6b57c4565219",
          "url": "/reference/source/forge-swift/Sources/ForgeGenerate/StreamText.swift.txt",
          "declarations": [
            {
              "name": "public func streamText(",
              "line": 23,
              "signature": "public func streamText(\nmodel: any LanguageModel,\nmessages: [ModelMessage],\ntools: [ToolDefinition];",
              "documentation": ""
            },
            {
              "name": "public func streamText(",
              "line": 57,
              "signature": "public func streamText(\nmodel: any LanguageModel,\nprompt: String,\nsystem: String?;",
              "documentation": ""
            },
            {
              "name": "public func collectStream(",
              "line": 79,
              "signature": "public func collectStream(\n_ stream: AsyncThrowingStream<StreamChunk, Error>\n) async throws -> (text: String, finishReason: FinishReason, usage: Usage)",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeTool",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeTool library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeTool",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeTool/Approval.swift",
          "sha256": "2cd6183d1ad370d357fbb2c0ddaa13e1d67370beb5cc9715b573f951ed58d534",
          "artifactSha256": "875498d9027cc4027801804a42920c7f26426bc90afb2a3898791ff05a903a96",
          "url": "/reference/source/forge-swift/Sources/ForgeTool/Approval.swift.txt",
          "declarations": [
            {
              "name": "public protocol ToolApprovalHandler: Sendable",
              "line": 19,
              "signature": "public protocol ToolApprovalHandler: Sendable",
              "documentation": ""
            },
            {
              "name": "public struct AutoApprovalHandler: ToolApprovalHandler, Sendable",
              "line": 33,
              "signature": "public struct AutoApprovalHandler: ToolApprovalHandler, Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 34,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func approve(call: ToolCall, definition: ToolDefinition) async -> ToolApproval",
              "line": 36,
              "signature": "public func approve(call: ToolCall, definition: ToolDefinition) async -> ToolApproval",
              "documentation": ""
            },
            {
              "name": "public struct DenyAllHandler: ToolApprovalHandler, Sendable",
              "line": 44,
              "signature": "public struct DenyAllHandler: ToolApprovalHandler, Sendable",
              "documentation": ""
            },
            {
              "name": "public init(reason: String;",
              "line": 50,
              "signature": "public init(reason: String;",
              "documentation": ""
            },
            {
              "name": "public func approve(call: ToolCall, definition: ToolDefinition) async -> ToolApproval",
              "line": 54,
              "signature": "public func approve(call: ToolCall, definition: ToolDefinition) async -> ToolApproval",
              "documentation": ""
            },
            {
              "name": "public struct PlatformOnlyHandler: ToolApprovalHandler, Sendable",
              "line": 62,
              "signature": "public struct PlatformOnlyHandler: ToolApprovalHandler, Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 63,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func approve(call: ToolCall, definition: ToolDefinition) async -> ToolApproval",
              "line": 65,
              "signature": "public func approve(call: ToolCall, definition: ToolDefinition) async -> ToolApproval",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeTool/Definition.swift",
          "sha256": "8fac770dc3026bc7abd5e1e87f847a83571ff87db67e79bb29e6eb89270c99c3",
          "artifactSha256": "7df35ba2c1b4be95d85714f393dc19d9cb89960db2810eae9075a0e0815979ab",
          "url": "/reference/source/forge-swift/Sources/ForgeTool/Definition.swift.txt",
          "declarations": [
            {
              "name": "public struct ForgeToolBuilder: Sendable",
              "line": 28,
              "signature": "public struct ForgeToolBuilder: Sendable",
              "documentation": ""
            },
            {
              "name": "public init(_ name: String)",
              "line": 38,
              "signature": "public init(_ name: String)",
              "documentation": ""
            },
            {
              "name": "public func description(_ desc: String) -> ForgeToolBuilder",
              "line": 46,
              "signature": "public func description(_ desc: String) -> ForgeToolBuilder",
              "documentation": ""
            },
            {
              "name": "public func parameters(_ schema: JsonSchema) -> ForgeToolBuilder",
              "line": 56,
              "signature": "public func parameters(_ schema: JsonSchema) -> ForgeToolBuilder",
              "documentation": ""
            },
            {
              "name": "public func tier(_ tier: ToolTier) -> ForgeToolBuilder",
              "line": 66,
              "signature": "public func tier(_ tier: ToolTier) -> ForgeToolBuilder",
              "documentation": ""
            },
            {
              "name": "public func handler(_ handler: @escaping ToolHandler) -> ForgeToolBuilder",
              "line": 76,
              "signature": "public func handler(_ handler: @escaping ToolHandler) -> ForgeToolBuilder",
              "documentation": ""
            },
            {
              "name": "public func build() -> RegisteredTool",
              "line": 86,
              "signature": "public func build() -> RegisteredTool",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeTool/Execution.swift",
          "sha256": "8b5d5351a07d0632e9067e89cbb6433768fdaee54ff3d24a3d95a27f6642459c",
          "artifactSha256": "f052d8a97d86220d42d716bdedce12af535518ca42094bfdc9f39673c052ff25",
          "url": "/reference/source/forge-swift/Sources/ForgeTool/Execution.swift.txt",
          "declarations": [
            {
              "name": "public func executeTool(",
              "line": 30,
              "signature": "public func executeTool(\ncall: ToolCall,\nregistry: ToolRegistry,\napprovalHandler: any ToolApprovalHandler;",
              "documentation": ""
            },
            {
              "name": "public func executeTools(",
              "line": 99,
              "signature": "public func executeTools(\ncalls: [ToolCall],\nregistry: ToolRegistry,\napprovalHandler: any ToolApprovalHandler;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeTool/Registry.swift",
          "sha256": "80d32a25ee49ab2a0702efe3859e7db2c50fdfbfd49966331fb1824ea791f543",
          "artifactSha256": "e08df9c45ee12f70137e05733308e663b4b11f4a190217b146c261079647680f",
          "url": "/reference/source/forge-swift/Sources/ForgeTool/Registry.swift.txt",
          "declarations": [
            {
              "name": "public typealias ToolHandler;",
              "line": 15,
              "signature": "public typealias ToolHandler;",
              "documentation": ""
            },
            {
              "name": "public struct RegisteredTool: Sendable",
              "line": 18,
              "signature": "public struct RegisteredTool: Sendable",
              "documentation": ""
            },
            {
              "name": "public let definition: ToolDefinition",
              "line": 20,
              "signature": "public let definition: ToolDefinition\n/// The handler that executes the tool.\npublic let handler: ToolHandler\n\npublic init(definition: ToolDefinition, handler: @escaping ToolHandler)",
              "documentation": ""
            },
            {
              "name": "public let handler: ToolHandler",
              "line": 22,
              "signature": "public let handler: ToolHandler\n\npublic init(definition: ToolDefinition, handler: @escaping ToolHandler)",
              "documentation": ""
            },
            {
              "name": "public init(definition: ToolDefinition, handler: @escaping ToolHandler)",
              "line": 24,
              "signature": "public init(definition: ToolDefinition, handler: @escaping ToolHandler)",
              "documentation": ""
            },
            {
              "name": "public final class ToolRegistry: @unchecked Sendable",
              "line": 36,
              "signature": "public final class ToolRegistry: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 41,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func register(definition: ToolDefinition, handler: @escaping ToolHandler) throws",
              "line": 49,
              "signature": "public func register(definition: ToolDefinition, handler: @escaping ToolHandler) throws",
              "documentation": ""
            },
            {
              "name": "public func get(_ name: String) -> RegisteredTool?",
              "line": 62,
              "signature": "public func get(_ name: String) -> RegisteredTool?",
              "documentation": ""
            },
            {
              "name": "public func definitions() -> [ToolDefinition]",
              "line": 71,
              "signature": "public func definitions() -> [ToolDefinition]",
              "documentation": ""
            },
            {
              "name": "public func definitions(forTier tier: ToolTier) -> [ToolDefinition]",
              "line": 81,
              "signature": "public func definitions(forTier tier: ToolTier) -> [ToolDefinition]",
              "documentation": ""
            },
            {
              "name": "public var count: Int",
              "line": 90,
              "signature": "public var count: Int",
              "documentation": ""
            },
            {
              "name": "public var isEmpty: Bool",
              "line": 97,
              "signature": "public var isEmpty: Bool",
              "documentation": ""
            },
            {
              "name": "public func remove(_ name: String) -> RegisteredTool?",
              "line": 108,
              "signature": "public func remove(_ name: String) -> RegisteredTool?",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeHealth",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeHealth library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeHealth",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeHealth/Events.swift",
          "sha256": "f76f5f4daca51c08bb013c01889cb5b8775e87323ba9879c7efee1b7c18c047e",
          "artifactSha256": "4e5debc5f4f00c084622e7cb54b92a17e4178133a7d1f56adc2d0d55f17e24d1",
          "url": "/reference/source/forge-swift/Sources/ForgeHealth/Events.swift.txt",
          "declarations": [
            {
              "name": "public struct LifecycleEvent: Codable, Sendable",
              "line": 15,
              "signature": "public struct LifecycleEvent: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let from: LifecycleState",
              "line": 17,
              "signature": "public let from: LifecycleState\n/// The state after the transition.\npublic let to: LifecycleState\n/// When the transition occurred.\npublic let timestamp: Timestamp\n/// Optional reason for the transition.\npublic let reason: String?\n/// The agent DID (if available).\npublic let agentDid: String?\n\npublic init(\nfrom: LifecycleState,\nto: LifecycleState,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let to: LifecycleState",
              "line": 19,
              "signature": "public let to: LifecycleState\n/// When the transition occurred.\npublic let timestamp: Timestamp\n/// Optional reason for the transition.\npublic let reason: String?\n/// The agent DID (if available).\npublic let agentDid: String?\n\npublic init(\nfrom: LifecycleState,\nto: LifecycleState,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 21,
              "signature": "public let timestamp: Timestamp\n/// Optional reason for the transition.\npublic let reason: String?\n/// The agent DID (if available).\npublic let agentDid: String?\n\npublic init(\nfrom: LifecycleState,\nto: LifecycleState,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let reason: String?",
              "line": 23,
              "signature": "public let reason: String?\n/// The agent DID (if available).\npublic let agentDid: String?\n\npublic init(\nfrom: LifecycleState,\nto: LifecycleState,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let agentDid: String?",
              "line": 25,
              "signature": "public let agentDid: String?\n\npublic init(\nfrom: LifecycleState,\nto: LifecycleState,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 27,
              "signature": "public init(\nfrom: LifecycleState,\nto: LifecycleState,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public static func from(",
              "line": 48,
              "signature": "public static func from(\ntransition: LifecycleTransition,\nreason: String?;",
              "documentation": ""
            },
            {
              "name": "public func toForgeEvent() -> ForgeEvent",
              "line": 65,
              "signature": "public func toForgeEvent() -> ForgeEvent",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeHealth/Lifecycle.swift",
          "sha256": "af179323901a399602dc1b3ceaf6c44f156c4e5134ae8c036853006832db0f81",
          "artifactSha256": "df6d0e3a00f1e237b2eceb2aee298a17484101e235be60b4f8f11b7bf5303c30",
          "url": "/reference/source/forge-swift/Sources/ForgeHealth/Lifecycle.swift.txt",
          "declarations": [
            {
              "name": "public enum LifecycleState: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 45,
              "signature": "public enum LifecycleState: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public var validTransitions: [LifecycleState]",
              "line": 98,
              "signature": "public var validTransitions: [LifecycleState]",
              "documentation": ""
            },
            {
              "name": "public var isTerminal: Bool",
              "line": 112,
              "signature": "public var isTerminal: Bool",
              "documentation": ""
            },
            {
              "name": "public var isOperational: Bool",
              "line": 120,
              "signature": "public var isOperational: Bool",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 126,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct LifecycleTransition: Codable, Sendable",
              "line": 135,
              "signature": "public struct LifecycleTransition: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let from: LifecycleState",
              "line": 137,
              "signature": "public let from: LifecycleState\n/// The state after the transition.\npublic let to: LifecycleState\n/// The UTC timestamp when the transition occurred.\npublic let timestamp: Timestamp\n\npublic init(from: LifecycleState, to: LifecycleState, timestamp: Timestamp)",
              "documentation": ""
            },
            {
              "name": "public let to: LifecycleState",
              "line": 139,
              "signature": "public let to: LifecycleState\n/// The UTC timestamp when the transition occurred.\npublic let timestamp: Timestamp\n\npublic init(from: LifecycleState, to: LifecycleState, timestamp: Timestamp)",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 141,
              "signature": "public let timestamp: Timestamp\n\npublic init(from: LifecycleState, to: LifecycleState, timestamp: Timestamp)",
              "documentation": ""
            },
            {
              "name": "public init(from: LifecycleState, to: LifecycleState, timestamp: Timestamp)",
              "line": 143,
              "signature": "public init(from: LifecycleState, to: LifecycleState, timestamp: Timestamp)",
              "documentation": ""
            },
            {
              "name": "public enum LifecycleError: Error, Sendable, Equatable",
              "line": 153,
              "signature": "public enum LifecycleError: Error, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 159,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            },
            {
              "name": "public final class LifecycleManager: @unchecked Sendable",
              "line": 194,
              "signature": "public final class LifecycleManager: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 202,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public var state: LifecycleState",
              "line": 205,
              "signature": "public var state: LifecycleState",
              "documentation": ""
            },
            {
              "name": "public func transition(to target: LifecycleState) throws -> LifecycleTransition",
              "line": 222,
              "signature": "public func transition(to target: LifecycleState) throws -> LifecycleTransition",
              "documentation": ""
            },
            {
              "name": "public func canTransition(to target: LifecycleState) -> Bool",
              "line": 271,
              "signature": "public func canTransition(to target: LifecycleState) -> Bool",
              "documentation": ""
            },
            {
              "name": "public func validTransitions() -> [LifecycleState]",
              "line": 280,
              "signature": "public func validTransitions() -> [LifecycleState]",
              "documentation": ""
            },
            {
              "name": "public func history() -> [LifecycleTransition]",
              "line": 289,
              "signature": "public func history() -> [LifecycleTransition]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeHealth/Monitoring.swift",
          "sha256": "ab7c4d8674bb6e10f47119f0fb7fc5313b526dbc90e7cd2cf336f43aab202a39",
          "artifactSha256": "e8f8e18b471f36075eb98b07e6c33fd09d694eec955377915cbf4e7105e7efe8",
          "url": "/reference/source/forge-swift/Sources/ForgeHealth/Monitoring.swift.txt",
          "declarations": [
            {
              "name": "public struct HealthThresholds: Codable, Sendable, Equatable",
              "line": 17,
              "signature": "public struct HealthThresholds: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var degradedErrorCount: UInt64",
              "line": 19,
              "signature": "public var degradedErrorCount: UInt64\n/// Maximum error count before critical status.\npublic var criticalErrorCount: UInt64\n/// Minimum tool success rate for healthy status (0.0 to 1.0).\npublic var minToolSuccessRate: Double\n/// Minimum tool success rate for degraded (below this is critical) (0.0 to 1.0).\npublic var criticalToolSuccessRate: Double\n/// Maximum error rate before degraded status (0.0 to 1.0).\npublic var degradedErrorRate: Double\n/// Maximum error rate before critical status (0.0 to 1.0).\npublic var criticalErrorRate: Double\n\n/// Creates thresholds with sensible defaults.\npublic init(\ndegradedErrorCount: UInt64;",
              "documentation": ""
            },
            {
              "name": "public var criticalErrorCount: UInt64",
              "line": 21,
              "signature": "public var criticalErrorCount: UInt64\n/// Minimum tool success rate for healthy status (0.0 to 1.0).\npublic var minToolSuccessRate: Double\n/// Minimum tool success rate for degraded (below this is critical) (0.0 to 1.0).\npublic var criticalToolSuccessRate: Double\n/// Maximum error rate before degraded status (0.0 to 1.0).\npublic var degradedErrorRate: Double\n/// Maximum error rate before critical status (0.0 to 1.0).\npublic var criticalErrorRate: Double\n\n/// Creates thresholds with sensible defaults.\npublic init(\ndegradedErrorCount: UInt64;",
              "documentation": ""
            },
            {
              "name": "public var minToolSuccessRate: Double",
              "line": 23,
              "signature": "public var minToolSuccessRate: Double\n/// Minimum tool success rate for degraded (below this is critical) (0.0 to 1.0).\npublic var criticalToolSuccessRate: Double\n/// Maximum error rate before degraded status (0.0 to 1.0).\npublic var degradedErrorRate: Double\n/// Maximum error rate before critical status (0.0 to 1.0).\npublic var criticalErrorRate: Double\n\n/// Creates thresholds with sensible defaults.\npublic init(\ndegradedErrorCount: UInt64;",
              "documentation": ""
            },
            {
              "name": "public var criticalToolSuccessRate: Double",
              "line": 25,
              "signature": "public var criticalToolSuccessRate: Double\n/// Maximum error rate before degraded status (0.0 to 1.0).\npublic var degradedErrorRate: Double\n/// Maximum error rate before critical status (0.0 to 1.0).\npublic var criticalErrorRate: Double\n\n/// Creates thresholds with sensible defaults.\npublic init(\ndegradedErrorCount: UInt64;",
              "documentation": ""
            },
            {
              "name": "public var degradedErrorRate: Double",
              "line": 27,
              "signature": "public var degradedErrorRate: Double\n/// Maximum error rate before critical status (0.0 to 1.0).\npublic var criticalErrorRate: Double\n\n/// Creates thresholds with sensible defaults.\npublic init(\ndegradedErrorCount: UInt64;",
              "documentation": ""
            },
            {
              "name": "public var criticalErrorRate: Double",
              "line": 29,
              "signature": "public var criticalErrorRate: Double\n\n/// Creates thresholds with sensible defaults.\npublic init(\ndegradedErrorCount: UInt64;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 32,
              "signature": "public init(\ndegradedErrorCount: UInt64;",
              "documentation": ""
            },
            {
              "name": "public final class HealthMonitor: @unchecked Sendable",
              "line": 55,
              "signature": "public final class HealthMonitor: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init(thresholds: HealthThresholds;",
              "line": 63,
              "signature": "public init(thresholds: HealthThresholds;",
              "documentation": ""
            },
            {
              "name": "public var profile: HealthProfile",
              "line": 69,
              "signature": "public var profile: HealthProfile",
              "documentation": ""
            },
            {
              "name": "public func recordToolInvocation(success: Bool;",
              "line": 78,
              "signature": "public func recordToolInvocation(success: Bool;",
              "documentation": ""
            },
            {
              "name": "public func recordInference(tokens: UInt64)",
              "line": 87,
              "signature": "public func recordInference(tokens: UInt64)",
              "documentation": ""
            },
            {
              "name": "public func recordError()",
              "line": 94,
              "signature": "public func recordError()",
              "documentation": ""
            },
            {
              "name": "public func recordLifecycleTransition()",
              "line": 101,
              "signature": "public func recordLifecycleTransition()",
              "documentation": ""
            },
            {
              "name": "public func recordTaskStarted()",
              "line": 108,
              "signature": "public func recordTaskStarted()",
              "documentation": ""
            },
            {
              "name": "public func recordTaskCompleted()",
              "line": 115,
              "signature": "public func recordTaskCompleted()",
              "documentation": ""
            },
            {
              "name": "public func recordGenerationSuccess()",
              "line": 122,
              "signature": "public func recordGenerationSuccess()",
              "documentation": ""
            },
            {
              "name": "public func recordGenerationFailure()",
              "line": 129,
              "signature": "public func recordGenerationFailure()",
              "documentation": ""
            },
            {
              "name": "public func updateResources(cpu: Double, memory: UInt64)",
              "line": 140,
              "signature": "public func updateResources(cpu: Double, memory: UInt64)",
              "documentation": ""
            },
            {
              "name": "public func updateUptime(_ seconds: UInt64)",
              "line": 149,
              "signature": "public func updateUptime(_ seconds: UInt64)",
              "documentation": ""
            },
            {
              "name": "public func checkHealth() -> HealthStatus",
              "line": 160,
              "signature": "public func checkHealth() -> HealthStatus",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeHealth/Profile.swift",
          "sha256": "0a4fc28566ba54e6c81a8ff1ab88fb8e48668b8d5bf1f74894e87d7c5d7443b5",
          "artifactSha256": "530ee49968f382892231dba6ad268a2f44772c2e51546ddbf2d6649a5d04ff80",
          "url": "/reference/source/forge-swift/Sources/ForgeHealth/Profile.swift.txt",
          "declarations": [
            {
              "name": "public struct HealthProfile: Codable, Sendable, Equatable",
              "line": 26,
              "signature": "public struct HealthProfile: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var createdAt: Timestamp",
              "line": 28,
              "signature": "public var createdAt: Timestamp\n/// Total uptime of the agent in seconds.\npublic var uptimeSeconds: UInt64\n/// Total number of tool invocations.\npublic var toolInvocations: UInt64\n/// Total number of successful tool invocations.\npublic var toolSuccesses: UInt64\n/// Total number of failed tool invocations.\npublic var toolFailures: UInt64\n/// Total number of inference calls.\npublic var inferenceCalls: UInt64\n/// Total tokens consumed across all inference calls.\npublic var totalTokens: UInt64\n/// Total number of errors encountered.\npublic var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32",
              "documentation": ""
            },
            {
              "name": "public var uptimeSeconds: UInt64",
              "line": 30,
              "signature": "public var uptimeSeconds: UInt64\n/// Total number of tool invocations.\npublic var toolInvocations: UInt64\n/// Total number of successful tool invocations.\npublic var toolSuccesses: UInt64\n/// Total number of failed tool invocations.\npublic var toolFailures: UInt64\n/// Total number of inference calls.\npublic var inferenceCalls: UInt64\n/// Total tokens consumed across all inference calls.\npublic var totalTokens: UInt64\n/// Total number of errors encountered.\npublic var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///",
              "documentation": ""
            },
            {
              "name": "public var toolInvocations: UInt64",
              "line": 32,
              "signature": "public var toolInvocations: UInt64\n/// Total number of successful tool invocations.\npublic var toolSuccesses: UInt64\n/// Total number of failed tool invocations.\npublic var toolFailures: UInt64\n/// Total number of inference calls.\npublic var inferenceCalls: UInt64\n/// Total tokens consumed across all inference calls.\npublic var totalTokens: UInt64\n/// Total number of errors encountered.\npublic var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64",
              "documentation": ""
            },
            {
              "name": "public var toolSuccesses: UInt64",
              "line": 34,
              "signature": "public var toolSuccesses: UInt64\n/// Total number of failed tool invocations.\npublic var toolFailures: UInt64\n/// Total number of inference calls.\npublic var inferenceCalls: UInt64\n/// Total tokens consumed across all inference calls.\npublic var totalTokens: UInt64\n/// Total number of errors encountered.\npublic var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///",
              "documentation": ""
            },
            {
              "name": "public var toolFailures: UInt64",
              "line": 36,
              "signature": "public var toolFailures: UInt64\n/// Total number of inference calls.\npublic var inferenceCalls: UInt64\n/// Total tokens consumed across all inference calls.\npublic var totalTokens: UInt64\n/// Total number of errors encountered.\npublic var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double",
              "documentation": ""
            },
            {
              "name": "public var inferenceCalls: UInt64",
              "line": 38,
              "signature": "public var inferenceCalls: UInt64\n/// Total tokens consumed across all inference calls.\npublic var totalTokens: UInt64\n/// Total number of errors encountered.\npublic var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double",
              "documentation": ""
            },
            {
              "name": "public var totalTokens: UInt64",
              "line": 40,
              "signature": "public var totalTokens: UInt64\n/// Total number of errors encountered.\npublic var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///",
              "documentation": ""
            },
            {
              "name": "public var errorCount: UInt64",
              "line": 42,
              "signature": "public var errorCount: UInt64\n/// Total number of lifecycle transitions.\npublic var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double",
              "documentation": ""
            },
            {
              "name": "public var lifecycleTransitions: UInt64",
              "line": 44,
              "signature": "public var lifecycleTransitions: UInt64\n/// Current CPU usage as a percentage (0.0 to 100.0).\npublic var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///",
              "documentation": ""
            },
            {
              "name": "public var cpuUsagePercent: Double",
              "line": 46,
              "signature": "public var cpuUsagePercent: Double\n/// Current memory usage in bytes.\npublic var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all generation calls.\npublic var generationSuccessRate: Double",
              "documentation": ""
            },
            {
              "name": "public var memoryUsageBytes: UInt64",
              "line": 48,
              "signature": "public var memoryUsageBytes: UInt64\n/// Number of currently active (in-flight) tasks.\n///\n/// Incremented by `recordTaskStarted`, decremented by `recordTaskCompleted`.\n/// This gauge can reach zero and will not go below zero (saturating subtraction).\npublic var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all generation calls.\npublic var generationSuccessRate: Double\n/// Timestamp of the last profile update.\npublic var lastUpdated: Timestamp",
              "documentation": ""
            },
            {
              "name": "public var activeTasks: UInt32",
              "line": 53,
              "signature": "public var activeTasks: UInt32\n/// Total number of tasks completed during the agent's lifetime.\n///\n/// This counter is monotonically increasing.\npublic var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all generation calls.\npublic var generationSuccessRate: Double\n/// Timestamp of the last profile update.\npublic var lastUpdated: Timestamp\n\n/// Internal counter for generation successes (used to compute rates).\nprivate var generationSuccesses: UInt64\n/// Internal counter for generation failures (used to compute rates).\nprivate var generationFailures: UInt64",
              "documentation": ""
            },
            {
              "name": "public var completedTasks: UInt64",
              "line": 57,
              "signature": "public var completedTasks: UInt64\n/// Current error rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `errors / (errors + successes)` across all generation calls.\npublic var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all generation calls.\npublic var generationSuccessRate: Double\n/// Timestamp of the last profile update.\npublic var lastUpdated: Timestamp\n\n/// Internal counter for generation successes (used to compute rates).\nprivate var generationSuccesses: UInt64\n/// Internal counter for generation failures (used to compute rates).\nprivate var generationFailures: UInt64\n\n/// Creates a new health profile with zeroed counters and the given creation time.\npublic init()",
              "documentation": ""
            },
            {
              "name": "public var errorRate: Double",
              "line": 61,
              "signature": "public var errorRate: Double\n/// Average latency of completed operations in milliseconds.\npublic var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all generation calls.\npublic var generationSuccessRate: Double\n/// Timestamp of the last profile update.\npublic var lastUpdated: Timestamp\n\n/// Internal counter for generation successes (used to compute rates).\nprivate var generationSuccesses: UInt64\n/// Internal counter for generation failures (used to compute rates).\nprivate var generationFailures: UInt64\n\n/// Creates a new health profile with zeroed counters and the given creation time.\npublic init()",
              "documentation": ""
            },
            {
              "name": "public var avgLatencyMs: Double",
              "line": 63,
              "signature": "public var avgLatencyMs: Double\n/// Tool invocation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all tool invocations.\npublic var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all generation calls.\npublic var generationSuccessRate: Double\n/// Timestamp of the last profile update.\npublic var lastUpdated: Timestamp\n\n/// Internal counter for generation successes (used to compute rates).\nprivate var generationSuccesses: UInt64\n/// Internal counter for generation failures (used to compute rates).\nprivate var generationFailures: UInt64\n\n/// Creates a new health profile with zeroed counters and the given creation time.\npublic init()",
              "documentation": ""
            },
            {
              "name": "public var toolSuccessRate: Double",
              "line": 67,
              "signature": "public var toolSuccessRate: Double\n/// Generation success rate as a fraction (0.0 to 1.0).\n///\n/// Computed as `successes / total` across all generation calls.\npublic var generationSuccessRate: Double\n/// Timestamp of the last profile update.\npublic var lastUpdated: Timestamp\n\n/// Internal counter for generation successes (used to compute rates).\nprivate var generationSuccesses: UInt64\n/// Internal counter for generation failures (used to compute rates).\nprivate var generationFailures: UInt64\n\n/// Creates a new health profile with zeroed counters and the given creation time.\npublic init()",
              "documentation": ""
            },
            {
              "name": "public var generationSuccessRate: Double",
              "line": 71,
              "signature": "public var generationSuccessRate: Double\n/// Timestamp of the last profile update.\npublic var lastUpdated: Timestamp\n\n/// Internal counter for generation successes (used to compute rates).\nprivate var generationSuccesses: UInt64\n/// Internal counter for generation failures (used to compute rates).\nprivate var generationFailures: UInt64\n\n/// Creates a new health profile with zeroed counters and the given creation time.\npublic init()",
              "documentation": ""
            },
            {
              "name": "public var lastUpdated: Timestamp",
              "line": 73,
              "signature": "public var lastUpdated: Timestamp\n\n/// Internal counter for generation successes (used to compute rates).\nprivate var generationSuccesses: UInt64\n/// Internal counter for generation failures (used to compute rates).\nprivate var generationFailures: UInt64\n\n/// Creates a new health profile with zeroed counters and the given creation time.\npublic init()",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 81,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public mutating func recordToolInvocation(success: Bool;",
              "line": 108,
              "signature": "public mutating func recordToolInvocation(success: Bool;",
              "documentation": ""
            },
            {
              "name": "public mutating func recordInference(tokens: UInt64)",
              "line": 122,
              "signature": "public mutating func recordInference(tokens: UInt64)",
              "documentation": ""
            },
            {
              "name": "public mutating func recordError()",
              "line": 129,
              "signature": "public mutating func recordError()",
              "documentation": ""
            },
            {
              "name": "public mutating func recordLifecycleTransition()",
              "line": 135,
              "signature": "public mutating func recordLifecycleTransition()",
              "documentation": ""
            },
            {
              "name": "public mutating func updateResources(cpu: Double, memory: UInt64)",
              "line": 147,
              "signature": "public mutating func updateResources(cpu: Double, memory: UInt64)",
              "documentation": ""
            },
            {
              "name": "public mutating func updateUptime(_ seconds: UInt64)",
              "line": 156,
              "signature": "public mutating func updateUptime(_ seconds: UInt64)",
              "documentation": ""
            },
            {
              "name": "public mutating func recordTaskStarted()",
              "line": 164,
              "signature": "public mutating func recordTaskStarted()",
              "documentation": ""
            },
            {
              "name": "public mutating func recordTaskCompleted()",
              "line": 175,
              "signature": "public mutating func recordTaskCompleted()",
              "documentation": ""
            },
            {
              "name": "public mutating func recordGenerationSuccess()",
              "line": 187,
              "signature": "public mutating func recordGenerationSuccess()",
              "documentation": ""
            },
            {
              "name": "public mutating func recordGenerationFailure()",
              "line": 197,
              "signature": "public mutating func recordGenerationFailure()",
              "documentation": ""
            },
            {
              "name": "public var averageTokensPerCall: Double?",
              "line": 207,
              "signature": "public var averageTokensPerCall: Double?",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeHealth/Reporting.swift",
          "sha256": "29c5e4afae39c920bc3bd2a88dc449cf1ab8fdab5dc9cc4b866e0c581a2c63ba",
          "artifactSha256": "64d31268ed5af29855c3b76732efb8ebe4a3ba09afd3eacc17354bc0f8292294",
          "url": "/reference/source/forge-swift/Sources/ForgeHealth/Reporting.swift.txt",
          "declarations": [
            {
              "name": "public enum HealthStatus: Sendable, Equatable",
              "line": 17,
              "signature": "public enum HealthStatus: Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var description: String",
              "line": 27,
              "signature": "public var description: String",
              "documentation": ""
            },
            {
              "name": "public struct HealthReport: Sendable",
              "line": 45,
              "signature": "public struct HealthReport: Sendable",
              "documentation": ""
            },
            {
              "name": "public let profile: HealthProfile",
              "line": 47,
              "signature": "public let profile: HealthProfile\n/// The current lifecycle state.\npublic let lifecycleState: LifecycleState\n/// The assessed health status.\npublic let status: HealthStatus\n/// When this report was generated.\npublic let generatedAt: Timestamp\n\n/// Creates a new health report.\n///\n/// - Parameters:\n///   - profile: The current health profile.\n///   - lifecycleState: The current lifecycle state.\n///   - status: The assessed health status.\npublic init(profile: HealthProfile, lifecycleState: LifecycleState, status: HealthStatus)",
              "documentation": ""
            },
            {
              "name": "public let lifecycleState: LifecycleState",
              "line": 49,
              "signature": "public let lifecycleState: LifecycleState\n/// The assessed health status.\npublic let status: HealthStatus\n/// When this report was generated.\npublic let generatedAt: Timestamp\n\n/// Creates a new health report.\n///\n/// - Parameters:\n///   - profile: The current health profile.\n///   - lifecycleState: The current lifecycle state.\n///   - status: The assessed health status.\npublic init(profile: HealthProfile, lifecycleState: LifecycleState, status: HealthStatus)",
              "documentation": ""
            },
            {
              "name": "public let status: HealthStatus",
              "line": 51,
              "signature": "public let status: HealthStatus\n/// When this report was generated.\npublic let generatedAt: Timestamp\n\n/// Creates a new health report.\n///\n/// - Parameters:\n///   - profile: The current health profile.\n///   - lifecycleState: The current lifecycle state.\n///   - status: The assessed health status.\npublic init(profile: HealthProfile, lifecycleState: LifecycleState, status: HealthStatus)",
              "documentation": ""
            },
            {
              "name": "public let generatedAt: Timestamp",
              "line": 53,
              "signature": "public let generatedAt: Timestamp\n\n/// Creates a new health report.\n///\n/// - Parameters:\n///   - profile: The current health profile.\n///   - lifecycleState: The current lifecycle state.\n///   - status: The assessed health status.\npublic init(profile: HealthProfile, lifecycleState: LifecycleState, status: HealthStatus)",
              "documentation": ""
            },
            {
              "name": "public init(profile: HealthProfile, lifecycleState: LifecycleState, status: HealthStatus)",
              "line": 61,
              "signature": "public init(profile: HealthProfile, lifecycleState: LifecycleState, status: HealthStatus)",
              "documentation": ""
            },
            {
              "name": "public var isHealthy: Bool",
              "line": 69,
              "signature": "public var isHealthy: Bool",
              "documentation": ""
            },
            {
              "name": "public func generateHealthReport(",
              "line": 81,
              "signature": "public func generateHealthReport(\nlifecycle: LifecycleManager,\nmonitor: HealthMonitor\n) -> HealthReport",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeAgent",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeAgent library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeAgent",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeAgent/Agent.swift",
          "sha256": "a79107d6df9f886d47808a1f37f5c398ec7052b76bad9a89fb9a3a17e3f265f3",
          "artifactSha256": "bad46fdfb90cec2ebe9989223d96aa9bd02c5173927de5ab2ecd5253213713e5",
          "url": "/reference/source/forge-swift/Sources/ForgeAgent/Agent.swift.txt",
          "declarations": [
            {
              "name": "public struct AgentConfig: Sendable",
              "line": 19,
              "signature": "public struct AgentConfig: Sendable",
              "documentation": ""
            },
            {
              "name": "public let providerRef: String",
              "line": 21,
              "signature": "public let providerRef: String\n/// System instruction for the agent.\npublic let systemPrompt: String?\n/// Maximum number of tool loop steps before stopping.\npublic let maxSteps: Int\n/// Maximum total tokens before stopping.\npublic let maxTokens: UInt64\n/// Generation options for inference calls.\npublic let options: GenerateOptions\n/// Agent name for logging and telemetry.\npublic let name: String?\n\npublic init(\nproviderRef: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let systemPrompt: String?",
              "line": 23,
              "signature": "public let systemPrompt: String?\n/// Maximum number of tool loop steps before stopping.\npublic let maxSteps: Int\n/// Maximum total tokens before stopping.\npublic let maxTokens: UInt64\n/// Generation options for inference calls.\npublic let options: GenerateOptions\n/// Agent name for logging and telemetry.\npublic let name: String?\n\npublic init(\nproviderRef: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let maxSteps: Int",
              "line": 25,
              "signature": "public let maxSteps: Int\n/// Maximum total tokens before stopping.\npublic let maxTokens: UInt64\n/// Generation options for inference calls.\npublic let options: GenerateOptions\n/// Agent name for logging and telemetry.\npublic let name: String?\n\npublic init(\nproviderRef: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let maxTokens: UInt64",
              "line": 27,
              "signature": "public let maxTokens: UInt64\n/// Generation options for inference calls.\npublic let options: GenerateOptions\n/// Agent name for logging and telemetry.\npublic let name: String?\n\npublic init(\nproviderRef: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let options: GenerateOptions",
              "line": 29,
              "signature": "public let options: GenerateOptions\n/// Agent name for logging and telemetry.\npublic let name: String?\n\npublic init(\nproviderRef: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let name: String?",
              "line": 31,
              "signature": "public let name: String?\n\npublic init(\nproviderRef: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 33,
              "signature": "public init(\nproviderRef: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public struct AgentOutput: Sendable",
              "line": 53,
              "signature": "public struct AgentOutput: Sendable",
              "documentation": ""
            },
            {
              "name": "public let text: String",
              "line": 55,
              "signature": "public let text: String\n/// All messages in the conversation (including tool calls and results).\npublic let messages: [ModelMessage]\n/// Total usage across all inference calls.\npublic let usage: Usage\n/// Number of tool loop steps executed.\npublic let steps: Int\n/// The finish reason of the final inference call.\npublic let finishReason: FinishReason\n\npublic init(\ntext: String,\nmessages: [ModelMessage],\nusage: Usage,\nsteps: Int,\nfinishReason: FinishReason\n)",
              "documentation": ""
            },
            {
              "name": "public let messages: [ModelMessage]",
              "line": 57,
              "signature": "public let messages: [ModelMessage]\n/// Total usage across all inference calls.\npublic let usage: Usage\n/// Number of tool loop steps executed.\npublic let steps: Int\n/// The finish reason of the final inference call.\npublic let finishReason: FinishReason\n\npublic init(\ntext: String,\nmessages: [ModelMessage],\nusage: Usage,\nsteps: Int,\nfinishReason: FinishReason\n)",
              "documentation": ""
            },
            {
              "name": "public let usage: Usage",
              "line": 59,
              "signature": "public let usage: Usage\n/// Number of tool loop steps executed.\npublic let steps: Int\n/// The finish reason of the final inference call.\npublic let finishReason: FinishReason\n\npublic init(\ntext: String,\nmessages: [ModelMessage],\nusage: Usage,\nsteps: Int,\nfinishReason: FinishReason\n)",
              "documentation": ""
            },
            {
              "name": "public let steps: Int",
              "line": 61,
              "signature": "public let steps: Int\n/// The finish reason of the final inference call.\npublic let finishReason: FinishReason\n\npublic init(\ntext: String,\nmessages: [ModelMessage],\nusage: Usage,\nsteps: Int,\nfinishReason: FinishReason\n)",
              "documentation": ""
            },
            {
              "name": "public let finishReason: FinishReason",
              "line": 63,
              "signature": "public let finishReason: FinishReason\n\npublic init(\ntext: String,\nmessages: [ModelMessage],\nusage: Usage,\nsteps: Int,\nfinishReason: FinishReason\n)",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 65,
              "signature": "public init(\ntext: String,\nmessages: [ModelMessage],\nusage: Usage,\nsteps: Int,\nfinishReason: FinishReason\n)",
              "documentation": ""
            },
            {
              "name": "public protocol ForgeAgent: Sendable",
              "line": 88,
              "signature": "public protocol ForgeAgent: Sendable",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAgent/LoopControl.swift",
          "sha256": "d2c9559b6ee9ca05a1a3bc0b3b2b9846582cd0a7afd332acce5fc7d1be155e93",
          "artifactSha256": "e65c153abe1785b9f9e47c85d5d5db1a85019050b12e482d86fd17b9e93be38d",
          "url": "/reference/source/forge-swift/Sources/ForgeAgent/LoopControl.swift.txt",
          "declarations": [
            {
              "name": "public enum StopCondition: Sendable",
              "line": 14,
              "signature": "public enum StopCondition: Sendable",
              "documentation": ""
            },
            {
              "name": "public struct LoopState: Sendable",
              "line": 26,
              "signature": "public struct LoopState: Sendable",
              "documentation": ""
            },
            {
              "name": "public let step: Int",
              "line": 28,
              "signature": "public let step: Int\n/// Total tokens consumed so far.\npublic let totalTokens: UInt64\n/// The finish reason from the last inference call.\npublic let lastFinishReason: FinishReason?\n/// The messages accumulated so far.\npublic let messageCount: Int\n\npublic init(step: Int, totalTokens: UInt64, lastFinishReason: FinishReason?, messageCount: Int)",
              "documentation": ""
            },
            {
              "name": "public let totalTokens: UInt64",
              "line": 30,
              "signature": "public let totalTokens: UInt64\n/// The finish reason from the last inference call.\npublic let lastFinishReason: FinishReason?\n/// The messages accumulated so far.\npublic let messageCount: Int\n\npublic init(step: Int, totalTokens: UInt64, lastFinishReason: FinishReason?, messageCount: Int)",
              "documentation": ""
            },
            {
              "name": "public let lastFinishReason: FinishReason?",
              "line": 32,
              "signature": "public let lastFinishReason: FinishReason?\n/// The messages accumulated so far.\npublic let messageCount: Int\n\npublic init(step: Int, totalTokens: UInt64, lastFinishReason: FinishReason?, messageCount: Int)",
              "documentation": ""
            },
            {
              "name": "public let messageCount: Int",
              "line": 34,
              "signature": "public let messageCount: Int\n\npublic init(step: Int, totalTokens: UInt64, lastFinishReason: FinishReason?, messageCount: Int)",
              "documentation": ""
            },
            {
              "name": "public init(step: Int, totalTokens: UInt64, lastFinishReason: FinishReason?, messageCount: Int)",
              "line": 36,
              "signature": "public init(step: Int, totalTokens: UInt64, lastFinishReason: FinishReason?, messageCount: Int)",
              "documentation": ""
            },
            {
              "name": "public func evaluateStopConditions(",
              "line": 50,
              "signature": "public func evaluateStopConditions(\n_ conditions: [StopCondition],\nstate: LoopState\n) -> StopCondition?",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAgent/Messaging.swift",
          "sha256": "5e57139cfd39d546b5f6c04d8677c9d5d7e7eea162e512c854cc6fb16c5794c6",
          "artifactSha256": "28fd4297653553432861604ea177f274e8b6a3e99e396530144417cd2ae1815f",
          "url": "/reference/source/forge-swift/Sources/ForgeAgent/Messaging.swift.txt",
          "declarations": [
            {
              "name": "public struct AgentMessage: Codable, Sendable",
              "line": 14,
              "signature": "public struct AgentMessage: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let senderDid: String?",
              "line": 16,
              "signature": "public let senderDid: String?\n/// The recipient agent identifier.\npublic let recipientDid: String?\n/// The message type.\npublic let messageType: String\n/// The message payload.\npublic let payload: JSONValue\n/// When the message was created.\npublic let timestamp: Timestamp\n\npublic init(\nsenderDid: String?;",
              "documentation": ""
            },
            {
              "name": "public let recipientDid: String?",
              "line": 18,
              "signature": "public let recipientDid: String?\n/// The message type.\npublic let messageType: String\n/// The message payload.\npublic let payload: JSONValue\n/// When the message was created.\npublic let timestamp: Timestamp\n\npublic init(\nsenderDid: String?;",
              "documentation": ""
            },
            {
              "name": "public let messageType: String",
              "line": 20,
              "signature": "public let messageType: String\n/// The message payload.\npublic let payload: JSONValue\n/// When the message was created.\npublic let timestamp: Timestamp\n\npublic init(\nsenderDid: String?;",
              "documentation": ""
            },
            {
              "name": "public let payload: JSONValue",
              "line": 22,
              "signature": "public let payload: JSONValue\n/// When the message was created.\npublic let timestamp: Timestamp\n\npublic init(\nsenderDid: String?;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 24,
              "signature": "public let timestamp: Timestamp\n\npublic init(\nsenderDid: String?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 26,
              "signature": "public init(\nsenderDid: String?;",
              "documentation": ""
            },
            {
              "name": "public final class AgentMessageChannel: @unchecked Sendable",
              "line": 44,
              "signature": "public final class AgentMessageChannel: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 48,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func send(_ message: AgentMessage)",
              "line": 53,
              "signature": "public func send(_ message: AgentMessage)",
              "documentation": ""
            },
            {
              "name": "public func receiveAll() -> [AgentMessage]",
              "line": 62,
              "signature": "public func receiveAll() -> [AgentMessage]",
              "documentation": ""
            },
            {
              "name": "public var count: Int",
              "line": 71,
              "signature": "public var count: Int",
              "documentation": ""
            },
            {
              "name": "public var isEmpty: Bool",
              "line": 78,
              "signature": "public var isEmpty: Bool",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAgent/SubAgent.swift",
          "sha256": "32ef351e68016317a606cd8ff5fcd40507a3b967873b99b9602ad3a8f45ac3a3",
          "artifactSha256": "277bc24afbd8447d05044c5666c34f117579836c1f56456d86ff362dc5ca2868",
          "url": "/reference/source/forge-swift/Sources/ForgeAgent/SubAgent.swift.txt",
          "declarations": [
            {
              "name": "public struct SubAgentConfig: Sendable",
              "line": 17,
              "signature": "public struct SubAgentConfig: Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 19,
              "signature": "public let name: String\n/// The system prompt for the sub-agent.\npublic let systemPrompt: String?\n/// Maximum tool loop steps for the sub-agent.\npublic let maxSteps: Int\n/// Tools available to the sub-agent (subset of parent's tools).\npublic let allowedTools: [String]?\n\npublic init(\nname: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let systemPrompt: String?",
              "line": 21,
              "signature": "public let systemPrompt: String?\n/// Maximum tool loop steps for the sub-agent.\npublic let maxSteps: Int\n/// Tools available to the sub-agent (subset of parent's tools).\npublic let allowedTools: [String]?\n\npublic init(\nname: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let maxSteps: Int",
              "line": 23,
              "signature": "public let maxSteps: Int\n/// Tools available to the sub-agent (subset of parent's tools).\npublic let allowedTools: [String]?\n\npublic init(\nname: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let allowedTools: [String]?",
              "line": 25,
              "signature": "public let allowedTools: [String]?\n\npublic init(\nname: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 27,
              "signature": "public init(\nname: String,\nsystemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public func createSubAgent(",
              "line": 54,
              "signature": "public func createSubAgent(\nmodel: any LanguageModel,\nconfig: SubAgentConfig,\nparentRegistry: ToolRegistry,\napprovalHandler: any ToolApprovalHandler;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAgent/ToolLoop.swift",
          "sha256": "0c98802f307a6b24c7f09aedf47eac43afff2313a66ddd8d4195c06f2d8fcb62",
          "artifactSha256": "cb5cb554e9c44a8f5c07b789f17b176bfbabae4b88c19ce455ed4ead02932c07",
          "url": "/reference/source/forge-swift/Sources/ForgeAgent/ToolLoop.swift.txt",
          "declarations": [
            {
              "name": "public final class ToolLoopAgent: ForgeAgent, @unchecked Sendable",
              "line": 36,
              "signature": "public final class ToolLoopAgent: ForgeAgent, @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public let config: AgentConfig",
              "line": 37,
              "signature": "public let config: AgentConfig\n\nprivate let model: any LanguageModel\nprivate let toolRegistry: ToolRegistry\nprivate let approvalHandler: any ToolApprovalHandler\nprivate let telemetry: any TelemetryEmitter\nprivate let lifecycleManager: LifecycleManager\nprivate let healthMonitor: HealthMonitor\n\n/// Creates a new tool loop agent.\n///\n/// - Parameters:\n///   - model: The language model to use.\n///   - config: The agent configuration.\n///   - toolRegistry: The registry of available tools.\n///   - approvalHandler: The tool approval handler. Defaults to auto-approve.\n///   - telemetry: The telemetry emitter. Defaults to no-op.\npublic init(\nmodel: any LanguageModel,\nconfig: AgentConfig,\ntoolRegistry: ToolRegistry;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 54,
              "signature": "public init(\nmodel: any LanguageModel,\nconfig: AgentConfig,\ntoolRegistry: ToolRegistry;",
              "documentation": ""
            },
            {
              "name": "public func health() -> HealthProfile",
              "line": 71,
              "signature": "public func health() -> HealthProfile",
              "documentation": ""
            },
            {
              "name": "public func lifecycle() -> LifecycleState",
              "line": 76,
              "signature": "public func lifecycle() -> LifecycleState",
              "documentation": ""
            },
            {
              "name": "public func start() throws",
              "line": 87,
              "signature": "public func start() throws",
              "documentation": ""
            },
            {
              "name": "public func run(input: String) async throws -> AgentOutput",
              "line": 99,
              "signature": "public func run(input: String) async throws -> AgentOutput",
              "documentation": ""
            },
            {
              "name": "public func stop() throws",
              "line": 210,
              "signature": "public func stop() throws",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAgent/Workflow.swift",
          "sha256": "9a204d8d98615b3e604d7c6514698eb7c480514225efe6b2a2cccd893b952317",
          "artifactSha256": "31f5c5ca70519b1fd3e27142a46a568ae1ea0e44341d8e58a652039af92351c5",
          "url": "/reference/source/forge-swift/Sources/ForgeAgent/Workflow.swift.txt",
          "declarations": [
            {
              "name": "public struct WorkflowStep: Sendable",
              "line": 15,
              "signature": "public struct WorkflowStep: Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 17,
              "signature": "public let name: String\n/// The step execution function.\npublic let execute: @Sendable (String) async throws -> String\n\npublic init(name: String, execute: @escaping @Sendable (String) async throws -> String)",
              "documentation": ""
            },
            {
              "name": "public let execute: @Sendable (String) async throws -> String",
              "line": 19,
              "signature": "public let execute: @Sendable (String) async throws -> String\n\npublic init(name: String, execute: @escaping @Sendable (String) async throws -> String)",
              "documentation": ""
            },
            {
              "name": "public init(name: String, execute: @escaping @Sendable (String) async throws -> String)",
              "line": 21,
              "signature": "public init(name: String, execute: @escaping @Sendable (String) async throws -> String)",
              "documentation": ""
            },
            {
              "name": "public func executeSequentialWorkflow(",
              "line": 37,
              "signature": "public func executeSequentialWorkflow(\nsteps: [WorkflowStep],\ninput: String\n) async throws -> String",
              "documentation": ""
            },
            {
              "name": "public func executeParallelWorkflow(",
              "line": 57,
              "signature": "public func executeParallelWorkflow(\nsteps: [WorkflowStep],\ninput: String\n) async throws -> [String]",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeEmbed",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeEmbed library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeEmbed",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeEmbed/Chunking.swift",
          "sha256": "07f055e6dc3e3a0fcd302f67ca322d2486f9760416a9c548498d6cc16650b273",
          "artifactSha256": "5b257bb73b6e1069a9a1616cdcf3d8bce2084340412f0826bacb435e3cbf5015",
          "url": "/reference/source/forge-swift/Sources/ForgeEmbed/Chunking.swift.txt",
          "declarations": [
            {
              "name": "public struct TextChunk: Sendable",
              "line": 11,
              "signature": "public struct TextChunk: Sendable",
              "documentation": ""
            },
            {
              "name": "public let content: String",
              "line": 13,
              "signature": "public let content: String\n/// The zero-based index of this chunk.\npublic let index: Int\n/// The character offset in the original text.\npublic let offset: Int\n\npublic init(content: String, index: Int, offset: Int)",
              "documentation": ""
            },
            {
              "name": "public let index: Int",
              "line": 15,
              "signature": "public let index: Int\n/// The character offset in the original text.\npublic let offset: Int\n\npublic init(content: String, index: Int, offset: Int)",
              "documentation": ""
            },
            {
              "name": "public let offset: Int",
              "line": 17,
              "signature": "public let offset: Int\n\npublic init(content: String, index: Int, offset: Int)",
              "documentation": ""
            },
            {
              "name": "public init(content: String, index: Int, offset: Int)",
              "line": 19,
              "signature": "public init(content: String, index: Int, offset: Int)",
              "documentation": ""
            },
            {
              "name": "public protocol ChunkingStrategy: Sendable",
              "line": 27,
              "signature": "public protocol ChunkingStrategy: Sendable",
              "documentation": ""
            },
            {
              "name": "public struct FixedSizeChunker: ChunkingStrategy, Sendable",
              "line": 36,
              "signature": "public struct FixedSizeChunker: ChunkingStrategy, Sendable",
              "documentation": ""
            },
            {
              "name": "public let chunkSize: Int",
              "line": 38,
              "signature": "public let chunkSize: Int\n/// The number of characters to overlap between adjacent chunks.\npublic let overlap: Int\n\n/// Creates a fixed-size chunker.\n///\n/// - Parameters:\n///   - chunkSize: Maximum characters per chunk.\n///   - overlap: Character overlap between chunks.\npublic init(chunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public let overlap: Int",
              "line": 40,
              "signature": "public let overlap: Int\n\n/// Creates a fixed-size chunker.\n///\n/// - Parameters:\n///   - chunkSize: Maximum characters per chunk.\n///   - overlap: Character overlap between chunks.\npublic init(chunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public init(chunkSize: Int;",
              "line": 47,
              "signature": "public init(chunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public func chunk(_ text: String) -> [TextChunk]",
              "line": 52,
              "signature": "public func chunk(_ text: String) -> [TextChunk]",
              "documentation": ""
            },
            {
              "name": "public struct ParagraphChunker: ChunkingStrategy, Sendable",
              "line": 78,
              "signature": "public struct ParagraphChunker: ChunkingStrategy, Sendable",
              "documentation": ""
            },
            {
              "name": "public let maxChunkSize: Int",
              "line": 80,
              "signature": "public let maxChunkSize: Int\n\n/// Creates a paragraph chunker.\n///\n/// - Parameter maxChunkSize: Maximum characters per chunk.\npublic init(maxChunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public init(maxChunkSize: Int;",
              "line": 85,
              "signature": "public init(maxChunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public func chunk(_ text: String) -> [TextChunk]",
              "line": 89,
              "signature": "public func chunk(_ text: String) -> [TextChunk]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeEmbed/Provider.swift",
          "sha256": "43abe80d63c8dde6689e710a3909ae310ef10af3bdf20a0e04a1e14d1217e1ab",
          "artifactSha256": "37dc8118487410603648cf064d0f520bffe56bf1a03469b59d6fa77f1be9e45c",
          "url": "/reference/source/forge-swift/Sources/ForgeEmbed/Provider.swift.txt",
          "declarations": [
            {
              "name": "public struct EmbeddingResult: Sendable",
              "line": 12,
              "signature": "public struct EmbeddingResult: Sendable",
              "documentation": ""
            },
            {
              "name": "public let embedding: [Float]",
              "line": 14,
              "signature": "public let embedding: [Float]\n/// The input text that was embedded.\npublic let input: String\n/// Token usage for this embedding call.\npublic let usage: Usage\n\npublic init(embedding: [Float], input: String, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public let input: String",
              "line": 16,
              "signature": "public let input: String\n/// Token usage for this embedding call.\npublic let usage: Usage\n\npublic init(embedding: [Float], input: String, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public let usage: Usage",
              "line": 18,
              "signature": "public let usage: Usage\n\npublic init(embedding: [Float], input: String, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public init(embedding: [Float], input: String, usage: Usage)",
              "line": 20,
              "signature": "public init(embedding: [Float], input: String, usage: Usage)",
              "documentation": ""
            },
            {
              "name": "public protocol EmbeddingProvider: Sendable",
              "line": 31,
              "signature": "public protocol EmbeddingProvider: Sendable",
              "documentation": ""
            },
            {
              "name": "public func embedBatch(texts: [String], options: EmbedOptions) async throws -> [EmbeddingResult]",
              "line": 62,
              "signature": "public func embedBatch(texts: [String], options: EmbedOptions) async throws -> [EmbeddingResult]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeEmbed/Similarity.swift",
          "sha256": "2b537c18e1d0b409f04e811c1092f23075f4d3ce894bc81ba780416f03e12ca8",
          "artifactSha256": "7b174b05ead579625a0038d8932bc79b8f1da6d452048391ab14ef96c46917cc",
          "url": "/reference/source/forge-swift/Sources/ForgeEmbed/Similarity.swift.txt",
          "declarations": [
            {
              "name": "public enum DistanceMetric: String, Codable, Sendable",
              "line": 11,
              "signature": "public enum DistanceMetric: String, Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public func computeSimilarity(",
              "line": 29,
              "signature": "public func computeSimilarity(\n_ a: [Float],\n_ b: [Float],\nmetric: DistanceMetric\n) -> Float",
              "documentation": ""
            },
            {
              "name": "public func cosineSimilarity(_ a: [Float], _ b: [Float]) -> Float",
              "line": 49,
              "signature": "public func cosineSimilarity(_ a: [Float], _ b: [Float]) -> Float",
              "documentation": ""
            },
            {
              "name": "public func euclideanDistance(_ a: [Float], _ b: [Float]) -> Float",
              "line": 60,
              "signature": "public func euclideanDistance(_ a: [Float], _ b: [Float]) -> Float",
              "documentation": ""
            },
            {
              "name": "public func dotProduct(_ a: [Float], _ b: [Float]) -> Float",
              "line": 72,
              "signature": "public func dotProduct(_ a: [Float], _ b: [Float]) -> Float",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeEmbed/VectorStore.swift",
          "sha256": "997144a27ae045a83b4c30de42b686cdda9d9008d432ee64fa489bbb81057b15",
          "artifactSha256": "7fecaa553a2ab0629930ae70a7b7710972a961f4f6c4de9422092c2e69a43a98",
          "url": "/reference/source/forge-swift/Sources/ForgeEmbed/VectorStore.swift.txt",
          "declarations": [
            {
              "name": "public struct VectorDocument: Sendable",
              "line": 13,
              "signature": "public struct VectorDocument: Sendable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 15,
              "signature": "public let id: String\n/// The original text content.\npublic let content: String\n/// The embedding vector.\npublic let embedding: [Float]\n/// Optional metadata.\npublic let metadata: [String: JSONValue]\n\npublic init(id: String, content: String, embedding: [Float], metadata: [String: JSONValue];",
              "documentation": ""
            },
            {
              "name": "public let content: String",
              "line": 17,
              "signature": "public let content: String\n/// The embedding vector.\npublic let embedding: [Float]\n/// Optional metadata.\npublic let metadata: [String: JSONValue]\n\npublic init(id: String, content: String, embedding: [Float], metadata: [String: JSONValue];",
              "documentation": ""
            },
            {
              "name": "public let embedding: [Float]",
              "line": 19,
              "signature": "public let embedding: [Float]\n/// Optional metadata.\npublic let metadata: [String: JSONValue]\n\npublic init(id: String, content: String, embedding: [Float], metadata: [String: JSONValue];",
              "documentation": ""
            },
            {
              "name": "public let metadata: [String: JSONValue]",
              "line": 21,
              "signature": "public let metadata: [String: JSONValue]\n\npublic init(id: String, content: String, embedding: [Float], metadata: [String: JSONValue];",
              "documentation": ""
            },
            {
              "name": "public init(id: String, content: String, embedding: [Float], metadata: [String: JSONValue];",
              "line": 23,
              "signature": "public init(id: String, content: String, embedding: [Float], metadata: [String: JSONValue];",
              "documentation": ""
            },
            {
              "name": "public struct SearchResult: Sendable",
              "line": 32,
              "signature": "public struct SearchResult: Sendable",
              "documentation": ""
            },
            {
              "name": "public let document: VectorDocument",
              "line": 34,
              "signature": "public let document: VectorDocument\n/// The similarity score.\npublic let score: Float\n\npublic init(document: VectorDocument, score: Float)",
              "documentation": ""
            },
            {
              "name": "public let score: Float",
              "line": 36,
              "signature": "public let score: Float\n\npublic init(document: VectorDocument, score: Float)",
              "documentation": ""
            },
            {
              "name": "public init(document: VectorDocument, score: Float)",
              "line": 38,
              "signature": "public init(document: VectorDocument, score: Float)",
              "documentation": ""
            },
            {
              "name": "public final class InMemoryVectorStore: @unchecked Sendable",
              "line": 49,
              "signature": "public final class InMemoryVectorStore: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init(metric: DistanceMetric;",
              "line": 57,
              "signature": "public init(metric: DistanceMetric;",
              "documentation": ""
            },
            {
              "name": "public func add(_ document: VectorDocument)",
              "line": 64,
              "signature": "public func add(_ document: VectorDocument)",
              "documentation": ""
            },
            {
              "name": "public func addBatch(_ documents: [VectorDocument])",
              "line": 73,
              "signature": "public func addBatch(_ documents: [VectorDocument])",
              "documentation": ""
            },
            {
              "name": "public func search(query: [Float], topK: Int;",
              "line": 88,
              "signature": "public func search(query: [Float], topK: Int;",
              "documentation": ""
            },
            {
              "name": "public func remove(_ id: String) -> VectorDocument?",
              "line": 124,
              "signature": "public func remove(_ id: String) -> VectorDocument?",
              "documentation": ""
            },
            {
              "name": "public var count: Int",
              "line": 131,
              "signature": "public var count: Int",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeMedia",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeMedia library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeMedia",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeMedia/Image.swift",
          "sha256": "1417377e0ef714b84e6b2cf0bf4aa1da383f60e0b7d20f5f4b42c01df997377d",
          "artifactSha256": "85ca2e35c968025f9593035389d7fc979c3424d52d1a29a593e8f93c9e0aea99",
          "url": "/reference/source/forge-swift/Sources/ForgeMedia/Image.swift.txt",
          "declarations": [
            {
              "name": "public struct ImageGenerationResult: Sendable",
              "line": 10,
              "signature": "public struct ImageGenerationResult: Sendable",
              "documentation": ""
            },
            {
              "name": "public let data: String",
              "line": 12,
              "signature": "public let data: String\n/// The MIME type of the image.\npublic let mediaType: String\n/// The revised prompt (if the provider rewrote it).\npublic let revisedPrompt: String?\n/// Token usage (if applicable).\npublic let usage: Usage?\n\npublic init(data: String, mediaType: String, revisedPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let mediaType: String",
              "line": 14,
              "signature": "public let mediaType: String\n/// The revised prompt (if the provider rewrote it).\npublic let revisedPrompt: String?\n/// Token usage (if applicable).\npublic let usage: Usage?\n\npublic init(data: String, mediaType: String, revisedPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let revisedPrompt: String?",
              "line": 16,
              "signature": "public let revisedPrompt: String?\n/// Token usage (if applicable).\npublic let usage: Usage?\n\npublic init(data: String, mediaType: String, revisedPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public let usage: Usage?",
              "line": 18,
              "signature": "public let usage: Usage?\n\npublic init(data: String, mediaType: String, revisedPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public init(data: String, mediaType: String, revisedPrompt: String?;",
              "line": 20,
              "signature": "public init(data: String, mediaType: String, revisedPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public struct ImageGenerationOptions: Codable, Sendable",
              "line": 29,
              "signature": "public struct ImageGenerationOptions: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var size: String?",
              "line": 31,
              "signature": "public var size: String?\n/// The image quality (e.g., \"standard\", \"hd\").\npublic var quality: String?\n/// The number of images to generate.\npublic var count: Int?\n/// The response format (e.g., \"b64_json\", \"url\").\npublic var responseFormat: String?\n\npublic init(size: String?;",
              "documentation": ""
            },
            {
              "name": "public var quality: String?",
              "line": 33,
              "signature": "public var quality: String?\n/// The number of images to generate.\npublic var count: Int?\n/// The response format (e.g., \"b64_json\", \"url\").\npublic var responseFormat: String?\n\npublic init(size: String?;",
              "documentation": ""
            },
            {
              "name": "public var count: Int?",
              "line": 35,
              "signature": "public var count: Int?\n/// The response format (e.g., \"b64_json\", \"url\").\npublic var responseFormat: String?\n\npublic init(size: String?;",
              "documentation": ""
            },
            {
              "name": "public var responseFormat: String?",
              "line": 37,
              "signature": "public var responseFormat: String?\n\npublic init(size: String?;",
              "documentation": ""
            },
            {
              "name": "public init(size: String?;",
              "line": 39,
              "signature": "public init(size: String?;",
              "documentation": ""
            },
            {
              "name": "public protocol ImageProvider: Sendable",
              "line": 48,
              "signature": "public protocol ImageProvider: Sendable",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeMedia/Speech.swift",
          "sha256": "7c2399df94b564accb70f4f8ff247d4fdf3695580b4d941adfb3b46b83f3f78f",
          "artifactSha256": "5db70d223e68b10fe79d4d0e77cdf2d4568283ae64d69becb49ccfefac3fac1a",
          "url": "/reference/source/forge-swift/Sources/ForgeMedia/Speech.swift.txt",
          "declarations": [
            {
              "name": "public struct SpeechResult: Sendable",
              "line": 10,
              "signature": "public struct SpeechResult: Sendable",
              "documentation": ""
            },
            {
              "name": "public let audioData: Data",
              "line": 12,
              "signature": "public let audioData: Data\n/// The MIME type of the audio (e.g., \"audio/mp3\").\npublic let mimeType: String\n/// Duration of the audio in seconds.\npublic let duration: Double?\n\npublic init(audioData: Data, mimeType: String, duration: Double?;",
              "documentation": ""
            },
            {
              "name": "public let mimeType: String",
              "line": 14,
              "signature": "public let mimeType: String\n/// Duration of the audio in seconds.\npublic let duration: Double?\n\npublic init(audioData: Data, mimeType: String, duration: Double?;",
              "documentation": ""
            },
            {
              "name": "public let duration: Double?",
              "line": 16,
              "signature": "public let duration: Double?\n\npublic init(audioData: Data, mimeType: String, duration: Double?;",
              "documentation": ""
            },
            {
              "name": "public init(audioData: Data, mimeType: String, duration: Double?;",
              "line": 18,
              "signature": "public init(audioData: Data, mimeType: String, duration: Double?;",
              "documentation": ""
            },
            {
              "name": "public struct SpeechOptions: Codable, Sendable",
              "line": 26,
              "signature": "public struct SpeechOptions: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var voice: String?",
              "line": 28,
              "signature": "public var voice: String?\n/// The speed of speech (1.0;",
              "documentation": ""
            },
            {
              "name": "public var speed: Double?",
              "line": 30,
              "signature": "public var speed: Double?\n/// The output format (e.g., \"mp3\", \"opus\", \"aac\").\npublic var format: String?\n\npublic init(voice: String?;",
              "documentation": ""
            },
            {
              "name": "public var format: String?",
              "line": 32,
              "signature": "public var format: String?\n\npublic init(voice: String?;",
              "documentation": ""
            },
            {
              "name": "public init(voice: String?;",
              "line": 34,
              "signature": "public init(voice: String?;",
              "documentation": ""
            },
            {
              "name": "public protocol SpeechProvider: Sendable",
              "line": 42,
              "signature": "public protocol SpeechProvider: Sendable",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeMedia/Transcription.swift",
          "sha256": "3b5657a0e37ae78f69f83dd396386a3820ec18445557ea7da63e09b55e737c63",
          "artifactSha256": "d304297e1c3d94f2024b9710674f9af575c8c42953cf2aa4c1e2b386d7572bed",
          "url": "/reference/source/forge-swift/Sources/ForgeMedia/Transcription.swift.txt",
          "declarations": [
            {
              "name": "public struct TranscriptionResult: Sendable",
              "line": 10,
              "signature": "public struct TranscriptionResult: Sendable",
              "documentation": ""
            },
            {
              "name": "public let text: String",
              "line": 12,
              "signature": "public let text: String\n/// The detected language (ISO 639-1 code).\npublic let language: String?\n/// Duration of the audio in seconds.\npublic let duration: Double?\n/// Per-segment timestamps (if available).\npublic let segments: [TranscriptionSegment]?\n\npublic init(text: String, language: String?;",
              "documentation": ""
            },
            {
              "name": "public let language: String?",
              "line": 14,
              "signature": "public let language: String?\n/// Duration of the audio in seconds.\npublic let duration: Double?\n/// Per-segment timestamps (if available).\npublic let segments: [TranscriptionSegment]?\n\npublic init(text: String, language: String?;",
              "documentation": ""
            },
            {
              "name": "public let duration: Double?",
              "line": 16,
              "signature": "public let duration: Double?\n/// Per-segment timestamps (if available).\npublic let segments: [TranscriptionSegment]?\n\npublic init(text: String, language: String?;",
              "documentation": ""
            },
            {
              "name": "public let segments: [TranscriptionSegment]?",
              "line": 18,
              "signature": "public let segments: [TranscriptionSegment]?\n\npublic init(text: String, language: String?;",
              "documentation": ""
            },
            {
              "name": "public init(text: String, language: String?;",
              "line": 20,
              "signature": "public init(text: String, language: String?;",
              "documentation": ""
            },
            {
              "name": "public struct TranscriptionSegment: Codable, Sendable",
              "line": 29,
              "signature": "public struct TranscriptionSegment: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let text: String",
              "line": 31,
              "signature": "public let text: String\n/// Start time in seconds.\npublic let start: Double\n/// End time in seconds.\npublic let end: Double\n\npublic init(text: String, start: Double, end: Double)",
              "documentation": ""
            },
            {
              "name": "public let start: Double",
              "line": 33,
              "signature": "public let start: Double\n/// End time in seconds.\npublic let end: Double\n\npublic init(text: String, start: Double, end: Double)",
              "documentation": ""
            },
            {
              "name": "public let end: Double",
              "line": 35,
              "signature": "public let end: Double\n\npublic init(text: String, start: Double, end: Double)",
              "documentation": ""
            },
            {
              "name": "public init(text: String, start: Double, end: Double)",
              "line": 37,
              "signature": "public init(text: String, start: Double, end: Double)",
              "documentation": ""
            },
            {
              "name": "public struct TranscriptionOptions: Codable, Sendable",
              "line": 45,
              "signature": "public struct TranscriptionOptions: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public var language: String?",
              "line": 47,
              "signature": "public var language: String?\n/// Whether to include timestamps.\npublic var timestamps: Bool?\n/// The response format.\npublic var responseFormat: String?\n\npublic init(language: String?;",
              "documentation": ""
            },
            {
              "name": "public var timestamps: Bool?",
              "line": 49,
              "signature": "public var timestamps: Bool?\n/// The response format.\npublic var responseFormat: String?\n\npublic init(language: String?;",
              "documentation": ""
            },
            {
              "name": "public var responseFormat: String?",
              "line": 51,
              "signature": "public var responseFormat: String?\n\npublic init(language: String?;",
              "documentation": ""
            },
            {
              "name": "public init(language: String?;",
              "line": 53,
              "signature": "public init(language: String?;",
              "documentation": ""
            },
            {
              "name": "public protocol TranscriptionProvider: Sendable",
              "line": 61,
              "signature": "public protocol TranscriptionProvider: Sendable",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeMCP",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeMCP library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeMCP",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeMCP/Client.swift",
          "sha256": "15914827953de4e9d7e4f36881050171021d5ea7cb18d20d1d8dfc350a3deccb",
          "artifactSha256": "9b03fb662aaf65a723f30872b4506206cdf402bd532142e81d88c4912a3c942c",
          "url": "/reference/source/forge-swift/Sources/ForgeMCP/Client.swift.txt",
          "declarations": [
            {
              "name": "public final class MCPClient: @unchecked Sendable",
              "line": 16,
              "signature": "public final class MCPClient: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init(transport: any MCPTransport)",
              "line": 27,
              "signature": "public init(transport: any MCPTransport)",
              "documentation": ""
            },
            {
              "name": "public func initialize() async throws",
              "line": 36,
              "signature": "public func initialize() async throws",
              "documentation": ""
            },
            {
              "name": "public func listTools() async throws -> [MCPToolDefinition]",
              "line": 61,
              "signature": "public func listTools() async throws -> [MCPToolDefinition]",
              "documentation": ""
            },
            {
              "name": "public func callTool(name: String, arguments: JSONValue) async throws -> JSONValue",
              "line": 90,
              "signature": "public func callTool(name: String, arguments: JSONValue) async throws -> JSONValue",
              "documentation": ""
            },
            {
              "name": "public func listResources() async throws -> [MCPResource]",
              "line": 116,
              "signature": "public func listResources() async throws -> [MCPResource]",
              "documentation": ""
            },
            {
              "name": "public func close() async",
              "line": 139,
              "signature": "public func close() async",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeMCP/MCPTypes.swift",
          "sha256": "854b270b2dd8a747c78d7b8c669f64bb69cc2a35f485a50213c3bb07502aa569",
          "artifactSha256": "6654835258496a7754319a98679596d1e42fcc3bdd86368c8e6babd7628d545b",
          "url": "/reference/source/forge-swift/Sources/ForgeMCP/MCPTypes.swift.txt",
          "declarations": [
            {
              "name": "public let mcpProtocolVersion;",
              "line": 13,
              "signature": "public let mcpProtocolVersion;",
              "documentation": ""
            },
            {
              "name": "public struct MCPRequest: Codable, Sendable",
              "line": 16,
              "signature": "public struct MCPRequest: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let jsonrpc: String",
              "line": 17,
              "signature": "public let jsonrpc: String\npublic let id: Int\npublic let method: String\npublic let params: JSONValue?\n\npublic init(id: Int, method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let id: Int",
              "line": 18,
              "signature": "public let id: Int\npublic let method: String\npublic let params: JSONValue?\n\npublic init(id: Int, method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let method: String",
              "line": 19,
              "signature": "public let method: String\npublic let params: JSONValue?\n\npublic init(id: Int, method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let params: JSONValue?",
              "line": 20,
              "signature": "public let params: JSONValue?\n\npublic init(id: Int, method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public init(id: Int, method: String, params: JSONValue?;",
              "line": 22,
              "signature": "public init(id: Int, method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public struct MCPResponse: Codable, Sendable",
              "line": 31,
              "signature": "public struct MCPResponse: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let jsonrpc: String",
              "line": 32,
              "signature": "public let jsonrpc: String\npublic let id: Int\npublic let result: JSONValue?\npublic let error: MCPError?\n\npublic init(id: Int, result: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let id: Int",
              "line": 33,
              "signature": "public let id: Int\npublic let result: JSONValue?\npublic let error: MCPError?\n\npublic init(id: Int, result: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let result: JSONValue?",
              "line": 34,
              "signature": "public let result: JSONValue?\npublic let error: MCPError?\n\npublic init(id: Int, result: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let error: MCPError?",
              "line": 35,
              "signature": "public let error: MCPError?\n\npublic init(id: Int, result: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public init(id: Int, result: JSONValue?;",
              "line": 37,
              "signature": "public init(id: Int, result: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public struct MCPError: Codable, Sendable",
              "line": 46,
              "signature": "public struct MCPError: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let code: Int",
              "line": 48,
              "signature": "public let code: Int\n/// The error message.\npublic let message: String\n/// Optional additional data.\npublic let data: JSONValue?\n\npublic init(code: Int, message: String, data: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let message: String",
              "line": 50,
              "signature": "public let message: String\n/// Optional additional data.\npublic let data: JSONValue?\n\npublic init(code: Int, message: String, data: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let data: JSONValue?",
              "line": 52,
              "signature": "public let data: JSONValue?\n\npublic init(code: Int, message: String, data: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public init(code: Int, message: String, data: JSONValue?;",
              "line": 54,
              "signature": "public init(code: Int, message: String, data: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public static let parseError;",
              "line": 61,
              "signature": "public static let parseError;",
              "documentation": ""
            },
            {
              "name": "public static let invalidRequest;",
              "line": 62,
              "signature": "public static let invalidRequest;",
              "documentation": ""
            },
            {
              "name": "public static let methodNotFound;",
              "line": 63,
              "signature": "public static let methodNotFound;",
              "documentation": ""
            },
            {
              "name": "public static let invalidParams;",
              "line": 64,
              "signature": "public static let invalidParams;",
              "documentation": ""
            },
            {
              "name": "public static let internalError;",
              "line": 65,
              "signature": "public static let internalError;",
              "documentation": ""
            },
            {
              "name": "public struct MCPNotification: Codable, Sendable",
              "line": 69,
              "signature": "public struct MCPNotification: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let jsonrpc: String",
              "line": 70,
              "signature": "public let jsonrpc: String\npublic let method: String\npublic let params: JSONValue?\n\npublic init(method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let method: String",
              "line": 71,
              "signature": "public let method: String\npublic let params: JSONValue?\n\npublic init(method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public let params: JSONValue?",
              "line": 72,
              "signature": "public let params: JSONValue?\n\npublic init(method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public init(method: String, params: JSONValue?;",
              "line": 74,
              "signature": "public init(method: String, params: JSONValue?;",
              "documentation": ""
            },
            {
              "name": "public struct MCPToolDefinition: Codable, Sendable",
              "line": 82,
              "signature": "public struct MCPToolDefinition: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 84,
              "signature": "public let name: String\n/// The tool description.\npublic let description: String?\n/// The input schema.\npublic let inputSchema: JSONValue?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let description: String?",
              "line": 86,
              "signature": "public let description: String?\n/// The input schema.\npublic let inputSchema: JSONValue?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let inputSchema: JSONValue?",
              "line": 88,
              "signature": "public let inputSchema: JSONValue?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public init(name: String, description: String?;",
              "line": 90,
              "signature": "public init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public struct MCPResource: Codable, Sendable",
              "line": 98,
              "signature": "public struct MCPResource: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let uri: String",
              "line": 100,
              "signature": "public let uri: String\n/// The resource name.\npublic let name: String\n/// The resource description.\npublic let description: String?\n/// The MIME type.\npublic let mimeType: String?\n\npublic init(uri: String, name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 102,
              "signature": "public let name: String\n/// The resource description.\npublic let description: String?\n/// The MIME type.\npublic let mimeType: String?\n\npublic init(uri: String, name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let description: String?",
              "line": 104,
              "signature": "public let description: String?\n/// The MIME type.\npublic let mimeType: String?\n\npublic init(uri: String, name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let mimeType: String?",
              "line": 106,
              "signature": "public let mimeType: String?\n\npublic init(uri: String, name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public init(uri: String, name: String, description: String?;",
              "line": 108,
              "signature": "public init(uri: String, name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public struct MCPPrompt: Codable, Sendable",
              "line": 117,
              "signature": "public struct MCPPrompt: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 119,
              "signature": "public let name: String\n/// The prompt description.\npublic let description: String?\n/// The prompt arguments.\npublic let arguments: [MCPPromptArgument]?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let description: String?",
              "line": 121,
              "signature": "public let description: String?\n/// The prompt arguments.\npublic let arguments: [MCPPromptArgument]?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let arguments: [MCPPromptArgument]?",
              "line": 123,
              "signature": "public let arguments: [MCPPromptArgument]?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public init(name: String, description: String?;",
              "line": 125,
              "signature": "public init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public struct MCPPromptArgument: Codable, Sendable",
              "line": 133,
              "signature": "public struct MCPPromptArgument: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 135,
              "signature": "public let name: String\n/// The argument description.\npublic let description: String?\n/// Whether the argument is required.\npublic let required: Bool?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let description: String?",
              "line": 137,
              "signature": "public let description: String?\n/// Whether the argument is required.\npublic let required: Bool?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public let required: Bool?",
              "line": 139,
              "signature": "public let required: Bool?\n\npublic init(name: String, description: String?;",
              "documentation": ""
            },
            {
              "name": "public init(name: String, description: String?;",
              "line": 141,
              "signature": "public init(name: String, description: String?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeMCP/Server.swift",
          "sha256": "e12341627cc238b435b7ca7468980bf80f5cf8a419e090e0c2671edd9319899a",
          "artifactSha256": "ed68538cbe6275020334c6247357c6ff82bc9c836bbcfed95f29223ed48c7224",
          "url": "/reference/source/forge-swift/Sources/ForgeMCP/Server.swift.txt",
          "declarations": [
            {
              "name": "public typealias MCPToolHandler;",
              "line": 13,
              "signature": "public typealias MCPToolHandler;",
              "documentation": ""
            },
            {
              "name": "public final class MCPServer: @unchecked Sendable",
              "line": 19,
              "signature": "public final class MCPServer: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 24,
              "signature": "public let name: String\n/// The server version.\npublic let version: String\n\n/// Creates a new MCP server.\n///\n/// - Parameters:\n///   - name: The server name.\n///   - version: The server version.\npublic init(name: String, version: String;",
              "documentation": ""
            },
            {
              "name": "public let version: String",
              "line": 26,
              "signature": "public let version: String\n\n/// Creates a new MCP server.\n///\n/// - Parameters:\n///   - name: The server name.\n///   - version: The server version.\npublic init(name: String, version: String;",
              "documentation": ""
            },
            {
              "name": "public init(name: String, version: String;",
              "line": 33,
              "signature": "public init(name: String, version: String;",
              "documentation": ""
            },
            {
              "name": "public func registerTool(definition: MCPToolDefinition, handler: @escaping MCPToolHandler)",
              "line": 43,
              "signature": "public func registerTool(definition: MCPToolDefinition, handler: @escaping MCPToolHandler)",
              "documentation": ""
            },
            {
              "name": "public func handleRequest(_ request: MCPRequest) async -> MCPResponse",
              "line": 53,
              "signature": "public func handleRequest(_ request: MCPRequest) async -> MCPResponse",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeMCP/Transport.swift",
          "sha256": "564ad1e939486445c04c88886adf0699e7a9d55f13b3dd6c0e321173289aa518",
          "artifactSha256": "e53c82d32ddd4a042ee04dfef992cf5c46eb10752e3f396b0edc7f7ab1569f9d",
          "url": "/reference/source/forge-swift/Sources/ForgeMCP/Transport.swift.txt",
          "declarations": [
            {
              "name": "public protocol MCPTransport: Sendable",
              "line": 15,
              "signature": "public protocol MCPTransport: Sendable",
              "documentation": ""
            },
            {
              "name": "public final class StdioTransport: MCPTransport, @unchecked Sendable",
              "line": 37,
              "signature": "public final class StdioTransport: MCPTransport, @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init(command: String, arguments: [String];",
              "line": 49,
              "signature": "public init(command: String, arguments: [String];",
              "documentation": ""
            },
            {
              "name": "public func start() throws",
              "line": 71,
              "signature": "public func start() throws",
              "documentation": ""
            },
            {
              "name": "public func send(_ request: MCPRequest) async throws -> MCPResponse",
              "line": 75,
              "signature": "public func send(_ request: MCPRequest) async throws -> MCPResponse",
              "documentation": ""
            },
            {
              "name": "public func notify(_ notification: MCPNotification) async throws",
              "line": 91,
              "signature": "public func notify(_ notification: MCPNotification) async throws",
              "documentation": ""
            },
            {
              "name": "public func close() async",
              "line": 102,
              "signature": "public func close() async",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeIdentity",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeIdentity library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeIdentity",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeIdentity/AgentIdentity.swift",
          "sha256": "1ccdc84332cebfe345cbf1f1602760058fd0ab90971860a2e89da7b7bf91a0a1",
          "artifactSha256": "e71ee0b151124679c74827360ebd7ffcf1217f8bbfbdb026f7d3aceaf460103b",
          "url": "/reference/source/forge-swift/Sources/ForgeIdentity/AgentIdentity.swift.txt",
          "declarations": [
            {
              "name": "public struct ForgeAgentIdentity: Sendable",
              "line": 27,
              "signature": "public struct ForgeAgentIdentity: Sendable",
              "documentation": ""
            },
            {
              "name": "public let did: AgentDid",
              "line": 29,
              "signature": "public let did: AgentDid\n/// The agent's public key bytes (Ed25519, 32 bytes).\npublic let publicKey: [UInt8]\n/// The lineage depth (0;",
              "documentation": ""
            },
            {
              "name": "public let publicKey: [UInt8]",
              "line": 31,
              "signature": "public let publicKey: [UInt8]\n/// The lineage depth (0;",
              "documentation": ""
            },
            {
              "name": "public let lineageDepth: UInt32",
              "line": 33,
              "signature": "public let lineageDepth: UInt32\n/// The parent's DID (nil for HMR root).\npublic let parentDid: AgentDid?\n/// The agent's name.\npublic let name: String\n/// The agent's namespace.\npublic let namespace: String\n/// Creation timestamp.\npublic let createdAt: Timestamp\n\n// Private key stored separately, never exposed in debug output.\nprivate let privateKeyBytes: [UInt8]\nprivate let document: OasDocument?\n\ninit(\ndid: AgentDid,\npublicKey: [UInt8],\nprivateKeyBytes: [UInt8],\nlineageDepth: UInt32,\nparentDid: AgentDid?,\nname: String,\nnamespace: String,\ncreatedAt: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let parentDid: AgentDid?",
              "line": 35,
              "signature": "public let parentDid: AgentDid?\n/// The agent's name.\npublic let name: String\n/// The agent's namespace.\npublic let namespace: String\n/// Creation timestamp.\npublic let createdAt: Timestamp\n\n// Private key stored separately, never exposed in debug output.\nprivate let privateKeyBytes: [UInt8]\nprivate let document: OasDocument?\n\ninit(\ndid: AgentDid,\npublicKey: [UInt8],\nprivateKeyBytes: [UInt8],\nlineageDepth: UInt32,\nparentDid: AgentDid?,\nname: String,\nnamespace: String,\ncreatedAt: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 37,
              "signature": "public let name: String\n/// The agent's namespace.\npublic let namespace: String\n/// Creation timestamp.\npublic let createdAt: Timestamp\n\n// Private key stored separately, never exposed in debug output.\nprivate let privateKeyBytes: [UInt8]\nprivate let document: OasDocument?\n\ninit(\ndid: AgentDid,\npublicKey: [UInt8],\nprivateKeyBytes: [UInt8],\nlineageDepth: UInt32,\nparentDid: AgentDid?,\nname: String,\nnamespace: String,\ncreatedAt: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let namespace: String",
              "line": 39,
              "signature": "public let namespace: String\n/// Creation timestamp.\npublic let createdAt: Timestamp\n\n// Private key stored separately, never exposed in debug output.\nprivate let privateKeyBytes: [UInt8]\nprivate let document: OasDocument?\n\ninit(\ndid: AgentDid,\npublicKey: [UInt8],\nprivateKeyBytes: [UInt8],\nlineageDepth: UInt32,\nparentDid: AgentDid?,\nname: String,\nnamespace: String,\ncreatedAt: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let createdAt: Timestamp",
              "line": 41,
              "signature": "public let createdAt: Timestamp\n\n// Private key stored separately, never exposed in debug output.\nprivate let privateKeyBytes: [UInt8]\nprivate let document: OasDocument?\n\ninit(\ndid: AgentDid,\npublicKey: [UInt8],\nprivateKeyBytes: [UInt8],\nlineageDepth: UInt32,\nparentDid: AgentDid?,\nname: String,\nnamespace: String,\ncreatedAt: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public func sign(_ data: [UInt8]) throws -> [UInt8]",
              "line": 73,
              "signature": "public func sign(_ data: [UInt8]) throws -> [UInt8]",
              "documentation": ""
            },
            {
              "name": "public func verify(signature: [UInt8], data: [UInt8]) throws -> Bool",
              "line": 83,
              "signature": "public func verify(signature: [UInt8], data: [UInt8]) throws -> Bool",
              "documentation": ""
            },
            {
              "name": "public var debugDescription: String",
              "line": 125,
              "signature": "public var debugDescription: String",
              "documentation": ""
            },
            {
              "name": "public func createHMRIdentity(namespace: String, name: String) throws -> ForgeAgentIdentity",
              "line": 141,
              "signature": "public func createHMRIdentity(namespace: String, name: String) throws -> ForgeAgentIdentity",
              "documentation": ""
            },
            {
              "name": "public func deriveAgentIdentity(",
              "line": 180,
              "signature": "public func deriveAgentIdentity(\nparent: ForgeAgentIdentity,\nname: String,\nnamespace: String?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeIdentity/Glyph.swift",
          "sha256": "c8489cc4d8a86397b1e140c63138506b1db9c1c35741fd2d51e016fb64b05b64",
          "artifactSha256": "7ba93291209f57ecaf17d9d354cd6ac3b0b864f27a30f29dbeaa600dd2b1170a",
          "url": "/reference/source/forge-swift/Sources/ForgeIdentity/Glyph.swift.txt",
          "declarations": [
            {
              "name": "public enum GlyphEntityKind: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 35,
              "signature": "public enum GlyphEntityKind: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public static func parseKind(_ string: String) -> GlyphEntityKind?",
              "line": 46,
              "signature": "public static func parseKind(_ string: String) -> GlyphEntityKind?",
              "documentation": ""
            },
            {
              "name": "public var asStr: String",
              "line": 51,
              "signature": "public var asStr: String",
              "documentation": ""
            },
            {
              "name": "public var asU8: UInt8",
              "line": 54,
              "signature": "public var asU8: UInt8",
              "documentation": ""
            },
            {
              "name": "public static func fromU8(_ value: UInt8) -> GlyphEntityKind?",
              "line": 68,
              "signature": "public static func fromU8(_ value: UInt8) -> GlyphEntityKind?",
              "documentation": ""
            },
            {
              "name": "public struct GlyphColor: Codable, Sendable, Hashable",
              "line": 83,
              "signature": "public struct GlyphColor: Codable, Sendable, Hashable",
              "documentation": ""
            },
            {
              "name": "public let r: UInt8",
              "line": 85,
              "signature": "public let r: UInt8\n/// Green channel (0-255).\npublic let g: UInt8\n/// Blue channel (0-255).\npublic let b: UInt8\n\n/// Create a color from RGB components.\npublic static func rgb(_ r: UInt8, _ g: UInt8, _ b: UInt8) -> GlyphColor",
              "documentation": ""
            },
            {
              "name": "public let g: UInt8",
              "line": 87,
              "signature": "public let g: UInt8\n/// Blue channel (0-255).\npublic let b: UInt8\n\n/// Create a color from RGB components.\npublic static func rgb(_ r: UInt8, _ g: UInt8, _ b: UInt8) -> GlyphColor",
              "documentation": ""
            },
            {
              "name": "public let b: UInt8",
              "line": 89,
              "signature": "public let b: UInt8\n\n/// Create a color from RGB components.\npublic static func rgb(_ r: UInt8, _ g: UInt8, _ b: UInt8) -> GlyphColor",
              "documentation": ""
            },
            {
              "name": "public static func rgb(_ r: UInt8, _ g: UInt8, _ b: UInt8) -> GlyphColor",
              "line": 92,
              "signature": "public static func rgb(_ r: UInt8, _ g: UInt8, _ b: UInt8) -> GlyphColor",
              "documentation": ""
            },
            {
              "name": "public func toHex() -> String",
              "line": 97,
              "signature": "public func toHex() -> String",
              "documentation": ""
            },
            {
              "name": "public static func lerp(_ a: GlyphColor, _ b: GlyphColor, t: Double) -> GlyphColor",
              "line": 108,
              "signature": "public static func lerp(_ a: GlyphColor, _ b: GlyphColor, t: Double) -> GlyphColor",
              "documentation": ""
            },
            {
              "name": "public struct GlyphPalette: Codable, Sendable",
              "line": 130,
              "signature": "public struct GlyphPalette: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let primary: GlyphColor",
              "line": 132,
              "signature": "public let primary: GlyphColor\n/// Secondary identity color (hue-offset from primary).\npublic let secondary: GlyphColor\n/// Accent color for kind region and highlights.\npublic let accent: GlyphColor\n/// Background color (dark, desaturated primary).\npublic let background: GlyphColor\n}\n\n// MARK: - GlyphDescriptor\n\n/// The glyph input contract: describes what to render.\npublic struct GlyphDescriptor: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let secondary: GlyphColor",
              "line": 134,
              "signature": "public let secondary: GlyphColor\n/// Accent color for kind region and highlights.\npublic let accent: GlyphColor\n/// Background color (dark, desaturated primary).\npublic let background: GlyphColor\n}\n\n// MARK: - GlyphDescriptor\n\n/// The glyph input contract: describes what to render.\npublic struct GlyphDescriptor: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let accent: GlyphColor",
              "line": 136,
              "signature": "public let accent: GlyphColor\n/// Background color (dark, desaturated primary).\npublic let background: GlyphColor\n}\n\n// MARK: - GlyphDescriptor\n\n/// The glyph input contract: describes what to render.\npublic struct GlyphDescriptor: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let background: GlyphColor",
              "line": 138,
              "signature": "public let background: GlyphColor\n}\n\n// MARK: - GlyphDescriptor\n\n/// The glyph input contract: describes what to render.\npublic struct GlyphDescriptor: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public struct GlyphDescriptor: Codable, Sendable",
              "line": 144,
              "signature": "public struct GlyphDescriptor: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let did: String",
              "line": 146,
              "signature": "public let did: String\n/// The entity kind that determines the kind-region visual motif.\npublic let kind: GlyphEntityKind\n/// Optional human-readable label rendered below the glyph.\npublic let label: String?\n\npublic init(did: String, kind: GlyphEntityKind, label: String?;",
              "documentation": ""
            },
            {
              "name": "public let kind: GlyphEntityKind",
              "line": 148,
              "signature": "public let kind: GlyphEntityKind\n/// Optional human-readable label rendered below the glyph.\npublic let label: String?\n\npublic init(did: String, kind: GlyphEntityKind, label: String?;",
              "documentation": ""
            },
            {
              "name": "public let label: String?",
              "line": 150,
              "signature": "public let label: String?\n\npublic init(did: String, kind: GlyphEntityKind, label: String?;",
              "documentation": ""
            },
            {
              "name": "public init(did: String, kind: GlyphEntityKind, label: String?;",
              "line": 152,
              "signature": "public init(did: String, kind: GlyphEntityKind, label: String?;",
              "documentation": ""
            },
            {
              "name": "public func derivePalette(did: String, kind: GlyphEntityKind) -> GlyphPalette",
              "line": 170,
              "signature": "public func derivePalette(did: String, kind: GlyphEntityKind) -> GlyphPalette",
              "documentation": ""
            },
            {
              "name": "public func renderGlyph(_ descriptor: GlyphDescriptor, width: UInt32;",
              "line": 228,
              "signature": "public func renderGlyph(_ descriptor: GlyphDescriptor, width: UInt32;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeIdentity/IdentityError.swift",
          "sha256": "e02b7632afadca7fdf1c1dcf2e73955235be9837962a13e13f0898b2e6705ce3",
          "artifactSha256": "8c706aecbc97322b3967c62834a5149bc37bd0908988f27fbfbaf68c3ffe6cd1",
          "url": "/reference/source/forge-swift/Sources/ForgeIdentity/IdentityError.swift.txt",
          "declarations": [
            {
              "name": "public enum IdentityError: Error, Sendable, Equatable",
              "line": 11,
              "signature": "public enum IdentityError: Error, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 34,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeIdentity/Lineage.swift",
          "sha256": "b1c018e5b7725b8258c0f37f2bc91f143782fdf1f9484cd2d53a2fec64d44c64",
          "artifactSha256": "5a20481858c298e6e226c18433759d45a494283b5f219dba4f8ec7beb94f535d",
          "url": "/reference/source/forge-swift/Sources/ForgeIdentity/Lineage.swift.txt",
          "declarations": [
            {
              "name": "public struct LineageProof: Codable, Sendable",
              "line": 16,
              "signature": "public struct LineageProof: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let childDid: String",
              "line": 18,
              "signature": "public let childDid: String\n/// The parent's DID.\npublic let parentDid: String\n/// The child's public key (hex-encoded).\npublic let childPublicKey: String\n/// The parent's public key (hex-encoded).\npublic let parentPublicKey: String\n/// The derivation path used.\npublic let derivationPath: String\n/// The lineage depth of the child.\npublic let depth: UInt32\n/// The parent's signature over the proof payload (hex-encoded).\npublic let parentSignature: String?\n/// When the proof was created.\npublic let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public let parentDid: String",
              "line": 20,
              "signature": "public let parentDid: String\n/// The child's public key (hex-encoded).\npublic let childPublicKey: String\n/// The parent's public key (hex-encoded).\npublic let parentPublicKey: String\n/// The derivation path used.\npublic let derivationPath: String\n/// The lineage depth of the child.\npublic let depth: UInt32\n/// The parent's signature over the proof payload (hex-encoded).\npublic let parentSignature: String?\n/// When the proof was created.\npublic let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public let childPublicKey: String",
              "line": 22,
              "signature": "public let childPublicKey: String\n/// The parent's public key (hex-encoded).\npublic let parentPublicKey: String\n/// The derivation path used.\npublic let derivationPath: String\n/// The lineage depth of the child.\npublic let depth: UInt32\n/// The parent's signature over the proof payload (hex-encoded).\npublic let parentSignature: String?\n/// When the proof was created.\npublic let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public let parentPublicKey: String",
              "line": 24,
              "signature": "public let parentPublicKey: String\n/// The derivation path used.\npublic let derivationPath: String\n/// The lineage depth of the child.\npublic let depth: UInt32\n/// The parent's signature over the proof payload (hex-encoded).\npublic let parentSignature: String?\n/// When the proof was created.\npublic let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public let derivationPath: String",
              "line": 26,
              "signature": "public let derivationPath: String\n/// The lineage depth of the child.\npublic let depth: UInt32\n/// The parent's signature over the proof payload (hex-encoded).\npublic let parentSignature: String?\n/// When the proof was created.\npublic let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public let depth: UInt32",
              "line": 28,
              "signature": "public let depth: UInt32\n/// The parent's signature over the proof payload (hex-encoded).\npublic let parentSignature: String?\n/// When the proof was created.\npublic let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public let parentSignature: String?",
              "line": 30,
              "signature": "public let parentSignature: String?\n/// When the proof was created.\npublic let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 32,
              "signature": "public let timestamp: Timestamp\n\npublic init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 34,
              "signature": "public init(\nchildDid: String,\nparentDid: String,\nchildPublicKey: String,\nparentPublicKey: String,\nderivationPath: String,\ndepth: UInt32,\nparentSignature: String?;",
              "documentation": ""
            },
            {
              "name": "public struct LineageChain: Sendable",
              "line": 56,
              "signature": "public struct LineageChain: Sendable",
              "documentation": ""
            },
            {
              "name": "public let proofs: [LineageProof]",
              "line": 58,
              "signature": "public let proofs: [LineageProof]\n\n/// The depth of the chain (number of derivation steps).\npublic var depth: Int",
              "documentation": ""
            },
            {
              "name": "public var depth: Int",
              "line": 61,
              "signature": "public var depth: Int",
              "documentation": ""
            },
            {
              "name": "public var isEmpty: Bool",
              "line": 64,
              "signature": "public var isEmpty: Bool",
              "documentation": ""
            },
            {
              "name": "public init(proofs: [LineageProof])",
              "line": 66,
              "signature": "public init(proofs: [LineageProof])",
              "documentation": ""
            },
            {
              "name": "public func verifyLineageChain(_ chain: LineageChain) throws -> Bool",
              "line": 78,
              "signature": "public func verifyLineageChain(_ chain: LineageChain) throws -> Bool",
              "documentation": ""
            },
            {
              "name": "public func buildLineageProof(",
              "line": 152,
              "signature": "public func buildLineageProof(\nparent: ForgeAgentIdentity,\nchild: ForgeAgentIdentity\n) -> LineageProof",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeIdentity/LocalDev.swift",
          "sha256": "0afdc2521c0cfd9f5bfd5cdc57f4a04d98a859f3e6d4ea51c556e828d1a90c3c",
          "artifactSha256": "4438ecc353129622df053583066a58a426968528b7be2796ed775a8f7a81c235",
          "url": "/reference/source/forge-swift/Sources/ForgeIdentity/LocalDev.swift.txt",
          "declarations": [
            {
              "name": "public let forgeDevMethod: String;",
              "line": 28,
              "signature": "public let forgeDevMethod: String;",
              "documentation": ""
            },
            {
              "name": "public func forgeDevDid(machineId: String, kind: String, identifier: String) -> String",
              "line": 37,
              "signature": "public func forgeDevDid(machineId: String, kind: String, identifier: String) -> String",
              "documentation": ""
            },
            {
              "name": "public func deriveMachineIdFromParts(hostname: String, username: String, profileName: String) -> String",
              "line": 56,
              "signature": "public func deriveMachineIdFromParts(hostname: String, username: String, profileName: String) -> String",
              "documentation": ""
            },
            {
              "name": "public func deriveMachineId(profileName: String) -> String",
              "line": 68,
              "signature": "public func deriveMachineId(profileName: String) -> String",
              "documentation": ""
            },
            {
              "name": "public struct LocalDevProfile: Codable, Sendable, Hashable",
              "line": 80,
              "signature": "public struct LocalDevProfile: Codable, Sendable, Hashable",
              "documentation": ""
            },
            {
              "name": "public let machineId: String",
              "line": 82,
              "signature": "public let machineId: String\n/// The profile name.\npublic let profileName: String\n\n/// Creates a `LocalDevProfile` from explicit parts.\n///\n/// - Parameters:\n///   - hostname: The machine hostname.\n///   - username: The OS username.\n///   - profileName: The profile name.\npublic init(hostname: String, username: String, profileName: String)",
              "documentation": ""
            },
            {
              "name": "public let profileName: String",
              "line": 84,
              "signature": "public let profileName: String\n\n/// Creates a `LocalDevProfile` from explicit parts.\n///\n/// - Parameters:\n///   - hostname: The machine hostname.\n///   - username: The OS username.\n///   - profileName: The profile name.\npublic init(hostname: String, username: String, profileName: String)",
              "documentation": ""
            },
            {
              "name": "public init(hostname: String, username: String, profileName: String)",
              "line": 92,
              "signature": "public init(hostname: String, username: String, profileName: String)",
              "documentation": ""
            },
            {
              "name": "public init(profileName: String;",
              "line": 104,
              "signature": "public init(profileName: String;",
              "documentation": ""
            },
            {
              "name": "public func agentDid(_ name: String) -> String",
              "line": 113,
              "signature": "public func agentDid(_ name: String) -> String",
              "documentation": ""
            },
            {
              "name": "public func mhrDid(_ name: String) -> String",
              "line": 121,
              "signature": "public func mhrDid(_ name: String) -> String",
              "documentation": ""
            },
            {
              "name": "public func hmrDid(_ name: String) -> String",
              "line": 129,
              "signature": "public func hmrDid(_ name: String) -> String",
              "documentation": ""
            },
            {
              "name": "public func orgDid(_ name: String) -> String",
              "line": 137,
              "signature": "public func orgDid(_ name: String) -> String",
              "documentation": ""
            },
            {
              "name": "public func validateForgeDevDid(_ did: String) throws",
              "line": 155,
              "signature": "public func validateForgeDevDid(_ did: String) throws",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeIdentity/Persistence.swift",
          "sha256": "d002e8cbd7e37edf978bed8dccab20abc10632c0cc4b27f1928175906f22a284",
          "artifactSha256": "f3eb44e4f83935a38fdc4fffa25ce5b021f45c8b499e8faa061d8ce2126c57d9",
          "url": "/reference/source/forge-swift/Sources/ForgeIdentity/Persistence.swift.txt",
          "declarations": [
            {
              "name": "public struct PersistedIdentityMetadata: Codable, Sendable",
              "line": 13,
              "signature": "public struct PersistedIdentityMetadata: Codable, Sendable",
              "documentation": ""
            },
            {
              "name": "public let did: String",
              "line": 15,
              "signature": "public let did: String\n/// The agent's public key (hex-encoded).\npublic let publicKey: String\n/// The lineage depth.\npublic let lineageDepth: UInt32\n/// The parent's DID.\npublic let parentDid: String?\n/// The agent name.\npublic let name: String\n/// The agent namespace.\npublic let namespace: String\n/// When the identity was created.\npublic let createdAt: Timestamp\n}\n\n/// Exports identity metadata (without private key) for persistence.\n///\n/// - Parameter identity: The identity to export.\n/// - Returns: The metadata for serialization.\npublic func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public let publicKey: String",
              "line": 17,
              "signature": "public let publicKey: String\n/// The lineage depth.\npublic let lineageDepth: UInt32\n/// The parent's DID.\npublic let parentDid: String?\n/// The agent name.\npublic let name: String\n/// The agent namespace.\npublic let namespace: String\n/// When the identity was created.\npublic let createdAt: Timestamp\n}\n\n/// Exports identity metadata (without private key) for persistence.\n///\n/// - Parameter identity: The identity to export.\n/// - Returns: The metadata for serialization.\npublic func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public let lineageDepth: UInt32",
              "line": 19,
              "signature": "public let lineageDepth: UInt32\n/// The parent's DID.\npublic let parentDid: String?\n/// The agent name.\npublic let name: String\n/// The agent namespace.\npublic let namespace: String\n/// When the identity was created.\npublic let createdAt: Timestamp\n}\n\n/// Exports identity metadata (without private key) for persistence.\n///\n/// - Parameter identity: The identity to export.\n/// - Returns: The metadata for serialization.\npublic func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public let parentDid: String?",
              "line": 21,
              "signature": "public let parentDid: String?\n/// The agent name.\npublic let name: String\n/// The agent namespace.\npublic let namespace: String\n/// When the identity was created.\npublic let createdAt: Timestamp\n}\n\n/// Exports identity metadata (without private key) for persistence.\n///\n/// - Parameter identity: The identity to export.\n/// - Returns: The metadata for serialization.\npublic func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 23,
              "signature": "public let name: String\n/// The agent namespace.\npublic let namespace: String\n/// When the identity was created.\npublic let createdAt: Timestamp\n}\n\n/// Exports identity metadata (without private key) for persistence.\n///\n/// - Parameter identity: The identity to export.\n/// - Returns: The metadata for serialization.\npublic func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public let namespace: String",
              "line": 25,
              "signature": "public let namespace: String\n/// When the identity was created.\npublic let createdAt: Timestamp\n}\n\n/// Exports identity metadata (without private key) for persistence.\n///\n/// - Parameter identity: The identity to export.\n/// - Returns: The metadata for serialization.\npublic func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public let createdAt: Timestamp",
              "line": 27,
              "signature": "public let createdAt: Timestamp\n}\n\n/// Exports identity metadata (without private key) for persistence.\n///\n/// - Parameter identity: The identity to export.\n/// - Returns: The metadata for serialization.\npublic func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "line": 34,
              "signature": "public func exportIdentityMetadata(_ identity: ForgeAgentIdentity) -> PersistedIdentityMetadata",
              "documentation": ""
            },
            {
              "name": "public func saveIdentityMetadata(_ metadata: PersistedIdentityMetadata, to url: URL) throws",
              "line": 55,
              "signature": "public func saveIdentityMetadata(_ metadata: PersistedIdentityMetadata, to url: URL) throws",
              "documentation": ""
            },
            {
              "name": "public func loadIdentityMetadata(from url: URL) throws -> PersistedIdentityMetadata",
              "line": 73,
              "signature": "public func loadIdentityMetadata(from url: URL) throws -> PersistedIdentityMetadata",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeAuth",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeAuth library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeAuth",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeAuth/AuthError.swift",
          "sha256": "06b5ed2c3721ac0b5204871ffe18a025f94d722eaeca089b665bc371cb862e12",
          "artifactSha256": "c7eca73cb4ae5a68bd146337a4f84dbb14ce6ed52aa026e7262eb2dcca168584",
          "url": "/reference/source/forge-swift/Sources/ForgeAuth/AuthError.swift.txt",
          "declarations": [
            {
              "name": "public enum ForgeAuthError: Error, Sendable, Equatable",
              "line": 21,
              "signature": "public enum ForgeAuthError: Error, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 65,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            },
            {
              "name": "public var isExpired: Bool",
              "line": 83,
              "signature": "public var isExpired: Bool",
              "documentation": ""
            },
            {
              "name": "public var isInsufficientScope: Bool",
              "line": 89,
              "signature": "public var isInsufficientScope: Bool",
              "documentation": ""
            },
            {
              "name": "public var isCapabilityEscalation: Bool",
              "line": 95,
              "signature": "public var isCapabilityEscalation: Bool",
              "documentation": ""
            },
            {
              "name": "public var isDelegationDenied: Bool",
              "line": 101,
              "signature": "public var isDelegationDenied: Bool",
              "documentation": ""
            },
            {
              "name": "public var isInvalidToken: Bool",
              "line": 107,
              "signature": "public var isInvalidToken: Bool",
              "documentation": ""
            },
            {
              "name": "public var errorCode: String",
              "line": 115,
              "signature": "public var errorCode: String",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAuth/Capability.swift",
          "sha256": "11fa455cdb39630cec545788c50e004aade3029d998b58fa4daec2e61e8ddcb1",
          "artifactSha256": "35b9f082d846c224b93ca246fcb1b6efc8b8fada46cad46d6497c58679f8884c",
          "url": "/reference/source/forge-swift/Sources/ForgeAuth/Capability.swift.txt",
          "declarations": [
            {
              "name": "public struct ToolPattern: Codable, Sendable, Equatable, Hashable",
              "line": 23,
              "signature": "public struct ToolPattern: Codable, Sendable, Equatable, Hashable",
              "documentation": ""
            },
            {
              "name": "public let pattern: String",
              "line": 25,
              "signature": "public let pattern: String\n\n/// Creates a new tool pattern.\n///\n/// - Parameter pattern: The pattern string. Use `*` for wildcard matching.\npublic init(_ pattern: String)",
              "documentation": ""
            },
            {
              "name": "public init(_ pattern: String)",
              "line": 30,
              "signature": "public init(_ pattern: String)",
              "documentation": ""
            },
            {
              "name": "public func matches(_ toolName: String) -> Bool",
              "line": 43,
              "signature": "public func matches(_ toolName: String) -> Bool",
              "documentation": ""
            },
            {
              "name": "public init(from decoder: Decoder) throws",
              "line": 54,
              "signature": "public init(from decoder: Decoder) throws",
              "documentation": ""
            },
            {
              "name": "public func encode(to encoder: Encoder) throws",
              "line": 59,
              "signature": "public func encode(to encoder: Encoder) throws",
              "documentation": ""
            },
            {
              "name": "public struct Capability: Codable, Sendable, Equatable",
              "line": 73,
              "signature": "public struct Capability: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let toolPattern: ToolPattern",
              "line": 75,
              "signature": "public let toolPattern: ToolPattern\n\n/// An optional human-readable label for this capability.\npublic let label: String?\n\n/// Optional scope string in `service:resource:action` format.\n///\n/// When present, this is the canonical scope string used for ACT scope\n/// matching. When absent, the scope is derived from the tool pattern\n/// as `forge:tool.<pattern>:execute`.\npublic let scope: String?\n\n/// Creates a new capability.\n///\n/// - Parameters:\n///   - toolPattern: The tool name pattern.\n///   - label: An optional human-readable label.\n///   - scope: An optional scope string in `service:resource:action` format.\npublic init(toolPattern: ToolPattern, label: String?;",
              "documentation": ""
            },
            {
              "name": "public let label: String?",
              "line": 78,
              "signature": "public let label: String?\n\n/// Optional scope string in `service:resource:action` format.\n///\n/// When present, this is the canonical scope string used for ACT scope\n/// matching. When absent, the scope is derived from the tool pattern\n/// as `forge:tool.<pattern>:execute`.\npublic let scope: String?\n\n/// Creates a new capability.\n///\n/// - Parameters:\n///   - toolPattern: The tool name pattern.\n///   - label: An optional human-readable label.\n///   - scope: An optional scope string in `service:resource:action` format.\npublic init(toolPattern: ToolPattern, label: String?;",
              "documentation": ""
            },
            {
              "name": "public let scope: String?",
              "line": 85,
              "signature": "public let scope: String?\n\n/// Creates a new capability.\n///\n/// - Parameters:\n///   - toolPattern: The tool name pattern.\n///   - label: An optional human-readable label.\n///   - scope: An optional scope string in `service:resource:action` format.\npublic init(toolPattern: ToolPattern, label: String?;",
              "documentation": ""
            },
            {
              "name": "public init(toolPattern: ToolPattern, label: String?;",
              "line": 93,
              "signature": "public init(toolPattern: ToolPattern, label: String?;",
              "documentation": ""
            },
            {
              "name": "public static func tool(_ toolName: String) -> Capability",
              "line": 103,
              "signature": "public static func tool(_ toolName: String) -> Capability",
              "documentation": ""
            },
            {
              "name": "public static func wildcard() -> Capability",
              "line": 113,
              "signature": "public static func wildcard() -> Capability",
              "documentation": ""
            },
            {
              "name": "public struct ArsenalACT: Codable, Sendable, Equatable",
              "line": 129,
              "signature": "public struct ArsenalACT: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 131,
              "signature": "public let id: String\n\n/// The OAS DID of the agent this token is issued to.\npublic let agentDid: String\n\n/// The issuer identifier.\npublic let issuer: String\n\n/// The audience identifier.\npublic let audience: String\n\n/// The capabilities granted by this token.\npublic let capabilities: [Capability]\n\n/// The scope strings granted by this token (in `service:resource:action` format).\n///\n/// These are the canonical scopes used for scope matching. If a capability has\n/// an explicit scope, it is included here. Otherwise, the scope is derived from\n/// the tool pattern.\npublic let scopes: [String]\n\n/// When the token was issued.\npublic let issuedAt: Timestamp\n\n/// When the token becomes valid (not-before).\npublic let notBefore: Timestamp",
              "documentation": ""
            },
            {
              "name": "public let agentDid: String",
              "line": 134,
              "signature": "public let agentDid: String\n\n/// The issuer identifier.\npublic let issuer: String\n\n/// The audience identifier.\npublic let audience: String\n\n/// The capabilities granted by this token.\npublic let capabilities: [Capability]\n\n/// The scope strings granted by this token (in `service:resource:action` format).\n///\n/// These are the canonical scopes used for scope matching. If a capability has\n/// an explicit scope, it is included here. Otherwise, the scope is derived from\n/// the tool pattern.\npublic let scopes: [String]\n\n/// When the token was issued.\npublic let issuedAt: Timestamp\n\n/// When the token becomes valid (not-before).\npublic let notBefore: Timestamp\n\n/// When the token expires, or `nil` for non-expiring tokens.\npublic let expiresAt: Timestamp?",
              "documentation": ""
            },
            {
              "name": "public let issuer: String",
              "line": 137,
              "signature": "public let issuer: String\n\n/// The audience identifier.\npublic let audience: String\n\n/// The capabilities granted by this token.\npublic let capabilities: [Capability]\n\n/// The scope strings granted by this token (in `service:resource:action` format).\n///\n/// These are the canonical scopes used for scope matching. If a capability has\n/// an explicit scope, it is included here. Otherwise, the scope is derived from\n/// the tool pattern.\npublic let scopes: [String]\n\n/// When the token was issued.\npublic let issuedAt: Timestamp\n\n/// When the token becomes valid (not-before).\npublic let notBefore: Timestamp\n\n/// When the token expires, or `nil` for non-expiring tokens.\npublic let expiresAt: Timestamp?\n\n/// The parent token ID if this token was delegated.\npublic let parentTokenId: String?",
              "documentation": ""
            },
            {
              "name": "public let audience: String",
              "line": 140,
              "signature": "public let audience: String\n\n/// The capabilities granted by this token.\npublic let capabilities: [Capability]\n\n/// The scope strings granted by this token (in `service:resource:action` format).\n///\n/// These are the canonical scopes used for scope matching. If a capability has\n/// an explicit scope, it is included here. Otherwise, the scope is derived from\n/// the tool pattern.\npublic let scopes: [String]\n\n/// When the token was issued.\npublic let issuedAt: Timestamp\n\n/// When the token becomes valid (not-before).\npublic let notBefore: Timestamp\n\n/// When the token expires, or `nil` for non-expiring tokens.\npublic let expiresAt: Timestamp?\n\n/// The parent token ID if this token was delegated.\npublic let parentTokenId: String?\n\n/// Whether delegation is allowed from this token.\npublic let allowDelegation: Bool",
              "documentation": ""
            },
            {
              "name": "public let capabilities: [Capability]",
              "line": 143,
              "signature": "public let capabilities: [Capability]\n\n/// The scope strings granted by this token (in `service:resource:action` format).\n///\n/// These are the canonical scopes used for scope matching. If a capability has\n/// an explicit scope, it is included here. Otherwise, the scope is derived from\n/// the tool pattern.\npublic let scopes: [String]\n\n/// When the token was issued.\npublic let issuedAt: Timestamp\n\n/// When the token becomes valid (not-before).\npublic let notBefore: Timestamp\n\n/// When the token expires, or `nil` for non-expiring tokens.\npublic let expiresAt: Timestamp?\n\n/// The parent token ID if this token was delegated.\npublic let parentTokenId: String?\n\n/// Whether delegation is allowed from this token.\npublic let allowDelegation: Bool\n\n/// Maximum delegation depth permitted from this token.\npublic let maxDelegationDepth: UInt32",
              "documentation": ""
            },
            {
              "name": "public let scopes: [String]",
              "line": 150,
              "signature": "public let scopes: [String]\n\n/// When the token was issued.\npublic let issuedAt: Timestamp\n\n/// When the token becomes valid (not-before).\npublic let notBefore: Timestamp\n\n/// When the token expires, or `nil` for non-expiring tokens.\npublic let expiresAt: Timestamp?\n\n/// The parent token ID if this token was delegated.\npublic let parentTokenId: String?\n\n/// Whether delegation is allowed from this token.\npublic let allowDelegation: Bool\n\n/// Maximum delegation depth permitted from this token.\npublic let maxDelegationDepth: UInt32\n\n/// Minimum TTL reduction (in seconds) when delegating to child tokens.\npublic let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:",
              "documentation": ""
            },
            {
              "name": "public let issuedAt: Timestamp",
              "line": 153,
              "signature": "public let issuedAt: Timestamp\n\n/// When the token becomes valid (not-before).\npublic let notBefore: Timestamp\n\n/// When the token expires, or `nil` for non-expiring tokens.\npublic let expiresAt: Timestamp?\n\n/// The parent token ID if this token was delegated.\npublic let parentTokenId: String?\n\n/// Whether delegation is allowed from this token.\npublic let allowDelegation: Bool\n\n/// Maximum delegation depth permitted from this token.\npublic let maxDelegationDepth: UInt32\n\n/// Minimum TTL reduction (in seconds) when delegating to child tokens.\npublic let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:\n///   - id: Unique token identifier.\n///   - agentDid: The agent's OAS DID.\n///   - issuer: The issuer identifier.",
              "documentation": ""
            },
            {
              "name": "public let notBefore: Timestamp",
              "line": 156,
              "signature": "public let notBefore: Timestamp\n\n/// When the token expires, or `nil` for non-expiring tokens.\npublic let expiresAt: Timestamp?\n\n/// The parent token ID if this token was delegated.\npublic let parentTokenId: String?\n\n/// Whether delegation is allowed from this token.\npublic let allowDelegation: Bool\n\n/// Maximum delegation depth permitted from this token.\npublic let maxDelegationDepth: UInt32\n\n/// Minimum TTL reduction (in seconds) when delegating to child tokens.\npublic let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:\n///   - id: Unique token identifier.\n///   - agentDid: The agent's OAS DID.\n///   - issuer: The issuer identifier.\n///   - audience: The audience identifier.\n///   - capabilities: The capabilities granted.\n///   - scopes: The scope strings granted.",
              "documentation": ""
            },
            {
              "name": "public let expiresAt: Timestamp?",
              "line": 159,
              "signature": "public let expiresAt: Timestamp?\n\n/// The parent token ID if this token was delegated.\npublic let parentTokenId: String?\n\n/// Whether delegation is allowed from this token.\npublic let allowDelegation: Bool\n\n/// Maximum delegation depth permitted from this token.\npublic let maxDelegationDepth: UInt32\n\n/// Minimum TTL reduction (in seconds) when delegating to child tokens.\npublic let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:\n///   - id: Unique token identifier.\n///   - agentDid: The agent's OAS DID.\n///   - issuer: The issuer identifier.\n///   - audience: The audience identifier.\n///   - capabilities: The capabilities granted.\n///   - scopes: The scope strings granted.\n///   - issuedAt: When the token was issued.\n///   - notBefore: When the token becomes valid.\n///   - expiresAt: When the token expires, or nil.",
              "documentation": ""
            },
            {
              "name": "public let parentTokenId: String?",
              "line": 162,
              "signature": "public let parentTokenId: String?\n\n/// Whether delegation is allowed from this token.\npublic let allowDelegation: Bool\n\n/// Maximum delegation depth permitted from this token.\npublic let maxDelegationDepth: UInt32\n\n/// Minimum TTL reduction (in seconds) when delegating to child tokens.\npublic let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:\n///   - id: Unique token identifier.\n///   - agentDid: The agent's OAS DID.\n///   - issuer: The issuer identifier.\n///   - audience: The audience identifier.\n///   - capabilities: The capabilities granted.\n///   - scopes: The scope strings granted.\n///   - issuedAt: When the token was issued.\n///   - notBefore: When the token becomes valid.\n///   - expiresAt: When the token expires, or nil.\n///   - parentTokenId: The parent token ID for delegated tokens.\n///   - allowDelegation: Whether delegation is allowed.\n///   - maxDelegationDepth: Maximum delegation depth.",
              "documentation": ""
            },
            {
              "name": "public let allowDelegation: Bool",
              "line": 165,
              "signature": "public let allowDelegation: Bool\n\n/// Maximum delegation depth permitted from this token.\npublic let maxDelegationDepth: UInt32\n\n/// Minimum TTL reduction (in seconds) when delegating to child tokens.\npublic let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:\n///   - id: Unique token identifier.\n///   - agentDid: The agent's OAS DID.\n///   - issuer: The issuer identifier.\n///   - audience: The audience identifier.\n///   - capabilities: The capabilities granted.\n///   - scopes: The scope strings granted.\n///   - issuedAt: When the token was issued.\n///   - notBefore: When the token becomes valid.\n///   - expiresAt: When the token expires, or nil.\n///   - parentTokenId: The parent token ID for delegated tokens.\n///   - allowDelegation: Whether delegation is allowed.\n///   - maxDelegationDepth: Maximum delegation depth.\n///   - minTtlReduction: Minimum TTL reduction for delegation (seconds).\npublic init(\nid: String,",
              "documentation": ""
            },
            {
              "name": "public let maxDelegationDepth: UInt32",
              "line": 168,
              "signature": "public let maxDelegationDepth: UInt32\n\n/// Minimum TTL reduction (in seconds) when delegating to child tokens.\npublic let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:\n///   - id: Unique token identifier.\n///   - agentDid: The agent's OAS DID.\n///   - issuer: The issuer identifier.\n///   - audience: The audience identifier.\n///   - capabilities: The capabilities granted.\n///   - scopes: The scope strings granted.\n///   - issuedAt: When the token was issued.\n///   - notBefore: When the token becomes valid.\n///   - expiresAt: When the token expires, or nil.\n///   - parentTokenId: The parent token ID for delegated tokens.\n///   - allowDelegation: Whether delegation is allowed.\n///   - maxDelegationDepth: Maximum delegation depth.\n///   - minTtlReduction: Minimum TTL reduction for delegation (seconds).\npublic init(\nid: String,\nagentDid: String,\nissuer: String,\naudience: String,",
              "documentation": ""
            },
            {
              "name": "public let minTtlReduction: Int64",
              "line": 171,
              "signature": "public let minTtlReduction: Int64\n\n/// Creates a new Arsenal ACT.\n///\n/// - Parameters:\n///   - id: Unique token identifier.\n///   - agentDid: The agent's OAS DID.\n///   - issuer: The issuer identifier.\n///   - audience: The audience identifier.\n///   - capabilities: The capabilities granted.\n///   - scopes: The scope strings granted.\n///   - issuedAt: When the token was issued.\n///   - notBefore: When the token becomes valid.\n///   - expiresAt: When the token expires, or nil.\n///   - parentTokenId: The parent token ID for delegated tokens.\n///   - allowDelegation: Whether delegation is allowed.\n///   - maxDelegationDepth: Maximum delegation depth.\n///   - minTtlReduction: Minimum TTL reduction for delegation (seconds).\npublic init(\nid: String,\nagentDid: String,\nissuer: String,\naudience: String,\ncapabilities: [Capability],\nscopes: [String],\nissuedAt: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 189,
              "signature": "public init(\nid: String,\nagentDid: String,\nissuer: String,\naudience: String,\ncapabilities: [Capability],\nscopes: [String],\nissuedAt: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public var isExpired: Bool",
              "line": 220,
              "signature": "public var isExpired: Bool",
              "documentation": ""
            },
            {
              "name": "public var remainingTtlSeconds: Int64?",
              "line": 226,
              "signature": "public var remainingTtlSeconds: Int64?",
              "documentation": ""
            },
            {
              "name": "public func verifyACT(_ act: ArsenalACT) throws",
              "line": 252,
              "signature": "public func verifyACT(_ act: ArsenalACT) throws",
              "documentation": ""
            },
            {
              "name": "public func extractScopes(_ act: ArsenalACT) -> [String]",
              "line": 298,
              "signature": "public func extractScopes(_ act: ArsenalACT) -> [String]",
              "documentation": ""
            },
            {
              "name": "public func actAllowsScope(_ act: ArsenalACT, scope: String) throws -> Bool",
              "line": 329,
              "signature": "public func actAllowsScope(_ act: ArsenalACT, scope: String) throws -> Bool",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAuth/Delegation.swift",
          "sha256": "e90f59cc0cea58b3bc69fb6aa8e4da0144927c6c6c129b5852f5245721b9e917",
          "artifactSha256": "470e753683e3dce67174c9ac043f98e7a90dbb1703f9c0ad7591ae1fb4942b75",
          "url": "/reference/source/forge-swift/Sources/ForgeAuth/Delegation.swift.txt",
          "declarations": [
            {
              "name": "public struct DelegationRequest: Sendable",
              "line": 30,
              "signature": "public struct DelegationRequest: Sendable",
              "documentation": ""
            },
            {
              "name": "public let parentACT: ArsenalACT",
              "line": 32,
              "signature": "public let parentACT: ArsenalACT\n/// The parent agent's OAS DID.\npublic let parentDid: String\n/// The child agent's OAS DID.\npublic let childDid: String\n/// The capabilities requested for the child agent.\n///\n/// Must be a subset of the parent's capabilities.\npublic let requestedCapabilities: [Capability]\n/// The scope strings requested for the child agent.\n///\n/// Must be a subset of the parent's scopes.\npublic let requestedScopes: [String]\n\n/// Creates a new delegation request.\n///\n/// - Parameters:\n///   - parentACT: The parent agent's Arsenal ACT.\n///   - parentDid: The parent agent's OAS DID.\n///   - childDid: The child agent's OAS DID.\n///   - requestedCapabilities: The capabilities requested for the child.\n///   - requestedScopes: The scope strings requested for the child.\npublic init(\nparentACT: ArsenalACT,\nparentDid: String,\nchildDid: String,",
              "documentation": ""
            },
            {
              "name": "public let parentDid: String",
              "line": 34,
              "signature": "public let parentDid: String\n/// The child agent's OAS DID.\npublic let childDid: String\n/// The capabilities requested for the child agent.\n///\n/// Must be a subset of the parent's capabilities.\npublic let requestedCapabilities: [Capability]\n/// The scope strings requested for the child agent.\n///\n/// Must be a subset of the parent's scopes.\npublic let requestedScopes: [String]\n\n/// Creates a new delegation request.\n///\n/// - Parameters:\n///   - parentACT: The parent agent's Arsenal ACT.\n///   - parentDid: The parent agent's OAS DID.\n///   - childDid: The child agent's OAS DID.\n///   - requestedCapabilities: The capabilities requested for the child.\n///   - requestedScopes: The scope strings requested for the child.\npublic init(\nparentACT: ArsenalACT,\nparentDid: String,\nchildDid: String,\nrequestedCapabilities: [Capability],\nrequestedScopes: [String]",
              "documentation": ""
            },
            {
              "name": "public let childDid: String",
              "line": 36,
              "signature": "public let childDid: String\n/// The capabilities requested for the child agent.\n///\n/// Must be a subset of the parent's capabilities.\npublic let requestedCapabilities: [Capability]\n/// The scope strings requested for the child agent.\n///\n/// Must be a subset of the parent's scopes.\npublic let requestedScopes: [String]\n\n/// Creates a new delegation request.\n///\n/// - Parameters:\n///   - parentACT: The parent agent's Arsenal ACT.\n///   - parentDid: The parent agent's OAS DID.\n///   - childDid: The child agent's OAS DID.\n///   - requestedCapabilities: The capabilities requested for the child.\n///   - requestedScopes: The scope strings requested for the child.\npublic init(\nparentACT: ArsenalACT,\nparentDid: String,\nchildDid: String,\nrequestedCapabilities: [Capability],\nrequestedScopes: [String]\n)",
              "documentation": ""
            },
            {
              "name": "public let requestedCapabilities: [Capability]",
              "line": 40,
              "signature": "public let requestedCapabilities: [Capability]\n/// The scope strings requested for the child agent.\n///\n/// Must be a subset of the parent's scopes.\npublic let requestedScopes: [String]\n\n/// Creates a new delegation request.\n///\n/// - Parameters:\n///   - parentACT: The parent agent's Arsenal ACT.\n///   - parentDid: The parent agent's OAS DID.\n///   - childDid: The child agent's OAS DID.\n///   - requestedCapabilities: The capabilities requested for the child.\n///   - requestedScopes: The scope strings requested for the child.\npublic init(\nparentACT: ArsenalACT,\nparentDid: String,\nchildDid: String,\nrequestedCapabilities: [Capability],\nrequestedScopes: [String]\n)",
              "documentation": ""
            },
            {
              "name": "public let requestedScopes: [String]",
              "line": 44,
              "signature": "public let requestedScopes: [String]\n\n/// Creates a new delegation request.\n///\n/// - Parameters:\n///   - parentACT: The parent agent's Arsenal ACT.\n///   - parentDid: The parent agent's OAS DID.\n///   - childDid: The child agent's OAS DID.\n///   - requestedCapabilities: The capabilities requested for the child.\n///   - requestedScopes: The scope strings requested for the child.\npublic init(\nparentACT: ArsenalACT,\nparentDid: String,\nchildDid: String,\nrequestedCapabilities: [Capability],\nrequestedScopes: [String]\n)",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 54,
              "signature": "public init(\nparentACT: ArsenalACT,\nparentDid: String,\nchildDid: String,\nrequestedCapabilities: [Capability],\nrequestedScopes: [String]\n)",
              "documentation": ""
            },
            {
              "name": "public struct DelegationManager: Sendable",
              "line": 81,
              "signature": "public struct DelegationManager: Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 84,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func delegateCapabilities(_ request: DelegationRequest) throws -> ArsenalACT",
              "line": 108,
              "signature": "public func delegateCapabilities(_ request: DelegationRequest) throws -> ArsenalACT",
              "documentation": ""
            },
            {
              "name": "public func delegateCapabilities(_ request: DelegationRequest) throws -> ArsenalACT",
              "line": 216,
              "signature": "public func delegateCapabilities(_ request: DelegationRequest) throws -> ArsenalACT",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeAuth/ToolAuth.swift",
          "sha256": "44effceea9c7c8abfc08ebedcbe18a98b6b69cb992cca5fd66e443a95a916161",
          "artifactSha256": "e7e1c21dc6fd357fe1c3999cdd1568fa49f28fb9e6ebb6d74fc320f7e1a85cc5",
          "url": "/reference/source/forge-swift/Sources/ForgeAuth/ToolAuth.swift.txt",
          "declarations": [
            {
              "name": "public struct ToolAuthorizationRequest: Sendable",
              "line": 32,
              "signature": "public struct ToolAuthorizationRequest: Sendable",
              "documentation": ""
            },
            {
              "name": "public let agentDid: AgentDid",
              "line": 34,
              "signature": "public let agentDid: AgentDid\n/// The tool being invoked.\npublic let toolName: String\n/// The tool tier.\npublic let toolTier: ToolTier\n/// The ACT to check against, or `nil` for legacy mode.\npublic let act: ArsenalACT?\n\n/// Creates a new tool authorization request.\n///\n/// - Parameters:\n///   - agentDid: The agent's OAS DID.\n///   - toolName: The tool being invoked.\n///   - toolTier: The tool tier classification.\n///   - act: The Arsenal ACT to check, or `nil` for legacy mode.\npublic init(agentDid: AgentDid, toolName: String, toolTier: ToolTier, act: ArsenalACT?)",
              "documentation": ""
            },
            {
              "name": "public let toolName: String",
              "line": 36,
              "signature": "public let toolName: String\n/// The tool tier.\npublic let toolTier: ToolTier\n/// The ACT to check against, or `nil` for legacy mode.\npublic let act: ArsenalACT?\n\n/// Creates a new tool authorization request.\n///\n/// - Parameters:\n///   - agentDid: The agent's OAS DID.\n///   - toolName: The tool being invoked.\n///   - toolTier: The tool tier classification.\n///   - act: The Arsenal ACT to check, or `nil` for legacy mode.\npublic init(agentDid: AgentDid, toolName: String, toolTier: ToolTier, act: ArsenalACT?)",
              "documentation": ""
            },
            {
              "name": "public let toolTier: ToolTier",
              "line": 38,
              "signature": "public let toolTier: ToolTier\n/// The ACT to check against, or `nil` for legacy mode.\npublic let act: ArsenalACT?\n\n/// Creates a new tool authorization request.\n///\n/// - Parameters:\n///   - agentDid: The agent's OAS DID.\n///   - toolName: The tool being invoked.\n///   - toolTier: The tool tier classification.\n///   - act: The Arsenal ACT to check, or `nil` for legacy mode.\npublic init(agentDid: AgentDid, toolName: String, toolTier: ToolTier, act: ArsenalACT?)",
              "documentation": ""
            },
            {
              "name": "public let act: ArsenalACT?",
              "line": 40,
              "signature": "public let act: ArsenalACT?\n\n/// Creates a new tool authorization request.\n///\n/// - Parameters:\n///   - agentDid: The agent's OAS DID.\n///   - toolName: The tool being invoked.\n///   - toolTier: The tool tier classification.\n///   - act: The Arsenal ACT to check, or `nil` for legacy mode.\npublic init(agentDid: AgentDid, toolName: String, toolTier: ToolTier, act: ArsenalACT?)",
              "documentation": ""
            },
            {
              "name": "public init(agentDid: AgentDid, toolName: String, toolTier: ToolTier, act: ArsenalACT?)",
              "line": 49,
              "signature": "public init(agentDid: AgentDid, toolName: String, toolTier: ToolTier, act: ArsenalACT?)",
              "documentation": ""
            },
            {
              "name": "public enum ToolAuthorizationDecision: Sendable, Equatable",
              "line": 68,
              "signature": "public enum ToolAuthorizationDecision: Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var isAllowed: Bool",
              "line": 97,
              "signature": "public var isAllowed: Bool",
              "documentation": ""
            },
            {
              "name": "public var isDenied: Bool",
              "line": 107,
              "signature": "public var isDenied: Bool",
              "documentation": ""
            },
            {
              "name": "public var isLegacyMode: Bool",
              "line": 113,
              "signature": "public var isLegacyMode: Bool",
              "documentation": ""
            },
            {
              "name": "public struct ToolAuthorizer: Sendable",
              "line": 128,
              "signature": "public struct ToolAuthorizer: Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 131,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func authorize(_ request: ToolAuthorizationRequest) throws -> ToolAuthorizationDecision",
              "line": 153,
              "signature": "public func authorize(_ request: ToolAuthorizationRequest) throws -> ToolAuthorizationDecision",
              "documentation": ""
            },
            {
              "name": "public func authorizeToolInvocation(_ request: ToolAuthorizationRequest) throws -> ToolAuthorizationDecision",
              "line": 228,
              "signature": "public func authorizeToolInvocation(_ request: ToolAuthorizationRequest) throws -> ToolAuthorizationDecision",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeComm",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeComm library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeComm",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeComm/AgentMessage.swift",
          "sha256": "e088d2adeb494f8164b1bb6555ea85e7299548b6dd57c95967b7e85cec900d7b",
          "artifactSha256": "e45092244ae41eb33141c63c65962856472db1bcef78af824c933834458626c3",
          "url": "/reference/source/forge-swift/Sources/ForgeComm/AgentMessage.swift.txt",
          "declarations": [
            {
              "name": "public struct AgentCommMessage: Codable, Sendable, Equatable",
              "line": 24,
              "signature": "public struct AgentCommMessage: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 26,
              "signature": "public let id: String\n\n/// Correlation ID for linking related messages (request/response pairs).\n///\n/// When a message is a reply, `correlationId` matches the original\n/// message's `id`. This enables reliable request/response pairing\n/// across async transports.\npublic let correlationId: String?\n\n/// The message ID this message is a reply to.\n///\n/// Used in conjunction with `correlationId` for explicit reply chains.\npublic let replyTo: String?\n\n/// The sender agent's DID.\npublic let sender: String\n\n/// The recipient agent's DID.\npublic let recipient: String\n\n/// The communication protocol identifier.\n///\n/// Examples: `\"forge.delegation.v1\"`, `\"forge.heartbeat.v1\"`,\n/// `\"forge.task.v1\"`.\npublic let `protocol`: String\n",
              "documentation": ""
            },
            {
              "name": "public let correlationId: String?",
              "line": 33,
              "signature": "public let correlationId: String?\n\n/// The message ID this message is a reply to.\n///\n/// Used in conjunction with `correlationId` for explicit reply chains.\npublic let replyTo: String?\n\n/// The sender agent's DID.\npublic let sender: String\n\n/// The recipient agent's DID.\npublic let recipient: String\n\n/// The communication protocol identifier.\n///\n/// Examples: `\"forge.delegation.v1\"`, `\"forge.heartbeat.v1\"`,\n/// `\"forge.task.v1\"`.\npublic let `protocol`: String\n\n/// The message type within the protocol.\n///\n/// Examples: `\"request\"`, `\"response\"`, `\"notification\"`,\n/// `\"task_assign\"`, `\"task_result\"`.\npublic let messageType: String\n\n/// The message payload.",
              "documentation": ""
            },
            {
              "name": "public let replyTo: String?",
              "line": 38,
              "signature": "public let replyTo: String?\n\n/// The sender agent's DID.\npublic let sender: String\n\n/// The recipient agent's DID.\npublic let recipient: String\n\n/// The communication protocol identifier.\n///\n/// Examples: `\"forge.delegation.v1\"`, `\"forge.heartbeat.v1\"`,\n/// `\"forge.task.v1\"`.\npublic let `protocol`: String\n\n/// The message type within the protocol.\n///\n/// Examples: `\"request\"`, `\"response\"`, `\"notification\"`,\n/// `\"task_assign\"`, `\"task_result\"`.\npublic let messageType: String\n\n/// The message payload.\npublic let payload: JSONValue\n\n/// Optional Ed25519 signature over the message content.\n///\n/// When present, the signature covers the canonical JSON serialization",
              "documentation": ""
            },
            {
              "name": "public let sender: String",
              "line": 41,
              "signature": "public let sender: String\n\n/// The recipient agent's DID.\npublic let recipient: String\n\n/// The communication protocol identifier.\n///\n/// Examples: `\"forge.delegation.v1\"`, `\"forge.heartbeat.v1\"`,\n/// `\"forge.task.v1\"`.\npublic let `protocol`: String\n\n/// The message type within the protocol.\n///\n/// Examples: `\"request\"`, `\"response\"`, `\"notification\"`,\n/// `\"task_assign\"`, `\"task_result\"`.\npublic let messageType: String\n\n/// The message payload.\npublic let payload: JSONValue\n\n/// Optional Ed25519 signature over the message content.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, correlationId, sender, recipient, protocol, messageType, payload).\n/// Verification uses the sender's public key from their OAS DID document.\npublic let signature: String?",
              "documentation": ""
            },
            {
              "name": "public let recipient: String",
              "line": 44,
              "signature": "public let recipient: String\n\n/// The communication protocol identifier.\n///\n/// Examples: `\"forge.delegation.v1\"`, `\"forge.heartbeat.v1\"`,\n/// `\"forge.task.v1\"`.\npublic let `protocol`: String\n\n/// The message type within the protocol.\n///\n/// Examples: `\"request\"`, `\"response\"`, `\"notification\"`,\n/// `\"task_assign\"`, `\"task_result\"`.\npublic let messageType: String\n\n/// The message payload.\npublic let payload: JSONValue\n\n/// Optional Ed25519 signature over the message content.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, correlationId, sender, recipient, protocol, messageType, payload).\n/// Verification uses the sender's public key from their OAS DID document.\npublic let signature: String?\n\n/// When the message was created.\npublic let timestamp: Timestamp",
              "documentation": ""
            },
            {
              "name": "public let `protocol`: String",
              "line": 50,
              "signature": "public let `protocol`: String\n\n/// The message type within the protocol.\n///\n/// Examples: `\"request\"`, `\"response\"`, `\"notification\"`,\n/// `\"task_assign\"`, `\"task_result\"`.\npublic let messageType: String\n\n/// The message payload.\npublic let payload: JSONValue\n\n/// Optional Ed25519 signature over the message content.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, correlationId, sender, recipient, protocol, messageType, payload).\n/// Verification uses the sender's public key from their OAS DID document.\npublic let signature: String?\n\n/// When the message was created.\npublic let timestamp: Timestamp\n\n/// Creates a new agent communication message.\n///\n/// - Parameters:\n///   - id: Unique message identifier. Defaults to a new UUID.\n///   - correlationId: Optional correlation ID for request/response pairing.",
              "documentation": ""
            },
            {
              "name": "public let messageType: String",
              "line": 56,
              "signature": "public let messageType: String\n\n/// The message payload.\npublic let payload: JSONValue\n\n/// Optional Ed25519 signature over the message content.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, correlationId, sender, recipient, protocol, messageType, payload).\n/// Verification uses the sender's public key from their OAS DID document.\npublic let signature: String?\n\n/// When the message was created.\npublic let timestamp: Timestamp\n\n/// Creates a new agent communication message.\n///\n/// - Parameters:\n///   - id: Unique message identifier. Defaults to a new UUID.\n///   - correlationId: Optional correlation ID for request/response pairing.\n///   - replyTo: Optional message ID this message replies to.\n///   - sender: The sender agent's DID.\n///   - recipient: The recipient agent's DID.\n///   - protocol: The communication protocol identifier.\n///   - messageType: The message type within the protocol.\n///   - payload: The message payload.",
              "documentation": ""
            },
            {
              "name": "public let payload: JSONValue",
              "line": 59,
              "signature": "public let payload: JSONValue\n\n/// Optional Ed25519 signature over the message content.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, correlationId, sender, recipient, protocol, messageType, payload).\n/// Verification uses the sender's public key from their OAS DID document.\npublic let signature: String?\n\n/// When the message was created.\npublic let timestamp: Timestamp\n\n/// Creates a new agent communication message.\n///\n/// - Parameters:\n///   - id: Unique message identifier. Defaults to a new UUID.\n///   - correlationId: Optional correlation ID for request/response pairing.\n///   - replyTo: Optional message ID this message replies to.\n///   - sender: The sender agent's DID.\n///   - recipient: The recipient agent's DID.\n///   - protocol: The communication protocol identifier.\n///   - messageType: The message type within the protocol.\n///   - payload: The message payload.\n///   - signature: Optional Ed25519 signature.\n///   - timestamp: Message creation time. Defaults to now.\npublic init(",
              "documentation": ""
            },
            {
              "name": "public let signature: String?",
              "line": 66,
              "signature": "public let signature: String?\n\n/// When the message was created.\npublic let timestamp: Timestamp\n\n/// Creates a new agent communication message.\n///\n/// - Parameters:\n///   - id: Unique message identifier. Defaults to a new UUID.\n///   - correlationId: Optional correlation ID for request/response pairing.\n///   - replyTo: Optional message ID this message replies to.\n///   - sender: The sender agent's DID.\n///   - recipient: The recipient agent's DID.\n///   - protocol: The communication protocol identifier.\n///   - messageType: The message type within the protocol.\n///   - payload: The message payload.\n///   - signature: Optional Ed25519 signature.\n///   - timestamp: Message creation time. Defaults to now.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 69,
              "signature": "public let timestamp: Timestamp\n\n/// Creates a new agent communication message.\n///\n/// - Parameters:\n///   - id: Unique message identifier. Defaults to a new UUID.\n///   - correlationId: Optional correlation ID for request/response pairing.\n///   - replyTo: Optional message ID this message replies to.\n///   - sender: The sender agent's DID.\n///   - recipient: The recipient agent's DID.\n///   - protocol: The communication protocol identifier.\n///   - messageType: The message type within the protocol.\n///   - payload: The message payload.\n///   - signature: Optional Ed25519 signature.\n///   - timestamp: Message creation time. Defaults to now.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 84,
              "signature": "public init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public func reply(",
              "line": 119,
              "signature": "public func reply(\nmessageType: String,\npayload: JSONValue,\nsignature: String?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeComm/ChannelTransport.swift",
          "sha256": "146d33daeae7a2b3457f50b7848abdedfea30e282d001e3c8187f4ddf61ff082",
          "artifactSha256": "576c47af76982cce62d6ffa58d4fb0b5a00f2260a17a8b1bb7fbdc6e01029e49",
          "url": "/reference/source/forge-swift/Sources/ForgeComm/ChannelTransport.swift.txt",
          "declarations": [
            {
              "name": "public func createChannelPair() -> (ChannelTransport, ChannelTransport)",
              "line": 27,
              "signature": "public func createChannelPair() -> (ChannelTransport, ChannelTransport)",
              "documentation": ""
            },
            {
              "name": "public final class ChannelTransport: MessageTransport, @unchecked Sendable",
              "line": 40,
              "signature": "public final class ChannelTransport: MessageTransport, @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public func send(_ message: AgentCommMessage) async throws",
              "line": 57,
              "signature": "public func send(_ message: AgentCommMessage) async throws",
              "documentation": ""
            },
            {
              "name": "public func receive() async throws -> AgentCommMessage?",
              "line": 72,
              "signature": "public func receive() async throws -> AgentCommMessage?",
              "documentation": ""
            },
            {
              "name": "public func close() async",
              "line": 84,
              "signature": "public func close() async",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeComm/CommError.swift",
          "sha256": "89104fd6dfe9249620b935c3fb7f3709e58526c0b9f50b914eddfa47da08195d",
          "artifactSha256": "622f5c5c4aefa4e8125fcaf01efb53dbf23f94587f608102e67cfd84e9f31b9f",
          "url": "/reference/source/forge-swift/Sources/ForgeComm/CommError.swift.txt",
          "declarations": [
            {
              "name": "public enum CommError: Error, Sendable, Equatable",
              "line": 19,
              "signature": "public enum CommError: Error, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 58,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeComm/MessageTransport.swift",
          "sha256": "5b24d5739ad5d938e87df0829359da6bb617a9a0106bac46917a254a37580672",
          "artifactSha256": "abf9793397d1f55dff2b92aeeb4b6deaff8fe4e4c9913174440dc39ebe8b3efa",
          "url": "/reference/source/forge-swift/Sources/ForgeComm/MessageTransport.swift.txt",
          "declarations": [
            {
              "name": "public protocol MessageTransport: Sendable",
              "line": 24,
              "signature": "public protocol MessageTransport: Sendable",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeComm/NoopTransport.swift",
          "sha256": "7136095dd4d4a1ff977946024ebb9ec22c3e9b8da0051ba377f067e4e073003f",
          "artifactSha256": "9b6c2fbeb7261e9a83230324ccb36eb2c2216fc18720a4a1033920dcfc4c92a6",
          "url": "/reference/source/forge-swift/Sources/ForgeComm/NoopTransport.swift.txt",
          "declarations": [
            {
              "name": "public final class NoopTransport: MessageTransport, @unchecked Sendable",
              "line": 24,
              "signature": "public final class NoopTransport: MessageTransport, @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 29,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func send(_ message: AgentCommMessage) async throws",
              "line": 35,
              "signature": "public func send(_ message: AgentCommMessage) async throws",
              "documentation": ""
            },
            {
              "name": "public func receive() async throws -> AgentCommMessage?",
              "line": 46,
              "signature": "public func receive() async throws -> AgentCommMessage?",
              "documentation": ""
            },
            {
              "name": "public func close() async",
              "line": 51,
              "signature": "public func close() async",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeComm/ProtocolNegotiation.swift",
          "sha256": "c61ee77620f6ce6f7d75d854c6ed73f8489b87fb8ee724aa17336b81c3cadadd",
          "artifactSha256": "5f4b3fd5adbf5e400e3e1be75a437fc0b89d21a70da8fd4e9c762a9e986cf28a",
          "url": "/reference/source/forge-swift/Sources/ForgeComm/ProtocolNegotiation.swift.txt",
          "declarations": [
            {
              "name": "public struct ProtocolOffer: Codable, Sendable, Equatable",
              "line": 21,
              "signature": "public struct ProtocolOffer: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let offererDid: String",
              "line": 23,
              "signature": "public let offererDid: String\n/// The list of supported protocol identifiers, in preference order.\npublic let protocols: [String]\n/// When the offer was created.\npublic let timestamp: Timestamp\n\n/// Creates a new protocol offer.\n///\n/// - Parameters:\n///   - offererDid: The offering agent's DID.\n///   - protocols: Supported protocol identifiers in preference order.\n///   - timestamp: Offer creation time. Defaults to now.\npublic init(\noffererDid: String,\nprotocols: [String],\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let protocols: [String]",
              "line": 25,
              "signature": "public let protocols: [String]\n/// When the offer was created.\npublic let timestamp: Timestamp\n\n/// Creates a new protocol offer.\n///\n/// - Parameters:\n///   - offererDid: The offering agent's DID.\n///   - protocols: Supported protocol identifiers in preference order.\n///   - timestamp: Offer creation time. Defaults to now.\npublic init(\noffererDid: String,\nprotocols: [String],\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 27,
              "signature": "public let timestamp: Timestamp\n\n/// Creates a new protocol offer.\n///\n/// - Parameters:\n///   - offererDid: The offering agent's DID.\n///   - protocols: Supported protocol identifiers in preference order.\n///   - timestamp: Offer creation time. Defaults to now.\npublic init(\noffererDid: String,\nprotocols: [String],\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 35,
              "signature": "public init(\noffererDid: String,\nprotocols: [String],\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public struct ProtocolAccept: Codable, Sendable, Equatable",
              "line": 51,
              "signature": "public struct ProtocolAccept: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let accepterDid: String",
              "line": 53,
              "signature": "public let accepterDid: String\n/// The selected protocol identifier.\npublic let selectedProtocol: String\n/// When the acceptance was created.\npublic let timestamp: Timestamp\n\n/// Creates a new protocol acceptance.\n///\n/// - Parameters:\n///   - accepterDid: The accepting agent's DID.\n///   - selectedProtocol: The selected protocol identifier.\n///   - timestamp: Acceptance creation time. Defaults to now.\npublic init(\naccepterDid: String,\nselectedProtocol: String,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let selectedProtocol: String",
              "line": 55,
              "signature": "public let selectedProtocol: String\n/// When the acceptance was created.\npublic let timestamp: Timestamp\n\n/// Creates a new protocol acceptance.\n///\n/// - Parameters:\n///   - accepterDid: The accepting agent's DID.\n///   - selectedProtocol: The selected protocol identifier.\n///   - timestamp: Acceptance creation time. Defaults to now.\npublic init(\naccepterDid: String,\nselectedProtocol: String,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 57,
              "signature": "public let timestamp: Timestamp\n\n/// Creates a new protocol acceptance.\n///\n/// - Parameters:\n///   - accepterDid: The accepting agent's DID.\n///   - selectedProtocol: The selected protocol identifier.\n///   - timestamp: Acceptance creation time. Defaults to now.\npublic init(\naccepterDid: String,\nselectedProtocol: String,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 65,
              "signature": "public init(\naccepterDid: String,\nselectedProtocol: String,\ntimestamp: Timestamp;",
              "documentation": ""
            },
            {
              "name": "public func negotiateProtocol(",
              "line": 89,
              "signature": "public func negotiateProtocol(\noffer: ProtocolOffer,\nsupportedProtocols: [String],\nresponderDid: String\n) throws -> ProtocolAccept",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeCollab",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeCollab library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeCollab",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeCollab/CapabilityAdvertiser.swift",
          "sha256": "b112e91a562994bcd918e85b5de590999ca54993c4bcd4e9dd51c6fc938249b8",
          "artifactSha256": "e5ff8f0655c5bcacd28c8b17630d3e9f7902a1ebc83050ab8a096014212f367b",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/CapabilityAdvertiser.swift.txt",
          "declarations": [
            {
              "name": "public protocol CapabilityAdvertiser: Sendable",
              "line": 21,
              "signature": "public protocol CapabilityAdvertiser: Sendable",
              "documentation": ""
            },
            {
              "name": "public struct CapabilityAdvertisement: Codable, Sendable, Equatable",
              "line": 36,
              "signature": "public struct CapabilityAdvertisement: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let agentDid: String",
              "line": 38,
              "signature": "public let agentDid: String\n/// The agent's advertised capabilities.\npublic let capabilities: [String]\n/// When the advertisement was created.\npublic let timestamp: Timestamp\n\n/// Creates a new capability advertisement.\n///\n/// - Parameters:\n///   - agentDid: The agent's DID.\n///   - capabilities: The agent's capabilities.\npublic init(agentDid: String, capabilities: [String])",
              "documentation": ""
            },
            {
              "name": "public let capabilities: [String]",
              "line": 40,
              "signature": "public let capabilities: [String]\n/// When the advertisement was created.\npublic let timestamp: Timestamp\n\n/// Creates a new capability advertisement.\n///\n/// - Parameters:\n///   - agentDid: The agent's DID.\n///   - capabilities: The agent's capabilities.\npublic init(agentDid: String, capabilities: [String])",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 42,
              "signature": "public let timestamp: Timestamp\n\n/// Creates a new capability advertisement.\n///\n/// - Parameters:\n///   - agentDid: The agent's DID.\n///   - capabilities: The agent's capabilities.\npublic init(agentDid: String, capabilities: [String])",
              "documentation": ""
            },
            {
              "name": "public init(agentDid: String, capabilities: [String])",
              "line": 49,
              "signature": "public init(agentDid: String, capabilities: [String])",
              "documentation": ""
            },
            {
              "name": "public func matchTaskToAgents(",
              "line": 68,
              "signature": "public func matchTaskToAgents(\ntask: DelegatedTask,\nadvertisements: [CapabilityAdvertisement]\n) -> [String]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCollab/CollabError.swift",
          "sha256": "279ff86dd2eeeabf675525ed3c01187ce792f92754ac6e4773568c770df1487d",
          "artifactSha256": "502dbedce57b76b5d5d560568e4125f9e7530759b314138ae3d84591773d5075",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/CollabError.swift.txt",
          "declarations": [
            {
              "name": "public enum CollabError: Error, Sendable, Equatable",
              "line": 19,
              "signature": "public enum CollabError: Error, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 72,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCollab/CollaborationTypes.swift",
          "sha256": "a83c29eea72a24649925552bdfcc9b6009581e786384e6d8042304fba11327ed",
          "artifactSha256": "b0c61fb7afb7e55d1607fe673f97cda6726b37e8f79e37b6ba4111abbb700b74",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/CollaborationTypes.swift.txt",
          "declarations": [
            {
              "name": "public enum CollaborationRole: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 22,
              "signature": "public enum CollaborationRole: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public enum SessionState: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 42,
              "signature": "public enum SessionState: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public var validTransitions: [SessionState]",
              "line": 61,
              "signature": "public var validTransitions: [SessionState]",
              "documentation": ""
            },
            {
              "name": "public var isTerminal: Bool",
              "line": 73,
              "signature": "public var isTerminal: Bool",
              "documentation": ""
            },
            {
              "name": "public struct CollaborationSession: Codable, Sendable, Equatable",
              "line": 83,
              "signature": "public struct CollaborationSession: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 85,
              "signature": "public let id: String\n/// Human-readable session name.\npublic let name: String\n/// The current session state.\npublic var state: SessionState\n/// Map of agent DIDs to their roles in this session.\npublic var participants: [String: CollaborationRole]\n/// When the session was created.\npublic let createdAt: Timestamp\n/// When the session was last updated.\npublic var updatedAt: Timestamp\n\n/// Creates a new collaboration session.\n///\n/// - Parameters:\n///   - id: Unique session identifier. Defaults to a new UUID.\n///   - name: Human-readable session name.\n///   - participants: Initial participants and their roles.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let name: String",
              "line": 87,
              "signature": "public let name: String\n/// The current session state.\npublic var state: SessionState\n/// Map of agent DIDs to their roles in this session.\npublic var participants: [String: CollaborationRole]\n/// When the session was created.\npublic let createdAt: Timestamp\n/// When the session was last updated.\npublic var updatedAt: Timestamp\n\n/// Creates a new collaboration session.\n///\n/// - Parameters:\n///   - id: Unique session identifier. Defaults to a new UUID.\n///   - name: Human-readable session name.\n///   - participants: Initial participants and their roles.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public var state: SessionState",
              "line": 89,
              "signature": "public var state: SessionState\n/// Map of agent DIDs to their roles in this session.\npublic var participants: [String: CollaborationRole]\n/// When the session was created.\npublic let createdAt: Timestamp\n/// When the session was last updated.\npublic var updatedAt: Timestamp\n\n/// Creates a new collaboration session.\n///\n/// - Parameters:\n///   - id: Unique session identifier. Defaults to a new UUID.\n///   - name: Human-readable session name.\n///   - participants: Initial participants and their roles.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public var participants: [String: CollaborationRole]",
              "line": 91,
              "signature": "public var participants: [String: CollaborationRole]\n/// When the session was created.\npublic let createdAt: Timestamp\n/// When the session was last updated.\npublic var updatedAt: Timestamp\n\n/// Creates a new collaboration session.\n///\n/// - Parameters:\n///   - id: Unique session identifier. Defaults to a new UUID.\n///   - name: Human-readable session name.\n///   - participants: Initial participants and their roles.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let createdAt: Timestamp",
              "line": 93,
              "signature": "public let createdAt: Timestamp\n/// When the session was last updated.\npublic var updatedAt: Timestamp\n\n/// Creates a new collaboration session.\n///\n/// - Parameters:\n///   - id: Unique session identifier. Defaults to a new UUID.\n///   - name: Human-readable session name.\n///   - participants: Initial participants and their roles.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public var updatedAt: Timestamp",
              "line": 95,
              "signature": "public var updatedAt: Timestamp\n\n/// Creates a new collaboration session.\n///\n/// - Parameters:\n///   - id: Unique session identifier. Defaults to a new UUID.\n///   - name: Human-readable session name.\n///   - participants: Initial participants and their roles.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 103,
              "signature": "public init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public enum TaskPriority: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 123,
              "signature": "public enum TaskPriority: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct TaskConstraints: Codable, Sendable, Equatable",
              "line": 142,
              "signature": "public struct TaskConstraints: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var timeoutMs: UInt64?",
              "line": 144,
              "signature": "public var timeoutMs: UInt64?\n/// Maximum number of tool invocations allowed.\npublic var maxToolInvocations: UInt32?\n/// Maximum tokens the task may consume.\npublic var maxTokens: UInt64?\n/// Required capabilities the executing agent must have.\npublic var requiredCapabilities: [String]\n/// Whether the task may be further delegated to sub-agents.\npublic var allowSubDelegation: Bool\n\n/// Creates task constraints with defaults.\n///\n/// - Parameters:\n///   - timeoutMs: Maximum time in milliseconds. `nil` means no timeout.\n///   - maxToolInvocations: Maximum tool invocations. `nil` means no limit.\n///   - maxTokens: Maximum tokens. `nil` means no limit.\n///   - requiredCapabilities: Required capabilities. Defaults to empty.\n///   - allowSubDelegation: Whether sub-delegation is allowed. Defaults to `false`.\npublic init(\ntimeoutMs: UInt64?;",
              "documentation": ""
            },
            {
              "name": "public var maxToolInvocations: UInt32?",
              "line": 146,
              "signature": "public var maxToolInvocations: UInt32?\n/// Maximum tokens the task may consume.\npublic var maxTokens: UInt64?\n/// Required capabilities the executing agent must have.\npublic var requiredCapabilities: [String]\n/// Whether the task may be further delegated to sub-agents.\npublic var allowSubDelegation: Bool\n\n/// Creates task constraints with defaults.\n///\n/// - Parameters:\n///   - timeoutMs: Maximum time in milliseconds. `nil` means no timeout.\n///   - maxToolInvocations: Maximum tool invocations. `nil` means no limit.\n///   - maxTokens: Maximum tokens. `nil` means no limit.\n///   - requiredCapabilities: Required capabilities. Defaults to empty.\n///   - allowSubDelegation: Whether sub-delegation is allowed. Defaults to `false`.\npublic init(\ntimeoutMs: UInt64?;",
              "documentation": ""
            },
            {
              "name": "public var maxTokens: UInt64?",
              "line": 148,
              "signature": "public var maxTokens: UInt64?\n/// Required capabilities the executing agent must have.\npublic var requiredCapabilities: [String]\n/// Whether the task may be further delegated to sub-agents.\npublic var allowSubDelegation: Bool\n\n/// Creates task constraints with defaults.\n///\n/// - Parameters:\n///   - timeoutMs: Maximum time in milliseconds. `nil` means no timeout.\n///   - maxToolInvocations: Maximum tool invocations. `nil` means no limit.\n///   - maxTokens: Maximum tokens. `nil` means no limit.\n///   - requiredCapabilities: Required capabilities. Defaults to empty.\n///   - allowSubDelegation: Whether sub-delegation is allowed. Defaults to `false`.\npublic init(\ntimeoutMs: UInt64?;",
              "documentation": ""
            },
            {
              "name": "public var requiredCapabilities: [String]",
              "line": 150,
              "signature": "public var requiredCapabilities: [String]\n/// Whether the task may be further delegated to sub-agents.\npublic var allowSubDelegation: Bool\n\n/// Creates task constraints with defaults.\n///\n/// - Parameters:\n///   - timeoutMs: Maximum time in milliseconds. `nil` means no timeout.\n///   - maxToolInvocations: Maximum tool invocations. `nil` means no limit.\n///   - maxTokens: Maximum tokens. `nil` means no limit.\n///   - requiredCapabilities: Required capabilities. Defaults to empty.\n///   - allowSubDelegation: Whether sub-delegation is allowed. Defaults to `false`.\npublic init(\ntimeoutMs: UInt64?;",
              "documentation": ""
            },
            {
              "name": "public var allowSubDelegation: Bool",
              "line": 152,
              "signature": "public var allowSubDelegation: Bool\n\n/// Creates task constraints with defaults.\n///\n/// - Parameters:\n///   - timeoutMs: Maximum time in milliseconds. `nil` means no timeout.\n///   - maxToolInvocations: Maximum tool invocations. `nil` means no limit.\n///   - maxTokens: Maximum tokens. `nil` means no limit.\n///   - requiredCapabilities: Required capabilities. Defaults to empty.\n///   - allowSubDelegation: Whether sub-delegation is allowed. Defaults to `false`.\npublic init(\ntimeoutMs: UInt64?;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 162,
              "signature": "public init(\ntimeoutMs: UInt64?;",
              "documentation": ""
            },
            {
              "name": "public struct DelegatedTask: Codable, Sendable, Equatable",
              "line": 182,
              "signature": "public struct DelegatedTask: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 184,
              "signature": "public let id: String\n/// The session this task belongs to.\npublic let sessionId: String\n/// The delegating agent's DID.\npublic let delegatorDid: String\n/// The assigned agent's DID. `nil` if unassigned.\npublic var assigneeDid: String?\n/// Human-readable task description.\npublic let description: String\n/// The task input/instructions.\npublic let input: JSONValue\n/// Task priority.\npublic let priority: TaskPriority\n/// Execution constraints.\npublic let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.",
              "documentation": ""
            },
            {
              "name": "public let sessionId: String",
              "line": 186,
              "signature": "public let sessionId: String\n/// The delegating agent's DID.\npublic let delegatorDid: String\n/// The assigned agent's DID. `nil` if unassigned.\npublic var assigneeDid: String?\n/// Human-readable task description.\npublic let description: String\n/// The task input/instructions.\npublic let input: JSONValue\n/// Task priority.\npublic let priority: TaskPriority\n/// Execution constraints.\npublic let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.",
              "documentation": ""
            },
            {
              "name": "public let delegatorDid: String",
              "line": 188,
              "signature": "public let delegatorDid: String\n/// The assigned agent's DID. `nil` if unassigned.\npublic var assigneeDid: String?\n/// Human-readable task description.\npublic let description: String\n/// The task input/instructions.\npublic let input: JSONValue\n/// Task priority.\npublic let priority: TaskPriority\n/// Execution constraints.\npublic let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.\n///   - constraints: Execution constraints.\npublic init(",
              "documentation": ""
            },
            {
              "name": "public var assigneeDid: String?",
              "line": 190,
              "signature": "public var assigneeDid: String?\n/// Human-readable task description.\npublic let description: String\n/// The task input/instructions.\npublic let input: JSONValue\n/// Task priority.\npublic let priority: TaskPriority\n/// Execution constraints.\npublic let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.\n///   - constraints: Execution constraints.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let description: String",
              "line": 192,
              "signature": "public let description: String\n/// The task input/instructions.\npublic let input: JSONValue\n/// Task priority.\npublic let priority: TaskPriority\n/// Execution constraints.\npublic let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.\n///   - constraints: Execution constraints.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let input: JSONValue",
              "line": 194,
              "signature": "public let input: JSONValue\n/// Task priority.\npublic let priority: TaskPriority\n/// Execution constraints.\npublic let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.\n///   - constraints: Execution constraints.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let priority: TaskPriority",
              "line": 196,
              "signature": "public let priority: TaskPriority\n/// Execution constraints.\npublic let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.\n///   - constraints: Execution constraints.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let constraints: TaskConstraints",
              "line": 198,
              "signature": "public let constraints: TaskConstraints\n/// When the task was created.\npublic let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.\n///   - constraints: Execution constraints.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let createdAt: Timestamp",
              "line": 200,
              "signature": "public let createdAt: Timestamp\n\n/// Creates a new delegated task.\n///\n/// - Parameters:\n///   - id: Unique task identifier. Defaults to a new UUID.\n///   - sessionId: The collaboration session ID.\n///   - delegatorDid: The delegating agent's DID.\n///   - assigneeDid: The assigned agent's DID.\n///   - description: Human-readable task description.\n///   - input: The task input/instructions.\n///   - priority: Task priority. Defaults to `.normal`.\n///   - constraints: Execution constraints.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 213,
              "signature": "public init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public struct TaskResult: Codable, Sendable, Equatable",
              "line": 240,
              "signature": "public struct TaskResult: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let taskId: String",
              "line": 242,
              "signature": "public let taskId: String\n/// The executing agent's DID.\npublic let executorDid: String\n/// Whether the task completed successfully.\npublic let success: Bool\n/// The task output.\npublic let output: JSONValue\n/// Error message if the task failed.\npublic let errorMessage: String?\n/// When the result was produced.\npublic let completedAt: Timestamp\n\n/// Creates a successful task result.\n///\n/// - Parameters:\n///   - taskId: The task ID.\n///   - executorDid: The executing agent's DID.\n///   - output: The task output.\n/// - Returns: A successful `TaskResult`.\npublic static func success(\ntaskId: String,\nexecutorDid: String,\noutput: JSONValue\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public let executorDid: String",
              "line": 244,
              "signature": "public let executorDid: String\n/// Whether the task completed successfully.\npublic let success: Bool\n/// The task output.\npublic let output: JSONValue\n/// Error message if the task failed.\npublic let errorMessage: String?\n/// When the result was produced.\npublic let completedAt: Timestamp\n\n/// Creates a successful task result.\n///\n/// - Parameters:\n///   - taskId: The task ID.\n///   - executorDid: The executing agent's DID.\n///   - output: The task output.\n/// - Returns: A successful `TaskResult`.\npublic static func success(\ntaskId: String,\nexecutorDid: String,\noutput: JSONValue\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public let success: Bool",
              "line": 246,
              "signature": "public let success: Bool\n/// The task output.\npublic let output: JSONValue\n/// Error message if the task failed.\npublic let errorMessage: String?\n/// When the result was produced.\npublic let completedAt: Timestamp\n\n/// Creates a successful task result.\n///\n/// - Parameters:\n///   - taskId: The task ID.\n///   - executorDid: The executing agent's DID.\n///   - output: The task output.\n/// - Returns: A successful `TaskResult`.\npublic static func success(\ntaskId: String,\nexecutorDid: String,\noutput: JSONValue\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public let output: JSONValue",
              "line": 248,
              "signature": "public let output: JSONValue\n/// Error message if the task failed.\npublic let errorMessage: String?\n/// When the result was produced.\npublic let completedAt: Timestamp\n\n/// Creates a successful task result.\n///\n/// - Parameters:\n///   - taskId: The task ID.\n///   - executorDid: The executing agent's DID.\n///   - output: The task output.\n/// - Returns: A successful `TaskResult`.\npublic static func success(\ntaskId: String,\nexecutorDid: String,\noutput: JSONValue\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public let errorMessage: String?",
              "line": 250,
              "signature": "public let errorMessage: String?\n/// When the result was produced.\npublic let completedAt: Timestamp\n\n/// Creates a successful task result.\n///\n/// - Parameters:\n///   - taskId: The task ID.\n///   - executorDid: The executing agent's DID.\n///   - output: The task output.\n/// - Returns: A successful `TaskResult`.\npublic static func success(\ntaskId: String,\nexecutorDid: String,\noutput: JSONValue\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public let completedAt: Timestamp",
              "line": 252,
              "signature": "public let completedAt: Timestamp\n\n/// Creates a successful task result.\n///\n/// - Parameters:\n///   - taskId: The task ID.\n///   - executorDid: The executing agent's DID.\n///   - output: The task output.\n/// - Returns: A successful `TaskResult`.\npublic static func success(\ntaskId: String,\nexecutorDid: String,\noutput: JSONValue\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public static func success(",
              "line": 261,
              "signature": "public static func success(\ntaskId: String,\nexecutorDid: String,\noutput: JSONValue\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public static func failure(",
              "line": 283,
              "signature": "public static func failure(\ntaskId: String,\nexecutorDid: String,\nerror: String\n) -> TaskResult",
              "documentation": ""
            },
            {
              "name": "public enum InterruptType: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 304,
              "signature": "public enum InterruptType: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct Interrupt: Codable, Sendable, Equatable",
              "line": 325,
              "signature": "public struct Interrupt: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 327,
              "signature": "public let id: String\n/// The task that raised the interrupt.\npublic let taskId: String\n/// The agent that raised the interrupt.\npublic let raiserDid: String\n/// The type of interrupt.\npublic let interruptType: InterruptType\n/// Description of why the interrupt was raised.\npublic let reason: String\n/// Additional context data.\npublic let context: JSONValue\n/// When the interrupt was raised.\npublic let timestamp: Timestamp\n\n/// Creates a new interrupt.\n///\n/// - Parameters:\n///   - id: Unique interrupt identifier. Defaults to a new UUID.\n///   - taskId: The task that raised the interrupt.\n///   - raiserDid: The agent that raised the interrupt.\n///   - interruptType: The type of interrupt.\n///   - reason: Description of why the interrupt was raised.\n///   - context: Additional context data.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let taskId: String",
              "line": 329,
              "signature": "public let taskId: String\n/// The agent that raised the interrupt.\npublic let raiserDid: String\n/// The type of interrupt.\npublic let interruptType: InterruptType\n/// Description of why the interrupt was raised.\npublic let reason: String\n/// Additional context data.\npublic let context: JSONValue\n/// When the interrupt was raised.\npublic let timestamp: Timestamp\n\n/// Creates a new interrupt.\n///\n/// - Parameters:\n///   - id: Unique interrupt identifier. Defaults to a new UUID.\n///   - taskId: The task that raised the interrupt.\n///   - raiserDid: The agent that raised the interrupt.\n///   - interruptType: The type of interrupt.\n///   - reason: Description of why the interrupt was raised.\n///   - context: Additional context data.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let raiserDid: String",
              "line": 331,
              "signature": "public let raiserDid: String\n/// The type of interrupt.\npublic let interruptType: InterruptType\n/// Description of why the interrupt was raised.\npublic let reason: String\n/// Additional context data.\npublic let context: JSONValue\n/// When the interrupt was raised.\npublic let timestamp: Timestamp\n\n/// Creates a new interrupt.\n///\n/// - Parameters:\n///   - id: Unique interrupt identifier. Defaults to a new UUID.\n///   - taskId: The task that raised the interrupt.\n///   - raiserDid: The agent that raised the interrupt.\n///   - interruptType: The type of interrupt.\n///   - reason: Description of why the interrupt was raised.\n///   - context: Additional context data.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let interruptType: InterruptType",
              "line": 333,
              "signature": "public let interruptType: InterruptType\n/// Description of why the interrupt was raised.\npublic let reason: String\n/// Additional context data.\npublic let context: JSONValue\n/// When the interrupt was raised.\npublic let timestamp: Timestamp\n\n/// Creates a new interrupt.\n///\n/// - Parameters:\n///   - id: Unique interrupt identifier. Defaults to a new UUID.\n///   - taskId: The task that raised the interrupt.\n///   - raiserDid: The agent that raised the interrupt.\n///   - interruptType: The type of interrupt.\n///   - reason: Description of why the interrupt was raised.\n///   - context: Additional context data.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let reason: String",
              "line": 335,
              "signature": "public let reason: String\n/// Additional context data.\npublic let context: JSONValue\n/// When the interrupt was raised.\npublic let timestamp: Timestamp\n\n/// Creates a new interrupt.\n///\n/// - Parameters:\n///   - id: Unique interrupt identifier. Defaults to a new UUID.\n///   - taskId: The task that raised the interrupt.\n///   - raiserDid: The agent that raised the interrupt.\n///   - interruptType: The type of interrupt.\n///   - reason: Description of why the interrupt was raised.\n///   - context: Additional context data.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let context: JSONValue",
              "line": 337,
              "signature": "public let context: JSONValue\n/// When the interrupt was raised.\npublic let timestamp: Timestamp\n\n/// Creates a new interrupt.\n///\n/// - Parameters:\n///   - id: Unique interrupt identifier. Defaults to a new UUID.\n///   - taskId: The task that raised the interrupt.\n///   - raiserDid: The agent that raised the interrupt.\n///   - interruptType: The type of interrupt.\n///   - reason: Description of why the interrupt was raised.\n///   - context: Additional context data.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 339,
              "signature": "public let timestamp: Timestamp\n\n/// Creates a new interrupt.\n///\n/// - Parameters:\n///   - id: Unique interrupt identifier. Defaults to a new UUID.\n///   - taskId: The task that raised the interrupt.\n///   - raiserDid: The agent that raised the interrupt.\n///   - interruptType: The type of interrupt.\n///   - reason: Description of why the interrupt was raised.\n///   - context: Additional context data.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 350,
              "signature": "public init(\nid: String;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCollab/Delegation.swift",
          "sha256": "3146225eaec24a794ea8ccf5a63b4b156cd62f66546c83b3603e5439b11a023c",
          "artifactSha256": "48effc400af2c6d0d5f65d5723290b9e18fc44466aae56c8ce82a92cbea443dd",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/Delegation.swift.txt",
          "declarations": [
            {
              "name": "public func createDelegatedTask(",
              "line": 27,
              "signature": "public func createDelegatedTask(\nsessionId: String,\ndelegatorDid: String,\nassigneeDid: String?;",
              "documentation": ""
            },
            {
              "name": "public func validateTaskConstraints(",
              "line": 58,
              "signature": "public func validateTaskConstraints(\ntask: DelegatedTask,\nagentCapabilities: [String]\n) throws",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCollab/InterruptHandler.swift",
          "sha256": "6658a8ebefb9711778c194796e5ae358bc98e4e9ded2eafcaaa0c25d788cdd79",
          "artifactSha256": "df3a7780cb685f2f643469f0dfce727d51cc092b1d6a33087c0193ff095d5039",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/InterruptHandler.swift.txt",
          "declarations": [
            {
              "name": "public protocol InterruptHandler: Sendable",
              "line": 20,
              "signature": "public protocol InterruptHandler: Sendable",
              "documentation": ""
            },
            {
              "name": "public func createInterrupt(",
              "line": 43,
              "signature": "public func createInterrupt(\ntaskId: String,\nraiserDid: String,\ntype: InterruptType,\nreason: String,\ncontext: JSONValue;",
              "documentation": ""
            },
            {
              "name": "public final class NoopInterruptHandler: InterruptHandler, Sendable",
              "line": 62,
              "signature": "public final class NoopInterruptHandler: InterruptHandler, Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 63,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func handle(_ interrupt: Interrupt) async throws -> JSONValue",
              "line": 66,
              "signature": "public func handle(_ interrupt: Interrupt) async throws -> JSONValue",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCollab/RoleContracts.swift",
          "sha256": "54e2e93e550a47771b099488a1d54a8d437e8eca6509b305fcc22ac1ef425432",
          "artifactSha256": "ba29e4ddd9864dcb9a512d60cb1e19a9e8c226e11a04a18cc369747cead6281d",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/RoleContracts.swift.txt",
          "declarations": [
            {
              "name": "public protocol CoordinatorContract: Sendable",
              "line": 22,
              "signature": "public protocol CoordinatorContract: Sendable",
              "documentation": ""
            },
            {
              "name": "public protocol WorkerContract: Sendable",
              "line": 57,
              "signature": "public protocol WorkerContract: Sendable",
              "documentation": ""
            },
            {
              "name": "public protocol PeerContract: Sendable",
              "line": 86,
              "signature": "public protocol PeerContract: Sendable",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCollab/SessionContract.swift",
          "sha256": "114e646c0dd14b78e3481767de789907a8d5cfb1b6b55a2c2990feed2dc8856d",
          "artifactSha256": "01c5d3524a503edd21ce6aca75102c7e7eaf3e0cdcdc5778ee993d4af3d6e00d",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/SessionContract.swift.txt",
          "declarations": [
            {
              "name": "public final class SessionManager: @unchecked Sendable",
              "line": 27,
              "signature": "public final class SessionManager: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init(name: String, sessionId: String;",
              "line": 38,
              "signature": "public init(name: String, sessionId: String;",
              "documentation": ""
            },
            {
              "name": "public var session: CollaborationSession",
              "line": 43,
              "signature": "public var session: CollaborationSession",
              "documentation": ""
            },
            {
              "name": "public var state: SessionState",
              "line": 50,
              "signature": "public var state: SessionState",
              "documentation": ""
            },
            {
              "name": "public func addParticipant(_ did: String, role: CollaborationRole) throws",
              "line": 62,
              "signature": "public func addParticipant(_ did: String, role: CollaborationRole) throws",
              "documentation": ""
            },
            {
              "name": "public func removeParticipant(_ did: String)",
              "line": 75,
              "signature": "public func removeParticipant(_ did: String)",
              "documentation": ""
            },
            {
              "name": "public func transition(to target: SessionState) throws",
              "line": 89,
              "signature": "public func transition(to target: SessionState) throws",
              "documentation": ""
            },
            {
              "name": "public func addTask(_ task: DelegatedTask) throws",
              "line": 109,
              "signature": "public func addTask(_ task: DelegatedTask) throws",
              "documentation": ""
            },
            {
              "name": "public func recordResult(_ result: TaskResult)",
              "line": 122,
              "signature": "public func recordResult(_ result: TaskResult)",
              "documentation": ""
            },
            {
              "name": "public func tasks() -> [DelegatedTask]",
              "line": 130,
              "signature": "public func tasks() -> [DelegatedTask]",
              "documentation": ""
            },
            {
              "name": "public func results() -> [TaskResult]",
              "line": 137,
              "signature": "public func results() -> [TaskResult]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeCollab/SharedContext.swift",
          "sha256": "5b2ace03cba8f402ce191a7542f9eecf47f3ed37b01fee7fca479533765e7ab4",
          "artifactSha256": "e7e3cef16120fa022f21766dcba780eeb415d60babc0164b4149c15d55b5e754",
          "url": "/reference/source/forge-swift/Sources/ForgeCollab/SharedContext.swift.txt",
          "declarations": [
            {
              "name": "public protocol SharedContextContract: Sendable",
              "line": 21,
              "signature": "public protocol SharedContextContract: Sendable",
              "documentation": ""
            },
            {
              "name": "public final class InMemorySharedContext: SharedContextContract, @unchecked Sendable",
              "line": 68,
              "signature": "public final class InMemorySharedContext: SharedContextContract, @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 73,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func get(_ key: String) -> JSONValue?",
              "line": 79,
              "signature": "public func get(_ key: String) -> JSONValue?",
              "documentation": ""
            },
            {
              "name": "public func set(_ key: String, value: JSONValue, writerDid: String)",
              "line": 91,
              "signature": "public func set(_ key: String, value: JSONValue, writerDid: String)",
              "documentation": ""
            },
            {
              "name": "public func remove(_ key: String) -> JSONValue?",
              "line": 106,
              "signature": "public func remove(_ key: String) -> JSONValue?",
              "documentation": ""
            },
            {
              "name": "public func keys() -> [String]",
              "line": 113,
              "signature": "public func keys() -> [String]",
              "documentation": ""
            },
            {
              "name": "public var count: Int",
              "line": 120,
              "signature": "public var count: Int",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeTelemetry",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeTelemetry library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeTelemetry",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeTelemetry/AuditTrail.swift",
          "sha256": "97192f127dae5ed38bfb9dbf2919d2544c45c701a0343003f99b0149c3945cbb",
          "artifactSha256": "73e6b9ee7bfd984829097b336a23deee587c4b2c186116aa906348ea96ecccf7",
          "url": "/reference/source/forge-swift/Sources/ForgeTelemetry/AuditTrail.swift.txt",
          "declarations": [
            {
              "name": "public enum AuditEntryKind: String, Codable, Sendable, Hashable, CaseIterable",
              "line": 20,
              "signature": "public enum AuditEntryKind: String, Codable, Sendable, Hashable, CaseIterable",
              "documentation": ""
            },
            {
              "name": "public struct AuditEntry: Codable, Sendable, Equatable",
              "line": 50,
              "signature": "public struct AuditEntry: Codable, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public let id: String",
              "line": 52,
              "signature": "public let id: String\n/// The kind of operation recorded.\npublic let kind: AuditEntryKind\n/// The agent DID that performed the operation.\npublic let agentDid: String\n/// When the operation occurred.\npublic let timestamp: Timestamp\n/// Operation-specific details.\npublic let details: JSONValue\n/// Optional Ed25519 signature over the entry.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, kind, agentDid, timestamp, details). Verification uses the\n/// agent's public key from their OAS DID document.\npublic let signature: String?\n\n/// Creates a new audit entry.\n///\n/// - Parameters:\n///   - id: Unique entry identifier. Defaults to a new UUID.\n///   - kind: The kind of operation.\n///   - agentDid: The agent DID.\n///   - details: Operation-specific details.\n///   - signature: Optional signature.\n///   - timestamp: When the operation occurred. Defaults to now.\npublic init(",
              "documentation": ""
            },
            {
              "name": "public let kind: AuditEntryKind",
              "line": 54,
              "signature": "public let kind: AuditEntryKind\n/// The agent DID that performed the operation.\npublic let agentDid: String\n/// When the operation occurred.\npublic let timestamp: Timestamp\n/// Operation-specific details.\npublic let details: JSONValue\n/// Optional Ed25519 signature over the entry.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, kind, agentDid, timestamp, details). Verification uses the\n/// agent's public key from their OAS DID document.\npublic let signature: String?\n\n/// Creates a new audit entry.\n///\n/// - Parameters:\n///   - id: Unique entry identifier. Defaults to a new UUID.\n///   - kind: The kind of operation.\n///   - agentDid: The agent DID.\n///   - details: Operation-specific details.\n///   - signature: Optional signature.\n///   - timestamp: When the operation occurred. Defaults to now.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let agentDid: String",
              "line": 56,
              "signature": "public let agentDid: String\n/// When the operation occurred.\npublic let timestamp: Timestamp\n/// Operation-specific details.\npublic let details: JSONValue\n/// Optional Ed25519 signature over the entry.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, kind, agentDid, timestamp, details). Verification uses the\n/// agent's public key from their OAS DID document.\npublic let signature: String?\n\n/// Creates a new audit entry.\n///\n/// - Parameters:\n///   - id: Unique entry identifier. Defaults to a new UUID.\n///   - kind: The kind of operation.\n///   - agentDid: The agent DID.\n///   - details: Operation-specific details.\n///   - signature: Optional signature.\n///   - timestamp: When the operation occurred. Defaults to now.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let timestamp: Timestamp",
              "line": 58,
              "signature": "public let timestamp: Timestamp\n/// Operation-specific details.\npublic let details: JSONValue\n/// Optional Ed25519 signature over the entry.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, kind, agentDid, timestamp, details). Verification uses the\n/// agent's public key from their OAS DID document.\npublic let signature: String?\n\n/// Creates a new audit entry.\n///\n/// - Parameters:\n///   - id: Unique entry identifier. Defaults to a new UUID.\n///   - kind: The kind of operation.\n///   - agentDid: The agent DID.\n///   - details: Operation-specific details.\n///   - signature: Optional signature.\n///   - timestamp: When the operation occurred. Defaults to now.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let details: JSONValue",
              "line": 60,
              "signature": "public let details: JSONValue\n/// Optional Ed25519 signature over the entry.\n///\n/// When present, the signature covers the canonical JSON serialization\n/// of (id, kind, agentDid, timestamp, details). Verification uses the\n/// agent's public key from their OAS DID document.\npublic let signature: String?\n\n/// Creates a new audit entry.\n///\n/// - Parameters:\n///   - id: Unique entry identifier. Defaults to a new UUID.\n///   - kind: The kind of operation.\n///   - agentDid: The agent DID.\n///   - details: Operation-specific details.\n///   - signature: Optional signature.\n///   - timestamp: When the operation occurred. Defaults to now.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public let signature: String?",
              "line": 66,
              "signature": "public let signature: String?\n\n/// Creates a new audit entry.\n///\n/// - Parameters:\n///   - id: Unique entry identifier. Defaults to a new UUID.\n///   - kind: The kind of operation.\n///   - agentDid: The agent DID.\n///   - details: Operation-specific details.\n///   - signature: Optional signature.\n///   - timestamp: When the operation occurred. Defaults to now.\npublic init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public init(",
              "line": 77,
              "signature": "public init(\nid: String;",
              "documentation": ""
            },
            {
              "name": "public final class AuditTrail: @unchecked Sendable",
              "line": 111,
              "signature": "public final class AuditTrail: @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public let agentDid: String",
              "line": 113,
              "signature": "public let agentDid: String\n\nprivate var _entries: [AuditEntry];",
              "documentation": ""
            },
            {
              "name": "public init(agentDid: String, maxEntries: Int;",
              "line": 124,
              "signature": "public init(agentDid: String, maxEntries: Int;",
              "documentation": ""
            },
            {
              "name": "public func append(",
              "line": 138,
              "signature": "public func append(\nkind: AuditEntryKind,\ndetails: JSONValue;",
              "documentation": ""
            },
            {
              "name": "public func entries() -> [AuditEntry]",
              "line": 166,
              "signature": "public func entries() -> [AuditEntry]",
              "documentation": ""
            },
            {
              "name": "public var count: Int",
              "line": 173,
              "signature": "public var count: Int",
              "documentation": ""
            },
            {
              "name": "public func entries(ofKind kind: AuditEntryKind) -> [AuditEntry]",
              "line": 183,
              "signature": "public func entries(ofKind kind: AuditEntryKind) -> [AuditEntry]",
              "documentation": ""
            },
            {
              "name": "public func entries(from: Timestamp, to: Timestamp) -> [AuditEntry]",
              "line": 195,
              "signature": "public func entries(from: Timestamp, to: Timestamp) -> [AuditEntry]",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeTelemetry/SpanCollector.swift",
          "sha256": "c8788ed381597dcbe0aa6bcffdd1394cf9624dd119ff8c7eb99414a2f059d110",
          "artifactSha256": "08c58b2a4ffb6a87284020f0be5de3c0eccd4fb49b80491ba4cfd6cc2d2f7449",
          "url": "/reference/source/forge-swift/Sources/ForgeTelemetry/SpanCollector.swift.txt",
          "declarations": [
            {
              "name": "public protocol SpanCollector: Sendable",
              "line": 21,
              "signature": "public protocol SpanCollector: Sendable",
              "documentation": ""
            },
            {
              "name": "public final class InMemorySpanCollector: SpanCollector, @unchecked Sendable",
              "line": 50,
              "signature": "public final class InMemorySpanCollector: SpanCollector, @unchecked Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 55,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func collect(_ span: ForgeSpan)",
              "line": 60,
              "signature": "public func collect(_ span: ForgeSpan)",
              "documentation": ""
            },
            {
              "name": "public func spans() -> [ForgeSpan]",
              "line": 67,
              "signature": "public func spans() -> [ForgeSpan]",
              "documentation": ""
            },
            {
              "name": "public var count: Int",
              "line": 74,
              "signature": "public var count: Int",
              "documentation": ""
            },
            {
              "name": "public func clear()",
              "line": 81,
              "signature": "public func clear()",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeTelemetry/TelemetryContract.swift",
          "sha256": "9d0f306961b6c643e39b4ba0e45502344f6e5b9f645dfc5be7815fcf9d351825",
          "artifactSha256": "85a580ed9155237484a3ea53fd78841b43da0881570d15205bc7aa71b7264fae",
          "url": "/reference/source/forge-swift/Sources/ForgeTelemetry/TelemetryContract.swift.txt",
          "declarations": [
            {
              "name": "public protocol TelemetryContract: Sendable",
              "line": 29,
              "signature": "public protocol TelemetryContract: Sendable",
              "documentation": ""
            },
            {
              "name": "public final class NoopTelemetry: TelemetryContract, Sendable",
              "line": 68,
              "signature": "public final class NoopTelemetry: TelemetryContract, Sendable",
              "documentation": ""
            },
            {
              "name": "public init()",
              "line": 70,
              "signature": "public init()",
              "documentation": ""
            },
            {
              "name": "public func emitSpan(_ span: ForgeSpan)",
              "line": 73,
              "signature": "public func emitSpan(_ span: ForgeSpan)",
              "documentation": ""
            },
            {
              "name": "public func emitEvent(_ event: ForgeEvent)",
              "line": 76,
              "signature": "public func emitEvent(_ event: ForgeEvent)",
              "documentation": ""
            },
            {
              "name": "public func recordMetric(_ name: String, value: Double, labels: [String: String])",
              "line": 79,
              "signature": "public func recordMetric(_ name: String, value: Double, labels: [String: String])",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-swift/Sources/ForgeTelemetry/TelemetryError.swift",
          "sha256": "26c9f649d4d9b2559ef0808bb014d9cf857584d63d767e4846bf63a24c52eb9d",
          "artifactSha256": "3f56ff6161816aadf86c21a9d1f4531bfdbd71fc65d09af4d5e0e5fb98e608f4",
          "url": "/reference/source/forge-swift/Sources/ForgeTelemetry/TelemetryError.swift.txt",
          "declarations": [
            {
              "name": "public enum TelemetryError: Error, Sendable, Equatable",
              "line": 16,
              "signature": "public enum TelemetryError: Error, Sendable, Equatable",
              "documentation": ""
            },
            {
              "name": "public var errorDescription: String?",
              "line": 47,
              "signature": "public var errorDescription: String?",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "ForgeSDK",
      "language": "swift",
      "version": "Swift package source snapshot",
      "description": "Swift ForgeSDK library product.",
      "manifest": "forge-swift/Package.swift",
      "manifestSha256": "8579cd038904d9101db7b7714fa006f94144a6f951c0535512114bb00d4a3128",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/swift/ForgeSDK",
      "features": {},
      "files": [
        {
          "path": "forge-swift/Sources/ForgeSDK/ForgeSDK.swift",
          "sha256": "edd00ab0f5e14306d59f2e0e726df8f33ed64baa6fef0a3eabf23b9472eb10f8",
          "artifactSha256": "858639539e03585e8d80817392965a9e580e8b43e734cac9dce45321c7c16bdc",
          "url": "/reference/source/forge-swift/Sources/ForgeSDK/ForgeSDK.swift.txt",
          "declarations": []
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-core",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-core module.",
      "manifest": "forge-kt/forge-core/build.gradle.kts",
      "manifestSha256": "f4089cff0cc5240f8c6ff981bc912ee4154ba42aacbb7267de39b70a5fb8c367",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-core",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Brew.kt",
          "sha256": "71d7deb10f30bc77cd0f41c68bd53923d9356be7c8a0cc39d4ead0d001f1f105",
          "artifactSha256": "d7f7b4bfebf217351eed4609b92bad9c05afe4615e971870dc2826ffb8dff6dc",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Brew.kt.txt",
          "declarations": [
            {
              "name": "public data class BrewId(val value: String) : Comparable<BrewId>",
              "line": 35,
              "signature": "public data class BrewId(val value: String) : Comparable<BrewId>",
              "documentation": ""
            },
            {
              "name": "public data class NodeId(val value: String) : Comparable<NodeId>",
              "line": 46,
              "signature": "public data class NodeId(val value: String) : Comparable<NodeId>",
              "documentation": ""
            },
            {
              "name": "public data class BrewVersion(val value: String) : Comparable<BrewVersion>",
              "line": 57,
              "signature": "public data class BrewVersion(val value: String) : Comparable<BrewVersion>",
              "documentation": ""
            },
            {
              "name": "public sealed class JoinMode",
              "line": 72,
              "signature": "public sealed class JoinMode",
              "documentation": ""
            },
            {
              "name": "public data object AwaitAll : JoinMode()",
              "line": 76,
              "signature": "public data object AwaitAll : JoinMode()\n\n/** Return as soon as one branch completes successfully. */\n@Serializable\n@SerialName(\"first_success\")\npublic data object FirstSuccess : JoinMode()\n\n/** Return as soon as N branches complete successfully. */\n@Serializable\n@SerialName(\"first_n\")\npublic data class FirstN(val n: Int) : JoinMode()\n}\n\n// ---------------------------------------------------------------------------\n// Node types\n// ---------------------------------------------------------------------------\n\n/**\n* The execution semantics of a node in the brew graph.\n*\n* Each variant describes what kind of work a node performs. The node kind\n* carries symbolic references that are validated during resolution.\n*\n* ANVIL Spec SS7.1-7.2\n*/\n@Serializable",
              "documentation": ""
            },
            {
              "name": "public data object FirstSuccess : JoinMode()",
              "line": 81,
              "signature": "public data object FirstSuccess : JoinMode()\n\n/** Return as soon as N branches complete successfully. */\n@Serializable\n@SerialName(\"first_n\")\npublic data class FirstN(val n: Int) : JoinMode()\n}\n\n// ---------------------------------------------------------------------------\n// Node types\n// ---------------------------------------------------------------------------\n\n/**\n* The execution semantics of a node in the brew graph.\n*\n* Each variant describes what kind of work a node performs. The node kind\n* carries symbolic references that are validated during resolution.\n*\n* ANVIL Spec SS7.1-7.2\n*/\n@Serializable\npublic sealed class BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "public data class FirstN(val n: Int) : JoinMode()",
              "line": 86,
              "signature": "public data class FirstN(val n: Int) : JoinMode()\n}\n\n// ---------------------------------------------------------------------------\n// Node types\n// ---------------------------------------------------------------------------\n\n/**\n* The execution semantics of a node in the brew graph.\n*\n* Each variant describes what kind of work a node performs. The node kind\n* carries symbolic references that are validated during resolution.\n*\n* ANVIL Spec SS7.1-7.2\n*/\n@Serializable\npublic sealed class BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "public sealed class BrewNodeKind",
              "line": 102,
              "signature": "public sealed class BrewNodeKind",
              "documentation": ""
            },
            {
              "name": "public data class AgentStep(",
              "line": 113,
              "signature": "public data class AgentStep(\nval provider: ProviderRef,\nval systemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public data class ToolInvocation(",
              "line": 127,
              "signature": "public data class ToolInvocation(\nval toolId: String,\nval tier: ToolTier,\n) : BrewNodeKind()\n\n/**\n* An MCP tool call routed through a connected MCP server.\n*\n* @property serverId MCP server identifier (URI or alias).\n* @property toolName MCP tool name on the remote server.\n*/\n@Serializable\n@SerialName(\"mcp_call\")\npublic data class McpCall(\nval serverId: String,\nval toolName: String,\n) : BrewNodeKind()\n\n/**\n* A web operation (HTTP request, browser action, etc.).\n*\n* @property operation The operation kind identifier.\n*/\n@Serializable\n@SerialName(\"web_operation\")\npublic data class WebOperation(",
              "documentation": ""
            },
            {
              "name": "public data class McpCall(",
              "line": 140,
              "signature": "public data class McpCall(\nval serverId: String,\nval toolName: String,\n) : BrewNodeKind()\n\n/**\n* A web operation (HTTP request, browser action, etc.).\n*\n* @property operation The operation kind identifier.\n*/\n@Serializable\n@SerialName(\"web_operation\")\npublic data class WebOperation(\nval operation: String,\n) : BrewNodeKind()\n\n/**\n* A conditional branch that routes to one of two targets based on a\n* condition expression.\n*\n* @property conditionExpr JSONPath or simple expression.\n* @property trueTarget The node to route to when the condition is true.\n* @property falseTarget The node to route to when the condition is false.\n*/\n@Serializable\n@SerialName(\"conditional_branch\")",
              "documentation": ""
            },
            {
              "name": "public data class WebOperation(",
              "line": 152,
              "signature": "public data class WebOperation(\nval operation: String,\n) : BrewNodeKind()\n\n/**\n* A conditional branch that routes to one of two targets based on a\n* condition expression.\n*\n* @property conditionExpr JSONPath or simple expression.\n* @property trueTarget The node to route to when the condition is true.\n* @property falseTarget The node to route to when the condition is false.\n*/\n@Serializable\n@SerialName(\"conditional_branch\")\npublic data class ConditionalBranch(\nval conditionExpr: String,\nval trueTarget: NodeId,\nval falseTarget: NodeId,\n) : BrewNodeKind()\n\n/**\n* A parallel fork that spawns concurrent execution of multiple paths.\n*\n* @property branches The set of branch targets to execute concurrently.\n* @property joinMode Strategy for joining parallel results.\n*/",
              "documentation": ""
            },
            {
              "name": "public data class ConditionalBranch(",
              "line": 166,
              "signature": "public data class ConditionalBranch(\nval conditionExpr: String,\nval trueTarget: NodeId,\nval falseTarget: NodeId,\n) : BrewNodeKind()\n\n/**\n* A parallel fork that spawns concurrent execution of multiple paths.\n*\n* @property branches The set of branch targets to execute concurrently.\n* @property joinMode Strategy for joining parallel results.\n*/\n@Serializable\n@SerialName(\"parallel_fork\")\npublic data class ParallelFork(\nval branches: List<NodeId>,\nval joinMode: JoinMode,\n) : BrewNodeKind()\n\n/**\n* A reference to another brew, enabling composition.\n*\n* @property brewId The referenced brew's identifier.\n*/\n@Serializable\n@SerialName(\"sub_brew_ref\")",
              "documentation": ""
            },
            {
              "name": "public data class ParallelFork(",
              "line": 180,
              "signature": "public data class ParallelFork(\nval branches: List<NodeId>,\nval joinMode: JoinMode,\n) : BrewNodeKind()\n\n/**\n* A reference to another brew, enabling composition.\n*\n* @property brewId The referenced brew's identifier.\n*/\n@Serializable\n@SerialName(\"sub_brew_ref\")\npublic data class SubBrewRef(\nval brewId: BrewId,\n) : BrewNodeKind()\n\n/**\n* A human-in-the-loop checkpoint that suspends execution until a\n* human provides approval or input.\n*\n* @property prompt The prompt displayed to the human reviewer.\n* @property timeoutMs Maximum wait time in milliseconds. `null` means wait indefinitely.\n*/\n@Serializable\n@SerialName(\"human_checkpoint\")\npublic data class HumanCheckpoint(",
              "documentation": ""
            },
            {
              "name": "public data class SubBrewRef(",
              "line": 192,
              "signature": "public data class SubBrewRef(\nval brewId: BrewId,\n) : BrewNodeKind()\n\n/**\n* A human-in-the-loop checkpoint that suspends execution until a\n* human provides approval or input.\n*\n* @property prompt The prompt displayed to the human reviewer.\n* @property timeoutMs Maximum wait time in milliseconds. `null` means wait indefinitely.\n*/\n@Serializable\n@SerialName(\"human_checkpoint\")\npublic data class HumanCheckpoint(\nval prompt: String,\nval timeoutMs: Long?;",
              "documentation": ""
            },
            {
              "name": "public data class HumanCheckpoint(",
              "line": 205,
              "signature": "public data class HumanCheckpoint(\nval prompt: String,\nval timeoutMs: Long?;",
              "documentation": ""
            },
            {
              "name": "public data class BrewNode(",
              "line": 219,
              "signature": "public data class BrewNode(\nval id: NodeId,\nval kind: BrewNodeKind,\nval metadata: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public enum class BrewEdgeKind : Comparable<BrewEdgeKind>",
              "line": 233,
              "signature": "public enum class BrewEdgeKind : Comparable<BrewEdgeKind>",
              "documentation": ""
            },
            {
              "name": "public data class BrewEdge(",
              "line": 255,
              "signature": "public data class BrewEdge(\nval from: NodeId,\nval to: NodeId,\nval kind: BrewEdgeKind,\n) : Comparable<BrewEdge>",
              "documentation": ""
            },
            {
              "name": "public data class Brew(",
              "line": 295,
              "signature": "public data class Brew(\nval id: BrewId,\nval version: BrewVersion,\nval nodes: Map<NodeId, BrewNode>,\nval edges: Set<BrewEdge>,\nval entryNodes: List<NodeId>,\nval exitNodes: List<NodeId>,\nval topology: ModelTopology?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/BrewBuilder.kt",
          "sha256": "dd916c399f10ea9e4942934e4c499dc041fcf31431c9b7891401fd8ed2c45135",
          "artifactSha256": "28698928282dbfe9db6033552dec0216e9bc12a7f5c3b17878d5ce96507991b7",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/BrewBuilder.kt.txt",
          "declarations": [
            {
              "name": "public class BrewBuilder(id: String, version: String)",
              "line": 37,
              "signature": "public class BrewBuilder(id: String, version: String)",
              "documentation": ""
            },
            {
              "name": "public fun addNode(nodeId: String, kind: BrewNodeKind): BrewBuilder;",
              "line": 55,
              "signature": "public fun addNode(nodeId: String, kind: BrewNodeKind): BrewBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun addEdge(from: String, to: String, edgeKind: BrewEdgeKind): BrewBuilder;",
              "line": 71,
              "signature": "public fun addEdge(from: String, to: String, edgeKind: BrewEdgeKind): BrewBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun setEntry(nodeId: String): BrewBuilder;",
              "line": 81,
              "signature": "public fun setEntry(nodeId: String): BrewBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun setExit(nodeId: String): BrewBuilder;",
              "line": 91,
              "signature": "public fun setExit(nodeId: String): BrewBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun withTopology(topology: ModelTopology): BrewBuilder;",
              "line": 101,
              "signature": "public fun withTopology(topology: ModelTopology): BrewBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun withMetadata(nodeId: String, key: String, value: String): BrewBuilder;",
              "line": 115,
              "signature": "public fun withMetadata(nodeId: String, key: String, value: String): BrewBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun build(): Brew",
              "line": 130,
              "signature": "public fun build(): Brew",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/BrewResolver.kt",
          "sha256": "4536790fdf47042996ceea59429e589e664fbd86def020714434dacf4c6e5017",
          "artifactSha256": "35c4e869c416924b81093a5febee19ff3d612dc6c4074ed79280b40aaa18b65b",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/BrewResolver.kt.txt",
          "declarations": [
            {
              "name": "public data class BrewEnvironment(",
              "line": 39,
              "signature": "public data class BrewEnvironment(\nval providers: Map<String, ProviderRef>;",
              "documentation": ""
            },
            {
              "name": "public enum class BrewResolutionErrorKind",
              "line": 54,
              "signature": "public enum class BrewResolutionErrorKind",
              "documentation": ""
            },
            {
              "name": "public data class BrewResolutionError(",
              "line": 83,
              "signature": "public data class BrewResolutionError(\nval nodeId: NodeId,\nval errorKind: BrewResolutionErrorKind,\n)",
              "documentation": ""
            },
            {
              "name": "public sealed class ResolvedNodeKind",
              "line": 100,
              "signature": "public sealed class ResolvedNodeKind",
              "documentation": ""
            },
            {
              "name": "public data class AgentStep(",
              "line": 104,
              "signature": "public data class AgentStep(\nval provider: ProviderRef,\nval systemPrompt: String?;",
              "documentation": ""
            },
            {
              "name": "public data class ToolInvocation(",
              "line": 112,
              "signature": "public data class ToolInvocation(\nval toolId: String,\nval tier: ToolTier,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"mcp_call\")\npublic data class McpCall(\nval serverId: String,\nval toolName: String,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"web_operation\")\npublic data class WebOperation(\nval operation: String,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"conditional_branch\")\npublic data class ConditionalBranch(\nval conditionExpr: String,\nval trueTarget: NodeId,\nval falseTarget: NodeId,\n) : ResolvedNodeKind()\n",
              "documentation": ""
            },
            {
              "name": "public data class McpCall(",
              "line": 119,
              "signature": "public data class McpCall(\nval serverId: String,\nval toolName: String,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"web_operation\")\npublic data class WebOperation(\nval operation: String,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"conditional_branch\")\npublic data class ConditionalBranch(\nval conditionExpr: String,\nval trueTarget: NodeId,\nval falseTarget: NodeId,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"parallel_fork\")\npublic data class ParallelFork(\nval branches: List<NodeId>,\nval joinMode: JoinMode,\n) : ResolvedNodeKind()\n",
              "documentation": ""
            },
            {
              "name": "public data class WebOperation(",
              "line": 126,
              "signature": "public data class WebOperation(\nval operation: String,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"conditional_branch\")\npublic data class ConditionalBranch(\nval conditionExpr: String,\nval trueTarget: NodeId,\nval falseTarget: NodeId,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"parallel_fork\")\npublic data class ParallelFork(\nval branches: List<NodeId>,\nval joinMode: JoinMode,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"sub_brew_ref\")\npublic data class SubBrewRef(\nval brewId: BrewId,\n) : ResolvedNodeKind()\n\n@Serializable",
              "documentation": ""
            },
            {
              "name": "public data class ConditionalBranch(",
              "line": 132,
              "signature": "public data class ConditionalBranch(\nval conditionExpr: String,\nval trueTarget: NodeId,\nval falseTarget: NodeId,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"parallel_fork\")\npublic data class ParallelFork(\nval branches: List<NodeId>,\nval joinMode: JoinMode,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"sub_brew_ref\")\npublic data class SubBrewRef(\nval brewId: BrewId,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"human_checkpoint\")\npublic data class HumanCheckpoint(\nval prompt: String,\nval timeoutMs: Long?;",
              "documentation": ""
            },
            {
              "name": "public data class ParallelFork(",
              "line": 140,
              "signature": "public data class ParallelFork(\nval branches: List<NodeId>,\nval joinMode: JoinMode,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"sub_brew_ref\")\npublic data class SubBrewRef(\nval brewId: BrewId,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"human_checkpoint\")\npublic data class HumanCheckpoint(\nval prompt: String,\nval timeoutMs: Long?;",
              "documentation": ""
            },
            {
              "name": "public data class SubBrewRef(",
              "line": 147,
              "signature": "public data class SubBrewRef(\nval brewId: BrewId,\n) : ResolvedNodeKind()\n\n@Serializable\n@SerialName(\"human_checkpoint\")\npublic data class HumanCheckpoint(\nval prompt: String,\nval timeoutMs: Long?;",
              "documentation": ""
            },
            {
              "name": "public data class HumanCheckpoint(",
              "line": 153,
              "signature": "public data class HumanCheckpoint(\nval prompt: String,\nval timeoutMs: Long?;",
              "documentation": ""
            },
            {
              "name": "public data class ResolvedNode(",
              "line": 166,
              "signature": "public data class ResolvedNode(\nval id: NodeId,\nval kind: ResolvedNodeKind,\n)\n\n// ---------------------------------------------------------------------------\n// ResolvedBrewPlan\n// ---------------------------------------------------------------------------\n\n/**\n* A frozen, deterministic execution plan produced by resolving a [Brew]\n* against a [BrewEnvironment].\n*\n* Every symbolic reference in the original brew has been validated. The plan\n* carries a deterministic [planId] computed as\n* `SHA-256(brew_id || brew_version || environment_hash)`.\n*\n* @property planId Deterministic plan identifier.\n* @property brewId The source brew's identifier.\n* @property brewVersion The source brew's version.\n* @property resolvedAt ISO 8601 timestamp of when resolution occurred.\n* @property environmentHash SHA-256 hash of the serialized BrewEnvironment.\n* @property nodes Resolved nodes keyed by node ID.\n* @property edges Edges from the original brew.\n* @property executionOrder Topologically sorted execution order.\n* @property entryNodes Entry nodes from the original brew.",
              "documentation": ""
            },
            {
              "name": "public data class ResolvedBrewPlan(",
              "line": 195,
              "signature": "public data class ResolvedBrewPlan(\nval planId: String,\nval brewId: BrewId,\nval brewVersion: BrewVersion,\nval resolvedAt: String,\nval environmentHash: String,\nval nodes: Map<NodeId, ResolvedNode>,\nval edges: Set<BrewEdge>,\nval executionOrder: List<NodeId>,\nval entryNodes: List<NodeId>,\nval exitNodes: List<NodeId>,\n)\n\n/**\n* Resolution result: either a successful [ResolvedBrewPlan] or a list of errors.\n*/\npublic sealed class BrewResolutionResult",
              "documentation": ""
            },
            {
              "name": "public sealed class BrewResolutionResult",
              "line": 211,
              "signature": "public sealed class BrewResolutionResult",
              "documentation": ""
            },
            {
              "name": "public data class Success(val plan: ResolvedBrewPlan) : BrewResolutionResult()",
              "line": 212,
              "signature": "public data class Success(val plan: ResolvedBrewPlan) : BrewResolutionResult()\npublic data class Failure(val errors: List<BrewResolutionError>) : BrewResolutionResult()\n}\n\n// ---------------------------------------------------------------------------\n// Resolution logic\n// ---------------------------------------------------------------------------\n\n/**\n* Resolves a [Brew] against a [BrewEnvironment], producing a frozen\n* [ResolvedBrewPlan].\n*\n* The resolver validates every node's symbolic references against the\n* environment. If any node fails validation, all errors are collected\n* and returned.\n*\n* @param brew The brew to resolve.\n* @param environment The runtime environment to validate against.\n* @return A [BrewResolutionResult] containing either the plan or all errors.\n*/\npublic fun resolve(brew: Brew, environment: BrewEnvironment): BrewResolutionResult",
              "documentation": ""
            },
            {
              "name": "public data class Failure(val errors: List<BrewResolutionError>) : BrewResolutionResult()",
              "line": 213,
              "signature": "public data class Failure(val errors: List<BrewResolutionError>) : BrewResolutionResult()\n}\n\n// ---------------------------------------------------------------------------\n// Resolution logic\n// ---------------------------------------------------------------------------\n\n/**\n* Resolves a [Brew] against a [BrewEnvironment], producing a frozen\n* [ResolvedBrewPlan].\n*\n* The resolver validates every node's symbolic references against the\n* environment. If any node fails validation, all errors are collected\n* and returned.\n*\n* @param brew The brew to resolve.\n* @param environment The runtime environment to validate against.\n* @return A [BrewResolutionResult] containing either the plan or all errors.\n*/\npublic fun resolve(brew: Brew, environment: BrewEnvironment): BrewResolutionResult",
              "documentation": ""
            },
            {
              "name": "public fun resolve(brew: Brew, environment: BrewEnvironment): BrewResolutionResult",
              "line": 232,
              "signature": "public fun resolve(brew: Brew, environment: BrewEnvironment): BrewResolutionResult",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Config.kt",
          "sha256": "d64052379eafdbd7ab9b7e2f3b8a1ba5bd0de9a199322ed937cc113933c81dd0",
          "artifactSha256": "2ff397be1b6d4d50d4dbab85e6206dee44bd0e7274358d63cd91faa8c359cd84",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Config.kt.txt",
          "declarations": [
            {
              "name": "public data class GenerateOptions(",
              "line": 32,
              "signature": "public data class GenerateOptions(\nval temperature: Double?;",
              "documentation": ""
            },
            {
              "name": "public fun withTemperature(temperature: Double): GenerateOptions =",
              "line": 49,
              "signature": "public fun withTemperature(temperature: Double): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public fun withMaxTokens(maxTokens: Int): GenerateOptions =",
              "line": 53,
              "signature": "public fun withMaxTokens(maxTokens: Int): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public fun withTopP(topP: Double): GenerateOptions =",
              "line": 57,
              "signature": "public fun withTopP(topP: Double): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public fun withStopSequences(stopSequences: List<String>): GenerateOptions =",
              "line": 61,
              "signature": "public fun withStopSequences(stopSequences: List<String>): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public fun withFrequencyPenalty(frequencyPenalty: Double): GenerateOptions =",
              "line": 65,
              "signature": "public fun withFrequencyPenalty(frequencyPenalty: Double): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public fun withPresencePenalty(presencePenalty: Double): GenerateOptions =",
              "line": 69,
              "signature": "public fun withPresencePenalty(presencePenalty: Double): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public fun withSeed(seed: Long): GenerateOptions =",
              "line": 73,
              "signature": "public fun withSeed(seed: Long): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public fun withOutputSchema(outputSchema: JsonSchema): GenerateOptions =",
              "line": 77,
              "signature": "public fun withOutputSchema(outputSchema: JsonSchema): GenerateOptions =",
              "documentation": ""
            },
            {
              "name": "public class Builder",
              "line": 83,
              "signature": "public class Builder",
              "documentation": ""
            },
            {
              "name": "public fun temperature(value: Double): Builder;",
              "line": 93,
              "signature": "public fun temperature(value: Double): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun maxTokens(value: Int): Builder;",
              "line": 94,
              "signature": "public fun maxTokens(value: Int): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun topP(value: Double): Builder;",
              "line": 95,
              "signature": "public fun topP(value: Double): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun stopSequences(value: List<String>): Builder;",
              "line": 96,
              "signature": "public fun stopSequences(value: List<String>): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun frequencyPenalty(value: Double): Builder;",
              "line": 97,
              "signature": "public fun frequencyPenalty(value: Double): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun presencePenalty(value: Double): Builder;",
              "line": 98,
              "signature": "public fun presencePenalty(value: Double): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun seed(value: Long): Builder;",
              "line": 99,
              "signature": "public fun seed(value: Long): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun outputSchema(value: JsonSchema): Builder;",
              "line": 100,
              "signature": "public fun outputSchema(value: JsonSchema): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun build(): GenerateOptions;",
              "line": 102,
              "signature": "public fun build(): GenerateOptions;",
              "documentation": ""
            },
            {
              "name": "public fun builder(): Builder;",
              "line": 116,
              "signature": "public fun builder(): Builder;",
              "documentation": ""
            },
            {
              "name": "public data class EmbedOptions(",
              "line": 129,
              "signature": "public data class EmbedOptions(\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public fun withModel(model: String): EmbedOptions;",
              "line": 134,
              "signature": "public fun withModel(model: String): EmbedOptions;",
              "documentation": ""
            },
            {
              "name": "public fun withDimensions(dimensions: Int): EmbedOptions;",
              "line": 137,
              "signature": "public fun withDimensions(dimensions: Int): EmbedOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Error.kt",
          "sha256": "d30e08d1c153dbdfeca6f79656184363016a20055887d21da778e24986416644",
          "artifactSha256": "1f079966bd04cfac816350b727717fb7b680bdc9e4bf78ea54b054796e01b0ee",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Error.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeError(",
              "line": 18,
              "signature": "public sealed class ForgeError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ProviderNotFound(",
              "line": 29,
              "signature": "public class ProviderNotFound(\npublic val providerRef: String,\npublic val available: List<String>,\n) : ForgeError(\n\"provider '$providerRef' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 30,
              "signature": "public val providerRef: String,\npublic val available: List<String>,\n) : ForgeError(\n\"provider '$providerRef' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public val available: List<String>,",
              "line": 31,
              "signature": "public val available: List<String>,\n) : ForgeError(\n\"provider '$providerRef' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public class InvalidProviderRef(",
              "line": 43,
              "signature": "public class InvalidProviderRef(\npublic val input: String,\npublic val reason: String,\n) : ForgeError(\"invalid provider reference '$input': $reason\")\n\n/**\n* JSON Schema validation failed.\n*\n* @property path The JSON path where validation failed.\n* @property reason Why validation failed.\n*/\npublic class SchemaValidation(\npublic val path: String,\npublic val reason: String,\n) : ForgeError(\"schema validation failed at '$path': $reason\")\n\n/**\n* An invalid lifecycle state transition was attempted.\n*\n* ANVIL Spec Section 13.2 -- Lifecycle State Machine\n*\n* @property from The current state.\n* @property to The attempted target state.\n* @property validTargets The states that are valid from [from].\n*/\npublic class InvalidLifecycleTransition(",
              "documentation": ""
            },
            {
              "name": "public val input: String,",
              "line": 44,
              "signature": "public val input: String,\npublic val reason: String,\n) : ForgeError(\"invalid provider reference '$input': $reason\")\n\n/**\n* JSON Schema validation failed.\n*\n* @property path The JSON path where validation failed.\n* @property reason Why validation failed.\n*/\npublic class SchemaValidation(\npublic val path: String,\npublic val reason: String,\n) : ForgeError(\"schema validation failed at '$path': $reason\")\n\n/**\n* An invalid lifecycle state transition was attempted.\n*\n* ANVIL Spec Section 13.2 -- Lifecycle State Machine\n*\n* @property from The current state.\n* @property to The attempted target state.\n* @property validTargets The states that are valid from [from].\n*/\npublic class InvalidLifecycleTransition(\npublic val from: String,",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 45,
              "signature": "public val reason: String,\n) : ForgeError(\"invalid provider reference '$input': $reason\")\n\n/**\n* JSON Schema validation failed.\n*\n* @property path The JSON path where validation failed.\n* @property reason Why validation failed.\n*/\npublic class SchemaValidation(\npublic val path: String,\npublic val reason: String,\n) : ForgeError(\"schema validation failed at '$path': $reason\")\n\n/**\n* An invalid lifecycle state transition was attempted.\n*\n* ANVIL Spec Section 13.2 -- Lifecycle State Machine\n*\n* @property from The current state.\n* @property to The attempted target state.\n* @property validTargets The states that are valid from [from].\n*/\npublic class InvalidLifecycleTransition(\npublic val from: String,\npublic val to: String,",
              "documentation": ""
            },
            {
              "name": "public class SchemaValidation(",
              "line": 54,
              "signature": "public class SchemaValidation(\npublic val path: String,\npublic val reason: String,\n) : ForgeError(\"schema validation failed at '$path': $reason\")\n\n/**\n* An invalid lifecycle state transition was attempted.\n*\n* ANVIL Spec Section 13.2 -- Lifecycle State Machine\n*\n* @property from The current state.\n* @property to The attempted target state.\n* @property validTargets The states that are valid from [from].\n*/\npublic class InvalidLifecycleTransition(\npublic val from: String,\npublic val to: String,\npublic val validTargets: List<String>,\n) : ForgeError(\n\"invalid lifecycle transition from '$from' to '$to'; \" +",
              "documentation": ""
            },
            {
              "name": "public val path: String,",
              "line": 55,
              "signature": "public val path: String,\npublic val reason: String,\n) : ForgeError(\"schema validation failed at '$path': $reason\")\n\n/**\n* An invalid lifecycle state transition was attempted.\n*\n* ANVIL Spec Section 13.2 -- Lifecycle State Machine\n*\n* @property from The current state.\n* @property to The attempted target state.\n* @property validTargets The states that are valid from [from].\n*/\npublic class InvalidLifecycleTransition(\npublic val from: String,\npublic val to: String,\npublic val validTargets: List<String>,\n) : ForgeError(\n\"invalid lifecycle transition from '$from' to '$to'; \" +",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 56,
              "signature": "public val reason: String,\n) : ForgeError(\"schema validation failed at '$path': $reason\")\n\n/**\n* An invalid lifecycle state transition was attempted.\n*\n* ANVIL Spec Section 13.2 -- Lifecycle State Machine\n*\n* @property from The current state.\n* @property to The attempted target state.\n* @property validTargets The states that are valid from [from].\n*/\npublic class InvalidLifecycleTransition(\npublic val from: String,\npublic val to: String,\npublic val validTargets: List<String>,\n) : ForgeError(\n\"invalid lifecycle transition from '$from' to '$to'; \" +",
              "documentation": ""
            },
            {
              "name": "public class InvalidLifecycleTransition(",
              "line": 68,
              "signature": "public class InvalidLifecycleTransition(\npublic val from: String,\npublic val to: String,\npublic val validTargets: List<String>,\n) : ForgeError(\n\"invalid lifecycle transition from '$from' to '$to'; \" +",
              "documentation": ""
            },
            {
              "name": "public val from: String,",
              "line": 69,
              "signature": "public val from: String,\npublic val to: String,\npublic val validTargets: List<String>,\n) : ForgeError(\n\"invalid lifecycle transition from '$from' to '$to'; \" +",
              "documentation": ""
            },
            {
              "name": "public val to: String,",
              "line": 70,
              "signature": "public val to: String,\npublic val validTargets: List<String>,\n) : ForgeError(\n\"invalid lifecycle transition from '$from' to '$to'; \" +",
              "documentation": ""
            },
            {
              "name": "public val validTargets: List<String>,",
              "line": 71,
              "signature": "public val validTargets: List<String>,\n) : ForgeError(\n\"invalid lifecycle transition from '$from' to '$to'; \" +",
              "documentation": ""
            },
            {
              "name": "public class ToolInvocationDenied(",
              "line": 86,
              "signature": "public class ToolInvocationDenied(\npublic val toolName: String,\npublic val agentDid: String,\npublic val reason: String,\n) : ForgeError(\n\"tool '$toolName' invocation denied for agent $agentDid: $reason\"\n)\n\n/**\n* A tool execution failed at runtime.\n*\n* @property toolName The name of the tool that failed.\n* @property reason The failure reason.\n*/\npublic class ToolExecutionFailed(\npublic val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val toolName: String,",
              "line": 87,
              "signature": "public val toolName: String,\npublic val agentDid: String,\npublic val reason: String,\n) : ForgeError(\n\"tool '$toolName' invocation denied for agent $agentDid: $reason\"\n)\n\n/**\n* A tool execution failed at runtime.\n*\n* @property toolName The name of the tool that failed.\n* @property reason The failure reason.\n*/\npublic class ToolExecutionFailed(\npublic val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val agentDid: String,",
              "line": 88,
              "signature": "public val agentDid: String,\npublic val reason: String,\n) : ForgeError(\n\"tool '$toolName' invocation denied for agent $agentDid: $reason\"\n)\n\n/**\n* A tool execution failed at runtime.\n*\n* @property toolName The name of the tool that failed.\n* @property reason The failure reason.\n*/\npublic class ToolExecutionFailed(\npublic val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 89,
              "signature": "public val reason: String,\n) : ForgeError(\n\"tool '$toolName' invocation denied for agent $agentDid: $reason\"\n)\n\n/**\n* A tool execution failed at runtime.\n*\n* @property toolName The name of the tool that failed.\n* @property reason The failure reason.\n*/\npublic class ToolExecutionFailed(\npublic val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ToolExecutionFailed(",
              "line": 100,
              "signature": "public class ToolExecutionFailed(\npublic val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val toolName: String,",
              "line": 101,
              "signature": "public val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 102,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class Json(",
              "line": 112,
              "signature": "public class Json(\npublic val context: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val context: String,",
              "line": 113,
              "signature": "public val context: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 114,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class MissingConfig(",
              "line": 124,
              "signature": "public class MissingConfig(\npublic val field: String,\npublic val hint: String;",
              "documentation": ""
            },
            {
              "name": "public val field: String,",
              "line": 125,
              "signature": "public val field: String,\npublic val hint: String;",
              "documentation": ""
            },
            {
              "name": "public val hint: String;",
              "line": 126,
              "signature": "public val hint: String;",
              "documentation": ""
            },
            {
              "name": "public class StopConditionReached(",
              "line": 138,
              "signature": "public class StopConditionReached(\npublic val condition: String,\npublic val stepsTaken: Int,\n) : ForgeError(\"stop condition reached after $stepsTaken steps: $condition\")\n\n/**\n* A telemetry operation failed.\n*\n* @property operation The telemetry operation that failed.\n* @property reason The failure detail.\n*/\npublic class TelemetryError(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"telemetry error in '$operation': $reason\")\n\n/**\n* An operation is not supported by the current provider or configuration.\n*\n* @property operation The unsupported operation.\n* @property reason Why it is unsupported.\n*/\npublic class UnsupportedOperation(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")",
              "documentation": ""
            },
            {
              "name": "public val condition: String,",
              "line": 139,
              "signature": "public val condition: String,\npublic val stepsTaken: Int,\n) : ForgeError(\"stop condition reached after $stepsTaken steps: $condition\")\n\n/**\n* A telemetry operation failed.\n*\n* @property operation The telemetry operation that failed.\n* @property reason The failure detail.\n*/\npublic class TelemetryError(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"telemetry error in '$operation': $reason\")\n\n/**\n* An operation is not supported by the current provider or configuration.\n*\n* @property operation The unsupported operation.\n* @property reason Why it is unsupported.\n*/\npublic class UnsupportedOperation(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n",
              "documentation": ""
            },
            {
              "name": "public val stepsTaken: Int,",
              "line": 140,
              "signature": "public val stepsTaken: Int,\n) : ForgeError(\"stop condition reached after $stepsTaken steps: $condition\")\n\n/**\n* A telemetry operation failed.\n*\n* @property operation The telemetry operation that failed.\n* @property reason The failure detail.\n*/\npublic class TelemetryError(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"telemetry error in '$operation': $reason\")\n\n/**\n* An operation is not supported by the current provider or configuration.\n*\n* @property operation The unsupported operation.\n* @property reason Why it is unsupported.\n*/\npublic class UnsupportedOperation(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n\n/**",
              "documentation": ""
            },
            {
              "name": "public class TelemetryError(",
              "line": 149,
              "signature": "public class TelemetryError(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"telemetry error in '$operation': $reason\")\n\n/**\n* An operation is not supported by the current provider or configuration.\n*\n* @property operation The unsupported operation.\n* @property reason Why it is unsupported.\n*/\npublic class UnsupportedOperation(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n\n/**\n* A provider exists but is not currently available.\n*/\npublic class ProviderUnavailable(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.",
              "documentation": ""
            },
            {
              "name": "public val operation: String,",
              "line": 150,
              "signature": "public val operation: String,\npublic val reason: String,\n) : ForgeError(\"telemetry error in '$operation': $reason\")\n\n/**\n* An operation is not supported by the current provider or configuration.\n*\n* @property operation The unsupported operation.\n* @property reason Why it is unsupported.\n*/\npublic class UnsupportedOperation(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n\n/**\n* A provider exists but is not currently available.\n*/\npublic class ProviderUnavailable(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 151,
              "signature": "public val reason: String,\n) : ForgeError(\"telemetry error in '$operation': $reason\")\n\n/**\n* An operation is not supported by the current provider or configuration.\n*\n* @property operation The unsupported operation.\n* @property reason Why it is unsupported.\n*/\npublic class UnsupportedOperation(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n\n/**\n* A provider exists but is not currently available.\n*/\npublic class ProviderUnavailable(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/\npublic class ProviderAuthenticationFailed(",
              "documentation": ""
            },
            {
              "name": "public class UnsupportedOperation(",
              "line": 160,
              "signature": "public class UnsupportedOperation(\npublic val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n\n/**\n* A provider exists but is not currently available.\n*/\npublic class ProviderUnavailable(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/\npublic class ProviderAuthenticationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,",
              "documentation": ""
            },
            {
              "name": "public val operation: String,",
              "line": 161,
              "signature": "public val operation: String,\npublic val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n\n/**\n* A provider exists but is not currently available.\n*/\npublic class ProviderUnavailable(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/\npublic class ProviderAuthenticationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 162,
              "signature": "public val reason: String,\n) : ForgeError(\"unsupported operation '$operation': $reason\")\n\n/**\n* A provider exists but is not currently available.\n*/\npublic class ProviderUnavailable(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/\npublic class ProviderAuthenticationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")",
              "documentation": ""
            },
            {
              "name": "public class ProviderUnavailable(",
              "line": 168,
              "signature": "public class ProviderUnavailable(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/\npublic class ProviderAuthenticationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 169,
              "signature": "public val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/\npublic class ProviderAuthenticationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 170,
              "signature": "public val reason: String,\n) : ForgeError(\"provider '$providerRef' is unavailable: $reason\")\n\n/**\n* Provider authentication failed.\n*/\npublic class ProviderAuthenticationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")",
              "documentation": ""
            },
            {
              "name": "public class ProviderAuthenticationFailed(",
              "line": 176,
              "signature": "public class ProviderAuthenticationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 177,
              "signature": "public val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 178,
              "signature": "public val reason: String,\n) : ForgeError(\"provider '$providerRef' authentication failed: $reason\")\n\n/**\n* The provider does not support a required runtime capability.\n*/\npublic class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(",
              "documentation": ""
            },
            {
              "name": "public class CapabilityUnsupported(",
              "line": 184,
              "signature": "public class CapabilityUnsupported(\npublic val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 185,
              "signature": "public val providerRef: String,\npublic val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(",
              "documentation": ""
            },
            {
              "name": "public val capability: String,",
              "line": 186,
              "signature": "public val capability: String,\n) : ForgeError(\"provider '$providerRef' does not support runtime capability '$capability'\")\n\n/**\n* Provider runtime negotiation failed.\n*/\npublic class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(\npublic val providerRef: String,",
              "documentation": ""
            },
            {
              "name": "public class ProviderNegotiationFailed(",
              "line": 192,
              "signature": "public class ProviderNegotiationFailed(\npublic val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 193,
              "signature": "public val providerRef: String,\npublic val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(\npublic val providerRef: String,",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 194,
              "signature": "public val reason: String,\n) : ForgeError(\"provider '$providerRef' negotiation failed: $reason\")\n\n/**\n* A provider session expired before the requested action completed.\n*/\npublic class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")",
              "documentation": ""
            },
            {
              "name": "public class ProviderSessionExpired(",
              "line": 200,
              "signature": "public class ProviderSessionExpired(\npublic val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")\n\n/**\n* An internal SDK error that should not occur in normal operation.\n*\n* @property detail Diagnostic detail for the error.\n*/",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 201,
              "signature": "public val providerRef: String,\npublic val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")\n\n/**\n* An internal SDK error that should not occur in normal operation.\n*\n* @property detail Diagnostic detail for the error.\n*/\npublic class Internal(",
              "documentation": ""
            },
            {
              "name": "public val sessionId: String,",
              "line": 202,
              "signature": "public val sessionId: String,\n) : ForgeError(\n\"provider '$providerRef' session '$sessionId' expired before the requested action completed\"\n)\n\n/**\n* The provider does not support interrupts.\n*/\npublic class ProviderInterruptUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")\n\n/**\n* An internal SDK error that should not occur in normal operation.\n*\n* @property detail Diagnostic detail for the error.\n*/\npublic class Internal(\npublic val detail: String,",
              "documentation": ""
            },
            {
              "name": "public class ProviderInterruptUnsupported(",
              "line": 210,
              "signature": "public class ProviderInterruptUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")\n\n/**\n* An internal SDK error that should not occur in normal operation.\n*\n* @property detail Diagnostic detail for the error.\n*/\npublic class Internal(\npublic val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 211,
              "signature": "public val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session interrupts\")\n\n/**\n* The provider does not support resuming sessions.\n*/\npublic class ProviderResumeUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")\n\n/**\n* An internal SDK error that should not occur in normal operation.\n*\n* @property detail Diagnostic detail for the error.\n*/\npublic class Internal(\npublic val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ProviderResumeUnsupported(",
              "line": 217,
              "signature": "public class ProviderResumeUnsupported(\npublic val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")\n\n/**\n* An internal SDK error that should not occur in normal operation.\n*\n* @property detail Diagnostic detail for the error.\n*/\npublic class Internal(\npublic val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val providerRef: String,",
              "line": 218,
              "signature": "public val providerRef: String,\n) : ForgeError(\"provider '$providerRef' does not support session resume\")\n\n/**\n* An internal SDK error that should not occur in normal operation.\n*\n* @property detail Diagnostic detail for the error.\n*/\npublic class Internal(\npublic val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class Internal(",
              "line": 226,
              "signature": "public class Internal(\npublic val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val detail: String,",
              "line": 227,
              "signature": "public val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public typealias ForgeResult<T>;",
              "line": 235,
              "signature": "public typealias ForgeResult<T>;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Message.kt",
          "sha256": "d0049a742641c9dd753be67594a3f4917be8c4c9cfdc483791bba3b2412e6926",
          "artifactSha256": "e969dbbd658d1b70c9cdd8208b8ce766ebcc2414d99fdcf764198dba5d70379e",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Message.kt.txt",
          "declarations": [
            {
              "name": "public enum class Role(public val value: String)",
              "line": 23,
              "signature": "public enum class Role(public val value: String)",
              "documentation": ""
            },
            {
              "name": "public sealed class MessagePart",
              "line": 50,
              "signature": "public sealed class MessagePart",
              "documentation": ""
            },
            {
              "name": "public data class Text(val text: String) : MessagePart()",
              "line": 59,
              "signature": "public data class Text(val text: String) : MessagePart()\n\n/**\n* An image content part, encoded as a data URI or URL.\n*\n* @property url The image URL or data URI (e.g., `data:image/png;base64,...`).",
              "documentation": ""
            },
            {
              "name": "public data class Image(",
              "line": 69,
              "signature": "public data class Image(\nval url: String,\n@SerialName(\"mime_type\")\nval mimeType: String,\n) : MessagePart()\n\n/**\n* A tool call request from the model.\n*\n* @property id Unique identifier for this tool call, used to correlate with [ToolResult].\n* @property name The name of the tool to invoke.\n* @property arguments The JSON-encoded arguments for the tool.\n*/\n@Serializable\n@SerialName(\"tool_call\")\npublic data class ToolCallPart(\nval id: String,\nval name: String,\nval arguments: String,\n) : MessagePart()\n\n/**\n* The result of a tool invocation.\n*\n* @property toolCallId The ID of the [ToolCallPart] this result corresponds to.\n* @property name The name of the tool that produced this result.",
              "documentation": ""
            },
            {
              "name": "public data class ToolCallPart(",
              "line": 84,
              "signature": "public data class ToolCallPart(\nval id: String,\nval name: String,\nval arguments: String,\n) : MessagePart()\n\n/**\n* The result of a tool invocation.\n*\n* @property toolCallId The ID of the [ToolCallPart] this result corresponds to.\n* @property name The name of the tool that produced this result.\n* @property content The text content returned by the tool.\n* @property isError Whether the tool execution resulted in an error.\n*/\n@Serializable\n@SerialName(\"tool_result\")\npublic data class ToolResultPart(\n@SerialName(\"tool_call_id\")\nval toolCallId: String,\nval name: String,\nval content: String,\n@SerialName(\"is_error\")\nval isError: Boolean;",
              "documentation": ""
            },
            {
              "name": "public data class ToolResultPart(",
              "line": 100,
              "signature": "public data class ToolResultPart(\n@SerialName(\"tool_call_id\")\nval toolCallId: String,\nval name: String,\nval content: String,\n@SerialName(\"is_error\")\nval isError: Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun text(content: String): Text;",
              "line": 111,
              "signature": "public fun text(content: String): Text;",
              "documentation": ""
            },
            {
              "name": "public fun image(url: String, mimeType: String): Image;",
              "line": 114,
              "signature": "public fun image(url: String, mimeType: String): Image;",
              "documentation": ""
            },
            {
              "name": "public fun toolCall(id: String, name: String, arguments: String): ToolCallPart =",
              "line": 117,
              "signature": "public fun toolCall(id: String, name: String, arguments: String): ToolCallPart =",
              "documentation": ""
            },
            {
              "name": "public fun toolResult(",
              "line": 121,
              "signature": "public fun toolResult(\ntoolCallId: String,\nname: String,\ncontent: String,\nisError: Boolean;",
              "documentation": ""
            },
            {
              "name": "public data class ModelMessage(",
              "line": 142,
              "signature": "public data class ModelMessage(\nval role: Role,\nval parts: List<MessagePart>,\n)",
              "documentation": ""
            },
            {
              "name": "public fun textContent(): String?",
              "line": 151,
              "signature": "public fun textContent(): String?",
              "documentation": ""
            },
            {
              "name": "public fun toolCalls(): List<ToolCall> =",
              "line": 161,
              "signature": "public fun toolCalls(): List<ToolCall> =",
              "documentation": ""
            },
            {
              "name": "public fun hasToolCalls(): Boolean =",
              "line": 169,
              "signature": "public fun hasToolCalls(): Boolean =",
              "documentation": ""
            },
            {
              "name": "public fun system(content: String): ModelMessage =",
              "line": 174,
              "signature": "public fun system(content: String): ModelMessage =",
              "documentation": ""
            },
            {
              "name": "public fun user(content: String): ModelMessage =",
              "line": 178,
              "signature": "public fun user(content: String): ModelMessage =",
              "documentation": ""
            },
            {
              "name": "public fun assistant(content: String): ModelMessage =",
              "line": 182,
              "signature": "public fun assistant(content: String): ModelMessage =",
              "documentation": ""
            },
            {
              "name": "public fun assistantWithToolCalls(toolCalls: List<MessagePart.ToolCallPart>): ModelMessage =",
              "line": 186,
              "signature": "public fun assistantWithToolCalls(toolCalls: List<MessagePart.ToolCallPart>): ModelMessage =",
              "documentation": ""
            },
            {
              "name": "public fun toolResult(",
              "line": 190,
              "signature": "public fun toolResult(\ntoolCallId: String,\nname: String,\ncontent: String,\nisError: Boolean;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Model.kt",
          "sha256": "e3f48b5fe8b07c9896f3b4ae1fd970654c888ee88003391a2c4199d0defebf50",
          "artifactSha256": "bd910f41a4d6805b47d1df40637dbf595a525ded340857d146131f5e977ed282",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Model.kt.txt",
          "declarations": [
            {
              "name": "public interface LanguageModel",
              "line": 23,
              "signature": "public interface LanguageModel",
              "documentation": ""
            },
            {
              "name": "public suspend fun generate(",
              "line": 34,
              "signature": "public suspend fun generate(\nmessages: List<ModelMessage>,\ntools: List<ToolDefinition>;",
              "documentation": ""
            },
            {
              "name": "public suspend fun stream(",
              "line": 49,
              "signature": "public suspend fun stream(\nmessages: List<ModelMessage>,\ntools: List<ToolDefinition>;",
              "documentation": ""
            },
            {
              "name": "public val supportsToolCalling: Boolean get();",
              "line": 61,
              "signature": "public val supportsToolCalling: Boolean get();",
              "documentation": ""
            },
            {
              "name": "public val supportsStructuredOutput: Boolean get();",
              "line": 69,
              "signature": "public val supportsStructuredOutput: Boolean get();",
              "documentation": ""
            },
            {
              "name": "public val supportsImageInput: Boolean get();",
              "line": 76,
              "signature": "public val supportsImageInput: Boolean get();",
              "documentation": ""
            },
            {
              "name": "public val supportsStreaming: Boolean get();",
              "line": 83,
              "signature": "public val supportsStreaming: Boolean get();",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Output.kt",
          "sha256": "8c85a53183a2e743d174f6e9289715fd87a6521485a0a97a64c539c30a6bcec2",
          "artifactSha256": "9d593d95af26e2cb6dad959d8a8de0451d3fa7393c16c70de9c584016cb969a6",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Output.kt.txt",
          "declarations": [
            {
              "name": "public enum class FinishReason",
              "line": 17,
              "signature": "public enum class FinishReason",
              "documentation": ""
            },
            {
              "name": "public fun isComplete(): Boolean;",
              "line": 46,
              "signature": "public fun isComplete(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun isToolCall(): Boolean;",
              "line": 51,
              "signature": "public fun isToolCall(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public data class Usage(",
              "line": 66,
              "signature": "public data class Usage(\n@SerialName(\"prompt_tokens\")\nval promptTokens: Long;",
              "documentation": ""
            },
            {
              "name": "public operator fun plus(other: Usage): Usage;",
              "line": 80,
              "signature": "public operator fun plus(other: Usage): Usage;",
              "documentation": ""
            },
            {
              "name": "public val ZERO: Usage;",
              "line": 88,
              "signature": "public val ZERO: Usage;",
              "documentation": ""
            },
            {
              "name": "public data class GenerateResult(",
              "line": 107,
              "signature": "public data class GenerateResult(\nval message: ModelMessage,\n@SerialName(\"finish_reason\")\nval finishReason: FinishReason,\nval usage: Usage;",
              "documentation": ""
            },
            {
              "name": "public fun text(): String?;",
              "line": 118,
              "signature": "public fun text(): String?;",
              "documentation": ""
            },
            {
              "name": "public fun hasToolCalls(): Boolean;",
              "line": 123,
              "signature": "public fun hasToolCalls(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun toolCalls(): List<ToolCall>;",
              "line": 130,
              "signature": "public fun toolCalls(): List<ToolCall>;",
              "documentation": ""
            },
            {
              "name": "public sealed class StreamChunk",
              "line": 139,
              "signature": "public sealed class StreamChunk",
              "documentation": ""
            },
            {
              "name": "public data class TextDelta(val text: String) : StreamChunk()",
              "line": 148,
              "signature": "public data class TextDelta(val text: String) : StreamChunk()\n\n/**\n* A tool call delta chunk.\n*\n* @property id The tool call identifier.\n* @property name The tool name (may only appear in the first delta).\n* @property argumentsDelta Incremental JSON arguments string.\n*/\n@Serializable\n@SerialName(\"tool_call_delta\")\npublic data class ToolCallDelta(\nval id: String,\nval name: String?;",
              "documentation": ""
            },
            {
              "name": "public data class ToolCallDelta(",
              "line": 159,
              "signature": "public data class ToolCallDelta(\nval id: String,\nval name: String?;",
              "documentation": ""
            },
            {
              "name": "public data class Done(",
              "line": 174,
              "signature": "public data class Done(\n@SerialName(\"finish_reason\")\nval finishReason: FinishReason,\nval usage: Usage;",
              "documentation": ""
            },
            {
              "name": "public fun textDelta(text: String): TextDelta;",
              "line": 182,
              "signature": "public fun textDelta(text: String): TextDelta;",
              "documentation": ""
            },
            {
              "name": "public fun toolCallDelta(id: String, name: String?;",
              "line": 185,
              "signature": "public fun toolCallDelta(id: String, name: String?;",
              "documentation": ""
            },
            {
              "name": "public fun done(finishReason: FinishReason, usage: Usage;",
              "line": 189,
              "signature": "public fun done(finishReason: FinishReason, usage: Usage;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Provider.kt",
          "sha256": "837f7ce8c0e6e87f647e32ecc0358cfabaeb951e52454b419ca91306dc8b3fd8",
          "artifactSha256": "2e6f5f2bf5aa878167a612ee94a4aa4b597f92b8ef54bb21261e8789ea2de3bb",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Provider.kt.txt",
          "declarations": [
            {
              "name": "public data class ProviderRef(",
              "line": 44,
              "signature": "public data class ProviderRef(\nval namespace: String,\nval model: String,\nval full: String,\n)",
              "documentation": ""
            },
            {
              "name": "public fun parse(input: String): ProviderRef",
              "line": 59,
              "signature": "public fun parse(input: String): ProviderRef",
              "documentation": ""
            },
            {
              "name": "public data class ProviderMetadata(",
              "line": 95,
              "signature": "public data class ProviderMetadata(\nval name: String,\nval namespace: String,\nval supportsToolCalling: Boolean;",
              "documentation": ""
            },
            {
              "name": "public enum class RuntimeCapability",
              "line": 109,
              "signature": "public enum class RuntimeCapability",
              "documentation": ""
            },
            {
              "name": "public data class ProviderRuntimeCapabilities(",
              "line": 126,
              "signature": "public data class ProviderRuntimeCapabilities(\nval baselineContract: Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun withCapability(capability: RuntimeCapability): ProviderRuntimeCapabilities =",
              "line": 130,
              "signature": "public fun withCapability(capability: RuntimeCapability): ProviderRuntimeCapabilities =",
              "documentation": ""
            },
            {
              "name": "public fun supports(capability: RuntimeCapability): Boolean;",
              "line": 133,
              "signature": "public fun supports(capability: RuntimeCapability): Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun baseline(): ProviderRuntimeCapabilities;",
              "line": 136,
              "signature": "public fun baseline(): ProviderRuntimeCapabilities;",
              "documentation": ""
            },
            {
              "name": "public data class ProviderNegotiationRequest(",
              "line": 146,
              "signature": "public data class ProviderNegotiationRequest(\nval providerRef: String,\nval requireBaselineContract: Boolean,\nval requiredCapabilities: List<RuntimeCapability>,\n)\n\n/**\n* Successful provider-session negotiation result.\n*/\n@Serializable\npublic data class ProviderNegotiationResult(\nval providerRef: String,\nval baselineContract: Boolean,\nval negotiatedCapabilities: List<RuntimeCapability>,\n)\n\n/**\n* Normalized provider-session states.\n*/\n@Serializable\npublic enum class ProviderSessionState",
              "documentation": ""
            },
            {
              "name": "public data class ProviderNegotiationResult(",
              "line": 156,
              "signature": "public data class ProviderNegotiationResult(\nval providerRef: String,\nval baselineContract: Boolean,\nval negotiatedCapabilities: List<RuntimeCapability>,\n)\n\n/**\n* Normalized provider-session states.\n*/\n@Serializable\npublic enum class ProviderSessionState",
              "documentation": ""
            },
            {
              "name": "public enum class ProviderSessionState",
              "line": 166,
              "signature": "public enum class ProviderSessionState",
              "documentation": ""
            },
            {
              "name": "public data class ProviderUsageSummary(",
              "line": 182,
              "signature": "public data class ProviderUsageSummary(\nval inputTokens: Long;",
              "documentation": ""
            },
            {
              "name": "public data class ProviderSessionEvent(",
              "line": 192,
              "signature": "public data class ProviderSessionEvent(\nval sessionId: String,\nval state: ProviderSessionState,\nval message: String?;",
              "documentation": ""
            },
            {
              "name": "public class ProviderRegistry",
              "line": 207,
              "signature": "public class ProviderRegistry",
              "documentation": ""
            },
            {
              "name": "public fun register(namespace: String, model: LanguageModel, meta: ProviderMetadata?;",
              "line": 218,
              "signature": "public fun register(namespace: String, model: LanguageModel, meta: ProviderMetadata?;",
              "documentation": ""
            },
            {
              "name": "public fun registerWithRuntime(",
              "line": 229,
              "signature": "public fun registerWithRuntime(\nproviderRef: String,\nmodel: LanguageModel,\nruntimeCapabilities: ProviderRuntimeCapabilities,\nmeta: ProviderMetadata?;",
              "documentation": ""
            },
            {
              "name": "public fun get(namespace: String): LanguageModel? =",
              "line": 259,
              "signature": "public fun get(namespace: String): LanguageModel? =",
              "documentation": ""
            },
            {
              "name": "public fun require(namespace: String): LanguageModel =",
              "line": 269,
              "signature": "public fun require(namespace: String): LanguageModel =",
              "documentation": ""
            },
            {
              "name": "public fun require(ref: ProviderRef): LanguageModel;",
              "line": 282,
              "signature": "public fun require(ref: ProviderRef): LanguageModel;",
              "documentation": ""
            },
            {
              "name": "public fun metadata(namespace: String): ProviderMetadata? =",
              "line": 290,
              "signature": "public fun metadata(namespace: String): ProviderMetadata? =",
              "documentation": ""
            },
            {
              "name": "public fun list(): List<String>;",
              "line": 298,
              "signature": "public fun list(): List<String>;",
              "documentation": ""
            },
            {
              "name": "public val size: Int get();",
              "line": 303,
              "signature": "public val size: Int get();",
              "documentation": ""
            },
            {
              "name": "public fun isEmpty(): Boolean;",
              "line": 308,
              "signature": "public fun isEmpty(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun negotiate(request: ProviderNegotiationRequest): ProviderNegotiationResult",
              "line": 313,
              "signature": "public fun negotiate(request: ProviderNegotiationRequest): ProviderNegotiationResult",
              "documentation": ""
            },
            {
              "name": "public enum class ProviderFamily",
              "line": 354,
              "signature": "public enum class ProviderFamily",
              "documentation": ""
            },
            {
              "name": "public enum class AuthStrategy",
              "line": 361,
              "signature": "public enum class AuthStrategy",
              "documentation": ""
            },
            {
              "name": "public data class ProviderPreset(",
              "line": 370,
              "signature": "public data class ProviderPreset(\nval namespace: String,\nval family: ProviderFamily,\nval authStrategy: AuthStrategy,\n)\n\npublic typealias ProviderEnvironment;",
              "documentation": ""
            },
            {
              "name": "public typealias ProviderEnvironment;",
              "line": 376,
              "signature": "public typealias ProviderEnvironment;",
              "documentation": ""
            },
            {
              "name": "public typealias ProviderGenerateHandler;",
              "line": 377,
              "signature": "public typealias ProviderGenerateHandler;",
              "documentation": ""
            },
            {
              "name": "public typealias ProviderStreamHandler;",
              "line": 378,
              "signature": "public typealias ProviderStreamHandler;",
              "documentation": ""
            },
            {
              "name": "public data class ProviderExecutionRequest(",
              "line": 380,
              "signature": "public data class ProviderExecutionRequest(\nval providerRef: String,\nval namespace: String,\nval modelId: String,\nval family: ProviderFamily,\nval authStrategy: AuthStrategy,\nval credential: String,\nval baseUrl: String?,\nval messages: List<ModelMessage>,\nval tools: List<ToolDefinition>,\nval options: GenerateOptions,\n)\n\npublic data class ProviderInstallOptions(\nval environment: ProviderEnvironment?;",
              "documentation": ""
            },
            {
              "name": "public data class ProviderInstallOptions(",
              "line": 393,
              "signature": "public data class ProviderInstallOptions(\nval environment: ProviderEnvironment?;",
              "documentation": ""
            },
            {
              "name": "public fun approvedCodingProviderPresets(): List<ProviderPreset> =",
              "line": 471,
              "signature": "public fun approvedCodingProviderPresets(): List<ProviderPreset> =",
              "documentation": ""
            },
            {
              "name": "public fun approvedDirectProviderPresets(): List<ProviderPreset> =",
              "line": 480,
              "signature": "public fun approvedDirectProviderPresets(): List<ProviderPreset> =",
              "documentation": ""
            },
            {
              "name": "public fun approvedGatewayProviderPresets(): List<ProviderPreset> =",
              "line": 497,
              "signature": "public fun approvedGatewayProviderPresets(): List<ProviderPreset> =",
              "documentation": ""
            },
            {
              "name": "public fun registerOfficialCodingProviders(",
              "line": 506,
              "signature": "public fun registerOfficialCodingProviders(\nregistry: ProviderRegistry,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerDefaultCoreDirectProviders(",
              "line": 608,
              "signature": "public fun registerDefaultCoreDirectProviders(\nregistry: ProviderRegistry,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerOpenAiModel(",
              "line": 617,
              "signature": "public fun registerOpenAiModel(\nregistry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerAnthropicModel(",
              "line": 638,
              "signature": "public fun registerAnthropicModel(\nregistry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerGoogleModel(",
              "line": 658,
              "signature": "public fun registerGoogleModel(\nregistry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerXaiModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 678,
              "signature": "public fun registerXaiModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerDeepSeekModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 681,
              "signature": "public fun registerDeepSeekModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerMistralModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 684,
              "signature": "public fun registerMistralModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerCohereModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 687,
              "signature": "public fun registerCohereModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerGroqModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 690,
              "signature": "public fun registerGroqModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerMoonshotModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 693,
              "signature": "public fun registerMoonshotModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerZaiModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 696,
              "signature": "public fun registerZaiModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerMiniMaxModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 699,
              "signature": "public fun registerMiniMaxModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerOpenRouterModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "line": 702,
              "signature": "public fun registerOpenRouterModel(registry: ProviderRegistry, modelId: String, options: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerBedrockModel(",
              "line": 705,
              "signature": "public fun registerBedrockModel(\nregistry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerVertexAiModel(",
              "line": 725,
              "signature": "public fun registerVertexAiModel(\nregistry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerMicrosoftFoundryModel(",
              "line": 745,
              "signature": "public fun registerMicrosoftFoundryModel(\nregistry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            },
            {
              "name": "public fun registerFoundryModel(",
              "line": 765,
              "signature": "public fun registerFoundryModel(\nregistry: ProviderRegistry,\nmodelId: String,\noptions: ProviderInstallOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Routing.kt",
          "sha256": "ae8c76417dc377fc96de6c77de411670efad1bca0051cfb0acc62abd45e52520",
          "artifactSha256": "c541966f14d20c02157ef81a456d8fb8c1284136f2fde8d41f612d2c917b12ec",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Routing.kt.txt",
          "declarations": [
            {
              "name": "public enum class TaskMode",
              "line": 27,
              "signature": "public enum class TaskMode",
              "documentation": ""
            },
            {
              "name": "public fun asRoleName(): String;",
              "line": 51,
              "signature": "public fun asRoleName(): String;",
              "documentation": ""
            },
            {
              "name": "public enum class ExecutionTopology",
              "line": 68,
              "signature": "public enum class ExecutionTopology",
              "documentation": ""
            },
            {
              "name": "public data class RoutingContext(",
              "line": 105,
              "signature": "public data class RoutingContext(\nval domain: String?;",
              "documentation": ""
            },
            {
              "name": "public data class ResolvedRoute(",
              "line": 126,
              "signature": "public data class ResolvedRoute(\nval slotRole: String,\nval provider: ProviderRef,\nval modelCapabilities: ModelCapabilities;",
              "documentation": ""
            },
            {
              "name": "public data class ModelCapabilities(",
              "line": 148,
              "signature": "public data class ModelCapabilities(\nval textGeneration: Boolean;",
              "documentation": ""
            },
            {
              "name": "public interface ModelRouter",
              "line": 167,
              "signature": "public interface ModelRouter",
              "documentation": ""
            },
            {
              "name": "public fun name(): String",
              "line": 174,
              "signature": "public fun name(): String\n\n/**\n* Selects a slot from the topology.\n*\n* @param context The routing context describing the current task.\n* @param topology The model topology to select from.\n* @return A [ResolvedRoute] identifying the selected slot and provider.\n* @throws ForgeError.SchemaValidation if routing fails.\n*/\npublic fun route(context: RoutingContext, topology: ModelTopology): ResolvedRoute\n}\n\n/**\n* The default model router shipped with Forge.\n*\n* Implements a cascading match strategy:\n*\n* 1. If [RoutingContext.roleOverride] is set, return that slot directly.\n* 2. If the topology has a slot whose role matches [RoutingContext.domain], return it.\n* 3. If the topology has a slot whose role matches [RoutingContext.taskMode], return it.\n* 4. Otherwise, return the \"default\" slot.\n*/\npublic class DefaultModelRouter : ModelRouter",
              "documentation": ""
            },
            {
              "name": "public fun route(context: RoutingContext, topology: ModelTopology): ResolvedRoute",
              "line": 184,
              "signature": "public fun route(context: RoutingContext, topology: ModelTopology): ResolvedRoute\n}\n\n/**\n* The default model router shipped with Forge.\n*\n* Implements a cascading match strategy:\n*\n* 1. If [RoutingContext.roleOverride] is set, return that slot directly.\n* 2. If the topology has a slot whose role matches [RoutingContext.domain], return it.\n* 3. If the topology has a slot whose role matches [RoutingContext.taskMode], return it.\n* 4. Otherwise, return the \"default\" slot.\n*/\npublic class DefaultModelRouter : ModelRouter",
              "documentation": ""
            },
            {
              "name": "public class DefaultModelRouter : ModelRouter",
              "line": 197,
              "signature": "public class DefaultModelRouter : ModelRouter",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Schema.kt",
          "sha256": "876b72893bde605b332ffd1d620ddbdd0d597dd7d525c96cbc69c6bedff0c57f",
          "artifactSha256": "6142821f42183e5ec4ed826ba2a015433cf8c7b1098bfef5d9f9affb2a811590",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Schema.kt.txt",
          "declarations": [
            {
              "name": "public data class JsonSchema(",
              "line": 44,
              "signature": "public data class JsonSchema(\nval type: String;",
              "documentation": ""
            },
            {
              "name": "public fun validate(value: JsonElement, path: String;",
              "line": 68,
              "signature": "public fun validate(value: JsonElement, path: String;",
              "documentation": ""
            },
            {
              "name": "public fun string(",
              "line": 207,
              "signature": "public fun string(\ndescription: String?;",
              "documentation": ""
            },
            {
              "name": "public fun number(",
              "line": 221,
              "signature": "public fun number(\ndescription: String?;",
              "documentation": ""
            },
            {
              "name": "public fun integer(",
              "line": 228,
              "signature": "public fun integer(\ndescription: String?;",
              "documentation": ""
            },
            {
              "name": "public fun boolean(description: String?;",
              "line": 235,
              "signature": "public fun boolean(description: String?;",
              "documentation": ""
            },
            {
              "name": "public fun array(",
              "line": 239,
              "signature": "public fun array(\nitems: JsonSchema?;",
              "documentation": ""
            },
            {
              "name": "public fun `object`(",
              "line": 245,
              "signature": "public fun `object`(\nproperties: Map<String, JsonSchema>?;",
              "documentation": ""
            },
            {
              "name": "public fun nullSchema(description: String?;",
              "line": 259,
              "signature": "public fun nullSchema(description: String?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Telemetry.kt",
          "sha256": "48850c58277ba408f6b7ab1e9d0cd6b2d43ae0f233d7b0a538a42be9ce065ad1",
          "artifactSha256": "62a0e3276ae64b5e57945b735fa85d47af57053f14323947a8a6dfe3911d25c6",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Telemetry.kt.txt",
          "declarations": [
            {
              "name": "public sealed class SpanStatus",
              "line": 22,
              "signature": "public sealed class SpanStatus",
              "documentation": ""
            },
            {
              "name": "public data object Unset : SpanStatus()",
              "line": 26,
              "signature": "public data object Unset : SpanStatus()\n\n/** The operation completed successfully. */\n@Serializable\n@SerialName(\"ok\")\npublic data object Ok : SpanStatus()\n\n/**\n* The operation completed with an error.\n*\n* @property message A description of the error.\n*/\n@Serializable\n@SerialName(\"error\")\npublic data class Error(val message: String) : SpanStatus()\n}\n\n/**\n* A typed span attribute value.\n*\n* ANVIL Spec Section 12.2 -- Span Attributes\n*/\n@Serializable\npublic sealed class SpanAttribute",
              "documentation": ""
            },
            {
              "name": "public data object Ok : SpanStatus()",
              "line": 31,
              "signature": "public data object Ok : SpanStatus()\n\n/**\n* The operation completed with an error.\n*\n* @property message A description of the error.\n*/\n@Serializable\n@SerialName(\"error\")\npublic data class Error(val message: String) : SpanStatus()\n}\n\n/**\n* A typed span attribute value.\n*\n* ANVIL Spec Section 12.2 -- Span Attributes\n*/\n@Serializable\npublic sealed class SpanAttribute",
              "documentation": ""
            },
            {
              "name": "public data class Error(val message: String) : SpanStatus()",
              "line": 40,
              "signature": "public data class Error(val message: String) : SpanStatus()\n}\n\n/**\n* A typed span attribute value.\n*\n* ANVIL Spec Section 12.2 -- Span Attributes\n*/\n@Serializable\npublic sealed class SpanAttribute",
              "documentation": ""
            },
            {
              "name": "public sealed class SpanAttribute",
              "line": 49,
              "signature": "public sealed class SpanAttribute",
              "documentation": ""
            },
            {
              "name": "public data class StringValue(val value: String) : SpanAttribute()",
              "line": 53,
              "signature": "public data class StringValue(val value: String) : SpanAttribute()\n\n/** An integer attribute. */\n@Serializable\n@SerialName(\"int\")\npublic data class IntValue(val value: Long) : SpanAttribute()\n\n/** A floating-point attribute. */\n@Serializable\n@SerialName(\"float\")\npublic data class FloatValue(val value: Double) : SpanAttribute()\n\n/** A boolean attribute. */\n@Serializable\n@SerialName(\"bool\")\npublic data class BoolValue(val value: Boolean) : SpanAttribute()\n\npublic companion object",
              "documentation": ""
            },
            {
              "name": "public data class IntValue(val value: Long) : SpanAttribute()",
              "line": 58,
              "signature": "public data class IntValue(val value: Long) : SpanAttribute()\n\n/** A floating-point attribute. */\n@Serializable\n@SerialName(\"float\")\npublic data class FloatValue(val value: Double) : SpanAttribute()\n\n/** A boolean attribute. */\n@Serializable\n@SerialName(\"bool\")\npublic data class BoolValue(val value: Boolean) : SpanAttribute()\n\npublic companion object",
              "documentation": ""
            },
            {
              "name": "public data class FloatValue(val value: Double) : SpanAttribute()",
              "line": 63,
              "signature": "public data class FloatValue(val value: Double) : SpanAttribute()\n\n/** A boolean attribute. */\n@Serializable\n@SerialName(\"bool\")\npublic data class BoolValue(val value: Boolean) : SpanAttribute()\n\npublic companion object",
              "documentation": ""
            },
            {
              "name": "public data class BoolValue(val value: Boolean) : SpanAttribute()",
              "line": 68,
              "signature": "public data class BoolValue(val value: Boolean) : SpanAttribute()\n\npublic companion object",
              "documentation": ""
            },
            {
              "name": "public fun of(value: String): SpanAttribute;",
              "line": 72,
              "signature": "public fun of(value: String): SpanAttribute;",
              "documentation": ""
            },
            {
              "name": "public fun of(value: Long): SpanAttribute;",
              "line": 75,
              "signature": "public fun of(value: Long): SpanAttribute;",
              "documentation": ""
            },
            {
              "name": "public fun of(value: Int): SpanAttribute;",
              "line": 78,
              "signature": "public fun of(value: Int): SpanAttribute;",
              "documentation": ""
            },
            {
              "name": "public fun of(value: Double): SpanAttribute;",
              "line": 81,
              "signature": "public fun of(value: Double): SpanAttribute;",
              "documentation": ""
            },
            {
              "name": "public fun of(value: Boolean): SpanAttribute;",
              "line": 84,
              "signature": "public fun of(value: Boolean): SpanAttribute;",
              "documentation": ""
            },
            {
              "name": "public data class ForgeSpan(",
              "line": 101,
              "signature": "public data class ForgeSpan(\nval name: String,\nval spanId: String,\nval parentId: String?;",
              "documentation": ""
            },
            {
              "name": "public fun setAttribute(key: String, value: String)",
              "line": 111,
              "signature": "public fun setAttribute(key: String, value: String)",
              "documentation": ""
            },
            {
              "name": "public fun setAttribute(key: String, value: Long)",
              "line": 116,
              "signature": "public fun setAttribute(key: String, value: Long)",
              "documentation": ""
            },
            {
              "name": "public fun setAttribute(key: String, value: Double)",
              "line": 121,
              "signature": "public fun setAttribute(key: String, value: Double)",
              "documentation": ""
            },
            {
              "name": "public fun setAttribute(key: String, value: Boolean)",
              "line": 126,
              "signature": "public fun setAttribute(key: String, value: Boolean)",
              "documentation": ""
            },
            {
              "name": "public fun setOk()",
              "line": 131,
              "signature": "public fun setOk()",
              "documentation": ""
            },
            {
              "name": "public fun setError(message: String)",
              "line": 137,
              "signature": "public fun setError(message: String)",
              "documentation": ""
            },
            {
              "name": "public data class ForgeEvent(",
              "line": 152,
              "signature": "public data class ForgeEvent(\nval name: String,\nval timestamp: Instant;",
              "documentation": ""
            },
            {
              "name": "public interface TelemetryEmitter",
              "line": 166,
              "signature": "public interface TelemetryEmitter",
              "documentation": ""
            },
            {
              "name": "public fun emit(span: ForgeSpan)",
              "line": 168,
              "signature": "public fun emit(span: ForgeSpan)\n\n/** Emit an event. */\npublic fun emit(event: ForgeEvent)\n}\n\n/**\n* A telemetry emitter that discards all data.\n*\n* Used as the default when no telemetry backend is configured.\n*/\npublic object NoopEmitter : TelemetryEmitter",
              "documentation": ""
            },
            {
              "name": "public fun emit(event: ForgeEvent)",
              "line": 171,
              "signature": "public fun emit(event: ForgeEvent)\n}\n\n/**\n* A telemetry emitter that discards all data.\n*\n* Used as the default when no telemetry backend is configured.\n*/\npublic object NoopEmitter : TelemetryEmitter",
              "documentation": ""
            },
            {
              "name": "public object NoopEmitter : TelemetryEmitter",
              "line": 179,
              "signature": "public object NoopEmitter : TelemetryEmitter",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Tool.kt",
          "sha256": "ff04a3cd4b61a4f57c68ac0a1afac4c58a8fb976a442edd767e76a59133a250b",
          "artifactSha256": "640912436c342c5983aaa23c921e8357ccfab88d7f188a919dc00c7a019f6f9d",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Tool.kt.txt",
          "declarations": [
            {
              "name": "public enum class ToolTier",
              "line": 23,
              "signature": "public enum class ToolTier",
              "documentation": ""
            },
            {
              "name": "public fun requiresAuthorization(): Boolean;",
              "line": 60,
              "signature": "public fun requiresAuthorization(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public data class ToolDefinition(",
              "line": 74,
              "signature": "public data class ToolDefinition(\nval name: String,\nval description: String,\nval parameters: JsonSchema;",
              "documentation": ""
            },
            {
              "name": "public class Builder(private val name: String)",
              "line": 88,
              "signature": "public class Builder(private val name: String)",
              "documentation": ""
            },
            {
              "name": "public fun description(description: String): Builder;",
              "line": 94,
              "signature": "public fun description(description: String): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun parameters(parameters: JsonSchema): Builder;",
              "line": 97,
              "signature": "public fun parameters(parameters: JsonSchema): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun tier(tier: ToolTier): Builder;",
              "line": 100,
              "signature": "public fun tier(tier: ToolTier): Builder;",
              "documentation": ""
            },
            {
              "name": "public fun build(): ToolDefinition",
              "line": 103,
              "signature": "public fun build(): ToolDefinition",
              "documentation": ""
            },
            {
              "name": "public fun builder(name: String): Builder;",
              "line": 111,
              "signature": "public fun builder(name: String): Builder;",
              "documentation": ""
            },
            {
              "name": "public data class ToolCall(",
              "line": 125,
              "signature": "public data class ToolCall(\nval id: String,\nval name: String,\nval arguments: String,\n)\n\n/**\n* The result of executing a tool.\n*\n* ANVIL Spec Section 8.4 -- Tool Result\n*\n* @property toolCallId The ID of the [ToolCall] this result corresponds to.\n* @property name The name of the tool that produced this result.\n* @property content The text content returned by the tool.\n* @property isError Whether the tool execution resulted in an error.\n*/\n@Serializable\npublic data class ToolResult(\n@SerialName(\"tool_call_id\")\nval toolCallId: String,\nval name: String,\nval content: String,\n@SerialName(\"is_error\")\nval isError: Boolean;",
              "documentation": ""
            },
            {
              "name": "public data class ToolResult(",
              "line": 142,
              "signature": "public data class ToolResult(\n@SerialName(\"tool_call_id\")\nval toolCallId: String,\nval name: String,\nval content: String,\n@SerialName(\"is_error\")\nval isError: Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun success(toolCallId: String, name: String, content: String): ToolResult =",
              "line": 152,
              "signature": "public fun success(toolCallId: String, name: String, content: String): ToolResult =",
              "documentation": ""
            },
            {
              "name": "public fun error(toolCallId: String, name: String, errorMessage: String): ToolResult =",
              "line": 156,
              "signature": "public fun error(toolCallId: String, name: String, errorMessage: String): ToolResult =",
              "documentation": ""
            },
            {
              "name": "public sealed class ToolApproval",
              "line": 169,
              "signature": "public sealed class ToolApproval",
              "documentation": ""
            },
            {
              "name": "public data object Approve : ToolApproval()",
              "line": 174,
              "signature": "public data object Approve : ToolApproval()\n\n/**\n* Deny the tool call.\n*\n* @property reason The human-readable reason for denial.\n*/\n@Serializable\n@SerialName(\"deny\")\npublic data class Deny(val reason: String) : ToolApproval()\n\n/**\n* Approve the tool call with modified arguments.\n*\n* @property arguments The modified JSON-encoded arguments.\n*/\n@Serializable\n@SerialName(\"modify\")\npublic data class Modify(val arguments: String) : ToolApproval()\n}",
              "documentation": ""
            },
            {
              "name": "public data class Deny(val reason: String) : ToolApproval()",
              "line": 183,
              "signature": "public data class Deny(val reason: String) : ToolApproval()\n\n/**\n* Approve the tool call with modified arguments.\n*\n* @property arguments The modified JSON-encoded arguments.\n*/\n@Serializable\n@SerialName(\"modify\")\npublic data class Modify(val arguments: String) : ToolApproval()\n}",
              "documentation": ""
            },
            {
              "name": "public data class Modify(val arguments: String) : ToolApproval()",
              "line": 192,
              "signature": "public data class Modify(val arguments: String) : ToolApproval()\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Topology.kt",
          "sha256": "35ff40ad447faab71da94546b54daaca25688735b49bebd093578b98b902202e",
          "artifactSha256": "3778f69cc9d555c0c68a97f8b8198aba2ef20855d55029842838dcbd859ac79a",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Topology.kt.txt",
          "declarations": [
            {
              "name": "public const val DEFAULT_ROLE: String;",
              "line": 24,
              "signature": "public const val DEFAULT_ROLE: String;",
              "documentation": ""
            },
            {
              "name": "public enum class CostPreference",
              "line": 35,
              "signature": "public enum class CostPreference",
              "documentation": ""
            },
            {
              "name": "public enum class LatencyPreference",
              "line": 58,
              "signature": "public enum class LatencyPreference",
              "documentation": ""
            },
            {
              "name": "public data class ModelSlot(",
              "line": 91,
              "signature": "public data class ModelSlot(\nval role: String,\nval primary: ProviderRef,\nval fallbacks: List<ProviderRef>;",
              "documentation": ""
            },
            {
              "name": "public data class ModelTopology(",
              "line": 118,
              "signature": "public data class ModelTopology(\nval name: String,\nval slots: Map<String, ModelSlot>,\nval defaultRole: String;",
              "documentation": ""
            },
            {
              "name": "public fun defaultSlot(): ModelSlot =",
              "line": 131,
              "signature": "public fun defaultSlot(): ModelSlot =",
              "documentation": ""
            },
            {
              "name": "public fun slotForRole(role: String): ModelSlot =",
              "line": 140,
              "signature": "public fun slotForRole(role: String): ModelSlot =",
              "documentation": ""
            },
            {
              "name": "public fun hasRole(role: String): Boolean;",
              "line": 149,
              "signature": "public fun hasRole(role: String): Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun slotCount(): Int;",
              "line": 156,
              "signature": "public fun slotCount(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun allProviderRefs(): List<ProviderRef>",
              "line": 164,
              "signature": "public fun allProviderRefs(): List<ProviderRef>",
              "documentation": ""
            },
            {
              "name": "public fun single(providerRef: ProviderRef): ModelTopology",
              "line": 185,
              "signature": "public fun single(providerRef: ProviderRef): ModelTopology",
              "documentation": ""
            },
            {
              "name": "public fun builder(): TopologyBuilder;",
              "line": 198,
              "signature": "public fun builder(): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public class TopologyBuilder",
              "line": 217,
              "signature": "public class TopologyBuilder",
              "documentation": ""
            },
            {
              "name": "public fun name(name: String): TopologyBuilder;",
              "line": 227,
              "signature": "public fun name(name: String): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun slot(role: String, primary: ProviderRef): TopologyBuilder;",
              "line": 238,
              "signature": "public fun slot(role: String, primary: ProviderRef): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun withFallback(role: String, fallback: ProviderRef): TopologyBuilder;",
              "line": 251,
              "signature": "public fun withFallback(role: String, fallback: ProviderRef): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun withRequiredCapability(role: String, cap: RuntimeCapability): TopologyBuilder;",
              "line": 266,
              "signature": "public fun withRequiredCapability(role: String, cap: RuntimeCapability): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun withCostPreference(role: String, pref: CostPreference): TopologyBuilder;",
              "line": 281,
              "signature": "public fun withCostPreference(role: String, pref: CostPreference): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun withLatencyPreference(role: String, pref: LatencyPreference): TopologyBuilder;",
              "line": 296,
              "signature": "public fun withLatencyPreference(role: String, pref: LatencyPreference): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun withScopeNarrowing(role: String, scopes: List<String>): TopologyBuilder;",
              "line": 311,
              "signature": "public fun withScopeNarrowing(role: String, scopes: List<String>): TopologyBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun build(): ModelTopology",
              "line": 323,
              "signature": "public fun build(): ModelTopology",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Types.kt",
          "sha256": "0812d958c2d44e628b984cd02a67e964229905d81a592401dea6581c64ebf2a1",
          "artifactSha256": "5ced39f9abeecec4f3e1ac1202c0110490aa55c5e5e6f4a868cacfaea0ac647f",
          "url": "/reference/source/forge-kt/forge-core/src/main/kotlin/com/l1fe/forge/core/Types.kt.txt",
          "declarations": [
            {
              "name": "public data class AgentDid(val value: String)",
              "line": 30,
              "signature": "public data class AgentDid(val value: String)",
              "documentation": ""
            },
            {
              "name": "public val namespace: String",
              "line": 54,
              "signature": "public val namespace: String\nget();",
              "documentation": ""
            },
            {
              "name": "public val kind: String",
              "line": 57,
              "signature": "public val kind: String\nget();",
              "documentation": ""
            },
            {
              "name": "public val identifier: String",
              "line": 60,
              "signature": "public val identifier: String\nget();",
              "documentation": ""
            },
            {
              "name": "public object AgentDidSerializer : KSerializer<AgentDid>",
              "line": 69,
              "signature": "public object AgentDidSerializer : KSerializer<AgentDid>",
              "documentation": ""
            },
            {
              "name": "public data class Timestamp(val instant: Instant) : Comparable<Timestamp>",
              "line": 90,
              "signature": "public data class Timestamp(val instant: Instant) : Comparable<Timestamp>",
              "documentation": ""
            },
            {
              "name": "public fun toIso8601(): String =",
              "line": 97,
              "signature": "public fun toIso8601(): String =",
              "documentation": ""
            },
            {
              "name": "public fun now(): Timestamp;",
              "line": 107,
              "signature": "public fun now(): Timestamp;",
              "documentation": ""
            },
            {
              "name": "public fun fromIso8601(iso8601: String): Timestamp =",
              "line": 116,
              "signature": "public fun fromIso8601(iso8601: String): Timestamp =",
              "documentation": ""
            },
            {
              "name": "public fun fromEpochMilli(epochMilli: Long): Timestamp =",
              "line": 125,
              "signature": "public fun fromEpochMilli(epochMilli: Long): Timestamp =",
              "documentation": ""
            },
            {
              "name": "public object TimestampSerializer : KSerializer<Timestamp>",
              "line": 133,
              "signature": "public object TimestampSerializer : KSerializer<Timestamp>",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-generate",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-generate module.",
      "manifest": "forge-kt/forge-generate/build.gradle.kts",
      "manifestSha256": "7fdbca69dbb265a0f166f978241e771c5a0aab0b4ccba4030e1243dc4d02e3e0",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-generate",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/GenerateObject.kt",
          "sha256": "938a2b3038ac3d1c3efc2b78a56b88a03bdfd6f8f96b577174e475eaa8a9e8be",
          "artifactSha256": "b21afe48d795e86d2887e61e8edc390f8fec4610e4a396d95ec42f6afa93134f",
          "url": "/reference/source/forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/GenerateObject.kt.txt",
          "declarations": [
            {
              "name": "public data class GenerateObjectResult(",
              "line": 32,
              "signature": "public data class GenerateObjectResult(\nval jsonElement: JsonElement,\nval rawText: String,\nval result: GenerateResult,\n)\n\n/**\n* Configuration for a [generateObject] call.\n*\n* @property model The provider reference.\n* @property messages The conversation history.\n* @property schema The JSON Schema that the output must conform to.\n* @property options Generation configuration (output schema is set automatically).\n* @property system Optional system prompt.\n*/\npublic data class GenerateObjectParams(\nval model: ProviderRef,\nval messages: List<ModelMessage>,\nval schema: JsonSchema,\nval options: GenerateOptions;",
              "documentation": ""
            },
            {
              "name": "public data class GenerateObjectParams(",
              "line": 47,
              "signature": "public data class GenerateObjectParams(\nval model: ProviderRef,\nval messages: List<ModelMessage>,\nval schema: JsonSchema,\nval options: GenerateOptions;",
              "documentation": ""
            },
            {
              "name": "public suspend fun generateObject(",
              "line": 72,
              "signature": "public suspend fun generateObject(\nparams: GenerateObjectParams,\nregistry: ProviderRegistry,\ntelemetry: TelemetryEmitter;",
              "documentation": ""
            },
            {
              "name": "public suspend fun generateObject(",
              "line": 84,
              "signature": "public suspend fun generateObject(\nmodel: LanguageModel,\nmessages: List<ModelMessage>,\nschema: JsonSchema,\noptions: GenerateOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/GenerateText.kt",
          "sha256": "674387a69dc3115c1e54b9919c225273a3cea9aa5b7b295834364223e8a58f5d",
          "artifactSha256": "f92948ceb25407d2c2eecf213a836521a402733e67a6a1544e1cd513ce6f8e9a",
          "url": "/reference/source/forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/GenerateText.kt.txt",
          "declarations": [
            {
              "name": "public data class GenerateTextParams(",
              "line": 32,
              "signature": "public data class GenerateTextParams(\nval model: ProviderRef,\nval messages: List<ModelMessage>,\nval tools: List<ToolDefinition>;",
              "documentation": ""
            },
            {
              "name": "public suspend fun generateText(",
              "line": 55,
              "signature": "public suspend fun generateText(\nparams: GenerateTextParams,\nregistry: ProviderRegistry,\ntelemetry: TelemetryEmitter;",
              "documentation": ""
            },
            {
              "name": "public suspend fun generateText(",
              "line": 98,
              "signature": "public suspend fun generateText(\nmodel: LanguageModel,\nmessages: List<ModelMessage>,\ntools: List<ToolDefinition>;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/StreamObject.kt",
          "sha256": "7aa7d779a7e95343d2f326eb6afdaae4f0c403f88ea2d86bd592fa4ca41f5f0e",
          "artifactSha256": "ad00d8400ea5822cba1c0337f49ed47a46d54b2d528d4bbdd2b1c6af31f7d4df",
          "url": "/reference/source/forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/StreamObject.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ObjectStreamChunk",
              "line": 30,
              "signature": "public sealed class ObjectStreamChunk",
              "documentation": ""
            },
            {
              "name": "public data class Partial(",
              "line": 37,
              "signature": "public data class Partial(\nval textDelta: String,\nval accumulatedText: String,\n) : ObjectStreamChunk()\n\n/**\n* The stream is complete and the final JSON object has been parsed and validated.\n*\n* @property jsonElement The parsed JSON element.\n* @property rawText The complete raw text.\n*/\npublic data class Complete(\nval jsonElement: JsonElement,\nval rawText: String,\n) : ObjectStreamChunk()\n\n/**\n* The stream encountered an error.\n*\n* @property error The error that occurred.\n*/\npublic data class Error(\nval error: ForgeError,\n) : ObjectStreamChunk()\n}\n",
              "documentation": ""
            },
            {
              "name": "public data class Complete(",
              "line": 48,
              "signature": "public data class Complete(\nval jsonElement: JsonElement,\nval rawText: String,\n) : ObjectStreamChunk()\n\n/**\n* The stream encountered an error.\n*\n* @property error The error that occurred.\n*/\npublic data class Error(\nval error: ForgeError,\n) : ObjectStreamChunk()\n}\n\n/**\n* Configuration for a [streamObject] call.\n*\n* @property model The provider reference.\n* @property messages The conversation history.\n* @property schema The JSON Schema that the output must conform to.\n* @property options Generation configuration.\n* @property system Optional system prompt.\n*/\npublic data class StreamObjectParams(\nval model: ProviderRef,",
              "documentation": ""
            },
            {
              "name": "public data class Error(",
              "line": 58,
              "signature": "public data class Error(\nval error: ForgeError,\n) : ObjectStreamChunk()\n}\n\n/**\n* Configuration for a [streamObject] call.\n*\n* @property model The provider reference.\n* @property messages The conversation history.\n* @property schema The JSON Schema that the output must conform to.\n* @property options Generation configuration.\n* @property system Optional system prompt.\n*/\npublic data class StreamObjectParams(\nval model: ProviderRef,\nval messages: List<ModelMessage>,\nval schema: JsonSchema,\nval options: GenerateOptions;",
              "documentation": ""
            },
            {
              "name": "public data class StreamObjectParams(",
              "line": 72,
              "signature": "public data class StreamObjectParams(\nval model: ProviderRef,\nval messages: List<ModelMessage>,\nval schema: JsonSchema,\nval options: GenerateOptions;",
              "documentation": ""
            },
            {
              "name": "public suspend fun streamObject(",
              "line": 94,
              "signature": "public suspend fun streamObject(\nparams: StreamObjectParams,\nregistry: ProviderRegistry,\ntelemetry: TelemetryEmitter;",
              "documentation": ""
            },
            {
              "name": "public suspend fun streamObject(",
              "line": 106,
              "signature": "public suspend fun streamObject(\nmodel: LanguageModel,\nmessages: List<ModelMessage>,\nschema: JsonSchema,\noptions: GenerateOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/StreamText.kt",
          "sha256": "c3ed3b077ebe13d23c22a8b769a4626b5d7ea0918dc2e1380de4ad06d825b872",
          "artifactSha256": "71ca50bf6762c879195745bbe0b532bda1ee3a63ebfc1f09deefa4bd859231d0",
          "url": "/reference/source/forge-kt/forge-generate/src/main/kotlin/com/l1fe/forge/generate/StreamText.kt.txt",
          "declarations": [
            {
              "name": "public data class StreamTextParams(",
              "line": 36,
              "signature": "public data class StreamTextParams(\nval model: ProviderRef,\nval messages: List<ModelMessage>,\nval tools: List<ToolDefinition>;",
              "documentation": ""
            },
            {
              "name": "public suspend fun streamText(",
              "line": 60,
              "signature": "public suspend fun streamText(\nparams: StreamTextParams,\nregistry: ProviderRegistry,\ntelemetry: TelemetryEmitter;",
              "documentation": ""
            },
            {
              "name": "public suspend fun streamText(",
              "line": 109,
              "signature": "public suspend fun streamText(\nmodel: LanguageModel,\nmessages: List<ModelMessage>,\ntools: List<ToolDefinition>;",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-tool",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-tool module.",
      "manifest": "forge-kt/forge-tool/build.gradle.kts",
      "manifestSha256": "76088df15e33078c144e6cc831d4238bd81e52a4a30d8d00f6df135fa6e2123f",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-tool",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolApproval.kt",
          "sha256": "c0bcd2428d70adca0364c516713cab90575f6a95afbf87622a16054203c044d7",
          "artifactSha256": "038b1c6e71e38c8b8725e7f2c42c3e74a7a663300840a43e2837819a70d40f12",
          "url": "/reference/source/forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolApproval.kt.txt",
          "declarations": [
            {
              "name": "public interface ApprovalHandler",
              "line": 25,
              "signature": "public interface ApprovalHandler",
              "documentation": ""
            },
            {
              "name": "public suspend fun check(call: ToolCall, tier: ToolTier): ToolApproval",
              "line": 34,
              "signature": "public suspend fun check(call: ToolCall, tier: ToolTier): ToolApproval\n}\n\n/**\n* An approval handler that always approves tool calls.\n*\n* Useful for development, testing, and scenarios where all tools\n* are pre-authorized.\n*\n* Security consideration: Using [AutoApprove] in production means\n* every tool call is permitted. For production use with External-tier\n* tools, prefer [TierBasedApproval] or a custom handler.\n*/\npublic object AutoApprove : ApprovalHandler",
              "documentation": ""
            },
            {
              "name": "public object AutoApprove : ApprovalHandler",
              "line": 47,
              "signature": "public object AutoApprove : ApprovalHandler",
              "documentation": ""
            },
            {
              "name": "public class DenyAll(",
              "line": 68,
              "signature": "public class DenyAll(\nprivate val reason: String,\n) : ApprovalHandler",
              "documentation": ""
            },
            {
              "name": "public object TierBasedApproval : ApprovalHandler",
              "line": 97,
              "signature": "public object TierBasedApproval : ApprovalHandler",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolDefinition.kt",
          "sha256": "1a858af23cc2b48a592211ef01baa045b82e0a78da438177ada72d7e2addec60",
          "artifactSha256": "f0f5c7bf0ac302f308558808490f9e6c4d549a2c746d5e2a1227756dde9287ce",
          "url": "/reference/source/forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolDefinition.kt.txt",
          "declarations": [
            {
              "name": "public class ToolBuilder(private val name: String)",
              "line": 28,
              "signature": "public class ToolBuilder(private val name: String)",
              "documentation": ""
            },
            {
              "name": "public fun description(description: String): ToolBuilder;",
              "line": 40,
              "signature": "public fun description(description: String): ToolBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun tier(tier: ToolTier): ToolBuilder;",
              "line": 52,
              "signature": "public fun tier(tier: ToolTier): ToolBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun parameters(parameters: JsonSchema): ToolBuilder;",
              "line": 62,
              "signature": "public fun parameters(parameters: JsonSchema): ToolBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun executor(executor: ToolExecutor): ToolBuilder;",
              "line": 72,
              "signature": "public fun executor(executor: ToolExecutor): ToolBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun handler(handler: (ToolCall) -> ToolResult): ToolBuilder;",
              "line": 85,
              "signature": "public fun handler(handler: (ToolCall) -> ToolResult): ToolBuilder;",
              "documentation": ""
            },
            {
              "name": "public fun build(): Pair<ToolDefinition, ToolExecutor?>",
              "line": 94,
              "signature": "public fun build(): Pair<ToolDefinition, ToolExecutor?>",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolError.kt",
          "sha256": "21cfb13e92f2f61a1dfb2cfb3be38cb88fee74ccdcd0682c28bdeba08a430931",
          "artifactSha256": "a154f9b055c45b8f1fb85251f3ccfabed7ac6dc6f26cc2b537bf33c2953835b8",
          "url": "/reference/source/forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ToolError(",
              "line": 18,
              "signature": "public sealed class ToolError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ToolNotFound(",
              "line": 28,
              "signature": "public class ToolNotFound(\npublic val name: String,\n) : ToolError(\n\"tool '$name' not found in registry; register it with ToolRegistry.register() before invoking\"",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 29,
              "signature": "public val name: String,\n) : ToolError(\n\"tool '$name' not found in registry; register it with ToolRegistry.register() before invoking\"",
              "documentation": ""
            },
            {
              "name": "public class ExecutionFailed(",
              "line": 40,
              "signature": "public class ExecutionFailed(\npublic val name: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 41,
              "signature": "public val name: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 42,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ApprovalDenied(",
              "line": 54,
              "signature": "public class ApprovalDenied(\npublic val name: String,\npublic val reason: String,\n) : ToolError(\"tool '$name' invocation denied by approval handler: $reason\")\n\n/**\n* Schema validation failed for tool arguments.\n*\n* @property name The tool whose schema was violated.\n* @property path JSON pointer path to the failing field.\n* @property reason Human-readable description of what was expected.\n*/\npublic class SchemaValidation(\npublic val name: String,\npublic val path: String,\npublic val reason: String,\n) : ToolError(\"schema validation failed for tool '$name' at path '$path': $reason\")\n\n/**\n* A tool was registered or invoked with an incorrect tier classification.\n*\n* ANVIL Spec Section 8.1 -- Tool Tier Classification\n*\n* @property name The tool whose tier is mismatched.\n* @property expected The expected tier classification.\n* @property actual The actual tier classification provided.",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 55,
              "signature": "public val name: String,\npublic val reason: String,\n) : ToolError(\"tool '$name' invocation denied by approval handler: $reason\")\n\n/**\n* Schema validation failed for tool arguments.\n*\n* @property name The tool whose schema was violated.\n* @property path JSON pointer path to the failing field.\n* @property reason Human-readable description of what was expected.\n*/\npublic class SchemaValidation(\npublic val name: String,\npublic val path: String,\npublic val reason: String,\n) : ToolError(\"schema validation failed for tool '$name' at path '$path': $reason\")\n\n/**\n* A tool was registered or invoked with an incorrect tier classification.\n*\n* ANVIL Spec Section 8.1 -- Tool Tier Classification\n*\n* @property name The tool whose tier is mismatched.\n* @property expected The expected tier classification.\n* @property actual The actual tier classification provided.\n*/",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 56,
              "signature": "public val reason: String,\n) : ToolError(\"tool '$name' invocation denied by approval handler: $reason\")\n\n/**\n* Schema validation failed for tool arguments.\n*\n* @property name The tool whose schema was violated.\n* @property path JSON pointer path to the failing field.\n* @property reason Human-readable description of what was expected.\n*/\npublic class SchemaValidation(\npublic val name: String,\npublic val path: String,\npublic val reason: String,\n) : ToolError(\"schema validation failed for tool '$name' at path '$path': $reason\")\n\n/**\n* A tool was registered or invoked with an incorrect tier classification.\n*\n* ANVIL Spec Section 8.1 -- Tool Tier Classification\n*\n* @property name The tool whose tier is mismatched.\n* @property expected The expected tier classification.\n* @property actual The actual tier classification provided.\n*/\npublic class InvalidTier(",
              "documentation": ""
            },
            {
              "name": "public class SchemaValidation(",
              "line": 66,
              "signature": "public class SchemaValidation(\npublic val name: String,\npublic val path: String,\npublic val reason: String,\n) : ToolError(\"schema validation failed for tool '$name' at path '$path': $reason\")\n\n/**\n* A tool was registered or invoked with an incorrect tier classification.\n*\n* ANVIL Spec Section 8.1 -- Tool Tier Classification\n*\n* @property name The tool whose tier is mismatched.\n* @property expected The expected tier classification.\n* @property actual The actual tier classification provided.\n*/\npublic class InvalidTier(\npublic val name: String,\npublic val expected: String,\npublic val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 67,
              "signature": "public val name: String,\npublic val path: String,\npublic val reason: String,\n) : ToolError(\"schema validation failed for tool '$name' at path '$path': $reason\")\n\n/**\n* A tool was registered or invoked with an incorrect tier classification.\n*\n* ANVIL Spec Section 8.1 -- Tool Tier Classification\n*\n* @property name The tool whose tier is mismatched.\n* @property expected The expected tier classification.\n* @property actual The actual tier classification provided.\n*/\npublic class InvalidTier(\npublic val name: String,\npublic val expected: String,\npublic val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*\n* @property reason What went wrong with the registry operation.",
              "documentation": ""
            },
            {
              "name": "public val path: String,",
              "line": 68,
              "signature": "public val path: String,\npublic val reason: String,\n) : ToolError(\"schema validation failed for tool '$name' at path '$path': $reason\")\n\n/**\n* A tool was registered or invoked with an incorrect tier classification.\n*\n* ANVIL Spec Section 8.1 -- Tool Tier Classification\n*\n* @property name The tool whose tier is mismatched.\n* @property expected The expected tier classification.\n* @property actual The actual tier classification provided.\n*/\npublic class InvalidTier(\npublic val name: String,\npublic val expected: String,\npublic val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*\n* @property reason What went wrong with the registry operation.\n*/",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 69,
              "signature": "public val reason: String,\n) : ToolError(\"schema validation failed for tool '$name' at path '$path': $reason\")\n\n/**\n* A tool was registered or invoked with an incorrect tier classification.\n*\n* ANVIL Spec Section 8.1 -- Tool Tier Classification\n*\n* @property name The tool whose tier is mismatched.\n* @property expected The expected tier classification.\n* @property actual The actual tier classification provided.\n*/\npublic class InvalidTier(\npublic val name: String,\npublic val expected: String,\npublic val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*\n* @property reason What went wrong with the registry operation.\n*/\npublic class RegistryError(",
              "documentation": ""
            },
            {
              "name": "public class InvalidTier(",
              "line": 81,
              "signature": "public class InvalidTier(\npublic val name: String,\npublic val expected: String,\npublic val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*\n* @property reason What went wrong with the registry operation.\n*/\npublic class RegistryError(\npublic val reason: String,\n) : ToolError(\"tool registry error: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 82,
              "signature": "public val name: String,\npublic val expected: String,\npublic val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*\n* @property reason What went wrong with the registry operation.\n*/\npublic class RegistryError(\npublic val reason: String,\n) : ToolError(\"tool registry error: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val expected: String,",
              "line": 83,
              "signature": "public val expected: String,\npublic val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*\n* @property reason What went wrong with the registry operation.\n*/\npublic class RegistryError(\npublic val reason: String,\n) : ToolError(\"tool registry error: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val actual: String,",
              "line": 84,
              "signature": "public val actual: String,\n) : ToolError(\n\"tool '$name' has invalid tier: expected $expected, got $actual (see ANVIL Spec SS8.1)\"\n)\n\n/**\n* A registry operation failed (e.g., duplicate registration).\n*\n* @property reason What went wrong with the registry operation.\n*/\npublic class RegistryError(\npublic val reason: String,\n) : ToolError(\"tool registry error: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public class RegistryError(",
              "line": 94,
              "signature": "public class RegistryError(\npublic val reason: String,\n) : ToolError(\"tool registry error: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 95,
              "signature": "public val reason: String,\n) : ToolError(\"tool registry error: $reason\")\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolExecution.kt",
          "sha256": "d02d42a1ca52e95b7e49cd387dc6d6d6babeedabf8336c80e137eedb684e43b6",
          "artifactSha256": "b02e3035fbd020ca4b84590720c26f77ec271d58817833a3062e8c705e9e9356",
          "url": "/reference/source/forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolExecution.kt.txt",
          "declarations": [
            {
              "name": "public interface ToolExecutor",
              "line": 25,
              "signature": "public interface ToolExecutor",
              "documentation": ""
            },
            {
              "name": "public suspend fun execute(call: ToolCall): ToolResult",
              "line": 33,
              "signature": "public suspend fun execute(call: ToolCall): ToolResult\n\n/**\n* Returns the name of the tool this executor handles.\n*/\npublic val name: String\n}\n\n/**\n* A tool executor that wraps a synchronous function.\n*\n* Allows defining simple tools as lambdas without implementing the\n* full [ToolExecutor] interface.\n*\n* @property name The tool name this executor handles.\n* @property handler The synchronous handler function.\n*/\npublic class FnToolExecutor(\noverride val name: String,\nprivate val handler: (ToolCall) -> ToolResult,\n) : ToolExecutor",
              "documentation": ""
            },
            {
              "name": "public val name: String",
              "line": 38,
              "signature": "public val name: String\n}\n\n/**\n* A tool executor that wraps a synchronous function.\n*\n* Allows defining simple tools as lambdas without implementing the\n* full [ToolExecutor] interface.\n*\n* @property name The tool name this executor handles.\n* @property handler The synchronous handler function.\n*/\npublic class FnToolExecutor(\noverride val name: String,\nprivate val handler: (ToolCall) -> ToolResult,\n) : ToolExecutor",
              "documentation": ""
            },
            {
              "name": "public class FnToolExecutor(",
              "line": 50,
              "signature": "public class FnToolExecutor(\noverride val name: String,\nprivate val handler: (ToolCall) -> ToolResult,\n) : ToolExecutor",
              "documentation": ""
            },
            {
              "name": "public suspend fun executeToolCall(",
              "line": 83,
              "signature": "public suspend fun executeToolCall(\ncall: ToolCall,\ndefinition: ToolDefinition,\nexecutor: ToolExecutor,\napprovalHandler: ApprovalHandler,\n): ToolResult",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolTier.kt",
          "sha256": "7c75a2e13679d583208eb37c06bf3f9d31272f5fab201884d4744e5cc9db2dc5",
          "artifactSha256": "0035cd05e53b0161a9997573cedafb8050795c2b278520a17862e134f776501b",
          "url": "/reference/source/forge-kt/forge-tool/src/main/kotlin/com/l1fe/forge/tool/ToolTier.kt.txt",
          "declarations": [
            {
              "name": "public enum class ExecutionContext",
              "line": 24,
              "signature": "public enum class ExecutionContext",
              "documentation": ""
            },
            {
              "name": "public data class TierClassification(",
              "line": 59,
              "signature": "public data class TierClassification(\nval toolName: String,\nval tier: ToolTier,\nval requiresAuthorization: Boolean,\nval executionContext: ExecutionContext,\n)\n\n/**\n* Classifies a tool by its tier, returning authorization requirements\n* and execution context.\n*\n* ANVIL Spec Section 8.1--8.4\n*\n* @param toolName The name of the tool being classified.\n* @param tier The tool's tier classification.\n* @return A [TierClassification] with the tool's requirements.\n*/\npublic fun classifyTier(toolName: String, tier: ToolTier): TierClassification;",
              "documentation": ""
            },
            {
              "name": "public fun classifyTier(toolName: String, tier: ToolTier): TierClassification;",
              "line": 76,
              "signature": "public fun classifyTier(toolName: String, tier: ToolTier): TierClassification;",
              "documentation": ""
            },
            {
              "name": "public fun requiresAuthorization(tier: ToolTier): Boolean;",
              "line": 103,
              "signature": "public fun requiresAuthorization(tier: ToolTier): Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun executionContextFor(tier: ToolTier): ExecutionContext;",
              "line": 111,
              "signature": "public fun executionContextFor(tier: ToolTier): ExecutionContext;",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-health",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-health module.",
      "manifest": "forge-kt/forge-health/build.gradle.kts",
      "manifestSha256": "6b789bafca9ac66a10fbdd087c47c97acdaf14e674292c00410da36dc3e0d3e7",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-health",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/HealthError.kt",
          "sha256": "d46e01c00ba5a8be6c2ba864c24665d7d0d7ab6afe67c910179a8de8aa342ab3",
          "artifactSha256": "be773c0ee06de844129b73191cd9d2ca8f302538610455e1dd08a572bee8e5e7",
          "url": "/reference/source/forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/HealthError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeHealthError(",
              "line": 17,
              "signature": "public sealed class ForgeHealthError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class InvalidTransition(",
              "line": 31,
              "signature": "public class InvalidTransition(\npublic val from: LifecycleState,\npublic val to: LifecycleState,\npublic val validTargets: Set<LifecycleState>,\n) : ForgeHealthError(\n\"invalid lifecycle transition from '$",
              "documentation": ""
            },
            {
              "name": "public val from: LifecycleState,",
              "line": 32,
              "signature": "public val from: LifecycleState,\npublic val to: LifecycleState,\npublic val validTargets: Set<LifecycleState>,\n) : ForgeHealthError(\n\"invalid lifecycle transition from '$",
              "documentation": ""
            },
            {
              "name": "public val to: LifecycleState,",
              "line": 33,
              "signature": "public val to: LifecycleState,\npublic val validTargets: Set<LifecycleState>,\n) : ForgeHealthError(\n\"invalid lifecycle transition from '$",
              "documentation": ""
            },
            {
              "name": "public val validTargets: Set<LifecycleState>,",
              "line": 34,
              "signature": "public val validTargets: Set<LifecycleState>,\n) : ForgeHealthError(\n\"invalid lifecycle transition from '$",
              "documentation": ""
            },
            {
              "name": "public class ThresholdExceeded(",
              "line": 50,
              "signature": "public class ThresholdExceeded(\npublic val metric: String,\npublic val currentValue: Long,\npublic val threshold: Long,\npublic val severity: String,\n) : ForgeHealthError(\n\"health threshold exceeded for metric '$metric': current value $currentValue \" +\n\"exceeds $severity threshold $threshold\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val metric: String,",
              "line": 51,
              "signature": "public val metric: String,\npublic val currentValue: Long,\npublic val threshold: Long,\npublic val severity: String,\n) : ForgeHealthError(\n\"health threshold exceeded for metric '$metric': current value $currentValue \" +\n\"exceeds $severity threshold $threshold\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val currentValue: Long,",
              "line": 52,
              "signature": "public val currentValue: Long,\npublic val threshold: Long,\npublic val severity: String,\n) : ForgeHealthError(\n\"health threshold exceeded for metric '$metric': current value $currentValue \" +\n\"exceeds $severity threshold $threshold\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val threshold: Long,",
              "line": 53,
              "signature": "public val threshold: Long,\npublic val severity: String,\n) : ForgeHealthError(\n\"health threshold exceeded for metric '$metric': current value $currentValue \" +\n\"exceeds $severity threshold $threshold\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val severity: String,",
              "line": 54,
              "signature": "public val severity: String,\n) : ForgeHealthError(\n\"health threshold exceeded for metric '$metric': current value $currentValue \" +\n\"exceeds $severity threshold $threshold\"\n)\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/HealthMonitor.kt",
          "sha256": "524d7e2f2254e7f56c0b25f60bc05724dc0664cf157c0cbb8f8e69952b479129",
          "artifactSha256": "bc2eb95a11e806eca28f6aa54c459068fc587d0ebc654e482b50c00dfe70425f",
          "url": "/reference/source/forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/HealthMonitor.kt.txt",
          "declarations": [
            {
              "name": "public enum class HealthStatus",
              "line": 21,
              "signature": "public enum class HealthStatus",
              "documentation": ""
            },
            {
              "name": "public data class MetricThreshold(",
              "line": 42,
              "signature": "public data class MetricThreshold(\n@SerialName(\"degraded_threshold\")\nval degradedThreshold: Long,\n@SerialName(\"critical_threshold\")\nval criticalThreshold: Long,\n)",
              "documentation": ""
            },
            {
              "name": "public data class HealthMonitorConfig(",
              "line": 68,
              "signature": "public data class HealthMonitorConfig(\n@SerialName(\"error_count\")\nval errorCountThreshold: MetricThreshold?;",
              "documentation": ""
            },
            {
              "name": "public val DEFAULT: HealthMonitorConfig;",
              "line": 85,
              "signature": "public val DEFAULT: HealthMonitorConfig;",
              "documentation": ""
            },
            {
              "name": "public data class HealthCheckResult(",
              "line": 106,
              "signature": "public data class HealthCheckResult(\nval status: HealthStatus,\nval details: List<MetricDetail>,\nval snapshot: HealthProfileSnapshot,\n)\n\n/**\n* Status detail for a single metric.\n*\n* @property metric The metric name.\n* @property currentValue The current value.\n* @property status The status for this metric.\n*/\n@Serializable\npublic data class MetricDetail(\nval metric: String,\n@SerialName(\"current_value\")\nval currentValue: Long,\nval status: HealthStatus,\n)\n\n/**\n* Monitors a [HealthProfile] against configurable thresholds.\n*\n* ANVIL Spec Section 5.3\n*",
              "documentation": ""
            },
            {
              "name": "public data class MetricDetail(",
              "line": 120,
              "signature": "public data class MetricDetail(\nval metric: String,\n@SerialName(\"current_value\")\nval currentValue: Long,\nval status: HealthStatus,\n)\n\n/**\n* Monitors a [HealthProfile] against configurable thresholds.\n*\n* ANVIL Spec Section 5.3\n*\n* @param config The threshold configuration.\n*/\npublic class HealthMonitor(\nprivate val config: HealthMonitorConfig;",
              "documentation": ""
            },
            {
              "name": "public class HealthMonitor(",
              "line": 134,
              "signature": "public class HealthMonitor(\nprivate val config: HealthMonitorConfig;",
              "documentation": ""
            },
            {
              "name": "public fun check(profile: HealthProfile): HealthCheckResult",
              "line": 147,
              "signature": "public fun check(profile: HealthProfile): HealthCheckResult",
              "documentation": ""
            },
            {
              "name": "public fun status(profile: HealthProfile): HealthStatus;",
              "line": 183,
              "signature": "public fun status(profile: HealthProfile): HealthStatus;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/HealthProfile.kt",
          "sha256": "2ebc8489d6018e0eb81668c693a74ff8e07ec11d2b3c9e2b2c91942feb017a01",
          "artifactSha256": "1a086dddbc40cff7d3739f21f32558a751e0bd27f479e15626cf790f4fc2dd46",
          "url": "/reference/source/forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/HealthProfile.kt.txt",
          "declarations": [
            {
              "name": "public data class HealthProfileSnapshot(",
              "line": 39,
              "signature": "public data class HealthProfileSnapshot(\n@SerialName(\"inference_count\")\nval inferenceCount: Long,\n@SerialName(\"total_tokens\")\nval totalTokens: Long,\n@SerialName(\"tool_invocations\")\nval toolInvocations: Long,\n@SerialName(\"error_count\")\nval errorCount: Int,\n@SerialName(\"uptime_ms\")\nval uptimeMs: Long,\n@SerialName(\"active_tasks\")\nval activeTasks: Int,\n@SerialName(\"completed_tasks\")\nval completedTasks: Long,\n@SerialName(\"error_rate\")\nval errorRate: Double,\n@SerialName(\"avg_latency_ms\")\nval avgLatencyMs: Double,\n@SerialName(\"tool_success_rate\")\nval toolSuccessRate: Double,\n@SerialName(\"generation_success_rate\")\nval generationSuccessRate: Double,\nval timestamp: Timestamp,\n)\n",
              "documentation": ""
            },
            {
              "name": "public class HealthProfile",
              "line": 74,
              "signature": "public class HealthProfile",
              "documentation": ""
            },
            {
              "name": "public fun recordInference(tokens: Long)",
              "line": 94,
              "signature": "public fun recordInference(tokens: Long)",
              "documentation": ""
            },
            {
              "name": "public fun recordToolInvocation(success: Boolean;",
              "line": 105,
              "signature": "public fun recordToolInvocation(success: Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun recordGeneration(success: Boolean;",
              "line": 120,
              "signature": "public fun recordGeneration(success: Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun recordError()",
              "line": 130,
              "signature": "public fun recordError()",
              "documentation": ""
            },
            {
              "name": "public fun recordLatency(latencyMs: Long)",
              "line": 141,
              "signature": "public fun recordLatency(latencyMs: Long)",
              "documentation": ""
            },
            {
              "name": "public fun taskStarted()",
              "line": 151,
              "signature": "public fun taskStarted()",
              "documentation": ""
            },
            {
              "name": "public fun taskCompleted()",
              "line": 160,
              "signature": "public fun taskCompleted()",
              "documentation": ""
            },
            {
              "name": "public fun getInferenceCount(): Long;",
              "line": 168,
              "signature": "public fun getInferenceCount(): Long;",
              "documentation": ""
            },
            {
              "name": "public fun getTotalTokens(): Long;",
              "line": 173,
              "signature": "public fun getTotalTokens(): Long;",
              "documentation": ""
            },
            {
              "name": "public fun getToolInvocations(): Long;",
              "line": 178,
              "signature": "public fun getToolInvocations(): Long;",
              "documentation": ""
            },
            {
              "name": "public fun getErrorCount(): Int;",
              "line": 183,
              "signature": "public fun getErrorCount(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun getUptimeMs(): Long;",
              "line": 188,
              "signature": "public fun getUptimeMs(): Long;",
              "documentation": ""
            },
            {
              "name": "public fun getActiveTasks(): Int;",
              "line": 195,
              "signature": "public fun getActiveTasks(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun getCompletedTasks(): Long;",
              "line": 202,
              "signature": "public fun getCompletedTasks(): Long;",
              "documentation": ""
            },
            {
              "name": "public fun getErrorRate(): Double",
              "line": 211,
              "signature": "public fun getErrorRate(): Double",
              "documentation": ""
            },
            {
              "name": "public fun getAvgLatencyMs(): Double",
              "line": 223,
              "signature": "public fun getAvgLatencyMs(): Double",
              "documentation": ""
            },
            {
              "name": "public fun getToolSuccessRate(): Double",
              "line": 235,
              "signature": "public fun getToolSuccessRate(): Double",
              "documentation": ""
            },
            {
              "name": "public fun getGenerationSuccessRate(): Double",
              "line": 247,
              "signature": "public fun getGenerationSuccessRate(): Double",
              "documentation": ""
            },
            {
              "name": "public fun snapshot(): HealthProfileSnapshot;",
              "line": 257,
              "signature": "public fun snapshot(): HealthProfileSnapshot;",
              "documentation": ""
            },
            {
              "name": "public fun reset()",
              "line": 277,
              "signature": "public fun reset()",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/LifecycleManager.kt",
          "sha256": "1b0a868082a886ae6a1a3f7686c27a7f5fb18255c8352c523fa7f532604dc95a",
          "artifactSha256": "34c3bc03065bcb84501610d47097fa01555817eb9f1fbba0d880758428eb4600",
          "url": "/reference/source/forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/LifecycleManager.kt.txt",
          "declarations": [
            {
              "name": "public data class LifecycleEvent(",
              "line": 29,
              "signature": "public data class LifecycleEvent(\nval from: LifecycleState,\nval to: LifecycleState,\nval reason: String,\nval timestamp: Timestamp,\n)\n\n/**\n* Listener interface for lifecycle transition events.\n*\n* Implement this to react to agent lifecycle changes (e.g., logging,\n* telemetry, audit trail entries).\n*/\npublic fun interface LifecycleListener",
              "documentation": ""
            },
            {
              "name": "public fun interface LifecycleListener",
              "line": 42,
              "signature": "public fun interface LifecycleListener",
              "documentation": ""
            },
            {
              "name": "public fun onTransition(event: LifecycleEvent)",
              "line": 48,
              "signature": "public fun onTransition(event: LifecycleEvent)\n}\n\n/**\n* Manages the lifecycle state machine for an agent.\n*\n* Thread-safe. All state reads and transitions are synchronized.\n* The manager starts in the [LifecycleState.INITIALIZING] state,\n* which is the initial state for all agents per ANVIL Spec Section 13.2.\n*\n* ANVIL Spec Section 13.2\n*\n* @param listener Optional listener for transition events.\n*/\npublic class LifecycleManager(\nprivate val listener: LifecycleListener?;",
              "documentation": ""
            },
            {
              "name": "public class LifecycleManager(",
              "line": 62,
              "signature": "public class LifecycleManager(\nprivate val listener: LifecycleListener?;",
              "documentation": ""
            },
            {
              "name": "public val currentState: LifecycleState",
              "line": 72,
              "signature": "public val currentState: LifecycleState\nget();",
              "documentation": ""
            },
            {
              "name": "public val transitionHistory: List<LifecycleEvent>",
              "line": 78,
              "signature": "public val transitionHistory: List<LifecycleEvent>\nget();",
              "documentation": ""
            },
            {
              "name": "public fun transition(to: LifecycleState, reason: String)",
              "line": 93,
              "signature": "public fun transition(to: LifecycleState, reason: String)",
              "documentation": ""
            },
            {
              "name": "public fun tryTransition(to: LifecycleState, reason: String): Boolean",
              "line": 124,
              "signature": "public fun tryTransition(to: LifecycleState, reason: String): Boolean",
              "documentation": ""
            },
            {
              "name": "public val isTerminal: Boolean",
              "line": 136,
              "signature": "public val isTerminal: Boolean\nget();",
              "documentation": ""
            },
            {
              "name": "public val isOperational: Boolean",
              "line": 144,
              "signature": "public val isOperational: Boolean\nget();",
              "documentation": ""
            },
            {
              "name": "public val validTargets: Set<LifecycleState>",
              "line": 150,
              "signature": "public val validTargets: Set<LifecycleState>\nget();",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/LifecycleState.kt",
          "sha256": "e8a34c39e021765b3ba3b2b2046f8d748581ae681d6c14e56a22aa1fac5b7870",
          "artifactSha256": "ab9e87c278a0fb16e32b00a1c3c357cb458818af8ba3780fb7a342a5121ce7f1",
          "url": "/reference/source/forge-kt/forge-health/src/main/kotlin/com/l1fe/forge/health/LifecycleState.kt.txt",
          "declarations": [
            {
              "name": "public enum class LifecycleState(public val value: String)",
              "line": 31,
              "signature": "public enum class LifecycleState(public val value: String)",
              "documentation": ""
            },
            {
              "name": "public fun isTerminal(): Boolean;",
              "line": 88,
              "signature": "public fun isTerminal(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun isOperational(): Boolean;",
              "line": 97,
              "signature": "public fun isOperational(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public val VALID_TRANSITIONS: Map<LifecycleState, Set<LifecycleState>>;",
              "line": 117,
              "signature": "public val VALID_TRANSITIONS: Map<LifecycleState, Set<LifecycleState>>;",
              "documentation": ""
            },
            {
              "name": "public fun validTargets(from: LifecycleState): Set<LifecycleState> =",
              "line": 132,
              "signature": "public fun validTargets(from: LifecycleState): Set<LifecycleState> =",
              "documentation": ""
            },
            {
              "name": "public fun isValidTransition(from: LifecycleState, to: LifecycleState): Boolean =",
              "line": 142,
              "signature": "public fun isValidTransition(from: LifecycleState, to: LifecycleState): Boolean =",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-agent",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-agent module.",
      "manifest": "forge-kt/forge-agent/build.gradle.kts",
      "manifestSha256": "f4544ece38cee2901527b0188d050f9263c344e449c8f28555e1e3636032f696",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-agent",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/Agent.kt",
          "sha256": "940f6972a8fd4e98d8e5a0c1dee09241c7fe29e681b141b5dbf3534895e1e6a0",
          "artifactSha256": "bf3077b4efa3932d544a516d0303587f1f1828ffdcab0af94ba9cb42569a1a7f",
          "url": "/reference/source/forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/Agent.kt.txt",
          "declarations": [
            {
              "name": "public data class AgentConfig(",
              "line": 42,
              "signature": "public data class AgentConfig(\nval name: String,\nval model: LanguageModel,\nval tools: List<ToolDefinition>;",
              "documentation": ""
            },
            {
              "name": "public data class AgentSummary(",
              "line": 63,
              "signature": "public data class AgentSummary(\nval name: String,\nval state: LifecycleState,\nval healthStatus: HealthStatus,\n)\n\n/**\n* An agent that wraps the ANVIL tool loop with lifecycle management.\n*\n* Manages the full lifecycle per ANVIL Spec Section 13.2:\n* Initializing -> Ready -> Running -> Ready (idle) or Terminated.\n* The agent must be initialized before running, and can be terminated\n* when no longer needed.\n*\n* ANVIL Spec Section 10.2\n*\n* @param config The agent configuration.\n*/\npublic class ToolLoopAgent(\nprivate val config: AgentConfig,\n)",
              "documentation": ""
            },
            {
              "name": "public class ToolLoopAgent(",
              "line": 81,
              "signature": "public class ToolLoopAgent(\nprivate val config: AgentConfig,\n)",
              "documentation": ""
            },
            {
              "name": "public val name: String get();",
              "line": 89,
              "signature": "public val name: String get();",
              "documentation": ""
            },
            {
              "name": "public val state: LifecycleState get();",
              "line": 92,
              "signature": "public val state: LifecycleState get();",
              "documentation": ""
            },
            {
              "name": "public val health: HealthProfile get();",
              "line": 95,
              "signature": "public val health: HealthProfile get();",
              "documentation": ""
            },
            {
              "name": "public fun initialize()",
              "line": 106,
              "signature": "public fun initialize()",
              "documentation": ""
            },
            {
              "name": "public suspend fun run(",
              "line": 125,
              "signature": "public suspend fun run(\nmessages: List<ModelMessage>,\nadditionalStopConditions: List<StopCondition>;",
              "documentation": ""
            },
            {
              "name": "public fun pause()",
              "line": 171,
              "signature": "public fun pause()",
              "documentation": ""
            },
            {
              "name": "public fun resume()",
              "line": 184,
              "signature": "public fun resume()",
              "documentation": ""
            },
            {
              "name": "public fun terminate(reason: String;",
              "line": 198,
              "signature": "public fun terminate(reason: String;",
              "documentation": ""
            },
            {
              "name": "public fun summary(): AgentSummary;",
              "line": 207,
              "signature": "public fun summary(): AgentSummary;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/AgentError.kt",
          "sha256": "c85a5cad949c74af1f7984d174d2eed0e01a895e4fdf5a6f693225714668432b",
          "artifactSha256": "81b650d983905f7447068355bd93bd41185e1e7ae4854174b4c5fa26085734e8",
          "url": "/reference/source/forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/AgentError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeAgentError(",
              "line": 18,
              "signature": "public sealed class ForgeAgentError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class MaxIterationsExceeded(",
              "line": 31,
              "signature": "public class MaxIterationsExceeded(\npublic val maxIterations: Int,\npublic val completedIterations: Int,\n) : ForgeAgentError(\n\"tool loop exceeded maximum iterations: completed $completedIterations \" +\n\"of $maxIterations allowed (see ANVIL Spec SS10.1)\"\n)\n\n/**\n* The tool loop exceeded the maximum total token budget.\n*\n* @property maxTokens The configured maximum token budget.\n* @property consumedTokens The number of tokens consumed before the limit.\n*/\npublic class MaxTokensExceeded(\npublic val maxTokens: Long,\npublic val consumedTokens: Long,\n) : ForgeAgentError(\n\"tool loop exceeded maximum token budget: consumed $consumedTokens \" +\n\"tokens of $maxTokens allowed\"\n)\n\n/**\n* A tool referenced by the model was not found in the registry.\n*\n* @property toolName The name of the tool that was not found.",
              "documentation": ""
            },
            {
              "name": "public val maxIterations: Int,",
              "line": 32,
              "signature": "public val maxIterations: Int,\npublic val completedIterations: Int,\n) : ForgeAgentError(\n\"tool loop exceeded maximum iterations: completed $completedIterations \" +\n\"of $maxIterations allowed (see ANVIL Spec SS10.1)\"\n)\n\n/**\n* The tool loop exceeded the maximum total token budget.\n*\n* @property maxTokens The configured maximum token budget.\n* @property consumedTokens The number of tokens consumed before the limit.\n*/\npublic class MaxTokensExceeded(\npublic val maxTokens: Long,\npublic val consumedTokens: Long,\n) : ForgeAgentError(\n\"tool loop exceeded maximum token budget: consumed $consumedTokens \" +\n\"tokens of $maxTokens allowed\"\n)\n\n/**\n* A tool referenced by the model was not found in the registry.\n*\n* @property toolName The name of the tool that was not found.\n* @property available The list of registered tool names.",
              "documentation": ""
            },
            {
              "name": "public val completedIterations: Int,",
              "line": 33,
              "signature": "public val completedIterations: Int,\n) : ForgeAgentError(\n\"tool loop exceeded maximum iterations: completed $completedIterations \" +\n\"of $maxIterations allowed (see ANVIL Spec SS10.1)\"\n)\n\n/**\n* The tool loop exceeded the maximum total token budget.\n*\n* @property maxTokens The configured maximum token budget.\n* @property consumedTokens The number of tokens consumed before the limit.\n*/\npublic class MaxTokensExceeded(\npublic val maxTokens: Long,\npublic val consumedTokens: Long,\n) : ForgeAgentError(\n\"tool loop exceeded maximum token budget: consumed $consumedTokens \" +\n\"tokens of $maxTokens allowed\"\n)\n\n/**\n* A tool referenced by the model was not found in the registry.\n*\n* @property toolName The name of the tool that was not found.\n* @property available The list of registered tool names.\n*/",
              "documentation": ""
            },
            {
              "name": "public class MaxTokensExceeded(",
              "line": 45,
              "signature": "public class MaxTokensExceeded(\npublic val maxTokens: Long,\npublic val consumedTokens: Long,\n) : ForgeAgentError(\n\"tool loop exceeded maximum token budget: consumed $consumedTokens \" +\n\"tokens of $maxTokens allowed\"\n)\n\n/**\n* A tool referenced by the model was not found in the registry.\n*\n* @property toolName The name of the tool that was not found.\n* @property available The list of registered tool names.\n*/\npublic class ToolNotFound(\npublic val toolName: String,\npublic val available: List<String>,\n) : ForgeAgentError(\n\"tool '$toolName' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public val maxTokens: Long,",
              "line": 46,
              "signature": "public val maxTokens: Long,\npublic val consumedTokens: Long,\n) : ForgeAgentError(\n\"tool loop exceeded maximum token budget: consumed $consumedTokens \" +\n\"tokens of $maxTokens allowed\"\n)\n\n/**\n* A tool referenced by the model was not found in the registry.\n*\n* @property toolName The name of the tool that was not found.\n* @property available The list of registered tool names.\n*/\npublic class ToolNotFound(\npublic val toolName: String,\npublic val available: List<String>,\n) : ForgeAgentError(\n\"tool '$toolName' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public val consumedTokens: Long,",
              "line": 47,
              "signature": "public val consumedTokens: Long,\n) : ForgeAgentError(\n\"tool loop exceeded maximum token budget: consumed $consumedTokens \" +\n\"tokens of $maxTokens allowed\"\n)\n\n/**\n* A tool referenced by the model was not found in the registry.\n*\n* @property toolName The name of the tool that was not found.\n* @property available The list of registered tool names.\n*/\npublic class ToolNotFound(\npublic val toolName: String,\npublic val available: List<String>,\n) : ForgeAgentError(\n\"tool '$toolName' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public class ToolNotFound(",
              "line": 59,
              "signature": "public class ToolNotFound(\npublic val toolName: String,\npublic val available: List<String>,\n) : ForgeAgentError(\n\"tool '$toolName' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public val toolName: String,",
              "line": 60,
              "signature": "public val toolName: String,\npublic val available: List<String>,\n) : ForgeAgentError(\n\"tool '$toolName' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public val available: List<String>,",
              "line": 61,
              "signature": "public val available: List<String>,\n) : ForgeAgentError(\n\"tool '$toolName' not found in registry; \" +",
              "documentation": ""
            },
            {
              "name": "public class ToolExecutionFailed(",
              "line": 73,
              "signature": "public class ToolExecutionFailed(\npublic val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val toolName: String,",
              "line": 74,
              "signature": "public val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 75,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ModelError(",
              "line": 84,
              "signature": "public class ModelError(\npublic val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val detail: String,",
              "line": 85,
              "signature": "public val detail: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class InvalidState(",
              "line": 95,
              "signature": "public class InvalidState(\npublic val currentState: String,\npublic val requiredState: String,\n) : ForgeAgentError(\n\"agent is in state '$currentState' but must be in '$requiredState' to perform this operation\"\n)\n\n/**\n* A workflow step failed.\n*\n* @property stepIndex The index of the failed step.\n* @property stepName The name of the failed step (if available).\n* @property reason The failure reason.\n*/\npublic class WorkflowStepFailed(\npublic val stepIndex: Int,\npublic val stepName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val currentState: String,",
              "line": 96,
              "signature": "public val currentState: String,\npublic val requiredState: String,\n) : ForgeAgentError(\n\"agent is in state '$currentState' but must be in '$requiredState' to perform this operation\"\n)\n\n/**\n* A workflow step failed.\n*\n* @property stepIndex The index of the failed step.\n* @property stepName The name of the failed step (if available).\n* @property reason The failure reason.\n*/\npublic class WorkflowStepFailed(\npublic val stepIndex: Int,\npublic val stepName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val requiredState: String,",
              "line": 97,
              "signature": "public val requiredState: String,\n) : ForgeAgentError(\n\"agent is in state '$currentState' but must be in '$requiredState' to perform this operation\"\n)\n\n/**\n* A workflow step failed.\n*\n* @property stepIndex The index of the failed step.\n* @property stepName The name of the failed step (if available).\n* @property reason The failure reason.\n*/\npublic class WorkflowStepFailed(\npublic val stepIndex: Int,\npublic val stepName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class WorkflowStepFailed(",
              "line": 109,
              "signature": "public class WorkflowStepFailed(\npublic val stepIndex: Int,\npublic val stepName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val stepIndex: Int,",
              "line": 110,
              "signature": "public val stepIndex: Int,\npublic val stepName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val stepName: String,",
              "line": 111,
              "signature": "public val stepName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 112,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class DelegationFailed(",
              "line": 125,
              "signature": "public class DelegationFailed(\npublic val parentDid: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val parentDid: String,",
              "line": 126,
              "signature": "public val parentDid: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 127,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class MessagingError(",
              "line": 140,
              "signature": "public class MessagingError(\npublic val channelId: String,\npublic val reason: String,\n) : ForgeAgentError(\"messaging error on channel '$channelId': $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val channelId: String,",
              "line": 141,
              "signature": "public val channelId: String,\npublic val reason: String,\n) : ForgeAgentError(\"messaging error on channel '$channelId': $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 142,
              "signature": "public val reason: String,\n) : ForgeAgentError(\"messaging error on channel '$channelId': $reason\")\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/LoopControl.kt",
          "sha256": "86d3e47502db31a78448383da401fd0edbb6439871bcaa272e975e6a765ae2d2",
          "artifactSha256": "9bd95341c4f05d386c3edacd1ac1f4042fe75b4d7bc62c77effb2000fa2c40ce",
          "url": "/reference/source/forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/LoopControl.kt.txt",
          "declarations": [
            {
              "name": "public enum class AgentStopReason",
              "line": 21,
              "signature": "public enum class AgentStopReason",
              "documentation": ""
            },
            {
              "name": "public fun interface StopCondition",
              "line": 55,
              "signature": "public fun interface StopCondition",
              "documentation": ""
            },
            {
              "name": "public fun evaluate(context: LoopContext): StopDecision",
              "line": 63,
              "signature": "public fun evaluate(context: LoopContext): StopDecision\n}\n\n/**\n* The decision from a [StopCondition] evaluation.\n*\n* @property shouldStop Whether the loop should stop.\n* @property reason The stop reason (only meaningful if [shouldStop] is `true`).\n* @property detail A human-readable detail message.\n*/\npublic data class StopDecision(\nval shouldStop: Boolean,\nval reason: AgentStopReason,\nval detail: String;",
              "documentation": ""
            },
            {
              "name": "public data class StopDecision(",
              "line": 73,
              "signature": "public data class StopDecision(\nval shouldStop: Boolean,\nval reason: AgentStopReason,\nval detail: String;",
              "documentation": ""
            },
            {
              "name": "public fun continueLoop(): StopDecision =",
              "line": 80,
              "signature": "public fun continueLoop(): StopDecision =",
              "documentation": ""
            },
            {
              "name": "public fun stop(reason: AgentStopReason, detail: String;",
              "line": 84,
              "signature": "public fun stop(reason: AgentStopReason, detail: String;",
              "documentation": ""
            },
            {
              "name": "public data class LoopContext(",
              "line": 97,
              "signature": "public data class LoopContext(\nval iteration: Int,\nval totalTokens: Long,\nval lastFinishReason: FinishReason?,\nval terminated: Boolean;",
              "documentation": ""
            },
            {
              "name": "public fun maxIterations(max: Int): StopCondition;",
              "line": 110,
              "signature": "public fun maxIterations(max: Int): StopCondition;",
              "documentation": ""
            },
            {
              "name": "public fun maxTotalTokens(max: Long): StopCondition;",
              "line": 127,
              "signature": "public fun maxTotalTokens(max: Long): StopCondition;",
              "documentation": ""
            },
            {
              "name": "public fun modelStopsNaturally(): StopCondition;",
              "line": 147,
              "signature": "public fun modelStopsNaturally(): StopCondition;",
              "documentation": ""
            },
            {
              "name": "public fun evaluateStopConditions(",
              "line": 169,
              "signature": "public fun evaluateStopConditions(\nconditions: List<StopCondition>,\ncontext: LoopContext,\n): StopDecision",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/Messaging.kt",
          "sha256": "e584137b86d6282fcab707a5672b817514bf0617a05c753625a2706cfed4fa47",
          "artifactSha256": "0e8d6c7d4a032fb32e1b62a6d443dc69626edfa7302cd256903c906ff3e6c317",
          "url": "/reference/source/forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/Messaging.kt.txt",
          "declarations": [
            {
              "name": "public data class AgentMessage<T>(",
              "line": 22,
              "signature": "public data class AgentMessage<T>(\nval senderId: String,\nval recipientId: String,\nval payload: T,\nval correlationId: String?;",
              "documentation": ""
            },
            {
              "name": "public class AgentChannel<T>(",
              "line": 41,
              "signature": "public class AgentChannel<T>(\npublic val channelId: String,\ncapacity: Int;",
              "documentation": ""
            },
            {
              "name": "public val channelId: String,",
              "line": 42,
              "signature": "public val channelId: String,\ncapacity: Int;",
              "documentation": ""
            },
            {
              "name": "public suspend fun send(message: AgentMessage<T>)",
              "line": 55,
              "signature": "public suspend fun send(message: AgentMessage<T>)",
              "documentation": ""
            },
            {
              "name": "public suspend fun receive(): AgentMessage<T>",
              "line": 74,
              "signature": "public suspend fun receive(): AgentMessage<T>",
              "documentation": ""
            },
            {
              "name": "public suspend fun receiveOrNull(timeoutMs: Long): AgentMessage<T>?",
              "line": 91,
              "signature": "public suspend fun receiveOrNull(timeoutMs: Long): AgentMessage<T>?",
              "documentation": ""
            },
            {
              "name": "public fun trySend(message: AgentMessage<T>): Boolean",
              "line": 103,
              "signature": "public fun trySend(message: AgentMessage<T>): Boolean",
              "documentation": ""
            },
            {
              "name": "public fun tryReceive(): AgentMessage<T>?",
              "line": 112,
              "signature": "public fun tryReceive(): AgentMessage<T>?",
              "documentation": ""
            },
            {
              "name": "public fun close()",
              "line": 122,
              "signature": "public fun close()",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/SubAgent.kt",
          "sha256": "85a8ee799d2ea914ebfc3967e4a397902fea5f69b3f7295d81273a0eed8b1940",
          "artifactSha256": "08b32cef2643efa40fbfbb526f18f1ff28265a20b015624ee30f076557c21b38",
          "url": "/reference/source/forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/SubAgent.kt.txt",
          "declarations": [
            {
              "name": "public data class SubAgentConfig(",
              "line": 34,
              "signature": "public data class SubAgentConfig(\nval name: String,\nval model: LanguageModel,\nval tools: List<ToolDefinition>;",
              "documentation": ""
            },
            {
              "name": "public fun createSubAgent(",
              "line": 60,
              "signature": "public fun createSubAgent(\nparent: ToolLoopAgent,\nconfig: SubAgentConfig,\n): ToolLoopAgent",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/ToolLoop.kt",
          "sha256": "41bb32ed8314cfec483fcd4e2b8aec87e81028268a70d1372e8a82cc085a8c33",
          "artifactSha256": "8150e5b4acf17d16c1cecdd9fb33523fa8c6a2a91c8dd97abced0a88f70b0efe",
          "url": "/reference/source/forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/ToolLoop.kt.txt",
          "declarations": [
            {
              "name": "public data class ToolLoopConfig(",
              "line": 42,
              "signature": "public data class ToolLoopConfig(\nval maxIterations: Int;",
              "documentation": ""
            },
            {
              "name": "public data class ToolLoopIteration(",
              "line": 58,
              "signature": "public data class ToolLoopIteration(\nval iteration: Int,\nval modelResult: GenerateResult,\nval toolResults: List<ToolResult>,\n)\n\n/**\n* The complete output of a tool loop execution.\n*\n* @property iterations The list of iterations executed.\n* @property stopReason Why the tool loop stopped.\n* @property totalUsage Cumulative token usage across all iterations.\n* @property finalMessage The final model response message.\n*/\npublic data class ToolLoopOutput(\nval iterations: List<ToolLoopIteration>,\nval stopReason: AgentStopReason,\nval totalUsage: Usage,\nval finalMessage: ModelMessage?,\n)",
              "documentation": ""
            },
            {
              "name": "public data class ToolLoopOutput(",
              "line": 72,
              "signature": "public data class ToolLoopOutput(\nval iterations: List<ToolLoopIteration>,\nval stopReason: AgentStopReason,\nval totalUsage: Usage,\nval finalMessage: ModelMessage?,\n)",
              "documentation": ""
            },
            {
              "name": "public fun text(): String?;",
              "line": 83,
              "signature": "public fun text(): String?;",
              "documentation": ""
            },
            {
              "name": "public val iterationCount: Int get();",
              "line": 88,
              "signature": "public val iterationCount: Int get();",
              "documentation": ""
            },
            {
              "name": "public suspend fun runToolLoop(",
              "line": 114,
              "signature": "public suspend fun runToolLoop(\nmodel: LanguageModel,\nmessages: List<ModelMessage>,\ntools: List<ToolDefinition>,\nexecutors: Map<String, ToolExecutor>,\nconfig: ToolLoopConfig;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/Workflow.kt",
          "sha256": "251296eeb2c0af25b695dada18b4995d683ee924722691cd227ac7c50e1b1cce",
          "artifactSha256": "24523d9addee69d1398c848ee3aa677320b19eff58ec0724e1feed0921b3db70",
          "url": "/reference/source/forge-kt/forge-agent/src/main/kotlin/com/l1fe/forge/agent/Workflow.kt.txt",
          "declarations": [
            {
              "name": "public data class WorkflowStep<T>(",
              "line": 21,
              "signature": "public data class WorkflowStep<T>(\nval name: String,\nval execute: suspend (T) -> T,\n)\n\n/**\n* A sequential workflow that executes steps in order.\n*\n* Each step receives the output of the previous step. If any step\n* fails, the workflow fails at that point.\n*\n* ANVIL Spec Section 10.3.1 -- Sequential Workflow\n*\n* @param T The type flowing through the workflow steps.\n* @property name A human-readable name for the workflow.\n* @property steps The ordered list of steps.\n*/\npublic class SequentialWorkflow<T>(\npublic val name: String,\nprivate val steps: List<WorkflowStep<T>>,\n)",
              "documentation": ""
            },
            {
              "name": "public class SequentialWorkflow<T>(",
              "line": 38,
              "signature": "public class SequentialWorkflow<T>(\npublic val name: String,\nprivate val steps: List<WorkflowStep<T>>,\n)",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 39,
              "signature": "public val name: String,\nprivate val steps: List<WorkflowStep<T>>,\n)",
              "documentation": ""
            },
            {
              "name": "public suspend fun execute(input: T): T",
              "line": 50,
              "signature": "public suspend fun execute(input: T): T",
              "documentation": ""
            },
            {
              "name": "public val stepCount: Int get();",
              "line": 70,
              "signature": "public val stepCount: Int get();",
              "documentation": ""
            },
            {
              "name": "public class ParallelWorkflow<I, O>(",
              "line": 86,
              "signature": "public class ParallelWorkflow<I, O>(\npublic val name: String,\nprivate val steps: List<ParallelStep<I, O>>,\n)",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 87,
              "signature": "public val name: String,\nprivate val steps: List<ParallelStep<I, O>>,\n)",
              "documentation": ""
            },
            {
              "name": "public suspend fun execute(input: I): List<O>;",
              "line": 98,
              "signature": "public suspend fun execute(input: I): List<O>;",
              "documentation": ""
            },
            {
              "name": "public val stepCount: Int get();",
              "line": 116,
              "signature": "public val stepCount: Int get();",
              "documentation": ""
            },
            {
              "name": "public data class ParallelStep<I, O>(",
              "line": 127,
              "signature": "public data class ParallelStep<I, O>(\nval name: String,\nval execute: suspend (I) -> O,\n)\n\n/**\n* A router workflow that selects a branch based on the input.\n*\n* The router function examines the input and returns a branch key.\n* The corresponding step is then executed.\n*\n* ANVIL Spec Section 10.3.3 -- Router Workflow\n*\n* @param T The type flowing through the workflow.\n* @property name A human-readable name for the workflow.\n* @property router A function that selects a branch key from the input.\n* @property branches A map of branch key to workflow step.\n* @property fallback An optional default step if no branch matches.\n*/\npublic class RouterWorkflow<T>(\npublic val name: String,\nprivate val router: suspend (T) -> String,\nprivate val branches: Map<String, WorkflowStep<T>>,\nprivate val fallback: WorkflowStep<T>?;",
              "documentation": ""
            },
            {
              "name": "public class RouterWorkflow<T>(",
              "line": 146,
              "signature": "public class RouterWorkflow<T>(\npublic val name: String,\nprivate val router: suspend (T) -> String,\nprivate val branches: Map<String, WorkflowStep<T>>,\nprivate val fallback: WorkflowStep<T>?;",
              "documentation": ""
            },
            {
              "name": "public val name: String,",
              "line": 147,
              "signature": "public val name: String,\nprivate val router: suspend (T) -> String,\nprivate val branches: Map<String, WorkflowStep<T>>,\nprivate val fallback: WorkflowStep<T>?;",
              "documentation": ""
            },
            {
              "name": "public suspend fun execute(input: T): T",
              "line": 160,
              "signature": "public suspend fun execute(input: T): T",
              "documentation": ""
            },
            {
              "name": "public val branchCount: Int get();",
              "line": 195,
              "signature": "public val branchCount: Int get();",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-embed",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-embed module.",
      "manifest": "forge-kt/forge-embed/build.gradle.kts",
      "manifestSha256": "9a22b37276939ccd154f2971c677adc84aa2e87503cc613d6cc78d3de774500a",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-embed",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Chunking.kt",
          "sha256": "34c12f426c23b230f05843a3857a994ccc7c868ed7e1c14579af2dc16c790bc4",
          "artifactSha256": "8eca95c0f22dcb030a413a87b68498f6474da85cc33104e48a541cc91dd5f74d",
          "url": "/reference/source/forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Chunking.kt.txt",
          "declarations": [
            {
              "name": "public data class TextChunk(",
              "line": 19,
              "signature": "public data class TextChunk(\nval text: String,\nval index: Int,\nval startOffset: Int,\n)\n\n/**\n* Interface for text splitting strategies.\n*\n* ANVIL Spec Section 9.5\n*/\npublic interface TextSplitter",
              "documentation": ""
            },
            {
              "name": "public interface TextSplitter",
              "line": 30,
              "signature": "public interface TextSplitter",
              "documentation": ""
            },
            {
              "name": "public fun split(text: String): List<TextChunk>",
              "line": 38,
              "signature": "public fun split(text: String): List<TextChunk>\n}\n\n/**\n* A recursive character text splitter.\n*\n* Splits text by trying separators in order: double newline, single newline,\n* sentence-ending punctuation, space, and finally individual characters.\n* Each chunk has a configurable overlap with the previous chunk.\n*\n* @property chunkSize The target maximum chunk size in characters.\n* @property chunkOverlap The number of characters to overlap between chunks.\n* @property separators The list of separators to try, in order.\n*/\npublic class RecursiveCharacterSplitter(\npublic val chunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public class RecursiveCharacterSplitter(",
              "line": 52,
              "signature": "public class RecursiveCharacterSplitter(\npublic val chunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public val chunkSize: Int;",
              "line": 53,
              "signature": "public val chunkSize: Int;",
              "documentation": ""
            },
            {
              "name": "public val chunkOverlap: Int;",
              "line": 54,
              "signature": "public val chunkOverlap: Int;",
              "documentation": ""
            },
            {
              "name": "public val separators: List<String>;",
              "line": 55,
              "signature": "public val separators: List<String>;",
              "documentation": ""
            },
            {
              "name": "public val DEFAULT_SEPARATORS: List<String>;",
              "line": 106,
              "signature": "public val DEFAULT_SEPARATORS: List<String>;",
              "documentation": ""
            },
            {
              "name": "public class TokenSplitter(",
              "line": 129,
              "signature": "public class TokenSplitter(\npublic val maxTokens: Int;",
              "documentation": ""
            },
            {
              "name": "public val maxTokens: Int;",
              "line": 130,
              "signature": "public val maxTokens: Int;",
              "documentation": ""
            },
            {
              "name": "public val tokenOverlap: Int;",
              "line": 131,
              "signature": "public val tokenOverlap: Int;",
              "documentation": ""
            },
            {
              "name": "public val charsPerToken: Int;",
              "line": 132,
              "signature": "public val charsPerToken: Int;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Document.kt",
          "sha256": "b7dd0b581bc8592841112e289a50f8aacd50f132b293fcdd5922d8d66bc74e91",
          "artifactSha256": "bd42db1f81f55483333692e31b544b71bae54d7691c82221633ba8a5064295a2",
          "url": "/reference/source/forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Document.kt.txt",
          "declarations": [
            {
              "name": "public data class Document(",
              "line": 26,
              "signature": "public data class Document(\nval id: String,\nval content: String,\nval metadata: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public interface DocumentLoader",
              "line": 38,
              "signature": "public interface DocumentLoader",
              "documentation": ""
            },
            {
              "name": "public suspend fun load(): List<Document>",
              "line": 46,
              "signature": "public suspend fun load(): List<Document>\n}\n\n/**\n* A document loader that loads from raw text content.\n*\n* @property id The document ID.\n* @property text The raw text content.\n* @property metadata Optional metadata.\n* @property source Optional source identifier.\n*/\npublic class TextLoader(\nprivate val id: String,\nprivate val text: String,\nprivate val metadata: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public class TextLoader(",
              "line": 57,
              "signature": "public class TextLoader(\nprivate val id: String,\nprivate val text: String,\nprivate val metadata: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public class JsonLoader(",
              "line": 86,
              "signature": "public class JsonLoader(\nprivate val jsonString: String,\nprivate val contentField: String;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Embed.kt",
          "sha256": "fb8d0091f80061fdcc5e9a49f360a53d4aa8c86c8923300a349f6fbc1e9572cb",
          "artifactSha256": "378de77dd18d239b9f4d4203b8c6c36088020b3cd0726a53a9f1a6f1c6e787b0",
          "url": "/reference/source/forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Embed.kt.txt",
          "declarations": [
            {
              "name": "public data class EmbeddingResult(",
              "line": 22,
              "signature": "public data class EmbeddingResult(\nval embedding: List<Float>,\nval dimensions: Int,\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class BatchEmbeddingResult(",
              "line": 42,
              "signature": "public data class BatchEmbeddingResult(\nval embeddings: List<EmbeddingResult>,\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class EmbedOptions(",
              "line": 56,
              "signature": "public data class EmbedOptions(\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public interface EmbeddingProvider",
              "line": 70,
              "signature": "public interface EmbeddingProvider",
              "documentation": ""
            },
            {
              "name": "public suspend fun embed(text: String, options: EmbedOptions;",
              "line": 80,
              "signature": "public suspend fun embed(text: String, options: EmbedOptions;",
              "documentation": ""
            },
            {
              "name": "public suspend fun embedMany(",
              "line": 90,
              "signature": "public suspend fun embedMany(\ntexts: List<String>,\noptions: EmbedOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/EmbedError.kt",
          "sha256": "e355460aa9b1ede97ba6c56e9574c67096dbb78d1da93118424df6a66cc4c550",
          "artifactSha256": "003b58f4fcf7ebf08a017246d5808798a2cf2b9f1f982030a72977ea8ce92718",
          "url": "/reference/source/forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/EmbedError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeEmbedError(",
              "line": 14,
              "signature": "public sealed class ForgeEmbedError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ProviderError(",
              "line": 25,
              "signature": "public class ProviderError(\npublic val provider: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val provider: String,",
              "line": 26,
              "signature": "public val provider: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 27,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class DimensionMismatch(",
              "line": 38,
              "signature": "public class DimensionMismatch(\npublic val expected: Int,\npublic val actual: Int,\npublic val operation: String,\n) : ForgeEmbedError(\n\"vector dimension mismatch in $operation: expected $expected, got $actual\"\n)\n\n/**\n* A vector store entry was not found.\n*\n* @property id The entry ID that was not found.\n*/\npublic class EntryNotFound(\npublic val id: String,\n) : ForgeEmbedError(\"vector store entry '$id' not found\")\n\n/**\n* The reranker returned an error.\n*\n* @property reason The failure reason.\n*/\npublic class RerankError(\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val expected: Int,",
              "line": 39,
              "signature": "public val expected: Int,\npublic val actual: Int,\npublic val operation: String,\n) : ForgeEmbedError(\n\"vector dimension mismatch in $operation: expected $expected, got $actual\"\n)\n\n/**\n* A vector store entry was not found.\n*\n* @property id The entry ID that was not found.\n*/\npublic class EntryNotFound(\npublic val id: String,\n) : ForgeEmbedError(\"vector store entry '$id' not found\")\n\n/**\n* The reranker returned an error.\n*\n* @property reason The failure reason.\n*/\npublic class RerankError(\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val actual: Int,",
              "line": 40,
              "signature": "public val actual: Int,\npublic val operation: String,\n) : ForgeEmbedError(\n\"vector dimension mismatch in $operation: expected $expected, got $actual\"\n)\n\n/**\n* A vector store entry was not found.\n*\n* @property id The entry ID that was not found.\n*/\npublic class EntryNotFound(\npublic val id: String,\n) : ForgeEmbedError(\"vector store entry '$id' not found\")\n\n/**\n* The reranker returned an error.\n*\n* @property reason The failure reason.\n*/\npublic class RerankError(\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val operation: String,",
              "line": 41,
              "signature": "public val operation: String,\n) : ForgeEmbedError(\n\"vector dimension mismatch in $operation: expected $expected, got $actual\"\n)\n\n/**\n* A vector store entry was not found.\n*\n* @property id The entry ID that was not found.\n*/\npublic class EntryNotFound(\npublic val id: String,\n) : ForgeEmbedError(\"vector store entry '$id' not found\")\n\n/**\n* The reranker returned an error.\n*\n* @property reason The failure reason.\n*/\npublic class RerankError(\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class EntryNotFound(",
              "line": 51,
              "signature": "public class EntryNotFound(\npublic val id: String,\n) : ForgeEmbedError(\"vector store entry '$id' not found\")\n\n/**\n* The reranker returned an error.\n*\n* @property reason The failure reason.\n*/\npublic class RerankError(\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val id: String,",
              "line": 52,
              "signature": "public val id: String,\n) : ForgeEmbedError(\"vector store entry '$id' not found\")\n\n/**\n* The reranker returned an error.\n*\n* @property reason The failure reason.\n*/\npublic class RerankError(\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class RerankError(",
              "line": 60,
              "signature": "public class RerankError(\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 61,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ChunkingError(",
              "line": 70,
              "signature": "public class ChunkingError(\npublic val reason: String,\n) : ForgeEmbedError(\"chunking failed: $reason\")\n\n/**\n* Document loading failed.\n*\n* @property source The source that failed to load.\n* @property reason The failure reason.\n*/\npublic class DocumentLoadError(\npublic val source: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 71,
              "signature": "public val reason: String,\n) : ForgeEmbedError(\"chunking failed: $reason\")\n\n/**\n* Document loading failed.\n*\n* @property source The source that failed to load.\n* @property reason The failure reason.\n*/\npublic class DocumentLoadError(\npublic val source: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class DocumentLoadError(",
              "line": 80,
              "signature": "public class DocumentLoadError(\npublic val source: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val source: String,",
              "line": 81,
              "signature": "public val source: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 82,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Rerank.kt",
          "sha256": "e5984c8d6d64a3c436dbe74a2295c2b003497fa9d4c465e1c0f58b2ad09d0359",
          "artifactSha256": "f46f061523cf8c17a4c18e078516ebb571e2f46929d61d58ce2a967f2535cf7d",
          "url": "/reference/source/forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Rerank.kt.txt",
          "declarations": [
            {
              "name": "public data class RerankResult(",
              "line": 22,
              "signature": "public data class RerankResult(\nval index: Int,\nval score: Double,\nval document: String,\n)\n\n/**\n* The output of a reranking operation.\n*\n* @property results The reranked documents, ordered by relevance (highest first).\n* @property model The reranker model used (if available).\n*/\n@Serializable\npublic data class RerankOutput(\nval results: List<RerankResult>,\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class RerankOutput(",
              "line": 35,
              "signature": "public data class RerankOutput(\nval results: List<RerankResult>,\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class RerankOptions(",
              "line": 47,
              "signature": "public data class RerankOptions(\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public interface Reranker",
              "line": 58,
              "signature": "public interface Reranker",
              "documentation": ""
            },
            {
              "name": "public suspend fun rerank(",
              "line": 69,
              "signature": "public suspend fun rerank(\nquery: String,\ndocuments: List<String>,\noptions: RerankOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Similarity.kt",
          "sha256": "06bac6998295e7b40324ffcefebf015ba7784d852ac831f75c8c9d28e5a8ec45",
          "artifactSha256": "812af7bfe97a40e32dc597fb8a7af0b9d12b9c46dab8a97b8dd58898b2b1388a",
          "url": "/reference/source/forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/Similarity.kt.txt",
          "declarations": [
            {
              "name": "public fun cosineSimilarity(a: List<Float>, b: List<Float>): Double",
              "line": 26,
              "signature": "public fun cosineSimilarity(a: List<Float>, b: List<Float>): Double",
              "documentation": ""
            },
            {
              "name": "public fun euclideanDistance(a: List<Float>, b: List<Float>): Double",
              "line": 56,
              "signature": "public fun euclideanDistance(a: List<Float>, b: List<Float>): Double",
              "documentation": ""
            },
            {
              "name": "public fun dotProduct(a: List<Float>, b: List<Float>): Double",
              "line": 75,
              "signature": "public fun dotProduct(a: List<Float>, b: List<Float>): Double",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/VectorStore.kt",
          "sha256": "375f5b4d4f27ffeb7a1daf80e2875a85aa1736571cfd0b562a3b857276b92369",
          "artifactSha256": "a374eca4566b7e6f57bfbfb528cb1988596ad95dba5e7dee045d1e4b73ad4873",
          "url": "/reference/source/forge-kt/forge-embed/src/main/kotlin/com/l1fe/forge/embed/VectorStore.kt.txt",
          "declarations": [
            {
              "name": "public data class VectorEntry(",
              "line": 23,
              "signature": "public data class VectorEntry(\nval id: String,\nval embedding: List<Float>,\nval content: String,\nval metadata: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public data class SearchResult(",
              "line": 37,
              "signature": "public data class SearchResult(\nval entry: VectorEntry,\nval score: Double,\n)\n\n/**\n* Options for vector store search.\n*\n* @property topK The maximum number of results to return.\n* @property minScore The minimum similarity score threshold.\n* @property metadataFilter Optional metadata key-value pairs to filter by.\n*/\n@Serializable\npublic data class SearchOptions(\nval topK: Int;",
              "documentation": ""
            },
            {
              "name": "public data class SearchOptions(",
              "line": 50,
              "signature": "public data class SearchOptions(\nval topK: Int;",
              "documentation": ""
            },
            {
              "name": "public interface VectorStore",
              "line": 63,
              "signature": "public interface VectorStore",
              "documentation": ""
            },
            {
              "name": "public suspend fun upsert(entry: VectorEntry)",
              "line": 70,
              "signature": "public suspend fun upsert(entry: VectorEntry)\n\n/**\n* Insert or update multiple entries in a batch.\n*\n* @param entries The entries to upsert.\n*/\npublic suspend fun upsertMany(entries: List<VectorEntry>)\n\n/**\n* Retrieve an entry by its ID.\n*\n* @param id The entry ID.\n* @return The entry, or `null` if not found.\n*/\npublic suspend fun get(id: String): VectorEntry?\n\n/**\n* Delete an entry by its ID.\n*\n* @param id The entry ID.\n* @return `true` if the entry was deleted, `false` if not found.\n*/\npublic suspend fun delete(id: String): Boolean\n\n/**",
              "documentation": ""
            },
            {
              "name": "public suspend fun upsertMany(entries: List<VectorEntry>)",
              "line": 77,
              "signature": "public suspend fun upsertMany(entries: List<VectorEntry>)\n\n/**\n* Retrieve an entry by its ID.\n*\n* @param id The entry ID.\n* @return The entry, or `null` if not found.\n*/\npublic suspend fun get(id: String): VectorEntry?\n\n/**\n* Delete an entry by its ID.\n*\n* @param id The entry ID.\n* @return `true` if the entry was deleted, `false` if not found.\n*/\npublic suspend fun delete(id: String): Boolean\n\n/**\n* Search for entries similar to the given query vector.\n*\n* @param query The query embedding vector.\n* @param options Search options (top-K, min score, filters).\n* @return The list of search results, ordered by similarity (highest first).\n*/\npublic suspend fun search(query: List<Float>, options: SearchOptions;",
              "documentation": ""
            },
            {
              "name": "public suspend fun get(id: String): VectorEntry?",
              "line": 85,
              "signature": "public suspend fun get(id: String): VectorEntry?\n\n/**\n* Delete an entry by its ID.\n*\n* @param id The entry ID.\n* @return `true` if the entry was deleted, `false` if not found.\n*/\npublic suspend fun delete(id: String): Boolean\n\n/**\n* Search for entries similar to the given query vector.\n*\n* @param query The query embedding vector.\n* @param options Search options (top-K, min score, filters).\n* @return The list of search results, ordered by similarity (highest first).\n*/\npublic suspend fun search(query: List<Float>, options: SearchOptions;",
              "documentation": ""
            },
            {
              "name": "public suspend fun delete(id: String): Boolean",
              "line": 93,
              "signature": "public suspend fun delete(id: String): Boolean\n\n/**\n* Search for entries similar to the given query vector.\n*\n* @param query The query embedding vector.\n* @param options Search options (top-K, min score, filters).\n* @return The list of search results, ordered by similarity (highest first).\n*/\npublic suspend fun search(query: List<Float>, options: SearchOptions;",
              "documentation": ""
            },
            {
              "name": "public suspend fun search(query: List<Float>, options: SearchOptions;",
              "line": 102,
              "signature": "public suspend fun search(query: List<Float>, options: SearchOptions;",
              "documentation": ""
            },
            {
              "name": "public suspend fun size(): Int",
              "line": 107,
              "signature": "public suspend fun size(): Int\n}\n\n/**\n* An in-memory vector store using cosine similarity.\n*\n* Thread-safe. Suitable for development, testing, and small datasets.\n* Production workloads should use a dedicated vector database.\n*\n* ANVIL Spec Section 9.4\n*/\npublic class InMemoryVectorStore : VectorStore",
              "documentation": ""
            },
            {
              "name": "public class InMemoryVectorStore : VectorStore",
              "line": 118,
              "signature": "public class InMemoryVectorStore : VectorStore",
              "documentation": ""
            },
            {
              "name": "public fun clear()",
              "line": 164,
              "signature": "public fun clear()",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-media",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-media module.",
      "manifest": "forge-kt/forge-media/build.gradle.kts",
      "manifestSha256": "58389787b2388ec31be8534aaabd3c35b1b00c35f7385e8575443e41af49ed3a",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-media",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Image.kt",
          "sha256": "449e1f5e1901d3e1295867c01d603135484289c36ef8e2d0dacdd0414723652d",
          "artifactSha256": "9e35eb9312d85e9849dc7b7ecc6e268a3c482762f24ac86a3259444fbbec406d",
          "url": "/reference/source/forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Image.kt.txt",
          "declarations": [
            {
              "name": "public enum class ImageFormat",
              "line": 17,
              "signature": "public enum class ImageFormat",
              "documentation": ""
            },
            {
              "name": "public fun mimeType(): String;",
              "line": 31,
              "signature": "public fun mimeType(): String;",
              "documentation": ""
            },
            {
              "name": "public data class ImageOptions(",
              "line": 50,
              "signature": "public data class ImageOptions(\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class ImageResult(",
              "line": 70,
              "signature": "public data class ImageResult(\nval data: String,\nval format: ImageFormat,\nval width: Int?;",
              "documentation": ""
            },
            {
              "name": "public interface ImageProvider",
              "line": 84,
              "signature": "public interface ImageProvider",
              "documentation": ""
            },
            {
              "name": "public suspend fun generateImage(",
              "line": 94,
              "signature": "public suspend fun generateImage(\nprompt: String,\noptions: ImageOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/MediaError.kt",
          "sha256": "24edec1951f2860b90c8b51f655e9fdce76f22ae81c3212c1ce72274198175dc",
          "artifactSha256": "d4716ee504243ac56e91ea774df88244aa22d6132810928818e2b16726eae20e",
          "url": "/reference/source/forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/MediaError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeMediaError(",
              "line": 16,
              "signature": "public sealed class ForgeMediaError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ProviderError(",
              "line": 28,
              "signature": "public class ProviderError(\npublic val provider: String,\npublic val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val provider: String,",
              "line": 29,
              "signature": "public val provider: String,\npublic val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val operation: String,",
              "line": 30,
              "signature": "public val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 31,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class UnsupportedFormat(",
              "line": 44,
              "signature": "public class UnsupportedFormat(\npublic val format: String,\npublic val supportedFormats: List<String>,\n) : ForgeMediaError(\n\"unsupported media format '$format'; supported formats: $",
              "documentation": ""
            },
            {
              "name": "public val format: String,",
              "line": 45,
              "signature": "public val format: String,\npublic val supportedFormats: List<String>,\n) : ForgeMediaError(\n\"unsupported media format '$format'; supported formats: $",
              "documentation": ""
            },
            {
              "name": "public val supportedFormats: List<String>,",
              "line": 46,
              "signature": "public val supportedFormats: List<String>,\n) : ForgeMediaError(\n\"unsupported media format '$format'; supported formats: $",
              "documentation": ""
            },
            {
              "name": "public class ValidationFailed(",
              "line": 56,
              "signature": "public class ValidationFailed(\npublic val reason: String,\n) : ForgeMediaError(\"media validation failed: $reason\")\n\n/**\n* A media operation timed out.\n*\n* @property operation The operation that timed out.\n* @property timeoutMs The timeout in milliseconds.\n*/\npublic class Timeout(\npublic val operation: String,\npublic val timeoutMs: Long,\n) : ForgeMediaError(\"media operation '$operation' timed out after $",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 57,
              "signature": "public val reason: String,\n) : ForgeMediaError(\"media validation failed: $reason\")\n\n/**\n* A media operation timed out.\n*\n* @property operation The operation that timed out.\n* @property timeoutMs The timeout in milliseconds.\n*/\npublic class Timeout(\npublic val operation: String,\npublic val timeoutMs: Long,\n) : ForgeMediaError(\"media operation '$operation' timed out after $",
              "documentation": ""
            },
            {
              "name": "public class Timeout(",
              "line": 66,
              "signature": "public class Timeout(\npublic val operation: String,\npublic val timeoutMs: Long,\n) : ForgeMediaError(\"media operation '$operation' timed out after $",
              "documentation": ""
            },
            {
              "name": "public val operation: String,",
              "line": 67,
              "signature": "public val operation: String,\npublic val timeoutMs: Long,\n) : ForgeMediaError(\"media operation '$operation' timed out after $",
              "documentation": ""
            },
            {
              "name": "public val timeoutMs: Long,",
              "line": 68,
              "signature": "public val timeoutMs: Long,\n) : ForgeMediaError(\"media operation '$operation' timed out after $",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Speech.kt",
          "sha256": "50c715c0a4f6b2676dfaa85319389e8864e9c7cb02259a8acfec780d47a2973a",
          "artifactSha256": "589f99efa4351b90742215128b7b4944e4e4a4264dc3099035a581ac45cb1782",
          "url": "/reference/source/forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Speech.kt.txt",
          "declarations": [
            {
              "name": "public enum class AudioFormat",
              "line": 17,
              "signature": "public enum class AudioFormat",
              "documentation": ""
            },
            {
              "name": "public fun mimeType(): String;",
              "line": 37,
              "signature": "public fun mimeType(): String;",
              "documentation": ""
            },
            {
              "name": "public data class SpeechOptions(",
              "line": 57,
              "signature": "public data class SpeechOptions(\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class SpeechResult(",
              "line": 74,
              "signature": "public data class SpeechResult(\nval data: String,\nval format: AudioFormat,\n@SerialName(\"duration_ms\")\nval durationMs: Long?;",
              "documentation": ""
            },
            {
              "name": "public interface SpeechProvider",
              "line": 86,
              "signature": "public interface SpeechProvider",
              "documentation": ""
            },
            {
              "name": "public suspend fun speak(",
              "line": 96,
              "signature": "public suspend fun speak(\ntext: String,\noptions: SpeechOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Transcription.kt",
          "sha256": "7ac0fd3188d9199fc8a25d97c04546b1d37a21bee4d6bc34a949c45cd10a3690",
          "artifactSha256": "4edc1feb887ff5cdec64fbacfe909fdce18b006e0bc37c47ec0e2bc752e047cc",
          "url": "/reference/source/forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Transcription.kt.txt",
          "declarations": [
            {
              "name": "public data class TranscriptionSegment(",
              "line": 20,
              "signature": "public data class TranscriptionSegment(\nval text: String,\n@SerialName(\"start_ms\")\nval startMs: Long,\n@SerialName(\"end_ms\")\nval endMs: Long,\nval confidence: Double?;",
              "documentation": ""
            },
            {
              "name": "public data class TranscriptionOptions(",
              "line": 38,
              "signature": "public data class TranscriptionOptions(\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class TranscriptionResult(",
              "line": 55,
              "signature": "public data class TranscriptionResult(\nval text: String,\nval segments: List<TranscriptionSegment>;",
              "documentation": ""
            },
            {
              "name": "public interface TranscriptionProvider",
              "line": 68,
              "signature": "public interface TranscriptionProvider",
              "documentation": ""
            },
            {
              "name": "public suspend fun transcribe(",
              "line": 79,
              "signature": "public suspend fun transcribe(\naudioData: String,\naudioFormat: AudioFormat,\noptions: TranscriptionOptions;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Video.kt",
          "sha256": "829d9f3f9900d1f24ce9822da76b6bcca7c74700ad63b0a4c74b11a2c0aeb5b1",
          "artifactSha256": "a64cb8262984aea53ee737b72f78ea13cda45183b1c1446dbe50c05931b68c7d",
          "url": "/reference/source/forge-kt/forge-media/src/main/kotlin/com/l1fe/forge/media/Video.kt.txt",
          "declarations": [
            {
              "name": "public enum class VideoFormat",
              "line": 17,
              "signature": "public enum class VideoFormat",
              "documentation": ""
            },
            {
              "name": "public fun mimeType(): String;",
              "line": 28,
              "signature": "public fun mimeType(): String;",
              "documentation": ""
            },
            {
              "name": "public data class VideoOptions(",
              "line": 46,
              "signature": "public data class VideoOptions(\nval model: String?;",
              "documentation": ""
            },
            {
              "name": "public data class VideoResult(",
              "line": 67,
              "signature": "public data class VideoResult(\nval data: String,\nval format: VideoFormat,\nval width: Int?;",
              "documentation": ""
            },
            {
              "name": "public interface VideoProvider",
              "line": 83,
              "signature": "public interface VideoProvider",
              "documentation": ""
            },
            {
              "name": "public suspend fun generateVideo(",
              "line": 93,
              "signature": "public suspend fun generateVideo(\nprompt: String,\noptions: VideoOptions;",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-mcp",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-mcp module.",
      "manifest": "forge-kt/forge-mcp/build.gradle.kts",
      "manifestSha256": "5e2ce701d0ca455bdfb3d83fc58a6ef58205440728777573e527434c6d2cb84f",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-mcp",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpClient.kt",
          "sha256": "af05cad8dd6cd11c798b1de8b5a1b7e278257c640649d5ca9fd2d157c49959c9",
          "artifactSha256": "796cfa3465e5d16f86f9d5e7730b652376ef4f8281ef278f90993f17fde79274",
          "url": "/reference/source/forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpClient.kt.txt",
          "declarations": [
            {
              "name": "public class McpClient(",
              "line": 32,
              "signature": "public class McpClient(\nprivate val transport: McpTransport,\nprivate val telemetry: TelemetryEmitter;",
              "documentation": ""
            },
            {
              "name": "public val isConnected: Boolean get();",
              "line": 45,
              "signature": "public val isConnected: Boolean get();",
              "documentation": ""
            },
            {
              "name": "public suspend fun connect()",
              "line": 54,
              "signature": "public suspend fun connect()",
              "documentation": ""
            },
            {
              "name": "public suspend fun listTools(): List<McpToolDescriptor>",
              "line": 108,
              "signature": "public suspend fun listTools(): List<McpToolDescriptor>",
              "documentation": ""
            },
            {
              "name": "public suspend fun callTool(toolName: String, arguments: JsonObject): List<McpContent>",
              "line": 139,
              "signature": "public suspend fun callTool(toolName: String, arguments: JsonObject): List<McpContent>",
              "documentation": ""
            },
            {
              "name": "public suspend fun listResources(): List<McpResource>",
              "line": 192,
              "signature": "public suspend fun listResources(): List<McpResource>",
              "documentation": ""
            },
            {
              "name": "public suspend fun disconnect()",
              "line": 216,
              "signature": "public suspend fun disconnect()",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpError.kt",
          "sha256": "4a613d41895bfcd7d1ed661568aec55e709bd178b36ac38b54b5c5901d31b7e5",
          "artifactSha256": "d97099094bc486a10a3f44761dfe51384b9928c5a0fcb1d1bd69e0b7ce64b082",
          "url": "/reference/source/forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeMcpError(",
              "line": 13,
              "signature": "public sealed class ForgeMcpError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ConnectionFailed(",
              "line": 24,
              "signature": "public class ConnectionFailed(\npublic val endpoint: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val endpoint: String,",
              "line": 25,
              "signature": "public val endpoint: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 26,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ToolCallFailed(",
              "line": 36,
              "signature": "public class ToolCallFailed(\npublic val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val toolName: String,",
              "line": 37,
              "signature": "public val toolName: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 38,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ResourceFailed(",
              "line": 48,
              "signature": "public class ResourceFailed(\npublic val resourceUri: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val resourceUri: String,",
              "line": 49,
              "signature": "public val resourceUri: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 50,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ProtocolError(",
              "line": 60,
              "signature": "public class ProtocolError(\npublic val code: Int,\npublic val detail: String,\n) : ForgeMcpError(\"MCP protocol error (code $code): $detail\")\n\n/**\n* The MCP transport layer failed.\n*\n* @property transport The transport type that failed.\n* @property reason The failure reason.\n*/\npublic class TransportError(\npublic val transport: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val code: Int,",
              "line": 61,
              "signature": "public val code: Int,\npublic val detail: String,\n) : ForgeMcpError(\"MCP protocol error (code $code): $detail\")\n\n/**\n* The MCP transport layer failed.\n*\n* @property transport The transport type that failed.\n* @property reason The failure reason.\n*/\npublic class TransportError(\npublic val transport: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val detail: String,",
              "line": 62,
              "signature": "public val detail: String,\n) : ForgeMcpError(\"MCP protocol error (code $code): $detail\")\n\n/**\n* The MCP transport layer failed.\n*\n* @property transport The transport type that failed.\n* @property reason The failure reason.\n*/\npublic class TransportError(\npublic val transport: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class TransportError(",
              "line": 71,
              "signature": "public class TransportError(\npublic val transport: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val transport: String,",
              "line": 72,
              "signature": "public val transport: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 73,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class HandlerError(",
              "line": 83,
              "signature": "public class HandlerError(\npublic val handler: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val handler: String,",
              "line": 84,
              "signature": "public val handler: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 85,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpServer.kt",
          "sha256": "69f651637d0b0d47995e1f855de43a0c6e254140140915cea85cff85c1031c58",
          "artifactSha256": "90676ba9c1b46caa6c5ad87e70542093d4f60b7b05fd7336da37c2550f214f5b",
          "url": "/reference/source/forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpServer.kt.txt",
          "declarations": [
            {
              "name": "public fun interface McpToolHandler",
              "line": 25,
              "signature": "public fun interface McpToolHandler",
              "documentation": ""
            },
            {
              "name": "public suspend fun handle(arguments: JsonObject): List<McpContent>",
              "line": 32,
              "signature": "public suspend fun handle(arguments: JsonObject): List<McpContent>\n}\n\n/**\n* A handler for an MCP resource read.\n*/\npublic fun interface McpResourceHandler",
              "documentation": ""
            },
            {
              "name": "public fun interface McpResourceHandler",
              "line": 38,
              "signature": "public fun interface McpResourceHandler",
              "documentation": ""
            },
            {
              "name": "public suspend fun handle(uri: String): List<McpContent>",
              "line": 45,
              "signature": "public suspend fun handle(uri: String): List<McpContent>\n}\n\n/**\n* A registered tool on the MCP server.\n*/\nprivate data class RegisteredTool(\nval descriptor: McpToolDescriptor,\nval handler: McpToolHandler,\n)\n\n/**\n* A registered resource on the MCP server.\n*/\nprivate data class RegisteredResource(\nval resource: McpResource,\nval handler: McpResourceHandler,\n)\n\n/**\n* An MCP server that exposes tools and resources.\n*\n* Register tools and resources, then call [handleRequest] to process\n* incoming JSON-RPC 2.0 messages.\n*\n* ANVIL Spec Section 16.4",
              "documentation": ""
            },
            {
              "name": "public class McpServer(",
              "line": 75,
              "signature": "public class McpServer(\npublic val serverName: String;",
              "documentation": ""
            },
            {
              "name": "public val serverName: String;",
              "line": 76,
              "signature": "public val serverName: String;",
              "documentation": ""
            },
            {
              "name": "public val serverVersion: String;",
              "line": 77,
              "signature": "public val serverVersion: String;",
              "documentation": ""
            },
            {
              "name": "public fun registerTool(",
              "line": 91,
              "signature": "public fun registerTool(\nname: String,\ndescription: String,\ninputSchema: JsonSchema;",
              "documentation": ""
            },
            {
              "name": "public fun registerResource(",
              "line": 114,
              "signature": "public fun registerResource(\nuri: String,\nname: String,\ndescription: String?;",
              "documentation": ""
            },
            {
              "name": "public suspend fun handleRequest(requestJson: String): String",
              "line": 138,
              "signature": "public suspend fun handleRequest(requestJson: String): String",
              "documentation": ""
            },
            {
              "name": "public val toolCount: Int get();",
              "line": 239,
              "signature": "public val toolCount: Int get();",
              "documentation": ""
            },
            {
              "name": "public val resourceCount: Int get();",
              "line": 242,
              "signature": "public val resourceCount: Int get();",
              "documentation": ""
            },
            {
              "name": "public fun listRegisteredTools(): List<McpToolDescriptor> =",
              "line": 245,
              "signature": "public fun listRegisteredTools(): List<McpToolDescriptor> =",
              "documentation": ""
            },
            {
              "name": "public fun listRegisteredResources(): List<McpResource> =",
              "line": 249,
              "signature": "public fun listRegisteredResources(): List<McpResource> =",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpTransport.kt",
          "sha256": "0229e9289e7d0706d72d44acb1d8d8636dc6269e5d660384b72e2d1f7db0de93",
          "artifactSha256": "9677c38a40775aac142302331968077fb7931db3b88bca9f896fe6fba98590d7",
          "url": "/reference/source/forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpTransport.kt.txt",
          "declarations": [
            {
              "name": "public interface McpTransport",
              "line": 20,
              "signature": "public interface McpTransport",
              "documentation": ""
            },
            {
              "name": "public suspend fun send(message: String)",
              "line": 28,
              "signature": "public suspend fun send(message: String)\n\n/**\n* Receive a JSON-RPC message from the transport.\n*\n* Suspends until a message is available.\n*\n* @return The received JSON message.\n* @throws ForgeMcpError.TransportError if receiving fails.\n*/\npublic suspend fun receive(): String\n\n/**\n* Close the transport connection.\n*/\npublic suspend fun close()\n\n/**\n* Whether the transport is currently connected.\n*/\npublic val isConnected: Boolean\n}\n\n/**\n* Transport configuration.\n*",
              "documentation": ""
            },
            {
              "name": "public suspend fun receive(): String",
              "line": 38,
              "signature": "public suspend fun receive(): String\n\n/**\n* Close the transport connection.\n*/\npublic suspend fun close()\n\n/**\n* Whether the transport is currently connected.\n*/\npublic val isConnected: Boolean\n}\n\n/**\n* Transport configuration.\n*\n* @property type The transport type.\n* @property command The command to execute (for stdio transport).\n* @property args Command arguments (for stdio transport).\n* @property url The URL to connect to (for SSE/HTTP transport).\n* @property headers Optional HTTP headers (for SSE/HTTP transport).\n*/\npublic data class TransportConfig(\nval type: TransportType,\nval command: String?;",
              "documentation": ""
            },
            {
              "name": "public suspend fun close()",
              "line": 43,
              "signature": "public suspend fun close()\n\n/**\n* Whether the transport is currently connected.\n*/\npublic val isConnected: Boolean\n}\n\n/**\n* Transport configuration.\n*\n* @property type The transport type.\n* @property command The command to execute (for stdio transport).\n* @property args Command arguments (for stdio transport).\n* @property url The URL to connect to (for SSE/HTTP transport).\n* @property headers Optional HTTP headers (for SSE/HTTP transport).\n*/\npublic data class TransportConfig(\nval type: TransportType,\nval command: String?;",
              "documentation": ""
            },
            {
              "name": "public val isConnected: Boolean",
              "line": 48,
              "signature": "public val isConnected: Boolean\n}\n\n/**\n* Transport configuration.\n*\n* @property type The transport type.\n* @property command The command to execute (for stdio transport).\n* @property args Command arguments (for stdio transport).\n* @property url The URL to connect to (for SSE/HTTP transport).\n* @property headers Optional HTTP headers (for SSE/HTTP transport).\n*/\npublic data class TransportConfig(\nval type: TransportType,\nval command: String?;",
              "documentation": ""
            },
            {
              "name": "public data class TransportConfig(",
              "line": 60,
              "signature": "public data class TransportConfig(\nval type: TransportType,\nval command: String?;",
              "documentation": ""
            },
            {
              "name": "public enum class TransportType",
              "line": 71,
              "signature": "public enum class TransportType",
              "documentation": ""
            },
            {
              "name": "public class StdioTransport(",
              "line": 92,
              "signature": "public class StdioTransport(\nprivate val command: String,\nprivate val args: List<String>;",
              "documentation": ""
            },
            {
              "name": "public fun start()",
              "line": 108,
              "signature": "public fun start()",
              "documentation": ""
            },
            {
              "name": "public class SseTransport(",
              "line": 162,
              "signature": "public class SseTransport(\nprivate val url: String,\nprivate val headers: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public fun connect()",
              "line": 180,
              "signature": "public fun connect()",
              "documentation": ""
            },
            {
              "name": "public class HttpTransport(",
              "line": 215,
              "signature": "public class HttpTransport(\nprivate val url: String,\nprivate val headers: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public fun connect()",
              "line": 229,
              "signature": "public fun connect()",
              "documentation": ""
            },
            {
              "name": "public fun createTransport(config: TransportConfig): McpTransport;",
              "line": 261,
              "signature": "public fun createTransport(config: TransportConfig): McpTransport;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpTypes.kt",
          "sha256": "9f67ab2911f83df5a66830ed62416c53b5d6db676b1c1400477c363d1fec4f18",
          "artifactSha256": "441a1bce954558000376a8fa30add8ba7ed5efb7394bf18f5e63a66d58d71b32",
          "url": "/reference/source/forge-kt/forge-mcp/src/main/kotlin/com/l1fe/forge/mcp/McpTypes.kt.txt",
          "declarations": [
            {
              "name": "public data class McpToolDescriptor(",
              "line": 25,
              "signature": "public data class McpToolDescriptor(\nval name: String,\nval description: String,\nval inputSchema: JsonSchema;",
              "documentation": ""
            },
            {
              "name": "public data class McpResource(",
              "line": 40,
              "signature": "public data class McpResource(\nval uri: String,\nval name: String,\nval description: String?;",
              "documentation": ""
            },
            {
              "name": "public data class McpPrompt(",
              "line": 56,
              "signature": "public data class McpPrompt(\nval name: String,\nval description: String?;",
              "documentation": ""
            },
            {
              "name": "public data class McpPromptArgument(",
              "line": 70,
              "signature": "public data class McpPromptArgument(\nval name: String,\nval description: String?;",
              "documentation": ""
            },
            {
              "name": "public data class McpRequest(",
              "line": 85,
              "signature": "public data class McpRequest(\nval jsonrpc: String;",
              "documentation": ""
            },
            {
              "name": "public data class McpResponse(",
              "line": 101,
              "signature": "public data class McpResponse(\nval jsonrpc: String;",
              "documentation": ""
            },
            {
              "name": "public data class McpJsonRpcError(",
              "line": 116,
              "signature": "public data class McpJsonRpcError(\nval code: Int,\nval message: String,\nval data: JsonElement?;",
              "documentation": ""
            },
            {
              "name": "public data class McpCapabilities(",
              "line": 130,
              "signature": "public data class McpCapabilities(\nval tools: Boolean;",
              "documentation": ""
            },
            {
              "name": "public data class McpContent(",
              "line": 145,
              "signature": "public data class McpContent(\nval type: String;",
              "documentation": ""
            },
            {
              "name": "public fun text(text: String): McpContent;",
              "line": 154,
              "signature": "public fun text(text: String): McpContent;",
              "documentation": ""
            },
            {
              "name": "public fun image(data: String, mimeType: String): McpContent =",
              "line": 157,
              "signature": "public fun image(data: String, mimeType: String): McpContent =",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-identity",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-identity module.",
      "manifest": "forge-kt/forge-identity/build.gradle.kts",
      "manifestSha256": "5a2240f82fe5a81d9fa51c45215e4d4a914b22f71bf432eed9ad63e47f2c2eee",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-identity",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/AgentIdentity.kt",
          "sha256": "05bf717a4eb24c1c23389b4b47ec420590a57b451aa7c71d5bc8c268718224d7",
          "artifactSha256": "e5e80ca5bd64b7b8f997af4a663ccf51ef5e8ed5f07d8c5bd7f47c484b5528d8",
          "url": "/reference/source/forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/AgentIdentity.kt.txt",
          "declarations": [
            {
              "name": "public interface CryptoBridge",
              "line": 26,
              "signature": "public interface CryptoBridge",
              "documentation": ""
            },
            {
              "name": "public fun generateKeypair(): Pair<String, String>",
              "line": 33,
              "signature": "public fun generateKeypair(): Pair<String, String>\n\n/**\n* Derive a child keypair from a parent using HKDF-SHA256.\n*\n* @param parentPrivateKeyHex The parent's private key in hex.\n* @param derivationPath The derivation path string.\n* @return A pair of (childPublicKeyHex, childPrivateKeyHex).\n*/\npublic fun deriveChildKeypair(\nparentPrivateKeyHex: String,\nderivationPath: String,\n): Pair<String, String>\n\n/**\n* Sign a message with an Ed25519 private key.\n*\n* @param messageBytes The message bytes to sign.\n* @param privateKeyHex The private key in hex.\n* @return The signature bytes in hex.\n*/\npublic fun sign(messageBytes: ByteArray, privateKeyHex: String): String\n\n/**\n* Verify an Ed25519 signature.\n*",
              "documentation": ""
            },
            {
              "name": "public fun deriveChildKeypair(",
              "line": 42,
              "signature": "public fun deriveChildKeypair(\nparentPrivateKeyHex: String,\nderivationPath: String,\n): Pair<String, String>\n\n/**\n* Sign a message with an Ed25519 private key.\n*\n* @param messageBytes The message bytes to sign.\n* @param privateKeyHex The private key in hex.\n* @return The signature bytes in hex.\n*/\npublic fun sign(messageBytes: ByteArray, privateKeyHex: String): String\n\n/**\n* Verify an Ed25519 signature.\n*\n* @param messageBytes The original message bytes.\n* @param signatureHex The signature in hex.\n* @param publicKeyHex The public key in hex.\n* @return `true` if the signature is valid.\n*/\npublic fun verify(messageBytes: ByteArray, signatureHex: String, publicKeyHex: String): Boolean\n}\n\n/**",
              "documentation": ""
            },
            {
              "name": "public fun sign(messageBytes: ByteArray, privateKeyHex: String): String",
              "line": 54,
              "signature": "public fun sign(messageBytes: ByteArray, privateKeyHex: String): String\n\n/**\n* Verify an Ed25519 signature.\n*\n* @param messageBytes The original message bytes.\n* @param signatureHex The signature in hex.\n* @param publicKeyHex The public key in hex.\n* @return `true` if the signature is valid.\n*/\npublic fun verify(messageBytes: ByteArray, signatureHex: String, publicKeyHex: String): Boolean\n}\n\n/**\n* A verification method entry in the OAS document.\n*\n* @property id The verification method ID.\n* @property type The verification method type (e.g., \"Ed25519VerificationKey2020\").\n* @property controller The DID of the controller.\n* @property publicKeyHex The public key in hex encoding.\n*/\n@Serializable\npublic data class VerificationMethod(\nval id: String,\nval type: String;",
              "documentation": ""
            },
            {
              "name": "public fun verify(messageBytes: ByteArray, signatureHex: String, publicKeyHex: String): Boolean",
              "line": 64,
              "signature": "public fun verify(messageBytes: ByteArray, signatureHex: String, publicKeyHex: String): Boolean\n}\n\n/**\n* A verification method entry in the OAS document.\n*\n* @property id The verification method ID.\n* @property type The verification method type (e.g., \"Ed25519VerificationKey2020\").\n* @property controller The DID of the controller.\n* @property publicKeyHex The public key in hex encoding.\n*/\n@Serializable\npublic data class VerificationMethod(\nval id: String,\nval type: String;",
              "documentation": ""
            },
            {
              "name": "public data class VerificationMethod(",
              "line": 76,
              "signature": "public data class VerificationMethod(\nval id: String,\nval type: String;",
              "documentation": ""
            },
            {
              "name": "public data class LineageProof(",
              "line": 94,
              "signature": "public data class LineageProof(\n@SerialName(\"parent_did\")\nval parentDid: String,\n@SerialName(\"child_did\")\nval childDid: String,\n@SerialName(\"derivation_path\")\nval derivationPath: String,\nval signature: String,\nval timestamp: Timestamp,\n)\n\n/**\n* The lineage section of an OAS document.\n*\n* @property proofs The ordered list of lineage proofs from root to this agent.\n* @property depth The depth of this agent in the lineage chain.\n*/\n@Serializable\npublic data class LineageSection(\nval proofs: List<LineageProof>,\nval depth: Int,\n)\n\n/**\n* A simplified OAS document for the agent.\n*",
              "documentation": ""
            },
            {
              "name": "public data class LineageSection(",
              "line": 112,
              "signature": "public data class LineageSection(\nval proofs: List<LineageProof>,\nval depth: Int,\n)\n\n/**\n* A simplified OAS document for the agent.\n*\n* @property id The agent's DID.\n* @property verificationMethods The agent's verification methods.\n* @property lineage The lineage section.\n* @property created When the document was created.\n*/\n@Serializable\npublic data class OasDocument(\nval id: String,\n@SerialName(\"verification_methods\")\nval verificationMethods: List<VerificationMethod>,\nval lineage: LineageSection,\nval created: Timestamp,\n)\n\n/**\n* An agent's complete cryptographic identity.\n*\n* Contains the OAS DID, keypair (managed via [CryptoBridge]), OAS document,",
              "documentation": ""
            },
            {
              "name": "public data class OasDocument(",
              "line": 126,
              "signature": "public data class OasDocument(\nval id: String,\n@SerialName(\"verification_methods\")\nval verificationMethods: List<VerificationMethod>,\nval lineage: LineageSection,\nval created: Timestamp,\n)\n\n/**\n* An agent's complete cryptographic identity.\n*\n* Contains the OAS DID, keypair (managed via [CryptoBridge]), OAS document,\n* and lineage chain. The private key is NEVER exposed in toString() or\n* any serialized form.\n*\n* ANVIL Spec Section 11.1\n*\n* @property did The agent's OAS DID.\n* @property publicKeyHex The agent's Ed25519 public key in hex.\n* @property document The agent's OAS document.\n* @property lineageDepth The depth of this agent in the lineage chain.\n*/\npublic class ForgeAgentIdentity private constructor(\npublic val did: AgentDid,\npublic val publicKeyHex: String,\nprivate val privateKeyHex: String,",
              "documentation": ""
            },
            {
              "name": "public class ForgeAgentIdentity private constructor(",
              "line": 148,
              "signature": "public class ForgeAgentIdentity private constructor(\npublic val did: AgentDid,\npublic val publicKeyHex: String,\nprivate val privateKeyHex: String,\npublic val document: OasDocument,\npublic val lineageDepth: Int,\n)",
              "documentation": ""
            },
            {
              "name": "public val did: AgentDid,",
              "line": 149,
              "signature": "public val did: AgentDid,\npublic val publicKeyHex: String,\nprivate val privateKeyHex: String,\npublic val document: OasDocument,\npublic val lineageDepth: Int,\n)",
              "documentation": ""
            },
            {
              "name": "public val publicKeyHex: String,",
              "line": 150,
              "signature": "public val publicKeyHex: String,\nprivate val privateKeyHex: String,\npublic val document: OasDocument,\npublic val lineageDepth: Int,\n)",
              "documentation": ""
            },
            {
              "name": "public val document: OasDocument,",
              "line": 152,
              "signature": "public val document: OasDocument,\npublic val lineageDepth: Int,\n)",
              "documentation": ""
            },
            {
              "name": "public val lineageDepth: Int,",
              "line": 153,
              "signature": "public val lineageDepth: Int,\n)",
              "documentation": ""
            },
            {
              "name": "public fun sign(message: ByteArray): String",
              "line": 162,
              "signature": "public fun sign(message: ByteArray): String",
              "documentation": ""
            },
            {
              "name": "public fun verify(message: ByteArray, signatureHex: String): Boolean",
              "line": 175,
              "signature": "public fun verify(message: ByteArray, signatureHex: String): Boolean",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/Glyph.kt",
          "sha256": "3b1ee49fabc23c886a78250f670671291767f3bc9f52532dc54a639b64344cc9",
          "artifactSha256": "fac703ab7ca751acfeebe7eb2ea4b00ec061b4033d3bb518c8ae4078f35c7c65",
          "url": "/reference/source/forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/Glyph.kt.txt",
          "declarations": [
            {
              "name": "public enum class GlyphEntityKind",
              "line": 29,
              "signature": "public enum class GlyphEntityKind",
              "documentation": ""
            },
            {
              "name": "public fun asStr(): String;",
              "line": 55,
              "signature": "public fun asStr(): String;",
              "documentation": ""
            },
            {
              "name": "public fun asU8(): Int;",
              "line": 68,
              "signature": "public fun asU8(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun parseKind(s: String): GlyphEntityKind?;",
              "line": 83,
              "signature": "public fun parseKind(s: String): GlyphEntityKind?;",
              "documentation": ""
            },
            {
              "name": "public fun fromU8(v: Int): GlyphEntityKind?;",
              "line": 98,
              "signature": "public fun fromU8(v: Int): GlyphEntityKind?;",
              "documentation": ""
            },
            {
              "name": "public data class GlyphColor(val r: Int, val g: Int, val b: Int)",
              "line": 119,
              "signature": "public data class GlyphColor(val r: Int, val g: Int, val b: Int)",
              "documentation": ""
            },
            {
              "name": "public fun toHex(): String =",
              "line": 126,
              "signature": "public fun toHex(): String =",
              "documentation": ""
            },
            {
              "name": "public fun rgb(r: Int, g: Int, b: Int): GlyphColor;",
              "line": 131,
              "signature": "public fun rgb(r: Int, g: Int, b: Int): GlyphColor;",
              "documentation": ""
            },
            {
              "name": "public fun lerp(a: GlyphColor, b: GlyphColor, t: Double): GlyphColor",
              "line": 141,
              "signature": "public fun lerp(a: GlyphColor, b: GlyphColor, t: Double): GlyphColor",
              "documentation": ""
            },
            {
              "name": "public data class GlyphPalette(",
              "line": 167,
              "signature": "public data class GlyphPalette(\nval primary: GlyphColor,\nval secondary: GlyphColor,\nval accent: GlyphColor,\nval background: GlyphColor,\n)\n\n/**\n* The glyph input contract: describes what to render.\n*\n* @property did The agent's DID string.\n* @property kind The entity kind that determines the kind-region visual motif.\n* @property label Optional human-readable label rendered below the glyph.\n*/\n@Serializable\npublic data class GlyphDescriptor(\nval did: String,\nval kind: GlyphEntityKind,\nval label: String?;",
              "documentation": ""
            },
            {
              "name": "public data class GlyphDescriptor(",
              "line": 182,
              "signature": "public data class GlyphDescriptor(\nval did: String,\nval kind: GlyphEntityKind,\nval label: String?;",
              "documentation": ""
            },
            {
              "name": "public fun derivePaletteFromDid(did: String, kind: GlyphEntityKind): GlyphPalette",
              "line": 198,
              "signature": "public fun derivePaletteFromDid(did: String, kind: GlyphEntityKind): GlyphPalette",
              "documentation": ""
            },
            {
              "name": "public fun renderGlyph(descriptor: GlyphDescriptor): String",
              "line": 240,
              "signature": "public fun renderGlyph(descriptor: GlyphDescriptor): String",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/IdentityError.kt",
          "sha256": "8177d1f2acf62a26f11a248a4e99e7001c968fe52ec9042b41e332322c8be4ca",
          "artifactSha256": "277c1a7e4445ef17d379264b4d9699525791eeaf0475b2ef5fb1175e9ae21e60",
          "url": "/reference/source/forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/IdentityError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeIdentityError(",
              "line": 16,
              "signature": "public sealed class ForgeIdentityError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class DerivationFailed(",
              "line": 30,
              "signature": "public class DerivationFailed(\npublic val parentDid: String,\npublic val path: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val parentDid: String,",
              "line": 31,
              "signature": "public val parentDid: String,\npublic val path: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val path: String,",
              "line": 32,
              "signature": "public val path: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 33,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ChainTooDeep(",
              "line": 48,
              "signature": "public class ChainTooDeep(\npublic val depth: Int,\npublic val maxDepth: Int,\n) : ForgeIdentityError(\n\"lineage chain depth $depth exceeds ANVIL maximum $maxDepth (ANVIL Spec SS11.2)\"\n)\n\n/**\n* An identity is malformed or invalid.\n*\n* @property did The DID that is invalid.\n* @property reason The validation failure reason.\n*/\npublic class InvalidIdentity(\npublic val did: String,\npublic val reason: String,\n) : ForgeIdentityError(\"invalid identity '$did': $reason\")\n\n/**\n* The WASM crypto bridge is not available or failed.\n*\n* Non-Rust languages use the Rust WASM module for all cryptographic\n* operations. This error indicates the bridge is missing or broken.\n*\n* @property operation The operation that failed.\n* @property reason The failure reason.",
              "documentation": ""
            },
            {
              "name": "public val depth: Int,",
              "line": 49,
              "signature": "public val depth: Int,\npublic val maxDepth: Int,\n) : ForgeIdentityError(\n\"lineage chain depth $depth exceeds ANVIL maximum $maxDepth (ANVIL Spec SS11.2)\"\n)\n\n/**\n* An identity is malformed or invalid.\n*\n* @property did The DID that is invalid.\n* @property reason The validation failure reason.\n*/\npublic class InvalidIdentity(\npublic val did: String,\npublic val reason: String,\n) : ForgeIdentityError(\"invalid identity '$did': $reason\")\n\n/**\n* The WASM crypto bridge is not available or failed.\n*\n* Non-Rust languages use the Rust WASM module for all cryptographic\n* operations. This error indicates the bridge is missing or broken.\n*\n* @property operation The operation that failed.\n* @property reason The failure reason.\n*/",
              "documentation": ""
            },
            {
              "name": "public val maxDepth: Int,",
              "line": 50,
              "signature": "public val maxDepth: Int,\n) : ForgeIdentityError(\n\"lineage chain depth $depth exceeds ANVIL maximum $maxDepth (ANVIL Spec SS11.2)\"\n)\n\n/**\n* An identity is malformed or invalid.\n*\n* @property did The DID that is invalid.\n* @property reason The validation failure reason.\n*/\npublic class InvalidIdentity(\npublic val did: String,\npublic val reason: String,\n) : ForgeIdentityError(\"invalid identity '$did': $reason\")\n\n/**\n* The WASM crypto bridge is not available or failed.\n*\n* Non-Rust languages use the Rust WASM module for all cryptographic\n* operations. This error indicates the bridge is missing or broken.\n*\n* @property operation The operation that failed.\n* @property reason The failure reason.\n*/\npublic class WasmBridgeError(",
              "documentation": ""
            },
            {
              "name": "public class InvalidIdentity(",
              "line": 61,
              "signature": "public class InvalidIdentity(\npublic val did: String,\npublic val reason: String,\n) : ForgeIdentityError(\"invalid identity '$did': $reason\")\n\n/**\n* The WASM crypto bridge is not available or failed.\n*\n* Non-Rust languages use the Rust WASM module for all cryptographic\n* operations. This error indicates the bridge is missing or broken.\n*\n* @property operation The operation that failed.\n* @property reason The failure reason.\n*/\npublic class WasmBridgeError(\npublic val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val did: String,",
              "line": 62,
              "signature": "public val did: String,\npublic val reason: String,\n) : ForgeIdentityError(\"invalid identity '$did': $reason\")\n\n/**\n* The WASM crypto bridge is not available or failed.\n*\n* Non-Rust languages use the Rust WASM module for all cryptographic\n* operations. This error indicates the bridge is missing or broken.\n*\n* @property operation The operation that failed.\n* @property reason The failure reason.\n*/\npublic class WasmBridgeError(\npublic val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 63,
              "signature": "public val reason: String,\n) : ForgeIdentityError(\"invalid identity '$did': $reason\")\n\n/**\n* The WASM crypto bridge is not available or failed.\n*\n* Non-Rust languages use the Rust WASM module for all cryptographic\n* operations. This error indicates the bridge is missing or broken.\n*\n* @property operation The operation that failed.\n* @property reason The failure reason.\n*/\npublic class WasmBridgeError(\npublic val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class WasmBridgeError(",
              "line": 75,
              "signature": "public class WasmBridgeError(\npublic val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val operation: String,",
              "line": 76,
              "signature": "public val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 77,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class PersistenceError(",
              "line": 90,
              "signature": "public class PersistenceError(\npublic val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val operation: String,",
              "line": 91,
              "signature": "public val operation: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 92,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/Lineage.kt",
          "sha256": "e67c050ea59d525b032cf0d8620a97c285f11acecbcfd7a707451dada955e52b",
          "artifactSha256": "2c997555d7e3255c07af8e7ec8c6f8afb8d7c9ab0acf780103b64ca5b113a0ee",
          "url": "/reference/source/forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/Lineage.kt.txt",
          "declarations": [
            {
              "name": "public const val DEFAULT_MAX_LINEAGE_DEPTH: Int;",
              "line": 16,
              "signature": "public const val DEFAULT_MAX_LINEAGE_DEPTH: Int;",
              "documentation": ""
            },
            {
              "name": "public fun setCryptoBridge(bridge: CryptoBridge)",
              "line": 29,
              "signature": "public fun setCryptoBridge(bridge: CryptoBridge)",
              "documentation": ""
            },
            {
              "name": "public fun getCryptoBridge(): CryptoBridge =",
              "line": 38,
              "signature": "public fun getCryptoBridge(): CryptoBridge =",
              "documentation": ""
            },
            {
              "name": "public fun createHmrIdentity(",
              "line": 60,
              "signature": "public fun createHmrIdentity(\nnamespace: String;",
              "documentation": ""
            },
            {
              "name": "public fun createMhrIdentity(",
              "line": 103,
              "signature": "public fun createMhrIdentity(\nnamespace: String;",
              "documentation": ""
            },
            {
              "name": "public fun deriveAgentIdentity(",
              "line": 153,
              "signature": "public fun deriveAgentIdentity(\nparent: ForgeAgentIdentity,\nagentName: String,\nnamespace: String;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/LocalDev.kt",
          "sha256": "0b540167e7bdef95cbaf700bdbd99f62dd851df7dd6ae4665673b21d9f2b185d",
          "artifactSha256": "7c8432b9eafebd24b1cc4fb96dd90dd5b33e92816bfd0f19646c87fa0878ddae",
          "url": "/reference/source/forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/LocalDev.kt.txt",
          "declarations": [
            {
              "name": "public const val FORGE_DEV_METHOD: String;",
              "line": 21,
              "signature": "public const val FORGE_DEV_METHOD: String;",
              "documentation": ""
            },
            {
              "name": "public data class LocalDevProfile(",
              "line": 35,
              "signature": "public data class LocalDevProfile(\nval machineId: String,\nval hostname: String,\nval username: String,\nval profileName: String,\n)\n\n/**\n* Constructs a local dev DID string.\n*\n* Format: `did:forge-dev:<machine-id>:<kind>:<identifier>`\n*\n* @param machineId The 16-char hex machine identifier from the profile.\n* @param kind One of `\"mhr\"`, `\"hmr\"`, `\"agent\"`, `\"org\"`.\n* @param identifier The entity name or derived fingerprint.\n* @return The formatted DID string.\n*/\npublic fun forgeDevDid(machineId: String, kind: String, identifier: String): String =",
              "documentation": ""
            },
            {
              "name": "public fun forgeDevDid(machineId: String, kind: String, identifier: String): String =",
              "line": 52,
              "signature": "public fun forgeDevDid(machineId: String, kind: String, identifier: String): String =",
              "documentation": ""
            },
            {
              "name": "public fun deriveMachineIdFromParts(hostname: String, username: String, profileName: String): String",
              "line": 70,
              "signature": "public fun deriveMachineIdFromParts(hostname: String, username: String, profileName: String): String",
              "documentation": ""
            },
            {
              "name": "public fun deriveMachineId(profileName: String): String",
              "line": 84,
              "signature": "public fun deriveMachineId(profileName: String): String",
              "documentation": ""
            },
            {
              "name": "public fun validateForgeDevDid(did: String)",
              "line": 96,
              "signature": "public fun validateForgeDevDid(did: String)",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/Persistence.kt",
          "sha256": "6289d8de9de46191c64691d711afd6dd8d0c5f2e4529bd285bffb476107eda86",
          "artifactSha256": "912b85f56329e70226b90c11ef344c04878052a8261d8d91d99a3da4c0322130",
          "url": "/reference/source/forge-kt/forge-identity/src/main/kotlin/com/l1fe/forge/identity/Persistence.kt.txt",
          "declarations": [
            {
              "name": "public data class ProtectedPrivateKey(",
              "line": 19,
              "signature": "public data class ProtectedPrivateKey(\nval scheme: String,\nval payload: String,\n@SerialName(\"key_id\")\nval keyId: String?;",
              "documentation": ""
            },
            {
              "name": "public interface IdentityKeyProtector",
              "line": 26,
              "signature": "public interface IdentityKeyProtector",
              "documentation": ""
            },
            {
              "name": "public fun protect(privateKeyHex: String): ProtectedPrivateKey",
              "line": 27,
              "signature": "public fun protect(privateKeyHex: String): ProtectedPrivateKey\n\npublic fun unprotect(protectedPrivateKey: ProtectedPrivateKey): String\n}\n\n/**\n* A serializable identity envelope for persistence.\n*\n* Contains all data needed to reconstruct a [ForgeAgentIdentity] without\n* storing raw private key material.\n*/\n@Serializable\ninternal data class IdentityEnvelope(\n@SerialName(\"format_version\")\nval formatVersion: Int;",
              "documentation": ""
            },
            {
              "name": "public fun unprotect(protectedPrivateKey: ProtectedPrivateKey): String",
              "line": 29,
              "signature": "public fun unprotect(protectedPrivateKey: ProtectedPrivateKey): String\n}\n\n/**\n* A serializable identity envelope for persistence.\n*\n* Contains all data needed to reconstruct a [ForgeAgentIdentity] without\n* storing raw private key material.\n*/\n@Serializable\ninternal data class IdentityEnvelope(\n@SerialName(\"format_version\")\nval formatVersion: Int;",
              "documentation": ""
            },
            {
              "name": "public fun saveIdentity(identity: ForgeAgentIdentity, file: File)",
              "line": 67,
              "signature": "public fun saveIdentity(identity: ForgeAgentIdentity, file: File)",
              "documentation": ""
            },
            {
              "name": "public fun saveIdentity(",
              "line": 74,
              "signature": "public fun saveIdentity(\nidentity: ForgeAgentIdentity,\nfile: File,\nprotector: IdentityKeyProtector,\n)",
              "documentation": ""
            },
            {
              "name": "public fun loadIdentity(file: File): ForgeAgentIdentity",
              "line": 107,
              "signature": "public fun loadIdentity(file: File): ForgeAgentIdentity",
              "documentation": ""
            },
            {
              "name": "public fun loadIdentity(",
              "line": 114,
              "signature": "public fun loadIdentity(\nfile: File,\nprotector: IdentityKeyProtector,\n): ForgeAgentIdentity",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-auth",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-auth module.",
      "manifest": "forge-kt/forge-auth/build.gradle.kts",
      "manifestSha256": "b7c77618e92fbdeb5530efa2a338987d579828199ed598b8aeeb903817b610a6",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-auth",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/AuthError.kt",
          "sha256": "a87395a829a7793de75d6a9af176225b75ca64a1ffea0bce7a4204196d2e2382",
          "artifactSha256": "a7c27340fece60f066a2816fcb83e1d60d2529958064472d341849ab8955cf2d",
          "url": "/reference/source/forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/AuthError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeAuthError(",
              "line": 16,
              "signature": "public sealed class ForgeAuthError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class TokenExpired(",
              "line": 27,
              "signature": "public class TokenExpired(\npublic val actId: String,\npublic val expiredAt: String,\n) : ForgeAuthError(\n\"Arsenal ACT '$actId' expired at $expiredAt\"\n)\n\n/**\n* The agent does not have sufficient scope in its ACT.\n*\n* @property agentDid The agent's DID.\n* @property actId The ACT identifier.\n* @property requiredScope The scope that was required.\n* @property availableScopes The scopes available in the ACT.\n*/\npublic class InsufficientScope(\npublic val agentDid: String,\npublic val actId: String,\npublic val requiredScope: String,\npublic val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public val actId: String,",
              "line": 28,
              "signature": "public val actId: String,\npublic val expiredAt: String,\n) : ForgeAuthError(\n\"Arsenal ACT '$actId' expired at $expiredAt\"\n)\n\n/**\n* The agent does not have sufficient scope in its ACT.\n*\n* @property agentDid The agent's DID.\n* @property actId The ACT identifier.\n* @property requiredScope The scope that was required.\n* @property availableScopes The scopes available in the ACT.\n*/\npublic class InsufficientScope(\npublic val agentDid: String,\npublic val actId: String,\npublic val requiredScope: String,\npublic val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public val expiredAt: String,",
              "line": 29,
              "signature": "public val expiredAt: String,\n) : ForgeAuthError(\n\"Arsenal ACT '$actId' expired at $expiredAt\"\n)\n\n/**\n* The agent does not have sufficient scope in its ACT.\n*\n* @property agentDid The agent's DID.\n* @property actId The ACT identifier.\n* @property requiredScope The scope that was required.\n* @property availableScopes The scopes available in the ACT.\n*/\npublic class InsufficientScope(\npublic val agentDid: String,\npublic val actId: String,\npublic val requiredScope: String,\npublic val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public class InsufficientScope(",
              "line": 42,
              "signature": "public class InsufficientScope(\npublic val agentDid: String,\npublic val actId: String,\npublic val requiredScope: String,\npublic val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public val agentDid: String,",
              "line": 43,
              "signature": "public val agentDid: String,\npublic val actId: String,\npublic val requiredScope: String,\npublic val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public val actId: String,",
              "line": 44,
              "signature": "public val actId: String,\npublic val requiredScope: String,\npublic val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public val requiredScope: String,",
              "line": 45,
              "signature": "public val requiredScope: String,\npublic val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public val availableScopes: List<String>,",
              "line": 46,
              "signature": "public val availableScopes: List<String>,\n) : ForgeAuthError(\n\"agent $agentDid lacks scope '$requiredScope' in Arsenal ACT '$actId'; \" +",
              "documentation": ""
            },
            {
              "name": "public class CapabilityEscalation(",
              "line": 62,
              "signature": "public class CapabilityEscalation(\npublic val parentDid: String,\npublic val actId: String,\npublic val requestedScope: String,\npublic val parentScopes: List<String>,\n) : ForgeAuthError(\n\"capability escalation denied: child requested scope '$requestedScope' but \" +\n\"parent $parentDid ACT '$actId' only grants: \" +\nparentScopes.joinToString(\", \").ifEmpty",
              "documentation": ""
            },
            {
              "name": "public val parentDid: String,",
              "line": 63,
              "signature": "public val parentDid: String,\npublic val actId: String,\npublic val requestedScope: String,\npublic val parentScopes: List<String>,\n) : ForgeAuthError(\n\"capability escalation denied: child requested scope '$requestedScope' but \" +\n\"parent $parentDid ACT '$actId' only grants: \" +\nparentScopes.joinToString(\", \").ifEmpty",
              "documentation": ""
            },
            {
              "name": "public val actId: String,",
              "line": 64,
              "signature": "public val actId: String,\npublic val requestedScope: String,\npublic val parentScopes: List<String>,\n) : ForgeAuthError(\n\"capability escalation denied: child requested scope '$requestedScope' but \" +\n\"parent $parentDid ACT '$actId' only grants: \" +\nparentScopes.joinToString(\", \").ifEmpty",
              "documentation": ""
            },
            {
              "name": "public val requestedScope: String,",
              "line": 65,
              "signature": "public val requestedScope: String,\npublic val parentScopes: List<String>,\n) : ForgeAuthError(\n\"capability escalation denied: child requested scope '$requestedScope' but \" +\n\"parent $parentDid ACT '$actId' only grants: \" +\nparentScopes.joinToString(\", \").ifEmpty",
              "documentation": ""
            },
            {
              "name": "public val parentScopes: List<String>,",
              "line": 66,
              "signature": "public val parentScopes: List<String>,\n) : ForgeAuthError(\n\"capability escalation denied: child requested scope '$requestedScope' but \" +\n\"parent $parentDid ACT '$actId' only grants: \" +\nparentScopes.joinToString(\", \").ifEmpty",
              "documentation": ""
            },
            {
              "name": "public class DelegationDenied(",
              "line": 78,
              "signature": "public class DelegationDenied(\npublic val reason: String,\n) : ForgeAuthError(\"delegation denied: $reason\")\n\n/**\n* An ACT is structurally invalid.\n*\n* @property actId The ACT identifier.\n* @property reason The validation failure reason.\n*/\npublic class InvalidAct(\npublic val actId: String,\npublic val reason: String,\n) : ForgeAuthError(\"Arsenal ACT '$actId' is invalid: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 79,
              "signature": "public val reason: String,\n) : ForgeAuthError(\"delegation denied: $reason\")\n\n/**\n* An ACT is structurally invalid.\n*\n* @property actId The ACT identifier.\n* @property reason The validation failure reason.\n*/\npublic class InvalidAct(\npublic val actId: String,\npublic val reason: String,\n) : ForgeAuthError(\"Arsenal ACT '$actId' is invalid: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public class InvalidAct(",
              "line": 88,
              "signature": "public class InvalidAct(\npublic val actId: String,\npublic val reason: String,\n) : ForgeAuthError(\"Arsenal ACT '$actId' is invalid: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val actId: String,",
              "line": 89,
              "signature": "public val actId: String,\npublic val reason: String,\n) : ForgeAuthError(\"Arsenal ACT '$actId' is invalid: $reason\")\n}",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 90,
              "signature": "public val reason: String,\n) : ForgeAuthError(\"Arsenal ACT '$actId' is invalid: $reason\")\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/Capability.kt",
          "sha256": "11089e02fd0d74841bfa5055c573d99440431e66d3fa7f2c6a62cc7e14aeb2dd",
          "artifactSha256": "3d986a0fd33f6b6071aa3f562fb29ecb7bfc17ffc8e103a8f0afee7b67535547",
          "url": "/reference/source/forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/Capability.kt.txt",
          "declarations": [
            {
              "name": "public data class DelegationConstraints(",
              "line": 24,
              "signature": "public data class DelegationConstraints(\n@SerialName(\"allow_delegation\")\nval allowDelegation: Boolean;",
              "documentation": ""
            },
            {
              "name": "public data class AgentCapabilityToken(",
              "line": 51,
              "signature": "public data class AgentCapabilityToken(\nval id: String,\n@SerialName(\"agent_did\")\nval agentDid: String,\n@SerialName(\"issuer_did\")\nval issuerDid: String,\nval scopes: List<String>,\n@SerialName(\"issued_at\")\nval issuedAt: Timestamp,\n@SerialName(\"expires_at\")\nval expiresAt: Timestamp,\n@SerialName(\"delegation_constraints\")\nval delegationConstraints: DelegationConstraints;",
              "documentation": ""
            },
            {
              "name": "public fun verifyAct(act: AgentCapabilityToken)",
              "line": 75,
              "signature": "public fun verifyAct(act: AgentCapabilityToken)",
              "documentation": ""
            },
            {
              "name": "public fun extractScopes(act: AgentCapabilityToken): List<String>;",
              "line": 101,
              "signature": "public fun extractScopes(act: AgentCapabilityToken): List<String>;",
              "documentation": ""
            },
            {
              "name": "public fun actAllowsScope(act: AgentCapabilityToken, requiredScope: String): Boolean",
              "line": 113,
              "signature": "public fun actAllowsScope(act: AgentCapabilityToken, requiredScope: String): Boolean",
              "documentation": ""
            },
            {
              "name": "public fun scopeImplies(granted: String, required: String): Boolean",
              "line": 129,
              "signature": "public fun scopeImplies(granted: String, required: String): Boolean",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/Delegation.kt",
          "sha256": "603526c52eaab00e28650ef6e1826a8a6931710562751e776d1db721b0a84faf",
          "artifactSha256": "d8093d7fb1cced5f1cbe8d43704a207a4c9cd43e02a540f7478ad5440f89359b",
          "url": "/reference/source/forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/Delegation.kt.txt",
          "declarations": [
            {
              "name": "public data class DelegationRequest(",
              "line": 26,
              "signature": "public data class DelegationRequest(\n@SerialName(\"parent_act\")\nval parentAct: AgentCapabilityToken,\n@SerialName(\"child_did\")\nval childDid: String,\n@SerialName(\"requested_scopes\")\nval requestedScopes: List<String>,\n)\n\n/**\n* The result of a delegation operation.\n*\n* @property childAct The delegated ACT for the child agent.\n* @property narrowedScopes The scopes that were actually granted (may be a subset of requested).\n*/\n@Serializable\npublic data class DelegationResult(\n@SerialName(\"child_act\")\nval childAct: AgentCapabilityToken,\n@SerialName(\"narrowed_scopes\")\nval narrowedScopes: List<String>,\n)\n\n/**\n* Delegate capabilities from a parent to a child agent.\n*",
              "documentation": ""
            },
            {
              "name": "public data class DelegationResult(",
              "line": 42,
              "signature": "public data class DelegationResult(\n@SerialName(\"child_act\")\nval childAct: AgentCapabilityToken,\n@SerialName(\"narrowed_scopes\")\nval narrowedScopes: List<String>,\n)\n\n/**\n* Delegate capabilities from a parent to a child agent.\n*\n* Enforces the ANVIL rule that child capabilities must be a strict\n* subset of parent capabilities. The child's TTL is reduced by\n* the delegation constraints.\n*\n* ANVIL Spec Section 11.2\n*\n* @param request The delegation request.\n* @return The delegation result with the child's ACT.\n* @throws ForgeAuthError.DelegationDenied if delegation is not allowed.\n* @throws ForgeAuthError.CapabilityEscalation if requested scopes exceed parent's.\n* @throws ForgeAuthError.TokenExpired if the parent's ACT has expired.\n*/\npublic fun delegateCapabilities(request: DelegationRequest): DelegationResult",
              "documentation": ""
            },
            {
              "name": "public fun delegateCapabilities(request: DelegationRequest): DelegationResult",
              "line": 64,
              "signature": "public fun delegateCapabilities(request: DelegationRequest): DelegationResult",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/ToolAuth.kt",
          "sha256": "e211ec6ee04a724b1a12f698dff6b208b52a362a06a4e4d2816080c41a417c18",
          "artifactSha256": "13421f74b219abff4b97b9586b861a794d1be564e4f44bcac70d256355efc29c",
          "url": "/reference/source/forge-kt/forge-auth/src/main/kotlin/com/l1fe/forge/auth/ToolAuth.kt.txt",
          "declarations": [
            {
              "name": "public data class ToolAuthorizationRequest(",
              "line": 25,
              "signature": "public data class ToolAuthorizationRequest(\n@SerialName(\"tool_name\")\nval toolName: String,\n@SerialName(\"tool_tier\")\nval toolTier: ToolTier,\n@SerialName(\"agent_did\")\nval agentDid: String?;",
              "documentation": ""
            },
            {
              "name": "public sealed class ToolAuthorizationDecision",
              "line": 41,
              "signature": "public sealed class ToolAuthorizationDecision",
              "documentation": ""
            },
            {
              "name": "public data class Allowed(val scope: String) : ToolAuthorizationDecision()",
              "line": 50,
              "signature": "public data class Allowed(val scope: String) : ToolAuthorizationDecision()\n\n/**\n* The tool invocation is denied.\n*\n* @property reason The denial reason.\n*/\n@Serializable\n@SerialName(\"denied\")\npublic data class Denied(val reason: String) : ToolAuthorizationDecision()\n\n/**\n* The tool invocation is in legacy mode (no identity/auth configured).\n*\n* Legacy mode allows all tools but logs a warning.\n*/\n@Serializable\n@SerialName(\"legacy_mode\")\npublic data object LegacyMode : ToolAuthorizationDecision()\n}\n\n/**\n* Authorize a tool invocation against an Arsenal ACT.\n*\n* Authorization rules per ANVIL 3-tier model:\n* - **Platform (Tier 1)**: Always allowed, no ACT check needed.",
              "documentation": ""
            },
            {
              "name": "public data class Denied(val reason: String) : ToolAuthorizationDecision()",
              "line": 59,
              "signature": "public data class Denied(val reason: String) : ToolAuthorizationDecision()\n\n/**\n* The tool invocation is in legacy mode (no identity/auth configured).\n*\n* Legacy mode allows all tools but logs a warning.\n*/\n@Serializable\n@SerialName(\"legacy_mode\")\npublic data object LegacyMode : ToolAuthorizationDecision()\n}\n\n/**\n* Authorize a tool invocation against an Arsenal ACT.\n*\n* Authorization rules per ANVIL 3-tier model:\n* - **Platform (Tier 1)**: Always allowed, no ACT check needed.\n* - **External (Tier 2)**: Requires ACT with matching scope.\n* - **Embedded (Tier 3)**: Always allowed (module-scoped).\n*\n* If no ACT is provided, returns [ToolAuthorizationDecision.LegacyMode].\n*\n* ANVIL Spec Section 8.7\n*\n* @param request The authorization request.\n* @return The authorization decision.",
              "documentation": ""
            },
            {
              "name": "public data object LegacyMode : ToolAuthorizationDecision()",
              "line": 68,
              "signature": "public data object LegacyMode : ToolAuthorizationDecision()\n}\n\n/**\n* Authorize a tool invocation against an Arsenal ACT.\n*\n* Authorization rules per ANVIL 3-tier model:\n* - **Platform (Tier 1)**: Always allowed, no ACT check needed.\n* - **External (Tier 2)**: Requires ACT with matching scope.\n* - **Embedded (Tier 3)**: Always allowed (module-scoped).\n*\n* If no ACT is provided, returns [ToolAuthorizationDecision.LegacyMode].\n*\n* ANVIL Spec Section 8.7\n*\n* @param request The authorization request.\n* @return The authorization decision.\n*/\npublic fun authorizeToolInvocation(request: ToolAuthorizationRequest): ToolAuthorizationDecision",
              "documentation": ""
            },
            {
              "name": "public fun authorizeToolInvocation(request: ToolAuthorizationRequest): ToolAuthorizationDecision",
              "line": 86,
              "signature": "public fun authorizeToolInvocation(request: ToolAuthorizationRequest): ToolAuthorizationDecision",
              "documentation": ""
            },
            {
              "name": "public fun buildToolScope(toolName: String): String;",
              "line": 131,
              "signature": "public fun buildToolScope(toolName: String): String;",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-comm",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-comm module.",
      "manifest": "forge-kt/forge-comm/build.gradle.kts",
      "manifestSha256": "e6d0556e1515a0e14a8ee8c96801900ee439f7e02078557f85ad6e719dd973ba",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-comm",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/AgentMessage.kt",
          "sha256": "489779daeb46d9f9d740ccd9f7c1f339cae3a1454fe6743f66481ba22e02fd41",
          "artifactSha256": "23624c9364f213c02f94e429999feb34f3ef99d95a5cc6988aaa1a248e605694",
          "url": "/reference/source/forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/AgentMessage.kt.txt",
          "declarations": [
            {
              "name": "public enum class MessagePriority",
              "line": 22,
              "signature": "public enum class MessagePriority",
              "documentation": ""
            },
            {
              "name": "public sealed class MessageContent",
              "line": 46,
              "signature": "public sealed class MessageContent",
              "documentation": ""
            },
            {
              "name": "public data class Text(val text: String) : MessageContent()",
              "line": 55,
              "signature": "public data class Text(val text: String) : MessageContent()\n\n/**\n* A structured request from one agent to another.\n*\n* @property action The requested action identifier.\n* @property payload The JSON-encoded payload for the action.\n*/\n@Serializable\n@SerialName(\"request\")\npublic data class Request(\nval action: String,\nval payload: String,\n) : MessageContent()\n\n/**\n* A response to a prior request.\n*\n* @property requestId The ID of the original request message.\n* @property payload The JSON-encoded response payload.\n* @property success Whether the request was fulfilled successfully.\n*/\n@Serializable\n@SerialName(\"response\")\npublic data class Response(\n@SerialName(\"request_id\")",
              "documentation": ""
            },
            {
              "name": "public data class Request(",
              "line": 65,
              "signature": "public data class Request(\nval action: String,\nval payload: String,\n) : MessageContent()\n\n/**\n* A response to a prior request.\n*\n* @property requestId The ID of the original request message.\n* @property payload The JSON-encoded response payload.\n* @property success Whether the request was fulfilled successfully.\n*/\n@Serializable\n@SerialName(\"response\")\npublic data class Response(\n@SerialName(\"request_id\")\nval requestId: String,\nval payload: String,\nval success: Boolean,\n) : MessageContent()\n\n/**\n* A broadcast notification to all agents on a channel.\n*\n* @property topic The notification topic.\n* @property payload The JSON-encoded notification payload.",
              "documentation": ""
            },
            {
              "name": "public data class Response(",
              "line": 79,
              "signature": "public data class Response(\n@SerialName(\"request_id\")\nval requestId: String,\nval payload: String,\nval success: Boolean,\n) : MessageContent()\n\n/**\n* A broadcast notification to all agents on a channel.\n*\n* @property topic The notification topic.\n* @property payload The JSON-encoded notification payload.\n*/\n@Serializable\n@SerialName(\"broadcast\")\npublic data class Broadcast(\nval topic: String,\nval payload: String,\n) : MessageContent()\n}\n\n/**\n* An agent-to-agent message envelope.\n*\n* Carries sender and recipient identity, routing metadata, priority,\n* and a typed content payload. Every message has a unique ID and",
              "documentation": ""
            },
            {
              "name": "public data class Broadcast(",
              "line": 94,
              "signature": "public data class Broadcast(\nval topic: String,\nval payload: String,\n) : MessageContent()\n}\n\n/**\n* An agent-to-agent message envelope.\n*\n* Carries sender and recipient identity, routing metadata, priority,\n* and a typed content payload. Every message has a unique ID and\n* timestamp for audit trail purposes.\n*\n* ANVIL Spec Section 15.1\n*\n* @property id Unique message identifier.\n* @property senderDid The sender agent's OAS DID.\n* @property recipientDid The recipient agent's OAS DID (empty for broadcasts).\n* @property channelId The communication channel identifier.\n* @property content The typed message content.\n* @property priority The message priority level.\n* @property correlationId Optional correlation ID for request/response threading.\n* @property timestamp When the message was created.\n* @property metadata Optional key-value metadata.\n*/\n@Serializable",
              "documentation": ""
            },
            {
              "name": "public data class AgentMessage(",
              "line": 120,
              "signature": "public data class AgentMessage(\nval id: String,\n@SerialName(\"sender_did\")\nval senderDid: String,\n@SerialName(\"recipient_did\")\nval recipientDid: String;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/ChannelTransport.kt",
          "sha256": "e333d3ae2387674d0988f4c895481ba8346dee88908cba39534bc50a451d7a0b",
          "artifactSha256": "6f6cce41dbe6c691037a57a6954199d079c89dbccdf880d843ffd9c05440b3b8",
          "url": "/reference/source/forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/ChannelTransport.kt.txt",
          "declarations": [
            {
              "name": "public class ChannelTransport(",
              "line": 33,
              "signature": "public class ChannelTransport(\nprivate val bufferSize: Int;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/CommError.kt",
          "sha256": "94ed1356975e3eb8a5219c5cc2d0f72290e02a4c8fb379c675fded0adb6c70da",
          "artifactSha256": "73f6340ac8461dfac2fb40e310d89a9d62e42c29dc373b84fa0e6412a5ab268e",
          "url": "/reference/source/forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/CommError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeCommError(",
              "line": 17,
              "signature": "public sealed class ForgeCommError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class DeliveryFailed(",
              "line": 31,
              "signature": "public class DeliveryFailed(\npublic val messageId: String,\npublic val recipientDid: String,\npublic val reason: String,\n) : ForgeCommError(\n\"message '$messageId' delivery to '$recipientDid' failed: $reason \" +\n\"(see ANVIL Spec SS15.1)\"\n)\n\n/**\n* Transport connection failed.\n*\n* @property transportType The type of transport that failed.\n* @property reason The failure reason.\n*/\npublic class TransportError(\npublic val transportType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val messageId: String,",
              "line": 32,
              "signature": "public val messageId: String,\npublic val recipientDid: String,\npublic val reason: String,\n) : ForgeCommError(\n\"message '$messageId' delivery to '$recipientDid' failed: $reason \" +\n\"(see ANVIL Spec SS15.1)\"\n)\n\n/**\n* Transport connection failed.\n*\n* @property transportType The type of transport that failed.\n* @property reason The failure reason.\n*/\npublic class TransportError(\npublic val transportType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val recipientDid: String,",
              "line": 33,
              "signature": "public val recipientDid: String,\npublic val reason: String,\n) : ForgeCommError(\n\"message '$messageId' delivery to '$recipientDid' failed: $reason \" +\n\"(see ANVIL Spec SS15.1)\"\n)\n\n/**\n* Transport connection failed.\n*\n* @property transportType The type of transport that failed.\n* @property reason The failure reason.\n*/\npublic class TransportError(\npublic val transportType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 34,
              "signature": "public val reason: String,\n) : ForgeCommError(\n\"message '$messageId' delivery to '$recipientDid' failed: $reason \" +\n\"(see ANVIL Spec SS15.1)\"\n)\n\n/**\n* Transport connection failed.\n*\n* @property transportType The type of transport that failed.\n* @property reason The failure reason.\n*/\npublic class TransportError(\npublic val transportType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class TransportError(",
              "line": 46,
              "signature": "public class TransportError(\npublic val transportType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val transportType: String,",
              "line": 47,
              "signature": "public val transportType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 48,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class NegotiationFailed(",
              "line": 65,
              "signature": "public class NegotiationFailed(\npublic val senderDid: String,\npublic val recipientDid: String,\npublic val offeredProtocols: List<String>,\npublic val reason: String,\n) : ForgeCommError(\n\"protocol negotiation between '$senderDid' and '$recipientDid' failed: $reason; \" +",
              "documentation": ""
            },
            {
              "name": "public val senderDid: String,",
              "line": 66,
              "signature": "public val senderDid: String,\npublic val recipientDid: String,\npublic val offeredProtocols: List<String>,\npublic val reason: String,\n) : ForgeCommError(\n\"protocol negotiation between '$senderDid' and '$recipientDid' failed: $reason; \" +",
              "documentation": ""
            },
            {
              "name": "public val recipientDid: String,",
              "line": 67,
              "signature": "public val recipientDid: String,\npublic val offeredProtocols: List<String>,\npublic val reason: String,\n) : ForgeCommError(\n\"protocol negotiation between '$senderDid' and '$recipientDid' failed: $reason; \" +",
              "documentation": ""
            },
            {
              "name": "public val offeredProtocols: List<String>,",
              "line": 68,
              "signature": "public val offeredProtocols: List<String>,\npublic val reason: String,\n) : ForgeCommError(\n\"protocol negotiation between '$senderDid' and '$recipientDid' failed: $reason; \" +",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 69,
              "signature": "public val reason: String,\n) : ForgeCommError(\n\"protocol negotiation between '$senderDid' and '$recipientDid' failed: $reason; \" +",
              "documentation": ""
            },
            {
              "name": "public class ChannelNotFound(",
              "line": 81,
              "signature": "public class ChannelNotFound(\npublic val channelId: String,\n) : ForgeCommError(\"communication channel '$channelId' not found\")\n\n/**\n* Message serialization or deserialization failed.\n*\n* @property context A description of what was being serialized.\n* @property reason The failure detail.\n*/\npublic class SerializationError(\npublic val context: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val channelId: String,",
              "line": 82,
              "signature": "public val channelId: String,\n) : ForgeCommError(\"communication channel '$channelId' not found\")\n\n/**\n* Message serialization or deserialization failed.\n*\n* @property context A description of what was being serialized.\n* @property reason The failure detail.\n*/\npublic class SerializationError(\npublic val context: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class SerializationError(",
              "line": 91,
              "signature": "public class SerializationError(\npublic val context: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val context: String,",
              "line": 92,
              "signature": "public val context: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 93,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/MessageTransport.kt",
          "sha256": "b4b608ee306f5e3e293c58088fa5c7ac6e3a0554292dfc1081bafa0955c70979",
          "artifactSha256": "bbf4780f2bbed889eab6097911577fca3c112fbe374aaec208d498f98100c4b9",
          "url": "/reference/source/forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/MessageTransport.kt.txt",
          "declarations": [
            {
              "name": "public fun interface MessageHandler",
              "line": 17,
              "signature": "public fun interface MessageHandler",
              "documentation": ""
            },
            {
              "name": "public suspend fun onMessage(message: AgentMessage)",
              "line": 23,
              "signature": "public suspend fun onMessage(message: AgentMessage)\n}\n\n/**\n* Transport interface for agent-to-agent communication.\n*\n* Implementations handle the mechanics of message delivery:\n* serialization, routing, acknowledgment, and error handling.\n*\n* ANVIL Spec Section 15.3\n*/\npublic interface MessageTransport",
              "documentation": ""
            },
            {
              "name": "public interface MessageTransport",
              "line": 34,
              "signature": "public interface MessageTransport",
              "documentation": ""
            },
            {
              "name": "public suspend fun send(message: AgentMessage)",
              "line": 45,
              "signature": "public suspend fun send(message: AgentMessage)\n\n/**\n* Subscribe to messages on a specific channel.\n*\n* The handler will be invoked for each message received on the channel.\n*\n* @param channelId The channel to subscribe to.\n* @param handler The handler to invoke for received messages.\n* @throws ForgeCommError.ChannelNotFound if the channel does not exist.\n*/\npublic suspend fun subscribe(channelId: String, handler: MessageHandler)\n\n/**\n* Unsubscribe from messages on a specific channel.\n*\n* @param channelId The channel to unsubscribe from.\n*/\npublic suspend fun unsubscribe(channelId: String)\n\n/**\n* Close the transport and release all resources.\n*\n* After closing, no further send or subscribe operations are valid.\n*/\npublic suspend fun close()",
              "documentation": ""
            },
            {
              "name": "public suspend fun subscribe(channelId: String, handler: MessageHandler)",
              "line": 56,
              "signature": "public suspend fun subscribe(channelId: String, handler: MessageHandler)\n\n/**\n* Unsubscribe from messages on a specific channel.\n*\n* @param channelId The channel to unsubscribe from.\n*/\npublic suspend fun unsubscribe(channelId: String)\n\n/**\n* Close the transport and release all resources.\n*\n* After closing, no further send or subscribe operations are valid.\n*/\npublic suspend fun close()\n}",
              "documentation": ""
            },
            {
              "name": "public suspend fun unsubscribe(channelId: String)",
              "line": 63,
              "signature": "public suspend fun unsubscribe(channelId: String)\n\n/**\n* Close the transport and release all resources.\n*\n* After closing, no further send or subscribe operations are valid.\n*/\npublic suspend fun close()\n}",
              "documentation": ""
            },
            {
              "name": "public suspend fun close()",
              "line": 70,
              "signature": "public suspend fun close()\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/NoopTransport.kt",
          "sha256": "b0f04046c32482538c924105a8c1b9d9d66b0566076840f61a6cbcb1ab9ef3f4",
          "artifactSha256": "5f90b173c5e454c84a29c9233569658623cff44e938c45248fb7db82cfe7c650",
          "url": "/reference/source/forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/NoopTransport.kt.txt",
          "declarations": [
            {
              "name": "public object NoopTransport : MessageTransport",
              "line": 20,
              "signature": "public object NoopTransport : MessageTransport",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/ProtocolNegotiation.kt",
          "sha256": "72f50f6fef3225a3a491db90500d744d4512b271dbc144da38c05e22adfa4f81",
          "artifactSha256": "33e3002cd05163a539764687ac4dd2a580fc2945d9d7f05acd4fefca57f5378e",
          "url": "/reference/source/forge-kt/forge-comm/src/main/kotlin/com/l1fe/forge/comm/ProtocolNegotiation.kt.txt",
          "declarations": [
            {
              "name": "public data class ProtocolCapability(",
              "line": 25,
              "signature": "public data class ProtocolCapability(\nval name: String,\nval version: String,\nval features: Set<String>;",
              "documentation": ""
            },
            {
              "name": "public fun qualifiedName(): String;",
              "line": 35,
              "signature": "public fun qualifiedName(): String;",
              "documentation": ""
            },
            {
              "name": "public data class NegotiationOffer(",
              "line": 47,
              "signature": "public data class NegotiationOffer(\n@SerialName(\"sender_did\")\nval senderDid: String,\nval protocols: List<ProtocolCapability>,\n)\n\n/**\n* A negotiation response from the responder.\n*\n* ANVIL Spec Section 15.2\n*\n* @property responderDid The responding agent's OAS DID.\n* @property selectedProtocol The protocol selected by the responder, or `null` if none matched.\n* @property reason A reason for the selection or rejection.\n*/\n@Serializable\npublic data class NegotiationResponse(\n@SerialName(\"responder_did\")\nval responderDid: String,\n@SerialName(\"selected_protocol\")\nval selectedProtocol: ProtocolCapability?;",
              "documentation": ""
            },
            {
              "name": "public data class NegotiationResponse(",
              "line": 63,
              "signature": "public data class NegotiationResponse(\n@SerialName(\"responder_did\")\nval responderDid: String,\n@SerialName(\"selected_protocol\")\nval selectedProtocol: ProtocolCapability?;",
              "documentation": ""
            },
            {
              "name": "public sealed class NegotiationResult",
              "line": 77,
              "signature": "public sealed class NegotiationResult",
              "documentation": ""
            },
            {
              "name": "public data class Agreed(val protocol: ProtocolCapability) : NegotiationResult()",
              "line": 86,
              "signature": "public data class Agreed(val protocol: ProtocolCapability) : NegotiationResult()\n\n/**\n* Negotiation failed. No common protocol was found.\n*\n* @property reason The failure reason.\n*/\n@Serializable\n@SerialName(\"failed\")\npublic data class Failed(val reason: String) : NegotiationResult()\n}\n\n/**\n* Negotiates a common protocol between an offer and a set of supported protocols.\n*\n* Selects the first protocol from the offer that the responder supports,\n* matching on name and version. Feature sets must be compatible (the\n* responder must support all features required by the offer).\n*\n* ANVIL Spec Section 15.2\n*\n* @param offer The negotiation offer from the initiator.\n* @param supported The protocols supported by the responder.\n* @param responderDid The responder's OAS DID (for the response envelope).\n* @return A [NegotiationResponse] with the selected protocol or rejection.\n*/",
              "documentation": ""
            },
            {
              "name": "public data class Failed(val reason: String) : NegotiationResult()",
              "line": 95,
              "signature": "public data class Failed(val reason: String) : NegotiationResult()\n}\n\n/**\n* Negotiates a common protocol between an offer and a set of supported protocols.\n*\n* Selects the first protocol from the offer that the responder supports,\n* matching on name and version. Feature sets must be compatible (the\n* responder must support all features required by the offer).\n*\n* ANVIL Spec Section 15.2\n*\n* @param offer The negotiation offer from the initiator.\n* @param supported The protocols supported by the responder.\n* @param responderDid The responder's OAS DID (for the response envelope).\n* @return A [NegotiationResponse] with the selected protocol or rejection.\n*/\npublic fun negotiate(\noffer: NegotiationOffer,\nsupported: List<ProtocolCapability>,\nresponderDid: String,\n): NegotiationResponse",
              "documentation": ""
            },
            {
              "name": "public fun negotiate(",
              "line": 112,
              "signature": "public fun negotiate(\noffer: NegotiationOffer,\nsupported: List<ProtocolCapability>,\nresponderDid: String,\n): NegotiationResponse",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-collab",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-collab module.",
      "manifest": "forge-kt/forge-collab/build.gradle.kts",
      "manifestSha256": "8b5916e10980ea5f68d409af2098ed24c0fe9c25ea39acfb2b888790b5c2cba9",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-collab",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/CapabilityAdvertiser.kt",
          "sha256": "16f2826b60b901126b973060161730ff242f26a1f6db0d5049f81adb9fbcee33",
          "artifactSha256": "59b34dbb92867451a637006e0a81fe83b244107703f95c4245f83491b78c4865",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/CapabilityAdvertiser.kt.txt",
          "declarations": [
            {
              "name": "public data class AgentCapability(",
              "line": 28,
              "signature": "public data class AgentCapability(\nval name: String,\nval version: String;",
              "documentation": ""
            },
            {
              "name": "public data class CapabilityAdvertisement(",
              "line": 46,
              "signature": "public data class CapabilityAdvertisement(\n@SerialName(\"agent_did\")\nval agentDid: String,\nval capabilities: List<AgentCapability>,\n@SerialName(\"max_concurrent_tasks\")\nval maxConcurrentTasks: Int;",
              "documentation": ""
            },
            {
              "name": "public class CapabilityAdvertiser",
              "line": 66,
              "signature": "public class CapabilityAdvertiser",
              "documentation": ""
            },
            {
              "name": "public fun publish(advertisement: CapabilityAdvertisement)",
              "line": 76,
              "signature": "public fun publish(advertisement: CapabilityAdvertisement)",
              "documentation": ""
            },
            {
              "name": "public fun withdraw(agentDid: String): Boolean =",
              "line": 86,
              "signature": "public fun withdraw(agentDid: String): Boolean =",
              "documentation": ""
            },
            {
              "name": "public fun getAdvertisement(agentDid: String): CapabilityAdvertisement? =",
              "line": 95,
              "signature": "public fun getAdvertisement(agentDid: String): CapabilityAdvertisement? =",
              "documentation": ""
            },
            {
              "name": "public fun findByCapability(capabilityName: String): List<CapabilityAdvertisement> =",
              "line": 104,
              "signature": "public fun findByCapability(capabilityName: String): List<CapabilityAdvertisement> =",
              "documentation": ""
            },
            {
              "name": "public fun findByAllCapabilities(capabilityNames: Set<String>): List<CapabilityAdvertisement> =",
              "line": 115,
              "signature": "public fun findByAllCapabilities(capabilityNames: Set<String>): List<CapabilityAdvertisement> =",
              "documentation": ""
            },
            {
              "name": "public fun allAdvertisements(): List<CapabilityAdvertisement> =",
              "line": 126,
              "signature": "public fun allAdvertisements(): List<CapabilityAdvertisement> =",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/CollabError.kt",
          "sha256": "1297c1d54a43e2d3754f5bdce344bc8e5402007800e0e18475255ac3858e9a6d",
          "artifactSha256": "0df1ed6845bb47bbd8220be9a4d02ab69d997564064ae3a8ffc0d57df60690b9",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/CollabError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeCollabError(",
              "line": 17,
              "signature": "public sealed class ForgeCollabError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class SessionNotFound(",
              "line": 27,
              "signature": "public class SessionNotFound(\npublic val sessionId: String,\n) : ForgeCollabError(\"collaboration session '$sessionId' not found\")\n\n/**\n* A session is in an invalid state for the requested operation.\n*\n* ANVIL Spec Section 16.2 -- Session Lifecycle\n*\n* @property sessionId The session identifier.\n* @property currentState The current session state.\n* @property requiredState The required session state.\n*/\npublic class InvalidSessionState(\npublic val sessionId: String,\npublic val currentState: String,\npublic val requiredState: String,\n) : ForgeCollabError(\n\"session '$sessionId' is in state '$currentState' but must be in \" +\n\"'$requiredState' for this operation (see ANVIL Spec SS16.2)\"\n)\n\n/**\n* An agent role assignment failed.\n*\n* ANVIL Spec Section 16.3 -- Role Contracts",
              "documentation": ""
            },
            {
              "name": "public val sessionId: String,",
              "line": 28,
              "signature": "public val sessionId: String,\n) : ForgeCollabError(\"collaboration session '$sessionId' not found\")\n\n/**\n* A session is in an invalid state for the requested operation.\n*\n* ANVIL Spec Section 16.2 -- Session Lifecycle\n*\n* @property sessionId The session identifier.\n* @property currentState The current session state.\n* @property requiredState The required session state.\n*/\npublic class InvalidSessionState(\npublic val sessionId: String,\npublic val currentState: String,\npublic val requiredState: String,\n) : ForgeCollabError(\n\"session '$sessionId' is in state '$currentState' but must be in \" +\n\"'$requiredState' for this operation (see ANVIL Spec SS16.2)\"\n)\n\n/**\n* An agent role assignment failed.\n*\n* ANVIL Spec Section 16.3 -- Role Contracts\n*",
              "documentation": ""
            },
            {
              "name": "public class InvalidSessionState(",
              "line": 40,
              "signature": "public class InvalidSessionState(\npublic val sessionId: String,\npublic val currentState: String,\npublic val requiredState: String,\n) : ForgeCollabError(\n\"session '$sessionId' is in state '$currentState' but must be in \" +\n\"'$requiredState' for this operation (see ANVIL Spec SS16.2)\"\n)\n\n/**\n* An agent role assignment failed.\n*\n* ANVIL Spec Section 16.3 -- Role Contracts\n*\n* @property agentDid The agent's DID.\n* @property role The role that was requested.\n* @property reason The failure reason.\n*/\npublic class RoleAssignmentFailed(\npublic val agentDid: String,\npublic val role: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)",
              "documentation": ""
            },
            {
              "name": "public val sessionId: String,",
              "line": 41,
              "signature": "public val sessionId: String,\npublic val currentState: String,\npublic val requiredState: String,\n) : ForgeCollabError(\n\"session '$sessionId' is in state '$currentState' but must be in \" +\n\"'$requiredState' for this operation (see ANVIL Spec SS16.2)\"\n)\n\n/**\n* An agent role assignment failed.\n*\n* ANVIL Spec Section 16.3 -- Role Contracts\n*\n* @property agentDid The agent's DID.\n* @property role The role that was requested.\n* @property reason The failure reason.\n*/\npublic class RoleAssignmentFailed(\npublic val agentDid: String,\npublic val role: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)\n",
              "documentation": ""
            },
            {
              "name": "public val currentState: String,",
              "line": 42,
              "signature": "public val currentState: String,\npublic val requiredState: String,\n) : ForgeCollabError(\n\"session '$sessionId' is in state '$currentState' but must be in \" +\n\"'$requiredState' for this operation (see ANVIL Spec SS16.2)\"\n)\n\n/**\n* An agent role assignment failed.\n*\n* ANVIL Spec Section 16.3 -- Role Contracts\n*\n* @property agentDid The agent's DID.\n* @property role The role that was requested.\n* @property reason The failure reason.\n*/\npublic class RoleAssignmentFailed(\npublic val agentDid: String,\npublic val role: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)\n\n/**",
              "documentation": ""
            },
            {
              "name": "public val requiredState: String,",
              "line": 43,
              "signature": "public val requiredState: String,\n) : ForgeCollabError(\n\"session '$sessionId' is in state '$currentState' but must be in \" +\n\"'$requiredState' for this operation (see ANVIL Spec SS16.2)\"\n)\n\n/**\n* An agent role assignment failed.\n*\n* ANVIL Spec Section 16.3 -- Role Contracts\n*\n* @property agentDid The agent's DID.\n* @property role The role that was requested.\n* @property reason The failure reason.\n*/\npublic class RoleAssignmentFailed(\npublic val agentDid: String,\npublic val role: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)\n\n/**\n* A delegation request was rejected.",
              "documentation": ""
            },
            {
              "name": "public class RoleAssignmentFailed(",
              "line": 58,
              "signature": "public class RoleAssignmentFailed(\npublic val agentDid: String,\npublic val role: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)\n\n/**\n* A delegation request was rejected.\n*\n* ANVIL Spec Section 16.4 -- Delegation\n*\n* @property delegatorDid The delegating agent's DID.\n* @property delegateeDid The target agent's DID.\n* @property taskId The task being delegated.\n* @property reason The rejection reason.\n*/\npublic class DelegationRejected(\npublic val delegatorDid: String,\npublic val delegateeDid: String,\npublic val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +",
              "documentation": ""
            },
            {
              "name": "public val agentDid: String,",
              "line": 59,
              "signature": "public val agentDid: String,\npublic val role: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)\n\n/**\n* A delegation request was rejected.\n*\n* ANVIL Spec Section 16.4 -- Delegation\n*\n* @property delegatorDid The delegating agent's DID.\n* @property delegateeDid The target agent's DID.\n* @property taskId The task being delegated.\n* @property reason The rejection reason.\n*/\npublic class DelegationRejected(\npublic val delegatorDid: String,\npublic val delegateeDid: String,\npublic val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"",
              "documentation": ""
            },
            {
              "name": "public val role: String,",
              "line": 60,
              "signature": "public val role: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)\n\n/**\n* A delegation request was rejected.\n*\n* ANVIL Spec Section 16.4 -- Delegation\n*\n* @property delegatorDid The delegating agent's DID.\n* @property delegateeDid The target agent's DID.\n* @property taskId The task being delegated.\n* @property reason The rejection reason.\n*/\npublic class DelegationRejected(\npublic val delegatorDid: String,\npublic val delegateeDid: String,\npublic val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"\n)",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 61,
              "signature": "public val reason: String,\n) : ForgeCollabError(\n\"role '$role' assignment to agent '$agentDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.3)\"\n)\n\n/**\n* A delegation request was rejected.\n*\n* ANVIL Spec Section 16.4 -- Delegation\n*\n* @property delegatorDid The delegating agent's DID.\n* @property delegateeDid The target agent's DID.\n* @property taskId The task being delegated.\n* @property reason The rejection reason.\n*/\npublic class DelegationRejected(\npublic val delegatorDid: String,\npublic val delegateeDid: String,\npublic val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"\n)\n",
              "documentation": ""
            },
            {
              "name": "public class DelegationRejected(",
              "line": 77,
              "signature": "public class DelegationRejected(\npublic val delegatorDid: String,\npublic val delegateeDid: String,\npublic val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"\n)\n\n/**\n* A shared context operation failed.\n*\n* @property sessionId The session identifier.\n* @property key The context key that caused the error.\n* @property reason The failure reason.\n*/\npublic class SharedContextError(\npublic val sessionId: String,\npublic val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**",
              "documentation": ""
            },
            {
              "name": "public val delegatorDid: String,",
              "line": 78,
              "signature": "public val delegatorDid: String,\npublic val delegateeDid: String,\npublic val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"\n)\n\n/**\n* A shared context operation failed.\n*\n* @property sessionId The session identifier.\n* @property key The context key that caused the error.\n* @property reason The failure reason.\n*/\npublic class SharedContextError(\npublic val sessionId: String,\npublic val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.",
              "documentation": ""
            },
            {
              "name": "public val delegateeDid: String,",
              "line": 79,
              "signature": "public val delegateeDid: String,\npublic val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"\n)\n\n/**\n* A shared context operation failed.\n*\n* @property sessionId The session identifier.\n* @property key The context key that caused the error.\n* @property reason The failure reason.\n*/\npublic class SharedContextError(\npublic val sessionId: String,\npublic val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.\n*",
              "documentation": ""
            },
            {
              "name": "public val taskId: String,",
              "line": 80,
              "signature": "public val taskId: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"\n)\n\n/**\n* A shared context operation failed.\n*\n* @property sessionId The session identifier.\n* @property key The context key that caused the error.\n* @property reason The failure reason.\n*/\npublic class SharedContextError(\npublic val sessionId: String,\npublic val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.\n*\n* ANVIL Spec Section 16.5 -- Interrupts",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 81,
              "signature": "public val reason: String,\n) : ForgeCollabError(\n\"delegation of task '$taskId' from '$delegatorDid' to '$delegateeDid' \" +\n\"rejected: $reason (see ANVIL Spec SS16.4)\"\n)\n\n/**\n* A shared context operation failed.\n*\n* @property sessionId The session identifier.\n* @property key The context key that caused the error.\n* @property reason The failure reason.\n*/\npublic class SharedContextError(\npublic val sessionId: String,\npublic val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.\n*\n* ANVIL Spec Section 16.5 -- Interrupts\n*",
              "documentation": ""
            },
            {
              "name": "public class SharedContextError(",
              "line": 94,
              "signature": "public class SharedContextError(\npublic val sessionId: String,\npublic val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.\n*\n* ANVIL Spec Section 16.5 -- Interrupts\n*\n* @property targetDid The target agent's DID.\n* @property interruptType The type of interrupt.\n* @property reason The failure reason.\n*/\npublic class InterruptFailed(\npublic val targetDid: String,\npublic val interruptType: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val sessionId: String,",
              "line": 95,
              "signature": "public val sessionId: String,\npublic val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.\n*\n* ANVIL Spec Section 16.5 -- Interrupts\n*\n* @property targetDid The target agent's DID.\n* @property interruptType The type of interrupt.\n* @property reason The failure reason.\n*/\npublic class InterruptFailed(\npublic val targetDid: String,\npublic val interruptType: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val key: String,",
              "line": 96,
              "signature": "public val key: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.\n*\n* ANVIL Spec Section 16.5 -- Interrupts\n*\n* @property targetDid The target agent's DID.\n* @property interruptType The type of interrupt.\n* @property reason The failure reason.\n*/\npublic class InterruptFailed(\npublic val targetDid: String,\npublic val interruptType: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 97,
              "signature": "public val reason: String,\n) : ForgeCollabError(\n\"shared context error in session '$sessionId' for key '$key': $reason\"\n)\n\n/**\n* An interrupt could not be delivered.\n*\n* ANVIL Spec Section 16.5 -- Interrupts\n*\n* @property targetDid The target agent's DID.\n* @property interruptType The type of interrupt.\n* @property reason The failure reason.\n*/\npublic class InterruptFailed(\npublic val targetDid: String,\npublic val interruptType: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public class InterruptFailed(",
              "line": 111,
              "signature": "public class InterruptFailed(\npublic val targetDid: String,\npublic val interruptType: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val targetDid: String,",
              "line": 112,
              "signature": "public val targetDid: String,\npublic val interruptType: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val interruptType: String,",
              "line": 113,
              "signature": "public val interruptType: String,\npublic val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 114,
              "signature": "public val reason: String,\n) : ForgeCollabError(\n\"interrupt '$interruptType' to agent '$targetDid' failed: $reason \" +\n\"(see ANVIL Spec SS16.5)\"\n)\n}",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/CollaborationTypes.kt",
          "sha256": "16b32bbde96f66d6b4d043cf04a12da63cbef50a1e173fa7afad2fec52725fac",
          "artifactSha256": "974c67ba01c26daacc75a5f62f236dc2cb526fb8cafd68062c82ccdf22855350",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/CollaborationTypes.kt.txt",
          "declarations": [
            {
              "name": "public enum class SessionState(public val value: String)",
              "line": 21,
              "signature": "public enum class SessionState(public val value: String)",
              "documentation": ""
            },
            {
              "name": "public fun isTerminal(): Boolean;",
              "line": 52,
              "signature": "public fun isTerminal(): Boolean;",
              "documentation": ""
            },
            {
              "name": "public enum class CollaborationRole",
              "line": 61,
              "signature": "public enum class CollaborationRole",
              "documentation": ""
            },
            {
              "name": "public data class SessionParticipant(",
              "line": 102,
              "signature": "public data class SessionParticipant(\n@SerialName(\"agent_did\")\nval agentDid: String,\nval role: CollaborationRole,\nval capabilities: Set<String>;",
              "documentation": ""
            },
            {
              "name": "public enum class TaskStatus",
              "line": 117,
              "signature": "public enum class TaskStatus",
              "documentation": ""
            },
            {
              "name": "public data class CollaborationTask(",
              "line": 160,
              "signature": "public data class CollaborationTask(\nval id: String,\nval description: String,\n@SerialName(\"assignee_did\")\nval assigneeDid: String?;",
              "documentation": ""
            },
            {
              "name": "public enum class InterruptType",
              "line": 182,
              "signature": "public enum class InterruptType",
              "documentation": ""
            },
            {
              "name": "public data class Interrupt(",
              "line": 218,
              "signature": "public data class Interrupt(\nval id: String,\n@SerialName(\"target_did\")\nval targetDid: String,\nval type: InterruptType,\nval reason: String,\nval payload: String?;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/Delegation.kt",
          "sha256": "7c18cb784192494646e321e684dacd14acf140232947121f0f058cd5569b3285",
          "artifactSha256": "afc012484cb4fb14814111281fe1fa8f5e5f776a605f241aea20cad613046cf9",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/Delegation.kt.txt",
          "declarations": [
            {
              "name": "public class DelegationManager(",
              "line": 24,
              "signature": "public class DelegationManager(\nprivate val sessionId: String,\n)",
              "documentation": ""
            },
            {
              "name": "public fun createTask(",
              "line": 40,
              "signature": "public fun createTask(\nid: String,\ndescription: String,\ndelegatorDid: String,\npriority: Int;",
              "documentation": ""
            },
            {
              "name": "public fun assignTask(taskId: String, assigneeDid: String): CollaborationTask",
              "line": 68,
              "signature": "public fun assignTask(taskId: String, assigneeDid: String): CollaborationTask",
              "documentation": ""
            },
            {
              "name": "public fun startTask(taskId: String): CollaborationTask",
              "line": 98,
              "signature": "public fun startTask(taskId: String): CollaborationTask",
              "documentation": ""
            },
            {
              "name": "public fun completeTask(taskId: String, result: String): CollaborationTask",
              "line": 115,
              "signature": "public fun completeTask(taskId: String, result: String): CollaborationTask",
              "documentation": ""
            },
            {
              "name": "public fun failTask(taskId: String, reason: String): CollaborationTask",
              "line": 133,
              "signature": "public fun failTask(taskId: String, reason: String): CollaborationTask",
              "documentation": ""
            },
            {
              "name": "public fun getTask(taskId: String): CollaborationTask?;",
              "line": 150,
              "signature": "public fun getTask(taskId: String): CollaborationTask?;",
              "documentation": ""
            },
            {
              "name": "public fun allTasks(): List<CollaborationTask>;",
              "line": 157,
              "signature": "public fun allTasks(): List<CollaborationTask>;",
              "documentation": ""
            },
            {
              "name": "public fun tasksByStatus(status: TaskStatus): List<CollaborationTask> =",
              "line": 165,
              "signature": "public fun tasksByStatus(status: TaskStatus): List<CollaborationTask> =",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/InterruptHandler.kt",
          "sha256": "69f3a8d92c381694df743a85570568f4fca5b77bb1f8ed4fc21891077cbdcfcf",
          "artifactSha256": "5cefa06d000a98ea31b5411fe14ee94c5a5915b0db78640e857bda0891b18b95",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/InterruptHandler.kt.txt",
          "declarations": [
            {
              "name": "public fun interface InterruptReceiver",
              "line": 19,
              "signature": "public fun interface InterruptReceiver",
              "documentation": ""
            },
            {
              "name": "public suspend fun onInterrupt(interrupt: Interrupt)",
              "line": 25,
              "signature": "public suspend fun onInterrupt(interrupt: Interrupt)\n}\n\n/**\n* Dispatches interrupt signals to registered agent handlers.\n*\n* Thread-safe. Agents register receivers identified by their DID,\n* and the dispatcher routes interrupts to the appropriate receiver.\n*\n* ANVIL Spec Section 16.5\n*/\npublic class InterruptDispatcher",
              "documentation": ""
            },
            {
              "name": "public class InterruptDispatcher",
              "line": 36,
              "signature": "public class InterruptDispatcher",
              "documentation": ""
            },
            {
              "name": "public fun register(agentDid: String, receiver: InterruptReceiver)",
              "line": 45,
              "signature": "public fun register(agentDid: String, receiver: InterruptReceiver)",
              "documentation": ""
            },
            {
              "name": "public fun unregister(agentDid: String)",
              "line": 54,
              "signature": "public fun unregister(agentDid: String)",
              "documentation": ""
            },
            {
              "name": "public suspend fun dispatch(interrupt: Interrupt)",
              "line": 66,
              "signature": "public suspend fun dispatch(interrupt: Interrupt)",
              "documentation": ""
            },
            {
              "name": "public fun hasReceiver(agentDid: String): Boolean;",
              "line": 82,
              "signature": "public fun hasReceiver(agentDid: String): Boolean;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/RoleContracts.kt",
          "sha256": "f69f4d1aa8e452252d61385599658798f439cdb197e4993a2bbbf07111a3583a",
          "artifactSha256": "fb0d2cb77fd65e269b79f07e7bd5268a0e6826f7f47079b6d36a22c508207bdb",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/RoleContracts.kt.txt",
          "declarations": [
            {
              "name": "public interface CoordinatorContract",
              "line": 20,
              "signature": "public interface CoordinatorContract",
              "documentation": ""
            },
            {
              "name": "public suspend fun distributeTask(",
              "line": 32,
              "signature": "public suspend fun distributeTask(\ntask: CollaborationTask,\nparticipants: List<SessionParticipant>,\n): String?\n\n/**\n* Handle a completed task from a worker.\n*\n* @param task The completed task with result.\n*/\npublic suspend fun onTaskCompleted(task: CollaborationTask)\n\n/**\n* Handle a failed task from a worker.\n*\n* @param task The failed task.\n* @param reason The failure reason.\n*/\npublic suspend fun onTaskFailed(task: CollaborationTask, reason: String)\n\n/**\n* Determine whether the session should complete.\n*\n* @param tasks All tasks in the session.\n* @return `true` if the session should transition to completing.\n*/",
              "documentation": ""
            },
            {
              "name": "public suspend fun onTaskCompleted(task: CollaborationTask)",
              "line": 42,
              "signature": "public suspend fun onTaskCompleted(task: CollaborationTask)\n\n/**\n* Handle a failed task from a worker.\n*\n* @param task The failed task.\n* @param reason The failure reason.\n*/\npublic suspend fun onTaskFailed(task: CollaborationTask, reason: String)\n\n/**\n* Determine whether the session should complete.\n*\n* @param tasks All tasks in the session.\n* @return `true` if the session should transition to completing.\n*/\npublic suspend fun shouldComplete(tasks: List<CollaborationTask>): Boolean\n}\n\n/**\n* Contract for an agent acting as a worker.\n*\n* Workers execute delegated tasks and report results back to\n* the coordinator.\n*\n* ANVIL Spec Section 16.3",
              "documentation": ""
            },
            {
              "name": "public suspend fun onTaskFailed(task: CollaborationTask, reason: String)",
              "line": 50,
              "signature": "public suspend fun onTaskFailed(task: CollaborationTask, reason: String)\n\n/**\n* Determine whether the session should complete.\n*\n* @param tasks All tasks in the session.\n* @return `true` if the session should transition to completing.\n*/\npublic suspend fun shouldComplete(tasks: List<CollaborationTask>): Boolean\n}\n\n/**\n* Contract for an agent acting as a worker.\n*\n* Workers execute delegated tasks and report results back to\n* the coordinator.\n*\n* ANVIL Spec Section 16.3\n*/\npublic interface WorkerContract",
              "documentation": ""
            },
            {
              "name": "public suspend fun shouldComplete(tasks: List<CollaborationTask>): Boolean",
              "line": 58,
              "signature": "public suspend fun shouldComplete(tasks: List<CollaborationTask>): Boolean\n}\n\n/**\n* Contract for an agent acting as a worker.\n*\n* Workers execute delegated tasks and report results back to\n* the coordinator.\n*\n* ANVIL Spec Section 16.3\n*/\npublic interface WorkerContract",
              "documentation": ""
            },
            {
              "name": "public interface WorkerContract",
              "line": 69,
              "signature": "public interface WorkerContract",
              "documentation": ""
            },
            {
              "name": "public suspend fun executeTask(task: CollaborationTask): String",
              "line": 78,
              "signature": "public suspend fun executeTask(task: CollaborationTask): String\n\n/**\n* Whether the worker can accept a new task.\n*\n* Workers may reject tasks if they are at capacity or lack\n* the required capabilities.\n*\n* @param task The proposed task.\n* @return `true` if the worker can accept the task.\n*/\npublic suspend fun canAccept(task: CollaborationTask): Boolean\n\n/**\n* Handle an interrupt from the coordinator.\n*\n* @param interrupt The interrupt signal.\n*/\npublic suspend fun onInterrupt(interrupt: Interrupt)\n}\n\n/**\n* Contract for an agent acting as a reviewer.\n*\n* Reviewers validate the outputs of workers before the coordinator\n* accepts them.",
              "documentation": ""
            },
            {
              "name": "public suspend fun canAccept(task: CollaborationTask): Boolean",
              "line": 89,
              "signature": "public suspend fun canAccept(task: CollaborationTask): Boolean\n\n/**\n* Handle an interrupt from the coordinator.\n*\n* @param interrupt The interrupt signal.\n*/\npublic suspend fun onInterrupt(interrupt: Interrupt)\n}\n\n/**\n* Contract for an agent acting as a reviewer.\n*\n* Reviewers validate the outputs of workers before the coordinator\n* accepts them.\n*\n* ANVIL Spec Section 16.3\n*/\npublic interface ReviewerContract",
              "documentation": ""
            },
            {
              "name": "public suspend fun onInterrupt(interrupt: Interrupt)",
              "line": 96,
              "signature": "public suspend fun onInterrupt(interrupt: Interrupt)\n}\n\n/**\n* Contract for an agent acting as a reviewer.\n*\n* Reviewers validate the outputs of workers before the coordinator\n* accepts them.\n*\n* ANVIL Spec Section 16.3\n*/\npublic interface ReviewerContract",
              "documentation": ""
            },
            {
              "name": "public interface ReviewerContract",
              "line": 107,
              "signature": "public interface ReviewerContract",
              "documentation": ""
            },
            {
              "name": "public suspend fun review(task: CollaborationTask): ReviewResult",
              "line": 115,
              "signature": "public suspend fun review(task: CollaborationTask): ReviewResult\n}\n\n/**\n* The result of a task review.\n*\n* ANVIL Spec Section 16.3\n*/\npublic sealed class ReviewResult",
              "documentation": ""
            },
            {
              "name": "public sealed class ReviewResult",
              "line": 123,
              "signature": "public sealed class ReviewResult",
              "documentation": ""
            },
            {
              "name": "public data class Approved(val feedback: String;",
              "line": 130,
              "signature": "public data class Approved(val feedback: String;",
              "documentation": ""
            },
            {
              "name": "public data class Rejected(",
              "line": 138,
              "signature": "public data class Rejected(\nval reason: String,\nval suggestions: List<String>;",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/SessionManager.kt",
          "sha256": "d05a128f7d8e291c88dcd2661062d43b3d7880ea8abd5cd092f8605d2fca8d00",
          "artifactSha256": "782eec2a25f5e09ab3259faaa82efa39f078fc80e5e85584508375d455f905ce",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/SessionManager.kt.txt",
          "declarations": [
            {
              "name": "public data class CollaborationSession(",
              "line": 32,
              "signature": "public data class CollaborationSession(\nval id: String,\nval name: String,\nval state: SessionState;",
              "documentation": ""
            },
            {
              "name": "public class SessionManager",
              "line": 53,
              "signature": "public class SessionManager",
              "documentation": ""
            },
            {
              "name": "public fun createSession(",
              "line": 68,
              "signature": "public fun createSession(\nid: String,\nname: String,\ncoordinatorDid: String,\n): CollaborationSession",
              "documentation": ""
            },
            {
              "name": "public fun getSession(sessionId: String): CollaborationSession?;",
              "line": 94,
              "signature": "public fun getSession(sessionId: String): CollaborationSession?;",
              "documentation": ""
            },
            {
              "name": "public fun requireSession(sessionId: String): CollaborationSession =",
              "line": 103,
              "signature": "public fun requireSession(sessionId: String): CollaborationSession =",
              "documentation": ""
            },
            {
              "name": "public fun addParticipant(",
              "line": 119,
              "signature": "public fun addParticipant(\nsessionId: String,\nparticipant: SessionParticipant,\n): CollaborationSession",
              "documentation": ""
            },
            {
              "name": "public fun transitionSession(",
              "line": 150,
              "signature": "public fun transitionSession(\nsessionId: String,\nnewState: SessionState,\n): CollaborationSession",
              "documentation": ""
            },
            {
              "name": "public fun addTask(",
              "line": 192,
              "signature": "public fun addTask(\nsessionId: String,\ntask: CollaborationTask,\n): CollaborationSession",
              "documentation": ""
            },
            {
              "name": "public fun activeSessions(): List<CollaborationSession> =",
              "line": 217,
              "signature": "public fun activeSessions(): List<CollaborationSession> =",
              "documentation": ""
            },
            {
              "name": "public fun removeSession(sessionId: String): Boolean =",
              "line": 226,
              "signature": "public fun removeSession(sessionId: String): Boolean =",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/SharedContext.kt",
          "sha256": "503b4493ea0b4d4b2d06dba83e73f905a6ecb0b933f17ec69ae4334f25ebc035",
          "artifactSha256": "15da6e2765c01b03ba8063203f1213ac335ff4ce9a2d9173469befdbcce5469c",
          "url": "/reference/source/forge-kt/forge-collab/src/main/kotlin/com/l1fe/forge/collab/SharedContext.kt.txt",
          "declarations": [
            {
              "name": "public data class ContextEntry(",
              "line": 29,
              "signature": "public data class ContextEntry(\nval key: String,\nval value: String,\nval version: Long;",
              "documentation": ""
            },
            {
              "name": "public class SharedContext(",
              "line": 49,
              "signature": "public class SharedContext(\nprivate val sessionId: String,\n)",
              "documentation": ""
            },
            {
              "name": "public fun get(key: String): ContextEntry?;",
              "line": 60,
              "signature": "public fun get(key: String): ContextEntry?;",
              "documentation": ""
            },
            {
              "name": "public fun require(key: String): ContextEntry =",
              "line": 69,
              "signature": "public fun require(key: String): ContextEntry =",
              "documentation": ""
            },
            {
              "name": "public fun set(key: String, value: String, authorDid: String): ContextEntry",
              "line": 88,
              "signature": "public fun set(key: String, value: String, authorDid: String): ContextEntry",
              "documentation": ""
            },
            {
              "name": "public fun compareAndSet(",
              "line": 120,
              "signature": "public fun compareAndSet(\nkey: String,\nvalue: String,\nexpectedVersion: Long,\nauthorDid: String,\n): ContextEntry",
              "documentation": ""
            },
            {
              "name": "public fun remove(key: String): ContextEntry?;",
              "line": 143,
              "signature": "public fun remove(key: String): ContextEntry?;",
              "documentation": ""
            },
            {
              "name": "public fun entries(): List<ContextEntry>;",
              "line": 150,
              "signature": "public fun entries(): List<ContextEntry>;",
              "documentation": ""
            },
            {
              "name": "public fun size(): Int;",
              "line": 157,
              "signature": "public fun size(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun clear()",
              "line": 162,
              "signature": "public fun clear()",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-telemetry",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-telemetry module.",
      "manifest": "forge-kt/forge-telemetry/build.gradle.kts",
      "manifestSha256": "5adfcb1131e063bd501072e2fcf5706bcb9d69dfb845df386593d5d4393a3f50",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-telemetry",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/AuditTrail.kt",
          "sha256": "4c10fe88f15a870799eb9a1b972d882684a0240e93ae72367a04c47eade797d5",
          "artifactSha256": "8a44cc4ba3fad245fe18b6fae84f81711ce8e7ac730a97a053ab1a96d206c1b0",
          "url": "/reference/source/forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/AuditTrail.kt.txt",
          "declarations": [
            {
              "name": "public enum class AuditEntryType",
              "line": 23,
              "signature": "public enum class AuditEntryType",
              "documentation": ""
            },
            {
              "name": "public data class AuditEntry(",
              "line": 76,
              "signature": "public data class AuditEntry(\nval id: String,\nval type: AuditEntryType,\n@SerialName(\"agent_did\")\nval agentDid: String,\nval description: String,\nval metadata: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public class AuditTrail(",
              "line": 97,
              "signature": "public class AuditTrail(\nprivate val agentDid: String,\n)",
              "documentation": ""
            },
            {
              "name": "public fun record(",
              "line": 113,
              "signature": "public fun record(\ntype: AuditEntryType,\ndescription: String,\nmetadata: Map<String, String>;",
              "documentation": ""
            },
            {
              "name": "public fun recordLifecycleTransition(",
              "line": 137,
              "signature": "public fun recordLifecycleTransition(\nfromState: String,\ntoState: String,\nreason: String,\n): AuditEntry;",
              "documentation": ""
            },
            {
              "name": "public fun recordToolInvocation(",
              "line": 159,
              "signature": "public fun recordToolInvocation(\ntoolName: String,\ntier: String,\nsuccess: Boolean,\n): AuditEntry;",
              "documentation": ""
            },
            {
              "name": "public fun recordCapabilityCheck(",
              "line": 181,
              "signature": "public fun recordCapabilityCheck(\ncapability: String,\ngranted: Boolean,\nactId: String;",
              "documentation": ""
            },
            {
              "name": "public fun allEntries(): List<AuditEntry>;",
              "line": 201,
              "signature": "public fun allEntries(): List<AuditEntry>;",
              "documentation": ""
            },
            {
              "name": "public fun entriesByType(type: AuditEntryType): List<AuditEntry> =",
              "line": 209,
              "signature": "public fun entriesByType(type: AuditEntryType): List<AuditEntry> =",
              "documentation": ""
            },
            {
              "name": "public fun size(): Int;",
              "line": 217,
              "signature": "public fun size(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun recent(count: Int): List<AuditEntry> =",
              "line": 225,
              "signature": "public fun recent(count: Int): List<AuditEntry> =",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/SpanCollector.kt",
          "sha256": "530a405f84a355fe257462b003e725bba959d5ed2994280bb283b8fa64c18048",
          "artifactSha256": "93098705c1697c4731439885081ec1a031e2ec279fc2c9d8e9233c427c3b692b",
          "url": "/reference/source/forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/SpanCollector.kt.txt",
          "declarations": [
            {
              "name": "public data class MetricPoint(",
              "line": 25,
              "signature": "public data class MetricPoint(\nval name: String,\nval value: Double,\nval attributes: Map<String, SpanAttribute>;",
              "documentation": ""
            },
            {
              "name": "public class InMemorySpanCollector(",
              "line": 45,
              "signature": "public class InMemorySpanCollector(\nprivate val maxSpans: Int;",
              "documentation": ""
            },
            {
              "name": "public fun spans(): List<ForgeSpan>;",
              "line": 112,
              "signature": "public fun spans(): List<ForgeSpan>;",
              "documentation": ""
            },
            {
              "name": "public fun events(): List<ForgeEvent>;",
              "line": 119,
              "signature": "public fun events(): List<ForgeEvent>;",
              "documentation": ""
            },
            {
              "name": "public fun metrics(): List<MetricPoint>;",
              "line": 126,
              "signature": "public fun metrics(): List<MetricPoint>;",
              "documentation": ""
            },
            {
              "name": "public fun spansByName(namePrefix: String): List<ForgeSpan> =",
              "line": 134,
              "signature": "public fun spansByName(namePrefix: String): List<ForgeSpan> =",
              "documentation": ""
            },
            {
              "name": "public fun spanCount(): Int;",
              "line": 142,
              "signature": "public fun spanCount(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun eventCount(): Int;",
              "line": 149,
              "signature": "public fun eventCount(): Int;",
              "documentation": ""
            },
            {
              "name": "public fun clear()",
              "line": 154,
              "signature": "public fun clear()",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/TelemetryContract.kt",
          "sha256": "b176db583e88b6f829a58bd497954f0040fca9b5d9aadc1e05744ae6b1929ff4",
          "artifactSha256": "9c0068dac5ca1e119594dae7092302f089b4a26ae335ff44ae4fe41b49815b03",
          "url": "/reference/source/forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/TelemetryContract.kt.txt",
          "declarations": [
            {
              "name": "public interface TelemetryCollector",
              "line": 24,
              "signature": "public interface TelemetryCollector",
              "documentation": ""
            },
            {
              "name": "public fun recordSpan(span: ForgeSpan)",
              "line": 33,
              "signature": "public fun recordSpan(span: ForgeSpan)\n\n/**\n* Record a telemetry event.\n*\n* ANVIL Spec Section 12.4\n*\n* @param event The event to record.\n*/\npublic fun recordEvent(event: ForgeEvent)\n\n/**\n* Record a metric data point.\n*\n* ANVIL Spec Section 12.7 -- Metrics\n*\n* @param name The metric name (e.g., \"forge.agent.tool_invocations\").\n* @param value The metric value.\n* @param attributes Optional attributes for dimensional querying.\n*/\npublic fun recordMetric(\nname: String,\nvalue: Double,\nattributes: Map<String, SpanAttribute>;",
              "documentation": ""
            },
            {
              "name": "public fun recordEvent(event: ForgeEvent)",
              "line": 42,
              "signature": "public fun recordEvent(event: ForgeEvent)\n\n/**\n* Record a metric data point.\n*\n* ANVIL Spec Section 12.7 -- Metrics\n*\n* @param name The metric name (e.g., \"forge.agent.tool_invocations\").\n* @param value The metric value.\n* @param attributes Optional attributes for dimensional querying.\n*/\npublic fun recordMetric(\nname: String,\nvalue: Double,\nattributes: Map<String, SpanAttribute>;",
              "documentation": ""
            },
            {
              "name": "public fun recordMetric(",
              "line": 53,
              "signature": "public fun recordMetric(\nname: String,\nvalue: Double,\nattributes: Map<String, SpanAttribute>;",
              "documentation": ""
            },
            {
              "name": "public fun flush(timeoutMs: Long;",
              "line": 68,
              "signature": "public fun flush(timeoutMs: Long;",
              "documentation": ""
            },
            {
              "name": "public fun shutdown()",
              "line": 75,
              "signature": "public fun shutdown()\n}\n\n/**\n* A telemetry collector that discards all data.\n*\n* Used as the default when no telemetry backend is configured.\n*\n* ANVIL Spec Section 12.5\n*/\npublic object NoopCollector : TelemetryCollector",
              "documentation": ""
            },
            {
              "name": "public object NoopCollector : TelemetryCollector",
              "line": 85,
              "signature": "public object NoopCollector : TelemetryCollector",
              "documentation": ""
            }
          ]
        },
        {
          "path": "forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/TelemetryError.kt",
          "sha256": "7c19199a0bf719fe5f4dc1c4a6b83b9155015abd940430d8b21e5842cfc7b169",
          "artifactSha256": "5f3c6d4ac04e505fc1a91e4db3a6fb94b377241a54d69d17590fdd88b50857ea",
          "url": "/reference/source/forge-kt/forge-telemetry/src/main/kotlin/com/l1fe/forge/telemetry/TelemetryError.kt.txt",
          "declarations": [
            {
              "name": "public sealed class ForgeTelemetryError(",
              "line": 17,
              "signature": "public sealed class ForgeTelemetryError(\nmessage: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class SpanError(",
              "line": 30,
              "signature": "public class SpanError(\npublic val spanName: String,\npublic val reason: String,\n) : ForgeTelemetryError(\n\"telemetry span '$spanName' error: $reason (see ANVIL Spec SS12.3)\"\n)\n\n/**\n* The audit trail could not be written.\n*\n* ANVIL Spec Section 12.6 -- Audit Trail\n*\n* @property entryType The type of audit entry that failed.\n* @property reason The failure reason.\n*/\npublic class AuditWriteFailed(\npublic val entryType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val spanName: String,",
              "line": 31,
              "signature": "public val spanName: String,\npublic val reason: String,\n) : ForgeTelemetryError(\n\"telemetry span '$spanName' error: $reason (see ANVIL Spec SS12.3)\"\n)\n\n/**\n* The audit trail could not be written.\n*\n* ANVIL Spec Section 12.6 -- Audit Trail\n*\n* @property entryType The type of audit entry that failed.\n* @property reason The failure reason.\n*/\npublic class AuditWriteFailed(\npublic val entryType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 32,
              "signature": "public val reason: String,\n) : ForgeTelemetryError(\n\"telemetry span '$spanName' error: $reason (see ANVIL Spec SS12.3)\"\n)\n\n/**\n* The audit trail could not be written.\n*\n* ANVIL Spec Section 12.6 -- Audit Trail\n*\n* @property entryType The type of audit entry that failed.\n* @property reason The failure reason.\n*/\npublic class AuditWriteFailed(\npublic val entryType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class AuditWriteFailed(",
              "line": 45,
              "signature": "public class AuditWriteFailed(\npublic val entryType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val entryType: String,",
              "line": 46,
              "signature": "public val entryType: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 47,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class ExportFailed(",
              "line": 61,
              "signature": "public class ExportFailed(\npublic val backend: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val backend: String,",
              "line": 62,
              "signature": "public val backend: String,\npublic val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public val reason: String,",
              "line": 63,
              "signature": "public val reason: String,\ncause: Throwable?;",
              "documentation": ""
            },
            {
              "name": "public class CapacityExceeded(",
              "line": 77,
              "signature": "public class CapacityExceeded(\npublic val collectorName: String,\npublic val currentSize: Int,\npublic val maxSize: Int,\n) : ForgeTelemetryError(\n\"telemetry collector '$collectorName' capacity exceeded: \" +\n\"$currentSize items (max $maxSize)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val collectorName: String,",
              "line": 78,
              "signature": "public val collectorName: String,\npublic val currentSize: Int,\npublic val maxSize: Int,\n) : ForgeTelemetryError(\n\"telemetry collector '$collectorName' capacity exceeded: \" +\n\"$currentSize items (max $maxSize)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val currentSize: Int,",
              "line": 79,
              "signature": "public val currentSize: Int,\npublic val maxSize: Int,\n) : ForgeTelemetryError(\n\"telemetry collector '$collectorName' capacity exceeded: \" +\n\"$currentSize items (max $maxSize)\"\n)\n}",
              "documentation": ""
            },
            {
              "name": "public val maxSize: Int,",
              "line": 80,
              "signature": "public val maxSize: Int,\n) : ForgeTelemetryError(\n\"telemetry collector '$collectorName' capacity exceeded: \" +\n\"$currentSize items (max $maxSize)\"\n)\n}",
              "documentation": ""
            }
          ]
        }
      ]
    },
    {
      "name": "com.l1fe.forge:forge-sdk",
      "language": "kotlin",
      "version": "0.1.0",
      "description": "Kotlin/JVM forge-sdk module.",
      "manifest": "forge-kt/forge-sdk/build.gradle.kts",
      "manifestSha256": "4ba6dd049ba1ce87f399847bb48b6e6bfe3a3e6a2e885f679eb249d0aebed6f0",
      "status": "source-reference",
      "registryPublicationVerified": false,
      "route": "/libraries/kotlin/forge-sdk",
      "features": {},
      "files": [
        {
          "path": "forge-kt/forge-sdk/src/main/kotlin/com/l1fe/forge/sdk/ForgeSDK.kt",
          "sha256": "8f7687a5139f18a2df0e5b8979d1cdd43b6bb12b8e5b0084dcbfb0f2a5ca02e4",
          "artifactSha256": "4bca2754182dac2ffd7f49432c451cab951bfe14cfc3a341700aadd5ec190022",
          "url": "/reference/source/forge-kt/forge-sdk/src/main/kotlin/com/l1fe/forge/sdk/ForgeSDK.kt.txt",
          "declarations": [
            {
              "name": "public object ForgeSDK",
              "line": 43,
              "signature": "public object ForgeSDK",
              "documentation": ""
            },
            {
              "name": "public const val VERSION: String;",
              "line": 46,
              "signature": "public const val VERSION: String;",
              "documentation": ""
            },
            {
              "name": "public const val ANVIL_VERSION: String;",
              "line": 49,
              "signature": "public const val ANVIL_VERSION: String;",
              "documentation": ""
            },
            {
              "name": "public fun createHmrIdentity(namespace: String;",
              "line": 59,
              "signature": "public fun createHmrIdentity(namespace: String;",
              "documentation": ""
            },
            {
              "name": "public fun createMhrIdentity(namespace: String;",
              "line": 68,
              "signature": "public fun createMhrIdentity(namespace: String;",
              "documentation": ""
            },
            {
              "name": "public fun deriveAgentIdentity(",
              "line": 79,
              "signature": "public fun deriveAgentIdentity(\nparent: ForgeAgentIdentity,\nagentName: String,\nnamespace: String;",
              "documentation": ""
            },
            {
              "name": "public fun setCryptoBridge(bridge: CryptoBridge)",
              "line": 91,
              "signature": "public fun setCryptoBridge(bridge: CryptoBridge)",
              "documentation": ""
            },
            {
              "name": "public fun createAgent(config: AgentConfig): ToolLoopAgent;",
              "line": 103,
              "signature": "public fun createAgent(config: AgentConfig): ToolLoopAgent;",
              "documentation": ""
            },
            {
              "name": "public fun authorizeToolInvocation(request: ToolAuthorizationRequest): ToolAuthorizationDecision =",
              "line": 113,
              "signature": "public fun authorizeToolInvocation(request: ToolAuthorizationRequest): ToolAuthorizationDecision =",
              "documentation": ""
            },
            {
              "name": "public fun delegateCapabilities(request: DelegationRequest): DelegationResult =",
              "line": 122,
              "signature": "public fun delegateCapabilities(request: DelegationRequest): DelegationResult =",
              "documentation": ""
            },
            {
              "name": "public fun createVectorStore(): VectorStore;",
              "line": 132,
              "signature": "public fun createVectorStore(): VectorStore;",
              "documentation": ""
            },
            {
              "name": "public fun createHealthMonitor(): HealthMonitor;",
              "line": 141,
              "signature": "public fun createHealthMonitor(): HealthMonitor;",
              "documentation": ""
            },
            {
              "name": "public fun createHealthMonitor(config: HealthMonitorConfig): HealthMonitor =",
              "line": 149,
              "signature": "public fun createHealthMonitor(config: HealthMonitorConfig): HealthMonitor =",
              "documentation": ""
            },
            {
              "name": "public fun createMcpClient(transport: McpTransport): McpClient;",
              "line": 160,
              "signature": "public fun createMcpClient(transport: McpTransport): McpClient;",
              "documentation": ""
            },
            {
              "name": "public fun createMcpServer(",
              "line": 169,
              "signature": "public fun createMcpServer(\nname: String;",
              "documentation": ""
            }
          ]
        }
      ]
    }
  ]
}
