@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.
Files changed (203) hide show
  1. package/.env.example +0 -15
  2. package/README.md +5 -5
  3. package/dist/config.js +0 -37
  4. package/dist/index.js +0 -2
  5. package/dist/knowledge/backendConstraints.js +1 -18
  6. package/dist/knowledge/boxSections.js +184 -0
  7. package/dist/knowledge/componentCatalog.js +232 -562
  8. package/dist/knowledge/componentEvents.js +21 -141
  9. package/dist/knowledge/layoutSummary.js +2 -140
  10. package/dist/knowledge/normalize.js +67 -236
  11. package/dist/knowledge/outlines.js +0 -36
  12. package/dist/knowledge/policy.js +4 -18
  13. package/dist/knowledge/reservedTables.js +0 -79
  14. package/dist/knowledge/rules.js +21 -319
  15. package/dist/knowledge/schemaGuard.js +0 -11
  16. package/dist/knowledge/styleResolve.js +38 -55
  17. package/dist/knowledge/themeResolve.js +3 -3
  18. package/dist/observability/trace.js +3 -6
  19. package/dist/platform/diagnostics.js +4 -10
  20. package/dist/platform/domSummary.js +1 -1
  21. package/dist/platform/errors.js +10 -162
  22. package/dist/platform/http.js +8 -29
  23. package/dist/platform/responses.js +5 -39
  24. package/dist/platform/{capture/capture.js → screenshot.js} +519 -105
  25. package/dist/platform/secrets.js +1 -17
  26. package/dist/platform/strictArguments.js +12 -68
  27. package/dist/platform/tokenVault.js +4 -187
  28. package/dist/resources/examples/layout-app-shell.json +707 -229
  29. package/dist/resources/examples/page-detail-profile.json +1 -2
  30. package/dist/resources/examples/page-dynamic-form.json +2 -3
  31. package/dist/resources/examples/page-flex-sections.json +1 -1
  32. package/dist/resources/examples/page-html-embed.json +1 -1
  33. package/dist/resources/examples/workflow-basic.json +2 -8
  34. package/dist/resources/guides/component.md +4 -91
  35. package/dist/resources/guides/entity.md +8 -50
  36. package/dist/resources/guides/expressions.md +5 -14
  37. package/dist/resources/guides/functions.md +1 -1
  38. package/dist/resources/guides/getting-started.md +1 -38
  39. package/dist/resources/guides/layout.md +58 -55
  40. package/dist/resources/guides/microservice.md +2 -81
  41. package/dist/resources/guides/middleware.md +2 -44
  42. package/dist/resources/guides/page.md +75 -454
  43. package/dist/resources/guides/theme.md +2 -8
  44. package/dist/resources/guides/translation.md +1 -1
  45. package/dist/resources/guides/workflow.md +1 -58
  46. package/dist/resources/rules.js +5 -11
  47. package/dist/resources/schema-fingerprint.json +5 -7
  48. package/dist/resources/schemas/CreateEntityCommand.json +0 -118
  49. package/dist/resources/schemas/CreateMicroserviceCommand.json +1 -13
  50. package/dist/resources/schemas/CreateQueryCommand.json +0 -4
  51. package/dist/resources/schemas/CreateWorkflowCommand.json +1 -143
  52. package/dist/resources/schemas/DataJobDto.json +1 -6
  53. package/dist/resources/schemas/GlobalFunctionUpdateResultDto.json +1 -21
  54. package/dist/resources/schemas/MicroserviceDto.json +3 -15
  55. package/dist/resources/schemas/PreviewMicroserviceCommand.json +1 -10
  56. package/dist/resources/schemas/PreviewWorkflowCommand.json +1 -22
  57. package/dist/resources/schemas/StepDto.json +1 -22
  58. package/dist/resources/schemas/UpdateEntityCommand.json +0 -118
  59. package/dist/resources/schemas/UpdateMicroserviceCommand.json +1 -13
  60. package/dist/resources/schemas/UpdateQueryCommand.json +0 -4
  61. package/dist/resources/schemas/UpdateViewCommand.json +2 -0
  62. package/dist/resources/schemas/UpdateWorkflowCommand.json +1 -143
  63. package/dist/server.js +1 -27
  64. package/dist/tools/access.js +2 -369
  65. package/dist/tools/applications.js +3 -60
  66. package/dist/tools/common.js +0 -7
  67. package/dist/tools/components.js +14 -118
  68. package/dist/tools/datasources.js +3 -3
  69. package/dist/tools/dependencies.js +1 -1
  70. package/dist/tools/deployments.js +2 -2
  71. package/dist/tools/designSchemaPatch.js +18 -34
  72. package/dist/tools/dtos.js +5 -36
  73. package/dist/tools/entities.js +12 -79
  74. package/dist/tools/externalComponents.js +5 -26
  75. package/dist/tools/flows.js +14 -122
  76. package/dist/tools/folders.js +1 -1
  77. package/dist/tools/imports.js +2 -5
  78. package/dist/tools/layouts.js +17 -50
  79. package/dist/tools/merges.js +1 -1
  80. package/dist/tools/microservices.js +25 -77
  81. package/dist/tools/pages.js +112 -465
  82. package/dist/tools/platformInfo.js +8 -27
  83. package/dist/tools/projects.js +9 -71
  84. package/dist/tools/rows.js +13 -69
  85. package/dist/tools/schemaOps.js +1 -61
  86. package/dist/tools/screenWrite.js +8 -37
  87. package/dist/tools/screens.js +5 -95
  88. package/dist/tools/templates.js +1 -26
  89. package/dist/tools/translations.js +1 -1
  90. package/dist/tools/variables.js +5 -11
  91. package/dist/tools/workflows.js +5 -10
  92. package/package.json +2 -2
  93. package/dist/knowledge/access.js +0 -802
  94. package/dist/knowledge/case.js +0 -41
  95. package/dist/knowledge/connectDataBind.js +0 -819
  96. package/dist/knowledge/connectDataDefinition.js +0 -341
  97. package/dist/knowledge/connectDataExecute.js +0 -93
  98. package/dist/knowledge/connectDataRules.js +0 -128
  99. package/dist/knowledge/decision.js +0 -121
  100. package/dist/knowledge/expressionPrelude.js +0 -59
  101. package/dist/knowledge/microserviceParameters.js +0 -58
  102. package/dist/knowledge/mining.js +0 -94
  103. package/dist/knowledge/mobileComponentCatalog.js +0 -859
  104. package/dist/knowledge/mobileComponentEvents.js +0 -239
  105. package/dist/knowledge/platform/lint.js +0 -385
  106. package/dist/knowledge/platform/mobile.js +0 -142
  107. package/dist/knowledge/platform/mobileLayoutLint.js +0 -324
  108. package/dist/knowledge/platform/mobileRules.js +0 -231
  109. package/dist/knowledge/platform/mobileSpacing.js +0 -82
  110. package/dist/knowledge/platform/mobileTabs.js +0 -108
  111. package/dist/knowledge/platform/nativeBoxModel.js +0 -44
  112. package/dist/knowledge/platform/profile.js +0 -25
  113. package/dist/knowledge/platform/resolve.js +0 -122
  114. package/dist/knowledge/platform/web.js +0 -39
  115. package/dist/knowledge/process.js +0 -510
  116. package/dist/knowledge/rowFilter.js +0 -43
  117. package/dist/knowledge/styleResolveNative.js +0 -527
  118. package/dist/platform/argumentAliases.js +0 -128
  119. package/dist/platform/bodyFile.js +0 -103
  120. package/dist/platform/capture/actions.js +0 -333
  121. package/dist/platform/capture/browser.js +0 -1
  122. package/dist/platform/capture/console-log.js +0 -122
  123. package/dist/platform/capture/index.js +0 -11
  124. package/dist/platform/capture/readiness.js +0 -103
  125. package/dist/platform/capture/summary.js +0 -77
  126. package/dist/platform/capture/target.js +0 -5
  127. package/dist/platform/capture/targets/studio-mobile.js +0 -15
  128. package/dist/platform/capture/targets/studio-web.js +0 -5
  129. package/dist/platform/impersonation.js +0 -45
  130. package/dist/platform/jsonArray.js +0 -24
  131. package/dist/platform/schemaReadMemory.js +0 -60
  132. package/dist/resources/examples/bpm-gorev-kontrol.json +0 -294
  133. package/dist/resources/examples/bpm-iso-dokuman.json +0 -228
  134. package/dist/resources/examples/bpm-satinalma.json +0 -376
  135. package/dist/resources/examples/connect-data-convert-verify.json +0 -107
  136. package/dist/resources/examples/connect-data-dropdown-roles.json +0 -66
  137. package/dist/resources/examples/connect-data-edit-m2m.json +0 -73
  138. package/dist/resources/examples/connect-data-query-params.json +0 -50
  139. package/dist/resources/examples/connect-data-table-entity.json +0 -147
  140. package/dist/resources/examples/connect-data-workflow-microservice.json +0 -65
  141. package/dist/resources/examples/mobile-app-shell-drawer.json +0 -243
  142. package/dist/resources/examples/mobile-app-shell-stack.json +0 -157
  143. package/dist/resources/examples/mobile-app-shell-tab.json +0 -208
  144. package/dist/resources/examples/mobile-form-screen.json +0 -365
  145. package/dist/resources/examples/mobile-list-detail-form.json +0 -672
  146. package/dist/resources/guides/access.md +0 -796
  147. package/dist/resources/guides/bpm.md +0 -686
  148. package/dist/resources/guides/case.md +0 -153
  149. package/dist/resources/guides/decision.md +0 -185
  150. package/dist/resources/guides/mobile-layout.md +0 -193
  151. package/dist/resources/guides/mobile.md +0 -495
  152. package/dist/resources/read.js +0 -41
  153. package/dist/resources/schemas/AccessExplanationDto.json +0 -144
  154. package/dist/resources/schemas/AccessMatrixDto.json +0 -170
  155. package/dist/resources/schemas/AccessPermissionDto.json +0 -57
  156. package/dist/resources/schemas/AccessPolicyDto.json +0 -223
  157. package/dist/resources/schemas/AccessResourceDto.json +0 -86
  158. package/dist/resources/schemas/AppSessionDto.json +0 -53
  159. package/dist/resources/schemas/ConnectDataDescribeDto.json +0 -344
  160. package/dist/resources/schemas/ConnectDataRequestModel.json +0 -202
  161. package/dist/resources/schemas/ConnectDataResultDto.json +0 -421
  162. package/dist/resources/schemas/ConnectorCredentialDto.json +0 -70
  163. package/dist/resources/schemas/ConvertConnectDataToMicroserviceCommand.json +0 -37
  164. package/dist/resources/schemas/CreateAccessPolicyCommand.json +0 -209
  165. package/dist/resources/schemas/CreateDecisionCommand.json +0 -221
  166. package/dist/resources/schemas/CreateProcessDefinitionCommand.json +0 -1337
  167. package/dist/resources/schemas/DecisionDto.json +0 -302
  168. package/dist/resources/schemas/DetachConnectDataMicroserviceCommand.json +0 -28
  169. package/dist/resources/schemas/ExplainAccessQuery.json +0 -33
  170. package/dist/resources/schemas/GenerateProcessDocumentCommand.json +0 -116
  171. package/dist/resources/schemas/OrganizationProjectDto.json +0 -335
  172. package/dist/resources/schemas/OrganizationSchemaDto.json +0 -196
  173. package/dist/resources/schemas/OrganizationSchemaVersionDto.json +0 -207
  174. package/dist/resources/schemas/PatchProcessDefinitionCommand.json +0 -76
  175. package/dist/resources/schemas/ProcessDefinitionDto.json +0 -1480
  176. package/dist/resources/schemas/ProcessSimulationDto.json +0 -96
  177. package/dist/resources/schemas/SaveConnectorCredentialCommand.json +0 -90
  178. package/dist/resources/schemas/SaveProcessEventSourceCommand.json +0 -61
  179. package/dist/resources/schemas/SaveProcessMailSourceCommand.json +0 -89
  180. package/dist/resources/schemas/SignProcessTaskCommand.json +0 -73
  181. package/dist/resources/schemas/SimulateProcessDefinitionQuery.json +0 -92
  182. package/dist/resources/schemas/UpdateAccessPolicyCommand.json +0 -209
  183. package/dist/resources/schemas/UpdateDecisionCommand.json +0 -216
  184. package/dist/resources/schemas/UpdateProcessDefinitionCommand.json +0 -1357
  185. package/dist/resources/schemas/ValidateProcessDefinitionQuery.json +0 -1339
  186. package/dist/tools/accessOperations.js +0 -135
  187. package/dist/tools/accessPolicies.js +0 -170
  188. package/dist/tools/accessRuntime.js +0 -203
  189. package/dist/tools/bpm.js +0 -343
  190. package/dist/tools/bpmGovernance.js +0 -266
  191. package/dist/tools/bpmOperations.js +0 -230
  192. package/dist/tools/bpmReporting.js +0 -154
  193. package/dist/tools/bpmRouting.js +0 -150
  194. package/dist/tools/bpmRuntime.js +0 -396
  195. package/dist/tools/case.js +0 -178
  196. package/dist/tools/caseRuntime.js +0 -89
  197. package/dist/tools/connectData.js +0 -449
  198. package/dist/tools/connectors.js +0 -193
  199. package/dist/tools/decisions.js +0 -206
  200. package/dist/tools/mobile.js +0 -221
  201. package/dist/tools/modules.js +0 -48
  202. package/dist/tools/organizationStructure.js +0 -137
  203. package/dist/tools/profileWrite.js +0 -92
@@ -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
- }