Przejdź do głównej treści

Konfiguracja

Każda aplikacja Kazzle ma plik kazzle.config.ts w katalogu głównym projektu. Ten plik definiuje zawartość aplikacji — komponenty, umiejętności i metadane.

Szybki start

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

export default defineConfig({
  components: [
    { name: 'My App', type: 'ui', path: '.' }
  ]
});
Helper defineConfig zapewnia autouzupełnianie TypeScript i walidację. Typy pochodzą z kazzle.types.ts, który jest generowany automatycznie i dołączany do każdego szablonu.

Pola najwyższego poziomu

PoleTypWymaganeOpis
iconstringnieŚcieżka do pliku ikony aplikacji względem katalogu głównego repozytorium (png, jpg, svg, webp, ico). Przesyłana do CDN podczas publikacji.
componentsobject[]nieKomponenty wykonywalne — interfejsy użytkownika lub procesy w tle
skillsobject[]nieDefinicje umiejętności AI — pliki markdown, które AI czyta w celu zdobycia wiedzy domenowej
capabilitiesobjectnieOpcjonalne funkcje integracji pulpitu, takie jak skróty klawiaturowe, powiadomienia i obecność na pasku stanu

Pola komponentu

Każdy wpis w components[]:
PoleTypWymaganeOpis
namestringtakUnikalna nazwa komponentu w aplikacji
type"ui" | "process"takTyp komponentu — ui (maks. 1) lub process
pathstringtakŚcieżka wejścia w katalogu aplikacji
runtimeobjectniePolecenia: { dev?, build?, run? }
runtime.devstringniePolecenie uruchomienia serwera deweloperskiego (np. "bun run dev")
runtime.buildstringniePolecenie budowania dla produkcji (np. "vite build")
runtime.runstringniePolecenie uruchomienia w produkcji (np. "bun run start")
schedulestringnieHarmonogram cron dla komponentów procesów (np. "*/5 * * * *")
trigger"webhook" | "event"nieTryb wyzwalacza dla komponentów procesów
envobjectnieKolekcja sekretów + środowisko do wstrzykiwania zmiennych środowiskowych
env.collectionstringtak (jeśli env)Slug kolekcji sekretów
env.environmentstringtak (jeśli env)Slug środowiska
env.includestring[]nieWstrzyknij tylko te nazwy zmiennych środowiskowych. Jeśli pominięte, wstrzyknij wszystkie z kolekcji+środowiska.

Pola umiejętności

Każdy wpis w skills[]:
PoleTypWymaganeOpis
namestringtakNazwa umiejętności
pathstringtakŚcieżka do pliku SKILL.md względem katalogu głównego aplikacji

Ograniczenia

  • Maks. 1 komponent UI na aplikację
  • Wartości name komponentu muszą być unikalne w aplikacji

Przykłady szablonów

aplikacja ui

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

export default defineConfig({
  /** Ścieżka do ikony aplikacji względem katalogu głównego repozytorium. Przesyłana do CDN podczas publikacji. */
  icon: 'components/ui/public/favicon.svg',
  /** Komponenty aplikacji — każdy wpis definiuje jednostkę do wdrożenia. Maks. 1 komponent UI. */
  components: [
    { name: 'My App', type: 'ui', path: './components/ui' },
  ],
});

aplikacja process

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

export default defineConfig({
  /** Ścieżka do ikony aplikacji względem katalogu głównego repozytorium. Przesyłana do CDN podczas publikacji. */
  icon: 'icon.svg',
  /** Komponenty aplikacji — każdy wpis definiuje jednostkę do wdrożenia. */
  components: [
    {
      name: 'My App',
      type: 'process',
      path: './components/process/index.ts',
      runtime: { dev: 'bun run dev', run: 'bun run start' },
      // Procesy trwałe to długotrwałe serwery. Platforma wysyła
      // wyzwalacze do uruchomionego serwera na ścieżce każdego wyzwalacza z
      // `Authorization: Bearer ${KAZZLE_TRIGGER_SECRET}`. Kod klienta
      // waliduje nagłówek przed wykonaniem pracy.
      processMode: 'persistent',
      triggers: [
        // Przykład cron — odkomentuj i dostosuj. 5 pól, rozdzielczość minutowa.
        // { name: 'hourly-sync', kind: 'schedule', schedule: '0 * * * *', path: '/cron/hourly-sync' },
        // Przykład webhook — POSTy do /webhooks/{spaceId}/{appId}/My App/incoming
        // { name: 'incoming', kind: 'webhook', path: '/webhook/incoming' },
      ],
    },
  ],
});

pusta aplikacja

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

export default defineConfig({
  /** Ścieżka do ikony aplikacji względem katalogu głównego repozytorium. Przesyłana do CDN podczas publikacji. */
  icon: 'icon.svg',
  /** Komponenty aplikacji — każdy wpis definiuje jednostkę do wdrożenia. */
  components: [],
});