liminal-cli 0.3.28

The liminal command: serve the network, maintain its stores, or serve its discovery MCP over stdio
Documentation
use super::config::Harness;

fn harness(extra: &str) -> anyhow::Result<Harness> {
    Ok(toml::from_str(&format!(
        "id='codex'\nprogram='/bin/true'\nargs=[]\n{extra}"
    ))?)
}

#[test]
fn every_bound_is_positive_and_defaults_are_explicit() -> anyhow::Result<()> {
    let configured = harness("")?;
    configured.validate()?;
    assert_eq!(configured.prompt_queue, 32);
    assert_eq!(configured.content_bytes, 65536);
    assert_eq!(configured.pending_permissions, 1024);
    for field in [
        "prompt_queue",
        "content_bytes",
        "acp_frame_bytes",
        "pending_permissions",
        "write_queue",
        "read_queue",
        "stream_queue",
        "issuer_response_bytes",
    ] {
        assert!(harness(&format!("{field}=0"))?.validate().is_err());
    }
    Ok(())
}

#[test]
fn no_configuration_can_add_an_approval_policy() {
    for field in [
        "auto_approve=true",
        "permission_policy='approve'",
        "permission='allow-once'",
        "permission='deny'",
        "id='cdx'",
    ] {
        assert!(harness(field).is_err());
    }
}

#[test]
fn relative_workspaces_and_empty_resume_ids_are_refused() -> anyhow::Result<()> {
    assert!(harness("cwd='relative'")?.validate().is_err());
    assert!(harness("session='' ")?.validate().is_err());
    Ok(())
}

#[test]
fn a_listen_table_cannot_silently_widen_or_override_the_host() -> anyhow::Result<()> {
    for text in [
        "subjects=['other.inbox']",
        "subjects=['agents.a.inbox','agents.a.inbox']",
        "listen_bound=0",
        "content_bytes=0",
    ] {
        let table: toml::Value = toml::from_str(text)?;
        assert!(super::config::validate_listen(Some(&table), "a", 65536).is_err());
    }
    let table: toml::Value = toml::from_str("subjects=['agents.a.inbox']")?;
    super::config::validate_listen(Some(&table), "a", 65536)?;
    Ok(())
}

/// The docs site's hosted-agent seat example loads as written.
#[test]
fn the_published_agent_seat_example_loads() -> anyhow::Result<()> {
    let examples: serde_json::Value =
        serde_json::from_str(include_str!("../../../../docs/site/_data/examples.json"))?;
    let code = examples["agent-seat-config"]["code"]
        .as_str()
        .ok_or_else(|| anyhow::anyhow!("examples.json has no agent-seat-config"))?;
    let dir = tempfile::tempdir()?;
    let path = dir.path().join("agent-seat.toml");
    std::fs::write(&path, code)?;
    super::config::Seat::load(&path)?;
    Ok(())
}

/// Writes a seat with `credential` (the `[lys]` or `[open]` tables) and a harness.
fn seat(server: &str, credential: &str) -> anyhow::Result<anyhow::Result<super::config::Seat>> {
    let dir = tempfile::tempdir()?;
    let path = dir.path().join("seat.toml");
    std::fs::write(
        &path,
        format!(
            "server = \"{server}\"\nchannel = \"console.topology\"\n{credential}\n\
             [limits]\nframe_bytes = 65536\nrecord_bytes = 1048576\nreply_timeout_ms = 10000\n\
             flow_steps = 8\nrequest_bytes = 65536\n\n\
             [harness]\nid = \"claude-code\"\nprogram = \"/bin/true\"\nargs = []\ncwd = \"/tmp\"\n"
        ),
    )?;
    Ok(super::config::Seat::load(&path))
}

/// Tom, 25 Oct: an assistant runs on an open exchange with no Lys; its seat
/// is the station `[open] name` declares and carries no pass.
#[test]
fn an_open_seat_hosts_the_station_its_name_declares() -> anyhow::Result<()> {
    let loaded = seat("127.0.0.1:7700", "[open]\nname = \"assistant\"\n")??;
    assert_eq!(loaded.name, "assistant");
    assert_eq!(loaded.ticket.agent.as_deref(), Some("assistant"));
    assert!(matches!(
        &loaded.ticket.credential,
        crate::Credential::Open { name: Some(name) } if name == "assistant"
    ));
    let networked = seat(
        "wss://liminal.example/ws",
        "[open]\nreach = \"network\"\nname = \"assistant\"\n",
    )??;
    assert_eq!(networked.name, "assistant");
    Ok(())
}

#[test]
fn an_open_seat_without_a_name_reach_or_single_credential_is_refused() -> anyhow::Result<()> {
    for (server, credential, words) in [
        ("127.0.0.1:7700", "[open]\n", "needs [open] name"),
        (
            "127.0.0.1:7700",
            "[open]\nname = \"Not Valid\"\n",
            "needs [open] name",
        ),
        ("127.0.0.1:7700", "[open]\nname = \"a.b\"\n", "one segment"),
        (
            "wss://liminal.example/ws",
            "[open]\nname = \"assistant\"\n",
            "reaches a loopback",
        ),
        (
            "127.0.0.1:7700",
            "[open]\nname = \"assistant\"\n[lys]\nissuer = \"https://lys.example\"\nagent = \"assistant\"\nkey_file = \"/k\"\n",
            "exactly one of [lys] and [open]",
        ),
        ("127.0.0.1:7700", "", "exactly one of [lys] and [open]"),
    ] {
        let Err(error) = seat(server, credential)? else {
            anyhow::bail!("{credential:?} on {server} loaded");
        };
        assert!(error.to_string().contains(words), "{error}");
    }
    Ok(())
}