Tools
Sebuah tool adalah tindakan bernama yang dapat dipanggil AI, dengan input yang diketik — misalnyasend_email(to, subject, body). Tools dideklarasikan dalam tools.ts skill, dan untuk tools yang disajikan aplikasi Anda, didukung oleh rute HTTP di salah satu komponen Anda. Halaman ini adalah sumber kebenaran untuk kontrak tool; Skills mencakup di mana tools.ts berada.
Mendeklarasikan tool
Setiap entri dalamtools.ts memiliki name yang aman untuk provider, displayName yang ramah, description, skema Zod input, dan target yang mengatakan apa yang Kazzle panggil.
Targets
target adalah alamat yang dapat digunakan kembali untuk tool atau tombol tindakan yang diperlukan. Panggilan tool AI langsung dan klik tombol dapat menggunakan objek target yang sama, sehingga keduanya menjalankan kode yang sama.
Target HTTP menggunakan field permintaan yang sama:
body: '${input}'.
Referensi
Kazzle menyelesaikan referensi dalam field HTTP targetquery, headers, body, dan url sebelum pengiriman:
${input}— seluruh input tool, atau seluruh input tombol.${input.path}— nilai bersarang dari input.${env.NAME}— variabel lingkungan bernama darienv.collection+env.environmentyang dideklarasikan komponen aplikasi pemilik.
$${input.name} ketika Anda memerlukan teks literal ${input.name}.
Permintaan handler
Untuk targetapp, tambahkan rute yang cocok di komponen target. Dengan body: '${input}', Kazzle mengirim input yang diketik sebagai badan JSON:
app juga menerima:
Target aplikasi tidak dapat mengatur
Authorization melalui headers; Kazzle memiliki header itu. Baca konteks dengan toolContext(req) dari @kazzle/app/tools ketika handler harus membedakan thread vs Tools API.
Tool yang dideklarasikan tanpa rute yang cocok tidak melakukan apa pun yang berguna — tambahkan keduanya. tools.json tidak didukung; compiler aplikasi gagal jika menemukan satu.
Respons handler
Kembalikan teks biasa, atau JSON dengan hingga tiga saluran:content— hasil biasa yang dibaca AI (diberikan ke model). Diperlukan.markdown— opsional. Ringkasan teks kaya pendek yang dirender di kartu tool (react-markdown; HTML mentah diloloskan). Bagus untuk kalimat, daftar kecil, tautan inline. Jalur relatif telanjang dirender sebagai teks preformatted mati — tautan harus absolut.embedUrl— opsional. URL absolut yang disajikan aplikasi Anda; kartu merender dalam iframe sandbox. Ini adalah cara Anda menampilkan UI nyata, lebar penuh — layar koneksi, dasbor, bagan. Aplikasi Anda menghosting dan memiliki halaman, sehingga dapat sepenuhnya interaktif terhadap backend, cookie, dan OAuth Anda sendiri. Tidak ada yang ditulis ke drive.
embedUrl menang atas markdown ketika keduanya diatur. Selalu pertahankan content yang bermakna — itulah yang dibaca AI.
Tindakan yang diperlukan
Tool aplikasi dapat menjeda thread ketika memerlukan tindakan pengguna (atau perangkat). Kembalikantype: 'action_required' dengan judul kartu dan tombol. Hanya valid ketika toolContext(req).source === 'thread' — melalui Tools API (source: 'api'), kembalikan kesalahan domain normal.
/chat/resume setelah tombol ditekan. Klien yang cocok melihat tombol penulis; klien yang tidak cocok masih melihat Skip/Cancel plus “Continue on ”. Tombol tanpa target mengirimkan input sebagai hasil tool. Tombol dengan target menjalankan target itu terlebih dahulu, kemudian menggunakan hasil target sebagai hasil tool.
UI Kaya — sematkan halaman yang dihosting aplikasi
Ketika hasil tool bersifat visual atau interaktif (layar koneksi, bagan, dasbor ringkasan), sajikan halaman dari salah satu komponen Anda dan kembalikan URL absolut sebagaiembedUrl. Bangun URL dari URL komponen yang disuntikkan — jangan pernah jalur relatif.
embedUrl daripada memancarkan string HTML: aplikasi Anda sudah melayani halaman, UI tetap interaktif dan diversi dengan kode Anda, dan tidak ada artefak per-panggilan yang ditulis di mana pun.