Pular para o conteúdo principal

CLI e implantação de configurações

Os artefatos CLI/config publicados na versão 0.3.1 implementam o contrato de configuração/backend 0.3.0 e rejeitam chaves desconhecidas tanto localmente como no backend.

Estado de release e runtime​

Os artefatos publicados são @openstaticfish/chattybox-cli@0.3.1, @openstaticfish/chattybox-config@0.3.1 e o SDK JavaScript @openstaticfish/chattybox@0.1.4. Eles suportam os campos ampliados junto com o contrato do backend 0.3.0; status mostra a versão do ambiente, enquanto runtimeConfigVersionId é a última configuração aplicada ao runtime partilhado e pode diferir. Omitir mode escolhe crawl e preserva maxDepth: 0 explícito. development só regista uma versão; preview e produção partilham runtime, corpus e chaves. O último deploy vence; use projetos separados para isolamento.

A CLI cria, valida, implanta, promove e reverte versões imutáveis da configuração do ChattyBox. Os tokens de implantação são vinculados a um único projeto e aos ambientes selecionados, tornando o mesmo fluxo adequado para desenvolvimento local e CI.

Criar uma configuração​

bunx @openstaticfish/chattybox-cli init

Esse comando cria chattybox.config.json:

{
"schemaVersion": "1",
"assistant": {
"name": "Support"
},
"knowledge": {
"sources": [
{
"type": "website",
"url": "https://example.com"
}
]
},
"widget": {
"enabled": true
}
}

Use um caminho personalizado quando a configuração pertencer a um subdiretório:

bunx @openstaticfish/chattybox-cli init config/chattybox.config.json

Validar localmente ou na CI​

bunx @openstaticfish/chattybox-cli validate
bunx @openstaticfish/chattybox-cli validate config/chattybox.config.json

A validação verifica o esquema, o nome obrigatório do assistente, os tipos de origem compatíveis, as URLs HTTP das origens, os limites positivos de páginas e as cores do widget. Uma validação bem-sucedida não implanta nem modifica o estado remoto.

Criar um token de implantação​

Abra a guia Settings do projeto, encontre Config deployment tokens e crie um token para os ambientes que seu fluxo de trabalho poderá alterar. Copie-o imediatamente; o ChattyBox armazena apenas o hash e não pode exibi-lo novamente.

Defina o token e a URL da API do widget na guia Embed do projeto:

export CHATTYBOX_DEPLOY_TOKEN='cb_cfg_v1_...'
export CHATTYBOX_API_URL='https://your-deployment.convex.site/chat'

Nunca faça commit do token. Armazene-o no armazenamento criptografado de secrets do seu provedor de CI.

Após verificar o fluxo de implantação, ative o Config-as-code lock na mesma seção de configurações. O bloqueio desativa alterações de configuração e do corpus pelo dashboard, de modo que apenas tokens de implantação com o escopo adequado possam alterar o runtime. A criação e a revogação de tokens continuam disponíveis caso seja necessário fazer a rotação de uma credencial de CI.

Implantar a configuração​

A implantação cria uma versão imutável e a promove ao ambiente selecionado:

bunx @openstaticfish/chattybox-cli deploy --environment preview
bunx @openstaticfish/chattybox-cli deploy --environment production

development apenas registra uma versão/ponteiro (applied: false, indexingStatus: "not_required"). preview e production substituem as definições de runtime do mesmo projeto e usam o mesmo corpus e as mesmas chaves públicas do widget; a promoção de runtime mais recente prevalece. Use projetos separados para isolamento real. Ambos aplicam a configuração atomicamente e enfileiram um trabalho de scraping (applied: true, indexingStatus: "pending"), mas não esperam pelo scraping nem pelos embeddings. O corpus não é um snapshot versionado e uma atualização falhada não reverte a configuração aplicada.

Use --json na automação para receber a versão, o ambiente, o status da aplicação e o ID do job de scraping como saída estruturada.

Status, promoção e reversão​

bunx @openstaticfish/chattybox-cli status --environment production

bunx @openstaticfish/chattybox-cli promote \
--version '<config-version-id>' \
--environment production

bunx @openstaticfish/chattybox-cli rollback \
--version '<known-good-config-version-id>' \
--environment production

