@appaflytech/zeyrek-ai-mcp 0.0.6 → 0.0.8

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 (98) hide show
  1. package/.env.example +2 -2
  2. package/.env.production.example +8 -0
  3. package/README.md +9 -8
  4. package/dist/config.js +18 -3
  5. package/dist/knowledge/backendConstraints.js +88 -0
  6. package/dist/knowledge/componentCatalog.js +415 -68
  7. package/dist/knowledge/componentEvents.js +120 -25
  8. package/dist/knowledge/functionGuards.js +134 -0
  9. package/dist/knowledge/normalize.js +512 -25
  10. package/dist/knowledge/outlines.js +31 -0
  11. package/dist/knowledge/policy.js +14 -5
  12. package/dist/knowledge/propTypes.js +5 -4
  13. package/dist/knowledge/rules.js +453 -6
  14. package/dist/knowledge/styleResolve.js +6 -1
  15. package/dist/platform/csv.js +123 -0
  16. package/dist/platform/errors.js +62 -3
  17. package/dist/platform/http.js +11 -2
  18. package/dist/platform/responses.js +16 -4
  19. package/dist/platform/screenshot.js +98 -9
  20. package/dist/platform/strictArguments.js +32 -0
  21. package/dist/platform/writeDiff.js +6 -3
  22. package/dist/resources/examples/flow-call-function.json +66 -0
  23. package/dist/resources/examples/function-total.json +70 -0
  24. package/dist/resources/examples/microfunction-node-sum.json +56 -0
  25. package/dist/resources/examples/page-dynamic-form.json +1 -1
  26. package/dist/resources/examples/page-sign-in.json +2 -2
  27. package/dist/resources/guides/component.md +14 -2
  28. package/dist/resources/guides/entity.md +321 -17
  29. package/dist/resources/guides/expressions.md +9 -0
  30. package/dist/resources/guides/functions.md +262 -0
  31. package/dist/resources/guides/getting-started.md +7 -0
  32. package/dist/resources/guides/layout.md +6 -0
  33. package/dist/resources/guides/merge.md +231 -0
  34. package/dist/resources/guides/microfunction.md +166 -0
  35. package/dist/resources/guides/microservice.md +166 -7
  36. package/dist/resources/guides/modify-existing.md +23 -0
  37. package/dist/resources/guides/page.md +101 -22
  38. package/dist/resources/guides/translation.md +35 -10
  39. package/dist/resources/guides/workflow.md +51 -2
  40. package/dist/resources/schema-fingerprint.json +4 -4
  41. package/dist/resources/schemas/AnalyzeImportQuery.json +51 -0
  42. package/dist/resources/schemas/ApplyMergePlanCommand.json +19 -0
  43. package/dist/resources/schemas/CreateBulkRowCommand.json +3 -0
  44. package/dist/resources/schemas/CreateEnvironmentCommand.json +31 -0
  45. package/dist/resources/schemas/CreateGlobalFunctionCommand.json +95 -0
  46. package/dist/resources/schemas/CreateImportPlanCommand.json +278 -0
  47. package/dist/resources/schemas/CreateMergePlanCommand.json +34 -0
  48. package/dist/resources/schemas/CreateMicrofunctionCommand.json +117 -0
  49. package/dist/resources/schemas/CreateMicrofunctionRuntimeCommand.json +51 -0
  50. package/dist/resources/schemas/CreateMicroserviceCommand.json +123 -2
  51. package/dist/resources/schemas/CreateWorkflowCommand.json +17 -3
  52. package/dist/resources/schemas/DataJobDto.json +267 -0
  53. package/dist/resources/schemas/ExportRowsCommand.json +172 -0
  54. package/dist/resources/schemas/Filter.json +3 -1
  55. package/dist/resources/schemas/GetRowsQuery.json +3 -1
  56. package/dist/resources/schemas/GlobalFunctionDto.json +89 -0
  57. package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +249 -0
  58. package/dist/resources/schemas/ImportAnalysisDto.json +401 -0
  59. package/dist/resources/schemas/ImportPlanDto.json +260 -0
  60. package/dist/resources/schemas/ImportSampleDto.json +90 -0
  61. package/dist/resources/schemas/InvokeMicrofunctionCommand.json +25 -0
  62. package/dist/resources/schemas/PreviewMicroserviceCommand.json +123 -2
  63. package/dist/resources/schemas/PreviewWorkflowCommand.json +17 -3
  64. package/dist/resources/schemas/ResolveMergeConflictsCommand.json +58 -0
  65. package/dist/resources/schemas/RevertMergePlanCommand.json +19 -0
  66. package/dist/resources/schemas/RunImportCommand.json +62 -0
  67. package/dist/resources/schemas/StepDto.json +17 -3
  68. package/dist/resources/schemas/UpdateBulkRowCommand.json +3 -0
  69. package/dist/resources/schemas/UpdateEntityCommand.json +3 -1
  70. package/dist/resources/schemas/UpdateGlobalFunctionCommand.json +66 -0
  71. package/dist/resources/schemas/UpdateMicrofunctionCommand.json +121 -0
  72. package/dist/resources/schemas/UpdateMicrofunctionRuntimeCommand.json +54 -0
  73. package/dist/resources/schemas/UpdateMicroserviceCommand.json +123 -2
  74. package/dist/resources/schemas/UpdateWorkflowCommand.json +17 -3
  75. package/dist/server.js +17 -4
  76. package/dist/tools/activities.js +40 -0
  77. package/dist/tools/automations.js +14 -5
  78. package/dist/tools/common.js +16 -0
  79. package/dist/tools/dependencies.js +1 -1
  80. package/dist/tools/environments.js +52 -0
  81. package/dist/tools/files.js +51 -50
  82. package/dist/tools/flows.js +104 -5
  83. package/dist/tools/functions.js +331 -0
  84. package/dist/tools/importSchemas.js +79 -0
  85. package/dist/tools/imports.js +241 -0
  86. package/dist/tools/layouts.js +4 -4
  87. package/dist/tools/merges.js +113 -0
  88. package/dist/tools/microfunctions.js +155 -0
  89. package/dist/tools/microservices.js +112 -9
  90. package/dist/tools/pages.js +188 -66
  91. package/dist/tools/platformInfo.js +4 -1
  92. package/dist/tools/queries.js +72 -6
  93. package/dist/tools/revisions.js +94 -0
  94. package/dist/tools/rows.js +342 -22
  95. package/dist/tools/screenWrite.js +11 -2
  96. package/dist/tools/templates.js +32 -5
  97. package/dist/tools/workflows.js +28 -6
  98. package/package.json +3 -1
