Cordis Köprüsü
Cordis köprüsü, DeepSeek Harness (DSH) motorunu Libre WebUI backend’ine yerleştirir. DSH, Libre WebUI tarafından barındırılan Cordis çalışma zamanında bir eklenti ağacı olarak çalışır. Yetenekler doğrudan içe aktarılan modüller yerine Cordis servisleri olarak sunulur.
Köprü varsayılan olarak kapalıdır. Operatör etkinleştirene kadar bu sayfadaki işlemler gerçekleşmez. Cordis Yapılandırması bölümüne bakın.
Doğrudan entegrasyon yerine neden köprü
DSH paketlerini Libre WebUI servislerinden doğrudan içe aktarmak kodu kısaltırdı, ancak motoru derleme zamanı bağımlılığına dönüştürürdü. Model adaptörünü veya ajan döngüsünü değiştirmek ya da motoru kaldırmak, Libre WebUI kodunu değiştirip yeniden dağıtmayı gerektirirdi.
Köprü bu bağımlılığı tersine çevirir. Libre WebUI tek bir soyut sözleşmeye bağlıdır; onu hangi bileşenin sağlayacağını Cordis bileşim belgesi belirler:
- Yeniden derlemeden hedef değiştirme. Bileşim bir YAML dosyasıdır; başka sağlayıcıya geçmek ayar değişikliğidir.
- Yetenekleri yapılandırma. Her yetenek bir Loader satırıdır. Operatörün bileşim değişiklikleri hostun sonraki başlangıcında uygulanır.
- Eksiksiz kaldırma. Motorun eklediği servis, dinleyici ve effect’ler kök fiber’a aittir. Onu temizlemek hepsini geri alır; motoru Libre WebUI’yi yeniden başlatmadan durdurabilirsiniz.
Katmanlar
Somut DSH bağımlılıkları backend/src/cordis/dsh/ içinde kalır. Rotalar ve uygulama servisleri köprü sözleşmelerini kullanır. Work sürücüsü ayrı bir bellek içi bileşime sahiptir ve host dosya sistemi eklentilerini hiçbir zaman bağlamaz.
Sözleşmeler
Sözleşme backend/src/cordis/contracts.ts içindedir. Bilerek dardır: yalnızca Libre WebUI API’sinin ihtiyaç duyduğu verileri, motorun terimlerine bağlı olmadan ifade eder.
| Sözleşme | Amaç |
|---|---|
DshEngine.status() | Motor servislerinin yaşam döngüsü durumu (pending / ready / failed) |
DshEngine.modelConfiguration() | Çalışan bileşimin model ve sağlayıcı varsayılanları |
DshEngine.listSessions() | En yeniden başlayarak oturum özetleri |
DshEngine.getSession(id) | Bir oturum ve yansıtılmış mesajları |
DshEngine.createSession(opts) | Oturum kimliği ve çalışma dizini ayırma |
DshEngine.updateSessionSettings(id, settings) | Boştayken gerçek model seçimini ve yerel dosya izin modunu kaydetme |
DshEngine.decideApproval(id, approvalId, decision) | İlgili oturumun bekleyen bir yerel araç onayını çözme |
DshEngine.deleteSession(id) | Oturumu bitirme ve ajanı temizleme |
DshEngine.listAgents() | Kök veya alt ajan olarak işaretlenmiş canlı ajanlar |
DshEngine.listTools() | Motorun modeller için kaydettiği araçlar |
DshEngine.sendMessage(id, txt) | Tur başlatıp akış tanıtıcısı döndürme |
DshEngine.cancel(id) | Oturumun devam eden turunu iptal etme |
Sözleşme libreDshEngine adlı Cordis servisi olarak yayımlanır. Tüketici onu ctx.get('libreDshEngine') ile okur; köprü modülünü içe aktarmaz.
EngineStreamChunk, text, reasoning, tool-call, tool-result, approval-request, approval-decision, error ve done taşır. Canlı kareler ait oldukları ajan ve oturuma yönlendirilir; karşılık gelen kalıcı asistan mesajı yeniden gönderilmez. sendMessage tanıtıcısının subscribe metodu, önceden üretilen verileri tekrar verir. Böylece turun başlaması ile HTTP dinleyicisinin bağlanması arasında gelen ilk token kaybolmaz.
Sıralama: bir sohbet turu
Tur, isteğin ardından sunucudan istemciye giden tek bir sıra olduğundan NDJSON kullanılır. POST içinde kalması ikinci el sıkışmayı, bileti ve yeniden bağlanma protokolünü gereksiz kılar; tüm tur tek bir kimliği doğrulanmış isteğe ait olur.
DONE ve PENDING
Cordis, bildirilen servisler hazır olduğunda eklentiyi etkinleştirir. Bu yüzden satır henüz çalışmadığı durumlarda bekleyebilir. Aşağıdaki iki kavramı karıştırmak, sessiz kalan motorların yaygın nedenidir.
Loader girdisinin durumu. Loader her satırı PENDING → LOADING → ACTIVE veya FAILED olarak izler. Bildirilmiş servisler eksikse satır hata vermeden süresiz bekler. Eksik bileşimin başlayan ama hiçbir hizmet sunmayan motor üretmesinin nedeni budur.
Servis kullanılabilirliği. Host beklenen her servisi şöyle bildirir:
| Durum | Anlam | Neden |
|---|---|---|
pending | Bağlama kaydedilmemiş | Sağlayan satır etkinleşmemiş veya kapalı |
ready | Kayıtlı ve kullanılabilir | Sağlayan satır etkinleşmiş |
failed | Bildirilmiş ancak kullanılamıyor | Açıklama detail dizesinde bildirilir |
host.status() bütün beklenen servisleri, kullanılabilirliklerini ve eksik zorunlu servisleri listeler. GET /api/cordis/health aynı bilgiyi sunar. Zorunlu servisi olmayan bileşim, boş liste döndüren bir motor yayımlamak yerine başlangıçta hata verir.
İki bağımlılık zincirine özellikle dikkat edin:
dsh-tools,systemPromptolmadan başlayamaz.dsh-agent-loop;agents,sessions,llm,tools,systemPromptvesessionProjectionsservislerinin hepsini gerektirir.
Bunlardan biri eksikse oturum deposu çalışabilir, ancak hiçbir mesaja yanıt verilmez.
Sağlayıcı yapılandırması
Hazır libre-webui-llm-adapter satırı, Libre WebUI’de yapılandırılan model sağlayıcılarını sunar. Motor sayfasındaki seçici, bu satırı değiştirmeden oturum için sağlayıcı modeli seçer.
Bileşimdeki eklenti değişiklikleri sonraki host başlangıcında uygulanır. Backend’i yeniden başlatın veya yönetici kontrolü kilitli değilse Cordis’i kapatıp açın. Kalıcı oturumlar depoda kalır ve mevcut bileşim üzerinden sürdürülür.
Güvenilir entegrasyon kodu Cordis Loader yaşam döngüsü API’lerini doğrudan kullanabilir. Köprü, adaptör değiştirme endpoint’i sunmaz ve değişim başarısız olunca önceki adaptörü otomatik geri yüklemez.
Geri alma
Hostun kök fiber’ını temizlemek motorun kurduğu her şeyi kaldırır. Garanti tek bir sahiplik ilişkisine dayanır:
- Servisler eklentilerce kaydedilir, dolayısıyla fiber ile birlikte kaldırılır.
session/eventabonelikleri köprünün yapıcısı içinde kaydedilir ve köprü satırının fiber’ına aittir.- Ajan tanıtıcılarını köprü izler ve temizleme effect’inde serbest bırakır.
- Host, tüm satırlara sahip kök bağlamı temizler.
stopCordisHost() idempotenttir ve backend kapanışına bağlanmıştır. Motorun zamanlayıcıları ve dosya tanıtıcıları süreç çıkışına bırakılmadan serbest bırakılır.
Oturum kimliği ve kalıcılık
Motor sayfası oluşturma sırasında opak oturum kimliği ayırır. Kalıcılık açıksa başlık hemen kaydedilir; boş oturum bile yeniden başlatmadan sonra kalır. Köprü kayıtlı ve canlı oturumları birlikte listeler, günlükleri DSH’nin doğrulanmış API’siyle okur ve sonraki turda aynı kimlikle ajanı sürdürür. Yeni kullanıcı mesajları DSH’nin kimlikli mesaj yapıcısını kullanır.
Oturum silinince önce ajan iptal edilip temizlenir, ardından dosyası kaldırılır. Yerel JSONL silme adaptörü depo ve oturum yollarını doğrular, sembolik bağlantıları reddeder. Silme desteklemeyen özel depolar, veri silinmiş gibi davranmak yerine hata döndürür.
İptal, yerel ajana, model isteğine ve araç çalışmasına ulaşır. İstemci bağlantısının kopması turu iptal eder; tamamlanan mesajlar okunabilir kalır. Akış tekrarının tamponu sınırlıdır ve okuyucu bağlanmadan önce gelen hızlı yanıtı korur.
Host motoru tek replikalı solo özelliğidir. Team dağıtımları onun yerel JSONL çalışma zamanını bağlayamaz. Sandbox içindeki Work, mevcut SQL görev, çalıştırma, mesaj, onay ve olay depolarını kullanır.
HTTP arayüzü
| Metot | Yol | Amaç |
|---|---|---|
GET | /api/cordis/health | Köprü durumu; kimlik doğrulaması gerekmez |
GET | /api/cordis/sessions | Oturumları listele |
POST | /api/cordis/sessions | Oturum oluştur |
GET | /api/cordis/sessions/:id | Oturumu mesajlarıyla oku |
DELETE | /api/cordis/sessions/:id | Oturumu bitir |
POST | /api/cordis/sessions/:id/messages | Mesaj gönder, NDJSON akışı al |
POST | /api/cordis/sessions/:id/cancel | Devam eden turu iptal et |
GET | /api/cordis/agents | Canlı ajanları listele |
GET | /api/cordis/tools | Kayıtlı araçları listele |
/health dışındaki her rota kimliği doğrulanmış yönetici oturumu gerektirir. Köprü hizmet veremiyorken 503 döner ve code, CORDIS_DISABLED, CORDIS_STARTING veya CORDIS_UNAVAILABLE olur.

