Lewati ke konten utama

Introspection

Discover setiap dispatch command yang lagi di-expose binary. Berguna buat tooling external yang mau enumerate surface tanpa code-walk lewat api_dispatch.rs.

GET /api/commands

Auth: bearer.

Response (200):

{
"commands": [
"account_creator_accounts",
"bot_accept_friend",
"bot_active_worlds",
"bot_add_friend",
"bot_chat",
"bot_drop",
"bot_walk_to",
"catalog_block_types",
"catalog_item_database",
"catalog_pack_pool",
"connect_bot",
"disconnect_bot",
"join_world",
"leave_world",
"list_bots",
"seraph_execute",
"spawn_bot_email",
"..."
]
}

List-nya alfabetis dan reflect set persis dari nama yang POST /invoke terima sebagai cmd. Tambah fitur mid-release rotate list ini otomatis — endpoint introspection baca s.handlers.keys() langsung, gak ada manifest yang harus di-keep-in-sync.

Manggil command yang ke-discover

Setiap nama yang di-return di sini reachable lewat universal dispatch endpoint:

curl -s -X POST http://localhost:8090/invoke \
-H 'authorization: Bearer <token>' \
-H 'content-type: application/json' \
-d '{"cmd":"<name>","args":<args>}'

<args> adalah shape apapun yang handler-nya expect. Buat handler zero-arg, kirim null atau {}. Buat per-bot command, shape umum {"id":"bot-1"}. Schema argumen lengkap ada di src-tauri/src/api_dispatch.rs — buka baris register0 / register1 yang match dan struct setelah register1::<...>.

REST sugar vs /invoke

REST sugar route (/api/bots/{id}/*, /api/scripts/*, dll.) itu wrapper tipis yang forward ke dispatcher. Apa pun yang mereka bisa, /invoke juga bisa. Kalau mau drive setiap bot dari satu klien generik, point ke /invoke aja, skip sugar sepenuhnya.