Gateway protokolü (WebSocket)
Gateway WS protokolü, OpenClaw için tek denetim düzlemi + düğüm taşımasıdır. Tüm istemciler (CLI, web UI, macOS uygulaması, iOS/Android düğümleri, başsız düğümler) WebSocket üzerinden bağlanır ve el sıkışma sırasında rollerini + kapsamlarını bildirir.Taşıma
- WebSocket, JSON yükleri içeren metin çerçeveleri.
- İlk çerçeve mutlaka bir
connectisteği olmalıdır.
El sıkışma (connect)
Gateway → İstemci (bağlantı öncesi sınama):
server, features, snapshot ve policy şema tarafından zorunludur
(src/gateway/protocol/schema/frames.ts). canvasHostUrl isteğe bağlıdır. auth,
mevcut olduğunda uzlaşılan rolü/kapsamları bildirir ve Gateway bir deviceToken
verdiğinde bunu da içerir.
Bir cihaz token’ı verilmediğinde, hello-ok.auth yine de uzlaşılan
izinleri bildirebilir:
hello-ok ayrıca şunları da içerir:
hello-ok.auth deviceTokens içinde ek
sınırlı rol girdileri de içerebilir:
scopes: [] olarak kalır ve devredilen herhangi bir operatör token’ı
önyükleme operatörü izin listesiyle sınırlı kalır (operator.approvals, operator.read,
operator.talk.secrets, operator.write). Önyükleme kapsam denetimleri rol
önekli kalır: operatör girdileri yalnızca operatör isteklerini karşılar ve
operatör dışı roller yine de kendi rol önekleri altındaki kapsamları gerektirir.
Düğüm örneği
Çerçeveleme
- İstek:
{type:"req", id, method, params} - Yanıt:
{type:"res", id, ok, payload|error} - Olay:
{type:"event", event, payload, seq?, stateVersion?}
Roller + kapsamlar
Roller
operator= denetim düzlemi istemcisi (CLI/UI/otomasyon).node= yetenek barındırıcısı (kamera/ekran/canvas/system.run).
Kapsamlar (operator)
Yaygın kapsamlar:
operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairingoperator.talk.secrets
includeSecrets: true ile talk.config, operator.talk.secrets
(veya operator.admin) gerektirir.
Plugin tarafından kaydedilen Gateway RPC yöntemleri kendi operatör kapsamlarını
isteyebilir, ancak ayrılmış çekirdek yönetici önekleri (config.*, exec.approvals.*, wizard.*,
update.*) her zaman operator.admin olarak çözülür.
Yöntem kapsamı yalnızca ilk geçittir. chat.send üzerinden ulaşılan bazı
slash komutları bunun üzerinde daha sıkı komut düzeyi denetimleri uygular. Örneğin,
kalıcı /config set ve /config unset yazmaları operator.admin gerektirir.
node.pair.approve, temel yöntem kapsamına ek olarak onay sırasında ek bir
kapsam denetimi de içerir:
- komutsuz istekler:
operator.pairing - exec olmayan düğüm komutları içeren istekler:
operator.pairing+operator.write system.run,system.run.prepareveyasystem.whichiçeren istekler:operator.pairing+operator.admin
Yetenekler/komutlar/izinler (node)
Düğümler bağlantı sırasında yetenek iddialarını bildirir:
caps: üst düzey yetenek kategorileri.commands: invoke için komut izin listesi.permissions: ayrıntılı anahtarlar (ör.screen.record,camera.capture).
Varlık durumu
system-presence, cihaz kimliğine göre anahtarlanmış girdiler döndürür.- Varlık durumu girdileri
deviceId,rolesvescopesiçerir; böylece UI’lar, hem operator hem de node olarak bağlanan bir cihaz için tek satır gösterebilir.
Yaygın RPC yöntem aileleri
Bu sayfa, oluşturulmuş tam bir döküm değildir; ancak genel WS yüzeyi yukarıdaki el sıkışma/yetkilendirme örneklerinden daha geniştir. Bunlar, Gateway’in bugün sunduğu başlıca yöntem aileleridir.hello-ok.features.methods, src/gateway/server-methods-list.ts ile yüklenmiş
plugin/kanal yöntem dışa aktarımlarından oluşturulan temkinli bir keşif listesidir.
Bunu özellik keşfi olarak değerlendirin; src/gateway/server-methods/*.ts içinde
uygulanan her çağrılabilir yardımcı için oluşturulmuş bir döküm olarak değil.
Sistem ve kimlik
health, önbelleğe alınmış veya yeni yoklanmış Gateway sağlık anlık görüntüsünü döndürür.status,/statustarzı Gateway özetini döndürür; hassas alanlar yalnızca admin kapsamlı operatör istemcilerine dahil edilir.gateway.identity.get, relay ve eşleştirme akışlarında kullanılan Gateway cihaz kimliğini döndürür.system-presence, bağlı operatör/düğüm cihazları için geçerli varlık durumu anlık görüntüsünü döndürür.system-event, bir sistem olayı ekler ve varlık durumu bağlamını güncelleyip/yayınlayabilir.last-heartbeat, kalıcı hale getirilen en son Heartbeat olayını döndürür.set-heartbeats, Gateway üzerinde Heartbeat işlemeyi açıp kapatır.
Modeller ve kullanım
models.list, çalışma zamanında izin verilen model kataloğunu döndürür.usage.status, sağlayıcı kullanım pencereleri/kalan kota özetlerini döndürür.usage.cost, bir tarih aralığı için toplu maliyet kullanımı özetlerini döndürür.doctor.memory.status, etkin varsayılan aracı çalışma alanı için vektör belleği / embedding hazırlık durumunu döndürür.sessions.usage, oturum başına kullanım özetlerini döndürür.sessions.usage.timeseries, bir oturum için zaman serisi kullanımını döndürür.sessions.usage.logs, bir oturum için kullanım günlük girdilerini döndürür.
Kanallar ve giriş yardımcıları
channels.status, yerleşik + paketlenmiş kanal/plugin durum özetlerini döndürür.channels.logout, çıkışı destekleyen kanallarda belirli bir kanal/hesap oturumunu kapatır.web.login.start, mevcut QR destekli web kanal sağlayıcısı için bir QR/web giriş akışı başlatır.web.login.wait, bu QR/web giriş akışının tamamlanmasını bekler ve başarılı olursa kanalı başlatır.push.test, kayıtlı bir iOS düğümüne test APNs bildirimi gönderir.voicewake.get, depolanan uyandırma sözcüğü tetikleyicilerini döndürür.voicewake.set, uyandırma sözcüğü tetikleyicilerini günceller ve değişikliği yayınlar.
Mesajlaşma ve günlükler
send, sohbet çalıştırıcısı dışındaki kanal/hesap/iş parçacığı hedefli gönderimler için doğrudan giden teslim RPC’sidir.logs.tail, yapılandırılmış Gateway dosya günlüğü kuyruğunu imleç/sınır ve en fazla bayt denetimleriyle döndürür.
Talk ve TTS
talk.config, etkin Talk yapılandırma yükünü döndürür;includeSecrets,operator.talk.secrets(veyaoperator.admin) gerektirir.talk.mode, WebChat/Control UI istemcileri için geçerli Talk modu durumunu ayarlar/yayınlar.talk.speak, etkin Talk konuşma sağlayıcısı üzerinden konuşma sentezler.tts.status, TTS etkinlik durumu, etkin sağlayıcı, yedek sağlayıcılar ve sağlayıcı yapılandırma durumunu döndürür.tts.providers, görünür TTS sağlayıcı envanterini döndürür.tts.enablevetts.disable, TTS tercih durumunu açıp kapatır.tts.setProvider, tercih edilen TTS sağlayıcısını günceller.tts.convert, tek seferlik metinden konuşmaya dönüştürme çalıştırır.
Gizli anahtarlar, yapılandırma, güncelleme ve sihirbaz
secrets.reload, etkin SecretRef’leri yeniden çözümler ve çalışma zamanı gizli durumunu yalnızca tam başarı durumunda değiştirir.secrets.resolve, belirli bir komut/hedef kümesi için komut hedefli gizli anahtar atamalarını çözümler.config.get, geçerli yapılandırma anlık görüntüsünü ve hash’ini döndürür.config.set, doğrulanmış bir yapılandırma yükü yazar.config.patch, kısmi bir yapılandırma güncellemesini birleştirir.config.apply, tam yapılandırma yükünü doğrular + değiştirir.config.schema, Control UI ve CLI araçları tarafından kullanılan canlı yapılandırma şeması yükünü döndürür: şema,uiHints, sürüm ve üretim meta verileri; çalışma zamanı yükleyebildiğinde plugin + kanal şema meta verileri de buna dahildir. Şema, UI tarafından kullanılan etiketler ve yardım metniyle aynı kaynaklardan türetilen alantitle/descriptionmeta verilerini içerir; buna eşleşen alan belgeleri bulunduğunda iç içe nesne, joker karakter, dizi öğesi veanyOf/oneOf/allOfbileşim dalları da dahildir.config.schema.lookup, tek bir yapılandırma yolu için yol kapsamlı arama yükü döndürür: normalleştirilmiş yol, sığ bir şema düğümü, eşleşen ipucu +hintPathve UI/CLI ayrıntı incelemesi için doğrudan alt öğe özetleri.- Arama şeması düğümleri kullanıcıya yönelik belgeleri ve yaygın doğrulama alanlarını korur:
title,description,type,enum,const,format,pattern, sayısal/dize/dizi/nesne sınırları veadditionalProperties,deprecated,readOnly,writeOnlygibi boolean bayraklar. - Alt öğe özetleri
key, normalleştirilmişpath,type,required,hasChildrenve eşleşenhint/hintPathalanlarını sunar.
- Arama şeması düğümleri kullanıcıya yönelik belgeleri ve yaygın doğrulama alanlarını korur:
update.run, Gateway güncelleme akışını çalıştırır ve yalnızca güncellemenin kendisi başarılı olduğunda yeniden başlatma planlar.wizard.start,wizard.next,wizard.statusvewizard.cancel, ilk kurulum sihirbazını WS RPC üzerinden sunar.
Mevcut başlıca aileler
Aracı ve çalışma alanı yardımcıları
agents.list, yapılandırılmış aracı girdilerini döndürür.agents.create,agents.updateveagents.delete, aracı kayıtlarını ve çalışma alanı bağlantılarını yönetir.agents.files.list,agents.files.getveagents.files.set, bir aracı için sunulan önyükleme çalışma alanı dosyalarını yönetir.agent.identity.get, bir aracı veya oturum için etkin asistan kimliğini döndürür.agent.wait, bir çalışmanın tamamlanmasını bekler ve mevcut olduğunda son durum anlık görüntüsünü döndürür.
Oturum denetimi
sessions.list, geçerli oturum dizinini döndürür.sessions.subscribevesessions.unsubscribe, geçerli WS istemcisi için oturum değişikliği olay aboneliklerini açıp kapatır.sessions.messages.subscribevesessions.messages.unsubscribe, tek bir oturum için transcript/mesaj olay aboneliklerini açıp kapatır.sessions.preview, belirli oturum anahtarları için sınırlı transcript önizlemeleri döndürür.sessions.resolve, bir oturum hedefini çözümler veya kanonik hale getirir.sessions.create, yeni bir oturum girdisi oluşturur.sessions.send, mevcut bir oturuma mesaj gönderir.sessions.steer, etkin bir oturum için kesip yönlendirme varyantıdır.sessions.abort, bir oturum için etkin çalışmayı durdurur.sessions.patch, oturum meta verilerini/geçersiz kılmalarını günceller.sessions.reset,sessions.deletevesessions.compact, oturum bakım işlemlerini gerçekleştirir.sessions.get, depolanan tam oturum satırını döndürür.- sohbet yürütme hâlâ
chat.history,chat.send,chat.abortvechat.injectkullanır. chat.history, UI istemcileri için görüntüleme-normalleştirilmiştir: satır içi yönerge etiketleri görünür metinden çıkarılır, düz metin araç-çağrısı XML yükleri (şunlar dahil:<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>ve kısaltılmış araç-çağrısı blokları) ile sızmış ASCII/tam genişlikte model denetim belirteçleri çıkarılır, tam olarakNO_REPLY/no_replyolan salt sessiz-belirteç asistan satırları atlanır ve aşırı büyük satırlar yer tutucularla değiştirilebilir.
Cihaz eşleştirme ve cihaz token’ları
device.pair.list, bekleyen ve onaylanmış eşleştirilmiş cihazları döndürür.device.pair.approve,device.pair.rejectvedevice.pair.remove, cihaz eşleştirme kayıtlarını yönetir.device.token.rotate, eşleştirilmiş bir cihaz token’ını onaylı rolü ve kapsam sınırları içinde döndürür.device.token.revoke, eşleştirilmiş bir cihaz token’ını geçersiz kılar.
Düğüm eşleştirme, invoke ve bekleyen işler
node.pair.request,node.pair.list,node.pair.approve,node.pair.rejectvenode.pair.verify, düğüm eşleştirme ve önyükleme doğrulamasını kapsar.node.listvenode.describe, bilinen/bağlı düğüm durumunu döndürür.node.rename, eşleştirilmiş bir düğüm etiketini günceller.node.invoke, bir komutu bağlı bir düğüme iletir.node.invoke.result, bir invoke isteği için sonucu döndürür.node.event, düğüm kaynaklı olayları tekrar Gateway’e taşır.node.canvas.capability.refresh, kapsamlı canvas yetenek token’larını yeniler.node.pending.pullvenode.pending.ack, bağlı düğüm kuyruk API’leridir.node.pending.enqueuevenode.pending.drain, çevrimdışı/bağlantısı kesilmiş düğümler için kalıcı bekleyen işleri yönetir.
Onay aileleri
exec.approval.request,exec.approval.get,exec.approval.listveexec.approval.resolve, tek seferlik exec onay isteklerini ve bekleyen onay arama/yeniden oynatma akışlarını kapsar.exec.approval.waitDecision, bekleyen bir exec onayında karar bekler ve son kararı döndürür (veya zaman aşımındanull).exec.approvals.getveexec.approvals.set, Gateway exec onay ilkesi anlık görüntülerini yönetir.exec.approvals.node.getveexec.approvals.node.set, düğüm yerel exec onay ilkesini düğüm relay komutları aracılığıyla yönetir.plugin.approval.request,plugin.approval.list,plugin.approval.waitDecisionveplugin.approval.resolve, Plugin tanımlı onay akışlarını kapsar.
Diğer başlıca aileler
- otomasyon:
wake, hemen veya bir sonraki Heartbeat sırasında uyandırma metni eklemeyi zamanlarcron.list,cron.status,cron.add,cron.update,cron.remove,cron.run,cron.runs
- Skills/araçlar:
commands.list,skills.*,tools.catalog,tools.effective
Yaygın olay aileleri
chat:chat.injectve diğer yalnızca transcript içeren sohbet olayları gibi UI sohbet güncellemeleri.session.messagevesession.tool: abone olunmuş bir oturum için transcript/olay akışı güncellemeleri.sessions.changed: oturum dizini veya meta veriler değişti.presence: sistem varlık durumu anlık görüntüsü güncellemeleri.tick: periyodik keepalive / canlılık olayı.health: Gateway sağlık anlık görüntüsü güncellemesi.heartbeat: Heartbeat olay akışı güncellemesi.cron: Cron çalıştırma/iş değişikliği olayı.shutdown: Gateway kapanma bildirimi.node.pair.requested/node.pair.resolved: düğüm eşleştirme yaşam döngüsü.node.invoke.request: düğüm invoke istek yayını.device.pair.requested/device.pair.resolved: eşleştirilmiş cihaz yaşam döngüsü.voicewake.changed: uyandırma sözcüğü tetikleyici yapılandırması değişti.exec.approval.requested/exec.approval.resolved: exec onay yaşam döngüsü.plugin.approval.requested/plugin.approval.resolved: Plugin onayı yaşam döngüsü.
Düğüm yardımcı yöntemleri
- Düğümler, otomatik izin denetimleri için geçerli skill çalıştırılabilirleri listesini
almak üzere
skills.binsçağırabilir.
Operatör yardımcı yöntemleri
- Operatörler, bir aracı için çalışma zamanı komut envanterini almak üzere
commands.list(operator.read) çağırabilir.agentIdisteğe bağlıdır; varsayılan aracı çalışma alanını okumak için bunu atlayın.scope, birincilnamehedefinin hangi yüzeyi kullandığını denetler:text, başında/olmadan birincil metin komut belirtecini döndürürnativeve varsayılanbothyolu, mevcut olduğunda sağlayıcıya duyarlı doğal adları döndürür
textAliases,/modelve/mgibi tam slash takma adlarını taşır.nativeName, mevcut olduğunda sağlayıcıya duyarlı doğal komut adını taşır.provideristeğe bağlıdır ve yalnızca doğal adlandırma ile doğal Plugin komut kullanılabilirliğini etkiler.includeArgs=false, yanıttan serileştirilmiş argüman meta verilerini çıkarır.
- Operatörler, bir aracı için çalışma zamanı araç kataloğunu almak üzere
tools.catalog(operator.read) çağırabilir. Yanıt, gruplanmış araçları ve kaynak meta verilerini içerir:source:coreveyapluginpluginId:source="plugin"olduğunda Plugin sahibioptional: bir Plugin aracının isteğe bağlı olup olmadığı
- Operatörler, bir oturum için çalışma zamanında etkin araç
envanterini almak üzere
tools.effective(operator.read) çağırabilir.sessionKeygereklidir.- Gateway, çağıran tarafından sağlanan yetkilendirme veya teslim bağlamını kabul etmek yerine güvenilir çalışma zamanı bağlamını oturumdan sunucu tarafında türetir.
- Yanıt oturum kapsamlıdır ve etkin konuşmanın şu anda kullanabildiklerini yansıtır; buna çekirdek, Plugin ve kanal araçları dahildir.
- Operatörler, bir aracı için görünür skill envanterini almak üzere
skills.status(operator.read) çağırabilir.agentIdisteğe bağlıdır; varsayılan aracı çalışma alanını okumak için bunu atlayın.- Yanıt; uygunluk, eksik gereksinimler, yapılandırma denetimleri ve ham gizli değerleri açığa çıkarmadan temizlenmiş kurulum seçeneklerini içerir.
- Operatörler, ClawHub keşif meta verileri için
skills.searchveskills.detail(operator.read) çağırabilir. - Operatörler,
skills.install(operator.admin) yöntemini iki kipte çağırabilir:- ClawHub kipi:
{ source: "clawhub", slug, version?, force? }, bir skill klasörünü varsayılan aracı çalışma alanıskills/dizinine kurar. - Gateway kurucu kipi:
{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }Gateway ana bilgisayarında bildirilen birmetadata.openclaw.installeylemini çalıştırır.
- ClawHub kipi:
- Operatörler,
skills.update(operator.admin) yöntemini iki kipte çağırabilir:- ClawHub kipi, varsayılan aracı çalışma alanında izlenen tek bir slug’ı veya tüm izlenen ClawHub kurulumlarını günceller.
- Config kipi,
enabled,apiKeyveenvgibiskills.entries.<skillKey>değerlerini yamalar.
Exec onayları
- Bir exec isteği onay gerektirdiğinde, Gateway
exec.approval.requestedyayınlar. - Operatör istemcileri
exec.approval.resolveçağırarak çözümleme yapar (operator.approvalskapsamı gerektirir). host=nodeiçinexec.approval.request,systemRunPlaniçermelidir (kanonikargv/cwd/rawCommand/oturum meta verileri).systemRunPlaniçermeyen istekler reddedilir.- Onaydan sonra, iletilen
node.invoke system.runçağrıları yetkili komut/cwd/oturum bağlamı olarak bu kanoniksystemRunPlan’ı yeniden kullanır. - Bir çağıran, hazırlık ile son onaylanmış
system.runiletimi arasındacommand,rawCommand,cwd,agentIdveyasessionKeydeğerlerini değiştirirse, Gateway değiştirilmiş yüke güvenmek yerine çalıştırmayı reddeder.
Aracı teslim yedeği
agentistekleri, giden teslim talep etmek içindeliver=trueiçerebilir.bestEffortDeliver=false, katı davranışı korur: çözümlenmemiş veya yalnızca dahili teslim hedefleriINVALID_REQUESTdöndürür.bestEffortDeliver=true, harici teslim edilebilir rota çözümlenemediğinde oturumla sınırlı yürütmeye yedek geçişe izin verir (örneğin dahili/webchat oturumları veya belirsiz çok kanallı yapılandırmalar).
Sürümleme
PROTOCOL_VERSION,src/gateway/protocol/schema/protocol-schemas.tsiçinde bulunur.- İstemciler
minProtocol+maxProtocolgönderir; sunucu uyuşmazlıkları reddeder. - Şemalar + modeller TypeBox tanımlarından oluşturulur:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
İstemci sabitleri
src/gateway/client.ts içindeki referans istemci bu varsayılanları kullanır. Değerler
protokol v3 boyunca kararlıdır ve üçüncü taraf istemciler için beklenen taban çizgisidir.
| Sabit | Varsayılan | Kaynak |
|---|---|---|
PROTOCOL_VERSION | 3 | src/gateway/protocol/schema/protocol-schemas.ts |
| İstek zaman aşımı (RPC başına) | 30_000 ms | src/gateway/client.ts (requestTimeoutMs) |
| Ön yetkilendirme / connect-challenge zaman aşımı | 10_000 ms | src/gateway/handshake-timeouts.ts (sıkıştırma 250–10_000) |
| İlk yeniden bağlanma backoff’u | 1_000 ms | src/gateway/client.ts (backoffMs) |
| En büyük yeniden bağlanma backoff’u | 30_000 ms | src/gateway/client.ts (scheduleReconnect) |
| Cihaz token’ı kapanışından sonra hızlı yeniden deneme sıkıştırması | 250 ms | src/gateway/client.ts |
terminate() öncesi zorla durdurma bekleme süresi | 250 ms | FORCE_STOP_TERMINATE_GRACE_MS |
stopAndWait() varsayılan zaman aşımı | 1_000 ms | STOP_AND_WAIT_TIMEOUT_MS |
Varsayılan tick aralığı (önce hello-ok) | 30_000 ms | src/gateway/client.ts |
| Tick zaman aşımı kapanışı | sessizlik tickIntervalMs * 2 değerini aştığında kod 4000 | src/gateway/client.ts |
MAX_PAYLOAD_BYTES | 25 * 1024 * 1024 (25 MB) | src/gateway/server-constants.ts |
policy.tickIntervalMs, policy.maxPayload ve policy.maxBufferedBytes
değerlerini hello-ok içinde bildirir; istemciler el sıkışma öncesi varsayılanlar yerine
bu değerlere uymalıdır.
Yetkilendirme
- Paylaşılan gizli anahtar kullanan Gateway yetkilendirmesi, yapılandırılmış yetkilendirme kipine bağlı olarak
connect.params.auth.tokenveyaconnect.params.auth.passwordkullanır. - Tailscale Serve
(
gateway.auth.allowTailscale: true) veya loopback olmayangateway.auth.mode: "trusted-proxy"gibi kimlik taşıyan kipler, bağlanma yetkilendirme denetiminiconnect.params.auth.*yerine istek üstbilgilerinden karşılar. - Özel girişte
gateway.auth.mode: "none", paylaşılan gizli anahtar bağlantı yetkilendirmesini tamamen atlar; bu kipi herkese açık/güvenilmeyen girişlerde açığa çıkarmayın. - Eşleştirmeden sonra Gateway, bağlantı rolü + kapsamlarına göre sınırlanmış bir cihaz token’ı verir. Bu değer
hello-ok.auth.deviceTokeniçinde döndürülür ve istemci tarafından gelecekteki bağlantılar için kalıcı olarak saklanmalıdır. - İstemciler, başarılı her bağlantıdan sonra birincil
hello-ok.auth.deviceTokendeğerini kalıcı olarak saklamalıdır. - Saklanan bu cihaz token’ı ile yeniden bağlanırken, bu token için saklanan onaylı kapsam kümesi de yeniden kullanılmalıdır. Bu, zaten verilmiş okuma/yoklama/durum erişimini korur ve yeniden bağlantıların sessizce daha dar, örtük bir yalnızca yönetici kapsamına düşmesini önler.
- İstemci tarafı bağlantı yetkilendirme derlemesi (
src/gateway/client.tsiçindekiselectConnectAuth):auth.passwordortogonaldir ve ayarlandığında her zaman iletilir.auth.tokenşu öncelik sırasına göre doldurulur: önce açık paylaşılan token, sonra açık birdeviceToken, sonra ise saklanan cihaz başına token (deviceId+roleile anahtarlanır).auth.bootstrapToken, yalnızca yukarıdakilerin hiçbiri birauth.tokençözümlemediğinde gönderilir. Paylaşılan bir token veya çözümlemiş herhangi bir cihaz token’ı bunu bastırır.- Tek seferlik
AUTH_TOKEN_MISMATCHyeniden denemesinde saklanan bir cihaz token’ının otomatik olarak yükseltilmesi yalnızca güvenilir uç noktalar için geçerlidir — loopback veya sabitlenmiştlsFingerprintiçerenwss://. Sabitleme olmadan herkese açıkwss://buna dahil değildir.
- Ek
hello-ok.auth.deviceTokensgirdileri, önyükleme devri token’larıdır. Bunları yalnızca bağlantı,wss://veya loopback/yerel eşleştirme gibi güvenilir bir taşıma üzerinde önyükleme yetkilendirmesi kullandığında kalıcı olarak saklayın. - Bir istemci açık bir
deviceTokenveya açıkscopessağlarsa, çağıranın istediği bu kapsam kümesi belirleyici olmaya devam eder; önbelleğe alınmış kapsamlar yalnızca istemci saklanan cihaz başına token’ı yeniden kullanıyorsa yeniden kullanılır. - Cihaz token’ları
device.token.rotatevedevice.token.revokeile döndürülebilir/geçersiz kılınabilir (operator.pairingkapsamı gerektirir). - Token verme/döndürme, o cihazın eşleştirme girdisinde kaydedilen onaylı rol kümesiyle sınırlı kalır; bir token’ı döndürmek, cihazı eşleştirme onayının hiç vermediği bir role genişletemez.
- Eşleştirilmiş cihaz token oturumları için cihaz yönetimi, çağıranın ayrıca
operator.adminyetkisi yoksa kendisiyle sınırlıdır: yönetici olmayan çağıranlar yalnızca kendi cihaz girdilerini kaldırabilir/geçersiz kılabilir/döndürebilir. device.token.rotate, istenen operatör kapsam kümesini de çağıranın mevcut oturum kapsamlarına göre denetler. Yönetici olmayan çağıranlar, bir token’ı hâlihazırda sahip olduklarından daha geniş bir operatör kapsam kümesine döndüremez.- Yetkilendirme hataları
error.details.codeile birlikte kurtarma ipuçları içerir:error.details.canRetryWithDeviceToken(boolean)error.details.recommendedNextStep(retry_with_device_token,update_auth_configuration,update_auth_credentials,wait_then_retry,review_auth_configuration)
AUTH_TOKEN_MISMATCHiçin istemci davranışı:- Güvenilir istemciler, önbelleğe alınmış cihaz başına bir token ile sınırlı tek bir yeniden deneme yapabilir.
- Bu yeniden deneme başarısız olursa, istemciler otomatik yeniden bağlanma döngülerini durdurmalı ve operatör eylemi yönlendirmesini göstermelidir.
Cihaz kimliği + eşleştirme
- Düğümler, anahtar çifti parmak izinden türetilmiş kararlı bir cihaz kimliği (
device.id) içermelidir. - Gateway’ler cihaz + rol başına token verir.
- Yerel otomatik onay etkin değilse, yeni cihaz kimlikleri için eşleştirme onayları gerekir.
- Eşleştirme otomatik onayı, doğrudan yerel local loopback bağlantılarına odaklanır.
- OpenClaw ayrıca güvenilir paylaşılan gizli anahtar yardımcı akışları için dar bir arka uç/kapsayıcı yerel self-connect yoluna sahiptir.
- Aynı ana makinedeki tailnet veya LAN bağlantıları yine de uzak kabul edilir ve eşleştirme onayı gerektirir.
- Tüm WS istemcileri
connectsırasındadevicekimliği içermelidir (operator+node). Control UI bunu yalnızca şu kiplerde atlayabilir:- yalnızca localhost üzerinde güvensiz HTTP uyumluluğu için
gateway.controlUi.allowInsecureAuth=true. - başarılı
gateway.auth.mode: "trusted-proxy"operatör Control UI yetkilendirmesi. gateway.controlUi.dangerouslyDisableDeviceAuth=true(acil durum, ciddi güvenlik düşüşü).
- yalnızca localhost üzerinde güvensiz HTTP uyumluluğu için
- Tüm bağlantılar, sunucu tarafından sağlanan
connect.challengenonce değerini imzalamalıdır.
Cihaz yetkilendirme geçiş tanılamaları
Hâlâ challenge öncesi imzalama davranışını kullanan eski istemciler için,connect artık
error.details.code altında kararlı bir error.details.reason ile DEVICE_AUTH_* ayrıntı kodları döndürür.
Yaygın geçiş hataları:
| Mesaj | details.code | details.reason | Anlamı |
|---|---|---|---|
device nonce required | DEVICE_AUTH_NONCE_REQUIRED | device-nonce-missing | İstemci device.nonce değerini atladı (veya boş gönderdi). |
device nonce mismatch | DEVICE_AUTH_NONCE_MISMATCH | device-nonce-mismatch | İstemci eski/yanlış bir nonce ile imzaladı. |
device signature invalid | DEVICE_AUTH_SIGNATURE_INVALID | device-signature | İmza yükü v2 yüküyle eşleşmiyor. |
device signature expired | DEVICE_AUTH_SIGNATURE_EXPIRED | device-signature-stale | İmzalanmış zaman damgası izin verilen kaymanın dışında. |
device identity mismatch | DEVICE_AUTH_DEVICE_ID_MISMATCH | device-id-mismatch | device.id, açık anahtar parmak iziyle eşleşmiyor. |
device public key invalid | DEVICE_AUTH_PUBLIC_KEY_INVALID | device-public-key | Açık anahtar biçimi/kanonikleştirmesi başarısız oldu. |
- Her zaman
connect.challengebekleyin. - Sunucu nonce değerini içeren v2 yükünü imzalayın.
- Aynı nonce değerini
connect.params.device.nonceiçinde gönderin. - Tercih edilen imza yükü
v3sürümüdür; bu sürüm cihaz/istemci/rol/kapsam/token/nonce alanlarına ek olarakplatformvedeviceFamilyalanlarını da bağlar. - Eski
v2imzaları uyumluluk için kabul edilmeye devam eder, ancak eşleştirilmiş cihaz meta veri sabitlemesi yeniden bağlanmada komut ilkesini denetlemeye devam eder.
TLS + sabitleme
- WS bağlantıları için TLS desteklenir.
- İstemciler isteğe bağlı olarak Gateway sertifika parmak izini sabitleyebilir (
gateway.tlsyapılandırması ile birliktegateway.remote.tlsFingerprintveya CLI--tls-fingerprintseçeneğine bakın).
Kapsam
Bu protokol tam Gateway API’sini açığa çıkarır (durum, kanallar, modeller, sohbet, aracı, oturumlar, düğümler, onaylar vb.). Kesin yüzey,src/gateway/protocol/schema.ts içindeki
TypeBox şemaları tarafından tanımlanır.