@appaflytech/zeyrek-ai-mcp 0.0.4 → 0.0.6

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.
Files changed (101) hide show
  1. package/.env.example +8 -3
  2. package/.env.production.example +2 -0
  3. package/README.md +229 -193
  4. package/dist/config.js +20 -2
  5. package/dist/knowledge/backendConstraints.js +897 -0
  6. package/dist/knowledge/componentCatalog.js +196 -42
  7. package/dist/knowledge/coverage.js +43 -0
  8. package/dist/knowledge/flowGuards.js +30 -0
  9. package/dist/knowledge/guideSections.js +49 -0
  10. package/dist/knowledge/hydrate.js +97 -0
  11. package/dist/knowledge/languageCodes.js +36 -0
  12. package/dist/knowledge/languages.js +105 -0
  13. package/dist/knowledge/layoutSummary.js +10 -0
  14. package/dist/knowledge/localization.js +51 -0
  15. package/dist/knowledge/normalize.js +449 -16
  16. package/dist/knowledge/outlines.js +136 -12
  17. package/dist/knowledge/propTypes.js +80 -0
  18. package/dist/knowledge/rules.js +618 -43
  19. package/dist/knowledge/schemaGuard.js +199 -0
  20. package/dist/knowledge/styleResolve.js +63 -4
  21. package/dist/observability/trace.js +27 -3
  22. package/dist/platform/errors.js +46 -4
  23. package/dist/platform/http.js +33 -4
  24. package/dist/platform/patch.js +27 -0
  25. package/dist/platform/refs.js +104 -0
  26. package/dist/platform/responses.js +9 -2
  27. package/dist/platform/screenshot.js +527 -16
  28. package/dist/platform/secrets.js +40 -0
  29. package/dist/platform/tokenVault.js +89 -0
  30. package/dist/platform/writeDiff.js +281 -0
  31. package/dist/resources/examples/layout-app-shell.json +1 -1
  32. package/dist/resources/examples/microservice-table-list.json +2 -4
  33. package/dist/resources/examples/page-dynamic-form.json +2 -2
  34. package/dist/resources/examples/page-flex-sections.json +99 -0
  35. package/dist/resources/examples/page-sign-in.json +3 -2
  36. package/dist/resources/guides/component.md +69 -8
  37. package/dist/resources/guides/entity.md +404 -16
  38. package/dist/resources/guides/expressions.md +44 -2
  39. package/dist/resources/guides/external-component.md +9 -0
  40. package/dist/resources/guides/getting-started.md +77 -7
  41. package/dist/resources/guides/layout.md +53 -10
  42. package/dist/resources/guides/microservice.md +226 -13
  43. package/dist/resources/guides/middleware.md +89 -1
  44. package/dist/resources/guides/page.md +383 -46
  45. package/dist/resources/guides/translation.md +126 -8
  46. package/dist/resources/guides/view.md +16 -1
  47. package/dist/resources/guides/workflow.md +198 -27
  48. package/dist/resources/knowledge.js +5 -0
  49. package/dist/resources/rules.js +27 -0
  50. package/dist/resources/schema-fingerprint.json +8 -0
  51. package/dist/resources/schemas/CreateBulkRowCommand.json +33 -0
  52. package/dist/resources/schemas/CreateDatasourceCommand.json +15 -6
  53. package/dist/resources/schemas/CreateDiscoveredEntitiesCommand.json +19 -8
  54. package/dist/resources/schemas/CreateEntityCommand.json +52 -12
  55. package/dist/resources/schemas/CreateMicroserviceCommand.json +26 -2
  56. package/dist/resources/schemas/CreateQueryCommand.json +56 -3
  57. package/dist/resources/schemas/CreateRowCommand.json +38 -0
  58. package/dist/resources/schemas/CreateViewCommand.json +13 -10
  59. package/dist/resources/schemas/CreateWorkflowCommand.json +95 -14
  60. package/dist/resources/schemas/GetRowsQuery.json +3 -0
  61. package/dist/resources/schemas/PreviewMicroserviceCommand.json +16 -0
  62. package/dist/resources/schemas/PreviewQueryCommand.json +5 -2
  63. package/dist/resources/schemas/PreviewWorkflowCommand.json +34 -9
  64. package/dist/resources/schemas/StepDto.json +23 -3
  65. package/dist/resources/schemas/UpdateBulkRowCommand.json +33 -0
  66. package/dist/resources/schemas/UpdateDatasourceCommand.json +15 -6
  67. package/dist/resources/schemas/UpdateEntityCommand.json +49 -10
  68. package/dist/resources/schemas/UpdateMicroserviceCommand.json +28 -3
  69. package/dist/resources/schemas/UpdateQueryCommand.json +13 -3
  70. package/dist/resources/schemas/UpdateRowCommand.json +40 -0
  71. package/dist/resources/schemas/UpdateViewCommand.json +15 -10
  72. package/dist/resources/schemas/UpdateWorkflowCommand.json +95 -14
  73. package/dist/server.js +4 -0
  74. package/dist/tools/access.js +3 -3
  75. package/dist/tools/applications.js +1 -1
  76. package/dist/tools/automations.js +63 -30
  77. package/dist/tools/common.js +39 -0
  78. package/dist/tools/components.js +16 -7
  79. package/dist/tools/datasources.js +83 -21
  80. package/dist/tools/deployments.js +34 -2
  81. package/dist/tools/dtos.js +25 -12
  82. package/dist/tools/entities.js +113 -28
  83. package/dist/tools/externalComponents.js +9 -3
  84. package/dist/tools/files.js +20 -6
  85. package/dist/tools/flows.js +110 -11
  86. package/dist/tools/folders.js +7 -2
  87. package/dist/tools/globalFunctions.js +63 -0
  88. package/dist/tools/layouts.js +103 -29
  89. package/dist/tools/microservices.js +229 -38
  90. package/dist/tools/organizations.js +5 -6
  91. package/dist/tools/pages.js +365 -100
  92. package/dist/tools/platformInfo.js +152 -11
  93. package/dist/tools/projects.js +183 -33
  94. package/dist/tools/queries.js +32 -10
  95. package/dist/tools/rows.js +159 -45
  96. package/dist/tools/screenWrite.js +59 -0
  97. package/dist/tools/screens.js +28 -0
  98. package/dist/tools/translations.js +24 -8
  99. package/dist/tools/views.js +20 -10
  100. package/dist/tools/workflows.js +33 -16
  101. package/package.json +6 -3