package/.env.example CHANGED
@@ -56,8 +56,8 @@ SCREENSHOT_BROWSER_PATH=
56
56
  ORG_SWAGGER_URL=
57
57
  TENANT_SWAGGER_URL=
58
58
 
59
- # Bos = tum moduller (167 tool / 27 modul). Hazir kumeler: core (veri+mantik, 97), studio
60
- # (sayfa tasarimi, 59), admin (template/organizasyon/deployment, 16). platform modulu (3 tool)
59
+ # Bos = tum moduller (172 tool / 28 modul). Hazir kumeler: core (veri+mantik, 97), studio
60
+ # (sayfa tasarimi + kullanici fonksiyonlari, 66), admin (template/organizasyon/deployment, 15). platform modulu (3 tool)
61
61
  # her kumede vardir. Kume ve tekil modul adi karisik yazilabilir.
62
62
  # Ornek: core,studio | entity,row,microservice
63
63
  MODULES=
@@ -12,6 +12,14 @@ TENANT_API_BASE_URL=https://new-zeyrek.glomil.com/api
12
12
  ORGANIZATION=new-zeyrek
13
13
  HOST_SUFFIX=glomil.com
14
14
 
15
+ # Ikinci uzak kurulum (wappa kumesi, ayri veritabani; docs/ortam.md). Ona baglanmak icin
16
+ # yukaridaki dort satiri ve asagidaki STUDIO_BASE_URL'i bunlarla degistirin:
17
+ # ORG_API_BASE_URL=https://zeyrek.appaflytech.com/api/org
18
+ # TENANT_API_BASE_URL=https://zeyrek.appaflytech.com/api
19
+ # ORGANIZATION=zeyrek
20
+ # HOST_SUFFIX=appaflytech.com
21
+ # STUDIO_BASE_URL=https://zeyrek.appaflytech.com
22
+
15
23
  # ZORUNLU. Gomulu varsayilan yok.
