use polyc_llm::ToolSpec;
use serde_json::json;
pub const TOOL_NAME: &str = "invite";
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![invite_spec()]
}
#[must_use]
pub fn invite_spec() -> ToolSpec {
ToolSpec::new(
TOOL_NAME,
"For an admin only: invite a specific person to Polychrome. Use it when \
an admin asks to invite, onboard, or give someone access — for example \
\"create an invite for @Vitor\" or \"give @sam access\". 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. The invite goes only to \
that person, privately, as a single-use code sent to their direct \
message; you never see the code and must not ask for or repeat it — just \
confirm the invite is on its way. This is for onboarding a PERSON, which \
is different from wallet_link (connecting someone's own spending \
wallet). If the person asking isn't an admin, it returns a refusal \
rather than an invite.",
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("Invite someone to Polychrome (admin)")
}