FisherSelim AI — VS Code Eklentisi
FisherSelim AI'ı editörünüzden kullanın: kod
seçip soru sorun, dosya açıklatın, hata metnini analiz ettirin, önerilen
kodu diff görünümüyle onaylayıp uygulayın — hepsi aynı model routing ve
kredi sistemiyle (backend'deki POST /api/agent/complete üzerinden).
Yanıtlar markdown + syntax highlighting ile render edilir, sohbet
geçmişiniz projeye özel olarak saklanır, ve panelin üstünden erişebildiğiniz
modeller arasında geçiş yapabilirsiniz.
Kurulum
Marketplace'ten
FisherSelim AI - VS Code Marketplace
adresinden "Install" butonuna basarak kurabilirsiniz.
.vsix dosyasından manuel kurulum
Paketi oluşturun (veya elinizde hazır bir .vsix varsa 2. adıma geçin):
cd vscode-extension
npm install
npm run package # fisherselim-ai-<surum>.vsix uretir
VS Code'da: Komut Paleti (Ctrl+Shift+P / Cmd+Shift+P) →
"Extensions: Install from VSIX..." → üretilen .vsix dosyasını seçin.
Alternatif olarak terminalden:
code --install-extension fisherselim-ai-<surum>.vsix
Giriş yapma (auth)
API anahtarınız VS Code SecretStorage'da tutulur — CLI'daki
~/.fisherselim/config.json gibi düz metin bir dosyaya asla yazılmaz.
- ai.fisherselim.com hesabınıza giriş yapın,
üst menüden Ayarlar > API Anahtarları'na gidin ve yeni bir anahtar
oluşturun (
fsk_... ile başlar). Anahtar sadece oluşturulduğu anda tam
olarak gösterilir — kopyalayıp güvenli bir yere kaydedin.
- VS Code'da Komut Paleti → "FisherSelim: Login".
- Açılan kutuya kopyaladığınız API anahtarını yapıştırın.
- Anahtar sunucuya karşı doğrulanır (ücretsiz
GET /api/agent/me ile);
başarılıysa bir bildirim görürsünüz.
- Çıkış yapmak için Komut Paleti → "FisherSelim: Logout".
Özellikler ve kullanım akışı
Ekran görüntüsü yerine ne olacağını adım adım anlatıyoruz:
1. Sohbet paneli
Activity bar'da (sol kenar çubuğu) bir "FisherSelim AI" simgesi
belirir. Tıkladığınızda "Sohbet" adlı bir panel açılır:
- Üst çubukta erişebildiğiniz modelleri listeleyen bir açılır menü
(planınızda olmayan modeller listede görünür ama seçilemez/gri
gösterilir), sohbetin başlığı, geçmiş sohbetleri açan bir 🕘 butonu
ve bir "Yeni sohbet" butonu vardır.
- Mesaj listesinde yanıtlar markdown olarak (başlık, liste, kalın/italik,
tablo) ve kod blokları syntax highlighting ile render edilir; her kod
bloğunun sağ üstünde "Kopyala" ve "Uygula" butonları bulunur
(bkz. aşağıdaki ilgili bölümler).
- Alttaki kutuya yazıp Enter'a basın (Shift+Enter yeni satır ekler) —
sorunuz bir "kullanıcı" balonu olarak görünür, yanıt token'lar geldikçe
gerçek zamanlı olarak bir "asistan" balonunda büyür. Yanıt bitince,
kullanılan kredi varsa altında küçük bir not olarak görünür.
Model seçiminiz ve sohbet geçmişiniz kalıcıdır — VS Code'u kapatıp
açtığınızda kaybolmaz (bkz. "Sohbet geçmişi" ve "Ayarlar" bölümleri).
2. Seçili kod hakkında soru — FisherSelim: Seçili kod hakkında sor
Editörde bir kod parçası seçin, ardından Komut Paleti'nden bu komutu
çalıştırın (veya seçiliyken sağ tık menüsünde de görünür). Açılan kutuya
ne sormak istediğinizi yazın (varsayılan: "Bu kodu açıkla ve olası
sorunları belirt."). Sohbet paneli otomatik açılır, sorunuz + seçtiğiniz
kod bağlam olarak eklenip gönderilir, yanıt panelde akar.
3. Dosyayı açıklat — FisherSelim: Bu dosyayı açıkla
Komut Paleti'nden çalıştırın; aktif dosyanın tamamı bağlam olarak alınır
("Bu dosyanın ne yaptığını özetle ve önemli noktalara dikkat çek." sorusuyla),
sohbet panelinde yanıt akar. Çok büyük dosyalarda içerik kısaltılır (mesaj
sonunda "kısaltıldı" notu görünür).
4. Hata metnini analiz ettir — FisherSelim: Bu hatayı analiz et
Sadece metin bazlı bir analizdir; VS Code'un debugger'ına (breakpoint,
adım adım çalıştırma vb.) hiç dokunulmaz. Komutu çalıştırdığınızda sırasıyla:
- Editörde seçili bir metin varsa (örneğin bir log dosyasındaki hata
satırları) onu kullanır,
- yoksa, entegre terminalde çalıştırdığınız son başarısız (çıkış kodu
0'dan farklı) komutun çıktısını (VS Code'un Terminal Shell Integration
özelliğiyle otomatik yakalanır) kullanır,
- hiçbiri yoksa, hata metnini yapıştırmanız için bir kutu açar.
Bulunan/yapıştırılan metin, "Bu hatayı analiz et: olası kök nedenini ve
çözümünü açıkla." sorusuyla sohbet paneline gönderilir.
5. Kod önerisini uygulama — kod bloğundaki "Uygula" butonu
Bir yanıttaki kod bloğunun yanındaki "Uygula" butonuna basınca, hedef
dosya şu sırayla belirlenir:
- Aktif bir editör açıksa VE ipucu yoksa — doğrudan ona uygulanır
(aşağıdaki 4-7. adımlar).
- Kod bloğunda bir dosya yolu ipucu varsa (
```ts src/foo.ts gibi
bir fence bilgisi, veya kodun ilk satırında // src/foo.ts benzeri bir
yorum) — o dosya hedeflenir: workspace'te yoksa (klasörleriyle
birlikte) açık onayla oluşturulur; varsa ama açık değilse önce
açılır, sonra 4-7. adımlara geçilir.
- Ne ipucu ne aktif editör varsa — bir giriş kutusuyla hedef dosya
yolu sorulur; hiçbir yol verilmezse eskisi gibi bir uyarı gösterilir.
- Editörde seçili metin varsa onun yerine, yoksa imleç konumuna
eklenecek hali hesaplanır (henüz dosyaya yazılmadan).
- VS Code'un yerleşik diff görünümüyle "önce/sonra" gösterilir.
- Bir bildirimde açıkça onayınız istenir ("Uygula" / "Vazgeç").
- Sadece "Uygula"ya basarsanız değişiklik gerçek dosyaya yazılır
(
workspace.applyEdit). Onaylamadan hiçbir zaman otomatik yazma olmaz.
Güvenlik: 2. adımdaki dosya yolu ipucu, workspace kökünün dışına asla
çıkamaz — mutlak bir yol veya .. ile kökten dışarı çıkan bir yol her
zaman reddedilir (CLI agent modunun dizin-sandbox mantığıyla aynı prensip).
Input kutusunun yanındaki 📎 butonu bir menü açar:
- Görsel ekle — dosya seçici açılır (aşağıdaki "Çoklu görsel" bölümüne bakın).
- Açık dosyayı ekle — aktif editördeki dosyanın tamamını bağlama ekler.
- Seçili kodu ekle — editörde seçili metni bağlama ekler.
- Hataları ekle — aktif dosyadaki VS Code tanılarını (hata/uyarı) ekler.
- Terminal çıktısını ekle — entegre terminalde çalıştırılan son
başarısız komutun çıktısını ekler (Quick Fix'teki ile aynı yakalama
mekanizması).
Eklenen her bağlam, sohbet kutusunun üstünde kaldırılabilir (×) bir çip
olarak görünür ve gönderdiğiniz mesajla birlikte bir kez kullanılıp
temizlenir. Gizli/hassas yollar (.env, anahtar/sertifika dosyaları,
node_modules/, .git/) hiçbir zaman bağlama eklenmez; içerik boyutu
fisherselim.maxContextLines ayarıyla sınırlıdır (aşan içerik kısaltılır).
fisherselim.includeActiveFile (varsayılan: açık) her mesajda aktif
dosyayı otomatik olarak bağlama ekler — "Açık dosyayı ekle" ile elle
eklediyseniz otomatik ekleme tekrarlanmaz.
6.a Çoklu görsel ekleme
📎 > Görsel ekle ile (veya kutuya doğrudan yapıştırarak) bir görsel
seçebilirsiniz — mesaj başına en fazla 4 görsel (sunucu limitiyle
aynı), her birinin kendi küçük önizlemesi ve kaldırma (×) düğmesi vardır.
Görseller mesajınızla birlikte gerçekten gönderilir. Backend
(POST /api/agent/complete), görselleri server/index.js'teki mevcut
vision pipeline'ıyla (yerel Ollama vision modeli, koparsa Groq bulut
fallback'i) Türkçe bir metin açıklamasına çevirip modele öyle iletir.
Her model görsel kabul etmez. Seçili model görsel desteklemiyorsa
(GET /api/agent/models'ın supportsVision:false döndürdüğü modeller),
önizlemenin altında somut bir uyarı görünür ve göndermeyi denerseniz backend
403 (VISION_NOT_SUPPORTED) ile reddeder; hata balonunda hangi modele
geçmeniz gerektiği açıkça söylenir (MODEL_LOCKED'daki alternatif model
önerisiyle aynı desen).
Faz 12: ücretsiz ollama-free artık görsel destekliyor — ama SADECE
yerel Ollama (ev makinesi) üzerinden. Yerel altyapı o an erişilemezse
ücretli Groq bulut fallback'ine asla düşmez; bunun yerine "ücretsiz
katmanın görsel altyapısı şu anda erişilemez durumda" diyen dürüst bir
mesaj görürsünüz — görsel destekli ücretli bir modele geçmeniz önerilir.
7. Sohbet geçmişi
Sohbetiniz workspace'e özel olarak saklanır (farklı projelerde ayrı
geçmişler tutulur — bkz. src/chatHistoryStore.ts'teki gerekçe).
"Yeni sohbet" butonu mevcut sohbeti geçmişe kaydedip sıfırdan başlar;
🕘 butonu artık panelin içinde başlık, tarih, sil ve yeniden adlandır
düğmeleriyle bir liste açar (Faz 17). Tek bir sohbeti silmek bir onay ister;
"Tümünü sil" ayrı ve iki adımlı onaylıdır (yanlışlıkla tüm geçmişi
kaybetmemeniz için). Komut Paleti'ndeki "FisherSelim: Sohbet geçmişini
göster" eski QuickPick görünümü de ayrıca durur.
7.a Mesaj eylemleri (Faz 17)
Her asistan yanıtının altında: Kopyala, Yeniden üret (aynı soruyu
tekrar sorar), 👍 Beğen / 👎 Beğenme (durumu kalıcıdır — hem yerelde
hem, giriş yapılmışsa, POST /api/agent/feedback ile sunucuda saklanır) ve
— tarayıcınızda/işletim sisteminizde Türkçe bir ses kuruluysa —
🔊 Dinle düğmeleri bulunur. Yanıt akarken sağ altta beliren Durdur
düğmesi isteği anında iptal eder; o ana kadar gelen kısmi cevap yine de
sohbet geçmişine kaydedilir.
7.b Tanı tabanlı Quick Fix (Faz 17)
Editörünüzde bir hata/uyarı (VS Code "tanı"sı) varsa, ampul menüsünde
"FisherSelim ile düzelt" Quick Fix'i belirir — tıklayınca tanının
satırı + mesajı + çevresindeki kod sohbete gönderilir, düzeltme her zaman
diff onayından geçer (bkz. yukarıdaki "Uygula" akışı, DEĞİŞMEDİ). Aktif
dosya .env, *.pem, *.key, SSH anahtarları, node_modules/, .git/
gibi gizli/gürültü bir yol ise bağlam hiçbir zaman gönderilmez (CLI
agent modunun secret denylist mantığıyla aynı, bkz. src/contextSecrets.ts).
8. Durum çubuğu
VS Code'un durum çubuğunda (altta) "FisherSelim: <plan adınız>"
görünür (giriş yapılmamışsa "giriş yapılmadı" — tıklayınca giriş akışını
başlatır). Giriş yapılmışken tıklayınca plan adınızı, kalan kredinizi ve
aylık hakkınızı gösteren bir bildirim açılır (Komut Paleti'nden
"FisherSelim: Bakiyeyi göster" ile de çalıştırılabilir) — CLI'nin
fisherselim balance komutuyla aynı GET /api/agent/balance
mantığını kullanır.
Ayarlar
VS Code Ayarları'nda FisherSelim AI başlığı altında:
fisherselim.baseUrl — API sunucu adresi (varsayılan: https://ai.fisherselim.com).
Yalnızca https kabul edilir (yerel geliştirme için http sadece
localhost/127.0.0.1'de çalışır). Adresi değiştirirseniz, API
anahtarınızın artık farklı bir sunucuya gideceğini belirten bir uyarı
görürsünüz.
fisherselim.model — sohbet panelinde henüz bir model seçmediğinizde
kullanılacak varsayılan model (varsayılan: ollama-free; seçenekler:
ollama-free, llama-fast, ds-flash, lufer, deepseek, gpt5,
claude, gemini, claude-opus). Panelin üstündeki açılır menüden
seçtiğiniz model bunu geçersiz kılar ve ayrıca hatırlanır (kişisel
tercihiniz olarak, tüm workspace'ler arasında geçerli).
fisherselim.responseLanguage — modelin yanıt vermesi istenen dil:
auto (varsayılan — ek talimat eklenmez), tr veya en.
fisherselim.includeActiveFile — her mesajda aktif dosyayı otomatik
olarak bağlama ekler (varsayılan: açık). Bkz. "Bağlam ekleme menüsü".
fisherselim.maxContextLines — bağlama eklenen herhangi bir içeriğin
(aktif dosya, seçili kod, hatalar, terminal çıktısı) üst satır sınırı
(varsayılan: 300, aralık: 20–2000).
fisherselim.autoOpenDiff — kod "Uygula" edildiğinde önce bir diff
önizlemesi açılsın mı (varsayılan: açık). Kapalı olsa bile,
dosyaya yazmadan önce her zaman bir onay isteği gösterilir.
fisherselim.chatFontSize — sohbet panelindeki mesaj yazı tipi boyutu,
piksel (varsayılan: 13, aralık: 11–20). Değişiklik panel yeniden
yüklenmeden uygulanır.
Klavye kısayolları
Ctrl+Alt+N / Cmd+Alt+N — Yeni sohbet
Ctrl+Alt+K / Cmd+Alt+K — Seçili kod hakkında sor (seçili metin varken)
VS Code'un "Keyboard Shortcuts" (Ctrl+K Ctrl+S) ekranından "FisherSelim"
araması yaparak bunları kendi tercihinize göre değiştirebilirsiniz.
Geliştirme
cd vscode-extension
npm install
npm run typecheck
npm run build # dist/extension.js (esbuild)
npm run package # dist + vsce package -> .vsix
F5 ile ("Run Extension") VS Code'da bir "Extension Development Host"
penceresi açıp canlı test edebilirsiniz — bkz. .vscode/launch.json.
Daha fazla ayrıntı için ../packages/fisherselim-client/README.md ve
repo kökündeki CONTRIBUTING.md.
Bundle boyutu (Faz 6 — markdown/highlight)
dist/webview.js, markdown render (marked) + syntax highlighting
(highlight.js/lib/core + 19 dil) + tüm panel mantığını içerir:
production (minified) derlemede ~150 KB (~48 KB gzip). Bu, shiki
(TextMate grammar + WASM oniguruma tabanlı, tipik olarak 1-3 MB+) yerine
highlight.js seçilmesinin doğrudan sonucu — bkz. Faz 6 PR açıklaması.
Marketplace durumu
Bu eklenti Marketplace'te
yayında. Yeni bir sürüm yayınlamak (vsce publish, Personal Access Token
gerektirir) elle yapılan, otomatikleştirilmemiş bir adımdır.