@appaflytech/zeyrek-ai-mcp 0.0.30 → 0.0.32
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 +0 -15
- package/README.md +5 -5
- package/dist/config.js +0 -37
- package/dist/index.js +0 -2
- package/dist/knowledge/backendConstraints.js +1 -18
- package/dist/knowledge/boxSections.js +184 -0
- package/dist/knowledge/componentCatalog.js +232 -562
- package/dist/knowledge/componentEvents.js +21 -141
- package/dist/knowledge/layoutSummary.js +2 -140
- package/dist/knowledge/normalize.js +67 -236
- package/dist/knowledge/outlines.js +0 -36
- package/dist/knowledge/policy.js +4 -18
- package/dist/knowledge/reservedTables.js +0 -79
- package/dist/knowledge/rules.js +21 -319
- package/dist/knowledge/schemaGuard.js +0 -11
- package/dist/knowledge/styleResolve.js +38 -55
- package/dist/knowledge/themeResolve.js +3 -3
- package/dist/observability/trace.js +3 -6
- package/dist/platform/diagnostics.js +4 -10
- package/dist/platform/domSummary.js +1 -1
- package/dist/platform/errors.js +10 -162
- package/dist/platform/http.js +8 -29
- package/dist/platform/responses.js +5 -39
- package/dist/platform/{capture/capture.js → screenshot.js} +519 -105
- package/dist/platform/secrets.js +1 -17
- package/dist/platform/strictArguments.js +12 -68
- package/dist/platform/tokenVault.js +4 -187
- package/dist/resources/examples/layout-app-shell.json +707 -229
- package/dist/resources/examples/page-detail-profile.json +1 -2
- package/dist/resources/examples/page-dynamic-form.json +2 -3
- package/dist/resources/examples/page-flex-sections.json +1 -1
- package/dist/resources/examples/page-html-embed.json +1 -1
- package/dist/resources/examples/workflow-basic.json +2 -8
- package/dist/resources/guides/component.md +4 -91
- package/dist/resources/guides/entity.md +8 -50
- package/dist/resources/guides/expressions.md +5 -14
- package/dist/resources/guides/functions.md +1 -1
- package/dist/resources/guides/getting-started.md +1 -38
- package/dist/resources/guides/layout.md +58 -55
- package/dist/resources/guides/microservice.md +2 -81
- package/dist/resources/guides/middleware.md +2 -44
- package/dist/resources/guides/page.md +75 -454
- package/dist/resources/guides/theme.md +2 -8
- package/dist/resources/guides/translation.md +1 -1
- package/dist/resources/guides/workflow.md +1 -58
- package/dist/resources/rules.js +5 -11
- package/dist/resources/schema-fingerprint.json +5 -7
- package/dist/resources/schemas/CreateEntityCommand.json +0 -118
- package/dist/resources/schemas/CreateMicroserviceCommand.json +1 -13
- package/dist/resources/schemas/CreateQueryCommand.json +0 -4
- package/dist/resources/schemas/CreateWorkflowCommand.json +1 -143
- package/dist/resources/schemas/DataJobDto.json +1 -6
- package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +1 -21
- package/dist/resources/schemas/MicroserviceDto.json +3 -15
- package/dist/resources/schemas/PreviewMicroserviceCommand.json +1 -10
- package/dist/resources/schemas/PreviewWorkflowCommand.json +1 -22
- package/dist/resources/schemas/StepDto.json +1 -22
- package/dist/resources/schemas/UpdateEntityCommand.json +0 -118
- package/dist/resources/schemas/UpdateMicroserviceCommand.json +1 -13
- package/dist/resources/schemas/UpdateQueryCommand.json +0 -4
- package/dist/resources/schemas/UpdateViewCommand.json +2 -0
- package/dist/resources/schemas/UpdateWorkflowCommand.json +1 -143
- package/dist/server.js +1 -27
- package/dist/tools/access.js +2 -369
- package/dist/tools/applications.js +3 -60
- package/dist/tools/common.js +0 -7
- package/dist/tools/components.js +14 -118
- package/dist/tools/datasources.js +3 -3
- package/dist/tools/dependencies.js +1 -1
- package/dist/tools/deployments.js +2 -2
- package/dist/tools/designSchemaPatch.js +18 -34
- package/dist/tools/dtos.js +5 -36
- package/dist/tools/entities.js +12 -79
- package/dist/tools/externalComponents.js +5 -26
- package/dist/tools/flows.js +14 -122
- package/dist/tools/folders.js +1 -1
- package/dist/tools/imports.js +2 -5
- package/dist/tools/layouts.js +17 -50
- package/dist/tools/merges.js +1 -1
- package/dist/tools/microservices.js +25 -77
- package/dist/tools/pages.js +112 -465
- package/dist/tools/platformInfo.js +8 -27
- package/dist/tools/projects.js +9 -71
- package/dist/tools/rows.js +13 -69
- package/dist/tools/schemaOps.js +1 -61
- package/dist/tools/screenWrite.js +8 -37
- package/dist/tools/screens.js +5 -95
- package/dist/tools/templates.js +1 -26
- package/dist/tools/translations.js +1 -1
- package/dist/tools/variables.js +5 -11
- package/dist/tools/workflows.js +5 -10
- package/package.json +2 -2
- package/dist/knowledge/access.js +0 -802
- package/dist/knowledge/case.js +0 -41
- package/dist/knowledge/connectDataBind.js +0 -819
- package/dist/knowledge/connectDataDefinition.js +0 -341
- package/dist/knowledge/connectDataExecute.js +0 -93
- package/dist/knowledge/connectDataRules.js +0 -128
- package/dist/knowledge/decision.js +0 -121
- package/dist/knowledge/expressionPrelude.js +0 -59
- package/dist/knowledge/microserviceParameters.js +0 -58
- package/dist/knowledge/mining.js +0 -94
- package/dist/knowledge/mobileComponentCatalog.js +0 -859
- package/dist/knowledge/mobileComponentEvents.js +0 -239
- package/dist/knowledge/platform/lint.js +0 -385
- package/dist/knowledge/platform/mobile.js +0 -142
- package/dist/knowledge/platform/mobileLayoutLint.js +0 -324
- package/dist/knowledge/platform/mobileRules.js +0 -231
- package/dist/knowledge/platform/mobileSpacing.js +0 -82
- package/dist/knowledge/platform/mobileTabs.js +0 -108
- package/dist/knowledge/platform/nativeBoxModel.js +0 -44
- package/dist/knowledge/platform/profile.js +0 -25
- package/dist/knowledge/platform/resolve.js +0 -122
- package/dist/knowledge/platform/web.js +0 -39
- package/dist/knowledge/process.js +0 -510
- package/dist/knowledge/rowFilter.js +0 -43
- package/dist/knowledge/styleResolveNative.js +0 -527
- package/dist/platform/argumentAliases.js +0 -128
- package/dist/platform/bodyFile.js +0 -103
- package/dist/platform/capture/actions.js +0 -333
- package/dist/platform/capture/browser.js +0 -1
- package/dist/platform/capture/console-log.js +0 -122
- package/dist/platform/capture/index.js +0 -11
- package/dist/platform/capture/readiness.js +0 -103
- package/dist/platform/capture/summary.js +0 -77
- package/dist/platform/capture/target.js +0 -5
- package/dist/platform/capture/targets/studio-mobile.js +0 -15
- package/dist/platform/capture/targets/studio-web.js +0 -5
- package/dist/platform/impersonation.js +0 -45
- package/dist/platform/jsonArray.js +0 -24
- package/dist/platform/schemaReadMemory.js +0 -60
- package/dist/resources/examples/bpm-gorev-kontrol.json +0 -294
- package/dist/resources/examples/bpm-iso-dokuman.json +0 -228
- package/dist/resources/examples/bpm-satinalma.json +0 -376
- package/dist/resources/examples/connect-data-convert-verify.json +0 -107
- package/dist/resources/examples/connect-data-dropdown-roles.json +0 -66
- package/dist/resources/examples/connect-data-edit-m2m.json +0 -73
- package/dist/resources/examples/connect-data-query-params.json +0 -50
- package/dist/resources/examples/connect-data-table-entity.json +0 -147
- package/dist/resources/examples/connect-data-workflow-microservice.json +0 -65
- package/dist/resources/examples/mobile-app-shell-drawer.json +0 -243
- package/dist/resources/examples/mobile-app-shell-stack.json +0 -157
- package/dist/resources/examples/mobile-app-shell-tab.json +0 -208
- package/dist/resources/examples/mobile-form-screen.json +0 -365
- package/dist/resources/examples/mobile-list-detail-form.json +0 -672
- package/dist/resources/guides/access.md +0 -796
- package/dist/resources/guides/bpm.md +0 -686
- package/dist/resources/guides/case.md +0 -153
- package/dist/resources/guides/decision.md +0 -185
- package/dist/resources/guides/mobile-layout.md +0 -193
- package/dist/resources/guides/mobile.md +0 -495
- package/dist/resources/read.js +0 -41
- package/dist/resources/schemas/AccessExplanationDto.json +0 -144
- package/dist/resources/schemas/AccessMatrixDto.json +0 -170
- package/dist/resources/schemas/AccessPermissionDto.json +0 -57
- package/dist/resources/schemas/AccessPolicyDto.json +0 -223
- package/dist/resources/schemas/AccessResourceDto.json +0 -86
- package/dist/resources/schemas/AppSessionDto.json +0 -53
- package/dist/resources/schemas/ConnectDataDescribeDto.json +0 -344
- package/dist/resources/schemas/ConnectDataRequestModel.json +0 -202
- package/dist/resources/schemas/ConnectDataResultDto.json +0 -421
- package/dist/resources/schemas/ConnectorCredentialDto.json +0 -70
- package/dist/resources/schemas/ConvertConnectDataToMicroserviceCommand.json +0 -37
- package/dist/resources/schemas/CreateAccessPolicyCommand.json +0 -209
- package/dist/resources/schemas/CreateDecisionCommand.json +0 -221
- package/dist/resources/schemas/CreateProcessDefinitionCommand.json +0 -1337
- package/dist/resources/schemas/DecisionDto.json +0 -302
- package/dist/resources/schemas/DetachConnectDataMicroserviceCommand.json +0 -28
- package/dist/resources/schemas/ExplainAccessQuery.json +0 -33
- package/dist/resources/schemas/GenerateProcessDocumentCommand.json +0 -116
- package/dist/resources/schemas/OrganizationProjectDto.json +0 -335
- package/dist/resources/schemas/OrganizationSchemaDto.json +0 -196
- package/dist/resources/schemas/OrganizationSchemaVersionDto.json +0 -207
- package/dist/resources/schemas/PatchProcessDefinitionCommand.json +0 -76
- package/dist/resources/schemas/ProcessDefinitionDto.json +0 -1480
- package/dist/resources/schemas/ProcessSimulationDto.json +0 -96
- package/dist/resources/schemas/SaveConnectorCredentialCommand.json +0 -90
- package/dist/resources/schemas/SaveProcessEventSourceCommand.json +0 -61
- package/dist/resources/schemas/SaveProcessMailSourceCommand.json +0 -89
- package/dist/resources/schemas/SignProcessTaskCommand.json +0 -73
- package/dist/resources/schemas/SimulateProcessDefinitionQuery.json +0 -92
- package/dist/resources/schemas/UpdateAccessPolicyCommand.json +0 -209
- package/dist/resources/schemas/UpdateDecisionCommand.json +0 -216
- package/dist/resources/schemas/UpdateProcessDefinitionCommand.json +0 -1357
- package/dist/resources/schemas/ValidateProcessDefinitionQuery.json +0 -1339
- package/dist/tools/accessOperations.js +0 -135
- package/dist/tools/accessPolicies.js +0 -170
- package/dist/tools/accessRuntime.js +0 -203
- package/dist/tools/bpm.js +0 -343
- package/dist/tools/bpmGovernance.js +0 -266
- package/dist/tools/bpmOperations.js +0 -230
- package/dist/tools/bpmReporting.js +0 -154
- package/dist/tools/bpmRouting.js +0 -150
- package/dist/tools/bpmRuntime.js +0 -396
- package/dist/tools/case.js +0 -178
- package/dist/tools/caseRuntime.js +0 -89
- package/dist/tools/connectData.js +0 -449
- package/dist/tools/connectors.js +0 -193
- package/dist/tools/decisions.js +0 -206
- package/dist/tools/mobile.js +0 -221
- package/dist/tools/modules.js +0 -48
- package/dist/tools/organizationStructure.js +0 -137
- package/dist/tools/profileWrite.js +0 -92
package/dist/tools/modules.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { guid, projectParam, environmentParam, readOnly, writes } from './common.js';
|
|
2
|
-
import { PolicyBlockError } from '../knowledge/policy.js';
|
|
3
|
-
import { handle } from '../platform/responses.js';
|
|
4
|
-
import { z } from 'zod';
|
|
5
|
-
export function registerModuleTools(server, platform) {
|
|
6
|
-
const config = platform.config;
|
|
7
|
-
server.registerTool('module_list', {
|
|
8
|
-
title: 'Sistem modüllerini listele',
|
|
9
|
-
description: "Kurulabilir sistem modülleri (catalog: slug, name, version, requires) ve bu ortamdaki kurulumlar (installations: module, version, catalogVersion, applicationId, receiveUpdates, isOutdated). Katalogda iki modül var: access (yetki modülü, kompleks proje ister) ve bpm-management (süreç yönetimi: süreç sayfaları ve iş takvimi). requires dolu bir modül, gerektirdiği modül aynı application'a kurulmadan kurulamaz.",
|
|
10
|
-
inputSchema: {
|
|
11
|
-
project: projectParam,
|
|
12
|
-
environment: environmentParam,
|
|
13
|
-
module: z.string().min(1).max(100).optional().describe('Yalnız bu modülün kurulumları')
|
|
14
|
-
},
|
|
15
|
-
annotations: readOnly
|
|
16
|
-
}, handle(config, async ({ project, environment, module }) => {
|
|
17
|
-
const [catalog, installations] = await Promise.all([
|
|
18
|
-
platform.tenant('GET', project, '/modules/catalog', { environment }),
|
|
19
|
-
platform.tenant('GET', project, '/modules', { environment, query: module ? { module } : undefined })
|
|
20
|
-
]);
|
|
21
|
-
return {
|
|
22
|
-
catalog: catalog?.data ?? catalog,
|
|
23
|
-
installations: installations?.data ?? installations
|
|
24
|
-
};
|
|
25
|
-
}));
|
|
26
|
-
server.registerTool('module_update', {
|
|
27
|
-
title: 'Sistem modülünü kur, güncelle ya da ayır',
|
|
28
|
-
description: "operation install: modülü application'a kurar — süreç paketi tablolarını (yoksa), iş takvimlerini ve süreç tanımlarını getirir, süreçler o application'da aktif yayınlanır; gereken modül kurulu değilse 409 ModuleRequiresModule, ikinci kurulum 409 ModuleAlreadyInstalled. operation upgrade: katalog sürümü yeniyse içeriği yeniden kurar; değişen süreç yeni sürüm olarak yayınlanır ve müşterinin uyarlaması yeni sürüme taşınır (taşınamayan adım çakışma bildirimi olur). Var olan tablo ve verisine dokunulmaz — yeni paket sürümünün bir tabloya eklediği alan var olan tabloya eklenmez. operation detach: güncellemeleri keser, içerik ve çalışan örnekler yerinde kalır; ayırma geri alınmaz (ardından install 409 ModuleAlreadyInstalled, upgrade 400 döner). access modülünün kurulumu yalnız kaydı tutar, içerik getirmez (TB-92). production'a kurulum gateway'de durur (BPM-014): development'ta kurup deployment ile taşıyın.",
|
|
29
|
-
inputSchema: {
|
|
30
|
-
project: projectParam,
|
|
31
|
-
environment: environmentParam,
|
|
32
|
-
operation: z.enum(['install', 'upgrade', 'detach']),
|
|
33
|
-
module: z.string().min(1).max(100),
|
|
34
|
-
applicationId: guid
|
|
35
|
-
},
|
|
36
|
-
annotations: writes
|
|
37
|
-
}, handle(config, async ({ project, environment, operation, module, applicationId }) => {
|
|
38
|
-
if ((environment ?? config.defaultEnvironment) === 'production') {
|
|
39
|
-
throw new PolicyBlockError([{
|
|
40
|
-
ruleId: 'BPM-014',
|
|
41
|
-
severity: 'block',
|
|
42
|
-
message: `module_update: modül ${operation} production'a gönderilmez. Modülü development'ta kurun; production'a taşıma insan onaylı deployment işidir (tanım ve takvim taşınır, uyarlama taşınmaz).`,
|
|
43
|
-
guide: 'ngapps://guides/bpm'
|
|
44
|
-
}], false);
|
|
45
|
-
}
|
|
46
|
-
return platform.tenant('POST', project, `/modules/${encodeURIComponent(module)}/${operation}`, { environment, body: { applicationId } });
|
|
47
|
-
}));
|
|
48
|
-
}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { guid, projectParam, environmentParam, readOnly, writes, updates, destructive } from './common.js';
|
|
2
|
-
import { evaluatePolicy, enforcePolicy } from '../knowledge/policy.js';
|
|
3
|
-
import { handle } from '../platform/responses.js';
|
|
4
|
-
import { policyRules } from '../knowledge/rules.js';
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
const unitTypes = ['holding', 'company', 'branch', 'region', 'department', 'team', 'other'];
|
|
7
|
-
const subscribedNote = "Bu proje organizasyon şemasına ABONEYSE (project_get organizationSchema.receiveUpdates) birim/pozisyon ağacı şemadan gelir ve buradan yazmak projeyi 'özelleştirilmiş' işaretler: sonraki yayın artık otomatik inmez, organization_schema_resubscribe gerekir. Şema kaynaklı bir düğümü düzenlemek yerine yönetim konsolundaki şemayı düzenleyin.";
|
|
8
|
-
export function registerOrganizationStructureTools(server, platform) {
|
|
9
|
-
const config = platform.config;
|
|
10
|
-
server.registerTool('organization_tree_get', {
|
|
11
|
-
title: 'Organizasyon ağacını getir',
|
|
12
|
-
description: "Projenin KENDİ birim/pozisyon ağacını getirir (GET /{project}/organization/tree) — kompleks projede erişim kapsamlarının (unit · subtree · subordinates) dayandığı ağaç budur. Organizasyonun merkezi şeması organization_schema_get'tedir; bu uç projeye kopyalanmış ve projede yaşayan halini verir. Yanıttaki seats listesi pozisyonlarda BUGÜN oturanları (positionId · userId · fullName · assignmentType · isPrimary) verir — boş koltuk ve 'bu koltukta kim var' sorusu kullanıcı kullanıcı user_position_list çağırmadan buradan cevaplanır. Düz satırlar için row_list('organization_units' / 'organization_positions').",
|
|
13
|
-
inputSchema: { project: projectParam, environment: environmentParam, includeInactive: z.boolean().optional().describe('Pasifleştirilmiş birim/pozisyonlar da dönsün mü (varsayılan false)') },
|
|
14
|
-
annotations: readOnly
|
|
15
|
-
}, handle(config, ({ project, environment, includeInactive }) => platform.tenant('GET', project, '/organization/tree', { environment, query: includeInactive === undefined ? {} : { includeInactive } })));
|
|
16
|
-
server.registerTool('organization_unit_create', {
|
|
17
|
-
title: 'Organizasyon birimi oluştur',
|
|
18
|
-
description: `Projede birim açar (POST /{project}/organization/units). parentId verilmezse kök birim olur; unitType 'company' olan birim kapsam hesabında ŞİRKET sınırıdır (companyIds). functionCode bir işlev etiketi ('it', 'finance') ve grant koşullarında { subject: 'functionCodes' } ile eşleşir. managerPositionId birimin yöneticisini işaret eder — 'subordinates' kapsamı bu hattan yürür. ${subscribedNote}`,
|
|
19
|
-
inputSchema: {
|
|
20
|
-
project: projectParam,
|
|
21
|
-
environment: environmentParam,
|
|
22
|
-
name: z.string().min(1),
|
|
23
|
-
code: z.string().min(1).describe('Projede tekil kısa kod'),
|
|
24
|
-
unitType: z.enum(unitTypes),
|
|
25
|
-
parentId: guid.optional().describe("Üst birimin id'si; verilmezse kök"),
|
|
26
|
-
functionCode: z.string().optional().describe("İşlev etiketi; grant koşulunda { subject: 'functionCodes' } ile eşleşir"),
|
|
27
|
-
managerPositionId: guid.optional(),
|
|
28
|
-
sortOrder: z.number().int().optional()
|
|
29
|
-
},
|
|
30
|
-
annotations: writes
|
|
31
|
-
}, handle(config, ({ project, environment, ...body }) => platform.tenant('POST', project, '/organization/units', { environment, body })));
|
|
32
|
-
server.registerTool('organization_unit_update', {
|
|
33
|
-
title: 'Organizasyon birimini güncelle',
|
|
34
|
-
description: `Birimin alanlarını değiştirir (PUT /{project}/organization/units/{id}) — TAM gövde gönderilir, verilmeyen alan boşaltılır; önce organization_tree_get ile mevcut değerleri okuyun. Birimi BAŞKA BİR ÜST BİRİME TAŞIMAZ (parentId burada yoktur): taşıma ayrı bir uçtur. ${subscribedNote}`,
|
|
35
|
-
inputSchema: {
|
|
36
|
-
project: projectParam,
|
|
37
|
-
environment: environmentParam,
|
|
38
|
-
id: guid,
|
|
39
|
-
name: z.string().min(1),
|
|
40
|
-
code: z.string().min(1),
|
|
41
|
-
unitType: z.enum(unitTypes),
|
|
42
|
-
functionCode: z.string().optional(),
|
|
43
|
-
managerPositionId: guid.optional(),
|
|
44
|
-
sortOrder: z.number().int().optional()
|
|
45
|
-
},
|
|
46
|
-
annotations: updates
|
|
47
|
-
}, handle(config, ({ project, environment, id, ...body }) => platform.tenant('PUT', project, `/organization/units/${id}`, { environment, body })));
|
|
48
|
-
server.registerTool('organization_position_create', {
|
|
49
|
-
title: 'Organizasyon pozisyonu oluştur',
|
|
50
|
-
description: `Bir birime pozisyon açar (POST /{project}/organization/positions). Pozisyon ROLE bağlıdır (roleId — role_list) ve kullanıcının rolü pozisyonundan gelir. parentPositionId idari hattı, functionalParentPositionId işlevsel hattı kurar; 'subordinates' kapsamı grant'teki subordinatesLine ile bu iki hattan birini (ya da ikisini) yürür. ${subscribedNote}`,
|
|
51
|
-
inputSchema: {
|
|
52
|
-
project: projectParam,
|
|
53
|
-
environment: environmentParam,
|
|
54
|
-
unitId: guid.describe("Pozisyonun bağlı olduğu birim (organization_tree_get)"),
|
|
55
|
-
roleId: guid.describe("Rolün id'si (role_list)"),
|
|
56
|
-
name: z.string().min(1),
|
|
57
|
-
code: z.string().min(1).describe('Projede tekil kısa kod'),
|
|
58
|
-
parentPositionId: guid.optional().describe('İdari üst pozisyon'),
|
|
59
|
-
functionalParentPositionId: guid.optional().describe('İşlevsel üst pozisyon'),
|
|
60
|
-
isMultiSeat: z.boolean().optional().describe("Varsayılan false: koltukta aynı anda tek KALICI kişi oturur, ikinci kalıcı atama 409 OrganizationPositionSeatOccupied alır. true ise koltuk sınırı yok. Vekâlet için bayrağa gerek yok — assignmentType: 'acting' sınıra hiç girmez (TB-96)")
|
|
61
|
-
},
|
|
62
|
-
annotations: writes
|
|
63
|
-
}, handle(config, ({ project, environment, ...body }) => platform.tenant('POST', project, '/organization/positions', { environment, body })));
|
|
64
|
-
server.registerTool('organization_position_update', {
|
|
65
|
-
title: 'Organizasyon pozisyonunu güncelle',
|
|
66
|
-
description: `Pozisyonun alanlarını değiştirir (PUT /{project}/organization/positions/{id}) — TAM gövde gönderilir, verilmeyen alan boşaltılır: isMultiSeat verilmezse false gider ve açık bayrak kapanır. Rolü değiştirmek o pozisyondaki HER KULLANICININ yetkisini değiştirir. ${subscribedNote}`,
|
|
67
|
-
inputSchema: {
|
|
68
|
-
project: projectParam,
|
|
69
|
-
environment: environmentParam,
|
|
70
|
-
id: guid,
|
|
71
|
-
unitId: guid,
|
|
72
|
-
roleId: guid,
|
|
73
|
-
name: z.string().min(1),
|
|
74
|
-
code: z.string().min(1),
|
|
75
|
-
parentPositionId: guid.optional(),
|
|
76
|
-
functionalParentPositionId: guid.optional(),
|
|
77
|
-
isMultiSeat: z.boolean().optional().describe("Varsayılan false: koltukta aynı anda tek KALICI kişi oturur, ikinci kalıcı atama 409 OrganizationPositionSeatOccupied alır. true ise koltuk sınırı yok. Vekâlet için bayrağa gerek yok — assignmentType: 'acting' sınıra hiç girmez (TB-96)")
|
|
78
|
-
},
|
|
79
|
-
annotations: updates
|
|
80
|
-
}, handle(config, ({ project, environment, id, ...body }) => platform.tenant('PUT', project, `/organization/positions/${id}`, { environment, body })));
|
|
81
|
-
server.registerTool('organization_unit_deactivate', {
|
|
82
|
-
title: 'Organizasyon birimini pasifleştir',
|
|
83
|
-
description: `Birimi pasifleştirir (POST /{project}/organization/units/{id}/deactivate) — SİLMEZ: düğüm ağaçta kalır, isActive false olur ve organization_tree_get onu ancak includeInactive: true ile gösterir. Kapanan şube / kapatılan departman bu uçla kapatılır. DOLU bir düğüm kapanmaz: altında aktif birim, aktif pozisyon ya da o pozisyonda oturan kullanıcı varsa 400 OrganizationStructureNodeInUse döner — önce koltukları boşaltın (user_position_replace) ve alt birimleri kapatın. Pasifleştirme satırlara DOKUNMAZ: kayıtların sys_owner_unit_id'si o birimi göstermeye devam eder ve kapanış tablosu da değişmez, yani ata birimi kapsayan (unit-tree · company-tree) çağıranlar onları görmeye devam eder; yalnız kapsamı tam o birim (unit) olanlar kaybeder. Kayıtları gerçekten taşımak için row_reassign. Geri almak için organization_unit_activate. ${subscribedNote}`,
|
|
84
|
-
inputSchema: { project: projectParam, environment: environmentParam, id: guid.describe("Birimin id'si (organization_tree_get)") },
|
|
85
|
-
annotations: destructive
|
|
86
|
-
}, handle(config, ({ project, environment, id }) => platform.tenant('POST', project, `/organization/units/${id}/deactivate`, { environment })));
|
|
87
|
-
server.registerTool('organization_position_deactivate', {
|
|
88
|
-
title: 'Organizasyon pozisyonunu pasifleştir',
|
|
89
|
-
description: `Pozisyonu (koltuğu) pasifleştirir (POST /{project}/organization/positions/{id}/deactivate) — SİLMEZ: isActive false olur ve organization_tree_get onu ancak includeInactive: true ile gösterir. Fesih adımının doğru ucu budur. DOLU koltuk kapanmaz: 400 OrganizationStructureNodeInUse ÜÇ sebepten gelebilir — koltukta oturan kullanıcı, bu pozisyona bağlı (idari ya da işlevsel) başka bir aktif pozisyon, ya da pozisyonu managerPositionId olarak gösteren bir birim. Sırayla: user_position_replace ile atamayı kaldırın, ast pozisyonları kapatın, yöneticiyi gösteren birimi organization_unit_update ile managerPositionId'siz yazın. Pasif pozisyon kapsam hesabına girmez: o koltuktan gelen birim/şirket bağı biter, kullanıcının başka pozisyonu yoksa hiçbir kapsamlı grant'e uymaz. Geri almak için organization_position_activate. ${subscribedNote}`,
|
|
90
|
-
inputSchema: { project: projectParam, environment: environmentParam, id: guid.describe("Pozisyonun id'si (organization_tree_get)") },
|
|
91
|
-
annotations: destructive
|
|
92
|
-
}, handle(config, ({ project, environment, id }) => platform.tenant('POST', project, `/organization/positions/${id}/deactivate`, { environment })));
|
|
93
|
-
server.registerTool('organization_unit_activate', {
|
|
94
|
-
title: 'Organizasyon birimini etkinleştir',
|
|
95
|
-
description: `Pasifleştirilmiş birimi geri açar (POST /{project}/organization/units/{id}/activate) — organization_unit_deactivate'in tersidir ve arşivlemeyi TEK YÖNLÜ olmaktan çıkarır (TB-112). Düğüm hiç silinmediği için id, kod ve alt ağaç korunur; isActive true olur ve birim organization_tree_get'te includeInactive olmadan da görünür. ÜST BİRİM PASİFSE açılmaz: 400 OrganizationStructureParentInactive döner — kökten yaprağa doğru ilerleyin, önce üst birimi etkinleştirin. Pasifleştirme satırlara dokunmadığı için geri açmak da dokunmaz: kapsam hesabı birim yeniden aktifleştiği anda o birimi gören çağıranlara geri döner. ${subscribedNote}`,
|
|
96
|
-
inputSchema: { project: projectParam, environment: environmentParam, id: guid.describe("Birimin id'si (organization_tree_get includeInactive: true)") },
|
|
97
|
-
annotations: updates
|
|
98
|
-
}, handle(config, ({ project, environment, id }) => platform.tenant('POST', project, `/organization/units/${id}/activate`, { environment })));
|
|
99
|
-
server.registerTool('organization_position_activate', {
|
|
100
|
-
title: 'Organizasyon pozisyonunu etkinleştir',
|
|
101
|
-
description: `Pasifleştirilmiş pozisyonu (koltuğu) geri açar (POST /{project}/organization/positions/{id}/activate) — organization_position_deactivate'in tersidir (TB-112). isActive true olur; koltuk BOŞ açılır, eski atama geri gelmez — kullanıcıyı user_position_replace ile yeniden oturtun. ÜST DÜĞÜM PASİFSE açılmaz: 400 OrganizationStructureParentInactive üç sebepten gelebilir — pozisyonun birimi pasif, idari üst pozisyonu pasif, ya da işlevsel üst pozisyonu pasif. Sırayla: önce birimi (organization_unit_activate), sonra üst pozisyonu açın. ${subscribedNote}`,
|
|
102
|
-
inputSchema: { project: projectParam, environment: environmentParam, id: guid.describe("Pozisyonun id'si (organization_tree_get includeInactive: true)") },
|
|
103
|
-
annotations: updates
|
|
104
|
-
}, handle(config, ({ project, environment, id }) => platform.tenant('POST', project, `/organization/positions/${id}/activate`, { environment })));
|
|
105
|
-
server.registerTool('user_position_list', {
|
|
106
|
-
title: 'Kullanıcının pozisyonlarını listele',
|
|
107
|
-
description: "Bir uygulama kullanıcısının pozisyonlarını listeler (GET /{project}/organization/users/{userId}/positions). Kompleks projede kullanıcının rolü, birimi ve şirketi BURADAN gelir: pozisyonu olmayan kullanıcı hiçbir kapsamlı grant'e uymaz ve her şeyden reddedilir — 'neden göremiyor?' sorusunda bakılacak ilk yer burasıdır (access_preview'dan önce).",
|
|
108
|
-
inputSchema: { project: projectParam, environment: environmentParam, userId: guid.describe("Kullanıcı id'si (user_list)") },
|
|
109
|
-
annotations: readOnly
|
|
110
|
-
}, handle(config, async ({ project, environment, userId }) => {
|
|
111
|
-
const payload = await platform.tenant('GET', project, `/organization/users/${userId}/positions`, { environment });
|
|
112
|
-
const count = Array.isArray(payload?.data) ? payload.data.length : 0;
|
|
113
|
-
return count > 0
|
|
114
|
-
? payload
|
|
115
|
-
: { ...payload, note: "Kullanıcının hiç pozisyonu yok: kompleks projede bu kullanıcı rolsüz/birimsizdir ve kapsamlı hiçbir grant'e uymaz. user_position_replace ile pozisyon verin." };
|
|
116
|
-
}));
|
|
117
|
-
server.registerTool('user_position_replace', {
|
|
118
|
-
title: "Kullanıcının pozisyonlarını değiştir",
|
|
119
|
-
description: "Bir kullanıcının pozisyon atamalarının TAMAMINI verilen listeyle değiştirir (PUT /{project}/organization/users/{userId}/positions): listede olmayan mevcut atama SİLİNİR, boş liste kullanıcıyı pozisyonsuz bırakır. Eklemek için önce user_position_list ile mevcut listeyi okuyup üzerine ekleyin. Değişiklik kullanıcının erişim sürümünü artırır: açık oturumların yetkisi bir sonraki kararda yeniden hesaplanır.",
|
|
120
|
-
inputSchema: {
|
|
121
|
-
project: projectParam,
|
|
122
|
-
environment: environmentParam,
|
|
123
|
-
userId: guid,
|
|
124
|
-
positions: z.array(z.object({
|
|
125
|
-
positionId: guid,
|
|
126
|
-
isPrimary: z.boolean().optional().describe('Birincil atama (varsayılan false)'),
|
|
127
|
-
assignmentType: z.enum(['permanent', 'acting']).optional().describe("'acting' vekâleten; varsayılan 'permanent'"),
|
|
128
|
-
startsAt: z.string().optional().describe('ISO tarih'),
|
|
129
|
-
endsAt: z.string().optional().describe('ISO tarih')
|
|
130
|
-
})).describe('Atama listesinin TAMAMI; boş dizi bütün atamaları siler')
|
|
131
|
-
},
|
|
132
|
-
annotations: updates
|
|
133
|
-
}, handle(config, ({ project, environment, userId, positions }) => {
|
|
134
|
-
enforcePolicy(evaluatePolicy(config, policyRules, 'userPosition', { positions }, { operation: 'update' }), false);
|
|
135
|
-
return platform.tenant('PUT', project, `/organization/users/${userId}/positions`, { environment, body: { positions } });
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { findingLines, profileFindings, stateStorageFindings } from '../knowledge/platform/lint.js';
|
|
2
|
-
import { describeShell, mobileLayoutFindings, newFindings } from '../knowledge/platform/mobileLayoutLint.js';
|
|
3
|
-
import { resolveProfile } from '../knowledge/platform/resolve.js';
|
|
4
|
-
import { fetchCatalogSlugs } from './components.js';
|
|
5
|
-
import { flowPath } from './screens.js';
|
|
6
|
-
/**
|
|
7
|
-
* Sayfa/layout/widget yazma yollarının profil kapısı: mobil profilde `MOB-*` bulgularını
|
|
8
|
-
* `layoutWarnings[]` satırı olarak döner. Web profilinde HİÇBİR istek atmaz ve boş dizi döner —
|
|
9
|
-
* web yanıtı profil öncesiyle aynı kalır (G1 golden).
|
|
10
|
-
*/
|
|
11
|
-
export async function screenProfileWarnings(platform, resolved, project, environment, applicationId, input) {
|
|
12
|
-
if (resolved.profile.platform === 'web')
|
|
13
|
-
return [];
|
|
14
|
-
const catalog = await fetchCatalogSlugs(platform, project, environment, applicationId).catch(() => undefined);
|
|
15
|
-
// Tam kabuk ağacı yazan layout yolları (create/update/patch) mizanpaj iskeletini de denetler (MOB-015…018).
|
|
16
|
-
const layoutTree = resolved.profile.platform === 'mobile' && input.kind === 'layout' && input.nodes !== undefined
|
|
17
|
-
? mobileLayoutFindings({ kind: 'layout', tree: input.nodes })
|
|
18
|
-
: [];
|
|
19
|
-
return findingLines([...profileFindings(resolved.profile, { ...input, ...(catalog ? { catalog } : {}) }), ...layoutTree]);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Sayfa yazımının mizanpaj iskeleti (MOB-015…018): sayfanın kabuğu okunur, çünkü üst pay ve app-bar kabukla
|
|
23
|
-
* birlikte karar verilir. `before` verilirse (yama) yalnız yazımın getirdiği bulgular döner. Web profilinde
|
|
24
|
-
* istek atmaz; kabuk okunamazsa kabuğa bağlı kurallar koşmaz ve bilgi satırı döner.
|
|
25
|
-
*/
|
|
26
|
-
export async function pageLayoutWarnings(platform, resolved, project, environment, applicationId, input) {
|
|
27
|
-
if (resolved.profile.platform !== 'mobile')
|
|
28
|
-
return [];
|
|
29
|
-
const shell = await pageShell(platform, project, environment, applicationId, input.layoutId);
|
|
30
|
-
const after = mobileLayoutFindings({ kind: 'page', tree: input.tree, shell });
|
|
31
|
-
return findingLines(input.before === undefined ? after : newFindings(mobileLayoutFindings({ kind: 'page', tree: input.before, shell }), after));
|
|
32
|
-
}
|
|
33
|
-
/** Kabuk yamasının getirdiği iskelet bulguları (`layout_schema_patch`); web profilinde boş. */
|
|
34
|
-
export function layoutPatchWarnings(resolved, before, after) {
|
|
35
|
-
if (resolved.profile.platform !== 'mobile')
|
|
36
|
-
return [];
|
|
37
|
-
return findingLines(newFindings(mobileLayoutFindings({ kind: 'layout', tree: before }), mobileLayoutFindings({ kind: 'layout', tree: after })));
|
|
38
|
-
}
|
|
39
|
-
async function pageShell(platform, project, environment, applicationId, layoutId) {
|
|
40
|
-
if (typeof layoutId !== 'string' || layoutId === '')
|
|
41
|
-
return { kind: 'none' };
|
|
42
|
-
try {
|
|
43
|
-
const response = await platform.tenant('GET', project, `/layouts/${applicationId}/${layoutId}`, { environment });
|
|
44
|
-
return Array.isArray(response?.data?.views) ? describeShell(response.data.views) : { kind: 'unknown' };
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return { kind: 'unknown' };
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* `set_event` ile bağlanan akışların adımları (MOB-005). Akış gövdeleri şemada değil ayrı uçtadır;
|
|
52
|
-
* okunamazsa bulgu üretilmez, yazım yine geçer.
|
|
53
|
-
*/
|
|
54
|
-
export async function boundFlowSteps(platform, resolved, project, environment, host, applicationId, hostId, ops) {
|
|
55
|
-
if (resolved.profile.platform === 'web')
|
|
56
|
-
return [];
|
|
57
|
-
const flowIds = new Set(ops.filter(entry => entry.op === 'set_event').map(entry => String(entry.eventValue ?? '')).filter(id => id.length > 0));
|
|
58
|
-
if (flowIds.size === 0)
|
|
59
|
-
return [];
|
|
60
|
-
try {
|
|
61
|
-
const hosted = await platform.tenant('GET', project, flowPath(host, applicationId, hostId), { environment });
|
|
62
|
-
return (hosted?.data ?? [])
|
|
63
|
-
.filter(flow => flowIds.has(String(flow.id ?? '')))
|
|
64
|
-
.flatMap(flow => [...(Array.isArray(flow.steps) ? flow.steps : []), ...(Array.isArray(flow.errorSteps) ? flow.errorSteps : [])]);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
return [];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Akış yazma yollarının profil kapısı (MOB-005): mobil uygulamada `download`/`setcookie` adımının
|
|
72
|
-
* davranış farkını `platformWarnings`'e yazar. Web profilinde istek atmaz, boş döner.
|
|
73
|
-
*/
|
|
74
|
-
/**
|
|
75
|
-
* Değişken yazma yollarının profil kapısı (MOB-014). Yazılan set saklama türü taşımıyorsa uygulama
|
|
76
|
-
* tipi ÇÖZÜLMEZ — ek istek atılmaz, yanıt profil öncesiyle aynı kalır. Tip çözülemediyse (uygulama
|
|
77
|
-
* okunamadı) bulgu üretilmez: gateway bilmediği platform için "uygulanmıyor" demez.
|
|
78
|
-
*/
|
|
79
|
-
export async function variableProfileWarnings(platform, applicationId, entries) {
|
|
80
|
-
if (!entries.some(entry => entry.storage !== undefined))
|
|
81
|
-
return [];
|
|
82
|
-
const resolved = await resolveProfile(platform, applicationId);
|
|
83
|
-
if (!resolved.known)
|
|
84
|
-
return [];
|
|
85
|
-
return findingLines(stateStorageFindings(resolved.profile, entries));
|
|
86
|
-
}
|
|
87
|
-
export async function flowProfileWarnings(platform, applicationId, steps) {
|
|
88
|
-
const resolved = await resolveProfile(platform, applicationId);
|
|
89
|
-
if (resolved.profile.platform === 'web')
|
|
90
|
-
return [];
|
|
91
|
-
return findingLines(profileFindings(resolved.profile, { kind: 'page', steps }));
|
|
92
|
-
}
|