GECX Chat SDK
Showcase
A framework-neutral TypeScript SDK for building custom chat experiences. Own the UI; GECX Chat SDK handles runtime, streaming, tools, auth, and transport.
Guided Wow Tour
A choreographed three-minute proof path across runtime, tools, diagnostics, and handoff
Agent Builder
Generate an agent-ready integration packet with code, prompt, and safety checks
Scenario Workbench
Select mock catalog scenarios, tune latency, run A2UI/tool/error flows, and export agent packets
Streaming Text
Real-time token-by-token delivery with delta consolidation
Rich Content
Product carousels, order summaries, citations, and custom payloads
Generative UI
A clear A2UI runbook with catalog preflight, frame inspector, generated surface, and action log
Client Tools
Schema-validated tool execution with approval flows and timeouts
Agent Handoff
Seamless transfer to live agents with queue tracking
File Upload
Validated file uploads with progress tracking
Diagnostics
Debug bundles, trace timelines, and redacted configs
Product Analytics
Journey metrics for impressions, chip CTR, approvals, handoff, CSAT, and resolution
Identity & Sessions
Guest identities, auth upgrades, cross-tab sync, and conversation continuity
Data Governance
Conversation export, deletion, forget-me, consent, TTL, and audit events
Computer Use
Sandboxed agent that browses, clicks, and fills forms with consent and live screenshot stream
Coolaid Stand Proof
Branded storefront with chat concierge, A2UI flavor tuner, approvals, and runtime proof at port 3001
Applied AI Retail Proof
Premium end-to-end retail journey inside chat with SDK Inspector and Connect GECX at port 3002
Proxy Reference
Server-side token, stream, upload, tools, export, delete, and forget-me reference at port 8080
Quick Start
import { tokenEndpointAuth } from 'gecx-chat';
import { useChatSession, MessagePart } from 'gecx-chat/react';
function SupportChat() {
const chat = useChatSession({
config: {
auth: tokenEndpointAuth({ endpoint: '/api/gecx-chat-token' }),
storage: { mode: 'session', consent: 'functional' },
},
});
return (
<section aria-label="Support chat">
<ol aria-live="polite">
{chat.messages.map((msg) => (
<li key={msg.id} data-role={msg.role}>
{msg.parts.map((part) => <MessagePart key={part.id} part={part} />)}
</li>
))}
</ol>
<form onSubmit={(e) => { e.preventDefault(); chat.sendText(chat.input.value); chat.input.clear(); }}>
<input
value={chat.input.value}
onChange={(e) => chat.input.set(e.currentTarget.value)}
disabled={!chat.canSend}
aria-label="Message"
/>
<button type="submit" disabled={!chat.canSend}>Send</button>
</form>
</section>
);
}