@appaflytech/zeyrek-ai-mcp 0.0.3 → 0.0.4

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 (35) hide show
  1. package/.env.example +21 -7
  2. package/.env.production.example +42 -0
  3. package/README.md +14 -7
  4. package/dist/config.js +113 -47
  5. package/dist/knowledge/componentCatalog.js +474 -31
  6. package/dist/knowledge/componentEvents.js +150 -12
  7. package/dist/knowledge/errorPath.js +64 -0
  8. package/dist/knowledge/normalize.js +12 -1
  9. package/dist/knowledge/outlines.js +6 -0
  10. package/dist/knowledge/rules.js +184 -3
  11. package/dist/knowledge/styleResolve.js +485 -0
  12. package/dist/observability/trace.js +4 -0
  13. package/dist/platform/http.js +3 -0
  14. package/dist/platform/responses.js +80 -4
  15. package/dist/platform/screenshot.js +106 -0
  16. package/dist/resources/examples/layout-app-shell.json +368 -0
  17. package/dist/resources/examples/microservice-table-list.json +1 -0
  18. package/dist/resources/examples/middleware-authenticate.json +243 -47
  19. package/dist/resources/examples/workflow-basic.json +24 -2
  20. package/dist/resources/guides/component.md +6 -3
  21. package/dist/resources/guides/external-component.md +129 -0
  22. package/dist/resources/guides/layout.md +147 -0
  23. package/dist/resources/guides/microservice.md +35 -0
  24. package/dist/resources/guides/middleware.md +10 -0
  25. package/dist/resources/guides/page.md +132 -14
  26. package/dist/resources/guides/workflow.md +127 -2
  27. package/dist/server.js +2 -0
  28. package/dist/tools/externalComponents.js +285 -0
  29. package/dist/tools/layouts.js +48 -6
  30. package/dist/tools/microservices.js +2 -2
  31. package/dist/tools/pages.js +98 -30
  32. package/dist/tools/platformInfo.js +2 -2
  33. package/dist/tools/screens.js +36 -0
  34. package/dist/tools/workflows.js +3 -3
  35. package/package.json +4 -1
@@ -1,4 +1,5 @@
1
1
  import { PlatformApiError } from '../platform/errors.js';
2
+ import { resolveNodeStyleReport } from '../knowledge/styleResolve.js';
2
3
  import { z } from 'zod';
3
4
  export const hostParam = z.enum(['page', 'layout', 'component'])
4
5
  .describe("Akışın barındırıcısı: page | layout | component (widget de component'tir)");
@@ -6,6 +7,41 @@ export const schemaParam = z.array(z.record(z.unknown()))
6
7
  .describe('Komponent ağacı (DesignComponentManagementSchema listesi); verilmezse mevcut şema korunur');
7
8
  export const eventsParam = z.array(z.record(z.unknown()))
8
9
  .describe("Sayfa/layout düzeyi olaylar: [{ name, value }] — value bir flow id'sidir");
10
+ export const modeParam = z.enum(['summary', 'subtree', 'full']).optional().describe("summary (varsayılan): yalnız id/elementId/name/type ağacı — hedef bulmak için bunu kullanın. subtree: componentId ile tek alt ağaç. full: tüm şema.");
11
+ /**
12
+ * Ağacı yalnız kimlik alanlarına indirger; hedef aramak için okunur boyutta tutar.
13
+ * `styleSource` verilirse (undefined DEĞİLSE) her düğüme efektif stil raporu da
14
+ * yazılır: tema componentStyles → preset → düğümün kendi stili kaskadı.
15
+ */
16
+ export function summarize(node, styleSource) {
17
+ const summary = {
18
+ id: node.id,
19
+ elementId: node.elementId,
20
+ name: node.name,
21
+ type: node.type
22
+ };
23
+ if (styleSource !== undefined) {
24
+ const report = resolveNodeStyleReport(node, styleSource ?? undefined);
25
+ if (report.resolvedStyle !== undefined)
26
+ summary.resolvedStyle = report.resolvedStyle;
27
+ summary.styleLayers = report.styleLayers;
28
+ }
29
+ if (Array.isArray(node.children) && node.children.length > 0) {
30
+ summary.children = node.children.map(child => summarize(child, styleSource));
31
+ }
32
+ return summary;
33
+ }
34
+ /** elementId ya da id ile ağaçta düğüm bulur. */
35
+ export function findNode(nodes, target) {
36
+ for (const node of nodes ?? []) {
37
+ if (node.elementId === target || String(node.id) === target)
38
+ return node;
39
+ const found = findNode(node.children, target);
40
+ if (found)
41
+ return found;
42
+ }
43
+ return undefined;
44
+ }
9
45
  function asArray(value) {
10
46
  return Array.isArray(value) ? value : [];
11
47
  }
@@ -106,7 +106,7 @@ export function registerWorkflowTools(server, platform) {
106
106
  }));
