npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@autonomoss/chat-react

v2.0.0

Published

React bindings for the Autonomoss Web SDK — <ChatAutonomoss /> ready-made widget and useAutonomossChat headless hook.

Readme

@autonomoss/chat-react

Bindings React sobre o Autonomoss Web SDK. Duas formas de uso: o componente pronto <ChatAutonomoss /> (o que a maioria dos consumidores instala e usa em ~10 linhas) ou o hook headless useAutonomossChat, para quem quer construir a própria UI em React sem reimplementar sessão, streaming e atributos.

Instalação

Pacote público — instala normalmente, sem autenticação:

npm install @autonomoss/chat-react

Também publicado em espelho no GitHub Packages — útil se sua organização já centraliza dependências ali; requer um .npmrc com token read:packages (ver documentação do GitHub Packages).

Peer dependencies: react e react-dom ^18 || ^19 (já presentes em qualquer app React moderno — não são instaladas automaticamente).

Quickstart — <ChatAutonomoss />

import { ChatAutonomoss } from '@autonomoss/chat-react'

function App() {
  return (
    <ChatAutonomoss
      config={{
        publishableKey: 'pk_...',
        baseUrl: 'https://sua-api.exemplo.com/v1/embed',
        attributes: {
          secure: {
            access_token: { format: 'bearer_token', value: () => keycloak.token! },
          },
        },
      }}
      launcher={{ icon: 'chat', position: 'bottom-right' }}
    />
  )
}

Por baixo, monta o mesmo widget de @autonomoss/chat (Shadow DOM, tema AA, streaming, histórico, anexos e fullscreen já testados naquele pacote) dentro de um container gerido pelo React — não é uma reimplementação em JSX.

config/theme/launcher só são lidos na montagem inicial (mesmo padrão do Stripe Elements): trocar esses props depois não remonta nem reconfigura o widget. Para forçar uma sessão nova (ex.: troca de usuário logado), monte o componente com uma key diferente.

Props de <ChatAutonomoss />

| Prop | Tipo | Obrigatório | Descrição | | --------------------- | ---------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | config | AutonomossConfig | sim | publishableKey + attributes — ver README do @autonomoss/chat-core. | | theme | AutonomossChatTheme | não | Cores, título, avatar — ver README do @autonomoss/chat. | | launcher | { icon?: 'chat' \| 'support'; position?: 'bottom-right' \| 'bottom-left' } | não | Presente = bolha flutuante + painel; ausente = painel preenche o elemento (modo inline). | | openOnMount | boolean | não | Painel já aberto ao montar (ignorado em modo inline, que já é sempre "aberto"). | | showHistory | boolean | não | Botão de histórico de conversas no cabeçalho. Default: true. | | className / style | string / React.CSSProperties | não | Aplicados ao container que o widget monta dentro. | | onOpen / onClose | () => void | não | Disparados ao abrir/fechar o painel (modo flutuante). | | onMessage | (event: EmbedStreamEvent) => void | não | Todo evento do stream de chat, cru — ver tipos em @autonomoss/chat-core. | | onError | (event: { reason: string; message: string }) => void | não | Erro nomeado, já com mensagem amigável pt-BR. |

useAutonomossChat — UI própria

Para quem prefere construir sua própria interface (bolhas de mensagem, composer, etc.) em vez de usar o widget pronto:

import { useAutonomossChat } from '@autonomoss/chat-react'

function CustomChat() {
  const { messages, isStreaming, error, sendMessage } = useAutonomossChat({
    config: {
      publishableKey: 'pk_...',
      baseUrl: 'https://sua-api.exemplo.com/v1/embed',
      attributes: { secure: {} },
    },
  })

  return (
    <div>
      {messages.map((m) => (
        <p key={m.id} data-role={m.role} data-status={m.status}>
          {m.content}
        </p>
      ))}
      {error && <p role="alert">{error.message}</p>}
      <button disabled={isStreaming} onClick={() => sendMessage('Olá!')}>
        Enviar
      </button>
    </div>
  )
}

Sem Context/Provider: a instância de EmbedClient é criada uma única vez (via useRef) e vive presa ao componente, nunca recriada em re-renders.

Opções (UseAutonomossChatOptions)

Uma das duas formas:

{ config: AutonomossConfig; onEvent?: (event: EmbedStreamEvent) => void }
// ou, se você já gerencia o client em outro lugar (ex. compartilhado entre componentes):
{ client: EmbedClient; onEvent?: (event: EmbedStreamEvent) => void }

Quando você passa client (em vez de config), o hook não chama .destroy() nele ao desmontar — quem criou o client continua responsável pelo seu ciclo de vida.

Retorno (UseAutonomossChatResult)

| Campo | Tipo | Descrição | | ---------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | | client | EmbedClient | Instância crua do @autonomoss/chat-core, para casos avançados (client.threads, client.connect(), etc.). | | messages | AutonomossChatMessage[] | { id, chatId, role: 'user' \| 'assistant', content, status: 'streaming' \| 'done' \| 'error' }. | | isStreaming | boolean | true enquanto uma resposta está sendo recebida. | | error | { reason: string; message: string } \| null | Último erro nomeado, com mensagem já pronta para exibir. | | sendMessage(text) | (text: string) => Promise<void> | Envia uma mensagem. Lança se chamado enquanto isStreaming já é true. | | setAttributes(patch) | (patch: { public?: Record<string, unknown> }) => void | Atualiza atributos públicos sem recriar a sessão. |

Erros

Erros não lançam para fora de sendMessage de forma silenciosa: a mensagem do assistente correspondente recebe status: 'error' no array messages, e o campo error do hook é populado com { reason, message } — a mesma forma normalizada e segura para exibir ao usuário que normalizeFriendlyError produz no core (ver cookbook de erros do @autonomoss/chat-core para a lista completa de reasons).

Segurança

A pk_ é pública e pode ficar no frontend. O SDK nunca pede sk_ e não usa localStorage nem cookies — sessão e atributos seguros vivem só em memória. Ver a seção Segurança do @autonomoss/chat-core para o detalhamento completo.

Versionamento

Este pacote segue Changesets — ver CHANGELOG.md.