agent-shield 0.8.7

Security scanner for AI agent extensions — offline-first, multi-framework, SARIF output
Documentation
use agentshield::runtime::{
    RuntimeAction, RuntimeEvent, RuntimeEventSource, RuntimeGuardResult, RuntimeSchemaVersion,
    RuntimeVerdict,
};
use serde_json::json;

#[test]
fn runtime_schema_version_serializes_as_v1() {
    let serialized = serde_json::to_string(&RuntimeSchemaVersion::V1).unwrap();
    assert_eq!(serialized, "\"v1\"");
}

#[test]
fn runtime_verdict_allow_serializes_as_allow() {
    let serialized = serde_json::to_string(&RuntimeVerdict::Allow).unwrap();
    assert_eq!(serialized, "\"allow\"");
}

#[test]
fn runtime_event_round_trips_through_json() {
    let event = RuntimeEvent {
        schema_version: RuntimeSchemaVersion::V1,
        source: RuntimeEventSource::Mcp,
        action: RuntimeAction::ToolCall,
        tool_name: Some("search".to_string()),
        command: None,
        url: None,
        path: None,
        arguments: json!({ "query": "agent policy" }),
        redacted: false,
    };

    let serialized = serde_json::to_string(&event).unwrap();
    let deserialized: RuntimeEvent = serde_json::from_str(&serialized).unwrap();

    assert_eq!(deserialized, event);
}

#[test]
fn runtime_guard_result_serializes_empty_findings_array() {
    let result = RuntimeGuardResult {
        schema_version: RuntimeSchemaVersion::V1,
        verdict: RuntimeVerdict::Allow,
        findings: Vec::new(),
        redacted: false,
    };

    let serialized = serde_json::to_value(result).unwrap();
    assert_eq!(serialized["findings"], json!([]));
}