feat: admin panelini ve kurulum dokumanlarini genislet

This commit is contained in:
2026-03-22 04:46:02 +03:00
parent 5f4c19a18d
commit 37da564a5f
14 changed files with 728 additions and 49 deletions

View File

@@ -5,7 +5,7 @@
WiseClaw uses a single FastAPI process with modular tool adapters:
- `telegram`: inbound/outbound bot handling and whitelist checks
- `llm`: Ollama client and simple tool-routing planner
- `llm`: LM Studio/OpenAI-compatible client and simple tool-routing planner
- `tools`: search, notes, files, terminal, and fetch tools
- `memory`: SQLite-backed short-term and long-term state
- `admin`: REST API for settings, logs, users, and health
@@ -24,7 +24,6 @@ WiseClaw uses a single FastAPI process with modular tool adapters:
1. Add SQLAlchemy models and Alembic migrations.
2. Replace placeholder services with real SQLite persistence.
3. Wire Telegram webhook or polling loop.
4. Add Ollama-driven tool calling.
4. Add LM Studio-driven tool calling.
5. Persist secrets in macOS Keychain.
6. Build audit views and approval flows in the admin panel.

View File

@@ -0,0 +1,83 @@
---
date: 2026-03-21
topic: model-provider-switch
---
# Model Provider Switch
## What We're Building
WiseClaw admin paneline global bir model sağlayıcı seçimi ekliyoruz. Yönetici ister mevcut yerel LM Studio akışını aktif edecek, ister z.ai sağlayıcısına geçip API key ile `glm-4.7` veya `glm-5` modellerini kullanacak.
Bu seçim tüm yeni istekler için ortak runtime ayarı olacak. Yani Telegram, admin testleri ve backend orkestrasyonu seçili sağlayıcıya göre aynı LLM istemcisini kullanacak.
## Why This Approach
En sade ve güvenli çözüm global provider seçimi. Per-user ya da per-chat seçim şu aşamada gereksiz karmaşıklık getirir; secret yönetimi, UI, audit ve hata ayıklama zorlaşır.
z.ai tarafı OpenAI-uyumlu API sunduğu için mevcut istemci mimarisi çok büyük kırılım olmadan genişletilebilir. Bu da LM Studio ile z.ai arasında ortak bir soyutlama kurmayı mantıklı hale getiriyor.
## Approaches Considered
### Approach A: Tek Global Provider Ayarı
Admin panelde provider seçilir, sadece ilgili alanlar görünür, backend seçili provider'a göre çağrı yapar.
Pros:
- En basit kullanıcı deneyimi
- Backend davranışı öngörülebilir
- Secret ve runtime yönetimi kolay
Cons:
- Aynı anda iki farklı provider kullanılamaz
- Deneysel karşılaştırmalar için manuel geçiş gerekir
Best when: Ürün tek bir aktif model hattı ile çalışacaksa
### Approach B: Global Provider + Manual Override Alanı
Global seçim korunur ama bazı akışlarda provider/model override edilebilir.
Pros:
- Daha esnek
- Test ve karşılaştırma kolaylaşır
Cons:
- UI ve backend karmaşıklığı artar
- Hangi isteğin hangi modelle çalıştığı daha az net olur
Best when: Kısa vadede A/B model denemesi yapılacaksa
### Approach C: Ayrı Provider Sekmeleri ve Bağımsız Konfigürasyonlar
Hem local hem z.ai ayarları hep görünür, ama aktif flag ayrı tutulur.
Pros:
- Tüm ayarlar tek ekranda görünür
- Geçişler hızlı olur
Cons:
- UI kalabalıklaşır
- İlk sürüm için gereğinden fazla yapı
Best when: Sık sağlayıcı değişimi bekleniyorsa
## Recommendation
Approach A.
İlk sürüm için en doğru yol bu. Admin panelde:
- `Model Provider`: `local` / `zai`
- `local` seçiliyken: base URL + local model
- `zai` seçiliyken: API key + model dropdown (`glm-4.7`, `glm-5`)
Backend tarafında ortak bir LLM gateway oluşturulmalı. Seçili provider'a göre:
- Local: mevcut LM Studio/OpenAI-compatible endpoint
- Z.AI: z.ai OpenAI-compatible endpoint + bearer/api key
## Key Decisions
- Provider seçimi global olacak: sistem davranışı tek bir aktif modele bağlı kalacak.
- z.ai API key secret olarak saklanacak: normal runtime settings içine düz yazı olarak girmeyecek.
- z.ai model listesi ilk aşamada sabit olacak: `glm-4.7` ve `glm-5`.
- UI conditional olacak: sadece seçili provider'ın alanları gösterilecek.
- Backend provider-aware olacak: mevcut `ollama_base_url/default_model` yaklaşımı daha genel `provider/base_url/model` yapısına genişletilecek.
## Open Questions
- z.ai için sabit bir base URL kullanıp UI'da göstermeyelim mi, yoksa readonly/default bir alan olarak mı gösterelim?
- `glm-4.7` ve `glm-5` dışında gelecekte serbest model adı girişi de desteklenecek mi?
## Next Steps
- `/workflows:plan` seviyesinde implementasyon planına geç

View File

@@ -0,0 +1,33 @@
---
date: 2026-03-22
topic: telegram-onboarding
---
# Telegram Onboarding
## What We're Building
WiseClaw'a Telegram üzerinden `/tanışalım` komutu ile başlayan, 12 soruluk kalıcı bir onboarding sohbeti ekliyoruz. Bu akış kullanıcının adı, kullanım amacı, ton tercihi, dil tercihi, yanıt uzunluğu, çalışma biçimi ve sınırları gibi bilgileri toplar.
Toplanan veriler geçici hafızada değil, SQLite içinde yapılandırılmış bir kullanıcı profili olarak saklanır. Böylece sunucu yeniden başlasa bile WiseClaw aynı kullanıcıyla aynı üslupta konuşmaya devam eder.
## Why This Approach
Alternatif olarak cevapları yalnızca genel memory tablosuna yazmak mümkündü, ancak bu yaklaşım dağınık, kırılgan ve güncellemesi zor olurdu. Ayrı profil + onboarding state modeli daha güvenilir, sorgulanabilir ve kişiselleştirme için daha uygundur.
## Key Decisions
- `/tanışalım` Telegram komutu olacak: onboarding yalnızca istek üzerine veya ilk temas senaryosunda başlatılacak.
- 12 soru tek tek sorulacak: uzun form yerine sohbet hissi korunacak.
- Her cevap anında kaydedilecek: yarıda kalırsa kaldığı yerden devam edilebilecek.
- Veriler ayrı kullanıcı profili tablosunda tutulacak: kalıcı kişiselleştirme için.
- Prompt'a structured profile enjekte edilecek: ton, dil, uzunluk ve çalışma tercihi her cevapta uygulanacak.
- Kısa profil özeti ayrıca memory'ye yazılabilecek: ama asıl kaynak structured profile olacak.
## Open Questions
- İlk mesajda onboarding otomatik mi tetiklensin, yoksa sadece `/tanışalım` ile mi başlasın?
- Admin panelde profil düzenleme ilk sürüme dahil edilsin mi, yoksa yalnızca Telegram komutları yeterli mi?
## Next Steps
- Veri modelini ve onboarding state yapısını ekle
- Telegram command akışını oluştur
- Orchestrator içine onboarding interception ekle
- Prompt kişiselleştirme katmanını bağla
- `/profilim`, `/tercihlerim`, `/tanışalım_sifirla` yardımcı komutlarını ekle