İçeriğe geç

Uzaktan kontrol ve mobil

Control Center bir masaüstü uygulamasıdır, ancak izlediği iş siz masanızdan uzaklaştığınızda durmaz. Uzaktan kontrol, remote.usectrl.dev adresindeki yardımcı uygulama Remote ile telefonunuzu cc_server’ınıza eşleştirir; böylece filoyu oradan izleyebilirsiniz: mesajları ve biletleri okuyun, bir ajana yanıt verin, haber akışınızı triyaj edin — sunucuda yaşayan ses, transkript, kaynak kod veya kimlik bilgileri oradan hiç ayrılmadan.

Onu, Control Center’ın ağırlıklı olarak okuma amaçlı bir yardımcısı olarak düşünün. Tam masaüstü istemcisinin yerini alması amaçlanmamıştır.

Telefon cc_server’a bir WebSocket üzerinden ulaşır: ya doğrudan bir bağlantı (loopback, LAN, tailnet veya wss://) ya da mühürlenmiş çerçeveleri aktaran bir sinyal aracısındaki davetle korunan bir oda. Eşten eşe bir veri kanalı yoktur.

Eşleştirilmiş telefon, sunucunun yüzeyinin küçük ve kasıtlı bir dilimine ulaşır:

  • Okuma: biletler, ajanlar, alanlar ve bunların mesajları ile haber akışınız
  • Yanıt verme: bir alanda mesaj gönderin, bir bileti güncelleyin veya atayın, bir makaleyi okundu ya da kaydedildi olarak işaretleyin
  • Bir playbook çalıştırma: kaydedilmiş bir plan şablonunu parametreleriyle örnekleyin. Bu yalnızca bir plan önerir; bir operatör tam istemcide Plan Studio’da onaylayana kadar hiçbir şey yürütülmez ve hiçbir harcama yapılmaz
  • Çalışma alanlarını değiştirme: telefonun kendi seçicisinden

Neredeyse hepsi bu kadardır. Telefon, tam bir istemciden daha düşük ayrıcalıklı bir principal’dır. Süreç başlatamaz, LLM bütçesi harcayamaz, GitHub’a push yapamaz veya çalışma alanı oluşturamaz. Bunun yalnızca amaçlanmadığını, nasıl uygulandığını erişim modelinde görün.

Bağlantı aracılı bir aktarıcı üzerinden ilerler: sunucu, bir wss:// aracısındaki davetle korunan tek bir odaya sahibi olarak katılır ve eşleştirilmiş her istemci — masaüstü, web, telefon — süreyle sınırlı bir giriş belirteciyle aynı odaya katılır. Üç parça bir araya gelir:

Parça Rol
Remote (telefon uygulaması) Varsayılan olarak remote.usectrl.dev adresinde ya da kendi sunucunuzda barındırılan yardımcı web uygulaması. Tarayıcıda yüklenir, eşleştirme kaydını IndexedDB’de tutar.
Aktarma aracısı N yönlü odalar barındıran durumsuz bir wss:// aktarıcısı (cc_signaling_server). Yalnızca opak çerçeveler taşır: her yük, telefon ile sunucu arasında uçtan uca mühürlenir; böylece aracı ne uygulama verisini ne de eşleştirme sırrını görür ve ilettiği şeyi hiçbir zaman yorumlamaz.
cc_server Odanın sahibi. Telefonun çağrılarını, diğer tüm istemcilerin kullandığı aynı dağıtıcı üzerinden yanıtlar.

Bir eşleştirme teklifi, sunucuya giden her yolu (LAN, tailnet, genel wss://, aktarıcı) ve kimlik parmak izini listeleyen bir bağlantı tanımlayıcısı taşır. Telefonun çözümleyicisi erişilebilen en iyi yolu seçer ve ilk bağlantıda parmak izini sabitler (TOFU); aktarıcı, doğrudan bir yol olmasa bile bağlantıyı garanti eder ve trafiği hiçbir zaman okuyamaz.

Eşleştirme uygulamadan üretilir ve bir derin bağlantı olarak iletilir; yordam için Bir cihaz eşleştirme sayfasına bakın. Burada önemli olan yapısıdır.

https://<pwa-host>/#<payload>

Yük, URL parçasında — # sonrasındaki ve tarayıcıların sunucuya asla göndermediği bölümde — ilerler; böylece PWA’nın HTTPS ana makinesi onu hiç görmez. Telefonun sunucuya ulaşmak ve kim olduğunu kanıtlamak için ihtiyaç duyduğu her şeyi taşır: bağlantı tanımlayıcısı (her yol artı kimlik parmak izi), yeni üretilmiş bir cihaz kimliği, 32 baytlık bir ön paylaşımlı anahtar ve bir son kullanma damgası. Telefon bunu çözer, yerel olarak bir eşleştirme kaydı saklar ve parçayı kaldırır; böylece sır URL’den çıkar.

İki yük biçimi vardır ve bunlar birbirinin yerine geçmez. Uygulama içi eşleştirme panelinden üretilen telefon QR’ı, Remote PWA ana makinesine yöneltilmiş yukarıdaki v2 PairingPayload’dır. cc_server pair --client-url ise yalnızca web istemcisi için tasarlanmış, farklı ve daha eski bir v1 bağlantısı üretir ({s, i, k} — sunucu URL’si, cihaz kimliği, anahtar).

Ayrıca ömürleri de farklıdır ve bu kolayca yanlış anlaşılır:

Üreten Kimlik bilgisinin son kullanma süresi
Uygulama içi eşleştirme paneli (pairing.mint) Her zaman 30 gün
Komut satırında cc_server pair Yok — kimlik bilgisinin süresi dolmaz

Eşleştirilmiş bir cihazın kimliği doğrulanır ama güvenilmez. Birkaç bağımsız kapı, onaylanmış (ya da sızdırılmış) bir eşleştirmenin sunucunun tam denetimine dönüşmesini engeller.

Geçerli bir eşleştirme anahtarı, hangi cihaz olduğunuzu kanıtlar. Neyi okuyabileceğinize veya değiştirebileceğinize çalışma alanı rolünüz karar verir; rol her bir çağrıda yeniden çözümlenir ve depo içeriğini açığa çıkaran her şeyde depo başına yetkiler geçerlidir. Sağlam bir anahtar taşıyan ancak adı verilen çalışma alanının üyesi olmayan bir kullanıcıya ait cihaz, “Not a member of this workspace” ile reddedilir.

Rol tabanı, işlem kendi tabanını bildirmediği sürece türünden türetilir: okumalar guest, değişiklikler member, yıkıcı işlemler admin gerektirir.

Rol denetiminin ötesinde, bir telefon oturumu masaüstü veya web oturumundan daha düşük bir yetenek taşır. Yalnızca tam istemciye açık olduğu bildirilen işlemler, arkasındaki kullanıcı ne kadar ayrıcalıklı olursa olsun, işleyici çalışmadan önce telefon için reddedilir: cihaz eşleştirmelerini üretme, listeleme, yeniden adlandırma ve iptal etme; tünel bağlantısını okuma ve ayarlama; sunucu yedekleme ve çalışma alanı dışa/içe aktarma; süreç algılama ve sonlandırma; adaptör yoklamaları; sunucu ayarları; SSO yönetimi; filo denetimi; ve çalışan bir ajanı devralma veya geri verme.

Özellikle MCP araç yüzeyi için (tools/call), telefonun hangi araçları çağırabileceğini varsayılanı ret olan bir izin listesi belirler. Listede olmayan her şey, çalışmadan önce reddedilir. Liste ağırlıklı olarak okuma ve gözlem ağırlıklıdır; buna LLM bütçesi harcamayan, süreç başlatmayan ve hiçbir dış sisteme dokunmayan birkaç yalnızca yerel yazma eklenir — bir mesaj, bir bilet güncellemesi, bir makale işareti.

Örneğin reddedilenler: bir ajana danışmak, bir YZ incelemesi başlatmak, bir ajanı sonlandırmak, bir incelemeyi GitHub’a yayımlamak, ajanları işe almak veya işten çıkarmak, bir çalışma alanı oluşturmak.

Sunucu hiçbir “geçerli çalışma alanı” tutmaz. Tasarımı gereği durumsuzdur: çalışma alanı kapsamlı her çağrı, hedefini bağımsız değişkenlerinde workspace_id olarak adlandırmak zorundadır; bu eksikse ya da sunucunun kayıtlı olmadığı bir çalışma alanını adlandırıyorsa, herhangi bir şey veritabanı açmadan önce dağıtıcı çağrıyı doğrudan reddeder. Dolayısıyla telefon, başka bir istemcinin kapsamını asla devralamaz veya oraya kayamaz; yabancı bir çalışma alanını adlandırmak da işe yaramaz, çünkü 1. kapıdaki üyelik denetimi yine geçerlidir. Bu, ürünün geri kalanının uyguladığı aynı çalışma alanı yalıtımı değişmezidir.

5. Ön paylaşımlı anahtarla anahtarlanan uçtan uca mühürlenmiş çerçeveler

Bölüm başlığı “5. Ön paylaşımlı anahtarla anahtarlanan uçtan uca mühürlenmiş çerçeveler”

Telefon ile sunucu arasındaki her çerçeve eşleştirme anahtarıyla mühürlenir; giriş belirteci yalnızca bir istemciyi odaya sokar, hiçbir şeyin şifresini çözmez. Aracı yalnızca şifreli metni aktarır ve anahtarı hiç görmez. İptal edilen bir cihaz, kimlik bilgisinin çoktan gittiğini görür; bu yüzden yeniden bağlandığında kapalı yönde başarısız olur.

Uygulamanın ürettiği kimlik bilgisi 30 günle sınırlıdır; bu süreden sonra bağlantı kapısı onu geçersiz kılar ve telefonun yeniden eşleştirmesi gerekir. İptal canlıdır: sunucu cihaz tablosunu izler ve iptal edilmiş bir cihazın açık oturumlarını, bir sonraki bağlantısını beklemeden saniyeler içinde düşürür.

Kayan pencereli bir sınırlayıcı, uzak araç trafiğini dakikada 120 çağrıyla sınırlar; değişiklik yapan fiiller için daha sıkı, dakikada 30’luk bir alt sınır vardır. Bütçe oturuma değil, principal’a aittir: üç cihazınız tek bir ödenekten çeker; böylece ele geçirilmiş bir istemci daha fazla oturum açarak kendine pay satın alamaz ve gürültücü bir üye diğerlerini aç bırakamaz.

Aktarma aracısı kasıtlı olarak aptaldır: odalar barındırır, mühürlenmiş çerçeveleri iletir ve hiçbir hesap, uygulama verisi veya anahtar tutmaz. Odalar davetle korunur ve geçicidir. Uygulama verisi, ses, transkript, kaynak ve kimlik bilgileri sunucuda kalır.

Eşleştirildikten sonra telefon, masaüstünün kendi bildirimlerini yansıtan bildirim çerçeveleri biçiminde canlı güncellemeler alır — yeni ajan mesajları, size atanan biletler, durum değişiklikleri. Sunucu bu çerçeveleri bağlı her oturuma yayınlar ve çalışma alanı filtresi istemci tarafında uygulanır; böylece gördükleriniz, baktığınız çalışma alanıyla sınırlıdır.

Yüzey Ne gösterir
Ayarlar → Siz → Cihazlarınız (/workspaces/:workspaceId/settings/you/devices) Canlı durumlarıyla eşleştirilmiş istemciler, ayrıca Yeni istemci eşle (web tarayıcısı, masaüstü uygulaması veya telefon) ve iptal etme

Aynı panel, yalnızca telefonlar için değil, ikinci bir tarayıcı ya da masaüstü uygulaması için de eşleştirme üretir — akış aynıdır, yalnızca derin bağlantı farklıdır.