16
24
  DEFAULT_ENVIRONMENT=development
17
25
  DEFAULT_PROJECT=
package/README.md CHANGED
@@ -4,10 +4,11 @@ Zeyrek (NgApps) platformunu **MCP tool'ları** olarak sunan bağımsız gateway.
4
4
  oturumu Studio arayüzüne hiç girmeden proje kurabilir, veri modeli çıkarabilir, mikroservis ve
5
5
  workflow yazıp çalıştırabilir, sayfa tasarlayabilir.
6
6
 
7
- - **167 tool · 27 modül** — veri/mantık tarafı (project, application, datasource, entity, row,
8
- microservice, query, workflow, automation, global function, dto, view, dependency), Studio tasarım tarafı
9
- (page, component, external component, flow, layout, variable, folder, file, access,
10
- translation) ve yönetim (template, organization, deployment).
7
+ - **191 tool · 32 modül** — veri/mantık tarafı (project, application, datasource, entity, row,
8
+ import, microservice, query, workflow, automation, function, dto, view, dependency), Studio
9
+ tasarım tarafı (page, component, external component, flow, layout, variable, function, folder,
10
+ file, access, translation), yönetim (template, organization, deployment) ve proje dallanması
11
+ (environment, merge).
11
12
  - Platform koduna referans vermez: Organization.API ile Tenant.API'yi **HTTP üzerinden** sarar —
12
13
  istekler MVC binding'den geçtiği için FluentValidation aynen çalışır.
