@appaflytech/zeyrek-ai-mcp 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1589,25 +1589,25 @@ export const componentKnowledge = {
1589
1589
  }
1590
1590
  },
1591
1591
  'language-selector': {
1592
- summary: 'Son kullanıcının sayfa dilini değiştirdiği açılır liste; projenin aktif dillerini kendi ana dil adlarıyla listeler.',
1592
+ summary: 'Son kullanıcının sayfa dilini değiştirdiği açılır liste; projenin aktif dillerini kendi ana dil adlarıyla listeler. Görsel olarak dropdown ile aynı kontroldür (ortak Select, aynı boy/tema jetonları).',
1593
1593
  behavior: [
1594
- "change olayında runtime machine.setLanguage(value) çağırır: seçim localStorage'a (zeyrek:{appSlug}:lang) yazılır ve çeviri bağlı bütün prop'lar SAYFA YENİLENMEDEN yeniden çözülür.",
1595
- 'Projede dil tanımlı değilse liste boş çizilir — önce proje dillerini (Translations paneli) kur. Bu durumda çizilen tek satır placeholder satırıdır; placeholder varsayılan olarak BOŞ olduğu için metni yazılmadıkça kutu yine boş görünür.',
1594
+ "change olayında runtime machine.setLanguage(value) çağırır: seçim localStorage'a (zeyrek:{appSlug}:lang) yazılır ve çeviri bağlı bütün prop'lar SAYFA YENİLENMEDEN yeniden çözülür. Olay yükü akışa params kanalından da iner, yani event.data.value akışta okunabilir.",
1595
+ 'Projede dil tanımlı değilse liste boş çizilir (ortak Select’in boş durumu) — önce proje dillerini (Translations paneli) kur. Bu durumda kutuda yalnız placeholder görünür; placeholder varsayılan olarak BOŞ olduğu için metni yazılmadıkça kutu yine boş görünür.',
1596
1596
  'mount olayında self.value BOŞTUR (ölçüldü, 2026-09-18): geçerli dili render katmanı her turda prop olarak enjekte ediyor ama düğümün prop kaydına yazmıyor; düğüme yazan tek şey change olayının yüküdür. Yani "açılışta dile göre dallan" kurulamıyor (docs/issues.md ARC-098), dili okuyan akış change olayına bağlanmalı.',
1597
- 'TASARIM KANVASINDA liste BOŞTUR: dil kümesini ve seçili dili yalnız render katmanı enjekte ediyor, kanvas düğümü enjekte etmiyor. Yani displayMode/size/placeholder etkisi kanvasta değil ÖNİZLEMEDE ölçülür; kanvasta boş görünen liste bir hata değildir.',
1597
+ 'Listeyi KANVAS da gösterir: tasarım anında projenin dilleri ve başlıktaki içerik dili enjekte edilir, yani bileşen tasarımcıda da dolu görünür ve displayMode/size/placeholder etkisi kanvasta ölçülür. Kanvasta liste AÇILMAZ (çift tıklama özellik panelini açsın diye); seçimi önizlemede dene.',
1598
1598
  'Listeyi ve seçili değeri render katmanı enjekte eder; ikisi de panelden ya da akıştan YAZILAMAZ. value prop gizlidir ve tek yönlüdür: change onu düğüme geri yazar, akış self.value ile okur. Dili akıştan değiştirmenin yolu bu prop DEĞİLDİR.',
1599
1599
  "Dil kümesi KAPALI DEĞİLDİR: projeye eklenen her ISO 639-1 kodu listede çıkar (project_update languages). Komponent kütüphanesinin kendi arayüz metni (sayfalama, filtre operatörleri, boş durumlar) yalnız tr/en sözlüğü taşır ve sözlüğü olmayan dilde İNGİLİZCEYE düşer — sayfa içeriği ve sayı/tarih biçimi ise seçilen dilin kendisini kullanır. Yani 'de' seçili bir uygulamada tablo sayfalaması İngilizce, sayılar Almanca ayraçla çıkar; bu bilinçlidir.",
1600
- "Sekme başlığı (page.browserTitleKey) bu değişimi İZLEMEZ: açılıştaki dilde kalır, sayfa yeniden yüklenince düzelir (platform_guide('translation')).",
1600
+ "Sekme başlığı (page.browserTitleKey) bu değişimi İZLER: dil değişince başlık da yeni dilde çözülür (ölçüldü 2026-09-11); anahtarın o dilde değeri yoksa projenin varsayılan diline düşer.",
1601
1601
  'Seçim UYGULAMA başınadır, proje ya da sayfa başına değil: anahtar uygulamanın slug\'ını taşır (zeyrek:{appSlug}:lang), yani aynı tarayıcıda açılan başka bir uygulama kendi değerini tutar ama o uygulamanın bütün sayfaları ve önizlemeleri tek değeri paylaşır. Sayfaya birden fazla koymanın anlamı yok.'
1602
1602
  ],
1603
1603
  propNotes: {
1604
- label: 'Listenin solunda duran etiket; girdiye <label for> ile bağlıdır, ekran okuyucunun okuduğu ad odur. Boşken (yalnız boşluk yazmak da boş sayılır) erişilebilir ad placeholder metnine, o da boşsa Language sabitine düşer.',
1604
+ label: 'Etiket; geniş kutuda (280px üstü, kap sorgusu) listenin SOLUNDA, dar kutuda ÜSTÜNDE durur ve kontrole <label for> ile bağlıdır. Boşken (yalnız boşluk yazmak da boş sayılır) erişilebilir ad placeholder metnine, o da boşsa Language sabitine düşer.',
1605
1605
  value: 'Gizli; runtime YAZAR (durum kanalı). Seçilen dil kodu. AI bunu set etmez — panelden ya da akıştan yazılan değer render katmanının enjeksiyonuyla ezilir.',
1606
- placeholder: 'Yalnız seçili dil listede YOKKEN çizilen, seçilemez ilk satır. Varsayılanı boştur: dil kurulmamış projede kutunun boş görünmemesi için metni SEN yazacaksın.',
1606
+ placeholder: 'Yalnız seçili dil listede YOKKEN kutuda görünen yer tutucu metin. Varsayılanı boştur: dil kurulmamış projede kutunun boş görünmemesi için metni SEN yazacaksın.',
1607
1607
  description: 'Listenin altındaki yardımcı metin.',
1608
1608
  displayMode: "Seçenek etiketinin biçimi: 'native' ana dil adı (Türkçe), 'code' büyük harf kod (TR), 'both' ikisi birden (Türkçe (TR)). Sözlükte karşılığı olmayan kod her kipte kendi kodunu gösterir.",
1609
- isDisabled: 'Gerçek disabled özniteliği: liste açılmaz ve Tab sırasından düşer.',
1610
- size: "Kutu ölçüsü: 'sm' | 'md' | 'lg'; boş bırakılırsa temanın form varsayılanı geçerlidir. Kademeler ekosistemin form belirteçlerinden gelir, yani yanına konan aynı ölçüdeki textinput ile aynı yükseklikte durur.",
1609
+ isDisabled: 'Liste açılmaz ve Tab sırasından düşer.',
1610
+ size: "Kutu ölçüsü: 'sm' | 'md' | 'lg'; boş bırakılırsa temanın form varsayılanı geçerlidir. dropdown ile aynı ortak kontrol olduğundan yanına konan aynı ölçüdeki form girdileriyle aynı yükseklikte durur.",
1611
1611
  isHidden: 'Düğümü hiç çizmez (ortak katman).'
1612
1612
  },
1613
1613
  guide: 'translation'
@@ -505,7 +505,7 @@ export const componentEventContracts = {
505
505
  mount: { ...NO_DATA, reads: 'self.value BOŞTUR: enjekte edilen geçerli dil düğümün prop kaydına yazılmıyor, oraya yalnız change yükü yazılıyor (ölçüldü 2026-09-18, ARC-098). Dili okuyacak akışı change’e bağla' },
506
506
  change: {
507
507
  payload: { value: 'string (seçilen dil kodu, projenin yazdığı biçimde)' },
508
- reads: 'Yük düğümün kendi value prop’una yazılır (yazmayı machine.onEmit yapar, çünkü olayda data var), akış self.value ile okur. Dili DEĞİŞTİREN yazma bu değildir: render katmanı aynı olayda machine.setLanguage(value) + setAppLocale(value) çağırır. Yalnız kullanıcı seçiminde yayılır; akışın value’ya yazması hiçbir şeyi değiştirmez (enjekte edilen değer ezer)'
508
+ reads: 'Yük düğümün kendi value prop’una yazılır (yazmayı machine.onEmit yapar, çünkü olayda data var), akış self.value ile okur; aynı yük params kanalından da iner, yani event.data.value da dolu. Dili DEĞİŞTİREN yazma bu değildir: render katmanı aynı olayda machine.setLanguage(value) + setAppLocale(value) çağırır. Yalnız kullanıcı seçiminde yayılır; akışın value’ya yazması hiçbir şeyi değiştirmez (enjekte edilen değer ezer)'
509
509
  },
510
510
  focus: NO_DATA,
511
511
  blur: NO_DATA
@@ -1316,7 +1316,7 @@ budur — bir preset ya da `componentStyles` sizin değerinizi eziyorsa `styleLa
1316
1316
  | Değişiklik | Tool | Neden |
1317
1317
  |---|---|---|
1318
1318
  | Komponent ekle/sil/taşı, prop, binding, event | `page_schema_patch` | Doğrulama duvarı + açık Studio canvas'ına SignalR canlı yayını + eşzamanlı yazar kilidi yalnız bu yolda çalışır |
1319
- | Ad, slug, browserTitle, `browserTitleKey`, layout, roller, middleware | `page_update` | Üstbilgi alanları micro-op sözlüğünde yok. `browserTitleKey` sekme başlığını çeviri anahtarına bağlar: verilirse başlık sözlükten çözülür, boşsa `browserTitle` kullanılır. Başlık sayfa yüklenirken çözülür ve canlı dil değişimini izlemez (`platform_guide('translation')`) |
1319
+ | Ad, slug, browserTitle, `browserTitleKey`, layout, roller, middleware | `page_update` | Üstbilgi alanları micro-op sözlüğünde yok. `browserTitleKey` sekme başlığını çeviri anahtarına bağlar: verilirse başlık sözlükten çözülür, boşsa `browserTitle` kullanılır. Başlık canlı dil değişimini izler; anahtarın o dilde değeri yoksa varsayılan dile düşer (`platform_guide('translation')`) |
1320
1320
 
1321
1321
  Platformun `PUT /pages/...` ucu **replace**'tir: gönderilmeyen `schema`/`events`/`roleIds`
1322
1322
  alanları silinir. Gateway bu yüzden `page_update`'te sayfayı önce okur, yalnız verdiğin
@@ -175,11 +175,10 @@ motor olmasıdır (tarayıcı JS'i ve Jint).
175
175
  verilmişse sekme başlığı çeviri sözlüğünden çözülür; anahtar boşsa `browserTitle` olduğu gibi
176
176
  kullanılır. İkisi de boşsa sayfa adı yazılır.
177
177
 
178
- > **Sekme başlığı SAYFA YÜKLENİRKEN çözülür, canlı dil değişimini İZLEMEZ.** Ölçüldü 2026-09-08
179
- > (yerel runtime): `language-selector` ile dil değiştirildiğinde sayfa içeriği ve layout başlığı
180
- > anında yeni dile geçiyor, sekme başlığı ise açılıştaki dilde kalıyor; aynı dille sayfa yeniden
181
- > yüklendiğinde başlık doğru geliyor. Sebep `Runtime.svelte`'te dilin bir `const` olarak bir kez
182
- > çözülmesi. Sekme başlığının dilini doğrulayacaksan **yeniden yükleyerek** doğrula.
178
+ > **Sekme başlığı canlı dil değişimini İZLER.** `language-selector` ile dil değiştirildiğinde
179
+ > sayfa içeriğiyle birlikte sekme başlığı da yeni dilde çözülür; yeniden yükleme gerekmez
180
+ > (ölçüldü 2026-09-11). Anahtarın seçilen dilde değeri yoksa projenin varsayılan diline düşer.
181
+ > 2026-09-08 ölçümündeki "açılıştaki dilde kalır" davranışı düzeltildi.
183
182
 
184
183
  ## Doğrulama mesajları: `t:` öneki
185
184
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appaflytech/zeyrek-ai-mcp",
3
- "version": "0.0.15",
3
+ "version": "0.0.16",
4
4
  "type": "module",
5
5
  "description": "Zeyrek (NgApps) platform APIs as MCP tools — data, logic and Studio design surface in one gateway",
6
6
  "license": "UNLICENSED",