harn-stdlib 0.10.25

Embedded Harn standard library source catalog
Documentation
pub type AgentToolLifecycleErrorCategory = "schema_validation" | "tool_error" | "mcp_server_error" | "host_bridge_error" | "permission_denied" | "rejected_loop" | "parse_aborted" | "timeout" | "network" | "resource_busy" | "cancelled" | "abandoned_at_loop_exit" | "unknown"

pub type AgentToolMutationStatus = "applied" | "not_applied" | "unknown"

const TOOL_LIFECYCLE_ERROR_CATEGORIES = [
  "schema_validation",
  "tool_error",
  "mcp_server_error",
  "host_bridge_error",
  "permission_denied",
  "rejected_loop",
  "parse_aborted",
  "timeout",
  "network",
  "resource_busy",
  "cancelled",
  "abandoned_at_loop_exit",
  "unknown",
]

/**
 * Normalize VM, provider, and middleware failures to the public tool-event taxonomy.
 *
 * @effects: []
 * @errors: []
 */
pub fn agent_tool_lifecycle_error_category(raw: any) -> AgentToolLifecycleErrorCategory? {
  if raw == nil {
    return nil
  }
  const category = to_string(raw)
  if category == "" {
    return nil
  }
  if contains(TOOL_LIFECYCLE_ERROR_CATEGORIES, category) {
    return category
  }
  if contains(["intra_turn_failure_fanout_collapsed", "intra_turn_resource_fail_fast"], category) {
    return "rejected_loop"
  }
  if contains(["tool_rejected", "consent_denied", "egress_blocked", "scope_violation"], category) {
    return "permission_denied"
  }
  if contains(
    ["schema_violation", "schema_stream_aborted", "validator_failure", "repair_failed"],
    category,
  ) {
    return "schema_validation"
  }
  if contains(["rate_limit", "overloaded", "server_error", "transient_network"], category) {
    return "network"
  }
  if contains(["tool_middleware_exception", "tool_parallel_dispatch_exception", "generic"], category) {
    return "tool_error"
  }
  if contains(["auth", "channel_closed", "not_found", "circuit_open", "budget_exceeded"], category) {
    return "host_bridge_error"
  }
  return "unknown"
}

/**
 * Normalize execution-boundary mutation evidence without inspecting rendered output.
 *
 * @effects: []
 * @errors: []
 */
pub fn agent_tool_mutation_status(raw: any) -> AgentToolMutationStatus {
  if raw == nil {
    return "unknown"
  }
  const status = to_string(raw)
  if contains(["applied", "not_applied", "unknown"], status) {
    return status
  }
  return "unknown"
}