Canvas Rolleri
Sahne biçimi
Bir canvas'ın sahnesi Excalidraw uyumludur. NEXUS'un modellemediği anahtarlar değişmeden gidip gelir — NEXUS'tan dışa aktarılan bir sahne Excalidraw'da açılır, Excalidraw'da kaydedilip NEXUS'a geri getirilen bir sahne ise NEXUS'un kendisinin kullanmadığı her alanı korur.
Rol merdiveni
Roller sıralıdır. Her rol, altındaki rollerin yapabildiği her şeyi kapsar:
| Rol | Okuyabilir | Yazma önerebilir | Yazmayı doğrudan uygulayabilir |
|---|---|---|---|
viewer | evet | hayır | hayır |
commenter | evet | evet | hayır |
editor | evet | evet | evet |
owner | evet | evet | evet |
Varsayılan rol yoktur. Bir canvas üzerinde kendisine açıkça rol verilmemiş bir ajan, o canvas'a karşı bir canvas aracı çağırdığında net bir hata alır — sessiz bir işlemsizlik ya da düşürülmüş bir okuma erişimi değil.
Yazma sonucu sözleşmesi
Her canvas yazma aracı (bkz. MCP Araçları) dört sonuçtan tam olarak birini döndürür. Bu dördü her zaman birbirinden ayırt edilebilir — çağıran taraf, hangisinin gerçekleştiğini bir mesaj dizesindeki düz metinden çıkarmak zorunda kalmaz.
| Sonuç | Taşıdığı bilgi | Ne zaman |
|---|---|---|
applied | yeni revizyon | Çağıran tarafın rolü editor ya da owner'dır ve yazma işlemi gerçekleşmiştir. |
proposed | bir öneri kimliği | Çağıran tarafın rolü commenter'dır ve yazma işlemi onay beklemektedir. |
conflict | hem beklenen hem geçerli revizyon | Çağıran tarafın expectedRevision değeri bayatlamıştır. |
rejected | bir gerekçe | Çağıran tarafın rolü viewer'dır ya da reason argümanı hatalı biçimlendirilmiştir. |
Bir çakışma asla başarı olarak bildirilmez. Yalnızca fırlatılan bir hatayı kontrol eden kod, çakışmayı yanlış işleyecektir — sonucu açıkça kontrol edin.
İyimser eşzamanlılık
Her yazma bir expectedRevision taşır. Bu değer canvas'ın geçerli revizyonuyla eşleşmezse çağrı, çağıran tarafın gerçekte görmediği bir sahneye uygulanmak yerine conflict döndürür:
{
"jsonrpc": "2.0",
"id": 20,
"result": {
"resultType": "tools/call",
"content": [{
"type": "text",
"text": "{\"outcome\":\"conflict\",\"expectedRevision\":41,\"currentRevision\":43}"
}],
"isError": false
}
}Bir conflict durumuna verilecek doğru yanıt, canvas'ın güncel durumunu yeniden okumak, amaçlanan değişikliği yeniden hesaplamak ve yeni revizyonla tekrar göndermektir — asla aynı yazmayı yalnızca revizyon numarasını artırarak yeniden göndermek değil. Bkz. How to handle canvas conflicts.
reason alanı
Her yazma bir reason taşır: değişikliği anlatan tek satırlık düz bir metin. Satır sonu veya kontrol karakteri içeren bir reason temizlenmez, doğrudan reddedilir — bu bilinçli bir enjeksiyon savunmasıdır, çünkü alan denetim izinde insanlara gösterilir ve başka bir ajanın bağlamına geri beslenebilir. Sorunlu karakterleri sessizce kırpmak, gizlenmiş bir yükün zayıflatılmış biçimde de olsa geçmesine izin verirdi; reddetmek ise çağıran tarafı temiz bir satır göndermeye zorlar.
{
"jsonrpc": "2.0",
"id": 21,
"result": {
"resultType": "tools/call",
"content": [{
"type": "text",
"text": "{\"outcome\":\"rejected\",\"reason\":\"reason must be a single line with no control characters\"}"
}],
"isError": false
}
}Çalışma alanı kapsamı
Canvas okuma ve yazma işlemleri tek bir çalışma alanıyla sınırlıdır. Çağıran ajanın çalıştığı çalışma alanından farklı bir çalışma alanını adlandıran bir yazma reddedilir.
Öneriler ve onay
Bir commenter'ın yazması, anında bir değişiklik yerine öneriye dönüşür. Bir öneri — canvas_approve_proposal aracılığıyla — bir insan tarafından ya da editor ve üzeri bir role sahip herhangi bir ajan tarafından onaylanabilir. Aynı şekilde canvas_reject_proposal ile reddedilebilir. Denetim izi, onay bir ajandan gelse bile öneren ile onaylayanı iki ayrı kimlik olarak kaydeder; böylece "bunu kim istedi" ve "kim onayladı" soruları her zaman kaydın kendisinden yeniden kurulabilir.
Yol haritası
Canvas henüz bölünebilir bir pencere bölmesi değildir ve yorumlar henüz bir öneriden bağımsız olarak kalıcılaştırılamaz. Bunun sonucu olarak bağımsız bir yorum aracı sunulmaz — bir değişiklik önermek, şu anda bir commenter'ın elindeki tek yapılandırılmış geri bildirim mekanizmasıdır.