# FikoYT Yerel Bridge ve Eklentiler: mimari, yayın ve tuzaklar

Bu dosya tekrar eden hataları önlemek için yazıldı. Yeni bir işe başlamadan önce oku.
Anahtar içeriği burada yazılmaz; yalnızca yer bilgisi vardır.

## 1. Mimari

Akış (arama örneği):

    Web (cihaz-detay.component.ts)
      -> POST /fapiv1/...bridge.cihaz.eklenti-istegi   (sunucu: docker\fikoyt-sunucu\merkez.go-server.com\sistem\kok\bridge_eklenti_istek.go)
      -> socket "FikoYT.bridge.eklenti.istegi"         (sunucu -> bridge, cihaz odası)
      -> bridge socket.go: go eklentiIstegiIsle(veri)  (her istek ayrı goroutine)
      -> eklenti_socket.go switch(islem)               ("ara", "calistir", "kur", ...)
      -> eklentiCalistir (eklenti_calistir.go)         (her çağrı AYRI SÜREÇ; stdin tek satır JSON, stdout tek satır JSON)
      -> eklenti (ör. everything\main.go)              -> Everything HTTP (127.0.0.1)
      <- sonuç: socket "FikoYT.bridge.eklenti.sonuc" {id, islem, anahtar, tamam, hata, veri}
      <- web: cihaz-eklenti-detay.component.ts, id/anahtar ile eşleşir (islem 'ara' için sonuc listesi)

Temel kurallar:
- Bridge eklentiye özel iş bilmez. Yeni işlem = eklentide yeni case + sunucu whitelist'inde (bridge_eklenti_istek.go switch) yeni case.
- Bridge'in eklenti_socket.go içindeki "calistir" işlemi genel: eklentiye c.Islem olarak iletir. Yani eklentiye yeni bir alt işlem eklemek için bridge değişmez, sadece sunucu/web değişir.
- Süreç modeli: tek seferlik (eklentiCalistir, her çağrıda yeni süreç, 10 sn zaman aşımı) ve kalıcı (surecYoneticisi: baslat/durdur/olay). Everything kalıcı süreç kullanır: ilk aramada lazy başlatılır (açılışta DEĞİL, kaliciAra içinde), kalıcı istek başarısız olursa tek seferlik çalıştırmaya düşer (eklentiAra). Kalıcı süreç çıktısı satır satır okunur; bir satır 1 MB sınırını aşarsa okuyucu durur (bkz. PLAN S1/S3). Tek seferlik çağrılar (eklenti_cagir, dosya-yoneticisi, socket calistir) her zaman ayrı süreç açar.
- Eklenti başına eşzamanlılık sınırı: eklentiCalistir içinde eklentiSlotAl(yol), varsayılan 16, bekleme 30 sn (eklenti_esz.go).
- Eklenti kurulumu/kaldırma/etkinleştirme PC'de onay ister. Arama onay istemez (izin zaten verildi).
- Bridge ve eklenti imzaları Ed25519. Bridge paketAcikAnahtar ile doğrular (paket.go). Özel anahtar repoda YOK.
- Sunucu eklenti/bridge dosyalarını /data/eklentiler altından, her istekte diskten okur (salt-okunur volume). Yeni sürüm klasörü koyunca yeniden başlatma gerekmez.
- Sunucu kapısı: bilgisayar sahibi kontrolü (bridgeCihazAl), çevrimiçi kontrolü (bridgeCevrimiMi), istek boyutu sınırı.

Bilinen porlar:
- Everything HTTP: bu makinede 80. Eklenti kodunda varsayılan 8888; ayar ekranı "bu bilgisayarda 80 ise onu yazın" diyor. Port uyuşmazlığı arama hatası verir.
- Bridge yerel: 127.0.0.1:7878. Sunucu: fikoyt.com:9000 (socket.io, /eklenti, /bridge).

## 2. Everything eklentisi (eklentiler\everything)

Dosyalar:
- main.go: stdin satır okuma, islem (ara / klasor-ac / dosya-parca / ping), Everything isteği, onizlemeZenginlestir.
- kucuk_resim.go: küçük resim (Shell GetImage, PNG data URL). Paralel (4 işçi, her biri COM başlatır), sıra korunur.
  - Uzantı başına: 3 ardışık başarısızlık ve hiç başarı yoksa o uzantı atlanır (ör. .pdf).
  - Disk önbelleği: %LOCALAPPDATA%\fikoyt-eklenti-everything\kucuk\<sha1(yol|boyut|mtime)>.dat
  - Ayarlar: kucukResim (aç/kapa), kucukMaksDeneme (varsayılan 40), kucukSureSn (3), kucukToplamKb (200).
