liminal-cli 0.3.3

The liminal command: serve the network, maintain its stores, or serve its discovery MCP over stdio
Documentation
use super::handshake::Version;
use super::permission::{Decision, Request, decide};
use serde_json::json;

fn request() -> anyhow::Result<Request> {
    Request::decode(
        Version::One,
        json!({"sessionId":"s", "toolCall":{"toolCallId":"t", "title":"Review"},
        "options":[{"optionId":"durable","name":"Remember","kind":"allow_always"},
        {"optionId":"yes","name":"Approve","kind":"allow_once"},
        {"optionId":"no","name":"Refuse","kind":"reject_once"}]}),
        "s",
        65536,
    )
}

#[test]
fn only_an_executed_draft_can_select_the_narrow_approval() -> anyhow::Result<()> {
    let request = request()?;
    assert_eq!(request.words["title"], "Review");
    assert_eq!(
        decide(&request, Decision::Executed)["outcome"]["optionId"],
        "yes"
    );
    assert_eq!(
        decide(&request, Decision::Refused)["outcome"]["optionId"],
        "no"
    );
    assert_eq!(
        decide(&request, Decision::Cancelled)["outcome"]["outcome"],
        "cancelled"
    );
    Ok(())
}

#[test]
fn a_durable_option_never_substitutes_for_a_one_shot_decision() -> anyhow::Result<()> {
    let request = Request::decode(
        Version::One,
        json!({"sessionId":"s", "toolCall":{"toolCallId":"t", "title":"Review"},
        "options":[{"optionId":"durable","name":"Remember","kind":"allow_always"}]}),
        "s",
        65536,
    )?;
    assert_eq!(
        decide(&request, Decision::Executed)["outcome"]["outcome"],
        "cancelled"
    );
    assert_eq!(
        decide(&request, Decision::Refused)["outcome"]["outcome"],
        "cancelled"
    );
    Ok(())
}

#[test]
fn words_keep_the_options_but_exclude_raw_input_and_output() -> anyhow::Result<()> {
    let request = request()?;
    assert_eq!(request.words["options"].as_array().map(Vec::len), Some(3));
    assert_eq!(request.act, "agent_permission");
    Ok(())
}