107
107
  server.registerTool('workflow_create', {
108
108
  title: 'Workflow oluştur',
109
- description: "Yeni workflow tanımlar (definition = CreateWorkflowCommand). type: 'workflow' | 'automation' | 'middleware'. İlk kullanımdan önce platform_guide('workflow') okuyun: DTO-önce akışı, branch bağlama (branches[].nextStepId), tip×step matrisi. Middleware (istek öncesi koşan guard/setter, user değişkeni, alfabetik sıra) için platform_guide('middleware') + ngapps://examples/middleware-authenticate. Gövde politika kontrolünden geçer.",
109
+ description: "Yeni workflow tanımlar (definition = CreateWorkflowCommand). type: 'workflow' | 'automation' | 'middleware'. İlk kullanımdan önce platform_guide('workflow') okuyun: DTO-önce akışı, branch bağlama (branches[].nextStepId), tip×step matrisi. Her adım ve akışın kendisi 'description' taşımak ZORUNDADIR (WF-024, block): adımın NE İŞE YARADIĞINI 1-2 cümleyle yazın — Studio kanvasında ⓘ ikonu olarak görünür; mekanizmayı değil niyeti yazın. Middleware (istek öncesi koşan guard/setter, user değişkeni, alfabetik sıra) için platform_guide('middleware') + ngapps://examples/middleware-authenticate. Adımın gerçek bir tuzağı varsa (idempotent değil, kapsam adımda değil, dış bağımlılık, sessiz düşen dal) 'caution' alanına yazın — OPSİYONELDİR, tuzak yoksa boş bırakın; doldurma metin yazmayın. Gövde politika kontrolünden geçer.",
110
110
  inputSchema: { project: projectParam, environment: environmentParam, applicationId: guid, definition: definitionParam, policyOverride: policyOverrideParam },
111
111
  annotations: writes
112
112
  }, handle(config, async ({ project, environment, applicationId, definition, policyOverride }) => {
@@ -117,7 +117,7 @@ export function registerWorkflowTools(server, platform) {
117
117
  }));
118
118
  server.registerTool('workflow_update', {
119
119
  title: 'Workflow güncelle',
120
- description: 'Workflow tanımını günceller (definition = UpdateWorkflowCommand, tam gövde). Hedefli değişiklik için workflow_patch tercih edin. Gövde politika kontrolünden geçer.',
120
+ description: 'Workflow tanımını günceller (definition = UpdateWorkflowCommand, tam gövde). Hedefli değişiklik için workflow_patch tercih edin. Her adım ve akışın kendisi \'description\' taşımak ZORUNDADIR (WF-024, block). Adımın gerçek bir tuzağı varsa (idempotent değil, kapsam adımda değil, dış bağımlılık, sessiz düşen dal) \'caution\' alanına yazın — OPSİYONELDİR, tuzak yoksa boş bırakın; doldurma metin yazmayın. Gövde politika kontrolünden geçer.',
121
121
  inputSchema: { project: projectParam, environment: environmentParam, applicationId: guid, id: guid, definition: definitionParam, policyOverride: policyOverrideParam },
122
122
  annotations: updates
123
123
  }, handle(config, async ({ project, environment, applicationId, id, definition, policyOverride }) => {
@@ -128,7 +128,7 @@ export function registerWorkflowTools(server, platform) {
128
128
  }));
129
129
  server.registerTool('workflow_patch', {
130
130
  title: 'Workflow\'a patch uygula',
131
- description: 'Tam gövdeyi bağlama almadan hedefli değişiklik: gateway mevcut workflow\'u çeker, JSON Patch işlemlerini uygular, politika kontrolünden geçirir, tam gövdeyi geri yazar. Yanıt outline özetidir.',
131
+ description: 'Tam gövdeyi bağlama almadan hedefli değişiklik: gateway mevcut workflow\'u çeker, JSON Patch işlemlerini uygular, politika kontrolünden geçirir, tam gövdeyi geri yazar. Değişiklik hedefli ama yazma değil: hata yolu olmayan bir workflow/middleware kaydına patch atmak o kaydın grafiğini de düzeltir — start adımına global-error dalı + 500 dönen response adımı eklenir ve yanıtta gatewayNormalized ile bildirilir. Yanıt outline özetidir.',
132
132
  inputSchema: { project: projectParam, environment: environmentParam, applicationId: guid, id: guid, operations: patchOperationsParam, policyOverride: policyOverrideParam },
133
133
  annotations: updates
134
134
  }, handle(config, async ({ project, environment, applicationId, id, operations, policyOverride }) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appaflytech/zeyrek-ai-mcp",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "description": "MCP gateway exposing the NgApps platform APIs as tools",
6
6
  "license": "UNLICENSED",
@@ -13,6 +13,7 @@
13
13
  "files": [
14
14
  "dist",
15
15
  ".env.example",
16
+ ".env.production.example",
16
17
  "README.md"
17
18
  ],
18
19
  "publishConfig": {
@@ -26,6 +27,7 @@
26
27
  "prepack": "npm run build",
27
28
  "typecheck": "tsc --noEmit",
28
29
  "test": "vitest run",
30
+ "docs:lint": "tsx scripts/docs-lint.ts",
29
31
  "generate-schemas": "tsx scripts/generate-schemas.ts",
30
32
  "generate-reserved-tables": "tsx scripts/generate-reserved-tables.ts",
31
33
  "harvest-examples": "tsx scripts/harvest-examples.ts"
@@ -36,6 +38,7 @@
36
38
  "express": "^4.21.0",
37
39
  "fast-json-patch": "^3.1.1",
38
40
  "pino": "^9.5.0",
41
+ "playwright-core": "^1.49.0",
39
42
  "undici": "^7.3.0",
40
43
  "zod": "^3.24.1"
41
44
  },