13
14
  - Üstünde bir **bilgi katmanı** vardır (rehber + altın örnek + politika lint'i): platformun
@@ -137,10 +138,10 @@ ya da ikisi karışık (`core,page`). `platform` modülü (3 tool) her kümede v
137
138
 
138
139
  | Küme | Tool | Modüller |
139
140
  |---|---|---|
140
- | `core` | 93 | platform, project, application, datasource, entity, row, microservice, query, workflow, automation, dto, view, dependency |
141
- | `studio` | 59 | platform, page, component, externalComponent, flow, layout, variable, folder, file, access, translation |
142
- | `admin` | 16 | platform, template, organization, deployment |
143
- | (boş) | **167** | 27 modülün tamamı |
141
+ | `core` | 111 | platform, project, application, datasource, entity, row, microservice, query, workflow, automation, function, dto, view, dependency, environment, merge, activity, revision |
142
+ | `studio` | 69 | platform, page, component, externalComponent, flow, layout, variable, function, folder, file, access, translation, revision |
143
+ | `admin` | 26 | platform, template, organization, deployment, environment, merge, activity |
144
+ | (boş) | **185** | 32 modülün tamamı |
144
145
 
145
146
  Bilinmeyen bir modül/küme adı verilirse sunucu açılmaz, geçerli adları listeleyen bir hata yazar.
146
147
 
package/dist/config.js CHANGED
@@ -7,11 +7,12 @@ export const moduleNames = [
7
7
  "datasource",
8
8
  "entity",
9
9
  "row",
10
+ "import",
10
11
  "microservice",
12
+ "microfunction",
11
13
  "query",
12
14
  "workflow",
13
15
  "automation",
14
- "globalFunction",
15
16
  "dto",
16
17
  "view",
17
18
  "page",
@@ -20,6 +21,7 @@ export const moduleNames = [
20
21
  "flow",
21
22
  "layout",
22
23
  "variable",
24
+ "function",
23
25
  "folder",
24
26
  "file",
25
27
  "access",
@@ -28,6 +30,10 @@ export const moduleNames = [
28
30
  "organization",
29
31
  "dependency",
30
32
  "deployment",
33
+ "environment",
34
+ "merge",
35
+ "activity",
36
+ "revision",
31
37
  ];
32
38
  export const modulePresets = {
33
39
  core: [
@@ -37,14 +43,20 @@ export const modulePresets = {
37
43
  "datasource",
38
44
  "entity",
39
45
  "row",
46
+ "import",
40
47
  "microservice",
48
+ "microfunction",
41
49
  "query",
42
50
  "workflow",
43
51
  "automation",
44
- "globalFunction",
52
+ "function",
45
53
  "dto",
46
54
  "view",
47
55
  "dependency",
56
+ "environment",
57
+ "merge",
58
+ "activity",
59
+ "revision",
48
60
  ],
49
61
  studio: [
50
62
  "platform",
@@ -54,12 +66,15 @@ export const modulePresets = {
54
66
  "flow",
55
67
  "layout",
56
68
  "variable",
69
+ "function",
57
70
  "folder",
58
71
  "file",
72
+ "import",
59
73
  "access",
60
74
  "translation",
75
+ "revision",
61
76
  ],
62
- admin: ["platform", "template", "organization", "deployment"],
77
+ admin: ["platform", "template", "organization", "deployment", "environment", "merge", "activity"],
63
78
  };
64
79
  function expandModuleNames(entries) {
65
80
  const modules = [];
@@ -417,6 +417,9 @@ function microserviceFindings(body) {
417
417
  findings.push(`sourceParameters.fields[${index}]: writeOn:'${String(field.writeOn)}' yalnız operation:'upsert' ucunda anlamlı; bu uç '${operation ?? '?'}' — writeOn'u kaldırın ya da 'always' bırakın (Fields.All(WriteOn == Always) when Operation != Upsert).`);
418
418
  }
419
419
  });
420
+ if (body.source === 'table' && operation !== undefined && operation.startsWith('bulk-') && asObjects(parameters.filters).length > 0) {
421
+ findings.push(`sourceParameters.filters: '${operation}' ucu filtre KULLANMAZ — bulk create/update satırları gövdeden, bulk delete birincil anahtarları gövdeden okur. Filtreleri kaldırın.`);
422
+ }
420
423
  flattenFilters(parameters.filters).forEach((filter, index) => {
421
424
  if (!isSingleFilter(filter))
422
425
  return;
@@ -565,6 +568,71 @@ function datasourceFindings(body) {
565
568
  }
566
569
  return findings;
567
570
  }
571
+ const MICROFUNCTION_ENTRYPOINT_PATTERN = /^[A-Za-z_][\w./-]*\.[A-Za-z_]\w*$/;
572
+ const MICROFUNCTION_ENVIRONMENT_KEY_PATTERN = /^[A-Z_][A-Z0-9_]*$/;
573
+ const MICROFUNCTION_ROLE_ARN_PATTERN = /^arn:aws:iam::\d{12}:role\/.+$/;
574
+ /**
575
+ * `MicrofunctionOptions.Limits` ile de sınırlanır (kök `.env`); buradaki değerler
576
+ * `MicrofunctionConstants`'ın sabit tavanıdır — ayar daha dar bir tavan koyduysa platform onu
577
+ * uygular ve gateway'in geçirdiği gövde 422 döner. Ters yön olmaz: buradan geçmeyen gövde
578
+ * platformda da geçmez.
579
+ */
580
+ function microfunctionFindings(body) {
581
+ const provider = isPresent(body.provider) ? String(body.provider) : 'built-in';
582
+ const sourceKind = isPresent(body.sourceKind) ? String(body.sourceKind) : 'inline';
583
+ const findings = [];
584
+ if (provider === 'azure-functions') {
585
+ findings.push("provider: 'azure-functions' v1'de seçilemez (MicrofunctionProviderNotSupported). Enum değeri tanımlı ama connector'ı yok — 'built-in' (platformun kendi Fission kümesi) ya da 'aws-lambda' kullanın.");
586
+ }
587
+ if (provider === 'aws-lambda' && !isPresent(body.runtimeId)) {
588
+ findings.push("runtimeId: provider 'aws-lambda' iken zorunlu (MicrofunctionRuntimeRequired) — fonksiyonun hangi AWS hesabında koşacağı kayıttan gelir. microfunction_runtime_list ile hesabı seçin.");
589
+ }
590
+ if (provider === 'built-in' && isPresent(body.runtimeId)) {
591
+ findings.push("runtimeId: provider 'built-in' iken VERİLMEZ (MicrofunctionRuntimeNotAllowedForBuiltIn) — Built-In fonksiyon platformun kendi kümesinde koşar, bulut hesabı kaydı yoktur.");
592
+ }
593
+ if (sourceKind === 'inline' && !hasText(body.code)) {
594
+ findings.push("code: sourceKind 'inline' iken zorunlu (MicrofunctionCodeRequired).");
595
+ }
596
+ if (sourceKind === 'archive' && !(hasText(body.entrypoint) && MICROFUNCTION_ENTRYPOINT_PATTERN.test(body.entrypoint))) {
597
+ findings.push(`entrypoint: sourceKind 'archive' iken 'modül.fonksiyon' biçiminde zorunlu (MicrofunctionEntrypointInvalid, desen ${MICROFUNCTION_ENTRYPOINT_PATTERN.source}), ör. 'handlers/sum.handler'.`);
598
+ }
599
+ // Komut alanları non-nullable int: gönderilmezse gövdeye 0 gider ve platform 422 döner. Gateway
600
+ // değer UYDURMAZ (0 ile 30 arasındaki fark faturalandırmayı da davranışı da değiştirir), yalnız
601
+ // eksikliği çağrıdan önce söyler.
602
+ const timeoutCeiling = provider === 'aws-lambda' ? 900 : 300;
603
+ if (!isPresent(body.timeoutSeconds)) {
604
+ findings.push(`timeoutSeconds: alan non-nullable int — gönderilmezse 0 gider ve platform 422 döner (MicrofunctionTimeoutOutOfRange). 1–${timeoutCeiling} arası bir değer verin (ürün varsayılanı 30).`);
605
+ }
606
+ else if (Number(body.timeoutSeconds) < 1 || Number(body.timeoutSeconds) > timeoutCeiling) {
607
+ findings.push(`timeoutSeconds: ${String(body.timeoutSeconds)} — provider '${provider}' için geçerli aralık 1–${timeoutCeiling} (MicrofunctionTimeoutOutOfRange).`);
608
+ }
609
+ if (!isPresent(body.memoryMb)) {
610
+ findings.push('memoryMb: alan non-nullable int — gönderilmezse 0 gider ve platform 422 döner (MicrofunctionMemoryOutOfRange). 128–3008 arası bir değer verin (ürün varsayılanı 256).');
611
+ }
612
+ const environmentVariables = asObject(body.environmentVariables);
613
+ if (environmentVariables !== undefined) {
614
+ const invalidKeys = Object.keys(environmentVariables).filter(key => !MICROFUNCTION_ENVIRONMENT_KEY_PATTERN.test(key));
615
+ const bytes = Object.entries(environmentVariables)
616
+ .reduce((total, [key, value]) => total + Buffer.byteLength(key, 'utf8') + Buffer.byteLength(value === null || value === undefined ? '' : String(value), 'utf8'), 0);
617
+ if (invalidKeys.length > 0) {
618
+ findings.push(`environmentVariables: anahtarlar ${MICROFUNCTION_ENVIRONMENT_KEY_PATTERN.source} desenine uymalı (MicrofunctionEnvironmentVariableKeyInvalid) — uymayanlar: ${invalidKeys.join(', ')}.`);
619
+ }
620
+ if (bytes > 4096) {
621
+ findings.push(`environmentVariables: anahtar+değer toplamı ${bytes} bayt, üst sınır 4096 (Lambda sınırı; MicrofunctionEnvironmentVariablesTooLarge).`);
622
+ }
623
+ }
624
+ return findings;
625
+ }
626
+ function microfunctionRuntimeFindings(body) {
627
+ const findings = [];
628
+ if (isPresent(body.provider) && String(body.provider) !== 'aws-lambda') {
629
+ findings.push(`provider: runtime hesabı v1'de yalnız 'aws-lambda' olabilir (MicrofunctionProviderNotSupported); '${String(body.provider)}' reddedilir. Built-In fonksiyonların runtime kaydı YOKTUR.`);
630
+ }
631
+ if (!(hasText(body.roleArn) && MICROFUNCTION_ROLE_ARN_PATTERN.test(body.roleArn))) {
632
+ findings.push(`roleArn: zorunlu ve ${MICROFUNCTION_ROLE_ARN_PATTERN.source} desenine uymalı (MicrofunctionRuntimeRoleArnInvalid) — fonksiyonun koşacağı Lambda execution rolü, ör. 'arn:aws:iam::123456789012:role/zeyrek-microfunction'.`);
633
+ }
634
+ return findings;
635
+ }
568
636
  function projectCreateFindings(body) {
569
637
  if (!isPresent(body.templateOptions) && !isPresent(body.application)) {
570
638
  return ["application: 'Application' must not be empty. — templateOptions verilmeyen projede ilk application projeyle birlikte açılır: application { slug, name } zorunlu."];
@@ -790,6 +858,26 @@ export const backendRules = [
790
858
  sourceRef: 'UploadFileCommandValidator: File.NotNull(), File.Must(IsContainsSpecialChar(FileName))',
791
859
  check: body => nameCharacterFindings('filename', body.filename)
792
860
  },
861
+ {
862
+ id: 'MF-001',
863
+ module: 'microfunction',
864
+ commands: { create: 'CreateMicrofunctionCommand', update: 'UpdateMicrofunctionCommand' },
865
+ status: 422,
866
+ summary: "provider 'built-in' ⇒ runtimeId boş, 'aws-lambda' ⇒ runtimeId zorunlu, 'azure-functions' reddedilir · sourceKind 'inline' ⇒ code, 'archive' ⇒ 'modül.fonksiyon' biçiminde entrypoint · timeoutSeconds ve memoryMb GÖNDERİLMEK ZORUNDA (non-nullable int, eksikse 0 gider) · env anahtarları ^[A-Z_][A-Z0-9_]*$ ve toplam ≤ 4 KB",
867
+ sourceRef: 'CreateMicrofunctionCommandValidator / UpdateMicrofunctionCommandValidator (ikisi birebir aynı kural kümesi) + MicrofunctionConstants (EntrypointPattern, EnvironmentVariableKeyPattern, BuiltInMaxTimeoutSeconds 300, CloudMaxTimeoutSeconds 900, MinMemoryMb 128, MaxMemoryMb 3008, MaxEnvironmentVariablesBytes 4096)',
868
+ guide: 'ngapps://guides/microfunction',
869
+ check: body => microfunctionFindings(body)
870
+ },
871
+ {
872
+ id: 'MFR-001',
873
+ module: 'microfunctionRuntime',
874
+ commands: { create: 'CreateMicrofunctionRuntimeCommand', update: 'UpdateMicrofunctionRuntimeCommand' },
875
+ status: 422,
876
+ summary: "provider yalnız 'aws-lambda' · roleArn zorunlu ve arn:aws:iam::<12 hane>:role/<ad> desenli",
877
+ sourceRef: 'CreateMicrofunctionRuntimeCommandValidator / UpdateMicrofunctionRuntimeCommandValidator + MicrofunctionConstants.RoleArnPattern',
878
+ guide: 'ngapps://guides/microfunction',
879
+ check: body => microfunctionRuntimeFindings(body)
880
+ },
793
881
  {
794
882
  id: 'EXT-001',
795
883
  module: 'externalComponent',