メインコンテンツへスキップ

設定

すべての 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[]いいえ実行可能なコンポーネント — UI フロントエンドまたはバックグラウンドプロセス
skillsobject[]いいえAI スキル定義 — AI が読む領域知識用のマークダウンファイル
capabilitiesobjectいいえホットキー、通知、ステータスバープレゼンスなどのオプションのデスクトップ統合機能

コンポーネントフィールド

components[] の各エントリ:
フィールド必須説明
namestringはいアプリ内で一意のコンポーネント名
type"ui" | "process"はいコンポーネント型 — ui(最大 1 個)または process
pathstringはいアプリディレクトリ内のエントリパス
runtimeobjectいいえコマンド:{ dev?, build?, run? }
runtime.devstringいいえ開発サーバーを起動するコマンド(例:"bun run dev"
runtime.buildstringいいえ本番用にビルドするコマンド(例:"vite build"
runtime.runstringいいえ本番環境で起動するコマンド(例:"bun run start"
schedulestringいいえプロセスコンポーネント用の Cron スケジュール(例:"*/5 * * * *"
trigger"webhook" | "event"いいえプロセスコンポーネント用のトリガーモード
envobjectいいえシークレットコレクション + 環境変数注入用の環境
env.collectionstringはい(env の場合)シークレットコレクションスラッグ
env.environmentstringはい(env の場合)環境スラッグ
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' },
  ],
});

プロセスアプリ

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' },
      // 永続的なプロセスは長時間実行されるサーバーです。プラットフォームは
      // 各トリガーの `path` で実行中のサーバーにトリガーをポストします。
      // `Authorization: Bearer ${KAZZLE_TRIGGER_SECRET}` を使用します。カスタマーコードは
      // 作業を行う前にヘッダーを検証します。
      processMode: 'persistent',
      triggers: [
        // Cron の例 — コメント解除して調整します。5 フィールド、分単位の解像度。
        // { name: 'hourly-sync', kind: 'schedule', schedule: '0 * * * *', path: '/cron/hourly-sync' },
        // Webhook の例 — /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: [],
});