@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,103 +0,0 @@
1
- /**
2
- * Kare ne zaman hazır? (G-30 → B-6, 2026-09-07)
3
- *
4
- * `delayMs` TAHMİNDİ; 09-05'te runtime koşan akış sayacını yayınlamaya başladı (`@ng-apps/flow`
5
- * → flow-runtime-errors.ts) ve bekleme "running sıfır, completed > 0" olunca bitiyordu. Bu şart
6
- * mount akışı OLMAYAN sayfada (giriş ekranı) hiç sağlanmaz; akış tetiklemeyen `set` eylemi de
7
- * `completed`'ı artırmaz. 09-06·2 koşusunda üç eylemli giriş denemesi bu yüzden 47 sn sürdü;
8
- * sentetik ölçümde sayfa 0.3 sn'de hazırken aynı çağrı 48 sn'ydi — süre sayfanın değil, bu
9
- * döngünün. Hazırlık artık TEK anlık görüntüden okunur: akış sayacı + Studio'nun yükleme
10
- * iskeleti (`ViewDetail.svelte` → `.view-detail > .bx--skeleton__placeholder`) + runtime
11
- * düğümleri (`[data-element-id]`) + hata/bulunamadı hâli + adres. Karar `decideReadiness`'ta.
12
- *
13
- * Yüklenmemiş kare ASLA dönmez: bütçe dolduğunda sayfa hâlâ hazır değilse çağrı hatayla düşer
14
- * (`captureUnready: true` teşhis kipi dışında). Bozuk sayfayı görmek istiyorsan hata mesajı
15
- * neyin görüldüğünü zaten söyler.
16
- */
17
- export const readinessScript = `(function () { /* readinessSnapshot */
18
- var activity = window.__ngAppsFlowActivity;
19
- return {
20
- activity: activity && typeof activity.running === 'number' && typeof activity.completed === 'number' ? { running: activity.running, completed: activity.completed } : null,
21
- runtimeNodes: document.querySelectorAll('[data-element-id]').length,
22
- skeleton: !!document.querySelector('.view-detail > .bx--skeleton__placeholder'),
23
- viewDetail: !!document.querySelector('.view-detail'),
24
- errorState: !!document.querySelector('.view-detail__error, .view-detail .error-page'),
25
- readyState: String(document.readyState),
26
- href: String(location.href)
27
- };
28
- })()`;
29
- /** Okunan değer gerçekten sayaç mı; değilse sayfa sayaç yayınlamıyordur (eski runtime). */
30
- export function isFlowActivity(activity) {
31
- if (!activity || typeof activity !== 'object')
32
- return false;
33
- const { running, completed } = activity;
34
- return typeof running === 'number' && typeof completed === 'number';
35
- }
36
- /** Tarayıcıdan dönen değer anlık görüntü mü; yönlendirme sırasında evaluate düşer ve undefined kalır. */
37
- export function parseReadiness(raw) {
38
- if (!raw || typeof raw !== 'object')
39
- return undefined;
40
- const value = raw;
41
- if (typeof value.runtimeNodes !== 'number' || typeof value.href !== 'string')
42
- return undefined;
43
- return {
44
- activity: isFlowActivity(value.activity) ? { running: value.activity.running, completed: value.activity.completed } : null,
45
- runtimeNodes: value.runtimeNodes,
46
- skeleton: value.skeleton === true,
47
- viewDetail: value.viewDetail === true,
48
- errorState: value.errorState === true,
49
- readyState: String(value.readyState ?? ''),
50
- href: value.href
51
- };
52
- }
53
- /** `/dev` ve `/view` aynı sayfadır (Studio `hooks.ts` reroute); yönlendirme kararı yalnız yoldan verilir. */
54
- export function runtimePath(url) {
55
- try {
56
- return new URL(url).pathname.replace(/^\/dev\//, '/view/').replace(/\/+$/, '');
57
- }
58
- catch {
59
- return url;
60
- }
61
- }
62
- /** "Hiç akış koşmadı" kararı için DOM'un kaç yoklama değişmemesi gerekir (~600 ms = eski settleMs). */
63
- const quietPolls = 5;
64
- /** Sayaç yayınlanmayan runtime'da tek kanıt DOM durulmasıdır; daha uzun beklenir (~1 sn). */
65
- const legacyQuietPolls = 8;
66
- /** Runtime dışına yönlendirme: hedef sayfanın kendi JS'i çizmeyi bitirsin (~1.5 sn). */
67
- const redirectQuietPolls = 12;
68
- /**
69
- * Tek anlık görüntüden "kare alınabilir" kararı; iki uçta da yanlış beklememek için tek yerde.
70
- * `quiet` görüntünün kaç yoklamadır değişmediğidir, `completedBefore` bu beklemenin başındaki
71
- * bitmiş akış sayısı (sayfa değiştiyse çağıran sıfırlar). İskelet görünüyorsa hiçbir karar yok.
72
- */
73
- export function decideReadiness(snapshot, quiet, completedBefore, baselineUrl) {
74
- if (snapshot.skeleton)
75
- return undefined;
76
- const { activity } = snapshot;
77
- const idle = activity !== null && activity.running === 0;
78
- if (idle && activity.completed > completedBefore && snapshot.runtimeNodes > 0)
79
- return 'ready';
80
- if (idle && snapshot.runtimeNodes > 0 && quiet >= quietPolls)
81
- return 'ready-no-flows';
82
- if (activity === null && snapshot.runtimeNodes > 0 && quiet >= legacyQuietPolls)
83
- return 'ready-no-counter';
84
- if (idle && snapshot.errorState && quiet >= quietPolls)
85
- return 'error';
86
- if (!snapshot.viewDetail && snapshot.readyState === 'complete' && baselineUrl !== undefined && runtimePath(snapshot.href) !== runtimePath(baselineUrl) && quiet >= redirectQuietPolls)
87
- return 'redirected';
88
- return undefined;
89
- }
90
- /** Hata mesajı için: bütçe dolduğunda sayfada NE görüldü. */
91
- export function describeUnready(readiness, apiNote) {
92
- const snapshot = readiness.snapshot;
93
- const suffix = apiNote === undefined ? '' : ` · ${apiNote}`;
94
- if (!snapshot)
95
- return `tarayıcı sayfayı hiç değerlendiremedi (sürekli yönlendirme ya da bağlam düştü)${suffix}`;
96
- if (snapshot.skeleton)
97
- return `sayfa hâlâ yükleme iskeletinde${suffix}`;
98
- if (snapshot.activity && snapshot.activity.running > 0)
99
- return `${snapshot.activity.running} akış hâlâ koşuyor (${snapshot.activity.completed} bitti)${suffix}`;
100
- if (snapshot.runtimeNodes === 0)
101
- return `runtime hiç render olmadı — data-element-id taşıyan düğüm yok${snapshot.viewDetail ? '' : ', .view-detail kabı da yok'}${suffix}`;
102
- return `sayfa durulmadı (${snapshot.runtimeNodes} düğüm, sayaç ${snapshot.activity ? `${snapshot.activity.running} koşan / ${snapshot.activity.completed} biten` : 'yok'})${suffix}`;
103
- }
@@ -1,77 +0,0 @@
1
- /**
2
- * NE GÖRÜNÜYOR — resimsiz (S-5). Aynı sayfa yüklemesinden çıkan üçüncü çıktı: her KÖK runtime
3
- * düğümünün görünürlüğü, metni, satır sayısı, açık sekmesi, değeri ve hata metinleri.
4
- *
5
- * Kök düğüm = kimliğinde `__` OLMAYAN düğüm; iç roller (`tbl__row-3`) satır sayısına dönüşür,
6
- * listeye girmez. Tavan 300 düğüm, metin 80 karakter (K3) — özet bir kareyi değiştirmeli, onun
7
- * kadar pahalı olmamalı. Tip `data-component-type`'tan gelir (frontend f-02); runtime basmıyorsa
8
- * alan YAZILMAZ ve `typed: false` döner — `layoutReportUnavailable` ile aynı dürüstlük kuralı.
9
- */
10
- export function domSummaryScript(viewportHeight) {
11
- return `(function () { /* domSummary */
12
- var MAX = 300;
13
- var CUT = 80;
14
- // Görünür alanın GERÇEK boyu: fullPage ve clip yolları viewport'u içerik boyuna büyütür ve
15
- // o anda window.innerHeight = içerik yüksekliği olur — her düğüm "ekran içinde" görünürdü ve
16
- // "kart katlanmanın altında mı" sorusu HER ZAMAN 'visible' cevabı alırdı (B-10).
17
- var VH = ${Math.max(Math.round(viewportHeight), 1)};
18
- var clean = function (value) { return String(value || '').replace(/\\s+/g, ' ').trim(); };
19
- // Mobil sekme çubuğu '__tabs' bir KÖK satırdır (öğeleri '__tabs__item-<slug>' iç roldür, K14);
20
- // web runtime bu kimliği hiç basmaz.
21
- var ROOT_SELECTOR = '[data-element-id]:not([data-element-id*="__"]), [data-element-id="__tabs"]';
22
- var isRoot = function (element) { var id = String(element.getAttribute('data-element-id') || ''); return id.indexOf('__') < 0 || id === '__tabs'; };
23
- var all = Array.prototype.slice.call(document.querySelectorAll('[data-element-id]'));
24
- var roots = all.filter(isRoot);
25
- var typed = false;
26
- var nodes = roots.slice(0, MAX).map(function (node) {
27
- var id = node.getAttribute('data-element-id');
28
- var type = node.getAttribute('data-component-type');
29
- if (type) typed = true;
30
- // Bir olgu, ONU TAŞIYAN düğüme yazılır: en yakın kök ata bu düğüm değilse o olgu
31
- // çocuğundur ve orada zaten listelenecektir (B-8). Aksi hâlde aynı değer üç satırda çıkar.
32
- var owned = function (element) { return !!element && element.closest(ROOT_SELECTOR) === node; };
33
- var rect = node.getBoundingClientRect();
34
- var visible = typeof node.checkVisibility === 'function'
35
- ? !!node.checkVisibility({ checkVisibilityCSS: true, checkOpacity: true })
36
- : (rect.width > 0 && rect.height > 0);
37
- var inViewport = rect.bottom > 0 && rect.right > 0 && rect.top < VH && rect.left < (window.innerWidth || 0);
38
- // Kap düğümün innerText'i ÇOCUKLARININ metnidir; metin yalnız YAPRAK köklerde yazılır.
39
- var nested = Array.prototype.slice.call(node.querySelectorAll('[data-element-id]'))
40
- .some(isRoot);
41
- var text = nested ? '' : clean(node.innerText);
42
- if (text.length > CUT) text = text.slice(0, CUT) + '…';
43
- var rows = document.querySelectorAll('[data-element-id^="' + id + '__row-"]').length;
44
- var tab = node.querySelector('[role="tab"][aria-selected="true"]');
45
- var field = node.querySelector('input, select, textarea');
46
- var chosen = node.querySelector('.selected-item');
47
- var holder = field || chosen;
48
- var value = !owned(holder) ? '' : (field ? (field.type === 'password' ? '***' : clean(field.value)) : clean(chosen.textContent));
49
- var media = node.querySelector('img, svg, canvas, video, iframe');
50
- // İç içe <li> hem grubu hem alt mesajları sayıyordu: tek grup + 2 alt hata 3 görünüyordu (B-7).
51
- var errorItems = Array.prototype.slice.call(node.querySelectorAll('.form-validation-errors li:not(:has(li))'))
52
- .filter(owned).map(function (item) { return clean(item.textContent); });
53
- // aria-invalid hem köke hem input'a yazılabiliyor (Password.svelte); yalnız ALANLAR sayılır.
54
- var invalid = Array.prototype.slice.call(node.querySelectorAll('input[aria-invalid="true"], select[aria-invalid="true"], textarea[aria-invalid="true"]')).filter(owned).length;
55
- var summary = { elementId: id, visible: !!visible, inViewport: !!inViewport };
56
- if (type) summary.type = type;
57
- if (text) summary.text = text;
58
- if (rows > 0) summary.rows = rows;
59
- if (owned(tab)) summary.activeTab = clean(tab.textContent);
60
- if (value) summary.value = value;
61
- if (visible && !text && !media && !nested) summary.empty = true;
62
- if (errorItems.length > 0) summary.errors = errorItems;
63
- else if (invalid > 0) summary.errors = ['aria-invalid: ' + invalid];
64
- return summary;
65
- });
66
- var messages = [];
67
- Array.prototype.slice.call(document.querySelectorAll('.ng-toast')).forEach(function (toast) {
68
- var name = String(toast.className || '');
69
- var kind = name.indexOf('ng-toast--error') >= 0 ? 'toast/error' : (name.indexOf('ng-toast--success') >= 0 ? 'toast/success' : 'toast');
70
- messages.push({ kind: kind, text: clean(toast.innerText).slice(0, 160) });
71
- });
72
- Array.prototype.slice.call(document.querySelectorAll('.view-detail__error, .error-page')).forEach(function (node) {
73
- messages.push({ kind: 'error', text: clean(node.innerText).slice(0, 160) });
74
- });
75
- return { nodes: nodes, messages: messages, truncated: roots.length > MAX, typed: typed };
76
- })()`;
77
- }
@@ -1,5 +0,0 @@
1
- import { studioMobileTarget } from './targets/studio-mobile.js';
2
- import { studioWebTarget } from './targets/studio-web.js';
3
- export function captureTargetFor(name) {
4
- return name === 'studio-mobile' ? studioMobileTarget : studioWebTarget;
5
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Mobil uygulama: `@ng-apps/ui-native` `NativeRuntime`, Studio'da react-native-web ile çizilir
3
- * (plans/mobil-uygulama-expo F5). Ağaçta `<form>` yoktur — `submit` runtime'ın yayımladığı köprüyle
4
- * form düğümünün `submit` olayını makineye iletir (`web-runtime-host.tsx` `__ngAppsSubmitForm`).
5
- * Sekme çubuğu `__tabs`, öğeleri `__tabs__item-<sayfa slug'ı>` kimliğini taşır (K14). Açılır
6
- * listenin tetikleyicisi `role="combobox"`, seçenekleri `role="option"` + `data-value` taşır ve liste
7
- * `Modal` katmanında açılır (`ng-apps-ui-native` `dropdown`).
8
- */
9
- export const studioMobileTarget = Object.freeze({
10
- name: 'studio-mobile',
11
- submitBridge: '__ngAppsSubmitForm',
12
- optionSelector: '[role="option"][data-value], [role="treeitem"][data-value]',
13
- optionsOutsideNode: true,
14
- platformNote: 'Mobil uygulama: kare Studio\'daki react-native-web çizimidir (/dev|/view) — cihazdaki native çizimle yapısal olarak (düğüm, sıra, ölçü modu, renk) aynı, piksel olarak değil.'
15
- });
@@ -1,5 +0,0 @@
1
- /** Web uygulaması: Svelte runtime. Seçenekler `ng-select` ağacı, form gerçek `<form>`. */
2
- export const studioWebTarget = Object.freeze({
3
- name: 'studio-web',
4
- optionSelector: '[role="treeitem"][data-value]'
5
- });
@@ -1,45 +0,0 @@
1
- import { PlatformApiError } from './errors.js';
2
- /** `NgApps.Infrastructure/Domain/HttpHeaders.cs` `ImpersonatedUserId`. */
3
- export const IMPERSONATED_USER_HEADER = 'impersonated-user-id';
4
- /**
5
- * 38/M-1 — kompleks projede parolasız kullanıcı gözü. `AppSessionMiddleware` (Tenant.API, satır 76)
6
- * production DIŞINDA, kimliği doğrulanmış platform isteği bu başlığı taşırsa ve istekte geçerli bir
7
- * uygulama jetonu YOKSA uygulama öznesini o kullanıcı olarak kurar; `UserMiddleware` başlığı
8
- * production'da Execute eyleminde düşürür. Bu yüzden:
9
- *
10
- * - `asUser` (uygulama jetonu) ile birlikte verilemez: jeton geçerliyse platform başlığı hiç okumaz ve
11
- * istek jetonun sahibi olarak gider — hangi kimliğin kazandığı çağırana belirsiz kalırdı.
12
- * - Runtime aracında production hedefi istek gitmeden durur: başlık orada düşürülür ve istek SESSİZCE
13
- * gateway'in yönetici kimliğiyle giderdi.
14
- * - Kullanıcı projede yoksa platform başlığı yine sessizce yok sayar (`userRepository.FindByIdAsync`
15
- * null) — aynı sessiz düşme; gateway kimliği bir kez okur (GET /users/{id}).
16
- */
17
- export async function impersonationHeaders(platform, tool, project, environment, input, options) {
18
- const { asUserId } = input;
19
- if (asUserId === undefined)
20
- return undefined;
21
- if (input.asUser !== undefined) {
22
- throw new PlatformApiError(`${tool}: asUserId ile asUser birlikte verilemez — asUser geçerli bir uygulama jetonuysa platform impersonated-user-id başlığını okumaz ve istek jetonun sahibi olarak gider. Parolasız kullanıcı gözü için yalnız asUserId, oturum açılmış üye için yalnız asUser verin.`, 400);
23
- }
24
- if (input.anonymous === true) {
25
- throw new PlatformApiError(`${tool}: asUserId ile anonymous: true birlikte verilemez — biri kimliksiz isteği, diğeri belirli bir kullanıcının gözünü ister.`, 400);
26
- }
27
- if (input.ownAuthorization === true) {
28
- throw new PlatformApiError(`${tool}: asUserId ile headers.Authorization birlikte verilemez — kendi jetonunuzla giden istekte platform başlığı değil jetonun sahibini özne yapar. Birini seçin.`, 400);
29
- }
30
- if (options.runtime && platform.resolveEnvironment(environment) === 'production') {
31
- throw new PlatformApiError(`${tool}: asUserId production'da kullanılamaz — platform impersonated-user-id başlığını production'da düşürür ve istek sessizce gateway'in yönetici kimliğiyle giderdi. Kullanıcı gözüyle doğrulamayı development'ta (ya da bir dalda) yapın; production'da o kullanıcı olarak sınamak için access_session_create + asUser.`, 400);
32
- }
33
- let user;
34
- try {
35
- user = (await platform.tenant('GET', project, `/users/${encodeURIComponent(asUserId)}`, { environment }))?.data;
36
- }
37
- catch (error) {
38
- if (!(error instanceof PlatformApiError) || error.status !== 404)
39
- throw error;
40
- }
41
- if (!user) {
42
- throw new PlatformApiError(`${tool}: asUserId '${asUserId}' bu projede bir kullanıcı değil — platform tanımadığı kimliği sessizce yok sayar ve istek gateway'in kimliğiyle giderdi. Kullanıcı id'sini user_list ile doğrulayın.`, 404);
43
- }
44
- return { [IMPERSONATED_USER_HEADER]: asUserId };
45
- }
@@ -1,24 +0,0 @@
1
- import { z } from 'zod';
2
- /*
3
- * Bazı MCP istemcileri dizi parametresini JSON METNİ olarak gönderir ve bunu parametre adına göre
4
- * tutarsız yapar: `page_schema_patch` aynı gövdeyi `ops` ile kabul edip `operations` ile
5
- * "Expected array, received string" diye reddediyordu; `flow_create` `steps`'i kabul edip
6
- * `errorSteps`'i reddediyordu (Senaryo 02 koşusu, S2-26 / TB-118). Şema tarafında metni çözersek
7
- * hangi adın kullanıldığı ve istemcinin ne yaptığı önemsizleşir.
8
- */
9
- export function jsonArray(schema) {
10
- return z.preprocess(value => {
11
- if (typeof value !== 'string')
12
- return value;
13
- const trimmed = value.trim();
14
- if (!trimmed.startsWith('['))
15
- return value;
16
- try {
17
- const parsed = JSON.parse(trimmed);
18
- return Array.isArray(parsed) ? parsed : value;
19
- }
20
- catch {
21
- return value;
22
- }
23
- }, schema);
24
- }
@@ -1,60 +0,0 @@
1
- /**
2
- * Sayfa okumalarının belleği. İki soru cevaplar:
3
- *
4
- * - "Bu sayfa sürümü kırpık okundu mu" (ZM-28, PAGE-042): `page_schema_get(mode:'full',
5
- * allowTruncated:true)` sığmayan şemayı kırparak döndüğünde anahtar işaretlenir; aynı sürümü
6
- * `baseVersion` olarak veren `page_schema_patch` uyarı taşır — plan, düşen düğümleri görmeden
7
- * yapılmış olabilir.
8
- * - "Bu gateway sayfanın hangi sürümünü en son gördü" (PAGE-043, `plans/mobil-plantcare-acigi`
9
- * g-05): `page_get`, `page_schema_get`, `page_schema_patch`'in `newVersion`'ı ve `page_update`'in
10
- * kendi yazdığı sürüm hatırlanır; `page_update` `baseVersion` verilmediğinde onu gönderir. Hiç
11
- * okunmamış sayfaya sürümsüz tam gövde yazılmaz.
12
- *
13
- * SÜREÇ İÇİNDEDİR ve yalnız anahtar/sürüm tutar (gövde yok); `CaptureMemory` ile aynı halka:
14
- * yeniden yazılan anahtar sona gider, en eskisi düşer.
15
- */
16
- export function schemaReadKey(project, environment, pageId, version) {
17
- return `${project}/${environment}/${pageId}@${version}`;
18
- }
19
- export function pageReadKey(project, environment, pageId) {
20
- return `${project}/${environment}/${pageId}`;
21
- }
22
- export class SchemaReadMemory {
23
- limit;
24
- truncated = new Set();
25
- versions = new Map();
26
- constructor(limit = 200) {
27
- this.limit = limit;
28
- }
29
- rememberVersion(key, version) {
30
- this.versions.delete(key);
31
- this.versions.set(key, version);
32
- while (this.versions.size > this.limit) {
33
- const oldest = this.versions.keys().next().value;
34
- if (oldest === undefined)
35
- break;
36
- this.versions.delete(oldest);
37
- }
38
- }
39
- lastVersion(key) {
40
- return this.versions.get(key);
41
- }
42
- markTruncated(key) {
43
- this.truncated.delete(key);
44
- this.truncated.add(key);
45
- while (this.truncated.size > this.limit) {
46
- const oldest = this.truncated.values().next().value;
47
- if (oldest === undefined)
48
- break;
49
- this.truncated.delete(oldest);
50
- }
51
- }
52
- wasTruncated(key) {
53
- return this.truncated.has(key);
54
- }
55
- }
56
- /**
57
- * SÜREÇ düzeyinde tek bellek: HTTP taşıması her POST için yeni bir gateway sunucusu kurduğundan
58
- * (`sharedCaptureMemory` notu) okuma ile yazma ayrı `registerPageTools` çağrılarında koşar.
59
- */
60
- export const sharedSchemaReadMemory = new SchemaReadMemory();
@@ -1,294 +0,0 @@
1
- {
2
- "_meta": {
3
- "synthetic": true,
4
- "note": "S-1: satır olayıyla başlar, yöneticiye bildirim, atanan görevi completeOn ile bitirir, kontrol bölgesinde birim yöneticisi onaylar; ret back-to:iade ile görevi geri açar (writeBack durum=acik). process_definition_create(definition) ile yazılır; zeyrek-backend ProcessRunnerTests.S1 ile birebir."
5
- },
6
- "definition": {
7
- "slug": "gorev-kontrol",
8
- "name": "Görev kontrol",
9
- "description": "Atanan görevi yapar, birim yöneticisi kontrol edip onaylar; ret görevi atanana geri döndürür.",
10
- "analysis": {
11
- "purpose": {
12
- "en": "Work assigned to a person should not be closed without a check; a manager confirms that it was done properly.",
13
- "tr": "Bir kişiye atanan iş kontrol edilmeden kapanmasın; yönetici işin doğru yapıldığını onaylar."
14
- },
15
- "summary": {
16
- "en": "When a task is created with an assignee, their manager is told and the assignee does the work. The manager then checks it: an approval closes the task, a rejection sends it back to the assignee with the reason.",
17
- "tr": "Atanan kişisi olan bir görev oluşunca yöneticisine haber verilir ve atanan kişi işi yapar. Ardından yönetici kontrol eder: onay görevi kapatır, ret gerekçesiyle birlikte görevi atanana geri gönderir."
18
- }
19
- },
20
- "subject": {
21
- "entity": "gorevler"
22
- },
23
- "singleton": "per-subject",
24
- "withdrawPolicy": "before-first-decision",
25
- "onSubjectDeleted": "block",
26
- "history": "full",
27
- "sod": [
28
- "not-initiator"
29
- ],
30
- "nodes": [
31
- {
32
- "id": "baslangic",
33
- "type": "start",
34
- "name": "Görev oluşturuldu",
35
- "description": "Görevler tablosunda satır oluşunca süreç başlar.",
36
- "analysis": {
37
- "what": {
38
- "en": "The process starts by itself when a new task is saved.",
39
- "tr": "Yeni bir görev kaydedildiğinde süreç kendiliğinden başlar."
40
- },
41
- "data": {
42
- "en": "Reads the new task record; it starts only when the task has an assignee.",
43
- "tr": "Yeni görev kaydını okur; yalnız görevin atanan kişisi varsa başlar."
44
- },
45
- "why": {
46
- "en": "Every assigned task should be followed from the moment it exists.",
47
- "tr": "Atanan her görev var olduğu andan itibaren takip edilsin diye."
48
- },
49
- "example": {
50
- "en": "The task \"Prepare the Q3 customer report\" is saved with Selin as the assignee, so the process starts.",
51
- "tr": "\"3. çeyrek müşteri raporunu hazırla\" görevi Selin'e atanmış olarak kaydedilir ve süreç başlar."
52
- }
53
- },
54
- "trigger": "row-event",
55
- "entity": "gorevler",
56
- "operation": "create",
57
- "condition": "row.atanan_id != null"
58
- },
59
- {
60
- "id": "bildir",
61
- "type": "notify",
62
- "name": "Yöneticiye bildir",
63
- "description": "Atananın birim yöneticisine yeni görev bildirimi gider.",
64
- "analysis": {
65
- "what": {
66
- "en": "The assignee's unit manager gets an inbox message about the new task.",
67
- "tr": "Atanan kişinin birim yöneticisine yeni görev için kutu mesajı gider."
68
- },
69
- "data": {
70
- "en": "Uses the assignee of the task to find the manager and the task title for the message.",
71
- "tr": "Yöneticiyi bulmak için görevin atanan kişisini, mesaj için görevin başlığını kullanır."
72
- },
73
- "why": {
74
- "en": "The manager will approve the work later, so they should know about it from the start.",
75
- "tr": "İşi sonunda yönetici onaylayacak; baştan haberi olsun diye."
76
- },
77
- "example": {
78
- "en": "Burak, Selin's manager, sees \"New task: Prepare the Q3 customer report\" in his inbox.",
79
- "tr": "Selin'in yöneticisi Burak, kutusunda \"Yeni görev: 3. çeyrek müşteri raporunu hazırla\" mesajını görür."
80
- }
81
- },
82
- "to": "unit-manager of subject-field:atanan_id",
83
- "channels": [
84
- "inbox"
85
- ],
86
- "template": {
87
- "subject": {
88
- "tr": "Yeni görev"
89
- },
90
- "body": {
91
- "tr": "{{row.baslik}} görevi atandı."
92
- }
93
- }
94
- },
95
- {
96
- "id": "gorevi-yap",
97
- "type": "user-task",
98
- "resultKey": "gorevi_yap",
99
- "name": "Görevi yap",
100
- "description": "Atanan görevi yapar; satırı tamamlandı yapınca görev biter.",
101
- "analysis": {
102
- "what": {
103
- "en": "The assignee does the work and marks the task as done.",
104
- "tr": "Atanan kişi işi yapar ve görevi tamamlandı olarak işaretler."
105
- },
106
- "data": {
107
- "en": "Waits until the status of the task becomes \"done\"; the assignee has three days.",
108
- "tr": "Görevin durumu \"tamamlandı\" olana kadar bekler; atanan kişinin üç günü vardır."
109
- },
110
- "why": {
111
- "en": "This is the actual work; everything after it is the check.",
112
- "tr": "Asıl iş budur; sonrasındaki her şey kontrol içindir."
113
- },
114
- "example": {
115
- "en": "Selin prepares the report within three days and sets the task to done.",
116
- "tr": "Selin raporu üç gün içinde hazırlar ve görevi tamamlandı yapar."
117
- }
118
- },
119
- "assignee": "subject-field:atanan_id",
120
- "sla": "P3D",
121
- "completeOn": {
122
- "trigger": "row-event",
123
- "operation": "update",
124
- "condition": "row.durum === 'tamamlandi'"
125
- }
126
- },
127
- {
128
- "id": "kontrol-bolgesi",
129
- "type": "region",
130
- "name": "Kontrol zinciri",
131
- "description": "Uygulama yöneticisinin uyarlayabildiği onay zinciri.",
132
- "analysis": {
133
- "what": {
134
- "en": "A group of approval steps that the application manager can adjust, for example by adding a second approver.",
135
- "tr": "Uygulama yöneticisinin uyarlayabildiği onay adımları grubu; örneğin ikinci bir onaycı eklenebilir."
136
- },
137
- "data": {
138
- "en": "Allows at most three steps, only approvals and notifications, assigned to managers, roles or positions.",
139
- "tr": "En çok üç adıma izin verir; yalnız onay ve bildirim, yalnız yöneticiye, role ya da pozisyona atanır."
140
- },
141
- "why": {
142
- "en": "Each unit checks work differently; the chain can change without redrawing the process.",
143
- "tr": "Her birim işi farklı kontrol eder; zincir süreci baştan çizmeden değişebilsin diye."
144
- },
145
- "example": {
146
- "en": "For the sales unit the chain has one step: Burak's check. Another unit could add a second approver here.",
147
- "tr": "Satış birimi için zincirde tek adım var: Burak'ın kontrolü. Başka bir birim buraya ikinci bir onaycı ekleyebilir."
148
- }
149
- },
150
- "editable": "open",
151
- "limits": {
152
- "maxSteps": 3,
153
- "nodeTypes": [
154
- "approval",
155
- "notify"
156
- ],
157
- "assigneeRules": [
158
- "unit-manager",
159
- "parent-unit-manager",
160
- "role",
161
- "position"
162
- ]
163
- },
164
- "nodes": [
165
- {
166
- "id": "kontrol-onay",
167
- "type": "approval",
168
- "resultKey": "kontrol_onay",
169
- "name": "Kontrol ve onay",
170
- "description": "Birim yöneticisi görevi kontrol eder.",
171
- "analysis": {
172
- "what": {
173
- "en": "The assignee's unit manager checks the work and approves or rejects it.",
174
- "tr": "Atanan kişinin birim yöneticisi işi kontrol eder; onaylar ya da reddeder."
175
- },
176
- "data": {
177
- "en": "Looks at the completed task. A rejection needs a comment and sends the task back; the manager has two days.",
178
- "tr": "Tamamlanan göreve bakar. Ret için yorum zorunludur ve görev geri gönderilir; yöneticinin iki günü vardır."
179
- },
180
- "why": {
181
- "en": "A second person confirms the quality of the work before it is closed.",
182
- "tr": "İş kapanmadan önce kalitesini ikinci bir kişi onaylasın diye."
183
- },
184
- "example": {
185
- "en": "Burak opens the report, notices the missing chart and rejects it with \"Add the regional chart\"; the second time he approves it.",
186
- "tr": "Burak raporu açar, eksik grafiği fark eder ve \"Bölge grafiğini ekle\" yorumuyla reddeder; ikinci seferde onaylar."
187
- }
188
- },
189
- "editable": "params",
190
- "editableParams": [
191
- "assignee",
192
- "sla"
193
- ],
194
- "assignee": "unit-manager of subject-field:atanan_id",
195
- "policy": "any",
196
- "commentRequired": "outcome === 'rejected'",
197
- "onReject": "back-to:iade",
198
- "sla": "P2D"
199
- }
200
- ],
201
- "edges": []
202
- },
203
- {
204
- "id": "iade",
205
- "type": "notify",
206
- "name": "Göreve iade",
207
- "description": "Ret gerekçesi atanana bildirilir, satır yeniden açılır.",
208
- "analysis": {
209
- "what": {
210
- "en": "The assignee is told that the task came back, and the task is opened again.",
211
- "tr": "Atanan kişiye görevin geri döndüğü bildirilir ve görev yeniden açılır."
212
- },
213
- "data": {
214
- "en": "Uses the task title for the message and sets the status of the task back to \"open\".",
215
- "tr": "Mesaj için görevin başlığını kullanır, görevin durumunu yeniden \"açık\" yapar."
216
- },
217
- "why": {
218
- "en": "The assignee has to know what to fix, and the task must be workable again.",
219
- "tr": "Atanan kişi neyi düzelteceğini bilmeli, görev yeniden üzerinde çalışılabilir olmalı."
220
- },
221
- "example": {
222
- "en": "Selin gets \"The task was returned for correction\" with Burak's comment, and the task is open again.",
223
- "tr": "Selin'e Burak'ın yorumuyla \"Görev düzeltme için iade edildi\" mesajı gelir ve görev yeniden açılır."
224
- }
225
- },
226
- "to": "subject-field:atanan_id",
227
- "channels": [
228
- "inbox"
229
- ],
230
- "template": {
231
- "subject": {
232
- "tr": "Görev iade edildi"
233
- },
234
- "body": {
235
- "tr": "{{row.baslik}} görevi düzeltme için iade edildi."
236
- }
237
- },
238
- "writeBack": {
239
- "durum": "'acik'"
240
- }
241
- },
242
- {
243
- "id": "onaylandi",
244
- "type": "end",
245
- "name": "Onaylandı",
246
- "description": "Görev onaylandı, satır kapatılır.",
247
- "analysis": {
248
- "what": {
249
- "en": "The process ends with the task approved.",
250
- "tr": "Süreç görev onaylanmış olarak biter."
251
- },
252
- "data": {
253
- "en": "Sets the status of the task to \"approved\".",
254
- "tr": "Görevin durumunu \"onaylandı\" yapar."
255
- },
256
- "why": {
257
- "en": "The task record shows that the work is finished and checked.",
258
- "tr": "Görev kaydı işin bittiğini ve kontrol edildiğini göstersin diye."
259
- },
260
- "example": {
261
- "en": "After Burak's approval the Q3 report task shows \"approved\".",
262
- "tr": "Burak onaylayınca 3. çeyrek rapor görevi \"onaylandı\" olarak görünür."
263
- }
264
- },
265
- "outcome": "approved",
266
- "writeBack": {
267
- "durum": "'onaylandi'"
268
- }
269
- }
270
- ],
271
- "edges": [
272
- [
273
- "baslangic",
274
- "bildir"
275
- ],
276
- [
277
- "bildir",
278
- "gorevi-yap"
279
- ],
280
- [
281
- "gorevi-yap",
282
- "kontrol-bolgesi"
283
- ],
284
- [
285
- "kontrol-bolgesi",
286
- "onaylandi"
287
- ],
288
- [
289
- "iade",
290
- "gorevi-yap"
291
- ]
292
- ]
293
- }
294
- }