@appaflytech/zeyrek-ai-mcp 0.0.5 → 0.0.7
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/.env.example +2 -2
- package/.env.production.example +9 -1
- package/README.md +14 -38
- package/dist/config.js +36 -3
- package/dist/knowledge/backendConstraints.js +982 -0
- package/dist/knowledge/componentCatalog.js +549 -92
- package/dist/knowledge/componentEvents.js +120 -25
- package/dist/knowledge/coverage.js +43 -0
- package/dist/knowledge/flowGuards.js +30 -0
- package/dist/knowledge/functionGuards.js +134 -0
- package/dist/knowledge/guideSections.js +49 -0
- package/dist/knowledge/hydrate.js +97 -0
- package/dist/knowledge/languageCodes.js +36 -0
- package/dist/knowledge/languages.js +105 -0
- package/dist/knowledge/layoutSummary.js +10 -0
- package/dist/knowledge/localization.js +51 -0
- package/dist/knowledge/normalize.js +500 -16
- package/dist/knowledge/outlines.js +167 -12
- package/dist/knowledge/policy.js +14 -5
- package/dist/knowledge/propTypes.js +80 -0
- package/dist/knowledge/rules.js +961 -44
- package/dist/knowledge/schemaGuard.js +199 -0
- package/dist/knowledge/styleResolve.js +63 -4
- package/dist/observability/trace.js +27 -3
- package/dist/platform/csv.js +123 -0
- package/dist/platform/errors.js +107 -6
- package/dist/platform/http.js +34 -4
- package/dist/platform/patch.js +27 -0
- package/dist/platform/refs.js +104 -0
- package/dist/platform/responses.js +25 -6
- package/dist/platform/screenshot.js +544 -16
- package/dist/platform/secrets.js +40 -0
- package/dist/platform/tokenVault.js +89 -0
- package/dist/platform/writeDiff.js +281 -0
- package/dist/resources/examples/flow-call-function.json +66 -0
- package/dist/resources/examples/function-total.json +70 -0
- package/dist/resources/examples/layout-app-shell.json +1 -1
- package/dist/resources/examples/microfunction-node-sum.json +56 -0
- package/dist/resources/examples/microservice-table-list.json +2 -4
- package/dist/resources/examples/page-dynamic-form.json +3 -3
- package/dist/resources/examples/page-flex-sections.json +99 -0
- package/dist/resources/examples/page-sign-in.json +4 -3
- package/dist/resources/guides/component.md +81 -8
- package/dist/resources/guides/entity.md +712 -20
- package/dist/resources/guides/expressions.md +47 -2
- package/dist/resources/guides/external-component.md +9 -0
- package/dist/resources/guides/functions.md +262 -0
- package/dist/resources/guides/getting-started.md +82 -7
- package/dist/resources/guides/layout.md +53 -10
- package/dist/resources/guides/merge.md +231 -0
- package/dist/resources/guides/microfunction.md +166 -0
- package/dist/resources/guides/microservice.md +287 -15
- package/dist/resources/guides/middleware.md +89 -1
- package/dist/resources/guides/modify-existing.md +23 -0
- package/dist/resources/guides/page.md +402 -49
- package/dist/resources/guides/translation.md +150 -8
- package/dist/resources/guides/view.md +16 -1
- package/dist/resources/guides/workflow.md +199 -28
- package/dist/resources/knowledge.js +5 -0
- package/dist/resources/rules.js +27 -0
- package/dist/resources/schema-fingerprint.json +8 -0
- package/dist/resources/schemas/AnalyzeImportQuery.json +51 -0
- package/dist/resources/schemas/ApplyMergePlanCommand.json +19 -0
- package/dist/resources/schemas/CreateBulkRowCommand.json +36 -0
- package/dist/resources/schemas/CreateDatasourceCommand.json +15 -6
- package/dist/resources/schemas/CreateDiscoveredEntitiesCommand.json +19 -8
- package/dist/resources/schemas/CreateEntityCommand.json +52 -12
- package/dist/resources/schemas/CreateEnvironmentCommand.json +31 -0
- package/dist/resources/schemas/CreateGlobalFunctionCommand.json +95 -0
- package/dist/resources/schemas/CreateImportPlanCommand.json +278 -0
- package/dist/resources/schemas/CreateMergePlanCommand.json +34 -0
- package/dist/resources/schemas/CreateMicrofunctionCommand.json +117 -0
- package/dist/resources/schemas/CreateMicrofunctionRuntimeCommand.json +51 -0
- package/dist/resources/schemas/CreateMicroserviceCommand.json +145 -3
- package/dist/resources/schemas/CreateQueryCommand.json +56 -3
- package/dist/resources/schemas/CreateRowCommand.json +38 -0
- package/dist/resources/schemas/CreateViewCommand.json +13 -10
- package/dist/resources/schemas/CreateWorkflowCommand.json +106 -14
- package/dist/resources/schemas/DataJobDto.json +267 -0
- package/dist/resources/schemas/ExportRowsCommand.json +172 -0
- package/dist/resources/schemas/Filter.json +3 -1
- package/dist/resources/schemas/GetRowsQuery.json +6 -1
- package/dist/resources/schemas/GlobalFunctionDto.json +89 -0
- package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +249 -0
- package/dist/resources/schemas/ImportAnalysisDto.json +401 -0
- package/dist/resources/schemas/ImportPlanDto.json +260 -0
- package/dist/resources/schemas/ImportSampleDto.json +90 -0
- package/dist/resources/schemas/InvokeMicrofunctionCommand.json +25 -0
- package/dist/resources/schemas/PreviewMicroserviceCommand.json +135 -1
- package/dist/resources/schemas/PreviewQueryCommand.json +5 -2
- package/dist/resources/schemas/PreviewWorkflowCommand.json +45 -9
- package/dist/resources/schemas/ResolveMergeConflictsCommand.json +58 -0
- package/dist/resources/schemas/RevertMergePlanCommand.json +19 -0
- package/dist/resources/schemas/RunImportCommand.json +62 -0
- package/dist/resources/schemas/StepDto.json +34 -3
- package/dist/resources/schemas/UpdateBulkRowCommand.json +36 -0
- package/dist/resources/schemas/UpdateDatasourceCommand.json +15 -6
- package/dist/resources/schemas/UpdateEntityCommand.json +52 -11
- package/dist/resources/schemas/UpdateGlobalFunctionCommand.json +66 -0
- package/dist/resources/schemas/UpdateMicrofunctionCommand.json +121 -0
- package/dist/resources/schemas/UpdateMicrofunctionRuntimeCommand.json +54 -0
- package/dist/resources/schemas/UpdateMicroserviceCommand.json +147 -4
- package/dist/resources/schemas/UpdateQueryCommand.json +13 -3
- package/dist/resources/schemas/UpdateRowCommand.json +40 -0
- package/dist/resources/schemas/UpdateViewCommand.json +15 -10
- package/dist/resources/schemas/UpdateWorkflowCommand.json +106 -14
- package/dist/server.js +17 -1
- package/dist/tools/access.js +3 -3
- package/dist/tools/activities.js +40 -0
- package/dist/tools/applications.js +1 -1
- package/dist/tools/automations.js +76 -34
- package/dist/tools/common.js +55 -0
- package/dist/tools/components.js +16 -7
- package/dist/tools/datasources.js +83 -21
- package/dist/tools/dependencies.js +1 -1
- package/dist/tools/deployments.js +34 -2
- package/dist/tools/dtos.js +25 -12
- package/dist/tools/entities.js +113 -28
- package/dist/tools/environments.js +52 -0
- package/dist/tools/externalComponents.js +9 -3
- package/dist/tools/files.js +57 -42
- package/dist/tools/flows.js +205 -13
- package/dist/tools/folders.js +7 -2
- package/dist/tools/functions.js +331 -0
- package/dist/tools/globalFunctions.js +63 -0
- package/dist/tools/importSchemas.js +79 -0
- package/dist/tools/imports.js +241 -0
- package/dist/tools/layouts.js +103 -29
- package/dist/tools/merges.js +113 -0
- package/dist/tools/microfunctions.js +155 -0
- package/dist/tools/microservices.js +270 -40
- package/dist/tools/organizations.js +5 -6
- package/dist/tools/pages.js +421 -104
- package/dist/tools/platformInfo.js +155 -11
- package/dist/tools/projects.js +183 -33
- package/dist/tools/queries.js +32 -10
- package/dist/tools/revisions.js +94 -0
- package/dist/tools/rows.js +484 -50
- package/dist/tools/screenWrite.js +68 -0
- package/dist/tools/screens.js +28 -0
- package/dist/tools/templates.js +32 -5
- package/dist/tools/translations.js +24 -8
- package/dist/tools/views.js +20 -10
- package/dist/tools/workflows.js +56 -21
- package/package.json +7 -2
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Projenin dil durumunu `project_get` / `/p/{slug}` yanıtından okur.
|
|
3
|
+
*
|
|
4
|
+
* `ProjectDto.Languages` null alanları serileştirmede DÜŞÜYOR: dili kurulmamış projede yanıtta
|
|
5
|
+
* `languages` diye bir anahtar hiç yok — "boş liste" bile görünmüyor (canlı doğrulama 2026-09-09,
|
|
6
|
+
* `mcp-benchmark-2026-09-09`). Ajan bu yüzden eksikliği fark edemiyordu; yokluk ile boş dizi
|
|
7
|
+
* runtime açısından aynı şeydir ve burada aynı şekilde temsil edilir.
|
|
8
|
+
*
|
|
9
|
+
* Alan var ama beklenmedik şekildeyse (dizi değilse) `undefined` döner: gateway o durumda
|
|
10
|
+
* SUSAR, "dil yok" diye uydurmaz.
|
|
11
|
+
*/
|
|
12
|
+
export function readProjectLanguages(payload) {
|
|
13
|
+
const data = payload?.data;
|
|
14
|
+
if (!data || typeof data !== 'object')
|
|
15
|
+
return undefined;
|
|
16
|
+
const record = data;
|
|
17
|
+
const raw = record.languages;
|
|
18
|
+
if (raw !== undefined && raw !== null && !Array.isArray(raw))
|
|
19
|
+
return undefined;
|
|
20
|
+
const languages = Array.isArray(raw) ? raw.filter((entry) => typeof entry === 'string') : [];
|
|
21
|
+
const defaultLanguage = typeof record.defaultLanguage === 'string' && record.defaultLanguage !== ''
|
|
22
|
+
? record.defaultLanguage
|
|
23
|
+
: undefined;
|
|
24
|
+
return { languages, defaultLanguage };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Dil verilmeden açılan projeye gateway'in tohumladığı ayar.
|
|
28
|
+
*
|
|
29
|
+
* Backend'in create ucu (`CreateOrganizationProjectCommand`) `Languages`/`DefaultLanguage` alanı
|
|
30
|
+
* TAŞIMAZ: proje ikisi de `null` doğar ve o hâlde yazılan her çeviri runtime'da ham anahtar olarak
|
|
31
|
+
* çizilir (`S-15`). Tohum bu durumu doğuştan imkânsız kılar.
|
|
32
|
+
*
|
|
33
|
+
* TEK DİL: ikinci bir dil tohumlamak `language-selector`'ı her yeni uygulamada iki seçenekle
|
|
34
|
+
* çizerdi ve ikincisi hep boş olurdu. Çok dilli uygulama kuran çağıran `languages`'ı açıkça verir.
|
|
35
|
+
*
|
|
36
|
+
* Backend de aynı tohumu kendi kurucusunda yazıyor (`ProjectConstants.DefaultLanguages`), ama o
|
|
37
|
+
* değişiklik dağıtılana kadar çalışan platform hâlâ dilsiz proje doğuruyor — gateway bu yüzden
|
|
38
|
+
* tohumu koşulsuz yazar. İki taraf aynı değeri tuttuğu için fazladan PUT zararsızdır; backend
|
|
39
|
+
* sürümü kesinleştiğinde bu adım yalnız `languages` açıkça verildiğinde koşacak şekilde daraltılır.
|
|
40
|
+
*/
|
|
41
|
+
export const SEED_LANGUAGES = ['en'];
|
|
42
|
+
export const SEED_DEFAULT_LANGUAGE = 'en';
|
|
43
|
+
/**
|
|
44
|
+
* Çağıranın verdiğini olduğu gibi kullanır, eksiği tamamlar, hiçbiri yoksa tohumu döndürür.
|
|
45
|
+
* `defaultLanguage` her zaman `languages` içindedir — PRJ-002 bunu 422 ile zorunlu tutuyor.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveSeedLanguages(languages, defaultLanguage) {
|
|
48
|
+
if (!languages?.length && defaultLanguage === undefined) {
|
|
49
|
+
return { languages: SEED_LANGUAGES, defaultLanguage: SEED_DEFAULT_LANGUAGE, seeded: true };
|
|
50
|
+
}
|
|
51
|
+
const resolved = languages?.length ? languages : [defaultLanguage];
|
|
52
|
+
return { languages: resolved, defaultLanguage: defaultLanguage ?? resolved[0], seeded: false };
|
|
53
|
+
}
|
|
54
|
+
/** Runtime'ın çeviri çözümü kayıtlı bir aktif dil ya da varsayılan dil olmadan anahtara düşer. */
|
|
55
|
+
export function runtimeResolvesTranslations(state) {
|
|
56
|
+
return state.languages.length > 0 && state.defaultLanguage !== undefined;
|
|
57
|
+
}
|
|
58
|
+
const CHAIN = "runtime aktif dil → varsayılan dil → ANAHTARIN KENDİSİ zincirini izler (zeyrek-frontend/packages/ng-apps-screen-builder/src/translation.functions.ts, resolveTranslation); ilk iki halka boşsa ekrana çeviri değil ham anahtar basılır";
|
|
59
|
+
const WHY_SILENT = "Backend dil kodunu yalnız 184 kodluk ISO sözlüğüne göre doğruluyor (TR-001, ProjectConstants.SupportedLanguages), projenin kendi languages listesine göre DEĞİL — yazma bu yüzden 200 dönüyor ve hiçbir katman uyarmıyor.";
|
|
60
|
+
function quoted(codes) {
|
|
61
|
+
return codes.map(code => `'${code}'`).join(', ');
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* TR-002 — çeviri yazmasını projenin dil listesine bağlar.
|
|
65
|
+
*
|
|
66
|
+
* Ölçüm: 2026-09-09 1. koşu `S-15`. 15 anahtar × 2 dil yazıldı (200), 15 prop `translation` tipine
|
|
67
|
+
* bağlandı (200), şema doğru kuruldu — ama proje `languages` taşımadığı için runtime her etiketi
|
|
68
|
+
* ham anahtar olarak çizdi. Koşunun en pahalı sessiz düşmesiydi: yalnız ekrana bakınca görülüyor,
|
|
69
|
+
* rubrikte yanlış "tam" puanına mal oldu. Kontrol yazmayı DURDURMAZ (satırlar geçerli ve sonradan
|
|
70
|
+
* çözülebilir hale gelir), yüksek sesle söyler.
|
|
71
|
+
*/
|
|
72
|
+
export function translationLanguageFindings(state, writtenCodes, projectSlug) {
|
|
73
|
+
const codes = [...new Set(writtenCodes)].sort();
|
|
74
|
+
// Proje okunamadıysa ya da çağrı yalnız silme yapıyorsa söylenecek bir şey yok.
|
|
75
|
+
if (!state || codes.length === 0)
|
|
76
|
+
return [];
|
|
77
|
+
const guide = 'ngapps://guides/translation';
|
|
78
|
+
if (state.languages.length === 0) {
|
|
79
|
+
return [{
|
|
80
|
+
ruleId: 'TR-002',
|
|
81
|
+
severity: 'warn',
|
|
82
|
+
message: `'${projectSlug}' projesinde 'languages' listesi TANIMLI DEĞİL: bu yazma platformda başarılı olacak ve satırlar veritabanına düşecek ama RUNTIME HİÇBİRİNİ ÇÖZEMEYECEK — ${CHAIN}. Yazılan kod: ${quoted(codes)}. Düzeltme (yazmadan önce ya da hemen sonra): project_update(id, languages: [${quoted(codes)}], defaultLanguage: '${codes[0]}'). ${WHY_SILENT}`,
|
|
83
|
+
guide
|
|
84
|
+
}];
|
|
85
|
+
}
|
|
86
|
+
const findings = [];
|
|
87
|
+
const undeclared = codes.filter(code => !state.languages.includes(code));
|
|
88
|
+
if (undeclared.length > 0) {
|
|
89
|
+
findings.push({
|
|
90
|
+
ruleId: 'TR-002',
|
|
91
|
+
severity: 'warn',
|
|
92
|
+
message: `${quoted(undeclared)} kodu '${projectSlug}' projesinin languages listesinde yok (tanımlı: ${quoted(state.languages)}): satırlar yazılır ama runtime o dile hiç geçemez, o dil seçiliyken ${CHAIN}. Düzeltme: project_update(id, languages: [${quoted([...state.languages, ...undeclared])}]). ${WHY_SILENT}`,
|
|
93
|
+
guide
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (state.defaultLanguage === undefined) {
|
|
97
|
+
findings.push({
|
|
98
|
+
ruleId: 'TR-002',
|
|
99
|
+
severity: 'warn',
|
|
100
|
+
message: `'${projectSlug}' projesinde languages kurulu (${quoted(state.languages)}) ama 'defaultLanguage' YOK: runtime kayıtlı bir dil seçimi bulamadığında varsayılana düşer, o da boş olduğu için aktif dil hiç seçilmez ve ilk açılışta her etiket ham anahtar olarak çizilir. Düzeltme: project_update(id, defaultLanguage: '${state.languages[0]}').`,
|
|
101
|
+
guide
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return findings;
|
|
105
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function summarizeLayout(boxes, viewport) {
|
|
2
|
+
const outside = (box) => box.x + box.width <= 0 || box.y + box.height <= 0 || box.x >= viewport.width || box.y >= viewport.height;
|
|
3
|
+
return {
|
|
4
|
+
nodeCount: boxes.length,
|
|
5
|
+
overflowing: boxes.filter(box => box.overflowX || box.overflowY).map(box => box.elementId),
|
|
6
|
+
outsideViewport: boxes.filter(box => box.width > 0 && box.height > 0 && outside(box)).map(box => box.elementId),
|
|
7
|
+
zeroSized: boxes.filter(box => box.width === 0 || box.height === 0).map(box => box.elementId),
|
|
8
|
+
truncated: boxes.length >= 500
|
|
9
|
+
};
|
|
10
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { RefResolveError } from '../platform/refs.js';
|
|
2
|
+
/**
|
|
3
|
+
* FK slug'ı TAHMİN EDİLMEZ: rehber "satırı elle kurmadan önce mutlaka entity_get ile doğrula"
|
|
4
|
+
* diyor, gateway de aynısını yapar — companion'ın alanları arasında `relationId` ana entity'ye
|
|
5
|
+
* işaret edeni arar. Eşleşme yoksa uydurulmuş bir slug'la yanlış satır yazmaktansa hata verilir.
|
|
6
|
+
*/
|
|
7
|
+
export async function findLocalizationCompanion(resolver, main) {
|
|
8
|
+
const companionSlug = `${main.slug}_localization`;
|
|
9
|
+
// Bağ ÖNCE id'den okunur: ad kalıbı ('{slug}_localization') platformun ürettiği kolaylıktır,
|
|
10
|
+
// sözleşme değil — companion yeniden adlandırılırsa slug yolu "companion yok" der ve ajan var
|
|
11
|
+
// olan bir entity'yi yeniden kurmaya çalışır. `localizationEntityId` entity'nin kendi alanıdır
|
|
12
|
+
// (b-03) ve entity_get onu döndürür; eski platform sürümünde boş gelir, o zaman slug yoluna
|
|
13
|
+
// düşülür.
|
|
14
|
+
const linkedId = await resolver.entityRecord(main)
|
|
15
|
+
.then(record => {
|
|
16
|
+
const value = record.localizationEntityId;
|
|
17
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
18
|
+
})
|
|
19
|
+
.catch(() => undefined);
|
|
20
|
+
const companion = await (linkedId ? resolver.entity(linkedId) : Promise.reject(new RefResolveError('link yok')))
|
|
21
|
+
.catch(() => resolver.entity(companionSlug))
|
|
22
|
+
.catch((error) => {
|
|
23
|
+
// YALNIZ "yok" hâli dostane mesaja çevrilir; belirsizlik / HTTP / yetki hataları olduğu gibi
|
|
24
|
+
// geçer — hepsini "companion yok" diye yutmak ajana var olan bir entity'yi kurdurur.
|
|
25
|
+
if (error instanceof RefResolveError && /diye bir entity yok/.test(error.message)) {
|
|
26
|
+
throw new RefResolveError(`'${main.slug}' için companion entity yok — entity'de isLocalized alan yok ya da companion henüz kurulmadı (ne 'localizationEntityId' bağı ne de '${companionSlug}' adı bulundu). platform_guide('entity') §'Çoklu dilli alan'.`);
|
|
27
|
+
}
|
|
28
|
+
throw error;
|
|
29
|
+
});
|
|
30
|
+
const fields = await resolver.entityFields(companion);
|
|
31
|
+
const candidates = fields.filter(field => field.relationType !== 'none' && field.relationId === main.entityId);
|
|
32
|
+
const [fk] = candidates;
|
|
33
|
+
if (!fk) {
|
|
34
|
+
throw new RefResolveError(`'${companionSlug}' içinde relationId '${main.entityId}' olan bir ilişki alanı yok; FK tahmin edilmez. Alanlar: ${fields.map(field => field.slug).join(', ')}`);
|
|
35
|
+
}
|
|
36
|
+
if (candidates.length > 1) {
|
|
37
|
+
throw new RefResolveError(`'${companionSlug}' içinde '${main.slug}'a işaret eden birden çok ilişki alanı var (${candidates.map(field => field.slug).join(', ')}); hangisinin FK olduğu tahmin edilmez — dil satırlarını row_create ile elle yazın.`);
|
|
38
|
+
}
|
|
39
|
+
return { entityId: companion.entityId, datasourceId: companion.datasourceId, slug: companion.slug, fkSlug: fk.slug, languageSlug: 'language' };
|
|
40
|
+
}
|
|
41
|
+
export function localizationRows(companion, mainRowId, localizations) {
|
|
42
|
+
return Object.entries(localizations).map(([language, values]) => ({ [companion.fkSlug]: mainRowId, [companion.languageSlug]: language, ...values }));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Platform tanımadığı gövde alanını SESSİZCE düşürür; `X-Unmapped-Members` üretim dışı ortamda
|
|
46
|
+
* ilk tanınmayan alanın JSON yolunu döner. `localizations` orada görünüyorsa platform b-07 öncesi
|
|
47
|
+
* sürümdedir ve dil satırları hiç yazılmamıştır — gateway o zaman companion'a kendisi yazar.
|
|
48
|
+
*/
|
|
49
|
+
export function platformIgnoredLocalizations(headers) {
|
|
50
|
+
return (headers['x-unmapped-members'] ?? '').split(/[.,\s]+/).some(segment => segment.toLowerCase() === 'localizations');
|
|
51
|
+
}
|