AND for VS Code
AND ekosistemiyle tam uyumlu bir VS Code uzantısı. İki bağımsız katmandan oluşur:
- DeltaX sürüm kontrolü —
Eklentiler/DeltaX (Go) ile aynı disk üzerindeki veri formatını
(AND_DATA_DIR/DeltaX/…) okuyup yazar; AND kapalıyken de çalışır (yerel dosya tabanlı).
- Canlı AND paneli (Forum/DM/Sohbet/Ağ) — AND açıkken,
internal/pluginapi'nin yerel
API'sine bağlanır; bkz. Canlı Panel bölümü.
Bu uzantı AND TUI ile aynı anda, birbirini bozmadan kullanılabilir: DeltaX katmanı ikisi de
aynı içerik-adresli nesne deposunu (nesneler/), aynı meta.json/MERGE_HEAD dosyalarını
okur/yazar; canlı panel ise AND'ın zaten çalışan sürecine ayrı bir bağlantı üzerinden konuşur.
DeltaX — Neler yapılabilir
| Özellik |
Nasıl |
| Gruplar/Projeler listesi |
Etkinlik çubuğundaki DeltaX simgesi |
| Bir projeyi çalışma alanı olarak açma |
Proje ağacında proje adına tıkla / "Projeyi Aç" |
| Yeni proje oluşturma (yerel) |
Grup üstünde sağ tık → "Yeni Proje" |
| Durum (Eklenen/Değişen/Silinen) |
Kaynak Denetimi paneli, otomatik yenilenir |
| Diff |
Bir değişikliğe tıkla → VS Code'un yerleşik diff editörü (HEAD ↔ çalışma dosyası) |
| Kaydet (Commit) |
Kaynak Denetimi giriş kutusuna mesaj yaz, Ctrl+Enter |
| Günlük (Log) |
Komut Paleti → "DeltaX: Günlük" — arama + commit başına değişen dosyalar, tıklayınca diff |
| Dal değiştir / yeni dal |
Komut Paleti → "DeltaX: Dal Değiştir" / "DeltaX: Yeni Dal Oluştur" |
| Uzak dalı birleştir |
Komut Paleti → "DeltaX: Uzak Dalı Birleştir" (proje.uzaklar'daki, TUI ile daha önce Gönder/Çek edilmiş uçlar) |
| Dışa aktar (.zip) |
Proje sağ tık → "Projeyi Dışa Aktar (.zip)" |
.projeagignore düzenle |
Komut Paleti → "DeltaX: .projeagignore Dosyasını Aç/Oluştur" |
DeltaX kapsam dışı (bilinçli olarak)
Grup oluşturma/davet/yönetici atama ve DeltaX'e özgü Gönder (push) / Çek (pull) bu katmanda
YOKTUR — bunlar AND'ın canlı libp2p P2P bağlantısını gerektirir (bkz. Eklentiler/DeltaX/sync.go).
Bu işlemler için AND TUI'sindeki DeltaX eklentisini kullanın; TUI ile senkronize ettiğiniz her şey
(nesneler, proje.uzaklar uçları) bu uzantı tarafından da görülür ve yerel olarak birleştirilebilir.
Genel forum/DM/sohbet ise artık aşağıdaki Canlı Panel üzerinden VS Code'dan da kullanılabilir.
Canlı Panel (Forum / DM / Sohbet / Ağ)
AND açıkken (ve aşağıdaki tek seferlik kurulum yapıldıysa) Komut Paleti → "AND: Canlı Panel"
ile: kimlik/rol bilgisi, bağlı eşler, genel sohbet, doğrudan mesaj (DM), forumda yeni konu açma,
bir konuyu ID ile görüntüleyip yanıtlama ve — kurucu/moderatörseniz — bekleyen gönderileri
onaylama/reddetme/silme ve yazar güvenilirlik listesine ekleme.
Durum çubuğunda sol altta "AND: bağlı" / "AND: bağlı değil" göstergesi vardır; tıklayınca
paneli açar.
Nasıl bağlanır — mimari
AND'ın eklenti API'si (internal/pluginapi) normalde yalnızca AND'ın kendisinin başlattığı
eklenti alt süreçlerine (AND_API_ADDR/AND_API_TOKEN ortam değişkenleriyle) açılır — bağımsız
başlatılmış bir VS Code uzantısı bu değişkenleri asla göremez. Bunu çözmek için AND'ın Go
kaynağına küçük, opt-in bir ekleme yapıldı: AND_ENABLE_EXTERNAL_API=1 ortam değişkeniyle
açıldığında AND, mevcut token'lı TCP dinleyicisinin YANINA (onu değiştirmeden) ikinci bir
dinleyici açar:
- Windows: sabit, türetilmiş adlı bir named pipe (
\\.\pipe\and-plugin-api-<hash>),
security descriptor'ı yalnızca pipe'ın sahibine (owner) erişim izni verecek şekilde ayarlanmış
(D:P(A;;GA;;;OW)) — aynı makinedeki başka bir kullanıcı, hatta Administrators grubu bile
erişemez.
- Linux/macOS:
AND_DATA_DIR/api.sock yolunda, 0600 izinli bir Unix domain socket.
Bu ikinci dinleyicide bearer token yoktur — erişim kararını bir sırla değil doğrudan işletim
sistemi verir, bu yüzden pipe/socket adının kendisi gizli olmak zorunda değildir (adı bilmek
yalnızca bağlanmayı DENEMEYE izin verir; gerçek erişim OS tarafından kısıtlanır). Uzantı bu adı,
AND'ın kullandığı AND_DATA_DIR yoluyla birebir aynı formülle (bkz. src/live/liveAddr.ts ↔
internal/pluginapi/externalpipe_*.go) kendisi hesaplar; ayrıca bir keşif dosyasına gerek yoktur.
Kurulum (tek seferlik)
AND'ı başlatmadan önce ortam değişkenini ayarlayın:
# PowerShell
$env:AND_ENABLE_EXTERNAL_API = "1"
.\and.exe
# bash
AND_ENABLE_EXTERNAL_API=1 ./and
Bu değişken ayarlanmadıysa AND, mevcut davranışını (yalnızca kendi başlattığı eklentilere
token'lı erişim) hiçbir şekilde değiştirmez — ikinci dinleyici hiç açılmaz.
Kapsam ve sınırlamalar
- Forum'da tüm gönderileri gözatma (
getAllPosts/getPending) yalnızca kurucu/moderatör
rolüyle çalışır — bu, AND'ın API'sinin kendi tasarımıdır (bkz. enforceModeratorRole),
uzantı tarafından eklenen bir kısıtlama değildir. Normal bir üye olarak yeni konu açabilir,
bilinen bir konu ID'sine yanıt yazabilir ve ID'sini bildiğiniz bir konuyu görüntüleyebilirsiniz.
- DM ve genel sohbet, sunucu tarafında en fazla 5 saniye bekleyen bir long-poll ile alınır; panel
açıkken sürekli arka planda döner, kapatılınca durur.
- Bu katman AND kapalıyken hiçbir şey yapmaz — DeltaX'in yerel dosya tabanlı özellikleri bundan
etkilenmez.
⚠️ Dal değiştirme / birleştirme çalışma klasörünü tamamen siler
DeltaX'in TUI'siyle birebir aynı davranış: bir dala geçerken (dalaGec), çalışma klasöründeki
her şey — .projeagignore ile hariç tutulan ya da hiç izlenmeyen dosyalar dahil — önce
silinir, sonra hedef dalın kayıtlı içeriği yeniden yazılır. Uzantı bunu yapmadan önce (a) çalışma
dizininin temiz olduğunu zorunlu kılar ve (b) açık bir onay penceresi gösterir; yine de önemli
yerel-olmayan dosyaları çalışma klasörünün dışında tutun.
Kurulum / Geliştirme
Canlı panel için AND tarafında go build ./... ile yeniden derleme gerekir (yalnızca
internal/pluginapi içine github.com/Microsoft/go-winio bağımlılığı eklendi — go.mod/go.sum
zaten güncellendi, ek bir adım gerekmez). Bu değişiklik go build ./..., go vet ./... ve
go test ./... ile bu ortamda doğrulandı.
VS Code uzantısı tarafı için: bu ortamda Node.js kurulu değildi, bu yüzden aşağıdaki adımlar
doğrulanamadı — çalıştırmadan önce bağımlılıkları siz kurmalısınız:
cd and-vscode
npm install
npm run build # dist/extension.js üretir (esbuild)
VS Code'da bu klasörü açıp F5 ile bir Extension Development Host penceresi başlatabilir,
ya da paketleyip kurabilirsiniz:
npm run package # and-vscode-0.2.4.vsix üretir (@vscode/vsce)
code --install-extension and-vscode-0.2.4.vsix
Geliştirme sırasında canlı yeniden derleme için npm run watch.
Ayarlar
| Ayar |
Açıklama |
deltax.dataDir |
AND_DATA_DIR üzerine yaz. Boşsa AND'ın kendi varsayılanı (os.UserConfigDir()/and) otomatik hesaplanır. Canlı panelin pipe/socket adını hesaplarken de aynı değer kullanılır — AND gerçekte farklı bir AND_DATA_DIR ile başlatıldıysa burada da aynısını belirtin. |
deltax.authorName |
DeltaX commit'lerinde yazar adı. Boşsa işletim sistemi kullanıcı adı kullanılır. AND'daki takma addan bağımsızdır. |
Mimari — Go karşılıkları
Bu uzantının veri katmanı, Eklentiler/DeltaX (Go) içindeki dosyaların TypeScript'e birebir
taşınmasıdır; hash algoritmaları ve JSON alan adları bilerek aynı tutulmuştur ki iki taraf da
aynı nesneler/, meta.json, MERGE_HEAD dosyalarını sorunsuz okuyup yazabilsin.
| TypeScript |
Go karşılığı |
Ne yapar |
src/objectStore.ts |
vcs.go (nesne deposu) |
İçerik-adresli blob/ağaç/commit okuma-yazma |
src/treeStore.ts |
vcs.go (ağaç/durum/checkout) |
Ağaç oluşturma, durum hesaplama, dal geçişi |
src/commitStore.ts |
vcs.go (commit/günlük/ortak ata) |
Commit okuma/yazma, günlük, ortak ata |
src/mergeEngine.ts |
vcs.go (üçlü birleştirme) |
Üç yönlü birleştirme + çakışma işaretleri |
src/ignoreRules.ts |
ignore.go |
.projeagignore desen eşleştirme |
src/groupProjectStore.ts |
store.go |
Grup/proje meta verisi, MERGE_HEAD |
src/exportZip.ts |
export.go |
Projeyi .zip olarak dışa aktarma |
src/dataDir.ts |
cmd/and/main.go (appDir) |
AND_DATA_DIR varsayılan konum tespiti |
Canlı panel katmanı (src/live/) yukarıdaki DeltaX veri katmanından tamamen ayrıdır ve AND'ın
çalışan sürecine bağlanır:
| TypeScript |
Go karşılığı |
Ne yapar |
src/live/liveAddr.ts |
internal/pluginapi/externalpipe_windows.go / externalpipe_unix.go |
Pipe adı / socket yolu türetme (birebir aynı formül) |
src/live/liveClient.ts |
internal/pluginapi/api.go (Client) |
Named pipe/Unix socket üzerinden HTTP istekleri (token yok) |
src/live/liveConnection.ts |
— |
Bağlantı durumu, periyodik yeniden deneme |
src/live/livePanel.ts |
— |
Kimlik/Rol/Ağ/Sohbet/DM/Forum webview paneli |
src/live/liveTypes.ts |
internal/pluginapi/api.go (struct'lar) |
JSON tip tanımları |
Not: Ağaç/commit nesnelerini yazarken JSON serileştirmesinin Go'nunkiyle bayt bayt aynı olması
gerekmez — her nesnenin hash'i kendi yazdığı baytlardan türetildiği için bu iki taraf arasında
"aynı içerik = aynı hash" garantisi zaten sağlanır (kısmi çiftleşme dışında bir tutarsızlık
oluşmaz). Blob hash'i ise (sha256('B' + ham bayt)) iki tarafta da bit bit aynı formülle
hesaplanır — durum karşılaştırmalarının doğruluğu buna dayanır.