@@ -7,6 +7,12 @@ kestirmeden reddetmek (auth guard), (2) isteğin devamında kullanılacak **değ
7
7
  istenen her uca/sayfaya bağlanır. Buradaki kurallar backend kodundan ve qm projesinin canlı
8
8
  kayıtlarından doğrulandı.
9
9
 
10
+ > **Middleware `microservice_debug` ağacında görünmez.** `executionItems` yalnız ucun kendi
11
+ > adımlarını izler; middleware ucun ÖNÜNDE ayrı bir workflow olarak koşar. Gateway bu boşluğu
12
+ > yanıta `middlewares` alanı ekleyerek kapatır (uca bağlı middleware workflow'ları, adım
13
+ > özetiyle) — kapı 200 dönerken bile açık kalmış olabilir, adımları oradan oku (ölçüm: 09-04
14
+ > koşusu Y-04, Y-03).
15
+
10
16
  **Önce "gerekli mi?" sorusu.** Middleware kurulum listesinin zorunlu maddesi değildir: oturum
11
17
  kavramı olmayan bir üründe auth middleware'i, ayar tablosu olmayan bir üründe setter gereksizdir
12
18
  (karar tablosu: `platform_guide('getting-started')`). Buna karşılık **kimlik kurduysan eksiksiz