- catgomulu_onizleme.go: CATIA dosyaları için gömülü önizleme (Shell sağlayıcısı yoksa).

Ölçümler (bu makine, Everything port 80, 50 sonuç):
- Önizleme kapalı: ~48 ms (süreç başlatma dahil). Yanıt ~3,4 KB (img0) / ~4 KB (pdf).
- img0 önizleme açık (20 küçük resim): ~175–195 ms soğuk, ~120 ms önbellekli. Yanıt ~144 KB. Büyük kısmı PNG base64.
- .pdf önizleme açık: önceden ~410 ms, şimdi ~120–145 ms.
- Everything ilk sorgu (soğuk): ~145 ms; sonrakiler ~3–4 ms.
- DİKKAT: Klasördeki eski .exe kaynaktan eski. boyut=50 istediğinde 30 döndürdü. Ölçümden önce exe'nin kaynakla eşleştiğinden emin ol (yeniden derle).

Açık fikirler (henüz yapılmadı):
- Tembel yükleme: "ara" sonucu hemen gider (önizlemesiz), küçük resimler ayrı "kucuk" işlemiyle gruplar halinde istenir. Plan:
  - Eklenti: "kucuk" işlemi {sorgu, sayfa, boyut, baslangic, uzunluk}; Everything'i yeniden sorgular, sadece o aralığın küçük resmini döner. Web'den dosya yolu ALINMAZ (bilgi sızıntısı önlemi).
  - Sunucu: bridge_eklenti_istek.go switch'e "kucuk" case'i (kısıtlı doğrulama).
  - Web: kartlara resim yerleştirme, 8–10'luk gruplar, paralel istek.
  - Eklenti ayrıca kendi içinde eşzamanlı işleyebilmeli (şu an stdin satırları sırayla işleniyor; tek süreçte paralellik yok). Bridge tarafı zaten paralel.

## 3. Yayın prosedürü

Ortak: imzalama anahtarı C:\Users\FikoYT\fikoyt-imza-araci\anahtar\ klasöründe. İçeriğini asla okuma/yazdırma; yalnızca -key argümanına ver.
İmzalama aracı: araclar\imzala\main.go (repo). Derlenmiş hali: %TEMP%\imzala-v2.exe (yoksa: araclar\imzala içinde go build -o %TEMP%\imzala-v2.exe .).
Araç biçimi: HER ZAMAN v2. Sondaki bit = -acilis bayrağı (1/0). Eski araç -acilis yoksa v1 üretiyordu; bridge v2 istiyordu. Düzeltildi.

### 3a. Eklenti yayını (ör. everything 1.0.15)
1. Kaynaktan derle: eklentiler\everything içinde go build -o <gecici>\plugin.exe . (CGO_ENABLED=0 kullanıldı). Test: go vet, go test.
2. Doğrudan depoya koy (ara klasör AÇMA): docker\fikoyt-sunucu\eklenti-depo\everything\<surum>\plugin.exe
3. İmzala: imzala-v2.exe -key <anahtar> -eklenti everything -surum <surum> -acilis -dosya <depo>\plugin.exe -cikti <depo>\manifest.json
   (-acilis: önceki sürümlerle aynı; kullanıcıya kurulumda ayrıca sorulur)
4. Kontrol: manifest.sha256 == Get-FileHash(plugin.exe). Canlı: https://fikoyt.com:9000/eklenti/everything/<surum>/plugin.exe indirip hash karşılaştır.
5. Sunucu yeniden başlatma gerektirmez.

### 3b. Bridge yayını (ör. 0.2.9)
1. bridge\main.go: const surum = "<yeni>" (ilk satır ~18). go vet, go test.
2. Derle: go build -ldflags "-H=windowsgui" -o %TEMP%\bridge-<surum>.exe .
3. depo\bridge\<surum>\bridge.exe'ye kopyala. Eski manifesti depo\bridge\manifest.json.onceki-<eski> olarak yedekle.
4. İmzala: imzala-v2.exe -key <anahtar> -eklenti bridge -surum <surum> -dosya <depo>\<surum>\bridge.exe -cikti <depo>\manifest.json  (-acilis YOK, bit 0)
5. manifest.json'a "url": "https://fikoyt.com:9000/bridge/<surum>/bridge.exe" ekle (imzalı değil; ConvertFrom-Json, Add-Member, ConvertTo-Json ile yaz, UTF-8 BOM'suz).
6. Doğrula: bridge'in kendi paketDogrula'sı ile geçici bir _test.go (paketAcikAnahtar kullan), sonra SİL.
7. Canlı: https://fikoyt.com:9000/bridge/manifest.json ve /bridge/<surum>/bridge.exe sha256.
8. PC'deki bridge: kendi kontrolünde (başlangıçtan 30 sn sonra, sonra 6 saatte bir) ya da web "Bridge'i güncelle" ile görür. Onay ekranı çıkar (Her zaman otomatik seçilmediyse).

