diff --git a/apps/microbridge-ui/src/components/IntegrationCard.tsx b/apps/microbridge-ui/src/components/IntegrationCard.tsx new file mode 100644 index 0000000..3b92751 --- /dev/null +++ b/apps/microbridge-ui/src/components/IntegrationCard.tsx @@ -0,0 +1,72 @@ +import type { ReactNode } from "react"; +import type { ThemeTokens } from "../lib/theme"; +import { + TRAFFIC_COLORS, + type TrafficLight, +} from "../lib/hosts"; + +export function IntegrationCard({ + name, + badge, + diagnostic, + light, + label, + theme, + children, +}: { + name: string; + badge?: string; + diagnostic: string; + light: TrafficLight; + label: string; + theme: ThemeTokens; + children?: ReactNode; +}) { + const colors = TRAFFIC_COLORS[light]; + return ( +
- Every supported app is listed here. Green integrations are ready; - everything else shows exactly what it needs. ChatGPT, Claude - Desktop, Synara, Conductor, and CNVS are built in. Cursor, Factory, - T3 Code, and OpenCode connect only after you choose to enable them. + Every supported app is its own card. Green means live threads or a + healthy watcher; yellow means waiting or setup; red means error. + ChatGPT, Claude Desktop, Synara, Conductor, and CNVS are built in. + Cursor, Factory, T3 Code, and OpenCode connect after you enable them.
- CNVS-hosted Codex and Claude terminals replace matching raw journal - cards while CNVS owns them. OpenCode uses its official global plugin - API for lifecycle and interrupt. T3-hosted threads are identified automatically. For controls, enable - Network access in T3 Code Settings → Connections, create a link under - Authorized clients, then paste it below. Factory hooks are merged - without replacing your existing hooks. + Synara and the desktop apps share Claude/Codex journals — they do + not need a separate adapter. CNVS-hosted terminals replace matching + raw journal cards while CNVS owns them. OpenCode uses its official + global plugin API. For T3 controls, enable Network access in T3 Code + Settings → Connections, create a link under Authorized clients, then + paste it below. Factory hooks are merged without replacing yours.
{adapterMessage && ({adapterMessage}
)} - {[ - { - label: "Connected", - connected: true, - integrations: snapshot.adapters.filter((item) => item.state === "connected"), - }, - { - label: "Not connected", - connected: false, - integrations: snapshot.adapters.filter((item) => item.state !== "connected"), - }, - ].map((group) => ( + {groups.map((group) => (