@straiffi/archon 1.10.9 → 1.10.12

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 (165) hide show
  1. package/dist/client/assets/ActivityView-BFn_Nhj4.js +1 -0
  2. package/dist/client/assets/GitHubActionsDialog-iZD86Yju.js +1 -0
  3. package/dist/client/assets/VerificationDialog-CqKE8t1d.js +4 -0
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-BAIGV9Mj.js → architectureDiagram-3BPJPVTR-C8KefY67.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM-B-5v5jSZ.js → blockDiagram-GPEHLZMM-BO2Q_Osr.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-C6wU415o.js → c4Diagram-AAUBKEIU-DGPkhbrK.js} +1 -1
  7. package/dist/client/assets/channel-DXKn3TOv.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-COmvX2tP.js → chunk-2J33WTMH-Dtb7Xu8C.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-BlANptdY.js → chunk-3OPIFGDE-Bnf4GbOF.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-ETyA2_GU.js → chunk-5ZQYHXKU-BWGid3g7.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-D5-DudwF.js → chunk-727SXJPM-ScA8IRGP.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-k1AJ4sA3.js → chunk-AQP2D5EJ-Bygg04Ip.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-jfksXwY9.js → chunk-CSCIHK7Q-CxdDDtfN.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-CHj0FDj9.js → chunk-KSCS5N6A-BgpZFsB5.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-1ODGxXhG.js → chunk-L5ZTLDWV-CKSew0OL.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-Bgh9X2W0.js → chunk-LZXEDZCA-DVG9Rx0K.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-DDkb3sp4.js → chunk-ND2GUHAM-CHBqNmuF.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-B6B8PZ_-.js → chunk-NZK2D7GU-DvZYWn7V.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-DhiUIFgj.js → chunk-O5CBEL6O-BL7lRTSe.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-Dzd0fbP3.js → chunk-WU5MYG2G-C-il2wHZ.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-U0fU20hT.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C6bQNSxL.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-DoNDMCXI.js → dagre-BM42HDAG-B00l5tLi.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-ETDXSa5q.js → diagram-2AECGRRQ-Tum6g1_5.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-CgTUep7e.js → diagram-5GNKFQAL-BK1GX5jc.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-BKTx2iRe.js → diagram-KO2AKTUF-BrzmD5NB.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-9iEiScHT.js → diagram-LMA3HP47-BhrlgXiJ.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-UIZRh7Qa.js → diagram-OG6HWLK6-K-fWsJ3a.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-BpNJmJva.js → erDiagram-TEJ5UH35-Der6PjHE.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-C-rK0XZ1.js → flowDiagram-I6XJVG4X-BVWgGhXe.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DWyfPvv_.js → ganttDiagram-6RSMTGT7-DcoZ5ggj.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-x71bzdc_.js → gitGraphDiagram-PVQCEYII-BhhbMTBu.js} +1 -1
  33. package/dist/client/assets/index-B6BltHSr.css +2 -0
  34. package/dist/client/assets/index-CFOYm3j9.js +276 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-CbRus0Xu.js → infoDiagram-5YYISTIA-Lwc-agyc.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-DvaMHrgN.js → ishikawaDiagram-YF4QCWOH-B95U1Xcl.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-BQBu4YGn.js → journeyDiagram-JHISSGLW-xFpigy5D.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-8rU-U7L1.js → kanban-definition-UN3LZRKU-D3mudQnR.js} +1 -1
  39. package/dist/client/assets/{line-CSZnwjLA.js → line-DtTL3ZI2.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-CTOl2slE.js → mermaid-parser.core-Dau7K6zV.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-B9gr0Vqf.js → mermaid.core-B8qtvATu.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-But1_PWQ.js → mindmap-definition-RKZ34NQL-Cus04Yq3.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-CnlVmfSG.js → pieDiagram-4H26LBE5-BCMGpBnn.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-Dww1ZGuR.js → quadrantDiagram-W4KKPZXB-CAmOr-PJ.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-CNf_loe8.js → requirementDiagram-4Y6WPE33-kisD3jc4.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-DBhi37Jj.js → sankeyDiagram-5OEKKPKP-CsCedmM0.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-B64hb4E4.js → sequenceDiagram-3UESZ5HK-B-dAi954.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-DcS6oB-S.js → stateDiagram-AJRCARHV-X0BnedIW.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-6B8YH8Y2.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-Dq-4tXfh.js → timeline-definition-PNZ67QCA-DfFoSjhr.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-CeDklSE_.js → vennDiagram-CIIHVFJN-CKSCBwhG.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-D2cJISMm.js → wardleyDiagram-YWT4CUSO-DNIBQmHO.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-CBF-tTpF.js → xychartDiagram-2RQKCTM6-FvB55TQN.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +368 -5
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +194 -250
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/lib/agentRuns.js +14 -1
  60. package/dist/server/lib/agentRuns.js.map +1 -1
  61. package/dist/server/lib/automationLoopProjection.js +55 -12
  62. package/dist/server/lib/automationLoopProjection.js.map +1 -1
  63. package/dist/server/lib/automationProgression.js +2 -5
  64. package/dist/server/lib/automationProgression.js.map +1 -1
  65. package/dist/server/lib/automationResumeDecision.js +19 -1
  66. package/dist/server/lib/automationResumeDecision.js.map +1 -1
  67. package/dist/server/lib/buildControlEligibility.js +4 -0
  68. package/dist/server/lib/buildControlEligibility.js.map +1 -0
  69. package/dist/server/lib/buildExecutionAdmission.js +76 -0
  70. package/dist/server/lib/buildExecutionAdmission.js.map +1 -0
  71. package/dist/server/lib/buildSequenceResume.js +79 -0
  72. package/dist/server/lib/buildSequenceResume.js.map +1 -0
  73. package/dist/server/lib/buildWorkload.js +11 -0
  74. package/dist/server/lib/buildWorkload.js.map +1 -0
  75. package/dist/server/lib/checkAutoFixDetails.js +36 -1
  76. package/dist/server/lib/checkAutoFixDetails.js.map +1 -1
  77. package/dist/server/lib/executionEnvironmentReconciliation.js +15 -2
  78. package/dist/server/lib/executionEnvironmentReconciliation.js.map +1 -1
  79. package/dist/server/lib/executionEnvironments.js +15 -0
  80. package/dist/server/lib/executionEnvironments.js.map +1 -1
  81. package/dist/server/lib/executionRetry.js +13 -1
  82. package/dist/server/lib/executionRetry.js.map +1 -1
  83. package/dist/server/lib/executionRunAuthority.js +2 -2
  84. package/dist/server/lib/executionRunAuthority.js.map +1 -1
  85. package/dist/server/lib/executionTargets.js +7 -4
  86. package/dist/server/lib/executionTargets.js.map +1 -1
  87. package/dist/server/lib/executionTimeline.js +8 -13
  88. package/dist/server/lib/executionTimeline.js.map +1 -1
  89. package/dist/server/lib/executionTimelineHierarchy.js +83 -0
  90. package/dist/server/lib/executionTimelineHierarchy.js.map +1 -0
  91. package/dist/server/lib/failedBuildSequenceRecovery.js +133 -0
  92. package/dist/server/lib/failedBuildSequenceRecovery.js.map +1 -0
  93. package/dist/server/lib/hostRunSession.js +62 -0
  94. package/dist/server/lib/hostRunSession.js.map +1 -0
  95. package/dist/server/lib/hostServiceRecovery.js +159 -0
  96. package/dist/server/lib/hostServiceRecovery.js.map +1 -0
  97. package/dist/server/lib/hostServiceRunProvider.js +32 -0
  98. package/dist/server/lib/hostServiceRunProvider.js.map +1 -0
  99. package/dist/server/lib/mobileAccess.js +6 -2
  100. package/dist/server/lib/mobileAccess.js.map +1 -1
  101. package/dist/server/lib/projectAutoConfig.js +5 -2
  102. package/dist/server/lib/projectAutoConfig.js.map +1 -1
  103. package/dist/server/lib/projectTargets.js +16 -2
  104. package/dist/server/lib/projectTargets.js.map +1 -1
  105. package/dist/server/lib/projects.js +25 -1
  106. package/dist/server/lib/projects.js.map +1 -1
  107. package/dist/server/lib/reviewFindingReconciliation.js +9 -2
  108. package/dist/server/lib/reviewFindingReconciliation.js.map +1 -1
  109. package/dist/server/lib/reviewFindings.js +82 -21
  110. package/dist/server/lib/reviewFindings.js.map +1 -1
  111. package/dist/server/lib/reviewRepairAssessmentRecords.js +41 -0
  112. package/dist/server/lib/reviewRepairAssessmentRecords.js.map +1 -0
  113. package/dist/server/lib/reviewRepairCompletion.js +78 -18
  114. package/dist/server/lib/reviewRepairCompletion.js.map +1 -1
  115. package/dist/server/lib/reviewRepairIterationRecords.js +4 -2
  116. package/dist/server/lib/reviewRepairIterationRecords.js.map +1 -1
  117. package/dist/server/lib/reviewRepairIterations.js +8 -2
  118. package/dist/server/lib/reviewRepairIterations.js.map +1 -1
  119. package/dist/server/lib/reviewRepairProgress.js +177 -0
  120. package/dist/server/lib/reviewRepairProgress.js.map +1 -0
  121. package/dist/server/lib/reviewRepairReconciliation.js +119 -140
  122. package/dist/server/lib/reviewRepairReconciliation.js.map +1 -1
  123. package/dist/server/lib/reviewRepairResumeOverride.js +55 -0
  124. package/dist/server/lib/reviewRepairResumeOverride.js.map +1 -0
  125. package/dist/server/lib/run.js +541 -504
  126. package/dist/server/lib/run.js.map +1 -1
  127. package/dist/server/lib/runProcessIdentity.js +71 -0
  128. package/dist/server/lib/runProcessIdentity.js.map +1 -0
  129. package/dist/server/lib/runProcesses.js +273 -0
  130. package/dist/server/lib/runProcesses.js.map +1 -0
  131. package/dist/server/lib/runServices.js +223 -0
  132. package/dist/server/lib/runServices.js.map +1 -0
  133. package/dist/server/lib/runSessionLifecycle.js +77 -0
  134. package/dist/server/lib/runSessionLifecycle.js.map +1 -0
  135. package/dist/server/lib/runStatus.js +8 -0
  136. package/dist/server/lib/runStatus.js.map +1 -0
  137. package/dist/server/lib/serviceRunCleanup.js +70 -0
  138. package/dist/server/lib/serviceRunCleanup.js.map +1 -0
  139. package/dist/server/lib/serviceRuns.js +458 -19
  140. package/dist/server/lib/serviceRuns.js.map +1 -1
  141. package/dist/server/lib/ticketAutomation.js +4 -27
  142. package/dist/server/lib/ticketAutomation.js.map +1 -1
  143. package/dist/server/lib/ticketRunOperations.js +103 -34
  144. package/dist/server/lib/ticketRunOperations.js.map +1 -1
  145. package/dist/server/lib/tickets.js +0 -13
  146. package/dist/server/lib/tickets.js.map +1 -1
  147. package/dist/server/lib/types.js.map +1 -1
  148. package/dist/server/workers/build.js +44 -69
  149. package/dist/server/workers/build.js.map +1 -1
  150. package/dist/server/workers/plan.js +0 -7
  151. package/dist/server/workers/plan.js.map +1 -1
  152. package/dist/server/workers/review.js +95 -146
  153. package/dist/server/workers/review.js.map +1 -1
  154. package/package.json +1 -1
  155. package/dist/client/assets/ActivityView-CKvbDXeA.js +0 -1
  156. package/dist/client/assets/GitHubActionsDialog-Dzo0vtak.js +0 -1
  157. package/dist/client/assets/VerificationDialog-BJnOitrJ.js +0 -4
  158. package/dist/client/assets/channel-5mIy7nm1.js +0 -1
  159. package/dist/client/assets/classDiagram-4FO5ZUOK-BiQ-X2Sg.js +0 -1
  160. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CF-wCYW-.js +0 -1
  161. package/dist/client/assets/index-CIAO5aE_.css +0 -2
  162. package/dist/client/assets/index-nCGyalrn.js +0 -276
  163. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-PWeeL0tR.js +0 -1
  164. package/dist/server/lib/automationDeliveryDecision.js +0 -34
  165. package/dist/server/lib/automationDeliveryDecision.js.map +0 -1
@@ -1,7 +1,68 @@
1
1
  import db from '../db.js';
2
+ import { isDeepStrictEqual } from 'node:util';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { captureHostServiceProcessIdentity, cleanupHostServiceProcess, isHostServiceProcessIdentity } from './hostServiceRecovery.js';
2
5
  import { createExecutionProfileSelection, executionProfileSelectionMetadata, validateExecutionProfileSelection, } from './executionRunAuthority.js';
3
6
  import { appendLifecycleEvent, createExecutionRun, getExecutionRun, transitionExecutionRun } from './executionRuns.js';
7
+ import { appendExecutionEnvironmentEvent, getExecutionEnvironment, releaseExecutionRunFromEnvironment, requestExecutionEnvironmentRetirement, } from './executionEnvironments.js';
4
8
  const MAX_SERVICE_SNAPSHOT_BYTES = 16 * 1024;
9
+ export const hasActiveProjectServiceRun = (projectId) => {
10
+ if (projectId === undefined) {
11
+ return Boolean(db.prepare('SELECT 1 FROM active_project_service_authorities LIMIT 1').get());
12
+ }
13
+ return Boolean(db.prepare('SELECT 1 FROM active_project_service_authorities WHERE project_id = ? LIMIT 1').get(projectId));
14
+ };
15
+ export const getActiveProjectServiceAuthority = (projectId) => {
16
+ try {
17
+ return db.prepare(`
18
+ SELECT active.execution_run_id, run.source_kind, details.target_kind,
19
+ COALESCE(details.provider_kind, environment.provider_kind) AS provider_kind,
20
+ details.cleanup_attempts, details.cleanup_retry_at, details.cleanup_error_message,
21
+ details.cleanup_claim_id, COALESCE(details.environment_id, binding.environment_id) AS environment_id,
22
+ COALESCE(details.environment_revision, binding.environment_revision) AS environment_revision
23
+ FROM active_project_service_authorities active
24
+ JOIN execution_runs run ON run.id = active.execution_run_id
25
+ LEFT JOIN service_run_details details ON details.execution_run_id = active.execution_run_id
26
+ LEFT JOIN execution_environment_run_bindings binding
27
+ ON binding.execution_run_id = active.execution_run_id AND binding.project_id = active.project_id
28
+ AND binding.relationship = 'execution' AND binding.released_at IS NULL
29
+ LEFT JOIN execution_environments environment
30
+ ON environment.id = binding.environment_id AND environment.project_id = binding.project_id
31
+ WHERE active.project_id = ?
32
+ LIMIT 1
33
+ `).get(projectId) ?? null;
34
+ }
35
+ catch {
36
+ const legacy = db.prepare(`SELECT active.execution_run_id, run.source_kind, details.target_kind, details.provider_kind
37
+ FROM active_project_service_authorities active
38
+ JOIN execution_runs run ON run.id = active.execution_run_id
39
+ LEFT JOIN service_run_details details ON details.execution_run_id = active.execution_run_id
40
+ WHERE active.project_id = ? LIMIT 1`).get(projectId);
41
+ return legacy ? {
42
+ ...legacy,
43
+ cleanup_attempts: 0,
44
+ cleanup_retry_at: null,
45
+ cleanup_error_message: 'Stored cleanup details are incomplete and cannot be verified automatically.',
46
+ cleanup_claim_id: null,
47
+ environment_id: null,
48
+ environment_revision: null,
49
+ } : null;
50
+ }
51
+ };
52
+ export const getProjectServiceCleanupStatus = (projectId) => {
53
+ const authority = getActiveProjectServiceAuthority(projectId);
54
+ if (!authority) {
55
+ return null;
56
+ }
57
+ return {
58
+ execution_run_id: authority.execution_run_id,
59
+ provider: authority.provider_kind,
60
+ attempts: authority.cleanup_attempts,
61
+ retry_at: authority.cleanup_retry_at,
62
+ error: authority.cleanup_error_message,
63
+ can_force_release: authority.cleanup_claim_id === null,
64
+ };
65
+ };
5
66
  const serializeBounded = (value, label) => {
6
67
  const serialized = JSON.stringify(value);
7
68
  if (Buffer.byteLength(serialized, 'utf8') > MAX_SERVICE_SNAPSHOT_BYTES) {
@@ -39,13 +100,22 @@ const serializeDetails = (row) => {
39
100
  };
40
101
  };
41
102
  export const createServiceRun = (input) => {
42
- const profileSelection = input.profileSelection ?? createExecutionProfileSelection(input.projectId);
43
- const profileRevision = validateExecutionProfileSelection(input.projectId, profileSelection);
44
- const profile = {
45
- build_execution_provider: profileRevision.profile.provider_preference,
46
- ...executionProfileSelectionMetadata(profileSelection),
47
- };
48
103
  const run = db.transaction(() => {
104
+ if (input.sessionId !== undefined && !input.sessionId.trim()) {
105
+ throw new Error('Service session ID must be a non-empty string');
106
+ }
107
+ if (hasActiveProjectServiceRun(input.projectId)) {
108
+ throw new Error('Project already has active service authority');
109
+ }
110
+ if (input.target.identity.projectId !== input.projectId) {
111
+ throw new Error('Service target must belong to the project');
112
+ }
113
+ const profileSelection = input.profileSelection ?? createExecutionProfileSelection(input.projectId);
114
+ const profileRevision = validateExecutionProfileSelection(input.projectId, profileSelection);
115
+ const profile = {
116
+ build_execution_provider: profileRevision.profile.provider_preference,
117
+ ...executionProfileSelectionMetadata(profileSelection),
118
+ };
49
119
  const created = createExecutionRun({
50
120
  projectId: input.projectId,
51
121
  kind: 'service',
@@ -63,9 +133,11 @@ export const createServiceRun = (input) => {
63
133
  metadata: {
64
134
  ...profile,
65
135
  context_key: input.contextKey,
136
+ ...(input.sessionId !== undefined ? { session_id: input.sessionId } : {}),
66
137
  target_kind: input.target.identity.kind,
67
138
  target_key: input.target.identity.key,
68
139
  target_workspace_path: input.target.workspacePath,
140
+ service_allocation_state: 'not_started',
69
141
  },
70
142
  eventType: 'service_run_created',
71
143
  eventMessage: 'Service run authority was accepted for the canonical target.',
@@ -78,31 +150,84 @@ export const createServiceRun = (input) => {
78
150
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
79
151
  `).run(created.id, input.projectId, input.contextKey, input.target.identity.kind, input.target.identity.key, input.target.workspacePath, profile.execution_profile_revision_id, profile.execution_profile_fingerprint, serializeBounded(input.services, 'Service configuration snapshot'));
80
152
  return created;
81
- })();
153
+ }).immediate();
82
154
  return run;
83
155
  };
84
- export const recordServiceRunPlacement = (input) => {
85
- const placement = input.placement
156
+ // Invalidate absence proof before entering allocation, including its first await.
157
+ export const markServiceRunAllocationStarted = (projectId, executionRunId) => {
158
+ const updated = db.prepare(`UPDATE execution_runs
159
+ SET metadata_json = json_set(metadata_json, '$.service_allocation_state', 'started')
160
+ WHERE project_id = ? AND id = ? AND kind = 'service'
161
+ AND status NOT IN ('completed', 'failed', 'cancelled', 'interrupted')
162
+ AND EXISTS (SELECT 1 FROM service_run_details WHERE execution_run_id = execution_runs.id AND completed_at IS NULL)`)
163
+ .run(projectId, executionRunId);
164
+ if (updated.changes !== 1) {
165
+ throw new Error('Active durable service run was not found');
166
+ }
167
+ };
168
+ export const recordServiceRunPlacement = (input) => db.transaction(() => {
169
+ const details = db.prepare(`SELECT * FROM service_run_details WHERE project_id = ? AND execution_run_id = ?`)
170
+ .get(input.projectId, input.executionRunId);
171
+ if (!details || details.completed_at !== null) {
172
+ throw new Error('Active durable service run was not found');
173
+ }
174
+ if (details.provider_kind !== null && (details.provider_kind !== input.provider
175
+ || details.environment_id !== input.environmentId || details.environment_revision !== input.environmentRevision)) {
176
+ throw new Error('Service placement authority cannot be replaced');
177
+ }
178
+ if (input.placement && (input.placement.provider !== input.provider
179
+ || input.placement.executionRunId !== input.executionRunId || input.placement.targetKey !== details.target_key)) {
180
+ throw new Error('Service placement does not match durable authority');
181
+ }
182
+ let placement = input.placement
86
183
  ? input.placement
87
184
  : input.provider === 'host'
88
185
  ? { provider: 'host', scope: 'local_processes' }
89
186
  : null;
187
+ if (input.provider === 'host') {
188
+ const previous = parseObject(details.placement_json);
189
+ if ((details.placement_json !== null && !previous)
190
+ || (previous?.placements !== undefined && !Array.isArray(previous.placements))) {
191
+ throw new Error('Existing host placement evidence is malformed');
192
+ }
193
+ const placements = previous && Array.isArray(previous.placements)
194
+ ? [...previous.placements]
195
+ : previous && previous.scope !== 'local_processes' ? [previous] : [];
196
+ if (input.placement && !placements.some(existing => isDeepStrictEqual(existing, input.placement))) {
197
+ placements.push(input.placement);
198
+ }
199
+ placement = {
200
+ provider: 'host', scope: 'local_processes', placements,
201
+ ...(previous?.host_processes !== undefined ? { host_processes: previous.host_processes } : {}),
202
+ ...(previous?.host_process_cleanup !== undefined ? { host_process_cleanup: previous.host_process_cleanup } : {}),
203
+ };
204
+ }
90
205
  const updated = db.prepare(`
91
206
  UPDATE service_run_details
92
207
  SET provider_kind = ?, environment_id = ?, environment_revision = ?,
93
208
  placement_json = ?, interruption_scope = ?, started_at = COALESCE(started_at, CURRENT_TIMESTAMP),
94
209
  updated_at = CURRENT_TIMESTAMP
95
210
  WHERE execution_run_id = ? AND project_id = ? AND completed_at IS NULL
211
+ AND EXISTS (SELECT 1 FROM execution_runs run WHERE run.id = service_run_details.execution_run_id
212
+ AND run.status NOT IN ('completed', 'failed', 'cancelled', 'interrupted'))
96
213
  `).run(input.provider, input.environmentId, input.environmentRevision, placement ? serializeBounded(placement, 'Service placement') : null, input.provider === 'docker_sandbox' ? 'whole_environment' : 'local_processes', input.executionRunId, input.projectId);
97
214
  if (updated.changes !== 1) {
98
215
  throw new Error('Active durable service run was not found');
99
216
  }
100
- };
217
+ }).immediate();
101
218
  export const completeServiceRun = (input) => db.transaction(() => {
102
219
  const current = getExecutionRun(input.projectId, input.executionRunId);
103
220
  if (!current) {
104
221
  return current;
105
222
  }
223
+ if (current.kind !== 'service' || !getServiceRunDetails(input.projectId, input.executionRunId)) {
224
+ throw new Error('Durable service run was not found');
225
+ }
226
+ if (db.prepare(`SELECT 1 FROM execution_environment_run_bindings
227
+ WHERE project_id = ? AND execution_run_id = ? AND relationship = 'execution'
228
+ AND released_at IS NULL`).get(input.projectId, input.executionRunId)) {
229
+ throw new Error('Service execution binding is unreleased');
230
+ }
106
231
  const transitioned = ['completed', 'failed', 'cancelled', 'interrupted'].includes(current.status)
107
232
  ? current
108
233
  : transitionExecutionRun({
@@ -123,8 +248,24 @@ export const completeServiceRun = (input) => db.transaction(() => {
123
248
  `).run(input.executionRunId, input.projectId);
124
249
  return transitioned;
125
250
  })();
126
- export const recordServiceRunReleaseFailure = (input) => {
251
+ export const recordServiceRunFinalizationIntent = (input) => {
252
+ const updated = db.prepare(`
253
+ UPDATE service_run_details
254
+ SET intended_status = COALESCE(intended_status, ?),
255
+ intended_event_type = COALESCE(intended_event_type, ?),
256
+ intended_message = COALESCE(intended_message, ?),
257
+ updated_at = CURRENT_TIMESTAMP
258
+ WHERE project_id = ? AND execution_run_id = ? AND completed_at IS NULL
259
+ `).run(input.intendedStatus, input.intendedEventType, input.intendedMessage ?? null, input.projectId, input.executionRunId);
260
+ if (updated.changes !== 1) {
261
+ throw new Error('Active durable service run was not found');
262
+ }
263
+ };
264
+ export const recordServiceRunReleaseFailure = (input) => db.transaction(() => {
127
265
  const current = getExecutionRun(input.projectId, input.executionRunId);
266
+ if (current && (current.kind !== 'service' || !getServiceRunDetails(input.projectId, input.executionRunId))) {
267
+ throw new Error('Durable service run was not found');
268
+ }
128
269
  if (!current || ['completed', 'failed', 'cancelled', 'interrupted'].includes(current.status)) {
129
270
  return current;
130
271
  }
@@ -133,6 +274,11 @@ export const recordServiceRunReleaseFailure = (input) => {
133
274
  intended_event_type: input.intendedEventType,
134
275
  lease_retained: true,
135
276
  };
277
+ recordServiceRunFinalizationIntent(input);
278
+ db.prepare(`UPDATE service_run_details
279
+ SET cleanup_error_message = ?, cleanup_retry_at = datetime('now', '+30 seconds'), updated_at = CURRENT_TIMESTAMP
280
+ WHERE project_id = ? AND execution_run_id = ? AND completed_at IS NULL`)
281
+ .run(input.message.slice(0, 4000), input.projectId, input.executionRunId);
136
282
  if (current.status === 'waiting' && current.domain_status === 'environment_release_pending') {
137
283
  appendLifecycleEvent({
138
284
  projectId: input.projectId,
@@ -153,19 +299,190 @@ export const recordServiceRunReleaseFailure = (input) => {
153
299
  eventMessage: input.message,
154
300
  eventMetadata: metadata,
155
301
  });
156
- };
302
+ }).immediate();
157
303
  export const getServiceRunDetails = (projectId, executionRunId) => {
158
304
  const row = db.prepare(`
159
305
  SELECT * FROM service_run_details WHERE project_id = ? AND execution_run_id = ?
160
306
  `).get(projectId, executionRunId);
161
307
  return row ? serializeDetails(row) : null;
162
308
  };
309
+ export const getRecoverableHostServiceRun = (projectId) => {
310
+ const row = db.prepare(`SELECT * FROM service_run_details
311
+ WHERE project_id = ? AND (provider_kind = 'host' OR provider_kind IS NULL) AND completed_at IS NULL`).get(projectId);
312
+ if (!row) {
313
+ return null;
314
+ }
315
+ return { ...serializeDetails(row), sessionId: getExecutionRun(projectId, row.execution_run_id)?.metadata?.session_id };
316
+ };
317
+ // Persist the intent BEFORE spawning, so a crash or failed identity capture cannot
318
+ // turn a partial list of service/setup children into proof of complete cleanup.
319
+ export const prepareHostServiceProcessLaunch = (projectId, executionRunId) => {
320
+ const launchId = randomUUID();
321
+ const update = (identity) => db.transaction(() => {
322
+ const details = getServiceRunDetails(projectId, executionRunId);
323
+ if (!details || details.completed_at !== null || (details.provider_kind !== null && details.provider_kind !== 'host')) {
324
+ throw new Error('Active durable host service run was not found');
325
+ }
326
+ recordServiceRunPlacement({ projectId, executionRunId, provider: 'host', environmentId: null, environmentRevision: null });
327
+ const placement = getServiceRunDetails(projectId, executionRunId).placement;
328
+ const processes = placement.host_processes;
329
+ if (processes !== undefined && (!processes || typeof processes !== 'object' || Array.isArray(processes))) {
330
+ throw new Error('Existing host process evidence is malformed');
331
+ }
332
+ if (identity !== null && processes?.[launchId] !== null) {
333
+ throw new Error('Host process launch identity cannot be replaced');
334
+ }
335
+ const nextProcesses = { ...processes, [launchId]: identity };
336
+ const nextPlacement = { ...placement, host_processes: nextProcesses };
337
+ // Reserve room for every cleanup proof before accepting a launch identity.
338
+ serializeBounded({ ...nextPlacement, host_process_cleanup: Object.fromEntries(Object.keys(nextProcesses).map(id => [id, true])) }, 'Host process evidence');
339
+ db.prepare('UPDATE service_run_details SET placement_json = ?, updated_at = CURRENT_TIMESTAMP WHERE execution_run_id = ? AND project_id = ?')
340
+ .run(serializeBounded(nextPlacement, 'Host process evidence'), executionRunId, projectId);
341
+ }).immediate();
342
+ update(null);
343
+ return (pid) => {
344
+ let identity;
345
+ try {
346
+ identity = captureHostServiceProcessIdentity(pid);
347
+ }
348
+ catch (error) {
349
+ // Host execution remains available on unsupported platforms. The unresolved
350
+ // intent blocks recovery until cleanup can be proved, rather than guessing.
351
+ appendLifecycleEvent({
352
+ projectId, runId: executionRunId, eventType: 'service_host_identity_unverified',
353
+ message: 'Host process recovery identity could not be captured.',
354
+ metadata: { launch_id: launchId, reason: error instanceof Error ? error.message : String(error) },
355
+ });
356
+ return;
357
+ }
358
+ update(identity);
359
+ };
360
+ };
361
+ export const retryInterruptedHostServiceRun = (projectId, executionRunId) => {
362
+ const details = getServiceRunDetails(projectId, executionRunId);
363
+ if (!details || details.completed_at !== null || (details.provider_kind !== null && details.provider_kind !== 'host')) {
364
+ return false;
365
+ }
366
+ if (details.provider_kind === null) {
367
+ const run = getExecutionRun(projectId, executionRunId);
368
+ // Missing authority is not absence proof. Even released bindings or malformed
369
+ // placement evidence contradict the claim that allocation never began.
370
+ const binding = db.prepare(`SELECT 1 FROM execution_environment_run_bindings
371
+ WHERE project_id = ? AND execution_run_id = ?`).get(projectId, executionRunId);
372
+ const placementEvidence = db.prepare(`SELECT 1 FROM service_run_details
373
+ WHERE project_id = ? AND execution_run_id = ? AND placement_json IS NOT NULL`).get(projectId, executionRunId);
374
+ if (run?.metadata?.service_allocation_state === 'not_started' && !binding
375
+ && !placementEvidence && details.environment_id === null
376
+ && details.environment_revision === null && details.started_at === null) {
377
+ completeServiceRun({
378
+ projectId, executionRunId, status: 'interrupted', code: 'server_restarted',
379
+ message: 'The server restarted before service allocation began; no cleanup was required.',
380
+ eventType: 'service_run_interrupted',
381
+ });
382
+ return true;
383
+ }
384
+ if (run?.domain_status !== 'environment_release_pending') {
385
+ recordServiceRunReleaseFailure({
386
+ projectId, executionRunId,
387
+ message: 'Service placement is uncertain. Authority is retained until allocation and cleanup evidence can be verified.',
388
+ intendedStatus: 'interrupted', intendedEventType: 'service_run_interrupted',
389
+ });
390
+ }
391
+ return false;
392
+ }
393
+ if (db.prepare(`SELECT 1 FROM execution_environment_run_bindings
394
+ WHERE project_id = ? AND execution_run_id = ? AND relationship = 'execution' AND released_at IS NULL`)
395
+ .get(projectId, executionRunId)) {
396
+ return false;
397
+ }
398
+ const processes = details.placement?.host_processes;
399
+ const identities = processes && typeof processes === 'object' && !Array.isArray(processes)
400
+ ? Object.entries(processes) : [];
401
+ const previousCleanup = details.placement?.host_process_cleanup;
402
+ const cleanup = previousCleanup && typeof previousCleanup === 'object' && !Array.isArray(previousCleanup)
403
+ ? { ...previousCleanup } : {};
404
+ // Clean every recorded sibling, but never release authority on partial success.
405
+ const verified = identities.map(([launchId, identity]) => {
406
+ if (!isHostServiceProcessIdentity(identity)) {
407
+ return false;
408
+ }
409
+ if (cleanup[launchId] === true) {
410
+ return true;
411
+ }
412
+ if (!cleanupHostServiceProcess(identity)) {
413
+ return false;
414
+ }
415
+ cleanup[launchId] = true;
416
+ // Never reacquire a numeric session after its disappearance was verified.
417
+ db.prepare('UPDATE service_run_details SET placement_json = ?, updated_at = CURRENT_TIMESTAMP WHERE execution_run_id = ? AND project_id = ? AND completed_at IS NULL')
418
+ .run(serializeBounded({ ...details.placement, host_process_cleanup: cleanup }, 'Host process cleanup evidence'), executionRunId, projectId);
419
+ return true;
420
+ });
421
+ if (!verified.length || verified.some(result => !result)) {
422
+ if (getExecutionRun(projectId, executionRunId)?.domain_status !== 'environment_release_pending') {
423
+ recordServiceRunReleaseFailure({
424
+ projectId, executionRunId,
425
+ message: 'Host process cleanup could not be verified. Authority is retained; retry stopping the session after resolving host inspection or cleanup failures.',
426
+ intendedStatus: 'interrupted', intendedEventType: 'service_run_interrupted',
427
+ });
428
+ }
429
+ return false;
430
+ }
431
+ const finalDetails = getServiceRunDetails(projectId, executionRunId);
432
+ completeServiceRun({
433
+ projectId,
434
+ executionRunId,
435
+ status: finalDetails.intended_status ?? 'interrupted',
436
+ code: finalDetails.intended_status === 'failed' ? 'service_run_failed' : 'server_restarted',
437
+ message: finalDetails.intended_message ?? 'The server restarted; all recorded host service process sessions were verifiably cleaned up.',
438
+ eventType: finalDetails.intended_event_type ?? 'service_run_interrupted',
439
+ });
440
+ return true;
441
+ };
442
+ // The existing Stop action can use this only after finding no live in-memory owner.
443
+ export const retryInterruptedHostServiceRunForContext = (contextKey, options = {}) => {
444
+ const row = db.prepare(`SELECT details.project_id, details.execution_run_id
445
+ FROM service_run_details details
446
+ WHERE details.context_key = ? AND (details.provider_kind = 'host' OR details.provider_kind IS NULL) AND details.completed_at IS NULL`)
447
+ .get(contextKey);
448
+ if (!row) {
449
+ return false;
450
+ }
451
+ const run = getExecutionRun(row.project_id, row.execution_run_id);
452
+ if (options.sessionId !== undefined && run.metadata?.session_id !== options.sessionId) {
453
+ throw new Error('The service session has changed. Refresh before retrying.');
454
+ }
455
+ if (options.serviceId !== undefined) {
456
+ throw new Error('Restarted host sessions require whole-session cleanup');
457
+ }
458
+ if (!retryInterruptedHostServiceRun(row.project_id, row.execution_run_id)) {
459
+ throw new Error('Host service cleanup remains unverified; session authority is retained. Retry stopping the session after resolving host cleanup failures.');
460
+ }
461
+ return true;
462
+ };
163
463
  export const reconcileInterruptedServiceRuns = () => {
464
+ // Neither a missing binding nor a terminal envelope proves that service processes stopped.
465
+ // Docker requires release evidence for the exact recorded environment.
164
466
  const rows = db.prepare(`
165
- SELECT details.execution_run_id, details.project_id, details.provider_kind, run.status
467
+ SELECT details.execution_run_id, details.project_id, run.status
166
468
  FROM service_run_details details
167
469
  JOIN execution_runs run ON run.id = details.execution_run_id AND run.project_id = details.project_id
168
470
  WHERE details.completed_at IS NULL
471
+ AND details.provider_kind = 'docker_sandbox'
472
+ AND EXISTS (
473
+ SELECT 1 FROM execution_environment_run_bindings released
474
+ JOIN execution_environments environment
475
+ ON environment.id = released.environment_id AND environment.project_id = released.project_id
476
+ WHERE released.execution_run_id = details.execution_run_id
477
+ AND released.project_id = details.project_id
478
+ AND released.relationship = 'execution' AND released.released_at IS NOT NULL
479
+ AND released.environment_id = details.environment_id
480
+ AND released.environment_revision = details.environment_revision
481
+ AND environment.provider_kind = 'docker_sandbox'
482
+ AND environment.environment_revision = details.environment_revision
483
+ AND environment.target_key = details.target_key
484
+ AND environment.target_workspace_path = details.target_workspace_path
485
+ )
169
486
  AND NOT EXISTS (
170
487
  SELECT 1 FROM execution_environment_run_bindings binding
171
488
  WHERE binding.execution_run_id = details.execution_run_id
@@ -177,17 +494,32 @@ export const reconcileInterruptedServiceRuns = () => {
177
494
  `).all();
178
495
  let interrupted = 0;
179
496
  let repaired = 0;
497
+ const hosts = db.prepare(`SELECT details.project_id, details.execution_run_id, run.status
498
+ FROM service_run_details details JOIN execution_runs run ON run.id = details.execution_run_id
499
+ WHERE details.completed_at IS NULL AND (details.provider_kind IS NULL OR (details.provider_kind = 'host'
500
+ AND NOT EXISTS (SELECT 1 FROM execution_environment_run_bindings binding
501
+ WHERE binding.execution_run_id = details.execution_run_id AND binding.relationship = 'execution'
502
+ AND binding.released_at IS NULL)))`).all();
503
+ for (const host of hosts) {
504
+ if (retryInterruptedHostServiceRun(host.project_id, host.execution_run_id)) {
505
+ if (['completed', 'failed', 'cancelled', 'interrupted'].includes(host.status)) {
506
+ repaired += 1;
507
+ }
508
+ else {
509
+ interrupted += 1;
510
+ }
511
+ }
512
+ }
180
513
  for (const row of rows) {
181
514
  const isTerminal = ['completed', 'failed', 'cancelled', 'interrupted'].includes(row.status);
515
+ const details = getServiceRunDetails(row.project_id, row.execution_run_id);
182
516
  completeServiceRun({
183
517
  projectId: row.project_id,
184
518
  executionRunId: row.execution_run_id,
185
- status: 'interrupted',
186
- code: 'server_restarted',
187
- message: row.provider_kind === 'docker_sandbox'
188
- ? 'The server restarted while this service run was active. Docker Sandbox interruption applies to the whole environment and every attached service.'
189
- : 'The server restarted while this service run was active. Host process interruption is limited to the local service processes.',
190
- eventType: 'service_run_interrupted',
519
+ status: details.intended_status ?? 'interrupted',
520
+ code: details.intended_status === 'failed' ? 'service_run_failed' : 'server_restarted',
521
+ message: details.intended_message ?? 'The server restarted while this service run was active. Docker Sandbox interruption applies to the whole environment and every attached service.',
522
+ eventType: details.intended_event_type ?? 'service_run_interrupted',
191
523
  });
192
524
  if (isTerminal) {
193
525
  repaired += 1;
@@ -198,4 +530,111 @@ export const reconcileInterruptedServiceRuns = () => {
198
530
  }
199
531
  return { interrupted, repaired };
200
532
  };
533
+ export const claimProjectServiceCleanup = (projectId, ignoreRetryAt = false) => db.transaction(() => {
534
+ const authority = getActiveProjectServiceAuthority(projectId);
535
+ if (!authority) {
536
+ return null;
537
+ }
538
+ const claimId = randomUUID();
539
+ if (authority.provider_kind === 'docker_sandbox') {
540
+ db.prepare(`UPDATE service_run_details
541
+ SET provider_kind = 'docker_sandbox', environment_id = ?, environment_revision = ?,
542
+ interruption_scope = 'whole_environment', updated_at = CURRENT_TIMESTAMP
543
+ WHERE project_id = ? AND execution_run_id = ? AND completed_at IS NULL AND provider_kind IS NULL`)
544
+ .run(authority.environment_id, authority.environment_revision, projectId, authority.execution_run_id);
545
+ }
546
+ const updated = db.prepare(`UPDATE service_run_details
547
+ SET cleanup_claim_id = ?, cleanup_claimed_at = CURRENT_TIMESTAMP,
548
+ cleanup_attempts = cleanup_attempts + 1, cleanup_retry_at = NULL, updated_at = CURRENT_TIMESTAMP
549
+ WHERE project_id = ? AND execution_run_id = ? AND completed_at IS NULL
550
+ AND (cleanup_claim_id IS NULL OR cleanup_claimed_at < datetime('now', '-5 minutes'))
551
+ AND (? = 1 OR cleanup_retry_at IS NULL OR cleanup_retry_at <= CURRENT_TIMESTAMP)`)
552
+ .run(claimId, projectId, authority.execution_run_id, ignoreRetryAt ? 1 : 0);
553
+ return updated.changes === 1 ? { ...authority, claimId } : null;
554
+ }).immediate();
555
+ export const finishProjectServiceCleanupAttempt = (projectId, executionRunId, claimId) => {
556
+ db.prepare(`UPDATE service_run_details
557
+ SET cleanup_claim_id = NULL, cleanup_claimed_at = NULL, cleanup_retry_at = NULL,
558
+ cleanup_error_message = NULL, updated_at = CURRENT_TIMESTAMP
559
+ WHERE project_id = ? AND execution_run_id = ? AND cleanup_claim_id = ?`)
560
+ .run(projectId, executionRunId, claimId);
561
+ };
562
+ export const failProjectServiceCleanupAttempt = (projectId, executionRunId, claimId, message) => {
563
+ const details = getServiceRunDetails(projectId, executionRunId);
564
+ const delaySeconds = Math.min(300, 15 * (2 ** Math.max(0, (details?.cleanup_attempts ?? 1) - 1)));
565
+ db.prepare(`UPDATE service_run_details
566
+ SET cleanup_claim_id = NULL, cleanup_claimed_at = NULL,
567
+ cleanup_retry_at = datetime('now', ?), cleanup_error_message = ?, updated_at = CURRENT_TIMESTAMP
568
+ WHERE project_id = ? AND execution_run_id = ? AND cleanup_claim_id = ?`)
569
+ .run(`+${delaySeconds} seconds`, message.slice(0, 4000), projectId, executionRunId, claimId);
570
+ };
571
+ export const forceReleaseProjectServiceAuthority = (projectId) => db.transaction(() => {
572
+ const authority = getActiveProjectServiceAuthority(projectId);
573
+ if (!authority) {
574
+ return false;
575
+ }
576
+ if (authority.cleanup_claim_id) {
577
+ throw new Error('Service cleanup is already in progress. Wait for it to finish before force releasing the lock.');
578
+ }
579
+ const message = 'Service cleanup authority was force released without positive process termination proof.';
580
+ const bindings = db.prepare(`SELECT environment_id FROM execution_environment_run_bindings
581
+ WHERE project_id = ? AND execution_run_id = ? AND relationship = 'execution' AND released_at IS NULL`)
582
+ .all(projectId, authority.execution_run_id);
583
+ for (const binding of bindings) {
584
+ const environment = getExecutionEnvironment(projectId, binding.environment_id);
585
+ if (!environment) {
586
+ db.prepare(`UPDATE execution_environments
587
+ SET retirement_requested_at = COALESCE(retirement_requested_at, CURRENT_TIMESTAMP),
588
+ lifecycle_state = CASE
589
+ WHEN lifecycle_state IN ('retired', 'retiring', 'cleanup_pending') THEN lifecycle_state
590
+ ELSE 'retiring'
591
+ END,
592
+ updated_at = CURRENT_TIMESTAMP
593
+ WHERE project_id = ? AND id = ?`)
594
+ .run(projectId, binding.environment_id);
595
+ db.prepare(`UPDATE execution_environment_run_bindings SET released_at = CURRENT_TIMESTAMP
596
+ WHERE project_id = ? AND environment_id = ? AND execution_run_id = ?
597
+ AND relationship = 'execution' AND released_at IS NULL`)
598
+ .run(projectId, binding.environment_id, authority.execution_run_id);
599
+ continue;
600
+ }
601
+ requestExecutionEnvironmentRetirement({ projectId, environmentId: binding.environment_id });
602
+ appendExecutionEnvironmentEvent({
603
+ projectId,
604
+ environmentId: binding.environment_id,
605
+ eventType: 'execution_run_force_released',
606
+ fromState: environment.lifecycle_state,
607
+ toState: environment.lifecycle_state,
608
+ message,
609
+ metadata: { executionRunId: authority.execution_run_id, forceReleased: true },
610
+ });
611
+ releaseExecutionRunFromEnvironment({
612
+ projectId,
613
+ environmentId: binding.environment_id,
614
+ executionRunId: authority.execution_run_id,
615
+ relationship: 'execution',
616
+ });
617
+ }
618
+ appendLifecycleEvent({
619
+ projectId,
620
+ runId: authority.execution_run_id,
621
+ eventType: 'service_cleanup_abandoned',
622
+ message,
623
+ metadata: { force_released: true, provider_kind: authority.provider_kind },
624
+ });
625
+ db.prepare(`UPDATE service_run_details SET force_released_at = CURRENT_TIMESTAMP,
626
+ cleanup_claim_id = NULL, cleanup_claimed_at = NULL, cleanup_retry_at = NULL,
627
+ cleanup_error_message = ?, updated_at = CURRENT_TIMESTAMP
628
+ WHERE project_id = ? AND execution_run_id = ? AND completed_at IS NULL`)
629
+ .run(message, projectId, authority.execution_run_id);
630
+ completeServiceRun({
631
+ projectId,
632
+ executionRunId: authority.execution_run_id,
633
+ status: 'interrupted',
634
+ code: 'service_cleanup_abandoned',
635
+ message,
636
+ eventType: 'service_run_interrupted',
637
+ });
638
+ return true;
639
+ }).immediate();
201
640
  //# sourceMappingURL=serviceRuns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serviceRuns.js","sourceRoot":"","sources":["../../../server/lib/serviceRuns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serviceRuns.js","sourceRoot":"","sources":["../../../server/lib/serviceRuns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,iCAAiC,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAA;AACrI,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,EACjC,iCAAiC,GAClC,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAUtH,OAAO,EACL,+BAA+B,EAC/B,uBAAuB,EACvB,kCAAkC,EAClC,qCAAqC,GACtC,MAAM,4BAA4B,CAAA;AAEnC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAA;AAE5C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAkB,EAAW,EAAE;IACxE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9F,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,+EAA+E,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;AAC5H,CAAC,CAAA;AAwBD,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,SAAiB,EACqB,EAAE;IACxC,IAAI,CAAC;QACH,OAAQ,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;KAgBlB,CAAC,CAAC,GAAG,CAAC,SAAS,CAA+C,IAAI,IAAI,CAAA;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;0CAIY,CAAC,CAAC,GAAG,CAAC,SAAS,CAKtC,CAAA;QACf,OAAO,MAAM,CAAC,CAAC,CAAC;YACd,GAAG,MAAM;YACT,gBAAgB,EAAE,CAAC;YACnB,gBAAgB,EAAE,IAAI;YACtB,qBAAqB,EAAE,6EAA6E;YACpG,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,IAAI;YACpB,oBAAoB,EAAE,IAAI;SAC3B,CAAC,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,SAAiB,EAA+B,EAAE;IAC/F,MAAM,SAAS,GAAG,gCAAgC,CAAC,SAAS,CAAC,CAAA;IAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO;QACL,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,QAAQ,EAAE,SAAS,CAAC,aAAa;QACjC,QAAQ,EAAE,SAAS,CAAC,gBAAgB;QACpC,QAAQ,EAAE,SAAS,CAAC,gBAAgB;QACpC,KAAK,EAAE,SAAS,CAAC,qBAAqB;QACtC,iBAAiB,EAAE,SAAS,CAAC,gBAAgB,KAAK,IAAI;KACvD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,EAAE;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,0BAA0B,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,0BAA0B,QAAQ,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,EAAE;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAA;QAC3C,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,CAAC,CAAC,MAAiC;YACnC,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,GAAyB,EAAqB,EAAE;IACxE,IAAI,eAAe,GAAoB,EAAE,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAY,CAAA;QAC/D,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAyB,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,eAAe,GAAG,EAAE,CAAA;IACtB,CAAC;IACD,OAAO;QACL,GAAG,GAAG;QACN,gBAAgB,EAAE,eAAe;QACjC,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;KAC3C,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAQ/B,EAAE,EAAE;IACJ,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9B,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAClE,CAAC;QACD,IAAI,0BAA0B,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC9D,CAAC;QACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,+BAA+B,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACnG,MAAM,eAAe,GAAG,iCAAiC,CAAC,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;QAC5F,MAAM,OAAO,GAAG;YACd,wBAAwB,EAAE,eAAe,CAAC,OAAO,CAAC,mBAAmB;YACrE,GAAG,iCAAiC,CAAC,gBAAgB,CAAC;SACvD,CAAA;QACD,MAAM,OAAO,GAAG,kBAAkB,CAAC;YACjC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE;YACjE,KAAK,EAAE;gBACL,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;oBACvB,CAAC,CAAC,CAAC;4BACC,UAAU,EAAE,QAAiB;4BAC7B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;4BAC/B,YAAY,EAAE,SAAkB;yBACjC,CAAC;oBACJ,CAAC,CAAC,EAAE,CAAC;aACR;YACD,QAAQ,EAAE;gBACR,GAAG,OAAO;gBACV,WAAW,EAAE,KAAK,CAAC,UAAU;gBAC7B,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI;gBACvC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;gBACrC,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa;gBACjD,wBAAwB,EAAE,aAAa;aACxC;YACD,SAAS,EAAE,qBAAqB;YAChC,YAAY,EAAE,8DAA8D;SAC7E,CAAC,CAAA;QACF,EAAE,CAAC,OAAO,CAAC;;;;;;KAMV,CAAC,CAAC,GAAG,CACJ,OAAO,CAAC,EAAE,EACV,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAC1B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EACzB,KAAK,CAAC,MAAM,CAAC,aAAa,EAC1B,OAAO,CAAC,6BAA6B,EACrC,OAAO,CAAC,6BAA6B,EACrC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CACnE,CAAA;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;IACd,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,kFAAkF;AAClF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,SAAiB,EAAE,cAAsB,EAAE,EAAE;IAC3F,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;;;yHAI4F,CAAC;SACrH,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IACjC,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAOxC,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;IACzB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,iFAAiF,CAAC;SAC1G,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAqC,CAAA;IACjF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC,QAAQ;WAC1E,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,oBAAoB,KAAK,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACnH,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;WAC9D,KAAK,CAAC,SAAS,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAClH,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACvE,CAAC;IACD,IAAI,SAAS,GAAgE,KAAK,CAAC,SAAS;QAC1F,CAAC,CAAC,KAAK,CAAC,SAAS;QACjB,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM;YACzB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE;YAChD,CAAC,CAAC,IAAI,CAAA;IACV,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACpD,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;eAC7C,CAAC,QAAQ,EAAE,UAAU,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAClE,CAAC;QACD,MAAM,UAAU,GAAc,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC1E,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC;YAC1B,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtE,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAClG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAClC,CAAC;QACD,SAAS,GAAG;YACV,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU;YACtD,GAAG,CAAC,QAAQ,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,GAAG,CAAC,QAAQ,EAAE,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjH,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;GAQ1B,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,mBAAmB,EACzB,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EACnE,KAAK,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,EAC7E,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,SAAS,CAChB,CAAA;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;AAEd,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAOjC,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;IACzB,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IACtE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/F,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,CAAC;;8BAEa,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC5D,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/F,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,sBAAsB,CAAC;YACrB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,cAAc;YAC3B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,YAAY,EAAE,KAAK,CAAC,MAAM;YAC1B,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;gBACnE,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,8BAA8B,EAAE;YAC1F,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;SACpC,CAAC,CAAA;IACN,EAAE,CAAC,OAAO,CAAC;;;;GAIV,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAC7C,OAAO,YAAY,CAAA;AACrB,CAAC,CAAC,EAAE,CAAA;AAEJ,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,KAMjD,EAAE,EAAE;IACJ,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;GAO1B,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,eAAe,IAAI,IAAI,EAC7B,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,CACrB,CAAA;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,KAM7C,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;IACzB,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IACtE,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QAC5G,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7F,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,QAAQ,GAAG;QACf,eAAe,EAAE,KAAK,CAAC,cAAc;QACrC,mBAAmB,EAAE,KAAK,CAAC,iBAAiB;QAC5C,cAAc,EAAE,IAAI;KACrB,CAAA;IACD,kCAAkC,CAAC,KAAK,CAAC,CAAA;IACzC,EAAE,CAAC,OAAO,CAAC;;2EAE8D,CAAC;SACvE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,6BAA6B,EAAE,CAAC;QAC5F,oBAAoB,CAAC;YACnB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,cAAc;YAC3B,SAAS,EAAE,oCAAoC;YAC/C,YAAY,EAAE,6BAA6B;YAC3C,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ;SACT,CAAC,CAAA;QACF,OAAO,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;IAC/D,CAAC;IACD,OAAO,sBAAsB,CAAC;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,cAAc;QAC3B,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,6BAA6B;QAC3C,SAAS,EAAE,oCAAoC;QAC/C,YAAY,EAAE,KAAK,CAAC,OAAO;QAC3B,aAAa,EAAE,QAAQ;KACxB,CAAC,CAAA;AACJ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;AAEd,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAE,cAAsB,EAAE,EAAE;IAChF,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;GAEtB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAqC,CAAA;IACrE,OAAO,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC3C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,SAAiB,EAAE,EAAE;IAChE,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;wGAC+E,CAAC,CAAC,GAAG,CAAC,SAAS,CAAqC,CAAA;IAC1J,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;AACxH,CAAC,CAAA;AAED,mFAAmF;AACnF,gFAAgF;AAChF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,SAAiB,EAAE,cAAsB,EAAE,EAAE;IAC3F,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,CAAC,QAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,EAAE,CAAC;YACtH,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAClE,CAAC;QACD,yBAAyB,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1H,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAE,CAAC,SAAU,CAAA;QAC7E,MAAM,SAAS,GAAG,SAAS,CAAC,cAAc,CAAA;QAC1C,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACzG,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAChE,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,IAAK,SAAiD,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YACjG,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACpE,CAAC;QACD,MAAM,aAAa,GAAG,EAAE,GAAG,SAAoC,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAA;QACvF,MAAM,aAAa,GAAG,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA;QACrE,2EAA2E;QAC3E,gBAAgB,CAAC,EAAE,GAAG,aAAa,EAAE,oBAAoB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAA;QAC3J,EAAE,CAAC,OAAO,CAAC,iIAAiI,CAAC;aAC1I,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,uBAAuB,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,CAAA;IAC7F,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;IACd,MAAM,CAAC,IAAI,CAAC,CAAA;IACZ,OAAO,CAAC,GAAW,EAAE,EAAE;QACrB,IAAI,QAAQ,CAAA;QACZ,IAAI,CAAC;YACH,QAAQ,GAAG,iCAAiC,CAAC,GAAG,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4EAA4E;YAC5E,4EAA4E;YAC5E,oBAAoB,CAAC;gBACnB,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,kCAAkC;gBAC/E,OAAO,EAAE,uDAAuD;gBAChE,QAAQ,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAClG,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAA;IAClB,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,SAAiB,EAAE,cAAsB,EAAE,EAAE;IAC1F,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IAC/D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,IAAI,IAAI,OAAO,CAAC,aAAa,KAAK,MAAM,CAAC,EAAE,CAAC;QACtH,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QACtD,8EAA8E;QAC9E,uEAAuE;QACvE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;oDACqB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QAChF,MAAM,iBAAiB,GAAG,EAAE,CAAC,OAAO,CAAC;mFAC0C,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;QAC/G,IAAI,GAAG,EAAE,QAAQ,EAAE,wBAAwB,KAAK,aAAa,IAAI,CAAC,OAAO;eACpE,CAAC,iBAAiB,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI;eACrD,OAAO,CAAC,oBAAoB,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC1E,kBAAkB,CAAC;gBACjB,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB;gBAC1E,OAAO,EAAE,gFAAgF;gBACzF,SAAS,EAAE,yBAAyB;aACrC,CAAC,CAAA;YACF,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,GAAG,EAAE,aAAa,KAAK,6BAA6B,EAAE,CAAC;YACzD,8BAA8B,CAAC;gBAC7B,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,8GAA8G;gBACvH,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,yBAAyB;aAC5E,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,CAAC;yGACwF,CAAC;SACrG,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,cAAc,CAAA;IACnD,MAAM,UAAU,GAAG,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QACxF,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAClC,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAA;IAC/D,MAAM,OAAO,GAA4B,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QAChI,CAAC,CAAC,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/B,gFAAgF;IAChF,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE;QACvD,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;QACxB,0EAA0E;QAC1E,EAAE,CAAC,OAAO,CAAC,0JAA0J,CAAC;aACnK,GAAG,CAAC,gBAAgB,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,oBAAoB,EAAE,OAAO,EAAE,EAAE,+BAA+B,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,CAAA;QAC7I,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IACF,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,IAAI,eAAe,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,aAAa,KAAK,6BAA6B,EAAE,CAAC;YAChG,8BAA8B,CAAC;gBAC7B,SAAS,EAAE,cAAc;gBACzB,OAAO,EAAE,oJAAoJ;gBAC7J,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,yBAAyB;aAC5E,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,YAAY,GAAG,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAE,CAAA;IACrE,kBAAkB,CAAC;QACjB,SAAS;QACT,cAAc;QACd,MAAM,EAAE,YAAY,CAAC,eAAe,IAAI,aAAa;QACrD,IAAI,EAAE,YAAY,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,kBAAkB;QAC3F,OAAO,EAAE,YAAY,CAAC,gBAAgB,IAAI,8FAA8F;QACxI,SAAS,EAAE,YAAY,CAAC,mBAAmB,IAAI,yBAAyB;KACzE,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC,UAAkB,EAAE,UAGxE,EAAE,EAAE,EAAE;IACT,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;yIAEgH,CAAC;SACrI,GAAG,CAAC,UAAU,CAAiE,CAAA;IAClF,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAE,CAAA;IAClE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC;QACtF,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,2IAA2I,CAAC,CAAA;IAC9J,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,EAAE;IAClD,2FAA2F;IAC3F,uEAAuE;IACvE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BvB,CAAC,CAAC,GAAG,EAIJ,CAAA;IACF,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;6CAKkB,CAAC,CAAC,GAAG,EAAiB,CAAA;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,8BAA8B,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9E,QAAQ,IAAI,CAAC,CAAA;YACf,CAAC;iBAAM,CAAC;gBACN,WAAW,IAAI,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3F,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAE,CAAA;QAC3E,kBAAkB,CAAC;YACjB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,cAAc,EAAE,GAAG,CAAC,gBAAgB;YACpC,MAAM,EAAE,OAAO,CAAC,eAAe,IAAI,aAAa;YAChD,IAAI,EAAE,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,kBAAkB;YACtF,OAAO,EAAE,OAAO,CAAC,gBAAgB,IAAI,kJAAkJ;YACvL,SAAS,EAAE,OAAO,CAAC,mBAAmB,IAAI,yBAAyB;SACpE,CAAC,CAAA;QACF,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,IAAI,CAAC,CAAA;QACf,CAAC;aAAM,CAAC;YACN,WAAW,IAAI,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAiB,EAAE,aAAa,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;IAC1G,MAAM,SAAS,GAAG,gCAAgC,CAAC,SAAS,CAAC,CAAA;IAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,IAAI,SAAS,CAAC,aAAa,KAAK,gBAAgB,EAAE,CAAC;QACjD,EAAE,CAAC,OAAO,CAAC;;;uGAGwF,CAAC;aACjG,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,oBAAoB,EAAE,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAA;IACzG,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;uFAK0D,CAAC;SACnF,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7E,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AACjE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA;AAEd,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,SAAiB,EAAE,cAAsB,EAAE,OAAe,EAAE,EAAE;IAC/G,EAAE,CAAC,OAAO,CAAC;;;2EAG8D,CAAC;SACvE,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,SAAiB,EACjB,cAAsB,EACtB,OAAe,EACf,OAAe,EACf,EAAE;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;IAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACjG,EAAE,CAAC,OAAO,CAAC;;;2EAG8D,CAAC;SACvE,GAAG,CAAC,IAAI,YAAY,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;AAChG,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;IAC5F,MAAM,SAAS,GAAG,gCAAgC,CAAC,SAAS,CAAC,CAAA;IAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAA;IACnH,CAAC;IACD,MAAM,OAAO,GAAG,0FAA0F,CAAA;IAC1G,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;yGAC2E,CAAC;SACrG,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAsC,CAAA;IAClF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;QAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,EAAE,CAAC,OAAO,CAAC;;;;;;;wCAOuB,CAAC;iBAChC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;YACzC,EAAE,CAAC,OAAO,CAAC;;iEAEgD,CAAC;iBACzD,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAA;YACrE,SAAQ;QACV,CAAC;QACD,qCAAqC,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;QAC3F,+BAA+B,CAAC;YAC9B,SAAS;YACT,aAAa,EAAE,OAAO,CAAC,cAAc;YACrC,SAAS,EAAE,8BAA8B;YACzC,SAAS,EAAE,WAAW,CAAC,eAAe;YACtC,OAAO,EAAE,WAAW,CAAC,eAAe;YACpC,OAAO;YACP,QAAQ,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,gBAAgB,EAAE,aAAa,EAAE,IAAI,EAAE;SAC9E,CAAC,CAAA;QACF,kCAAkC,CAAC;YACjC,SAAS;YACT,aAAa,EAAE,OAAO,CAAC,cAAc;YACrC,cAAc,EAAE,SAAS,CAAC,gBAAgB;YAC1C,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAA;IACJ,CAAC;IACD,oBAAoB,CAAC;QACnB,SAAS;QACT,KAAK,EAAE,SAAS,CAAC,gBAAgB;QACjC,SAAS,EAAE,2BAA2B;QACtC,OAAO;QACP,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE;KAC3E,CAAC,CAAA;IACF,EAAE,CAAC,OAAO,CAAC;;;2EAG8D,CAAC;SACvE,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAA;IACtD,kBAAkB,CAAC;QACjB,SAAS;QACT,cAAc,EAAE,SAAS,CAAC,gBAAgB;QAC1C,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,2BAA2B;QACjC,OAAO;QACP,SAAS,EAAE,yBAAyB;KACrC,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAC,SAAS,EAAE,CAAA"}