Saltar para o conteúdo principal

Configuração

Todo app Kazzle tem um kazzle.config.ts na raiz do projeto. Este arquivo define o que seu app contém — componentes, skills e metadados.

Início rápido

import { defineConfig } from './kazzle.types';

export default defineConfig({
  components: [
    { name: 'My App', type: 'ui', path: '.' }
  ]
});
O helper defineConfig fornece autocompletar e validação do TypeScript. Os tipos vêm de kazzle.types.ts, que é gerado automaticamente e incluído em cada template.

Campos de nível superior

CampoTipoObrigatórioDescrição
iconstringnãoCaminho para o arquivo de ícone do app relativo à raiz do repositório (png, jpg, svg, webp, ico). Enviado para CDN ao publicar.
componentsobject[]nãoComponentes executáveis — frontends de UI ou processos em background
skillsobject[]nãoDefinições de skill de IA — arquivos markdown que a IA lê para conhecimento de domínio
capabilitiesobjectnãoRecursos opcionais de integração desktop, como hotkeys, notificações e presença na barra de status

Campos de componente

Cada entrada em components[]:
CampoTipoObrigatórioDescrição
namestringsimNome único do componente dentro do app
type"ui" | "process"simTipo de componente — ui (máx 1) ou process
pathstringsimCaminho de entrada dentro do diretório do app
runtimeobjectnãoComandos: { dev?, build?, run? }
runtime.devstringnãoComando para iniciar o servidor de desenvolvimento (ex: "bun run dev")
runtime.buildstringnãoComando para compilar para produção (ex: "vite build")
runtime.runstringnãoComando para iniciar em produção (ex: "bun run start")
schedulestringnãoAgendamento cron para componentes de processo (ex: "*/5 * * * *")
trigger"webhook" | "event"nãoModo de disparo para componentes de processo
envobjectnãoColeção de secrets + ambiente para injeção de variáveis de ambiente
env.collectionstringsim (se env)Slug da coleção de secrets
env.environmentstringsim (se env)Slug do ambiente
env.includestring[]nãoInjetar apenas estes nomes de variáveis de ambiente. Se omitido, injeta todos da coleção+ambiente.

Campos de skill

Cada entrada em skills[]:
CampoTipoObrigatórioDescrição
namestringsimNome do skill
pathstringsimCaminho para o arquivo SKILL.md relativo à raiz do app

Restrições

  • Máx 1 componente de UI por app
  • Os valores de name do componente devem ser únicos dentro do app

Exemplos de template

app de ui

import { defineConfig } from './kazzle.types';

export default defineConfig({
  /** Caminho para o ícone do app relativo à raiz do repositório. Enviado para CDN ao publicar. */
  icon: 'components/ui/public/favicon.svg',
  /** Componentes do app — cada entrada define uma unidade implantável. Máx 1 componente de UI. */
  components: [
    { name: 'My App', type: 'ui', path: './components/ui' },
  ],
});

app de process

import { defineConfig } from './kazzle.types';

export default defineConfig({
  /** Caminho para o ícone do app relativo à raiz do repositório. Enviado para CDN ao publicar. */
  icon: 'icon.svg',
  /** Componentes do app — cada entrada define uma unidade implantável. */
  components: [
    {
      name: 'My App',
      type: 'process',
      path: './components/process/index.ts',
      runtime: { dev: 'bun run dev', run: 'bun run start' },
      // Processos persistentes são servidores de longa duração. A plataforma envia
      // disparos para o servidor em execução em cada `path` do disparo com
      // `Authorization: Bearer ${KAZZLE_TRIGGER_SECRET}`. O código do cliente
      // valida o header antes de executar o trabalho.
      processMode: 'persistent',
      triggers: [
        // Exemplo de cron — descomente e ajuste. 5 campos, resolução de minuto.
        // { name: 'hourly-sync', kind: 'schedule', schedule: '0 * * * *', path: '/cron/hourly-sync' },
        // Exemplo de webhook — POSTs para /webhooks/{spaceId}/{appId}/My App/incoming
        // { name: 'incoming', kind: 'webhook', path: '/webhook/incoming' },
      ],
    },
  ],
});

app vazio

import { defineConfig } from './kazzle.types';

export default defineConfig({
  /** Caminho para o ícone do app relativo à raiz do repositório. Enviado para CDN ao publicar. */
  icon: 'icon.svg',
  /** Componentes do app — cada entrada define uma unidade implantável. */
  components: [],
});