@appaflytech/zeyrek-ai-mcp 0.0.12 → 0.0.13
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.
- package/dist/knowledge/normalize.js +43 -0
- package/dist/knowledge/outlines.js +16 -3
- package/dist/knowledge/rules.js +70 -2
- package/dist/resources/examples/function-total.json +6 -1
- package/dist/resources/examples/workflow-call-workflow.json +115 -0
- package/dist/resources/examples/workflow-http-step.json +84 -0
- package/dist/resources/examples/workflow-loop-step.json +132 -0
- package/dist/resources/guides/entity.md +40 -3
- package/dist/resources/guides/getting-started.md +4 -0
- package/dist/resources/guides/microservice.md +40 -0
- package/dist/resources/guides/modify-existing.md +13 -2
- package/dist/resources/guides/workflow.md +53 -3
- package/dist/resources/schema-fingerprint.json +7 -5
- package/dist/resources/schemas/MicroserviceDto.json +972 -0
- package/dist/tools/access.js +1 -1
- package/dist/tools/entities.js +1 -1
- package/dist/tools/functions.js +1 -1
- package/dist/tools/microservices.js +8 -4
- package/dist/tools/platformInfo.js +1 -1
- package/dist/tools/workflows.js +1 -1
- package/package.json +1 -1
package/dist/tools/access.js
CHANGED
|
@@ -5,7 +5,7 @@ export function registerAccessTools(server, platform) {
|
|
|
5
5
|
const config = platform.config;
|
|
6
6
|
server.registerTool('role_list', {
|
|
7
7
|
title: 'Rolleri listele',
|
|
8
|
-
description: "Projenin rollerini listeler. Uç YALNIZ id + name döner (backend RoleDto bu ikisini taşır) — SLUG BURADA YOKTUR ve iki anahtar farklıdır: page_create/page_update ve microservice_create'in roleIds alanı ID ister, buna karşılık Authorized(user.roles) ile middleware'in kurduğu user.roles SLUG karşılaştırır (platformun get-user sorgusu roles+user_roles join'inden slug dizisi üretir). Slug'ı built-in 'roles' entity'sinden okuyun (sabit id 01917ede-88a2-72ea-8397-2619e5d5dca0; row_list/microservice). ROL OLUŞTURAN BİR TOOL YOKTUR ve olmamalıdır: roller built-in datasource'taki sıradan bir entity'dir (kolonlar id · name UNIQUE · slug). Uygulamanın rol yönetmesi gerekiyorsa yol entity_get('roles') + kendi microservice ucun (uç + sayfa) ve rolü kullanıcıya bağlayan user_roles satırı — MCP'den doğrudan yazma değil; reçete platform_guide('entity') §'Hazır entity'ler'. Projeyle birlikte gelen roller çoğu senaryoya yeter; önce bu listeye bakın.",
|
|
8
|
+
description: "Projenin rollerini listeler. Uç YALNIZ id + name döner (backend RoleDto bu ikisini taşır) — SLUG BURADA YOKTUR ve iki anahtar farklıdır: page_create/page_update ve microservice_create'in roleIds alanı ID ister (microservice_patch'te aynı liste '/roles' yolundadır ve öğeleri { id, name } çiftidir — yamalanan belge okuma şeklidir), buna karşılık Authorized(user.roles) ile middleware'in kurduğu user.roles SLUG karşılaştırır (platformun get-user sorgusu roles+user_roles join'inden slug dizisi üretir). Slug'ı built-in 'roles' entity'sinden okuyun (sabit id 01917ede-88a2-72ea-8397-2619e5d5dca0; row_list/microservice). ROL OLUŞTURAN BİR TOOL YOKTUR ve olmamalıdır: roller built-in datasource'taki sıradan bir entity'dir (kolonlar id · name UNIQUE · slug). Uygulamanın rol yönetmesi gerekiyorsa yol entity_get('roles') + kendi microservice ucun (uç + sayfa) ve rolü kullanıcıya bağlayan user_roles satırı — MCP'den doğrudan yazma değil; reçete platform_guide('entity') §'Hazır entity'ler'. Projeyle birlikte gelen roller çoğu senaryoya yeter; önce bu listeye bakın.",
|
|
9
9
|
inputSchema: { project: projectParam, environment: environmentParam },
|
|
10
10
|
annotations: readOnly
|
|
11
11
|
}, handle(config, async ({ project, environment }) => {
|
package/dist/tools/entities.js
CHANGED
|
@@ -113,7 +113,7 @@ export function registerEntityTools(server, platform) {
|
|
|
113
113
|
}));
|
|
114
114
|
server.registerTool('entity_create', {
|
|
115
115
|
title: 'Entity oluştur',
|
|
116
|
-
description: "Datasource altında yeni entity oluşturur (definition = CreateEntityCommand: name, fields[], applicationIds, ...). İlişkiler ve alan tipi kararı için platform_guide('entity') okuyun. Gövde politika kontrolünden geçer. applicationIds create'te platformca bağlanır (CreateEntityCommandHandler entityApplications'ı Entity ctor'una geçirir); satır uçları bu bağa İHTİYAÇ DUYMAZ — bağ yalnız Studio'nun application'a göre entity listesini ve bağımlılık sorgularını etkiler. `fields[].isLocalized: true` alanı ana tablodan çıkarıp companion `<slug>_localization` entity'sine taşır (yalnız düz METİN alanı; anahtar/unique/ilişki olamaz) — platform_guide('entity') §'Çoklu dilli alan'.",
|
|
116
|
+
description: "Datasource altında yeni entity oluşturur (definition = CreateEntityCommand: name, fields[], applicationIds, ...). İlişkiler ve alan tipi kararı için platform_guide('entity') okuyun. Gövde politika kontrolünden geçer. applicationIds create'te platformca bağlanır (CreateEntityCommandHandler entityApplications'ı Entity ctor'una geçirir); satır uçları bu bağa İHTİYAÇ DUYMAZ — bağ yalnız Studio'nun application'a göre entity listesini ve bağımlılık sorgularını etkiler. `fields[].isLocalized: true` alanı ana tablodan çıkarıp companion `<slug>_localization` entity'sine taşır (yalnız düz METİN alanı; anahtar/unique/ilişki olamaz) — platform_guide('entity') §'Çoklu dilli alan'. SEÇİM LİSTESİNE (enum) TEK DEĞER: listeyi yeniden göndermeyin — ekleme `{op:'add', path:'/fields[slug=status]/valueOptions/-', value:{value:'Onayda', order:4}}`, silme `{op:'remove', path:'/fields[slug=status]/valueOptions[value=Eski]'}`, yeniden adlandırma `{op:'replace', path:'/fields[slug=status]/valueOptions[value=Eski]/value', value:'Yeni'}`; `isEnum` türetilmiştir, ayrıca yazılmaz. Silme/yeniden adlandırmadan ÖNCE o değeri taşıyan satırları taşıyın — yoksa istek reddedilir ve hiçbir şey yazılmaz ('check constraint … is violated by some row') (platform_guide('entity') §'Alan tipine karar verme').",
|
|
117
117
|
inputSchema: { project: projectParam, environment: environmentParam, datasourceId: guid, definition: definitionParam, policyOverride: policyOverrideParam },
|
|
118
118
|
annotations: writes
|
|
119
119
|
}, handle(config, async ({ project, environment, datasourceId, definition, policyOverride }) => {
|
package/dist/tools/functions.js
CHANGED
|
@@ -126,7 +126,7 @@ export function registerFunctionTools(server, platform) {
|
|
|
126
126
|
const config = platform.config;
|
|
127
127
|
server.registerTool('function_list', {
|
|
128
128
|
title: 'Fonksiyonları listele',
|
|
129
|
-
description: "Fonksiyonları imzalarıyla listeler; iki kaynak tek listede (source: 'workflow' sunucu, 'studio' tarayıcı). Süzgeçler birleşir: source · applicationId (studio kayıtları) · scope · pageId (yalnız o sayfanın sayfa kapsamlıları). Gövde listede YOKTUR (bodyLines sayılır) — function_get ile okuyun. Bir ifadeye Functions.x(…) ya da çıplak x(…) yazmadan önce adı, id'yi ve parametre SIRASINI buradan alın — platform_guide('functions').",
|
|
129
|
+
description: "Fonksiyonları imzalarıyla listeler; iki kaynak tek listede (source: 'workflow' sunucu, 'studio' tarayıcı). Süzgeçler birleşir: source · applicationId (studio kayıtları) · scope · pageId (yalnız o sayfanın sayfa kapsamlıları). Gövde listede YOKTUR (bodyLines sayılır) — function_get ile okuyun. Bir ifadeye Functions.x(…) ya da çıplak x(…) yazmadan önce adı, id'yi ve parametre SIRASINI buradan alın — platform_guide('functions'). Gövdeyi DEĞİŞTİRMEK için function_update { id, body }; fonksiyonda patch aracı yoktur.",
|
|
130
130
|
inputSchema: {
|
|
131
131
|
project: projectParam,
|
|
132
132
|
environment: environmentParam,
|
|
@@ -2,7 +2,7 @@ import { guid, appRef, withResolved, projectParam, environmentParam, definitionP
|
|
|
2
2
|
import { languageHeader } from '../knowledge/languageCodes.js';
|
|
3
3
|
import { hydrateMicroserviceRefs } from '../knowledge/hydrate.js';
|
|
4
4
|
import { RefResolver } from '../platform/refs.js';
|
|
5
|
-
import { normalizeMicroserviceDefinition, withNormalization } from '../knowledge/normalize.js';
|
|
5
|
+
import { normalizeMicroserviceDefinition, normalizeMicroservicePatchOps, withNormalization } from '../knowledge/normalize.js';
|
|
6
6
|
import { evaluatePolicy, enforcePolicy, attachFindings } from '../knowledge/policy.js';
|
|
7
7
|
import { microserviceOutline, workflowOutline, resolvePart, resolvePatchOperations } from '../knowledge/outlines.js';
|
|
8
8
|
import { patchResult, baseVersionOf } from '../platform/patch.js';
|
|
@@ -323,7 +323,7 @@ export function registerMicroserviceTools(server, platform) {
|
|
|
323
323
|
}));
|
|
324
324
|
server.registerTool('microservice_patch', {
|
|
325
325
|
title: 'Microservice\'e patch uygula',
|
|
326
|
-
description:
|
|
326
|
+
description: "Tam gövdeyi bağlama almadan hedefli değişiklik: gateway mevcut tanımı çeker, JSON Patch uygular, politika kontrolünden geçirir, geri yazar. Yanıt outline özetidir. YAMALANAN BELGE microservice_get'in OKUMA ŞEKLİDİR, create/update gövdesi değil — ikisinin alan adları her yerde aynı DEĞİL: ROL LİSTESİ '/roles' yolundadır ve öğeleri { id: <role_list id>, name } çiftleridir ('roleIds' yalnız create/update gövdesinde vardır; verirseniz gateway '/roles'a çevirir ve gatewayNormalized ile söyler). Rolü değiştirmek için ucun tanımını yeniden göndermeyin: {op:'replace', path:'/roles', value:[{id:'<role_list id>'}]} yeter — 'name' isteğe bağlıdır, platform yalnız id okur. Tam dizi replace'i tercih edin: alan boş listede null serileşebilir ve '/roles/-' eklemesi o hâlde çözülemez (gateway katlar, notu yanıtta görürsünüz). Middleware listesi '/middlewareIds' ile iki yolda da aynı addır.",
|
|
327
327
|
inputSchema: { project: projectParam, environment: environmentParam, applicationId: appRef, id: guid, operations: patchOperationsParam.optional(), ops: patchOperationsParam.optional().describe("'operations' ile aynı alan (eşanlamlı) — sayfa micro-op tool'larıyla aynı adı kullanabilmeniz için"), policyOverride: policyOverrideParam },
|
|
328
328
|
annotations: updates
|
|
329
329
|
}, handle(config, async ({ project, environment, applicationId, id, operations: givenOperations, ops, policyOverride }) => {
|
|
@@ -332,7 +332,11 @@ export function registerMicroserviceTools(server, platform) {
|
|
|
332
332
|
const resolvedApplicationId = await resolver.applicationId(applicationId);
|
|
333
333
|
const current = await platform.tenant('GET', project, `/microservices/${resolvedApplicationId}/${id}`, { environment });
|
|
334
334
|
const definition = structuredClone((current?.data ?? current));
|
|
335
|
-
|
|
335
|
+
// Rol yolu seçici çözümünden ÖNCE çevrilir: '/roleIds' patch belgesinde hiç yoktur, o hâliyle
|
|
336
|
+
// applyPatch'e giden replace OPERATION_PATH_UNRESOLVABLE ile düşerdi (S-2).
|
|
337
|
+
const roleOperations = structuredClone(operations);
|
|
338
|
+
const roleNotes = normalizeMicroservicePatchOps(roleOperations, definition);
|
|
339
|
+
const resolved = resolvePatchOperations(definition, roleOperations);
|
|
336
340
|
const patched = fastJsonPatch.applyPatch(definition, resolved.operations, true, false).newDocument;
|
|
337
341
|
// Patch gövdesi tam PUT olarak geri yazılır: okunan kayıtta olmayan alan yazmada da SİLİNİR.
|
|
338
342
|
// 09-04 koşusunda gidiş-dönüş 'description'ı düşürdü ve MS-014 patch'i bloke etti; genel
|
|
@@ -354,7 +358,7 @@ export function registerMicroserviceTools(server, platform) {
|
|
|
354
358
|
body: { baseVersion: baseVersionOf(definition, 'microservice_get'), ops: netOps }
|
|
355
359
|
});
|
|
356
360
|
const written = patchResult(saved, patched);
|
|
357
|
-
return attachFindings(withUnmappedMembers(withWriteDiff(withResolved(withNormalization({ applied: operations.length, newVersion: written.newVersion, outline: microserviceOutline(written.data) }, [...normalized, ...resolved.notes.map(note => `patch yolu seçiciden indekse çözüldü: ${note}`)]), resolver.resolved), writeDiff(patched, written.data)), drift), findings);
|
|
361
|
+
return attachFindings(withUnmappedMembers(withWriteDiff(withResolved(withNormalization({ applied: operations.length, newVersion: written.newVersion, outline: microserviceOutline(written.data) }, [...roleNotes, ...normalized, ...resolved.notes.map(note => `patch yolu seçiciden indekse çözüldü: ${note}`)]), resolver.resolved), writeDiff(patched, written.data)), drift), findings);
|
|
358
362
|
}));
|
|
359
363
|
server.registerTool('microservice_delete', {
|
|
360
364
|
title: 'Microservice sil',
|
|
@@ -71,7 +71,7 @@ const guideRouting = {
|
|
|
71
71
|
middleware: 'auth/oturum/yetki',
|
|
72
72
|
view: 'tam metin arama indeksi',
|
|
73
73
|
expressions: 'ifade fonksiyon/bağlam sözlüğü (system.*, file.*, Page.*, state.*, Steps…)',
|
|
74
|
-
functions: "fonksiyonlar, iki kaynak tek biçim: source:'studio' tarayıcıda Functions.<ad>() (kapsam uygulama/sayfa, UI flow 'function' adımı), source:'workflow' sunucuda çıplak ad; parametre/varsayılan/required, tuzaklar",
|
|
74
|
+
functions: "fonksiyonlar, iki kaynak tek biçim: source:'studio' tarayıcıda Functions.<ad>() (kapsam uygulama/sayfa, UI flow 'function' adımı), source:'workflow' sunucuda çıplak ad; parametre/varsayılan/required, tuzaklar; GÖVDE GÜNCELLEME function_update (yalnız değişen alanı gönder, patch aracı yok)",
|
|
75
75
|
translation: 'sayfa/içerik çevirileri (çoklu dil)',
|
|
76
76
|
merge: "dal aç, dalda çalış, development'a merge et; çakışma çözümü ve apply kapıları"
|
|
77
77
|
};
|
package/dist/tools/workflows.js
CHANGED
|
@@ -213,7 +213,7 @@ export function registerWorkflowTools(server, platform) {
|
|
|
213
213
|
}));
|
|
214
214
|
server.registerTool('workflow_step_schema', {
|
|
215
215
|
title: 'Step şeması üret',
|
|
216
|
-
description: "Verilen step tanımı için girdi/çıktı şemasını üretir (parameterScheme / returnScheme); step yazarken definition'ı doğrulamanın en hızlı yolu. type:'workflow' adımında (rule.workflowId) çağrılan akışın parametre ve dönüş DTO'sunu döner — alt akışa girdi YALNIZ rule.expression ile geçer, nesne literalinin anahtarları bu parameterScheme'in alanlarıdır (WF-032; platform_guide('workflow') §Workflow adımı).",
|
|
216
|
+
description: "Verilen step tanımı için girdi/çıktı şemasını üretir (parameterScheme / returnScheme); step yazarken definition'ı doğrulamanın en hızlı yolu. type:'workflow' adımında (rule.workflowId) çağrılan akışın parametre ve dönüş DTO'sunu döner — alt akışa girdi YALNIZ rule.expression ile geçer, nesne literalinin anahtarları bu parameterScheme'in alanlarıdır (WF-032; platform_guide('workflow') §Workflow adımı). ŞEMA ALAN ADLARINI VERİR, HANGİ ALANIN ÇALIŞTIĞINI DEĞİL — üç ölçülmüş sapma (2026-09-16): (1) 'http' adımının returnScheme'i kök seviyede { httpStatusCode, data } der, koşumda ise adım { data, meta: { httpStatusCode }, error }'dır, yani <adım>.httpStatusCode UNDEFINED, doğrusu <adım>.meta.httpStatusCode; (2) 'workflow' adımında workflowId boşken parameterScheme/returnScheme boş döner ve şema girdinin rule.expression ile bağlandığını söylemez; (3) 'email' adımında şemanın gösterdiği alıcı adı çalışmaz (36/W-6). Sözleşmenin ölçülmüş hâli: ngapps://examples/workflow-http-step · workflow-call-workflow · workflow-loop-step ve platform_guide('workflow').",
|
|
217
217
|
inputSchema: { project: projectParam, environment: environmentParam, applicationId: guid, id: guid, step: definitionParam },
|
|
218
218
|
annotations: readOnly
|
|
219
219
|
}, handle(config, ({ project, environment, applicationId, id, step }) => platform.tenant('POST', project, `/workflows/${applicationId}/${id}/steps/schema`, { environment, body: step })));
|
package/package.json
CHANGED