@appaflytech/zeyrek-ai-mcp 0.0.23 → 0.0.24
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 +15 -0
- package/dist/config.js +9 -0
- package/dist/index.js +2 -0
- package/dist/knowledge/componentCatalog.js +1 -1
- package/dist/knowledge/mobileComponentCatalog.js +231 -58
- package/dist/knowledge/mobileComponentEvents.js +118 -3
- package/dist/knowledge/normalize.js +16 -6
- package/dist/knowledge/platform/lint.js +110 -3
- package/dist/knowledge/platform/mobileRules.js +64 -8
- package/dist/knowledge/rules.js +56 -7
- package/dist/knowledge/styleResolve.js +49 -3
- package/dist/knowledge/styleResolveNative.js +104 -4
- package/dist/observability/trace.js +1 -1
- package/dist/platform/argumentAliases.js +128 -0
- package/dist/platform/bodyFile.js +103 -0
- package/dist/platform/capture/capture.js +29 -5
- package/dist/platform/capture/console-log.js +80 -0
- package/dist/platform/capture/index.js +1 -0
- package/dist/platform/diagnostics.js +10 -4
- package/dist/platform/http.js +23 -7
- package/dist/platform/responses.js +6 -2
- package/dist/platform/schemaReadMemory.js +60 -0
- package/dist/platform/secrets.js +9 -0
- package/dist/platform/strictArguments.js +68 -12
- package/dist/platform/tokenVault.js +187 -4
- package/dist/resources/guides/expressions.md +1 -1
- package/dist/resources/guides/microservice.md +9 -2
- package/dist/resources/guides/middleware.md +5 -1
- package/dist/resources/guides/mobile.md +150 -14
- package/dist/resources/guides/page.md +146 -39
- package/dist/resources/guides/theme.md +4 -1
- package/dist/resources/guides/workflow.md +7 -1
- package/dist/resources/schema-fingerprint.json +2 -2
- package/dist/server.js +1 -1
- package/dist/tools/datasources.js +1 -1
- package/dist/tools/designSchemaPatch.js +4 -3
- package/dist/tools/externalComponents.js +1 -1
- package/dist/tools/flows.js +70 -4
- package/dist/tools/layouts.js +5 -5
- package/dist/tools/microservices.js +26 -10
- package/dist/tools/pages.js +192 -36
- package/dist/tools/platformInfo.js +4 -1
- package/dist/tools/rows.js +7 -1
- package/dist/tools/schemaOps.js +1 -1
- package/dist/tools/screenWrite.js +4 -3
- package/dist/tools/screens.js +81 -0
- package/package.json +1 -1
package/.env.example
CHANGED
|
@@ -51,6 +51,21 @@ REQUEST_TIMEOUT_MS=100000
|
|
|
51
51
|
STUDIO_BASE_URL=http://localhost:3000
|
|
52
52
|
SCREENSHOT_BROWSER_PATH=
|
|
53
53
|
|
|
54
|
+
# Jeton kasasi (g-09): MCP_STATE_DIR verilirse tok_ referanslari ve test kullanicisi jetonlari
|
|
55
|
+
# <dizin>/token-vault.json'a (0600) yazilir ve gateway yeniden baslayinca da cozulur. Yalniz lokal
|
|
56
|
+
# hedefte (ORG_API_BASE_URL localhost) yazilir. MCP_TOKEN_TTL_MINUTES referansin omru (dakika).
|
|
57
|
+
MCP_STATE_DIR=
|
|
58
|
+
MCP_TOKEN_TTL_MINUTES=60
|
|
59
|
+
|
|
60
|
+
# asUser: 'test:<ad>' icin test kullanicilari — satiri INSAN yazar, AI .env'i duzenlemez.
|
|
61
|
+
# Bicim (JSON, tek satir): uygulamanin kendi giris ucu ve onun bekledigi govde. Ayrinti: docs/ortam.md
|
|
62
|
+
# MCP_TEST_USER_OGRENCI={"application":"<uygulama slug>","microservice":"<giris ucu slug>","body":{"email":"…","password":"…"}}
|
|
63
|
+
|
|
64
|
+
# bodyFile icin: tanim yazan araclarin (page_create, flow_create, microservice_create, *_patch …)
|
|
65
|
+
# govdeyi okuyabilecegi ek dizin. Gateway surecinin calisma dizini her zaman izinlidir; bu dizin
|
|
66
|
+
# ek olarak izinli olur. Bos birakilirsa yalniz calisma dizini okunur. Sembolik bag cozulur.
|
|
67
|
+
MCP_INPUT_DIR=
|
|
68
|
+
|
|
54
69
|
# generate-schemas icin swagger adresleri. Bos birakilirsa sirayla denenir:
|
|
55
70
|
# 1) asagidaki override, 2) {API_BASE_URL}/swagger/v1/swagger.json, 3) localhost:3000 frontend proxy'si
|
|
56
71
|
ORG_SWAGGER_URL=
|
package/dist/config.js
CHANGED
|
@@ -120,6 +120,9 @@ const environmentSchema = z.object({
|
|
|
120
120
|
STUDIO_BASE_URL: z.string().url().optional(),
|
|
121
121
|
SCREENSHOT_BROWSER_PATH: z.string().min(1).optional(),
|
|
122
122
|
SCREENSHOT_QUEUE_WAIT_MS: z.coerce.number().int().positive().default(120000),
|
|
123
|
+
MCP_INPUT_DIR: z.string().min(1).optional(),
|
|
124
|
+
MCP_STATE_DIR: z.string().min(1).optional(),
|
|
125
|
+
MCP_TOKEN_TTL_MINUTES: z.coerce.number().int().positive().optional(),
|
|
123
126
|
});
|
|
124
127
|
export const environmentKeys = Object.keys(environmentSchema.shape);
|
|
125
128
|
/**
|
|
@@ -228,5 +231,11 @@ export function loadConfig(env) {
|
|
|
228
231
|
studioBaseUrl: values.STUDIO_BASE_URL?.replace(/\/+$/, ""),
|
|
229
232
|
screenshotBrowserPath: values.SCREENSHOT_BROWSER_PATH,
|
|
230
233
|
screenshotQueueWaitMs: values.SCREENSHOT_QUEUE_WAIT_MS,
|
|
234
|
+
inputDirectory: values.MCP_INPUT_DIR,
|
|
235
|
+
stateDirectory: values.MCP_STATE_DIR,
|
|
236
|
+
tokenTtlMinutes: values.MCP_TOKEN_TTL_MINUTES,
|
|
237
|
+
testUsers: Object.fromEntries(Object.entries(env)
|
|
238
|
+
.filter((entry) => entry[0].startsWith("MCP_TEST_USER_") && typeof entry[1] === "string" && entry[1] !== "")
|
|
239
|
+
.map(([key, value]) => [key.slice("MCP_TEST_USER_".length).toLowerCase(), value])),
|
|
231
240
|
};
|
|
232
241
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
3
3
|
import { configureLogging, logGatewayEvent } from './observability/trace.js';
|
|
4
|
+
import { configureTokenVault } from './platform/tokenVault.js';
|
|
4
5
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
5
6
|
import { Platform, requestAuthStorage } from './platform/http.js';
|
|
6
7
|
import { createGatewayServer } from './server.js';
|
|
@@ -31,6 +32,7 @@ catch (error) {
|
|
|
31
32
|
const platform = new Platform(config);
|
|
32
33
|
const useStdio = process.argv.includes('--stdio');
|
|
33
34
|
configureLogging(config, useStdio ? 'stdio' : 'http');
|
|
35
|
+
configureTokenVault(config);
|
|
34
36
|
if (useStdio) {
|
|
35
37
|
if (config.authMode === 'passthrough') {
|
|
36
38
|
logger.error('stdio kipi passthrough auth ile kullanılamaz; AUTH_MODE=local yapın.');
|
|
@@ -32,7 +32,7 @@ export const TABLE_COLUMN_TYPE_NOTE = "KOLON TİPİ SÖZLÜĞÜ (bekler → çiz
|
|
|
32
32
|
"tags: [{ value, color }] dizisi ya da metin dizisi → çok rozet, renk SATIR VERİSİNDEN (serbest hex burada geçer), sığmayanlar +N ile toplanır. " +
|
|
33
33
|
"action: veri kolonu DEĞİL — aksiyon sütunu ayrı çizilir; kolon tanımında seçilirse ham değer metin olarak görünür.";
|
|
34
34
|
export const STYLE_GROUP_NOTES = {
|
|
35
|
-
surfaceStyle: "{ background, radius, borderTop, borderRight, borderBottom, borderLeft, shadow, contentOverflow(visible|hidden|auto), opacity(0–100 yüzde; 100/boş yazılmaz) }. radius: tema kademesi ('var(--ng-radius-md)'; sm/lg 'Border radius'un oranı, md temanın kendisi), tek uzunluk ('18px') YA DA dört köşe ('90px 14px 14px 14px' — sol-üst, sağ-üst, sağ-alt, sol-alt). KENARLIK YÖN BAŞINADIR: her yön kendi CSS kısayolunu taşır ('1px solid var(--ng-border-primary)'), 'none' o kenarı kapatır; eski borderWidth/borderStyle/borderColor üçlüsü EMEKLİ (yalnız hiçbir yön yazılmamışsa okunur). shadow: çok katmanlı `box-shadow` metni ('0px 2px 5px 0px rgba(0,0,0,.2), inset 8px 5px 7px 0px #000'), tema token'ı ('var(--ng-shadow-md)') ya da eski preset anahtarı (none|sm|md|lg).",
|
|
35
|
+
surfaceStyle: "{ background, radius, borderTop, borderRight, borderBottom, borderLeft, shadow, contentOverflow(visible|hidden|auto), opacity(0–100 yüzde; 100/boş yazılmaz), rotate(derece, −360…360), scale(YÜZDE 10–500; 100 aynı boy ve varsayılan — 1.1 değil 110), translateX/translateY(px, −1000…1000) }. radius: tema kademesi ('var(--ng-radius-md)'; sm/lg 'Border radius'un oranı, md temanın kendisi), tek uzunluk ('18px') YA DA dört köşe ('90px 14px 14px 14px' — sol-üst, sağ-üst, sağ-alt, sol-alt). KENARLIK YÖN BAŞINADIR: her yön kendi CSS kısayolunu taşır ('1px solid var(--ng-border-primary)'), 'none' o kenarı kapatır; eski borderWidth/borderStyle/borderColor üçlüsü EMEKLİ (yalnız hiçbir yön yazılmamışsa okunur). shadow: çok katmanlı `box-shadow` metni ('0px 2px 5px 0px rgba(0,0,0,.2), inset 8px 5px 7px 0px #000'), tema token'ı ('var(--ng-shadow-md)') ya da eski preset anahtarı (none|sm|md|lg). DÖNDÜR/ÖLÇEKLE/KAYDIR (ADR 0005): dört alan TEK transform'a derlenir — sıra kaydır → döndür → ölçekle, köken merkez, düğüm çocuklarıyla döner; nötr değer (0°, 100, 0 px) hiçbir şey yazmaz. Değer BİRİMSİZ sayıdır ('15deg', '20px', '110%' yazılmaz) ve aralık dışı yazılmaz — mobilde ikisi de nativeStyle.warnings'e düşer. Transform'lu düğümün İÇİNDEKİ portal açmayan açılır menü/liste düğümün kutusuna hapsolur. hoverStyle.lift düğümün transform'unu ezmez, önüne eklenir. Katmanlar (modal, drawer, popover) ve uygulama kabukları (layout, layout-region, layout-shell, auth-layout, qm-content, qm-sidebar) bu dört alanı TAŞIMAZ: transform'lu ata position:fixed katmanı ekrandan koparır. Döndürmeyi serbest style.transform'a yazma — mobil yalnız tipli alanı çizer (MOB-002).",
|
|
36
36
|
typographyStyle: "{ textColor, fontFamily('var(--ng-font)' tema gövde | 'var(--ng-font-heading)' tema başlık | 'monospace' — token tema fontunu izler; serbest Google fontu yazma, tema yüklemez ve sessizce düşer), fontSize(CSS uzunluğu: '15px'|'1.1em'; çıplak sayı px sayılır), fontWeight(400|500|600|700), fontStyle(normal|italic), textDecoration(none|underline|line-through), lineHeight(TEK alan, üç yazım: oran '1.4' | yüzde '140%' | uzunluk '24px'; eski kayıtlardaki çıplak 140 yüzde sayılır), letterSpacing(CSS uzunluğu, negatif meşru: '-0.4px'), textAlign(left|center|right|justify) }. Komponentin içeriğine miras kalır.",
|
|
37
37
|
hoverStyle: "{ background, borderColor, shadow(none|sm|md|lg), lift(CSS uzunluğu: '2px'), transitionMs }. Hiçbir alan dolu değilse hover bloğu ve geçiş HİÇ yazılmaz.",
|
|
38
38
|
colorTokens: "RENK ALANLARI (background, textColor, borderColor, hover.background/borderColor) hex kadar tema token'ı da alır: 'var(--ng-accent-primary)', 'var(--ng-status-error)', 'var(--ng-background-inverse)'. Token yazılan alan tema değişince izler, hex yazılan kopar; tasarım sistemi renklerinde ÖNCE token'ı tercih et (studio panelinde aynı seçim tema chip'iyle yapılır).",
|