@@ -249,11 +255,35 @@ qm kanıtı: `sy-users-get-my-profile` (`id eq user.id`), `qm-document-revision-
249
255
  değil, middleware değişkenidir. (Sayfalardaki sabit `patient_id` benzeri geçici çözümlerin
250
256
  kalıcı hâli de bu.)
251
257
 
258
+ ## Tarif 3c — Agregasyon (query kaynaklı) ucun kapsaması: sorguyu WORKFLOW'dan çağır
259
+
260
+ Tarif 3 **table kaynaklı** uçlar içindir; expression filtresi orada vardır. Bir KPI/rapor ucu
261
+ ham SQL istediği için query kaynaklıdır ve o yolda expression yoktur: kayıtlı sorgunun
262
+ parametreleri **yalnız çağrıdan** (body → query-string → header) bağlanır, `user` oraya hiç
263
+ girmez. Kapsamı gövdeye koyarsan çağıran başkasının kapsamını yazabilir — 2026-09-07'de ölçüldü:
264
+ middleware `OWNER-A` kimliğini kurmuşken gövdeye `OWNER-B` yazan çağrı `OWNER-B`'nin verisini
265
+ döndürdü.
266
+
267
+ Kapsam bir katman yukarıda kurulur:
268
+
269
+ 1. Sorguyu kapsam parametresiyle kaydet (`… WHERE company_id = @company_id`).
270
+ 2. Bir `type: 'workflow'` akışı aç: start → **query adımı** → response. Adımın bağlaması
271
+ `rule.expression`'da: `{ company_id: user.company_id, from: input.from }` — kapsam
272
+ middleware'den, kalan filtreler gövdeden.
273
+ 3. Ucu `source: 'workflow'` + `middlewareIds` dolu olarak kur.
274
+
275
+ Ölçüm: gövdeye kasten yanlış `company_id` yazıldığında yanıt değişmedi; `middlewareIds` boş
276
+ bırakıldığında akış `500 JavaScriptException: user is not defined` verdi. Reçetenin tamamı
277
+ `platform_guide('microservice')` §"Kimlik kapsaması × uç kaynağı", bağlamanın yazım tuzağı
278
+ `platform_guide('workflow')` §"Query adımı".
279
+
252
280
  ## Tuzaklar
253
281
 
254
282
  - Expression'daki değişken adı, bağlı middleware'lerden birinin kurduğu adla **birebir**
255
283
  eşleşmeli — eşleşmezse runtime'da `user is not defined` 500'ü. Gateway MS-011 uyarır:
256
- `user.` okuyan expression varken `middlewareIds` boşsa warn alırsın.
284
+ `user.` okuyan expression varken `middlewareIds` boşsa warn alırsın. **Aynı 500'ü workflow
285
+ kaynaklı uçta gateway GÖREMEZ** (uçtan görünen tek şey `workflowId`'dir): `user.*` okuyan bir
286
+ akışı bağladığın uçta `middlewareIds`'i doldurmayı sen garanti edeceksin.
257
287
  - `set-user` adı sabittir; ikinci kullanıcı değişkeni gerekiyorsa `variable` step'i kullan.
258
288
  - Middleware'i `workflow_preview` ile test etmek sınırlıdır (HTTP bağlamı preview'da yoktur);
259
289
  gerçek doğrulama, middleware'i bağladığın ucu `microservice_execute` ile çağırmaktır —
@@ -265,6 +295,17 @@ kalıcı hâli de bu.)
265
295
  token'ını KOYMAZ, istek tamamen verdiğin kimlikle gider. Tarayıcı yolunu test etmek için
266
296
  token'ı cookie header'ıyla da geçebilirsin (`headers: { Cookie: '<ad>=<token>' }`).
267
297
 
298
+ ## Ön koşul: uygulamanın kullanıcısı olmalı
299
+
300
+ Middleware bağlamadan önce `users` tablosunda satır olduğundan emin ol — `row_list('users')` tek
301
+ çağrı. Yeni projede o tablo **boş** gelir ve Studio operatörü uygulamanın kullanıcısı değildir;
302
+ kapı bağlanınca her istek 401 döner ve bu ancak sayfa boş açılınca fark edilir (09-02 ve 09-04
303
+ koşularında ikisinde de yaşandı).
304
+
305
+ İlk kullanıcıyı açmanın desteklenen tek yolu bootstrap desenidir:
306
+ `platform_guide('getting-started')` §"İlk kullanıcıyı kim açar?". Kısa yol arama — bakım uçları
307
+ (`Sync*`) ürün yüzeyinin parçası değildir ve gateway onları araç olarak yayınlamaz.
308
+
268
309
  ## Korumalı bir ucu TEST ederken: token ÇEREZDEN okunur
269
310
 
270
311
  `microservice_execute` ile middleware'li bir ucu denerken `Authorization: Bearer <token>` vermek
@@ -279,3 +320,50 @@ headers: { "Cookie": "ANKET_Token=<token>" } → 200
279
320
  Token'ı önce giriş ucundan al (`microservice_execute` ile `giris`), sonra `Cookie` başlığıyla
280
321
  korumalı ucu çağır. Çerez adı middleware'in `cookie.<ad>` ifadesindedir; `workflow_get` ile oku,
281
322
  tahmin etme. **401 alman middleware'in çalıştığının kanıtıdır** — uç bozuk değildir.
323
+
324
+ ## Korumalı SAYFAYI görsel doğrulama — jeton bağlama hiç girmeden
325
+
326
+ Giriş ucunun yanıtındaki jeton gateway tarafından maskelenir (`access_token: "***"`), yani jetonu
327
+ okuyup elle taşıyamazsın — ve taşımaya çalışmak uygulamanın yanıt sözleşmesini geçici olarak
328
+ bozmak demektir (ölçüm 2026-09-04, benchmark 4. koşu). Doğru yol dört adımdır:
329
+
330
+ 1. `microservice_execute` ile giriş ucunu çağır. Yanıtta jeton `***`, ama `tokenRefs` alanında
331
+ maskelenen her JWT için kısa ömürlü bir referans döner: `{ "body.access_token": "tok_…" }`.
332
+ 2. `page_screenshot` (ya da `page_runtime_get`) çağrısına `asUser: "tok_…"` ver. Gateway referansı
333
+ kendi içinde çözer; jeton ne yanıta ne günlüğe girer. Referans 15 dakika geçerlidir, süresi
334
+ dolarsa çağrı **hata verir** — sessizce kimliksiz isteğe düşmez.
335
+ 3. Uygulamanın kendi oturum çerezi ayrı bir addaysa (`cookie.CORE_Token` gibi) onu
336
+ `cookies: { "CORE_Token": "…" }` ile ekle; `asUser` her zaman `NG_AccessToken` adıyla taşınır.
337
+ 4. Kapının gerçekten kapalı olduğunu `page_runtime_get(anonymous: true)` ile kanıtla: beklenen
338
+ sonuç `middlewareBlocked: true` + 401'dir.
339
+
340
+
341
+ ## Korumalı ucu teşhis etmek: `asUser`
342
+
343
+ Bir uca `middlewareIds` bağladığın anda `microservice_execute`, `microservice_preview` ve
344
+ `microservice_debug` gateway'in **servis jetonuyla** gider ve o jeton uygulamanın kendi
345
+ `users` tablosuna çözülmez — üçü de 401 döner. Ölçüldü 2026-09-05: agregasyonlar korumaya
346
+ alındıktan sonra kuru koşu ve adım adım teşhis araçlarının ikisi de kullanılamaz hâle geldi.
347
+
348
+ Üçü de artık `asUser` (ve gerekiyorsa `cookies`) alır ve jetonu **hem** `Authorization` başlığında
349
+ **hem** `NG_AccessToken` çerezinde taşır — middleware jetonu çerezden okuduğu için tek kanal
350
+ yetmiyordu:
351
+
352
+ ```jsonc
353
+ // 1) uygulamanın kendi giriş ucunu anonim çağır, jeton referansını al
354
+ { "tool": "microservice_execute", "application": "<app>", "microservice": "sign-in",
355
+ "anonymous": true, "body": { "email": "…", "password": "…" } }
356
+ // → tokenRefs: { "body.access_token": "tok_…" } (jeton hiç görünmez, 15 dk geçerli)
357
+
358
+ // 2) korumalı ucu O KİMLİKLE çalıştır
359
+ { "tool": "microservice_debug", "application": "<app>", "microservice": "funnel",
360
+ "asUser": "tok_…", "body": { … } }
361
+ ```
362
+
363
+ Uygulaman jetonu kendi çerez adından okuyorsa (`CORE_Token` gibi) `cookies: { CORE_Token: "<jwt>" }`
364
+ ver. `anonymous: true` ile `asUser` birlikte verilemez — biri kimliksiz isteği, diğeri belirli bir
365
+ üyenin kimliğiyle atılan isteği ister.
366
+
367
+ `microservice_debug` yanıtındaki `middlewareNote` artık gerçeği söyler: middleware koştu ve
368
+ geçirdi mi, yoksa isteği kesti mi. Not eskiden ucun LİSTE kaydına bakıyordu ve liste DTO'su
369
+ `middlewareIds` taşımadığı için bağlı bir uçta bile "bağlı değil" diyordu.