import { FileCode2, Boxes, Wrench } from 'lucide-react'; import type { ReactNode } from 'react'; const LOGO_CDN = 'https://logos.composio.dev/api'; /** * LocalWorkbenchFlow: branded replacement for the plain `host → sandbox → tools` * mermaid diagram on the local-workbench PR reviewer page. * * Reads left-to-right as the split that defines a local workbench: the Host * creates a session with code execution turned off and starts a * sandbox you own; the Sandbox runs the reviewer, calling run_composio_tool * back out for each GitHub action; Composio resolves and executes those tool * calls under the user's connection and returns results. Tool execution lives * in your box; discovery and auth stay managed. * * Server component, no client JS. Adapts to light/dark via fd-* tokens. */ export function LocalWorkbenchFlow() { return (
{/* header strip: mono, matches the other branded flow visuals */}
local-sandbox.runtime code runs in your box
{/* ── Host ───────────────────────────────────────────────── */}
Your orchestrator
src/runner.ts

Creates the session with{' '} workbench.enable: false, then starts a sandbox you own.

helper + env sandbox

{/* ── Sandbox (yours) ────────────────────────────────────── */}
Reviewer agent
your filesystem + shell

Clones the PR, installs deps, runs the repo's real checks, all inside your boundary.

run_composio_tool Composio

{/* ── Composio (the managed side) ────────────────────────── */}
{/* footer caption */}
host (session, execution off) your sandbox (runs checks) run_composio_tool{' '} Composio (resolve + execute) grounded PR comment
); } function Column({ children }: { children: ReactNode }) { return
{children}
; } function Lane({ label, accent = false }: { label: string; accent?: boolean }) { return (
); } /** * Directional connector shown between columns. Horizontal arrow on desktop, * hidden on stacked mobile so the flow still reads top-to-bottom. */ function Connector({ accent = false }: { accent?: boolean }) { const color = accent ? 'bg-[var(--composio-brand)]/40' : 'bg-fd-border'; const tip = accent ? 'border-l-[var(--composio-brand)]/50' : 'border-l-fd-border'; return ( ); } function Arrow() { return ( ); }