Zum Hauptinhalt springen

Konfiguration

Jede Kazzle-App hat eine kazzle.config.ts im Projektstammverzeichnis. Diese Datei definiert, was deine App enthält — Komponenten, Skills und Metadaten.

Schnelleinstieg

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

export default defineConfig({
  components: [
    { name: 'My App', type: 'ui', path: '.' }
  ]
});
Der defineConfig-Helper bietet TypeScript-Autovervollständigung und Validierung. Die Typen stammen aus kazzle.types.ts, die automatisch generiert und in jeder Vorlage enthalten sind.

Felder auf oberster Ebene

FeldTypErforderlichBeschreibung
iconstringneinPfad zur App-Symboldatei relativ zum Repo-Stammverzeichnis (png, jpg, svg, webp, ico). Wird beim Veröffentlichen ins CDN hochgeladen.
componentsobject[]neinAusführbare Komponenten — UI-Frontends oder Hintergrundprozesse
skillsobject[]neinKI-Skill-Definitionen — Markdown-Dateien, die die KI für Domänenwissen liest
capabilitiesobjectneinOptionale Desktop-Integrationsfunktionen wie Hotkeys, Benachrichtigungen und Statusleistenpräsenz

Komponentenfelder

Jeder Eintrag in components[]:
FeldTypErforderlichBeschreibung
namestringjaEindeutiger Komponentenname innerhalb der App
type"ui" | "process"jaKomponententyp — ui (max. 1) oder process
pathstringjaEinstiegspfad im App-Verzeichnis
runtimeobjectneinBefehle: { dev?, build?, run? }
runtime.devstringneinBefehl zum Starten des Dev-Servers (z. B. "bun run dev")
runtime.buildstringneinBefehl zum Erstellen für die Produktion (z. B. "vite build")
runtime.runstringneinBefehl zum Starten in der Produktion (z. B. "bun run start")
schedulestringneinCron-Zeitplan für Prozesskomponenten (z. B. "*/5 * * * *")
trigger"webhook" | "event"neinTriggermodus für Prozesskomponenten
envobjectneinGeheimnissammlung + Umgebung für Umgebungsvariablen-Injektion
env.collectionstringja (falls env)Geheimnissammlung-Slug
env.environmentstringja (falls env)Umgebungs-Slug
env.includestring[]neinNur diese Umgebungsvariablennamen injizieren. Falls weggelassen, alle aus der Sammlung+Umgebung injizieren.

Skill-Felder

Jeder Eintrag in skills[]:
FeldTypErforderlichBeschreibung
namestringjaSkill-Name
pathstringjaPfad zur SKILL.md-Datei relativ zum App-Stammverzeichnis

Einschränkungen

  • Max. 1 UI-Komponente pro App
  • name-Werte von Komponenten müssen innerhalb der App eindeutig sein

Vorlagenbeispiele

ui app

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

export default defineConfig({
  /** Pfad zum App-Symbol relativ zum Repo-Stammverzeichnis. Wird beim Veröffentlichen ins CDN hochgeladen. */
  icon: 'components/ui/public/favicon.svg',
  /** App-Komponenten — jeder Eintrag definiert eine bereitstellbare Einheit. Max. 1 UI-Komponente. */
  components: [
    { name: 'My App', type: 'ui', path: './components/ui' },
  ],
});

process app

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

export default defineConfig({
  /** Pfad zum App-Symbol relativ zum Repo-Stammverzeichnis. Wird beim Veröffentlichen ins CDN hochgeladen. */
  icon: 'icon.svg',
  /** App-Komponenten — jeder Eintrag definiert eine bereitstellbare Einheit. */
  components: [
    {
      name: 'My App',
      type: 'process',
      path: './components/process/index.ts',
      runtime: { dev: 'bun run dev', run: 'bun run start' },
      // Persistente Prozesse sind lange laufende Server. Die Plattform sendet
      // Trigger an den laufenden Server unter dem `path` jedes Triggers mit
      // `Authorization: Bearer ${KAZZLE_TRIGGER_SECRET}`. Der Kundencode
      // validiert den Header, bevor er die Arbeit ausführt.
      processMode: 'persistent',
      triggers: [
        // Beispiel-Cron — auskommentieren und anpassen. 5-Feld, Minutenauflösung.
        // { name: 'hourly-sync', kind: 'schedule', schedule: '0 * * * *', path: '/cron/hourly-sync' },
        // Beispiel-Webhook — POSTs zu /webhooks/{spaceId}/{appId}/My App/incoming
        // { name: 'incoming', kind: 'webhook', path: '/webhook/incoming' },
      ],
    },
  ],
});

empty app

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

export default defineConfig({
  /** Pfad zum App-Symbol relativ zum Repo-Stammverzeichnis. Wird beim Veröffentlichen ins CDN hochgeladen. */
  icon: 'icon.svg',
  /** App-Komponenten — jeder Eintrag definiert eine bereitstellbare Einheit. */
  components: [],
});