feat(extensions): add OAuth setup UI for WASM tools + display name labels (#437)

Add setup.required_secrets to tool capabilities.json files so users can
configure OAuth client credentials (Google, Slack, Okta, Telegram) through
the Extensions UI Setup modal instead of environment variables.

- Add ToolSetupSchema/ToolSecretSetupSchema types to capabilities_schema.rs
- Extend get_setup_schema(), save_setup_secrets(), list() to handle WasmTool
- Extract load_tool_capabilities() helper to reduce duplication
- Auto-activate tools after saving setup secrets
- Show display_name labels (Channel/Tool/MCP) in extension cards
- Update button labels: "Setup" when unconfigured, "Reconfigure" when set
- Replace "Set" badge with checkmark in configure modal
- Fix innerHTML XSS pattern in slash autocomplete (use textContent)
- Add tests for ToolSetupSchema parsing and resolve_nested promotion
- Update registry display names (e.g. "Telegram Channel" vs "Telegram Tool")

Co-authored-by: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
Henry Park
2026-02-28 19:57:55 -08:00
committed by GitHub
co-authored by Claude Sonnet 4.6
parent 9b25e7566c
commit afb49597ac
22 changed files with 418 additions and 75 deletions
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "discord",
"display_name": "Discord",
"display_name": "Discord Channel",
"kind": "channel",
"version": "0.1.0",
"description": "Discord Gateway/Webhook channel for slash commands, buttons, and messages",
"description": "Talk to your agent in Discord",
"keywords": ["messaging", "chat", "discord", "bot"],
"source": {
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "slack",
"display_name": "Slack",
"display_name": "Slack Channel",
"kind": "channel",
"version": "0.1.0",
"description": "Slack Events API channel for receiving and responding to Slack messages",
"description": "Talk to your agent in Slack",
"keywords": ["messaging", "chat", "workspace", "slack"],
"source": {
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "telegram",
"display_name": "Telegram",
"display_name": "Telegram Channel",
"kind": "channel",
"version": "0.1.0",
"description": "Telegram Bot API channel for receiving and responding to messages",
"description": "Talk to your agent through a Telegram bot",
"keywords": ["messaging", "bot", "chat", "telegram"],
"source": {
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "whatsapp",
"display_name": "WhatsApp",
"display_name": "WhatsApp Channel",
"kind": "channel",
"version": "0.1.0",
"description": "WhatsApp Cloud API channel for receiving and responding to messages",
"description": "Talk to your agent through WhatsApp",
"keywords": ["messaging", "chat", "whatsapp", "meta"],
"source": {
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "slack-tool",
"display_name": "Slack",
"display_name": "Slack Tool",
"kind": "tool",
"version": "0.1.0",
"description": "Post messages, read channels, and manage conversations via Slack API",
"description": "Your agent uses Slack to post and read messages in your workspace",
"keywords": ["messaging", "chat", "workspace"],
"source": {
+2 -2
View File
@@ -1,9 +1,9 @@
{
"name": "telegram-mtproto",
"display_name": "Telegram",
"display_name": "Telegram Tool",
"kind": "tool",
"version": "0.1.0",
"description": "Telegram user-mode integration via MTProto for messages and contacts",
"description": "Your agent uses your Telegram account to read and send messages",
"keywords": ["messaging", "chat", "telegram", "mtproto"],
"source": {