Web interfaces
Pano Mimarisi
Vizyon
Günümüzde bir agent ile çalışmak, bir metin akışından ibarettir. Pano bunu bir çalışma tezgâhına dönüştürür: agent canlı, etkileşimli widget'lar oluşturur; kullanıcı bunları kalıcı bir yüzeye sabitler; sohbet yana yerleşir (veya gizlenir) ve ana içerik pano olur. Oturumdan hiç ayrılmadan "agent ile konuşmaktan", "agent'ın sizin için oluşturduğu bir kontrol panelini işletmeye" geçersiniz.
İlkeler:
- Pano yeni bir nesne değil, oturumun bir yüzüdür. Her oturumun (iş parçacığının)
iki yüzü vardır: döküm ve pano. Sabitlenmiş widget'ı olmayan bir oturum,
sade sohbettir. Bir widget sabitlendiğinde pano var olur. Panolar oturumun
kimliğini, agent sahipliğini, adlandırmasını, sabitlenmesini ve yaşam
döngüsünü devralır.
dashboard_create, pano kayıt defteri veya ayrı bir ACL modeli yoktur. - Agent ile eşdeğerlik. Kullanıcının panoda yapabildiği her şeyi agent da araçlarla yapabilir: widget ekleme/güncelleme/kaldırma, düzenleme, sekmeleri yönetme, görünür sekmeyi değiştirme, sohbeti yerleştirme veya gizleme.
- Gömülü değil, yerel. Pano, Control UI kabuğundaki Lit bileşenlerinden oluşur (uygulamanın geri kalanıyla aynı tasarım sistemi). Yalnızca widget içeriği iframe'lerde korumalı alana alınır. URL çubuğu veya tarayıcı arayüzü yoktur.
- Küçük agent yüzeyi. Widget'lara kararlı adlarıyla erişilir ve oldukları yerde güncellenirler. Yerleşim, kendini otomatik sıkıştıran akışkan bir ızgaradır; agent boyutları ve sabitleme noktalarını belirtir, piksel veya koordinatları asla belirtmez.
- Güven yerine yetenekler. Widget kodu, sıkı bir korumalı alanda çalışan, agent tarafından yazılmış rastgele HTML/JS kodudur. Erişim (gateway verileri, eylemler, ağ) yalnızca beyan edilmiş ve operatör tarafından verilmiş bir yetenek manifesti üzerinden mümkündür.
Kavramlar
| Kavram | Tanım |
|---|---|
| Oturum (iş parçacığı) | Kararlı sessionKey ile anahtarlanan mevcut gateway oturumu. Bir agent'a aittir. |
| Pano | Bir oturumun widget yüzü. Yalnızca oturumda widget'lar/sekmeler varsa mevcuttur. /new//reset sonrasında kalır (sessionKey öğesine bağlıdır, döküme değil). |
| Sekme | Panonun bir sunum sayfası: hangi widget'ların bulunduğu, düzenleri ve sohbet yerleşiminin durumu (left/right/bottom/hidden). Panolar örtük tek bir sekmeyle başlar. |
| Widget | Oturuma ait, adlandırılmış ve korumalı alana alınmış HTML/JS programı. sessionKey + name olarak adreslenir. Ada göre olduğu yerde güncellenir. |
| Yetenek manifesti | Widget başına erişim beyanı: data (okuma bağlamaları), actions (izin verilen fiiller), prompt (oturuma gönderme), net (izin verilen kaynaklar). |
| Sabitleme (widget) | Bir döküm widget'ını oturumun panosuna taşıma (kullanıcı özelliği veya agent araç argümanı). Sabitlemeyi kaldırmak, onu panodan kaldırır. |
| Sabitleme (oturum) | Oturumların kenar çubuğuna mevcut sabitlenmesi. Panosu olan sabitlenmiş bir oturum, pano yüzünde açılır. |
Kullanıcı deneyimi akışları
- Panoya geçiş: agent herhangi bir sohbette
show_widgetçağrısı yapar → widget, bugün olduğu gibi döküm içinde satır içi oluşturulur → üzerine gelindiğinde Panoya sabitle gösterilir → widget oturumun panosunda görünür. Agent aynı işlemi yapmak içinpin: trueiletebilir. - Pano görünümü: panosu olan bir oturumda yüz değiştirme anahtarı bulunur (Sohbet / Pano). Pano görünümü = sekme şeridi (yalnızca >1 sekme olduğunda) + akışkan ızgara + yerleştirilmiş sohbet bölmesi. Sohbet yerleşimi, tam olarak kenar çubuğu gibi yeniden boyutlandırılabilir, taşınabilir (sol/sağ/alt) ve daraltılabilir. Her sekmenin yerleşim durumu hatırlanır.
- Sürükleme: kullanıcı widget'ları sürükler; ızgara kendini otomatik olarak sıkıştırır (widget'lar yukarı çıkar, komşular yeniden akar). Tutamaçla yeniden boyutlandırma, boyut adımlarına oturur. Hiç kimse için piksel tabanlı yerleştirme yoktur.
- Sıfırlama uyarısı: panosu olan bir oturumda
/new//reset, web kullanıcı arayüzünde onay ister ("bağlam sıfırlanır, pano kalır") ve panoyu korur. - Kenar çubuğu: sabitlenmiş oturumların panosu varsa pano yüzleri oluşturulur. Ana Sayfa oturumunun panosu, varsayılan "agent panosu"dur.
- Etkileşimler (üç katman, aşağıya bakın): sessiz durum olayları, görünür istem gönderimleri ve otomasyon tetikleyicileri.
Etkileşim katmanları
- Durum olayları (varsayılan). Modelin bilmesi ancak yanıtlamaması gereken
widget kullanıcı arayüzü etkileşimleri.
bridge.emitState({...}), yapılandırılmış bir oturum bildirimi ekler (grup etkinliği bildirimleriyle aynı mekanizma). Agent sırası başlatılmaz; model, bir sonraki çalıştırmada birikmiş bildirimleri görür. - İstemler (açıkça konuşma).
bridge.sendPrompt(text)— kullanıcı etkinleştirmesi gerektirir; oturuma görünür bir kullanıcı mesajı gönderir (yerleştirilmiş sohbet bunu gösterir). Hız sınırı uygulanır; widgetpromptyetenek iznine sahip değilse her gönderim kullanıcı tarafından onaylanır. - Otomasyon.
bridge.runAction(name, args)— manifestte beyan edilmiş bir eylemi çalıştırır. İlk fiil kümesi:cron.trigger(mevcut bir Cron işini hemen çalıştırma) vebinding.refresh. Cron işleri zaten görünür, yalıtılmış çalıştırma oturumlarında çalışır ve daha ucuz bir model kullanabilir: "küçük model widget'ı çalıştırır" yolu budur. Hiçbir yerde gizli oturum yoktur.
Widget modeli ve barındırma
Widget HTML/JS kodu agent tarafından yazılır (genellikle show_widget
aracılığıyla), standart belge kabuğuna (CSP meta verisi, boyut bildiricisi,
köprü önyüklemesi) sarılır ve <iframe sandbox="allow-scripts"> içinde oluşturulur
(asla allow-same-origin içinde değil).
- Satır içi (döküm) widget'lar mevcut tuval-belge işlem hattını korur: durum dizini altına yazılır, gateway tarafından sunulur, kapsam başına budanır ve onay gerektirmez (yapıları gereği yeteneksizdirler — istem gönderimleri kullanıcı tarafından onaylanır).
- Pano widget'ları oturum durumudur: baytlar, sahibi olan agent'ın SQLite
veritabanında (
board_widgets) bulunur ve veritabanını okuyan bir çekirdek gateway rotası (/__openclaw__/board/<agentId>/<sessionKey>/<name>/) tarafından sunulur. Bir döküm widget'ını sabitlemek baytları kopyalar. Sınırlar: widget başına 256 KB, pano başına 48 widget. - Olduğu yerde güncelleme: aynı
nameile bir widget'ın yeniden yayımlanması baytları değiştirir,revisiondeğerini artırır,board.changedyayınını yapar ve canlı görünümler yalnızca ilgili iframe'i yeniden yükler. - Bayt sabitleme: verilen yetenekler widget baytlarının sha256 değerine
bağlanır. Baytların değiştirilmesi, yeni revizyon verilen manifestin bir alt
kümesini beyan ediyorsa
data/net/actionsizinlerini korur; kapsamı genişletilmiş bir manifest operatörden yeniden onay ister.
Widget'lar içerik barındırır; MCP uygulamaları bir içerik türüdür
Widget, OpenClaw'ın temel öğesidir: adlandırılmış, sabitlenmiş, boyutlandırılmış, oturuma ait ve izin kaydı bulunan pano hücresi. İçinde oluşturulan şey bir içerik türüdür:
html—show_widgetaracılığıyla agent tarafından yazılır; baytlar pano depolamasındadır.mcp-app— yapılandırılmış bir sunucudan gelen üçüncü taraf MCP uygulama görünümü (ui://kaynağı), widget hücresinde barındırılır.
MCP uygulamaları widget modelini tanımlamaz; widget'lar onları barındırma
yeteneği kazanmıştır. Kimlik, yerleştirme, sabitleme, izinler ve yazara yönelik
API OpenClaw'a ait kalır; böylece show_widget kodu bugün olduğu kadar kısa
kalır ve MCP Apps belirtiminin varlığını hiçbir zaman bilmesi gerekmez.
Altta paylaşılan altyapı (sadeleştirmenin gerçekleştiği yer):
- Tek korumalı alan barındırıcısı.
htmlwidget'ları, ikinci bir özel iframe barındırıcısı yerine MCP uygulamalarıyla birlikte sunulan aynı güçlendirilmiş işlem hattı üzerinden oluşturulur (ayrılmış korumalı alan kaynağında çift iframe, widget başına beyan edilen ve kapalı kalacak şekilde çözümlenen CSP). Proxy, HTML'yi değer olarak alır; dolayısıyla yerel içerik doğal kullanım durumudur. - Tek yetkilendirme modeli. Türü ne olursa olsun bir widget'ın erişimi,
izin verilmiş bir izin listesidir:
htmlwidget'ları için barındırıcı araçları;mcp-appwidget'ları için sunucunun uygulamaya görünür araçları (mevcutallowedAppToolNamesmekanizması üzerinden, oluşturma çalıştırması başına değil widget başına kalıcı hâle getirilmiş). htmlwidget'ları için barındırıcı araçları (widget köprüsü üzerinden sunulur ve izne göre denetlenir):openclaw.prompt.send— katman 2; görünür düzenleyici üzerinden yönlendirilir, izin verilmedikçe kullanıcı tarafından onaylanıropenclaw.state.emit— katman 1 oturum bildirimleri (birleştirilmiş, boyutu sınırlandırılmış)openclaw.data.read— parametreli salt okunur bağlamalar (mevcut izin verilen okuma RPC kümesi), gateway tarafında çözümleniropenclaw.cron.trigger— katman 3 otomasyon
net= CSP. Ağ erişimi, daha önce sunulmuş widget başına CSP beyanını (connect-srckaynakları) kullanır — kendini güncelleyen hava durumu widget'ı API'sini doğrudan korumalı alandan getirir, gateway sürece dahil olmaz.- İzinler. Hiçbir şey beyan etmeyen bir widget hemen oluşturulur (korumalı
alanda,
default-src 'none', istem gönderimleri ayrı ayrı onaylanır) — bugünkü satır içi sohbet widget'larıyla aynı güven düzeyi. Beyan edilen araçlar/kaynaklar, widget'ı panodapendingdurumuna geçirir: bir yer tutucu kart bunları insanların okuyabileceği biçimde listeler ve tek dokunuşla İzin Ver/Reddet seçeneklerini sunar. İzinler widget adı başınadır;htmlwidget'ları için bayta sabitlenmiştir (sha256) ve değiştirilen baytlar, yalnızca beyanın kapsamı daraldıysa izni korur. - Yazma uyumluluk katmanı. Belge sarmalayıcısı kararlı yazar API'si olarak
window.openclaw.prompt,window.openclaw.state,window.openclaw.datavewindow.openclaw.cronöğelerini ekler. Pano çağrıları, görünüm biletine bağlı tek bir istek kanalını paylaşır; boyut bildirimi ve tema belirteçleri ayrı barındırıcı bildirimleri olarak kalır.
Plugin yetenek beyanları
Etkin Plugin'ler, openclaw.plugin.json içindeki dashboard.dataBindings ve
dashboard.actionVerbs aracılığıyla widget barındırıcısını genişletebilir.
Plugin'e yerel kimlikler, workboard.cards.list ve workboard.dispatch gibi Plugin
kimliği önekli izin adlarına dönüşür; farklı bir Plugin/yerel kimlik ayrımının
aynı kalıcı izni devralamaması için Plugin kimliği bölümündeki
% ve . kaçışlanır. OpenClaw, Plugin kaydı
sırasında her bağlamanın aynı Plugin tarafından operator.read ile
kaydedilmiş bir RPC'yi ve her eylemin operator.write ile kaydedilmiş bir
RPC'yi hedeflediğini doğrular; geçersiz beyanlar Plugin yüklemesini başarısız
kılar. Doğrulanmış kayıt defteri yalnızca Plugin yaşam döngüsü değişikliklerinde
yeniden oluşturulurken widget izinleri widget başına ve bayt ile revizyona bağlı
kalmaya devam eder.
Modellenmiş artık risk: WebRTC veri kanalları
Korumalı alan CSP'si önerilen webrtc 'block' yönergesini yayımlar ancak
Chromium'un mevcut CSP yönerge kümesi
bunu uygulamaz. Bu nedenle betik çalıştırabilen widget'lar, mevcut Chromium'da
dışarı veri aktarmak için WebRTC veri kanallarını kullanabilir. Aynı artık risk,
main üzerindeki satır içi sohbet widget'ları ve MCP Apps
barındırıcısı için zaten sunulmaktadır.
Kabul edilen ödünleşim: OpenClaw, betik çalıştırılabilen widget'ları bu
artık riske göre kısıtlamaz. Widget içeriği, hassas OpenClaw verilerine yalnızca
operatör tarafından verilmiş, baytları sabitlenmiş bir data:read yeteneği üzerinden erişir ve sandbox
Permissions Policy kamera ile mikrofon erişimini engeller. DOM API koruması
güvenlik sınırı değil, çaba ölçüsünde uygulanan derinlemesine savunmadır ve
sonraki sağlamlaştırma çalışmalarına aittir.
Transkript görünümü: tek widget kartı
Satır içi görünüm, widget temel öğesi üzerinde birleştirilir. Bir araç sonucu kullanıcı arayüzü —
show_widget çıktısı veya uygulama kaynağı içeren bir MCP araç sonucu — taşıdığında sistem
geçici, otomatik adlandırılan bir widget (oturum kapsamlı, budanan) oluşturur ve
transkript, içerik türüne göre yönlendirme yapan tek bir widget kartı işler.
MCP uygulamasının otomatik gösterimi, spesifikasyonun beklediği şekilde aynen kalır (sıfır ek model çalışması);
altta yalnızca bir widget olarak bulunur. Bu, sohbet işlemedeki paralel mcpApp
özel durumlarını (yüzey kısıtlaması, ayrı tekilleştirme) kaldırır, her
satır içi kullanıcı arayüzüne aynı sabitleme olanağını verir ve widget kayıt defterini birincil
yeniden açma yolu hâline getirir (transkript taramasıyla yeniden oluşturma, hiç sabitlenmemiş
geçmiş için yedek olarak kalır). Salt okunur, biletli bağımsız ana makine,
kalıcı yeniden açma yüzeyi olarak panolarla örtüşür — T6'da değerlendirilecek bir
birleştirme adayıdır, varsayım değildir.
Birleştirme: v1, ızgara bitişikliğidir (tek sekmede bir uygulama widget'ının yanında ajan çerçevesi widget'ı). v2, ana makine tarafından yönetilen uygulama yuvaları ekler — ajan widget HTML'i bir yuva bölgesi bildirir ve ana makine, gerçek uygulama görünümünü kardeş sandbox olarak birleştirir. Uygulama hiçbir zaman ajanın iframe'i içinde işlenmez: iç içe yerleştirme, köprü kimliğini bozar ve izin verilen uygulama kullanıcı arayüzünün üzerinin kapatılmasına/tıklama kaçırmasına olanak tanır; bu nedenle yuva, gömme değil bir yerleşim sözleşmesidir.
Sunucudan sağlanan widget'lar (sabitlenmiş MCP uygulamaları)
Birleşik ana makineyle, üçüncü taraf bir MCP uygulamasını sabitlemek yalnızca içeriği
depolanmak yerine sunucudan getirilen bir widget'tır: board_widgets, HTML baytları yerine
tanımlayıcıyı (serverName, toolName, uiResourceUri, kaynak
toolCallId + sessionKey) tutar ve pano, sohbet turunun 10 dakikalık TTL süresini aşınca
görünüm kirasını yeniden oluşturur (eskidiğinde ui:// kaynağını yeniden
getirir). Sohbet içindeki satır içi MCP uygulama görünümleri, ajan widget'larıyla aynı Panoya sabitle
olanağını edinir. Yeniden açılan görünümler bugün tasarım gereği salt okunurdur;
etkileşimli kalması gereken sabitlenmiş uygulamalar, sunucunun
uygulamaya görünür araçları üzerinde kalıcı bir izin alır (sabitleme sırasında operatöre açık izin listesi gösterilir) ve bu izin,
oluşturma çalışmasından ayrıdır. İzin verilmemiş sabitlemeler salt okunur kalır — görüntüleme
panoları için yine de kullanışlıdır. v1, kaynak oturumun panosuna sabitlenir; oturumlar arası sabitleme
bir kira aracısı gerektirir ve bekler. Açık PR #109807 (ui/message
oluşturucu yönlendirmesi, tema/boyut yayılımı) ile koordine edin.
WorkBoard entegrasyonu
WorkBoard entegrasyon programı, kartları ve panoları plugin mülkiyetinde tutarken gönderilen kartları mevcut sessionKey ve runId üzerinden yeniden oturum panolarına bağlar, WorkBoard akışlarını ve gönderimi plugin tarafından bildirilen bağlamalar ve eylemler aracılığıyla sunar ve WorkBoard'a özgü bir widget türü eklemek yerine bu sonuçları mevcut html ve mcp-app widget türleriyle birleştirir.
Yerleşim: akışkan ızgara
12 sütun, sabit satır yüksekliği, otomatik sıkıştırılan (yukarı çekim, sürüklemede
yana itme — gridstack semantiği, yerel olarak uygulanır; ızgara matematiği saf ve
DOM'dan bağımsız kalır). Sekme başına widget yerleşim durumu: { name, w (1-12), h (rows) } artı
sıra. Ajan sözlüğü:
size:sm(3×3) ·md(6×4) ·lg(8×6) ·xl(12×8) ·full(tek widget'lı sekme)after: <widgetName>isteğe bağlı sıralama çapası; belirtilmezse = sona ekle- Kullanıcı serbestçe sürükleyip yeniden boyutlandırır; aynı sıra+boyut modeli gidiş dönüşte korunur.
Veri modeli (ajan başına DB)
agents/<agentId>/agent/openclaw-agent.sqlite içinde yeni tablolar
(ajan DB şema sürümünün artırılmasını gerektirir — bu değişiklik eklenmeden
önce operatör onayı gereklidir):
CREATE TABLE board_tabs ( session_key TEXT NOT NULL, tab_id TEXT NOT NULL, -- slug title TEXT NOT NULL, position INTEGER NOT NULL, chat_dock TEXT NOT NULL DEFAULT 'right', -- left|right|bottom|hidden created_by TEXT NOT NULL, -- 'user' | 'agent' PRIMARY KEY (session_key, tab_id)) STRICT; CREATE TABLE board_widgets ( session_key TEXT NOT NULL, name TEXT NOT NULL, -- stable widget name tab_id TEXT NOT NULL, title TEXT, html BLOB NOT NULL, -- wrapped document source sha256 TEXT NOT NULL, revision INTEGER NOT NULL, size_w INTEGER NOT NULL, size_h INTEGER NOT NULL, position INTEGER NOT NULL, -- order within tab (auto-compact input) manifest TEXT NOT NULL DEFAULT '{}', -- capability manifest JSON grant_state TEXT NOT NULL DEFAULT 'none', -- none|pending|granted|rejected granted_sha TEXT, -- byte-frozen grant created_by TEXT NOT NULL, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, PRIMARY KEY (session_key, name)) STRICT;Pano varlığı = sessionKey için herhangi bir satırın bulunması. Bir oturumun silinmesi, onun
pano satırlarını siler. /new//reset bunlara dokunmaz.
Protokol yüzeyi
RPC'ler (çekirdek yöntem tablosu, gateway-protocol içindeki typebox şemaları):
board.get { sessionKey }→ sekmeler + widget meta verileri (bayt yok) —operator.readboard.update { sessionKey, ops[] }— sekme CRUD/yeniden sıralama, widget taşıma/yeniden boyutlandırma/ kaldırma/sabitlemeyi kaldırma, yuva durumu, sekmeye odaklanma —operator.writeboard.widget.put { sessionKey, name, html, manifest, placement }—operator.write(ajan aracı yolu ve sabitleme yolu)board.widget.grant { sessionKey, name, decision }—operator.approvalsboard.event { ticket, payload }— bilete bağlı katman-1 durum olayı alımı; eski güvenilir ana makine{ sessionKey, widget, payload }biçimi korunur —operator.writeboard.prompt.authorize { ticket }— görünür bir istem gönderiminin hâlâ tıklama başına onay gerektirip gerektirmediğini döndürür —operator.readboard.data.read { ticket, bindingId, params? }— Gateway tarafında izin listesine alınmış çekirdek veya etkin plugin okuma bağlaması çözümlemesi —operator.readboard.action { ticket, action, ... }— mevcut cron hemen çalıştır yolu veya etkin bir plugin'in doğrulanmış eylem fiili üzerinden tam izinli otomasyon gönderimi —operator.write
Olaylar (EVENT_SCOPE_GUARDS içinde, okuma kapsamı):
board.changed { sessionKey, revision, widget? }— kalıcı durum değişti; kullanıcı arayüzü yeniden getirir (vewidgetmevcut olduğunda bir iframe'i yeniden yükler).board.command { sessionKey, command }— geçici kullanıcı arayüzü yönlendirmesi (ajan görünür sekmeyi değiştirir, sohbet yuvasını açıp kapatır) —ui.commandkalıbı.
Widget baytları, soket üzerinden değil kimliği doğrulanmış HTTP yüzeyi üzerinden sunulur.
Ajan araçları
Toplam üç araç (çekirdek, her zaman kayıtlı; işleme bugün olduğu gibi
inline-widgets istemci yeteneğine göre kısıtlanır):
show_widget { title, widget_code, name?, pin?, size?, tab?, after?, capabilities? }— ada göre oluştur/güncelle;pinbunu panoya yerleştirir.name/pinolmadan tamamen bugünkü gibi davranır (satır içi, geçici).dashboard { action, ... }— pano yönetimi fiilleri:read,tab_create,tab_update,tab_delete,tabs_reorder,widget_move,widget_remove,unpin,focus_tab,set_chat_dock.- Mevcut
cronaraçları otomasyon katmanını kapsar; yeni araç gerekmez.
Araç açıklamaları boyut/çapa sözlüğünü ve katman modelini öğretir. Ajan,
kullanıcı katman-1 olaylarından oturum bildirimleri aracılığıyla haberdar edilir, ör.
[dashboard] user clicked "Refresh" on widget weather (tab main).
Bunun yerine geçtiği bileşenler
extensions/workspacessilinir. Deneyseldir,enabledByDefault: false, hiçbir zaman kararlı bir sürümde yer almamıştır (ilk kez 2026.7.2 beta sürümlerinde ortaya çıktı). Geçiş yoktur; bir doctor kuralı varsa eski<stateDir>/workspaces/öğesini kaldırır. Alınan fikirler: saf ızgara matematiği, köprü güvenlik modeli (port önyüklemesi, bağlama kısıtlaması, hız sınırları), baytları sabitlenmiş onay.- Widget barındırma
extensions/canvasiçinden çekirdeğe taşınır. Canvas belge deposu, belge sarmalayıcısı, HTTP sunumu veshow_widgetaracı çekirdeğe (src/canvas/) taşınır; plugin, node-canvas denetim aracını (canvas) ve A2UI'ı tutar.pluginSurfaceUrls["canvas"]duyurusu ve/__openclaw__/canvasyolları yayımlanmış yerel istemci sözleşmeleridir ve kararlı kalır. Discord oturumları, Discord'a aitshow_widgetçeşidini korur.
Hedef dışı kapsam (bu program)
- Çok kullanıcılı pano paylaşımı/ACL'ler (gelecekte; oturum paylaşımıyla gelecek).
- Yerel macOS/iOS pano işleme (Control UI'ı gömdükleri her yerde bunu edinirler; satır içi widget yolu değişmez).
- Yerleşik veri widget'ları (oturumlar/kullanım/cron kartları) — yetenek köprüsü ve ajan tarafından yazılan widget'lar v1'i kapsar; yerleşik tür kayıt defteri daha sonra gelebilir.
Uygulama planı
Bağımsız çalışma ağaçları, Codex ile oluşturulur, sırayla incelenip eklenir. Ekle, ardından düzelt.
| # | Dal | Kapsam | Bağımlılıklar |
|---|---|---|---|
| T1 | claude/dashboard-remove-workspaces |
Workspaces plugin'i + kullanıcı arayüzü + belgeler + i18n anahtarlarını silme; doctor temizleme kuralı | — |
| T2 | claude/dashboard-canvas-core |
Widget barındırmayı + show_widget öğesini çekirdeğe yükseltme; canvas plugin'i node aracını tutar; sıfır davranış değişikliği |
— |
| T3 | claude/dashboard-domain |
Ajan DB tabloları (şema artışı), board.* RPC'leri + olaylar, dashboard aracı, show_widget sabitleme/ad/manifest bağımsız değişkenleri, katman-1 bildirimleri, sıfırlamada panoyu koruma |
T2 |
| T4 | claude/dashboard-ui |
Pano yüzü + sekme şeridi + akışkan otomatik sıkıştırılan ızgara + sohbet yuvası (sol/sağ/alt/gizli) + transkript sabitleme olanağı + kenar çubuğu pano yüzü + sıfırlama onayı | T3 (geliştirme fikstürleriyle önce sahte) |
| T5 | claude/dashboard-capabilities |
İzin deposu/kullanıcı arayüzü + bayt sabitleme; html widget'larını paylaşılan sandbox ana makinesine taşıma; ana makine araçları (openclaw.prompt.send/state.emit/data.read/cron.trigger); net CSP; yazarlık uyumluluk katmanı |
T3, T4 |
| T7 | claude/dashboard-mcp-apps |
mcp-app içerik türü: satır içi uygulama görünümlerinde sabitleme olanağı, tanımlayıcı depolama, kirayı yeniden oluşturma/yenileme, kalıcı sunucu aracı izinleri (yayımlanmış MCP Apps ana makinesini yeniden kullanır) |
T3, T4 |
| T6 | iyileştirme | Geçici bir Gateway üzerinde canlı E2E (gerçek anahtarlar), ekran görüntüleri, düzeltmeler, kullanıcı odaklı /web/dashboard yeniden yazımı, varsayılan olarak etkinleştirme incelemesi |
tümü |
Depo kurallarına göre doğrulama: yerel olarak odaklı vitest, tam kontroller
Crabbox/Testbox üzerinde, her eklemeden önce $autoreview, T6 için canlı kanıt.