@characterxyz/web

中文文档
0.10.1发布于 2026/11/06MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 3540

Character XYZ for the web, headless: sessions, streamed chat, voice calls with a fair queue. Framework-free, zero dependencies.

原始使用文档
文档目录3 节
  1. Context, events and actions
  2. Options
  3. License

@characterxyz/web

The headless Character XYZ SDK: sessions, streamed chat, real-time voice calls and the call queue, with no UI. Build your own interface on the same calls the ready-made widget uses. Framework-free, zero dependencies, 8 KB gzipped.

Want the ready-made widget instead? Use @characterxyz/widget (any site) or @characterxyz/react.

npm install @characterxyz/web
import { CharacterXYZ } from '@characterxyz/web';

const cx = await CharacterXYZ.init({ publishableKey: 'cxyz_pk_live_…' });
cx.chat.on('messages', render);           // streams as the reply is written
await cx.chat.send('Hello!');

callButton.onclick = async () => {        // from a click: it needs the microphone
  const call = await cx.startCall({ autoAccept: true });
  call.on('state', (s) => show(s.phase, s.position, s.etaSeconds));
  call.on('caption', (c) => caption(c.role, c.text));
};

When every line is busy, a call waits in a first-come queue with its place and an estimate; the visitor can keep chatting meanwhile.

Context, events and actions

The page and the agent talk in both directions. Three layers, one session:

// 1. CONTEXT IN — who this is and what is true now. Level-triggered: it stays
//    in scope for every later turn until changed. Scope: visitor.*, context.*.
await cx.identify({ id: 'u_42', email: '[email protected]', name: 'Asha', traits: { plan: 'pro' } });
await cx.setContext({ page: '/pricing', cart: { items: 2, value: 4200 } });

// 2. EVENTS IN — something the visitor DID. Only names the agent's graph
//    declares are accepted. Fire-and-forget: do not await it.
void cx.track('pricing_viewed', { plan: 'pro' });
//    Scope in the graph: {{event.name}}, {{event.data.plan}}.
//    With `openChat` on the node, the widget opens itself for the reply.

// 3. ACTIONS OUT — the graph asks the page to do something.
const off = cx.registerAction('openCart', async ({ itemId }) => {
  await cart.open(String(itemId));
  return { opened: true, count: cart.count };
});

The graph side is two nodes beside the existing ones: On Site Event (one per event name; the name is the allowlist, with an optional data shape and a Send test event button in the console) and Client Action (pick an action the page registered; its answer resumes down done or failed, and result is readable after the node).

cx.track sends an idempotency id and keepalive, so a retry or a click that navigates away is still one event. An awaited page action is a two-phase handshake on the same HTTP connection: the walk suspends, the SDK runs your handler, posts the result, and the reply comes back. Nothing is polled.

Options

Option
publishableKeycxyz_pk_live_…, safe in the page; works only from the key's allowed sites
getSessionTokenFor signed-in visitors: returns a session your server minted with @characterxyz/server
agentIdWhich of the key's agents. Default: the key's first
storagelocal (remember the anonymous visitor, default) · memory · your own store

Create keys and choose the sites they may run on in Character XYZ › Settings › Developers.

License

MIT

版本与发布记录

@characterxyz/web 共发布 17 个版本,首次发布于 2026/10/12;过去 12 个月发布了 17 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.10.1latest2026/11/063 天前
0.10.02026/11/017 天前
0.9.12026/11/017 天前
0.9.02026/11/018 天前
0.8.02026/10/2614 天前
0.7.32026/10/2514 天前

关于 @characterxyz/web 的常见问题

@characterxyz/web 是什么?

Character XYZ for the web, headless: sessions, streamed chat, voice calls with a fair queue. Framework-free, zero dependencies.

如何安装 @characterxyz/web?

在项目目录运行 npm install @characterxyz/web,或使用 pnpm add / yarn add / bun add。

@characterxyz/web 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@characterxyz/web 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@characterxyz/web 可以商用吗?

@characterxyz/web 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@characterxyz/web 的下载量有多少?

根据 npm 官方下载统计,@characterxyz/web 在 2026/10/10 – 2026/11/08 这 30 天内被下载 3,540 次,日均约 118 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@characterxyz/web 还在维护吗?

最新版本 0.10.1 发布于 2026/11/06(3 天前);至今共发布 17 个版本,其中过去 12 个月发布了 17 个;首次发布于 2026/10/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。