Sayfa frontend/src/pages/CordisPage.tsx dosyasındadır ve yan menüden /cordis yoluyla açılır. Oturumları ve araçları listeler, oturum oluşturur ve turu döküme aktarır. Köprü kapalıysa veya başlamıyorsa boş liste yerine nedeni göstererek oturum olmaması ile motor olmamasını ayırır.
Tarayıcı istemcisi frontend/src/utils/api/cordisApi.ts dosyasındadır. Yalnızca bu arayüzle konuşur; backend türü veya @deepseek-ai/* paketi içe aktarmaz. Böylece motor değişimi frontend’i etkilemez. Tur sendMessage(sessionId, text, { onChunk }) ile okunur; istemci satırla ayrılan JSON’u kendisi ayrıştırır ve ağ okumaları arasında bölünen parçaları destekler.
Motor sohbet kontrolleri
Motor sayfası Markdown, tablo ve sözdizimi vurgulu kod blokları gösterir; yanıtlar ve kod için kopyalama kontrolleri sunar. Sistem istemleri ve eklenen çalışma zamanı bağlamı kapalı Oturum bağlamı bölümündedir, kullanıcı mesajı gibi görünmez. Açık akıl yürütme ve araç etkinliği ayrı bölümlerdedir; yeniden yüklemeden sonra araç sonuçları doğru işlemle eşleşir.
Yazma alanında gerçek bir sağlayıcı modeli seçin. Seçici, giriş yapmış yöneticinin kullanılabilir yerel ve eklenti modellerini sağlayıcı kimliğiyle gösterir. Chat persona ve ajan seçimleri model kimliği değildir; talimatları motor sohbetine eklenmez. Eski hatalı persona-model başlıkları varsayılan ipucu olarak yok sayılır, kayıtlı günlük değiştirilmez.
Her oturumun Salt okunur veya Çalışma alanına yazma ayarı vardır. DSH dosya politikası ve köprünün kanonik alan sınırı bunu uygular. Yazma alanı kapsamı gösterir. Ayarlar yerel oturum olayları olarak saklanıp yeniden başlatmadan sonra kalır; tur sürerken değişiklik reddedilir.
Yerel yetki yükseltme isteği işlemin yanında Bir kez izin ver / Reddet kartı olarak görünür. Onay yalnızca o isteğe aittir, kalıcı izin modunu değiştirmez. Eski ya da iptal edilmiş istekler onaylanamaz; arayüzsüz Chat çağrıları gösteremediği soruları reddeder. Köprü sınırsız host erişimi sunmaz.
Ek yönetici endpoint’leri şunlardır:
| Metot | Yol | Amaç |
|---|---|---|
GET | /api/cordis/models | Kullanılabilir sağlayıcı modelleri ve mevcut gerçek varsayılan model |
PATCH | /api/cordis/sessions/:id/settings | Oturumun modelini ve/veya izin modunu ayarla |
POST | /api/cordis/sessions/:id/approvals/:approvalId | Bekleyen bir istek için allowed-once veya rejected kararı ver |
Motoru Chat içinde kullanma
Erişim ve ilkeler → CLI ajan modelleri ile Cordis Motoru seçeneklerini açın. Yöneticiler Chat içinde DeepSeek Harness seçebilir. Her istek, yalnızca o Chat isteğinin dökümünü taşıyan yeni geçici motor oturumu alır. Normal Chat veritabanı yetkili kaynak olarak kalır; ilgisiz sohbetler, çatallar ve yeniden denemeler görünmez motor geçmişini paylaşamaz. Geçici günlük tamamlanma ya da iptalden sonra kaldırılır ve motor sayfasında görünmez.
Standart sağlayıcı bileşimi Ajanlar grubunda DeepSeek Harness · model (sağlayıcı) seçenekleri de sunar. Kayıtlı kimlikler motor sayfasındaki nitelikli rotayı sarar: dsh:lwui:ollama:<model> veya dsh:lwui:plugin:<plugin>:<model>; her bileşen yüzde kodlaması kullanır. İsteğe bağlı yerel DSH bağlantısı, bağlı örneğin canlı kataloğundan dsh:native:<provider>:<model> ekler ve onun ayarlarıyla kimlik bilgilerini yeniden kullanır. Apache-2.0 lisanslı bağımsız paketi libre-webui/dsh-native-provider üzerinden kurun veya Libre WebUI dağıtımından bundle hazırlayın. İkisinin paket adı @libre-webui/dsh-native-provider olup anahtarlar DSH’de kalır. Aynı Unix hostu ve OS hesabında özel Unix soketi gerekir; aynı hesabı paylaşan uygulamalar birbirinden yalıtılmaz. Bağlantı yalnızca model çıkarımı sunar, yerel ajan oturumları veya araç yürütme sunmaz. Kurulum, profil yeniden başlatma, yükseltme ve kaldırma için yapılandırma rehberine bakın. Eksik bağlantı ya da model, sağlayıcı değiştirilmeden hataya yol açar. Yerel çağrılar Sağlayıcı Kullanımı içinde model, bildirilen token, gecikme ve sonuçla gösterilir. Temel dsh profili çalışan bileşimin varsayılanını kullanır. Özel adaptörler bu temel profili sunar, desteklemedikleri Libre WebUI sağlayıcı geçersiz kılmalarını listelemez.
Başlıklar ve düşünme özetleri DSH seçimini temel sağlayıcıya çözümler; araç veya ajan oturumu olmadan doğrudan metin ister. Temel profil, katalogdan tahmin etmek yerine köprü satırı geçersiz kılmaları dahil çalışan motorun varsayılanlarını okur. Özel adaptörlerde bu özellikler için açık bir Ollama veya eklenti görev modeli gerekir. Seçilen sağlayıcı kullanılamıyorsa normal hata veya yerel başlık önizlemesi oluşur; başka sağlayıcıya istek gönderilmez.
İstek, kimliği doğrulanmış yöneticinin sağlayıcı ayarları ve kimlik bilgileriyle çalışır. Başka yöneticinin bilgileri örtük olarak seçilmez. Yapılandırılmış Cordis çalışma alanı varsayılan kalır; Chat bunu sunucu kullanıcısının ev diziniyle değiştirmez.
Sandbox içinde Work
Cordis açıkken Work ayrı bir Motor kontrolüyle Libre WebUI ve DeepSeek Harness sunar. Model seçici normal adları ve sağlayıcı kimliğini korur. LWUI sağlayıcıları için DSH seçimi dsh:<model> olarak saklanır. Yerel DSH seçimi providerType: dsh, tam sağlayıcı kimliği ve ham model kimliğini saklar. Olağan araç yeteneği ve erişim kontrolleri sürer; yerel kimlik bilgileri ayrıca etkin yönetici gerektirir.
Her çalıştırma yalıtılmış, bellek içi bir DSH ajan döngüsü oluşturur. Adaptör Work dökümünü, sağlayıcı metadatasını, görüntüleri ve araç şemalarını alır. Araç gövdeleri yalnızca Work sonuçlarını bekler; host dosyalarını okuyamaz veya host süreçleri başlatamaz.
Argüman doğrulama, onay isteme, çalışma alanında araç yürütme, sonuç ve sağlayıcı tekrar durumunu SQL’e yazma, bütçe uygulama ve olay yayımlama Work’ün sorumluluğunda kalır. Reddedilen araç normal ret sonucunu üretir. İptal DSH’yi temizler ve Work’ün mevcut konteyner temizliğini izler. Worker kurtarıldığında yeni sürücü geri yüklenen Work bağlamını alır, tamamlanan araç etkilerini tekrarlamaz.
Work entegrasyonu host motor bileşimi veya JSONL oturum deposu gerektirmez. Team’in paylaşılan kalıcılık şartları dahil mevcut Docker/Kubernetes çalışma zamanı ve dağıtım kurallarını izler.
Güvenlik sınırı
Motor sayfası ve host tarafındaki Chat ajanı yalnızca yöneticilere açıktır. Sistem istemleri dahil motor oturumları kullanıcıya özel alan değil, paylaşılan yönetici konsoludur. Normal hesaplar API üzerinden okuyamaz, oluşturamaz, değiştiremez veya iptal edemez.
Hazır dosya sistemi araçları, sembolik bağlantı çözümlemesi dahil kanonik hedeflerle okuma ve yazmayı yapılandırılmış alan içinde tutar. Oturum çalışma dizini geçersiz kılmaları da bu alanın içinde olmalıdır. Yerel DSH değişiklik politikası ve tek seferlik onaylar geçerlidir. Operatörün eklediği bileşim eklentileri güvenilir sunucu kodudur ve ek yetenek verebilir. Motor onayları Work onay ve konteyner akışından ayrıdır.
Work’ün DSH sürücüsü ayrıdır: host dosya sistemi, shell veya kalıcılık eklentisi bağlamaz; yalnızca mevcut Work yetkilendirmesi ve sandbox üzerinden çalışır. Uzak sağlayıcılar isteğe bağlı kalır ve seçilen hesabın yapılandırılmış rotasını kullanır.