import { Link } from "react-router-dom"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, TableCaption, } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; import { Puzzle, Server, Brush, Shield, RefreshCw, ArrowRight, Link as LinkIcon, Palette, AlertTriangle, FileText, } from "lucide-react"; import { Link } from "react-router-dom"; const embedSettings = [ { name: "buttonSize", description: "Controls the floating launcher dimensions in pixels.", defaultValue: "60", }, { name: "buttonPosition", description: "Places the launcher in one of four corners (e.g. bottom-right).", defaultValue: "bottom-right", }, { name: "buttonOffset", description: "Fine-tunes horizontal/vertical offsets from the viewport edge.", defaultValue: "{ x: 32, y: 32 }", }, { name: "iframeWidth", description: "Maximum width of the opened assistant panel.", defaultValue: "448", }, { name: "iframeHeight", description: "Viewport height percentage for the assistant panel.", defaultValue: "85vh", }, { name: "tooltipText", description: "Copy shown when hovering the launcher button.", defaultValue: "Need a hand?\\nAeThex Copilot is live.", }, ]; const troubleshooting = [ { title: "Failed to fetch status", detail: "If the HelloSkip API cannot be reached, the embed skips initialization. Verify outbound network access or retry when the environment regains connectivity.", }, { title: "Agent inactive", detail: "Status responses containing `active: false` mean the agent is disabled. Update the agent inside HelloSkip or switch the data-agent-id.", }, { title: "Styling conflicts", detail: "AeThex injects a dedicated theme stylesheet. Ensure no additional overrides remove the `.skip-agent-*` classes or the gradient tokens defined in `global.css`.", }, ]; export default function DocsIntegrations() { return (
Integrations

Embedding partner services in AeThex

AeThex supports secure, theme-aware embeds for third-party agents and tools. This guide covers the HelloSkip support assistant that ships with the platform and outlines patterns you can reuse for future integrations. The router-aware SkipAgentController keeps the experience out of the documentation space while still making it available across the rest of the site.

Runtime flow

The HelloSkip agent utilities live in lib/skip-agent.ts. They lazily fetch the runtime once and gate initialization behind a guarded status check at /api/agent/status. If the endpoint is unreachable or reports an inactive agent, the embed is skipped to avoid client-side errors.

When healthy, the loader injects HelloSkip's global object and calls window.SkipAgent.embed with AeThex-specific sizing, copy, and z-index values. A companion stylesheet applies the gradient, border, and focus treatments to match the site aesthetic.

Theming hook

AeThex provides a handcrafted theme in SKIP_AGENT_THEME. It uses the gradient palette defined in global.css to restyle the floating launcher, tooltip, and assistant container.

Add additional overrides by extending the same template literal and keeping selectors scoped to .skip-agent-*. The embed only injects the style block once via the createSkipAgentTheme helper.

Configuration options

Property Purpose Default {embedSettings.map((setting) => ( {setting.name} {setting.description} {setting.defaultValue} ))} Update values inside SKIP_AGENT_EMBED_OPTIONS in client/lib/skip-agent.ts.
Best practices
  • Keep the preflight status check in place for stability in staging or offline previews.
  • Reuse the router gating pattern in SkipAgentController for embeds that should disappear on specific routes.
  • Wrap additional embeds in the same helper to maintain a single initialization flag.
Updating the agent

To switch agents, update SKIP_AGENT_ID. If the HelloSkip host changes, adjust SKIP_AGENT_SRC—the origin is derived automatically for status checks.

For full replacements, swap the fetch target to your new integration and continue calling the same embedSkipAgent helper to retain theme and lifecycle management.

Troubleshooting

{troubleshooting.map((issue) => ( {issue.title} {issue.detail} ))}

Further reading

Manage integration documentation centrally in Builder CMS or export static knowledge base pages. Use the same theming primitives to embed other providers consistently across the platform.

); }