Multiplayer AI Agent Code Synchronization & Conflict Resolution Tool
AgentSync, aynı projede çalışan birden fazla AI ajanının (Cursor, Claude Code, Copilot vb.) birbirinin kodunu ezmeden, çakışma yaşamadan eş zamanlı çalışmasını sağlayan bir VS Code eklentisidir.
Modern yazılım geliştirmede Vibe Coding yaygınlaşıyor: bir geliştirici Cursor'da bir AI ajanıyla çalışırken, başka bir geliştirici aynı dosyada Claude Code ile çalışıyor. Bu durum kaçınılmaz olarak şu sorunları doğurur:
- Kayıp değişiklikler: İki ajan aynı anda aynı dosyaya yazarsa, biri diğerinin değişiklikini siler.
- Sonsuz döngü çakışmaları: Bir ajanın çıktısı diğerini tetikler, o da birincisini tetikler.
- Merge cehennemi: Git birleşme çakışmaları elle çözülmek zorunda kalır.
AgentSync bu sorunları gerçek zamanlı senkronizasyon ve donanımsal dosya kilitleme ile kökten çözer.
[Geliştirici A - Cursor] [Geliştirici B - Claude Code]
| |
[AgentSync] [AgentSync]
| |
+--------> WebSocket Server <--------+
(ws://localhost:1234)
Yjs CRDT Sync Engine
1. WebSocket Relay Server (server/server.js)
- Node.js tabanlı basit bir broadcast sunucusu
- Port 1234 üzerinde çalışır
- Tüm bağlı istemcilere mesajları iletir
- Yjs protokolünü anlar, CRDT senkronizasyonunu yönetir
2. VS Code Eklentisi (agent-sync/)
- Her açık dosya için bir
Y.TextCRDT nesnesi oluşturur - Yerel değişiklikler → WebSocket → Uzak istemciler zincirine yayar
- Uzak değişiklikleri alarak editöre uygular
- OS seviyesinde dosya kilitleme/açma yapar
Kullanıcı A bir karakter yazar
↓
onDidChangeTextDocument tetiklenir
↓
Yjs Y.Text güncellenir (CRDT)
↓
WebSocket üzerinden sunucuya gönderilir
↓
Sunucu tüm istemcilere yayar
↓
Kullanıcı B'nin eklentisi değişikliği alır
↓
isApplyingRemoteChange = true (döngü önleme)
↓
WorkspaceEdit ile editöre uygulanır
↓
isApplyingRemoteChange = false
Kullanıcı A yazmaya başlar
↓
fileLocks Y.Map'e {uri: clientID} eklenir
↓
WebSocket üzerinden tüm istemcilere yayılır
↓
Kullanıcı B'nin eklentisi kilidi algılar
↓
fs.chmodSync(dosya, 0o444) → Dosya READ-ONLY yapılır
↓
Status Bar: "🔴 LOCKED: dosya.ts (By Teammate)"
↓
Kullanıcı A 2 saniye yazmayı durdurur
↓
fileLocks'tan kilit silinir, Kullanıcı B'ye yayılır
↓
fs.chmodSync(dosya, 0o666) → Dosya tekrar yazılabilir
↓
Status Bar: "🟢 AgentSync: Idle"
| Özellik | Açıklama |
|---|---|
| Gerçek Zamanlı Sync | Yjs CRDT ile milisaniyeler içinde karakter bazında senkronizasyon |
| OS Seviye Kilit | chmod 0o444 ile donanımsal write koruması |
| Sonsuz Döngü Koruması | isApplyingRemoteChange bayrağı ile remote→local döngüsü engellenir |
| Spam Koruması | Zaten kilitli dosyalar için tekrar chmod çağrılmaz |
| Debounce | Son tuş basımından 2 saniye sonra kilit otomatik kalkar |
| Panik Butonu | Ağ koptuğunda tüm kilitleri zorla açma komutu |
| Status Bar | Anlık kilit durumu görsel göstergesi |
| Output Channel | Tüm sync ve kilit olaylarının log'u |
- VS Code
^1.75.0veya Cursor (VS Code tabanlı) - Node.js
^18.0.0 - npm
cd server
npm install
node server.js
# 🚀 WebSocket server running on ws://localhost:1234VSIX dosyasından (önerilen):
# VS Code / Cursor'da:
# Cmd+Shift+P → "Extensions: Install from VSIX..."
# agentsync-0.0.1.vsix dosyasını seçinGeliştirme modunda:
cd agent-sync
npm install
npm run compile
# VS Code'da F5 tuşuna basarak Extension Host başlatınHer geliştirici kendi makinesinde sunucuyu başlatır ve eklentiyi yükler. (İlerideki sürümlerde merkezi bir sunucu desteği planlanmaktadır.)
Eklenti kurulunca otomatik olarak aktif olur. Herhangi bir ayar gerekmez.
🟢 AgentSync: Idle— Tüm dosyalar serbest, kod yazmaya hazır.🔴 LOCKED: [DosyaAdı] (By Teammate)— Bir takım arkadaşınızın ajanı o an bu dosyaya yazıyor, bekleyin.
Tüm olayları görmek için:
View → Output → AgentSyncsekmesini açın
🔄 AgentSync başlıyor...
✓ Sunucuya bağlandı
[+] Takibe alındı: /proje/src/index.ts
🔴 Kilitlendi: index.ts
🟢 Kilit açıldı: index.ts
Komut paletini açın (Cmd+Shift+P / Ctrl+Shift+P):
> AgentSync: Force Unlock All Files
Bu komut:
- Tüm Yjs kilit kayıtlarını temizler
- Tüm
chmod 0o444kilitlerini0o666'ya döndürür - Status Bar'ı sıfırlar
- Timer'ları iptal eder
server.js'in çalıştığını kontrol edin:node server.js- Firewall'un 1234 portuna izin verdiğini kontrol edin
ws://localhost:1234adresinin doğru olduğunu doğrulayın
- Her iki tarafın da aynı sunucuya bağlı olduğunu kontrol edin
- Output Channel'da hata mesajı olup olmadığını kontrol edin
- Eklentiyi yeniden yükleyin:
Cmd+Shift+P → Developer: Reload Window
CRDT (Conflict-free Replicated Data Type), merkezi bir koordinatöre ihtiyaç duymadan birden fazla tarafın aynı veriyi eş zamanlı düzenleyebileceği bir veri yapısıdır. AgentSync, Y.Text tipini kullanır:
- Her karakter ekleme/silme bir operasyon olarak temsil edilir
- Operasyonlar ağ sırası ne olursa olsun her zaman aynı sonucu üretir
- Çakışan düzenlemeler otomatik olarak birleştirilir
// Kilit edinme
fileLocks.set(uri, provider.awareness.clientID);
// Kilit gözlemleme
fileLocks.observe(() => {
// Başka bir istemcinin kilidi → chmod 0o444
// Kilit kalktı → chmod 0o666
});
// Debounce ile otomatik bırakma
setTimeout(() => fileLocks.delete(uri), 2000);Remote değişiklik uygulandığında onDidChangeTextDocument tekrar tetiklenir. Bu döngüyü kesmek için:
// Observer'da SENKRON olarak set edilir (async başlamadan önce)
isApplyingRemoteChange = true;
applyRemoteChanges(fileUri, event)
.finally(() => { isApplyingRemoteChange = false; });
// onDidChangeTextDocument'in en başında kontrol edilir
if (isApplyingRemoteChange) { return; }AgentSync/
├── agent-sync/ # VS Code eklentisi
│ ├── src/
│ │ └── extension.ts # Ana eklenti kodu
│ ├── out/ # Derlenmiş JS çıktısı
│ ├── package.json # Eklenti manifest
│ ├── tsconfig.json # TypeScript ayarları
│ └── icon.png # Eklenti ikonu
│
└── server/ # WebSocket relay sunucusu
├── server.js # Sunucu kodu
└── package.json
| Teknoloji | Versiyon | Kullanım Amacı |
|---|---|---|
| TypeScript | ^5.0 | Tip güvenli eklenti geliştirme |
| Yjs | ^13.6.30 | CRDT senkronizasyon motoru |
| y-websocket | ^3.0.0 | Yjs için WebSocket provider |
| ws | ^8.20.1 | WebSocket istemci ve sunucu |
| VS Code API | ^1.75.0 | Editör entegrasyonu |
| Node.js | ^18.0 | Sunucu runtime |
- Merkezi bulut sunucusu desteği (takımlar arasında ortak relay)
- Awareness UI: Kim hangi satırda çalışıyor görsel göstergesi
- Ajan kimlik sistemi: "Claude", "Cursor", "Copilot" etiketleri
- Kilit öncelik sırası: Daha uzun süredir bekleyen ajana öncelik
- VS Code Marketplace yayını
MIT
ArfDev-on-ArfDAO
AgentSync, Vibe Coding çağında AI ajanlarının barış içinde bir arada çalışması için tasarlandı.