Langkau ke kandungan

Kawalan jauh dan mudah alih

Control Center ialah aplikasi desktop, tetapi kerja yang dijejakinya tidak berhenti apabila anda meninggalkan meja. Kawalan jauh menggandingkan telefon anda dengan cc_server anda, menggunakan Remote, aplikasi teman di remote.usectrl.dev, supaya anda boleh mengikuti armada dari sana: membaca mesej dan tiket, membalas ejen, menyusun suapan berita anda, tanpa audio, transkrip, kod sumber atau kelayakan yang tersimpan di pelayan pernah meninggalkannya.

Anggaplah ia sebagai teman kepada dek yang kebanyakannya hanya membaca. Ia tidak bertujuan menggantikan klien desktop sepenuhnya.

Telefon mencapai cc_server melalui WebSocket: sama ada sambungan langsung (loopback, LAN, tailnet atau wss://) atau bilik yang dikawal jemputan pada broker isyarat yang menyampaikan bingkai tersegel. Tiada saluran data peer-to-peer.

Telefon yang berganding hanya mencapai sebahagian kecil permukaan pelayan yang memang disengajakan:

  • Baca tiket, ejen, ruang dan mesejnya serta suapan berita anda
  • Balas: hantar mesej dalam ruang, kemas kini atau tetapkan tiket, tandai artikel sebagai telah dibaca atau disimpan
  • Jalankan playbook: buat instans templat pelan yang disimpan berserta parameternya. Ini hanya mencadangkan pelan; tiada apa-apa dilaksanakan atau dibelanjakan sehingga operator meluluskannya dalam Plan Studio pada klien lengkap
  • Tukar ruang kerja, daripada pemilih telefon itu sendiri

Itu sudah hampir kesemuanya. Telefon ialah prinsipal berkeistimewaan lebih rendah daripada klien lengkap. Ia tidak boleh menjalankan proses, membelanjakan bajet LLM, melakukan push ke GitHub atau mencipta ruang kerja. Lihat model akses untuk cara perkara itu dikuatkuasakan, bukan sekadar diniatkan.

Sambungan ini menggunakan geganti berperantara: pelayan menyertai satu bilik yang dikawal jemputan pada broker wss:// sebagai pemiliknya dan setiap klien yang berganding — desktop, web, telefon — menyertai bilik yang sama dengan token kemasukan yang dibatasi masa. Tiga komponen bekerjasama:

Komponen Peranan
Remote (aplikasi telefon) Aplikasi web teman, yang dihoskan secara lalai di remote.usectrl.dev, atau dihoskan sendiri. Dimuatkan dalam pelayar, menyimpan rekod penggandingan dalam IndexedDB.
Broker geganti Geganti wss:// tanpa keadaan (cc_signaling_server) yang menghoskan bilik N-arah. Ia membawa bingkai legap sahaja: setiap muatan tersegel hujung ke hujung antara telefon dan pelayan, jadi broker tidak pernah melihat data aplikasi atau rahsia penggandingan dan tidak pernah mentafsir apa yang disampaikannya.
cc_server Pemilik bilik. Ia menjawab panggilan telefon melalui dispatcher yang sama seperti yang digunakan oleh setiap klien lain.

Tawaran penggandingan membawa deskriptor sambungan yang menyenaraikan setiap laluan ke pelayan (LAN, tailnet, wss:// awam, geganti) berserta cap jari identitinya. Penyelesai telefon memilih laluan terbaik yang boleh dicapai dan menyematkan cap jari itu pada sambungan pertama (TOFU); geganti menjamin ketersambungan walaupun tiada laluan langsung wujud, tanpa pernah dapat membaca trafiknya.

Penggandingan dijana daripada aplikasi dan dihantar sebagai pautan mendalam; lihat Gandingkan peranti untuk prosedurnya. Apa yang penting di sini ialah anatominya.

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

Muatan itu berada dalam fragment URL, bahagian selepas # yang tidak pernah dihantar oleh pelayar kepada pelayan, jadi hos HTTPS PWA tidak pernah melihatnya. Ia membawa segala yang diperlukan telefon untuk mencapai pelayan dan membuktikan identitinya: deskriptor sambungan (setiap laluan berserta cap jari identiti), id peranti yang baru dijana, kunci pra-kongsi 32 bait dan cap kedaluwarsa. Telefon menyahkodnya, menyimpan rekod penggandingan secara setempat dan membuang fragment itu supaya rahsia tersebut keluar daripada URL.

Terdapat dua bentuk muatan dan kedua-duanya tidak boleh ditukar ganti. Kod QR telefon yang dijana daripada panel penggandingan dalam aplikasi ialah PairingPayload v2 di atas, yang diarahkan ke hos PWA Remote. cc_server pair --client-url mengeluarkan pautan v1 yang berbeza dan lebih lama ({s, i, k} — URL pelayan, id peranti, kunci) yang ditujukan untuk klien web sahaja.

Kedua-duanya juga berbeza dari segi tempoh hayat, yang mudah disalah anggap:

Dijana oleh Kedaluwarsa kelayakan
Panel penggandingan dalam aplikasi (pairing.mint) 30 hari, sentiasa
cc_server pair pada baris perintah Tiada — kelayakan itu tidak kedaluwarsa

Peranti yang berganding disahkan tetapi tidak dipercayai. Beberapa gerbang bebas menghalang penggandingan yang diluluskan (atau terdedah) daripada menjadi kawalan penuh ke atas pelayan.

1. Keahlian, bukan penggandingan, ialah sempadannya

Bahagian bertajuk “1. Keahlian, bukan penggandingan, ialah sempadannya”

Kunci penggandingan yang sah membuktikan peranti mana anda. Apa yang boleh anda baca atau ubah ditentukan oleh peranan ruang kerja anda, yang diselesaikan semula pada setiap panggilan, dan oleh geran setiap repo bagi apa-apa yang mendedahkan kandungan repo. Peranti yang memegang kunci yang sempurna sah tetapi dimiliki oleh pengguna yang bukan ahli ruang kerja yang dinamakan akan ditolak dengan “Not a member of this workspace”.

Tahap minimum peranan diperoleh daripada jenis operasi itu melainkan operasi tersebut mengisytiharkan tahapnya sendiri: operasi baca memerlukan guest, mutasi memerlukan member, operasi destruktif memerlukan admin.

Selain pemeriksaan peranan, sesi telefon membawa keupayaan yang lebih rendah daripada sesi desktop atau web. Operasi yang diisytiharkan khusus klien penuh akan ditolak untuk telefon sebelum pengendali dijalankan, tanpa mengira betapa tinggi keistimewaan pengguna di sebaliknya: menjana, menyenaraikan, menamakan semula dan membatalkan penggandingan peranti; membaca dan menetapkan ketersambungan tunnel; sandaran pelayan serta eksport/import ruang kerja; pengesanan dan penghentian proses; kuar penyesuai; tetapan pelayan; pentadbir SSO; kawalan armada; serta mengambil alih atau memulangkan ejen yang sedang berjalan.

Khusus untuk permukaan alat MCP (tools/call), senarai izin yang menolak secara lalai menentukan alat mana yang boleh digunakan oleh telefon. Apa-apa yang tidak tersenarai akan ditolak sebelum ia dijalankan. Senarai itu banyak berkisar pada baca dan perhati, ditambah segelintir tulisan tempatan sahaja — satu mesej, kemas kini tiket, penandaan artikel — yang tidak membelanjakan bajet LLM, tidak menjalankan proses dan tidak menyentuh sistem luaran.

Antara yang ditolak, misalnya: berunding dengan ejen, memulakan semakan AI, menghentikan ejen, menerbitkan semakan ke GitHub, mengupah atau memberhentikan ejen, mencipta ruang kerja.

4. Pelingkupan ruang kerja bagi setiap panggilan

Bahagian bertajuk “4. Pelingkupan ruang kerja bagi setiap panggilan”

Pelayan tidak menyimpan “ruang kerja semasa”. Ia tanpa keadaan secara reka bentuk: setiap panggilan yang berlingkup ruang kerja mesti menamakan workspace_id sasarannya dalam argumennya dan dispatcher menolak panggilan itu terus apabila id tersebut tiada atau menamakan ruang kerja yang tidak terdaftar pada pelayan — sebelum apa-apa membuka pangkalan data. Oleh itu, telefon tidak boleh mewarisi atau terpesong ke lingkup klien lain, dan menamakan ruang kerja asing juga tidak membantu, kerana pemeriksaan keahlian dalam gerbang 1 masih terpakai. Ini ialah invarian pengasingan ruang kerja yang sama yang dikuatkuasakan oleh seluruh produk.

5. Bingkai tersegel hujung ke hujung yang dikunci dengan kunci pra-kongsi

Bahagian bertajuk “5. Bingkai tersegel hujung ke hujung yang dikunci dengan kunci pra-kongsi”

Setiap bingkai antara telefon dan pelayan disegel dengan kunci penggandingan; token kemasukan hanya membawa klien masuk ke dalam bilik, ia tidak menyahsulit apa-apa. Broker menyampaikan teks sifer dan tidak pernah melihat kunci itu. Peranti yang dibatalkan akan mendapati kelayakannya sudah tiada, jadi ia gagal secara tertutup apabila menyambung semula.

Kelayakan yang dijana oleh aplikasi dibatasi masa selama 30 hari; selepas itu gerbang sambungan akan menolaknya dan telefon mesti mengganding semula. Pembatalan berlaku serta-merta: pelayan memantau jadual peranti dan menggugurkan sesi terbuka peranti yang dibatalkan dalam beberapa saat, bukan menunggu sambungan seterusnya.

Pembatas tetingkap gelongsor mengehadkan trafik alat jauh pada 120 panggilan seminit, dengan sub-had yang lebih ketat iaitu 30 seminit untuk kata kerja yang mengubah data. Bajet itu milik prinsipal, bukan sesi: tiga peranti anda mengambil daripada satu peruntukan, jadi klien yang dirampas tidak boleh menambah kelonggaran dengan membuka lebih banyak sesi dan seorang ahli yang bising tidak boleh merampas peruntukan ahli lain.

Broker geganti ini sengaja dibiarkan bodoh: ia menghoskan bilik, menyampaikan bingkai tersegel dan tidak menyimpan sebarang akaun, data aplikasi atau kunci. Bilik dikawal jemputan dan bersifat sementara. Data aplikasi, audio, transkrip, kod sumber dan kelayakan semuanya kekal di pelayan.

Setelah berganding, telefon menerima kemas kini langsung sebagai bingkai pemberitahuan — mesej ejen baharu, tiket yang ditugaskan kepada anda, perubahan status — mencerminkan pemberitahuan desktop itu sendiri. Pelayan menyiarkan bingkai tersebut kepada setiap sesi yang bersambung dan penapis ruang kerja digunakan di sisi klien, jadi apa yang anda lihat terhad kepada ruang kerja yang sedang anda buka.

Permukaan Apa yang ditunjukkan
Tetapan → Anda → Peranti anda (/workspaces/:workspaceId/settings/you/devices) Klien yang berganding dengan status langsung, serta Pasangkan klien baharu (pelayar web, aplikasi desktop atau telefon) dan batalkan

Panel yang sama juga menjana penggandingan untuk pelayar atau aplikasi desktop kedua, bukan hanya telefon — alirannya sama, hanya pautan mendalamnya berbeza.