Vai al contenuto principale

Configurazione

Ogni app Kazzle ha un kazzle.config.ts nella radice del progetto. Questo file definisce cosa contiene la tua app — componenti, skill e metadati.

Avvio rapido

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

export default defineConfig({
  components: [
    { name: 'My App', type: 'ui', path: '.' }
  ]
});
L’helper defineConfig fornisce autocompletamento e validazione TypeScript. I tipi provengono da kazzle.types.ts, che viene generato automaticamente e incluso in ogni template.

Campi di primo livello

CampoTipoObbligatorioDescrizione
iconstringnoPercorso del file icona dell’app relativo alla radice del repository (png, jpg, svg, webp, ico). Caricato su CDN al momento della pubblicazione.
componentsobject[]noComponenti eseguibili — frontend UI o processi in background
skillsobject[]noDefinizioni di skill IA — file markdown che l’IA legge per la conoscenza del dominio
capabilitiesobjectnoFunzionalità opzionali di integrazione desktop come hotkey, notifiche e presenza nella barra di stato

Campi dei componenti

Ogni voce in components[]:
CampoTipoObbligatorioDescrizione
namestringNome univoco del componente all’interno dell’app
type"ui" | "process"Tipo di componente — ui (max 1) o process
pathstringPercorso di ingresso all’interno della directory dell’app
runtimeobjectnoComandi: { dev?, build?, run? }
runtime.devstringnoComando per avviare il dev server (es. "bun run dev")
runtime.buildstringnoComando per compilare per la produzione (es. "vite build")
runtime.runstringnoComando per avviare in produzione (es. "bun run start")
schedulestringnoSchedule cron per componenti process (es. "*/5 * * * *")
trigger"webhook" | "event"noModalità di trigger per componenti process
envobjectnoRaccolta di segreti + ambiente per l’iniezione di variabili d’ambiente
env.collectionstringsì (se env)Slug della raccolta di segreti
env.environmentstringsì (se env)Slug dell’ambiente
env.includestring[]noInietta solo questi nomi di variabili d’ambiente. Se omesso, inietta tutti dalla raccolta+ambiente.

Campi delle skill

Ogni voce in skills[]:
CampoTipoObbligatorioDescrizione
namestringNome della skill
pathstringPercorso del file SKILL.md relativo alla radice dell’app

Vincoli

  • Max 1 componente UI per app
  • I valori di name dei componenti devono essere univoci all’interno dell’app

Esempi di template

app ui

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

export default defineConfig({
  /** Percorso dell'icona dell'app relativo alla radice del repository. Caricato su CDN al momento della pubblicazione. */
  icon: 'components/ui/public/favicon.svg',
  /** Componenti dell'app — ogni voce definisce un'unità distribuibile. Max 1 componente UI. */
  components: [
    { name: 'My App', type: 'ui', path: './components/ui' },
  ],
});

app process

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

export default defineConfig({
  /** Percorso dell'icona dell'app relativo alla radice del repository. Caricato su CDN al momento della pubblicazione. */
  icon: 'icon.svg',
  /** Componenti dell'app — ogni voce definisce un'unità distribuibile. */
  components: [
    {
      name: 'My App',
      type: 'process',
      path: './components/process/index.ts',
      runtime: { dev: 'bun run dev', run: 'bun run start' },
      // I processi persistenti sono server a lunga esecuzione. La piattaforma invia
      // trigger al server in esecuzione al `path` di ogni trigger con
      // `Authorization: Bearer ${KAZZLE_TRIGGER_SECRET}`. Il codice del cliente
      // valida l'header prima di eseguire il lavoro.
      processMode: 'persistent',
      triggers: [
        // Esempio cron — decommenta e adatta. 5 campi, risoluzione al minuto.
        // { name: 'hourly-sync', kind: 'schedule', schedule: '0 * * * *', path: '/cron/hourly-sync' },
        // Esempio webhook — POST a /webhooks/{spaceId}/{appId}/My App/incoming
        // { name: 'incoming', kind: 'webhook', path: '/webhook/incoming' },
      ],
    },
  ],
});

app vuota

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

export default defineConfig({
  /** Percorso dell'icona dell'app relativo alla radice del repository. Caricato su CDN al momento della pubblicazione. */
  icon: 'icon.svg',
  /** Componenti dell'app — ogni voce definisce un'unità distribuibile. */
  components: [],
});