## 4. Sunucu ve web

- Sunucu: docker\fikoyt-sunucu\merkez.go-server.com (Go modülü). Derleme kontrolü: go build ./sistem/kok/ ve go vet ./sistem/fikoyt_socket_io/.
- Docker: docker\fikoyt-sunucu\docker-compose.yml, servis fikoyt-sunucu, port 9000. Deploy adımları: docker-compose build fikoyt-sunucu; docker-compose up -d fikoyt-sunucu; docker logs --tail 50 fikoyt-sunucu.
- Web: fikoyt-sistem. Derleme: npx ng build --configuration development. CANLI DEPLOY YÖNTEMİ BİLİNMİYOR: kullanıcıya sor.
  - Web geliştirme sunucusu (ng serve) HMR ile değişiklikleri kendisi derler ve tarayıcıya yansıtır; geliştirme için ng build gerekmez. ng build yalnızca derleme hatası kontrolü için kullanılır (uyarılar hmi-pdks kaynaklı, bilinen).
- Canlı işlem öncesi kısa rapor ver ve onay al. (Kullanıcı belgede belirtilen adımları onayladığında bile yayın öncesi özet yap.)

## 5. Tuzaklar (yaşananlar)

- Yayın için ayrı bir "hazırlık" klasörü açma. Doğrudan depoya yaz; önceki sürümlerin yapısı: eklenti-depo\<anahtar>\<surum>\{plugin.exe, manifest.json}. Açtığım yanlış klasör silindi.
- lisans_ozel.key (fikatia-local altında) LİSANS anahtarı; eklenti/bridge imzası için KULLANMA.
- e2e-calistir.cmd içindeki anahtar TEST anahtarı; üretim paketi onunla imzalanırsa bridge reddeder. Kullanma.
- Filesystem MCP araçları izinli klasörlerle sınırlı: D:\__sistem__\Masaustu\FikoYT.Yeni.Cag, D:\__sistem__\ProgramFiles\ComfyUi, D:\. C:\Users\... için PowerShell kullan.
- D:\ genelinde recursive Select-String/Get-ChildItem zaman aşımına yol açtı (4 dk). Kapsamı repo klasörüyle sınırla; büyük aramalar için cmd /c dir /s /b kullan.
- PowerShell: $ProgressPreference='SilentlyContinue' (CLIXML gürültüsü). Dosya yazarken [IO.File]::WriteAllText(yol, metin, UTF8 BOM'suz). Set-Content kullanma.
- Go kaynaklarında Türkçe karakter kullanma (önceki dosyalarda çift kodlama sorunu). Yorumlar ASCII tercih edilir.
- gofmt -l çıktısı varsa gofmt -w çalıştır.
- Ölçümden önce exe'nin güncel kaynakla derlendiğini doğrula (eski exe yanıltıcı sonuç verdi).
- Açık kalan: tembel yükleme (yukarıda), eklentinin paralel işlenmesi, USB eklentisinin güncel sürümü kontrol edilmedi, PC'deki Everything eklentisinin 1.0.14'e geçip geçmediği bilinmiyor.

## 6. Çalışma kuralları (kullanıcıyla anlaşılanlar)

- Kullanıcı tam yetki verdi ama canlı işlemlerden (depo yazımı, sunucu deploy, web deploy) önce kısa rapor ver.
- Kullanıcı önceki sezonlardaki yöntemi tercih ediyor: önce mevcut yapıya bak, aynısını yap.
- Tembel/paralel gibi büyük kararlar için kullanıcının onayını bekle; küçük teknik adımları sor-sormadan yap.
- Resimsiz sonuç istenmiyor: deneme sınırını düşürerek resim kaybettirme.
- Bridge eşzamanlılık sınırı genis tutuluyor (16); "fazla sınır koyma" tercihi.

## 7. Güncel durum (2026-10-14)

### Canlı web (fikoyt.com) nasıl çalışır
- Canlı site `fikoyt-sistem\start-prod.bat` ile açılan `ng serve --configuration=production` süreci tarafından sunuluyor (Node, PID değişir). Yani web yayını dosya kopyalama değil, bu geliştirme sunucusu.
- Değişiklikler HMR ile otomatik derlenmeli. AMA 2026-10-14'te süreç yeniden başlatılsa bile derleme eski paketi (`main-JXTPN3UX.js`) sunmaya devam etti. Kaynakta "Eklenti testi" var, `ng build --configuration production` hatasız derliyor.
- Olası neden: Angular önbelleği (`fikoyt-sistem\.angular\cache`). Önerilen çözüm: önbelleği silip `start-prod.bat`'ı yeniden başlatmak. Bu, canlı siteyi birkaç dakika keser; kullanıcı onayı gerekir.
- Kontrol komutu: canlı ana sayfadaki `main-*.js` içinde "Eklenti testi" var mı (test bölümü), "dosya-yoneticisi" açıklaması katalogda var mı.
- `statik` klasörü (sunucu imajı) eski ve kullanılmıyor; web yayınında kullanılmaz.

### Mağaza açıklamaları (imzalı)
- Açıklama dosyaları: `eklenti-depo\<anahtar>\aciklama.json` + `aciklama.imza.json` (`{ozet, imza}`).
- İmza metni: `fikoyt-aciklama-v1\n<anahtar>\n<ozet>` (ozet = aciklama.json'un sha256'sı, hex küçük harf). Ed25519, aynı üretim anahtarı.
- Üretim: `imzala.exe -key <anahtar> -eklenti <anahtar> -aciklama <aciklama.json> -cikti <aciklama.imza.json>` (araç `-aciklama` modunu destekler).
- Doğrulama: web `aciklama-dogrula.ts` ile aynı açık anahtar; canlı katalogda `aciklamalar` alanında görünmeli.
- aciklama.json'u imzalandıktan sonra DEĞİŞTİRME; ozet tutmaz.
- Şu an açıklaması olan: dosya-yoneticisi, everything, usb.

### Yayınlanmış sürümler (son durum, 2026-10-14)
- everything: 1.0.19 (SDK, protokol 2, v2, acilis true).
- usb: 1.0.6 (SDK, protokol 2, v2, acilis false).
- dosya-yoneticisi: 1.3.2 (SDK, protokol 2, v2, acilis false).
- bridge: 0.6.4 (2026-10-17, sha256 4377b19f3309c521bbe103aaa17f7f72c70e1949e6cba17df035f4735a1db3c0; canli dogrulandi). Onceki 0.6.3 ve 0.5.8 (profil cikarinda sunucu cihaz kaydi iptali + yerel izin sifirlama + web gorunumu guncelleme. Yayın: 2026-10-16, sha256: 596ce666e4d5881040a53c0285327a76feaa69e602328fbac826a4aae903cdd0). Onceki 0.5.7, 0.5.6, 0.5.5, 0.5.4, 0.5.3, 0.5.2, 0.5.1, 0.5.0, 0.4.2, 0.4.1, 0.4.0, 0.3.8 (depoda sakli).
- Sunucu: `calistir` işlemi yalnızca `dosya-yoneticisi` için açık (eklenti-istegi whitelist). Deploy edildi.

### Dosya-yoneticisi: yapılanlar ve kalan
- Eklenti: `eklentiler\dosya-yoneticisi\`. Canlı test: `canli_test.go`, `FIKOYT_DOSYA_KLASOR` ortam değişkeniyle PC'de çalışır (`go test -count=1 -run TestDosyaCanli -v .`).
- Web: detay sayfasında "Dosyalar" bölümü (gezgin, indir, yükle, kopyala, sil) ve "Eklenti testi" bölümü (7 adım). Kod hazır; canlıda görünmesi için yukarıdaki dev sunucu sorunu çözülmeli.
- Bridge: `dosya_izin.go` (izin kayıtları, yasak klasörler, onay), `dosya_calistir.go` (işlem bazlı izin, yazma oturumu 10 dk).
- Açık: PC'de uçtan uca test (bridge 0.3.2 + eklenti kurulu olmalı); dev sunucu sorunu.

### Dikkat
- Dev sunucu (start-prod.bat) yeniden başlatılınca canlı site birkaç dakika kesilir; KULLANICI BUNU BİLİYOR.
- Bridge güncellemeleri PC'de onay ister (otomatik açıksa sormaz).