diff --git a/ui/src/components/AgentConfigForm.tsx b/ui/src/components/AgentConfigForm.tsx index 3eb345ff..fedd300c 100644 --- a/ui/src/components/AgentConfigForm.tsx +++ b/ui/src/components/AgentConfigForm.tsx @@ -801,6 +801,18 @@ function AdapterEnvironmentResult({ result }: { result: AdapterEnvironmentTestRe /* ---- Internal sub-components ---- */ +const ENABLED_ADAPTER_TYPES = new Set(["claude_local", "codex_local"]); + +/** Display list includes all real adapter types plus UI-only coming-soon entries. */ +const ADAPTER_DISPLAY_LIST: { value: string; label: string; comingSoon: boolean }[] = [ + ...AGENT_ADAPTER_TYPES.map((t) => ({ + value: t, + label: adapterLabels[t] ?? t, + comingSoon: !ENABLED_ADAPTER_TYPES.has(t), + })), + { value: "cursor", label: "Cursor", comingSoon: true }, +]; + function AdapterTypeDropdown({ value, onChange, @@ -817,16 +829,25 @@ function AdapterTypeDropdown({ - {AGENT_ADAPTER_TYPES.map((t) => ( + {ADAPTER_DISPLAY_LIST.map((item) => ( ))} diff --git a/ui/src/components/AgentProperties.tsx b/ui/src/components/AgentProperties.tsx index ad96d8ae..e4f7f01b 100644 --- a/ui/src/components/AgentProperties.tsx +++ b/ui/src/components/AgentProperties.tsx @@ -18,6 +18,7 @@ const adapterLabels: Record = { claude_local: "Claude (local)", codex_local: "Codex (local)", openclaw: "OpenClaw", + cursor: "Cursor", process: "Process", http: "HTTP", }; diff --git a/ui/src/components/OnboardingWizard.tsx b/ui/src/components/OnboardingWizard.tsx index d76399db..726e03c1 100644 --- a/ui/src/components/OnboardingWizard.tsx +++ b/ui/src/components/OnboardingWizard.tsx @@ -31,6 +31,7 @@ import { Terminal, Globe, Sparkles, + MousePointer2, Check, Loader2, FolderOpen, @@ -383,34 +384,49 @@ export function OnboardingWizard() { label: "OpenClaw", icon: Bot, desc: "Notify OpenClaw webhook", + comingSoon: true, + }, + { + value: "cursor" as const, + label: "Cursor", + icon: MousePointer2, + desc: "Cursor AI agent", + comingSoon: true, }, { value: "process" as const, label: "Shell Command", icon: Terminal, desc: "Run a process", + comingSoon: true, }, { value: "http" as const, label: "HTTP Webhook", icon: Globe, desc: "Call an endpoint", + comingSoon: true, }, - ] as const).map((opt) => ( + ]).map((opt) => ( ))} diff --git a/ui/src/components/agent-config-primitives.tsx b/ui/src/components/agent-config-primitives.tsx index e17a3716..c56ebf7a 100644 --- a/ui/src/components/agent-config-primitives.tsx +++ b/ui/src/components/agent-config-primitives.tsx @@ -53,6 +53,7 @@ export const adapterLabels: Record = { claude_local: "Claude (local)", codex_local: "Codex (local)", openclaw: "OpenClaw", + cursor: "Cursor", process: "Process", http: "HTTP", }; diff --git a/ui/src/pages/InviteLanding.tsx b/ui/src/pages/InviteLanding.tsx index 61466bdb..07df8fe5 100644 --- a/ui/src/pages/InviteLanding.tsx +++ b/ui/src/pages/InviteLanding.tsx @@ -15,14 +15,17 @@ const joinAdapterOptions: AgentAdapterType[] = [ ...AGENT_ADAPTER_TYPES.filter((type): type is Exclude => type !== "openclaw"), ]; -const adapterLabels: Record = { +const adapterLabels: Record = { claude_local: "Claude (local)", codex_local: "Codex (local)", openclaw: "OpenClaw", + cursor: "Cursor", process: "Process", http: "HTTP", }; +const ENABLED_INVITE_ADAPTERS = new Set(["claude_local", "codex_local"]); + function dateTime(value: string) { return new Date(value).toLocaleString(); } @@ -42,7 +45,7 @@ export function InviteLandingPage() { const token = (params.token ?? "").trim(); const [joinType, setJoinType] = useState("human"); const [agentName, setAgentName] = useState(""); - const [adapterType, setAdapterType] = useState("openclaw"); + const [adapterType, setAdapterType] = useState("claude_local"); const [capabilities, setCapabilities] = useState(""); const [result, setResult] = useState<{ kind: "bootstrap" | "join"; payload: unknown } | null>(null); const [error, setError] = useState(null); @@ -255,8 +258,8 @@ export function InviteLandingPage() { onChange={(event) => setAdapterType(event.target.value as AgentAdapterType)} > {joinAdapterOptions.map((type) => ( - ))}