agent-phone 0.1.0

Minimal sync RPC between two AI agents (Rust port of @p-vbordei/agent-phone). Self-custody keys, Noise-framework handshake, DID-bound WebSocket.
Documentation
use agent_phone::did::{decode_did_key, ed25519_priv_to_x25519, ed25519_pub_to_x25519};
use agent_phone::noise::x25519_public_from_private;
use agent_phone::{encode_did_key, generate_key_pair};

#[test]
fn encode_decode_did_key_roundtrip() {
    let kp = generate_key_pair();
    let did = encode_did_key(&kp.public_key).unwrap();
    assert!(did.starts_with("did:key:z"));
    let decoded = decode_did_key(&did).unwrap();
    assert_eq!(decoded, kp.public_key);
}

#[test]
fn decode_did_key_rejects_bad_multicodec() {
    let did = "did:key:zQ3shokFTS3brHcDQrn82RUDfCZESWL1ZdCEJwekUDPQiYBme";
    assert!(decode_did_key(did).is_err());
}

#[test]
fn decode_did_key_rejects_truncated() {
    assert!(decode_did_key("did:key:zR2").is_err());
}

#[test]
fn ed25519_to_x25519_conversion_is_consistent() {
    let kp = generate_key_pair();
    let x_priv = ed25519_priv_to_x25519(&kp.private_key);
    let x_pub = ed25519_pub_to_x25519(&kp.public_key);
    assert_eq!(x25519_public_from_private(&x_priv), x_pub);
}