Перейти к основному содержанию

Конфигурация

Каждое приложение Kazzle имеет файл kazzle.config.ts в корне проекта. Этот файл определяет содержимое вашего приложения — компоненты, навыки и метаданные.

Быстрый старт

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

export default defineConfig({
  components: [
    { name: 'My App', type: 'ui', path: '.' }
  ]
});
Вспомогательная функция defineConfig обеспечивает автодополнение TypeScript и валидацию. Типы берутся из kazzle.types.ts, который автоматически генерируется и включается в каждый шаблон.

Поля верхнего уровня

ПолеТипОбязательноОписание
iconstringнетПуть к файлу иконки приложения относительно корня репозитория (png, jpg, svg, webp, ico). Загружается на CDN при публикации.
componentsobject[]нетИсполняемые компоненты — интерфейсы пользователя или фоновые процессы
skillsobject[]нетОпределения ИИ-навыков — файлы markdown, которые ИИ читает для получения знаний в области
capabilitiesobjectнетОпциональные функции интеграции с рабочим столом, такие как горячие клавиши, уведомления и присутствие в строке состояния

Поля компонента

Каждая запись в components[]:
ПолеТипОбязательноОписание
namestringдаУникальное имя компонента в приложении
type"ui" | "process"даТип компонента — ui (максимум 1) или process
pathstringдаПуть входа в директории приложения
runtimeobjectнетКоманды: { dev?, build?, run? }
runtime.devstringнетКоманда для запуска dev-сервера (например "bun run dev")
runtime.buildstringнетКоманда для сборки для production (например "vite build")
runtime.runstringнетКоманда для запуска в production (например "bun run start")
schedulestringнетРасписание cron для компонентов процесса (например "*/5 * * * *")
trigger"webhook" | "event"нетРежим триггера для компонентов процесса
envobjectнетКоллекция секретов + окружение для инъекции переменных окружения
env.collectionstringда (если env)Slug коллекции секретов
env.environmentstringда (если env)Slug окружения
env.includestring[]нетИнъектировать только эти имена переменных окружения. Если опущено, инъектировать все из коллекции+окружения.

Поля навыка

Каждая запись в skills[]:
ПолеТипОбязательноОписание
namestringдаИмя навыка
pathstringдаПуть к файлу SKILL.md относительно корня приложения

Ограничения

  • Максимум 1 UI-компонент на приложение
  • Значения name компонентов должны быть уникальны в приложении

Примеры шаблонов

ui приложение

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

export default defineConfig({
  /** Путь к иконке приложения относительно корня репозитория. Загружается на CDN при публикации. */
  icon: 'components/ui/public/favicon.svg',
  /** Компоненты приложения — каждая запись определяет развертываемый модуль. Максимум 1 UI-компонент. */
  components: [
    { name: 'My App', type: 'ui', path: './components/ui' },
  ],
});

process приложение

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

export default defineConfig({
  /** Путь к иконке приложения относительно корня репозитория. Загружается на CDN при публикации. */
  icon: 'icon.svg',
  /** Компоненты приложения — каждая запись определяет развертываемый модуль. */
  components: [
    {
      name: 'My App',
      type: 'process',
      path: './components/process/index.ts',
      runtime: { dev: 'bun run dev', run: 'bun run start' },
      // Постоянные процессы — это долгоживущие серверы. Платформа отправляет
      // триггеры на работающий сервер по пути каждого триггера с
      // `Authorization: Bearer ${KAZZLE_TRIGGER_SECRET}`. Код клиента
      // проверяет заголовок перед выполнением работы.
      processMode: 'persistent',
      triggers: [
        // Пример cron — раскомментируйте и отредактируйте. 5 полей, разрешение в минутах.
        // { name: 'hourly-sync', kind: 'schedule', schedule: '0 * * * *', path: '/cron/hourly-sync' },
        // Пример webhook — POST на /webhooks/{spaceId}/{appId}/My App/incoming
        // { name: 'incoming', kind: 'webhook', path: '/webhook/incoming' },
      ],
    },
  ],
});

пустое приложение

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

export default defineConfig({
  /** Путь к иконке приложения относительно корня репозитория. Загружается на CDN при публикации. */
  icon: 'icon.svg',
  /** Компоненты приложения — каждая запись определяет развертываемый модуль. */
  components: [],
});