--version usa o ID opaco da versão de configuração, não o número visível. A reversão usa a mesma operação de backend que a promoção, não precisa de visar uma versão anterior e substitui o ponteiro e os metadados de promoção do ambiente selecionado; não existe histórico de promoções append-only. Para preview ou production, reaplica a configuração com os direitos atuais e enfileira uma nova atualização, em vez de restaurar o corpus histórico.

Fluxos de trabalho de CI/CD​

Adicione CHATTYBOX_DEPLOY_TOKEN como um secret criptografado com escopo de produção no provedor de CI. Adicione CHATTYBOX_API_URL como um secret ou variável usando a URL da API do widget na aba Embed do projeto. Execute a validação em pull requests, mas restrinja a implantação de produção à branch padrão protegida ou a um ambiente de implantação aprovado.

GitHub Actions​

name: Deploy ChattyBox configuration

on:
pull_request:
push:
branches: [main]

jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v6
with:
node-version: 24
- run: bunx @openstaticfish/chattybox-cli validate

deploy:
if: github.event_name == 'push'
needs: validate
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v2
- uses: actions/setup-node@v6
with:
node-version: 24
- name: Validate and deploy
env:
CHATTYBOX_DEPLOY_TOKEN: ${{ secrets.CHATTYBOX_DEPLOY_TOKEN }}
CHATTYBOX_API_URL: ${{ vars.CHATTYBOX_API_URL }}
run: |
bunx @openstaticfish/chattybox-cli validate
bunx @openstaticfish/chattybox-cli deploy --environment production --json

Use um secret de produção vinculado ao ambiente e exija aprovação para a implantação quando o seu repositório oferecer suporte a isso. A CLI registra as variáveis comuns de commit e branch da CI junto à versão imutável.

GitLab CI/CD​

Armazene os dois valores em Settings → CI/CD → Variables. Proteja o token de implantação, mascare-o e limite-o ao ambiente production.

.gitlab-ci.yml
image: oven/bun:1

validate_chattybox:
stage: test
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
script:
- bunx --bun @openstaticfish/chattybox-cli validate

deploy_chattybox:
stage: deploy
environment: production
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
script:
- bunx --bun @openstaticfish/chattybox-cli validate
- bunx --bun @openstaticfish/chattybox-cli deploy --environment production --json

O GitLab expõe automaticamente CHATTYBOX_DEPLOY_TOKEN e CHATTYBOX_API_URL ao job usando os nomes das variáveis. Use uma branch padrão protegida para que as variáveis protegidas não fiquem disponíveis para branches não confiáveis.

Bitbucket Pipelines​

Adicione os dois valores como variáveis de implantação em Repository settings → Pipelines → Deployments → Production. Marque o token de implantação como protegido.

bitbucket-pipelines.yml
image: oven/bun:1

pipelines:
pull-requests:
'**':
- step:
name: Validate ChattyBox configuration
script:
- bunx --bun @openstaticfish/chattybox-cli validate
branches:
main:
- step:
name: Deploy ChattyBox configuration
deployment: Production
script:
- bunx --bun @openstaticfish/chattybox-cli validate
- bunx --bun @openstaticfish/chattybox-cli deploy --environment production --json

Substitua main se sua branch padrão tiver outro nome. O Bitbucket injeta variáveis de implantação somente nas etapas associadas a esse ambiente de implantação.

Seções da configuração​

SeçãoFinalidade
schemaVersionSeleciona o contrato público de configuração. Atualmente, há suporte para a versão 1.
assistantDefine o nome do assistente e, opcionalmente, seu perfil de prompt e prompt do sistema.
knowledge.sourcesDeclara origens de sites e padrões opcionais de inclusão e exclusão.
runtimeContém padrões de execução, como a localidade.
widgetDescreve configurações opcionais de apresentação do widget hospedado.

Auxiliar de configuração tipada​

Instale o pacote de configuração ao criar ferramentas TypeScript separadas em torno do esquema:

bun add -d @openstaticfish/chattybox-config
import { defineConfig } from '@openstaticfish/chattybox-config';

const config = defineConfig({
schemaVersion: '1',
assistant: { name: 'Support' },
knowledge: {
sources: [{ type: 'website', url: 'https://docs.example.com' }],
},
widget: { enabled: true },
});

A própria CLI lê arquivos JSON. defineConfig() serve para aplicativos tipados ou ferramentas de build; ela não permite que arquivos TypeScript sejam carregados diretamente pela CLI.

Para uma integração funcional em produção hoje, use o widget hospedado ou crie uma interface personalizada com o SDK JavaScript.