use polyc_llm::ToolSpec;
use serde_json::json;
pub const TOOL_NAME: &str = "revoke";
pub const ALL: &[&str] = &[TOOL_NAME];
pub const ARG_TARGET_USER_ID: &str = "target_user_id";
#[must_use]
pub fn all_specs() -> Vec<ToolSpec> {
vec![revoke_spec()]
}
#[must_use]
pub fn revoke_spec() -> ToolSpec {
ToolSpec::new(
TOOL_NAME,
"For an admin only: remove a specific person's access to Polychrome. Use \
it when an admin asks to remove, revoke, or uninvite someone's access — \
for example \"remove @sam's access\" or \"revoke @Vitor\". Pass the \
target's user id EXACTLY as it appears in the mention markup in the \
message (the id inside `<@...>`), never a typed-out name. This cuts off \
that person's access to Polychrome across every account they've linked, \
and cancels any invite still waiting for them — an admin can always \
invite them again later. This is for removing a PERSON's system access, \
which is different from unlink_self (disconnecting someone's OWN \
spending wallet or email) and different from someone simply leaving this \
conversation (no tool needed for that). If the person asking isn't an \
admin, it returns a refusal rather than removing anyone.",
json!({
"type": "object",
"properties": {
ARG_TARGET_USER_ID: {
"type": "string",
"description": "The target's provider-native user id, taken \
verbatim from the mention markup (`<@U...>`) in the \
message — not a display name or handle."
}
},
"required": [ARG_TARGET_USER_ID],
"additionalProperties": false
}),
)
.titled("Remove someone's access to Polychrome (admin)")
}