@appaflytech/zeyrek-ai-mcp 0.0.11 → 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/errorPath.js +48 -5
- package/dist/knowledge/normalize.js +43 -0
- package/dist/knowledge/outlines.js +16 -3
- package/dist/knowledge/rules.js +233 -2
- package/dist/platform/errors.js +76 -1
- package/dist/platform/responses.js +12 -1
- 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 +173 -12
- 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/automations.js +7 -4
- 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 +6 -2
- package/package.json +2 -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 }) => {
|
|
@@ -2,7 +2,7 @@ import { guid, entityRef, resolveEntityId, withResolved, projectParam, environme
|
|
|
2
2
|
import { RefResolver } from '../platform/refs.js';
|
|
3
3
|
import { normalizeWorkflowDefinition, withNormalization } from '../knowledge/normalize.js';
|
|
4
4
|
import { evaluatePolicy, enforcePolicy, attachFindings } from '../knowledge/policy.js';
|
|
5
|
-
import { policyRules, microfunctionStepFindings } from '../knowledge/rules.js';
|
|
5
|
+
import { policyRules, microfunctionStepFindings, workflowStepFindings } from '../knowledge/rules.js';
|
|
6
6
|
import { languageHeader } from '../knowledge/languageCodes.js';
|
|
7
7
|
import { handle } from '../platform/responses.js';
|
|
8
8
|
import { z } from 'zod';
|
|
@@ -40,7 +40,8 @@ export function registerAutomationTools(server, platform) {
|
|
|
40
40
|
const normalized = normalizeWorkflowDefinition(definition);
|
|
41
41
|
const findings = enforcePolicy([
|
|
42
42
|
...evaluatePolicy(config, policyRules, 'workflow', definition, { operation: 'create', workflowKind: 'automation' }, policyOverride),
|
|
43
|
-
...await microfunctionStepFindings(platform, project, environment, definition, 'automation', policyOverride)
|
|
43
|
+
...await microfunctionStepFindings(platform, project, environment, definition, 'automation', policyOverride),
|
|
44
|
+
...await workflowStepFindings(platform, project, environment, undefined, definition, 'automation', policyOverride)
|
|
44
45
|
]);
|
|
45
46
|
const resolver = new RefResolver(platform, project, environment);
|
|
46
47
|
const resolvedEntityId = await resolveEntityId(resolver, entityId);
|
|
@@ -56,7 +57,8 @@ export function registerAutomationTools(server, platform) {
|
|
|
56
57
|
const normalized = normalizeWorkflowDefinition(definition);
|
|
57
58
|
const findings = enforcePolicy([
|
|
58
59
|
...evaluatePolicy(config, policyRules, 'workflow', definition, { operation: 'update', workflowKind: 'automation' }, policyOverride),
|
|
59
|
-
...await microfunctionStepFindings(platform, project, environment, definition, 'automation', policyOverride)
|
|
60
|
+
...await microfunctionStepFindings(platform, project, environment, definition, 'automation', policyOverride),
|
|
61
|
+
...await workflowStepFindings(platform, project, environment, undefined, definition, 'automation', policyOverride)
|
|
60
62
|
]);
|
|
61
63
|
const resolver = new RefResolver(platform, project, environment);
|
|
62
64
|
const resolvedEntityId = await resolveEntityId(resolver, entityId);
|
|
@@ -135,7 +137,8 @@ export function registerAutomationTools(server, platform) {
|
|
|
135
137
|
const normalized = normalizeWorkflowDefinition(definition);
|
|
136
138
|
const findings = enforcePolicy([
|
|
137
139
|
...evaluatePolicy(config, policyRules, 'workflow', definition, { operation: 'preview', workflowKind: 'automation' }, policyOverride),
|
|
138
|
-
...await microfunctionStepFindings(platform, project, environment, definition, 'automation', policyOverride)
|
|
140
|
+
...await microfunctionStepFindings(platform, project, environment, definition, 'automation', policyOverride),
|
|
141
|
+
...await workflowStepFindings(platform, project, environment, undefined, definition, 'automation', policyOverride)
|
|
139
142
|
]);
|
|
140
143
|
const resolver = new RefResolver(platform, project, environment);
|
|
141
144
|
const resolvedEntityId = await resolveEntityId(resolver, entityId);
|
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
|
@@ -4,7 +4,7 @@ import { evaluatePolicy, enforcePolicy, attachFindings } from '../knowledge/poli
|
|
|
4
4
|
import { workflowOutline, resolvePart, resolvePatchOperations } from '../knowledge/outlines.js';
|
|
5
5
|
import { patchResult, baseVersionOf } from '../platform/patch.js';
|
|
6
6
|
import { writeDiff, withWriteDiff } from '../platform/writeDiff.js';
|
|
7
|
-
import { policyRules, microfunctionStepFindings, undefinedInputFieldFindings } from '../knowledge/rules.js';
|
|
7
|
+
import { policyRules, microfunctionStepFindings, workflowStepFindings, undefinedInputFieldFindings } from '../knowledge/rules.js';
|
|
8
8
|
import { languageHeader } from '../knowledge/languageCodes.js';
|
|
9
9
|
import { handle } from '../platform/responses.js';
|
|
10
10
|
import fastJsonPatch from 'fast-json-patch';
|
|
@@ -119,6 +119,7 @@ export function registerWorkflowTools(server, platform) {
|
|
|
119
119
|
const findings = enforcePolicy([
|
|
120
120
|
...evaluatePolicy(config, policyRules, 'workflow', definition, { operation: 'create', workflowKind: definition.type }, policyOverride),
|
|
121
121
|
...await microfunctionStepFindings(platform, project, environment, definition, definition.type, policyOverride),
|
|
122
|
+
...await workflowStepFindings(platform, project, environment, applicationId, definition, definition.type, policyOverride),
|
|
122
123
|
...await undefinedInputFieldFindings(platform, project, environment, definition, definition.type, policyOverride)
|
|
123
124
|
]);
|
|
124
125
|
const drift = unmappedMembers('CreateWorkflowCommand', definition);
|
|
@@ -135,6 +136,7 @@ export function registerWorkflowTools(server, platform) {
|
|
|
135
136
|
const findings = enforcePolicy([
|
|
136
137
|
...evaluatePolicy(config, policyRules, 'workflow', definition, { operation: 'update', workflowKind: definition.type }, policyOverride),
|
|
137
138
|
...await microfunctionStepFindings(platform, project, environment, definition, definition.type, policyOverride),
|
|
139
|
+
...await workflowStepFindings(platform, project, environment, applicationId, definition, definition.type, policyOverride),
|
|
138
140
|
...await undefinedInputFieldFindings(platform, project, environment, definition, definition.type, policyOverride)
|
|
139
141
|
]);
|
|
140
142
|
const drift = unmappedMembers('UpdateWorkflowCommand', definition);
|
|
@@ -156,6 +158,7 @@ export function registerWorkflowTools(server, platform) {
|
|
|
156
158
|
const findings = enforcePolicy([
|
|
157
159
|
...evaluatePolicy(config, policyRules, 'workflow', patched, { operation: 'update', workflowKind: patched.type }, policyOverride),
|
|
158
160
|
...await microfunctionStepFindings(platform, project, environment, patched, patched.type, policyOverride),
|
|
161
|
+
...await workflowStepFindings(platform, project, environment, applicationId, patched, patched.type, policyOverride),
|
|
159
162
|
...await undefinedInputFieldFindings(platform, project, environment, patched, patched.type, policyOverride)
|
|
160
163
|
]);
|
|
161
164
|
const drift = introducedUnmappedMembers('UpdateWorkflowCommand', (current?.data ?? current), patched);
|
|
@@ -202,6 +205,7 @@ export function registerWorkflowTools(server, platform) {
|
|
|
202
205
|
const findings = enforcePolicy([
|
|
203
206
|
...evaluatePolicy(config, policyRules, 'workflow', definition, { operation: 'preview', workflowKind: definition.type }, policyOverride),
|
|
204
207
|
...await microfunctionStepFindings(platform, project, environment, definition, definition.type, policyOverride),
|
|
208
|
+
...await workflowStepFindings(platform, project, environment, applicationId, definition, definition.type, policyOverride),
|
|
205
209
|
...await undefinedInputFieldFindings(platform, project, environment, definition, definition.type, policyOverride)
|
|
206
210
|
]);
|
|
207
211
|
const payload = await platform.tenant('POST', project, `/workflows/${applicationId}/preview`, { environment, body: definition, headers: languageHeader(language, normalized) });
|
|
@@ -209,7 +213,7 @@ export function registerWorkflowTools(server, platform) {
|
|
|
209
213
|
}));
|
|
210
214
|
server.registerTool('workflow_step_schema', {
|
|
211
215
|
title: 'Step şeması üret',
|
|
212
|
-
description:
|
|
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').",
|
|
213
217
|
inputSchema: { project: projectParam, environment: environmentParam, applicationId: guid, id: guid, step: definitionParam },
|
|
214
218
|
annotations: readOnly
|
|
215
219
|
}, handle(config, ({ project, environment, applicationId, id, step }) => platform.tenant('POST', project, `/workflows/${applicationId}/${id}/steps/schema`, { environment, body: step })));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appaflytech/zeyrek-ai-mcp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
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",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"harvest-examples": "tsx scripts/harvest-examples.ts",
|
|
36
36
|
"kabul:import-adres": "tsx scripts/import-kabul-adres.ts",
|
|
37
37
|
"kabul:import-senaryolar": "tsx scripts/import-kabul-senaryolar.ts",
|
|
38
|
+
"kabul:workflow-hata-zinciri": "tsx scripts/kabul-workflow-hata-zinciri.ts",
|
|
38
39
|
"benchmark:report": "tsx scripts/benchmark-report.ts"
|
|
39
40
|
},
|
|
40
41
|
"dependencies": {
|