@myagentroam/node 0.9.8 → 0.9.10

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 (213) hide show
  1. package/dist/capabilities.js +2 -92
  2. package/dist/claude-agent-sdk.js +2 -330
  3. package/dist/claude-channel.js +2 -44
  4. package/dist/codex-app-server.js +2 -503
  5. package/dist/config.js +2 -56
  6. package/dist/connector/node-connector-options.js +2 -1
  7. package/dist/connector/node-operation-router.js +2 -22
  8. package/dist/connector.js +2 -841
  9. package/dist/control-outbound-scheduler.js +2 -154
  10. package/dist/database.js +2 -1418
  11. package/dist/event-buffer.js +2 -19
  12. package/dist/fake-runner.js +2 -129
  13. package/dist/health.js +2 -3
  14. package/dist/main.js +2 -54
  15. package/dist/migrations/v001.js +3 -144
  16. package/dist/migrations/v002.js +2 -143
  17. package/dist/migrations/v003.js +2 -44
  18. package/dist/migrations/v004.js +34 -30
  19. package/dist/native-jsonl-reader.js +2 -186
  20. package/dist/native-session-history.js +2 -1119
  21. package/dist/opencode-runtime.js +2 -80
  22. package/dist/opencode-server.js +2 -263
  23. package/dist/operational.js +2 -122
  24. package/dist/process-tree.js +2 -18
  25. package/dist/rotating-log.js +2 -67
  26. package/dist/runner/abstract-runner.js +2 -232
  27. package/dist/runner/claude/managed-run-controller.js +2 -345
  28. package/dist/runner/claude-code-runner.js +2 -303
  29. package/dist/runner/codex/composer-image-markers.js +2 -0
  30. package/dist/runner/codex/conversation-parser.js +2 -861
  31. package/dist/runner/codex/managed-run-controller.js +2 -460
  32. package/dist/runner/codex-runner.js +2 -628
  33. package/dist/runner/fake-test-runner.js +2 -47
  34. package/dist/runner/opencode/conversation-parser.js +2 -221
  35. package/dist/runner/opencode/managed-run-controller.js +2 -537
  36. package/dist/runner/opencode-runner.js +2 -448
  37. package/dist/runner/runner-registry.js +2 -90
  38. package/dist/runner-command-engine.js +2 -70
  39. package/dist/runner-profiles.js +2 -215
  40. package/dist/runner-usage.js +2 -190
  41. package/dist/runtime-command-detector.js +2 -73
  42. package/dist/runtime-state.js +2 -973
  43. package/dist/service/attachment-domain-state.js +2 -7
  44. package/dist/service/conversation-history-service.js +2 -457
  45. package/dist/service/conversation-segment-service.js +2 -162
  46. package/dist/service/external-session-resume-service.js +2 -118
  47. package/dist/service/fake-managed-run-service.js +2 -60
  48. package/dist/service/managed-runner-session-service.js +2 -35
  49. package/dist/service/mcp-installation-verifier.js +2 -87
  50. package/dist/service/mcp-node-operation-service.js +2 -90
  51. package/dist/service/mcp-package-installer.js +2 -136
  52. package/dist/service/native-session-projection-service.js +2 -280
  53. package/dist/service/native-session-watch-service.js +2 -383
  54. package/dist/service/node-connection-lifecycle-service.js +2 -83
  55. package/dist/service/node-control-channel.js +2 -85
  56. package/dist/service/node-control-message-service.js +2 -107
  57. package/dist/service/node-request-service.js +2 -52
  58. package/dist/service/node-run-event-bridge.js +2 -83
  59. package/dist/service/node-terminal-channel.js +2 -182
  60. package/dist/service/node-upgrade-coordinator.js +2 -137
  61. package/dist/service/node-workspace-coordinator.js +2 -70
  62. package/dist/service/recent-run-projection-service.js +2 -0
  63. package/dist/service/run-attachment-service.js +2 -194
  64. package/dist/service/run-domain-state.js +2 -4
  65. package/dist/service/run-event-service.js +2 -193
  66. package/dist/service/run-workbench-service.js +2 -104
  67. package/dist/service/runner-channel-message-service.js +2 -20
  68. package/dist/service/runner-interaction-service.js +2 -243
  69. package/dist/service/runner-service.js +2 -71
  70. package/dist/service/session-catalog-service.js +2 -224
  71. package/dist/service/session-command-service.js +2 -76
  72. package/dist/service/session-context-service.js +2 -101
  73. package/dist/service/session-domain-state.js +2 -9
  74. package/dist/service/session-identity-service.js +2 -86
  75. package/dist/service/session-lifecycle-service.js +2 -240
  76. package/dist/service/session-message-service.js +2 -173
  77. package/dist/service/session-presentation-service.js +2 -43
  78. package/dist/service/session-query-service.js +2 -82
  79. package/dist/service/skill-directory-service.js +2 -238
  80. package/dist/service/skill-install-service.js +2 -434
  81. package/dist/service/skill-node-operation-service.js +2 -206
  82. package/dist/service/terminal-relay-state.js +2 -3
  83. package/dist/service/terminal-service.js +2 -52
  84. package/dist/service/workbench-event-service.js +2 -19
  85. package/dist/service/workbench-manifest-service.js +2 -69
  86. package/dist/service/workspace-change-service.js +2 -86
  87. package/dist/service/workspace-content-search-service.js +2 -477
  88. package/dist/service/workspace-domain-state.js +2 -41
  89. package/dist/service/workspace-file-service.js +2 -122
  90. package/dist/service/workspace-git-exclude-service.js +2 -119
  91. package/dist/service/workspace-queue-workbench-service.js +2 -304
  92. package/dist/service/workspace-service.js +2 -69
  93. package/dist/service/workspace-session-service.js +2 -139
  94. package/dist/service/workspace-upload-service.js +2 -262
  95. package/dist/service/workspace-watch-service.js +2 -146
  96. package/dist/service/workspace-workbench-service.js +2 -405
  97. package/dist/service.js +2 -38
  98. package/dist/storage.js +2 -32
  99. package/dist/supervisor.js +2 -136
  100. package/dist/terminal.js +2 -416
  101. package/dist/util/node-operation-parsers.js +2 -382
  102. package/dist/util/personal-instructions.js +2 -31
  103. package/dist/util/runner-error.js +2 -52
  104. package/dist/util/runner-native-session-parsers.js +2 -490
  105. package/dist/util/safe-error.js +2 -5
  106. package/dist/util/secret-environment.js +2 -25
  107. package/dist/workspace.js +2 -1519
  108. package/package.json +3 -3
  109. package/dist/capabilities.d.ts +0 -12
  110. package/dist/claude-agent-sdk.d.ts +0 -92
  111. package/dist/claude-channel.d.ts +0 -28
  112. package/dist/codex-app-server.d.ts +0 -133
  113. package/dist/config.d.ts +0 -18
  114. package/dist/connector/node-connector-options.d.ts +0 -27
  115. package/dist/connector/node-operation-router.d.ts +0 -9
  116. package/dist/connector.d.ts +0 -93
  117. package/dist/control-outbound-scheduler.d.ts +0 -29
  118. package/dist/database.d.ts +0 -305
  119. package/dist/event-buffer.d.ts +0 -9
  120. package/dist/fake-runner.d.ts +0 -42
  121. package/dist/health.d.ts +0 -4
  122. package/dist/main.d.ts +0 -2
  123. package/dist/migrations/v001.d.ts +0 -3
  124. package/dist/migrations/v002.d.ts +0 -4
  125. package/dist/migrations/v003.d.ts +0 -4
  126. package/dist/migrations/v004.d.ts +0 -4
  127. package/dist/native-jsonl-reader.d.ts +0 -35
  128. package/dist/native-session-history.d.ts +0 -126
  129. package/dist/opencode-runtime.d.ts +0 -33
  130. package/dist/opencode-server.d.ts +0 -49
  131. package/dist/operational.d.ts +0 -39
  132. package/dist/process-tree.d.ts +0 -9
  133. package/dist/rotating-log.d.ts +0 -17
  134. package/dist/runner/abstract-runner.d.ts +0 -172
  135. package/dist/runner/claude/managed-run-controller.d.ts +0 -51
  136. package/dist/runner/claude-code-runner.d.ts +0 -72
  137. package/dist/runner/codex/conversation-parser.d.ts +0 -59
  138. package/dist/runner/codex/managed-run-controller.d.ts +0 -90
  139. package/dist/runner/codex-runner.d.ts +0 -103
  140. package/dist/runner/fake-test-runner.d.ts +0 -26
  141. package/dist/runner/opencode/conversation-parser.d.ts +0 -31
  142. package/dist/runner/opencode/managed-run-controller.d.ts +0 -82
  143. package/dist/runner/opencode-runner.d.ts +0 -71
  144. package/dist/runner/runner-registry.d.ts +0 -19
  145. package/dist/runner-command-engine.d.ts +0 -28
  146. package/dist/runner-profiles.d.ts +0 -15
  147. package/dist/runner-usage.d.ts +0 -33
  148. package/dist/runtime-command-detector.d.ts +0 -3
  149. package/dist/runtime-state.d.ts +0 -169
  150. package/dist/service/attachment-domain-state.d.ts +0 -7
  151. package/dist/service/conversation-history-service.d.ts +0 -43
  152. package/dist/service/conversation-segment-service.d.ts +0 -20
  153. package/dist/service/external-session-resume-service.d.ts +0 -34
  154. package/dist/service/fake-managed-run-service.d.ts +0 -28
  155. package/dist/service/managed-runner-session-service.d.ts +0 -12
  156. package/dist/service/mcp-installation-verifier.d.ts +0 -9
  157. package/dist/service/mcp-node-operation-service.d.ts +0 -11
  158. package/dist/service/mcp-package-installer.d.ts +0 -8
  159. package/dist/service/native-session-projection-service.d.ts +0 -52
  160. package/dist/service/native-session-watch-service.d.ts +0 -62
  161. package/dist/service/node-connection-lifecycle-service.d.ts +0 -35
  162. package/dist/service/node-control-channel.d.ts +0 -32
  163. package/dist/service/node-control-message-service.d.ts +0 -27
  164. package/dist/service/node-request-service.d.ts +0 -14
  165. package/dist/service/node-run-event-bridge.d.ts +0 -40
  166. package/dist/service/node-terminal-channel.d.ts +0 -29
  167. package/dist/service/node-upgrade-coordinator.d.ts +0 -29
  168. package/dist/service/node-workspace-coordinator.d.ts +0 -29
  169. package/dist/service/run-attachment-service.d.ts +0 -38
  170. package/dist/service/run-domain-state.d.ts +0 -4
  171. package/dist/service/run-event-service.d.ts +0 -33
  172. package/dist/service/run-workbench-service.d.ts +0 -25
  173. package/dist/service/runner-channel-message-service.d.ts +0 -13
  174. package/dist/service/runner-interaction-service.d.ts +0 -39
  175. package/dist/service/runner-service.d.ts +0 -46
  176. package/dist/service/session-catalog-service.d.ts +0 -45
  177. package/dist/service/session-command-service.d.ts +0 -24
  178. package/dist/service/session-context-service.d.ts +0 -35
  179. package/dist/service/session-domain-state.d.ts +0 -9
  180. package/dist/service/session-identity-service.d.ts +0 -24
  181. package/dist/service/session-lifecycle-service.d.ts +0 -31
  182. package/dist/service/session-message-service.d.ts +0 -33
  183. package/dist/service/session-presentation-service.d.ts +0 -34
  184. package/dist/service/session-query-service.d.ts +0 -35
  185. package/dist/service/skill-directory-service.d.ts +0 -20
  186. package/dist/service/skill-install-service.d.ts +0 -21
  187. package/dist/service/skill-node-operation-service.d.ts +0 -44
  188. package/dist/service/terminal-relay-state.d.ts +0 -6
  189. package/dist/service/terminal-service.d.ts +0 -12
  190. package/dist/service/workbench-event-service.d.ts +0 -9
  191. package/dist/service/workbench-manifest-service.d.ts +0 -90
  192. package/dist/service/workspace-change-service.d.ts +0 -9
  193. package/dist/service/workspace-content-search-service.d.ts +0 -14
  194. package/dist/service/workspace-domain-state.d.ts +0 -79
  195. package/dist/service/workspace-file-service.d.ts +0 -18
  196. package/dist/service/workspace-git-exclude-service.d.ts +0 -4
  197. package/dist/service/workspace-queue-workbench-service.d.ts +0 -86
  198. package/dist/service/workspace-service.d.ts +0 -15
  199. package/dist/service/workspace-session-service.d.ts +0 -23
  200. package/dist/service/workspace-upload-service.d.ts +0 -39
  201. package/dist/service/workspace-watch-service.d.ts +0 -23
  202. package/dist/service/workspace-workbench-service.d.ts +0 -58
  203. package/dist/service.d.ts +0 -4
  204. package/dist/storage.d.ts +0 -2
  205. package/dist/supervisor.d.ts +0 -1
  206. package/dist/terminal.d.ts +0 -133
  207. package/dist/util/node-operation-parsers.d.ts +0 -92
  208. package/dist/util/personal-instructions.d.ts +0 -2
  209. package/dist/util/runner-error.d.ts +0 -6
  210. package/dist/util/runner-native-session-parsers.d.ts +0 -74
  211. package/dist/util/safe-error.d.ts +0 -2
  212. package/dist/util/secret-environment.d.ts +0 -1
  213. package/dist/workspace.d.ts +0 -217
@@ -1,243 +1,2 @@
1
- import { denyPermission } from '../claude-agent-sdk.js';
2
- import { boundedConversationItemId, claudeUserInputQuestions, isTerminalRunStatus } from '../runner/codex/conversation-parser.js';
3
- export class RunnerInteractionService {
4
- options;
5
- constructor(options) {
6
- this.options = options;
7
- }
8
- requestClaudeApproval(runId, toolName, toolInput) {
9
- const approvalId = `claude:${crypto.randomUUID()}`;
10
- return new Promise((resolve) => {
11
- const expiresAt = Date.now() + this.options.approvalTimeoutMs;
12
- const settle = (decision) => resolve(decision === 'APPROVED'
13
- ? { behavior: 'allow', updatedInput: toolInput }
14
- : denyPermission());
15
- try {
16
- this.options.runtime.createApproval({
17
- runId,
18
- approvalId,
19
- payload: { toolName, input: toolInput },
20
- expiresAt
21
- });
22
- }
23
- catch {
24
- resolve(denyPermission('APPROVAL_STORE_FAILED'));
25
- return;
26
- }
27
- const expire = () => {
28
- const approvals = this.options.claude().execution.approvals;
29
- const active = approvals.get(approvalId);
30
- if (active === undefined)
31
- return;
32
- try {
33
- this.options.runtime.expireApproval(approvalId);
34
- }
35
- catch (error) {
36
- if (error instanceof Error && error.message === 'APPROVAL_NOT_EXPIRED') {
37
- const timer = setTimeout(expire, Math.max(1, expiresAt - Date.now()));
38
- approvals.set(approvalId, { ...active, timer });
39
- return;
40
- }
41
- }
42
- approvals.delete(approvalId);
43
- this.options.emitRun(active.runId, 'approval.expired', { approvalId });
44
- resolve(denyPermission('APPROVAL_EXPIRED'));
45
- };
46
- const timer = setTimeout(expire, this.options.approvalTimeoutMs);
47
- this.options.claude().execution.approvals.set(approvalId, {
48
- runId,
49
- timer,
50
- resolve: settle
51
- });
52
- this.options.publishApproval({
53
- runId,
54
- approvalId,
55
- payload: { toolName, input: toolInput },
56
- expiresAt
57
- });
58
- });
59
- }
60
- requestClaudeUserInput(runId, toolInput, toolUseId) {
61
- const questions = claudeUserInputQuestions(toolInput);
62
- if (questions.length === 0)
63
- return Promise.resolve(denyPermission('USER_INPUT_INVALID'));
64
- const requestId = `claude:${runId}:${toolUseId}`;
65
- return new Promise((resolve) => {
66
- const input = { ...toolInput };
67
- const timer = setTimeout(() => {
68
- const pending = this.options.claude().execution.userInputs.get(requestId);
69
- if (pending === undefined)
70
- return;
71
- this.options.claude().execution.userInputs.delete(requestId);
72
- pending.reject('USER_INPUT_EXPIRED');
73
- this.options.emitItem(runId, {
74
- itemId: boundedConversationItemId('claude-input', requestId),
75
- kind: 'user_input_request',
76
- status: 'FAILED',
77
- payload: { requestId, questions },
78
- merge: true
79
- });
80
- }, this.options.approvalTimeoutMs);
81
- this.options.claude().execution.userInputs.set(requestId, {
82
- runId,
83
- requestId,
84
- questions,
85
- input,
86
- resolve: (answers) => resolve({ behavior: 'allow', updatedInput: { ...input, answers } }),
87
- reject: (message = 'USER_INPUT_EXPIRED') => resolve(denyPermission(message)),
88
- timer
89
- });
90
- this.options.emitItem(runId, {
91
- itemId: boundedConversationItemId('claude-input', requestId),
92
- kind: 'user_input_request',
93
- status: 'PENDING',
94
- payload: { requestId, questions }
95
- });
96
- });
97
- }
98
- deliverChannel(runner, sessionId, messageId, senderId, token, content) {
99
- return this.options.runners
100
- .require(runner)
101
- .deliverChannel(sessionId, messageId, senderId, token, content, (runId, deliveredMessageId, delivery) => this.options.emitRun(runId, 'channel.delivery', {
102
- messageId: deliveredMessageId,
103
- delivery
104
- }));
105
- }
106
- decideCodexApproval(approvalId, decision) {
107
- const codex = this.options.codex();
108
- const requestId = codex.execution.approvals.get(approvalId);
109
- if (requestId === undefined)
110
- return false;
111
- try {
112
- codex.respond(requestId, { decision: decision === 'APPROVED' ? 'accept' : 'decline' });
113
- }
114
- catch {
115
- // A disconnected App Server cannot safely receive a late approval.
116
- }
117
- codex.execution.approvals.delete(approvalId);
118
- return true;
119
- }
120
- decideClaudeApproval(approvalId, decision) {
121
- const approvals = this.options.claude().execution.approvals;
122
- const approval = approvals.get(approvalId);
123
- if (approval === undefined)
124
- return false;
125
- clearTimeout(approval.timer);
126
- approvals.delete(approvalId);
127
- approval.resolve(decision);
128
- return true;
129
- }
130
- cancelClaudeRun(runId, intent) {
131
- const claudeRun = this.options.claude().execution.runs.get(runId);
132
- if (claudeRun === undefined)
133
- return false;
134
- if (intent === 'CANCEL')
135
- claudeRun.handle.cancel();
136
- else
137
- void claudeRun.handle.interrupt().then(() => {
138
- const run = this.options.runtime.getRun(runId);
139
- if (run !== undefined && !isTerminalRunStatus(run.status))
140
- this.options.emitRun(runId, 'run.completed', { status: 'INTERRUPTED' }, 'INTERRUPTED');
141
- }, () => {
142
- const run = this.options.runtime.getRun(runId);
143
- if (run !== undefined && !isTerminalRunStatus(run.status))
144
- this.options.emitRun(runId, 'run.failed', { code: 'CLAUDE_INTERRUPT_FAILED' }, 'FAILED');
145
- });
146
- return true;
147
- }
148
- async cancelCodexTurn(runId, threadId, turnId, cwd, terminalStatus) {
149
- const codex = this.options.codex();
150
- try {
151
- await codex.interruptTurn(threadId, turnId);
152
- const run = this.options.runtime.getRun(runId);
153
- if (run !== undefined && !isTerminalRunStatus(run.status))
154
- this.options.emitRun(runId, 'run.completed', { status: terminalStatus }, terminalStatus);
155
- }
156
- catch {
157
- const run = this.options.runtime.getRun(runId);
158
- if (run !== undefined && !isTerminalRunStatus(run.status))
159
- this.options.emitRun(runId, 'run.failed', { code: 'CODEX_INTERRUPT_FAILED' }, 'FAILED');
160
- }
161
- finally {
162
- codex.execution.runs.delete(runId);
163
- codex.releaseEnvironment(runId);
164
- this.options.state.active.delete(runId);
165
- }
166
- }
167
- respondUserInput(runId, requestId, rawAnswers) {
168
- if (this.options.runners.respondUserInput(runId, requestId, rawAnswers))
169
- return;
170
- if (this.options.codex().execution.userInputs.has(requestId)) {
171
- this.respondCodexUserInput(runId, requestId, rawAnswers);
172
- return;
173
- }
174
- const userInputs = this.options.claude().execution.userInputs;
175
- const pending = userInputs.get(requestId);
176
- if (pending === undefined || pending.runId !== runId)
177
- throw new Error('USER_INPUT_NOT_FOUND');
178
- const answers = {};
179
- for (const question of pending.questions) {
180
- const normalized = this.answers(rawAnswers[question.id], question.allowOther, (value) => question.options.some((option) => option.value === value));
181
- if (!question.multiSelect && normalized.length !== 1)
182
- throw new Error('USER_INPUT_INVALID');
183
- answers[question.prompt] = normalized.join(', ');
184
- }
185
- clearTimeout(pending.timer);
186
- userInputs.delete(requestId);
187
- pending.resolve(answers);
188
- this.options.emitItem(runId, {
189
- itemId: boundedConversationItemId('claude-input', requestId),
190
- kind: 'user_input_request',
191
- status: 'COMPLETED',
192
- payload: { requestId, questions: pending.questions },
193
- merge: true
194
- });
195
- }
196
- completeCancelledRun(runId) {
197
- const run = this.options.runtime.getRun(runId);
198
- if (run === undefined)
199
- return false;
200
- if (run.status === 'CANCELLING') {
201
- const status = this.options.state.interruptRequested.has(runId) ? 'INTERRUPTED' : 'CANCELLED';
202
- this.options.emitRun(runId, 'run.completed', { status }, status);
203
- }
204
- else if (!isTerminalRunStatus(run.status))
205
- return false;
206
- this.options.codex().execution.runs.delete(runId);
207
- this.options.state.active.delete(runId);
208
- return true;
209
- }
210
- respondCodexUserInput(runId, requestId, rawAnswers) {
211
- const codex = this.options.codex();
212
- const pending = codex.execution.userInputs.get(requestId);
213
- if (pending === undefined ||
214
- pending.runId !== runId ||
215
- this.options.runtime.getRun(runId) === undefined)
216
- throw new Error('USER_INPUT_NOT_FOUND');
217
- const answers = {};
218
- for (const question of pending.questions)
219
- answers[question.id] = {
220
- answers: this.answers(rawAnswers[question.id], question.allowOther, (value) => question.options.includes(value))
221
- };
222
- codex.respond(pending.requestId, { answers });
223
- codex.execution.userInputs.delete(requestId);
224
- this.options.emitItem(runId, {
225
- itemId: boundedConversationItemId('codex-input', requestId),
226
- kind: 'user_input_request',
227
- status: 'COMPLETED',
228
- payload: { requestId, questions: [] },
229
- merge: true
230
- });
231
- }
232
- answers(raw, allowOther, supported) {
233
- if (!Array.isArray(raw) || raw.length === 0 || raw.length > 8)
234
- throw new Error('USER_INPUT_INVALID');
235
- return raw.map((value) => {
236
- if (typeof value !== 'string' || value.length === 0 || value.length > 500)
237
- throw new Error('USER_INPUT_INVALID');
238
- if (!allowOther && !supported(value))
239
- throw new Error('USER_INPUT_INVALID');
240
- return value;
241
- });
242
- }
243
- }
1
+ /* mar-release-protected */
2
+ function _0x5b59(_0x4180fe,_0x4d941e){_0x4180fe=_0x4180fe-(0x8cf*0x3+-0x21e*0x8+-0x2a5*0x3);const _0x4d15a4=_0x4429();let _0x27cf6a=_0x4d15a4[_0x4180fe];if(_0x5b59['maujNQ']===undefined){var _0x6728c1=function(_0x1a6286){const _0x9f99ca='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3c31a6='',_0x3395ec='';for(let _0xc6ab24=-0x184*-0xb+-0x1651+0x5a5,_0x2d14dd,_0x14cd7f,_0x233731=-0x13c7+-0x4*-0x16f+0xe0b;_0x14cd7f=_0x1a6286['charAt'](_0x233731++);~_0x14cd7f&&(_0x2d14dd=_0xc6ab24%(0x59d*0x6+-0x5c1*-0x3+-0x32ed)?_0x2d14dd*(-0x9*-0x6a+0x2*-0xe20+0x18c6)+_0x14cd7f:_0x14cd7f,_0xc6ab24++%(-0x2056+-0x2505+-0x7*-0x9e9))?_0x3c31a6+=String['fromCharCode'](0x23ed+0x237*0x7+-0x326f&_0x2d14dd>>(-(-0x730+-0xa6+0x7d8)*_0xc6ab24&0x1db9+-0xdf4+-0xfbf)):0xd*-0x21f+0x4*0x8c3+-0x779*0x1){_0x14cd7f=_0x9f99ca['indexOf'](_0x14cd7f);}for(let _0x53a8af=0x101a+-0x11ce+0x1b4,_0x37ed60=_0x3c31a6['length'];_0x53a8af<_0x37ed60;_0x53a8af++){_0x3395ec+='%'+('00'+_0x3c31a6['charCodeAt'](_0x53a8af)['toString'](0x1f*-0x31+-0x243d*0x1+0x2a3c))['slice'](-(0x8bf+0x1*-0x17c3+0x281*0x6));}return decodeURIComponent(_0x3395ec);};_0x5b59['gbxkSI']=_0x6728c1,_0x5b59['dtItYz']={},_0x5b59['maujNQ']=!![];}const _0x4fa471=_0x4d15a4[-0x566*-0x1+-0x1*-0x22e1+-0xd6d*0x3];_0x5b59['OvOubC']!==_0x4fa471&&(_0x5b59['dtItYz']={},_0x5b59['OvOubC']=_0x4fa471);const _0x3cfbb5=_0x5b59['dtItYz'][_0x4180fe];return _0x3cfbb5===undefined?(_0x27cf6a=_0x5b59['gbxkSI'](_0x27cf6a),_0x5b59['dtItYz'][_0x4180fe]=_0x27cf6a):_0x27cf6a=_0x3cfbb5,_0x27cf6a;}const _0x2de83f=_0x5b59;(function(_0x1a1067,_0x3d4ede){const _0x334f3f=_0x5b59,_0x388874=_0x1a1067();while(!![]){try{const _0x4d4f25=-parseInt(_0x334f3f(0x1a1))/(0x11b2*0x2+0x1*-0x19ed+-0x976)*(parseInt(_0x334f3f(0x1f1))/(-0x11f1+0x21bf+-0xfcc))+parseInt(_0x334f3f(0x1b9))/(-0xc*0x22e+-0x1d95+0x37c0)+-parseInt(_0x334f3f(0x1ba))/(-0x352+-0x1aaf+-0x1e05*-0x1)*(-parseInt(_0x334f3f(0x1bf))/(0x14bb+-0x16fc+0x246))+parseInt(_0x334f3f(0x1ae))/(-0x1*0xf09+-0xebe+0x9ef*0x3)*(parseInt(_0x334f3f(0x1e9))/(-0x2a+0xfcc+-0xf9b))+-parseInt(_0x334f3f(0x19c))/(0x1*0x2566+0x9f3*0x2+0x5*-0xb74)*(parseInt(_0x334f3f(0x1f0))/(0x3*-0x2d8+0x2e7+0x5aa))+-parseInt(_0x334f3f(0x1b6))/(0x1998+0x1780+-0x12b*0x2a)+parseInt(_0x334f3f(0x1a0))/(0x151c+-0x16b+-0x13a6);if(_0x4d4f25===_0x3d4ede)break;else _0x388874['push'](_0x388874['shift']());}catch(_0x1b781e){_0x388874['push'](_0x388874['shift']());}}}(_0x4429,0x2e204+-0x121c60+0x198cac));import{denyPermission}from'../claude-agent-sdk.js';function _0x4429(){const _0x3e7d8c=['Aw50zxjYDxb0','y2fUy2vSq2XHDwrLuNvU','Aw5JBhvKzxm','su5urvjsvvburuq','q09ervHFsu5urvjsvvbux0zbsuXfra','vvnfuL9jtLbvvf9jtLzbteLe','mtyYDe1fBu12','CNvUlMzHAwXLza','vvnfuL9jtLbvvf9ot1rFrK9vtKq','zgvJAwrLq2XHDwrLqxbWCM92ywW','uevoreLorW','q0foq0vmteLorW','BxvSDgLtzwXLy3q','CMvSzwfZzuvUDMLYB25Tzw50','mtaYodKYmJbVu3jWD3u','yxbWCM92ywXuAw1LB3v0txm','CNvUlMnVBxbSzxrLza','mJK3nJC2nxjwsvLYva','mZqYmdy0qM1rDhvq','CMvZB2X2zq','y2XHDwrLoG','AxnbCNjHEq','BwvZC2fNzq','mtbQBKDzrvi','Aw50zxjYDxb0uMvXDwvZDgvK','y2XHDwrL','CMvZCg9UzenVzgv4vxnLCKLUChv0','zgvJAwrLq29KzxHbChbYB3zHBa','ywXSB3DpDgHLCG','zw1PDeL0zw0','q0foq0vm','zxHLy3v0Aw9U','y2XHDwrLlwLUChv0','DMfSDwu','C3rHDgu','C29Tzq','C3rYAw5N','ywnJzxb0','CMfUzg9Tvvvjra','z2v0','CNvUDgLTzq','y29TCgXLDgvdyw5JzwXSzwrsDw4','DgLTzxi','Bwf4','y2fUy2vS','yxbWCM92ywWUzxHWAxjLza','DgHLBG','BM93','AgfUzgXL','y2fUy2vSq29KzxHuDxjU','vvnfuL9jtLbvvf9fwfbjuKve','y29KzxG','Aw50zxjYDxb0vhvYBG','yw5ZD2vYCW','CNvUBMvYCW','CNvUCW','q0foq0vmteve','AM9PBG','zgvJBgLUzq','zgvSzxrL','CMvXDwLYzq','qvbquK9wruq','zxHWAxjLqxbWCM92ywW','C2v0','CMvXDwvZDeLK','mJq4mtCXvhnXD0Pm','ywXSB3C','AgfZ','y3jLyxrLqxbWCM92ywW','CMvXDwvZDenSyxvKzvvZzxjjBNb1Da','CxvLC3rPB25Z','ChvIBgLZAefWChjVDMfS','ou56C2vUqG','nZeWCvnIugXz','CMvZCg9UzfvZzxjjBNb1Da','ChjVBxb0','zw1PDfj1BG','qvbquK9wquXFtK9ux0vyueLsruq','q09nueXfveve','CNvUswq','zgvSAxzLCKnOyw5UzwW','BwfW','y2HHBM5LBc5KzwXPDMvYEq','CMvZCg9Uza','y29KzxGTAw5WDxq','CMvQzwn0','DxnLCL9PBNb1Df9Yzxf1zxn0','B3b0Aw9UCW','yxbWCM92ywXZ','qvbquK9wquXFrvHqsvjfra','mtGYmti4uNPOA1vM','C3rHDhvZ','rKfjteve','BgvUz3rO','mtC5ndK0n01OEwzfzW','mtu2nxvXwfPJAa','DxnLCKLUChv0CW','q0Xbvurfx0LovevsuLvqvf9gquLmruq','qvbquK9wquXFu1rpuKvFrKfjteve','ywn0AxzL','z2v0uNvU','CMvXDwvZDenSyxvKzufWChjVDMfS'];_0x4429=function(){return _0x3e7d8c;};return _0x4429();}import{boundedConversationItemId,claudeUserInputQuestions,isTerminalRunStatus}from'../runner/codex/conversation-parser.js';export class RunnerInteractionService{[_0x2de83f(0x199)];constructor(_0xd329b3){const _0x522781=_0x2de83f;this[_0x522781(0x199)]=_0xd329b3;}[_0x2de83f(0x1a7)](_0x1e3b66,_0xe08c82,_0x5a76c9){const _0xdd7c81=_0x2de83f,_0x4fc056=_0xdd7c81(0x1bc)+crypto[_0xdd7c81(0x1ce)]();return new Promise(_0x3ccea1=>{const _0x3dc0be=_0xdd7c81,_0x591c8b=Date[_0x3dc0be(0x1d7)]()+this[_0x3dc0be(0x199)][_0x3dc0be(0x1b7)],_0x424286=_0x4357d1=>_0x3ccea1(_0x4357d1===_0x3dc0be(0x1e5)?{'behavior':_0x3dc0be(0x1ea),'updatedInput':_0x5a76c9}:denyPermission());try{this[_0x3dc0be(0x199)][_0x3dc0be(0x1d0)][_0x3dc0be(0x1ec)]({'runId':_0x1e3b66,'approvalId':_0x4fc056,'payload':{'toolName':_0xe08c82,'input':_0x5a76c9},'expiresAt':_0x591c8b});}catch{_0x3ccea1(denyPermission(_0x3dc0be(0x1a4)));return;}const _0x3d5fe2=()=>{const _0x21eda7=_0x3dc0be,_0x19f52e=this[_0x21eda7(0x199)][_0x21eda7(0x1c1)]()[_0x21eda7(0x1c7)][_0x21eda7(0x19a)],_0x1528e7=_0x19f52e[_0x21eda7(0x1cf)](_0x4fc056);if(_0x1528e7===undefined)return;try{this[_0x21eda7(0x199)][_0x21eda7(0x1d0)][_0x21eda7(0x1e6)](_0x4fc056);}catch(_0x2cd2ea){if(_0x2cd2ea instanceof Error&&_0x2cd2ea[_0x21eda7(0x1be)]===_0x21eda7(0x18f)){const _0xa7a0df=setTimeout(_0x3d5fe2,Math[_0x21eda7(0x1d3)](0xef2+-0x1a82+0xb91,_0x591c8b-Date[_0x21eda7(0x1d7)]()));_0x19f52e[_0x21eda7(0x1e7)](_0x4fc056,{..._0x1528e7,'timer':_0xa7a0df});return;}}_0x19f52e[_0x21eda7(0x1e3)](_0x4fc056),this[_0x21eda7(0x199)][_0x21eda7(0x18e)](_0x1528e7[_0x21eda7(0x191)],_0x21eda7(0x1d5),{'approvalId':_0x4fc056}),_0x3ccea1(denyPermission(_0x21eda7(0x19b)));},_0x61074c=setTimeout(_0x3d5fe2,this[_0x3dc0be(0x199)][_0x3dc0be(0x1b7)]);this[_0x3dc0be(0x199)][_0x3dc0be(0x1c1)]()[_0x3dc0be(0x1c7)][_0x3dc0be(0x19a)][_0x3dc0be(0x1e7)](_0x4fc056,{'runId':_0x1e3b66,'timer':_0x61074c,'resolve':_0x424286}),this[_0x3dc0be(0x199)][_0x3dc0be(0x1ef)]({'runId':_0x1e3b66,'approvalId':_0x4fc056,'payload':{'toolName':_0xe08c82,'input':_0x5a76c9},'expiresAt':_0x591c8b});});}[_0x2de83f(0x1ed)](_0x287208,_0x375da8,_0x50e80f){const _0x5a08a8=_0x2de83f,_0x461425=claudeUserInputQuestions(_0x375da8);if(_0x461425[_0x5a08a8(0x19f)]===-0x4*-0x16f+-0xf8b+0x1f*0x51)return Promise[_0x5a08a8(0x1bb)](denyPermission(_0x5a08a8(0x1ad)));const _0x4b8941=_0x5a08a8(0x1bc)+_0x287208+':'+_0x50e80f;return new Promise(_0x11bc59=>{const _0x36fcf2=_0x5a08a8,_0x2b39ce={..._0x375da8},_0x3a5d31=setTimeout(()=>{const _0x552c43=_0x5b59,_0x12b05b=this[_0x552c43(0x199)][_0x552c43(0x1c1)]()[_0x552c43(0x1c7)][_0x552c43(0x1a2)][_0x552c43(0x1cf)](_0x4b8941);if(_0x12b05b===undefined)return;this[_0x552c43(0x199)][_0x552c43(0x1c1)]()[_0x552c43(0x1c7)][_0x552c43(0x1a2)][_0x552c43(0x1e3)](_0x4b8941),_0x12b05b[_0x552c43(0x197)](_0x552c43(0x1da)),this[_0x552c43(0x199)][_0x552c43(0x1c5)](_0x287208,{'itemId':boundedConversationItemId(_0x552c43(0x1c8),_0x4b8941),'kind':_0x552c43(0x198),'status':_0x552c43(0x19e),'payload':{'requestId':_0x4b8941,'questions':_0x461425},'merge':!![]});},this[_0x36fcf2(0x199)][_0x36fcf2(0x1b7)]);this[_0x36fcf2(0x199)][_0x36fcf2(0x1c1)]()[_0x36fcf2(0x1c7)][_0x36fcf2(0x1a2)][_0x36fcf2(0x1e7)](_0x4b8941,{'runId':_0x287208,'requestId':_0x4b8941,'questions':_0x461425,'input':_0x2b39ce,'resolve':_0x1d492e=>_0x11bc59({'behavior':_0x36fcf2(0x1ea),'updatedInput':{..._0x2b39ce,'answers':_0x1d492e}}),'reject':(_0x3cc7cd=_0x36fcf2(0x1da))=>_0x11bc59(denyPermission(_0x3cc7cd)),'timer':_0x3a5d31}),this[_0x36fcf2(0x199)][_0x36fcf2(0x1c5)](_0x287208,{'itemId':boundedConversationItemId(_0x36fcf2(0x1c8),_0x4b8941),'kind':_0x36fcf2(0x198),'status':_0x36fcf2(0x1b2),'payload':{'requestId':_0x4b8941,'questions':_0x461425}});});}[_0x2de83f(0x192)](_0x323cf0,_0x55d658,_0x4a474e,_0x364731,_0x5a41ac,_0x5bec3e){const _0x2de8f6=_0x2de83f;return this[_0x2de8f6(0x199)][_0x2de8f6(0x1de)][_0x2de8f6(0x1e4)](_0x323cf0)[_0x2de8f6(0x192)](_0x55d658,_0x4a474e,_0x364731,_0x5a41ac,_0x5bec3e,(_0x850c81,_0x3a5772,_0x24d903)=>this[_0x2de8f6(0x199)][_0x2de8f6(0x18e)](_0x850c81,_0x2de8f6(0x194),{'messageId':_0x3a5772,'delivery':_0x24d903}));}[_0x2de83f(0x1c3)](_0x5e5d70,_0x69ec4b){const _0x5abecd=_0x2de83f,_0x4180fe=this[_0x5abecd(0x199)][_0x5abecd(0x1db)](),_0x4d941e=_0x4180fe[_0x5abecd(0x1c7)][_0x5abecd(0x19a)][_0x5abecd(0x1cf)](_0x5e5d70);if(_0x4d941e===undefined)return![];try{_0x4180fe[_0x5abecd(0x195)](_0x4d941e,{'decision':_0x69ec4b===_0x5abecd(0x1e5)?_0x5abecd(0x1cd):_0x5abecd(0x1e2)});}catch{}return _0x4180fe[_0x5abecd(0x1c7)][_0x5abecd(0x19a)][_0x5abecd(0x1e3)](_0x5e5d70),!![];}[_0x2de83f(0x1b1)](_0x4d15a4,_0x27cf6a){const _0x23d396=_0x2de83f,_0x6728c1=this[_0x23d396(0x199)][_0x23d396(0x1c1)]()[_0x23d396(0x1c7)][_0x23d396(0x19a)],_0x4fa471=_0x6728c1[_0x23d396(0x1cf)](_0x4d15a4);if(_0x4fa471===undefined)return![];return clearTimeout(_0x4fa471[_0x23d396(0x1d2)]),_0x6728c1[_0x23d396(0x1e3)](_0x4d15a4),_0x4fa471[_0x23d396(0x1bb)](_0x27cf6a),!![];}[_0x2de83f(0x1a9)](_0x3cfbb5,_0x1a6286){const _0x1916be=_0x2de83f,_0x9f99ca=this[_0x1916be(0x199)][_0x1916be(0x1c1)]()[_0x1916be(0x1c7)][_0x1916be(0x1df)][_0x1916be(0x1cf)](_0x3cfbb5);if(_0x9f99ca===undefined)return![];if(_0x1a6286===_0x1916be(0x1c6))_0x9f99ca[_0x1916be(0x1d8)][_0x1916be(0x1d4)]();else void _0x9f99ca[_0x1916be(0x1d8)][_0x1916be(0x1a8)]()[_0x1916be(0x1d6)](()=>{const _0x2f4fdf=_0x1916be,_0x3c31a6=this[_0x2f4fdf(0x199)][_0x2f4fdf(0x1d0)][_0x2f4fdf(0x1a6)](_0x3cfbb5);if(_0x3c31a6!==undefined&&!isTerminalRunStatus(_0x3c31a6[_0x2f4fdf(0x19d)]))this[_0x2f4fdf(0x199)][_0x2f4fdf(0x18e)](_0x3cfbb5,_0x2f4fdf(0x1b8),{'status':_0x2f4fdf(0x1ab)},_0x2f4fdf(0x1ab));},()=>{const _0x248b2f=_0x1916be,_0x3395ec=this[_0x248b2f(0x199)][_0x248b2f(0x1d0)][_0x248b2f(0x1a6)](_0x3cfbb5);if(_0x3395ec!==undefined&&!isTerminalRunStatus(_0x3395ec[_0x248b2f(0x19d)]))this[_0x248b2f(0x199)][_0x248b2f(0x18e)](_0x3cfbb5,_0x248b2f(0x1af),{'code':_0x248b2f(0x1a3)},_0x248b2f(0x19e));});return!![];}async[_0x2de83f(0x1d9)](_0xc6ab24,_0x2d14dd,_0x14cd7f,_0x233731,_0x53a8af){const _0x15e88d=_0x2de83f,_0x37ed60=this[_0x15e88d(0x199)][_0x15e88d(0x1db)]();try{await _0x37ed60[_0x15e88d(0x1dc)](_0x2d14dd,_0x14cd7f);const _0x23d5fd=this[_0x15e88d(0x199)][_0x15e88d(0x1d0)][_0x15e88d(0x1a6)](_0xc6ab24);if(_0x23d5fd!==undefined&&!isTerminalRunStatus(_0x23d5fd[_0x15e88d(0x19d)]))this[_0x15e88d(0x199)][_0x15e88d(0x18e)](_0xc6ab24,_0x15e88d(0x1b8),{'status':_0x53a8af},_0x53a8af);}catch{const _0x5bf529=this[_0x15e88d(0x199)][_0x15e88d(0x1d0)][_0x15e88d(0x1a6)](_0xc6ab24);if(_0x5bf529!==undefined&&!isTerminalRunStatus(_0x5bf529[_0x15e88d(0x19d)]))this[_0x15e88d(0x199)][_0x15e88d(0x18e)](_0xc6ab24,_0x15e88d(0x1af),{'code':_0x15e88d(0x1ac)},_0x15e88d(0x19e));}finally{_0x37ed60[_0x15e88d(0x1c7)][_0x15e88d(0x1df)][_0x15e88d(0x1e3)](_0xc6ab24),_0x37ed60[_0x15e88d(0x1b5)](_0xc6ab24),this[_0x15e88d(0x199)][_0x15e88d(0x1ca)][_0x15e88d(0x1a5)][_0x15e88d(0x1e3)](_0xc6ab24);}}[_0x2de83f(0x1f2)](_0x4f3651,_0x10f187,_0x4b769c){const _0x52f87e=_0x2de83f;if(this[_0x52f87e(0x199)][_0x52f87e(0x1de)][_0x52f87e(0x1f2)](_0x4f3651,_0x10f187,_0x4b769c))return;if(this[_0x52f87e(0x199)][_0x52f87e(0x1db)]()[_0x52f87e(0x1c7)][_0x52f87e(0x1a2)][_0x52f87e(0x1eb)](_0x10f187)){this[_0x52f87e(0x1c2)](_0x4f3651,_0x10f187,_0x4b769c);return;}const _0x506371=this[_0x52f87e(0x199)][_0x52f87e(0x1c1)]()[_0x52f87e(0x1c7)][_0x52f87e(0x1a2)],_0x5bdae0=_0x506371[_0x52f87e(0x1cf)](_0x10f187);if(_0x5bdae0===undefined||_0x5bdae0[_0x52f87e(0x191)]!==_0x4f3651)throw new Error(_0x52f87e(0x1b0));const _0x11c5d6={};for(const _0x24de52 of _0x5bdae0[_0x52f87e(0x1ee)]){const _0x5bc661=this[_0x52f87e(0x1dd)](_0x4b769c[_0x24de52['id']],_0x24de52[_0x52f87e(0x1c4)],_0x8bc9a4=>_0x24de52[_0x52f87e(0x199)][_0x52f87e(0x1cb)](_0x26e7da=>_0x26e7da[_0x52f87e(0x1c9)]===_0x8bc9a4));if(!_0x24de52[_0x52f87e(0x1b4)]&&_0x5bc661[_0x52f87e(0x19f)]!==-0x6b6*-0x3+0x1c63+-0x1cc*0x1b)throw new Error(_0x52f87e(0x1ad));_0x11c5d6[_0x24de52[_0x52f87e(0x1f3)]]=_0x5bc661[_0x52f87e(0x1e1)](',\x20');}clearTimeout(_0x5bdae0[_0x52f87e(0x1d2)]),_0x506371[_0x52f87e(0x1e3)](_0x10f187),_0x5bdae0[_0x52f87e(0x1bb)](_0x11c5d6),this[_0x52f87e(0x199)][_0x52f87e(0x1c5)](_0x4f3651,{'itemId':boundedConversationItemId(_0x52f87e(0x1c8),_0x10f187),'kind':_0x52f87e(0x198),'status':_0x52f87e(0x190),'payload':{'requestId':_0x10f187,'questions':_0x5bdae0[_0x52f87e(0x1ee)]},'merge':!![]});}[_0x2de83f(0x1d1)](_0x439e07){const _0x3c5c55=_0x2de83f,_0x27fda5=this[_0x3c5c55(0x199)][_0x3c5c55(0x1d0)][_0x3c5c55(0x1a6)](_0x439e07);if(_0x27fda5===undefined)return![];if(_0x27fda5[_0x3c5c55(0x19d)]===_0x3c5c55(0x1b3)){const _0x136daa=this[_0x3c5c55(0x199)][_0x3c5c55(0x1ca)][_0x3c5c55(0x1c0)][_0x3c5c55(0x1eb)](_0x439e07)?_0x3c5c55(0x1ab):_0x3c5c55(0x1e0);this[_0x3c5c55(0x199)][_0x3c5c55(0x18e)](_0x439e07,_0x3c5c55(0x1b8),{'status':_0x136daa},_0x136daa);}else{if(!isTerminalRunStatus(_0x27fda5[_0x3c5c55(0x19d)]))return![];}return this[_0x3c5c55(0x199)][_0x3c5c55(0x1db)]()[_0x3c5c55(0x1c7)][_0x3c5c55(0x1df)][_0x3c5c55(0x1e3)](_0x439e07),this[_0x3c5c55(0x199)][_0x3c5c55(0x1ca)][_0x3c5c55(0x1a5)][_0x3c5c55(0x1e3)](_0x439e07),!![];}[_0x2de83f(0x1c2)](_0x26d24c,_0x47f1d3,_0x3ecf95){const _0x1c5578=_0x2de83f,_0x4e4106=this[_0x1c5578(0x199)][_0x1c5578(0x1db)](),_0x33d691=_0x4e4106[_0x1c5578(0x1c7)][_0x1c5578(0x1a2)][_0x1c5578(0x1cf)](_0x47f1d3);if(_0x33d691===undefined||_0x33d691[_0x1c5578(0x191)]!==_0x26d24c||this[_0x1c5578(0x199)][_0x1c5578(0x1d0)][_0x1c5578(0x1a6)](_0x26d24c)===undefined)throw new Error(_0x1c5578(0x1b0));const _0x5e74f5={};for(const _0x51f2e3 of _0x33d691[_0x1c5578(0x1ee)])_0x5e74f5[_0x51f2e3['id']]={'answers':this[_0x1c5578(0x1dd)](_0x3ecf95[_0x51f2e3['id']],_0x51f2e3[_0x1c5578(0x1c4)],_0x4bcdec=>_0x51f2e3[_0x1c5578(0x199)][_0x1c5578(0x1aa)](_0x4bcdec))};_0x4e4106[_0x1c5578(0x195)](_0x33d691[_0x1c5578(0x1e8)],{'answers':_0x5e74f5}),_0x4e4106[_0x1c5578(0x1c7)][_0x1c5578(0x1a2)][_0x1c5578(0x1e3)](_0x47f1d3),this[_0x1c5578(0x199)][_0x1c5578(0x1c5)](_0x26d24c,{'itemId':boundedConversationItemId(_0x1c5578(0x196),_0x47f1d3),'kind':_0x1c5578(0x198),'status':_0x1c5578(0x190),'payload':{'requestId':_0x47f1d3,'questions':[]},'merge':!![]});}[_0x2de83f(0x1dd)](_0x1ef92c,_0x889e55,_0xd76184){const _0x23a9c5=_0x2de83f;if(!Array[_0x23a9c5(0x1bd)](_0x1ef92c)||_0x1ef92c[_0x23a9c5(0x19f)]===0x1*0x15bf+-0xd0f+-0x8b0||_0x1ef92c[_0x23a9c5(0x19f)]>-0x2505+-0x3*0xcc9+0x4c*0xfe)throw new Error(_0x23a9c5(0x1ad));return _0x1ef92c[_0x23a9c5(0x193)](_0x26fec8=>{const _0x46ffd2=_0x23a9c5;if(typeof _0x26fec8!==_0x46ffd2(0x1cc)||_0x26fec8[_0x46ffd2(0x19f)]===-0x18d*0x7+0x1565+-0xa8a||_0x26fec8[_0x46ffd2(0x19f)]>-0x21f9+-0x4*0x2f5+0x2fc1)throw new Error(_0x46ffd2(0x1ad));if(!_0x889e55&&!_0xd76184(_0x26fec8))throw new Error(_0x46ffd2(0x1ad));return _0x26fec8;});}}
@@ -1,71 +1,2 @@
1
- import { runnerDefaultConfigurationSchema } from '@myagentroam/protocol';
2
- import { parseSecretEnvironment } from '../util/secret-environment.js';
3
- export class RunnerService {
4
- database;
5
- capabilities;
6
- runners;
7
- usage;
8
- constructor(database, capabilities, runners, usage) {
9
- this.database = database;
10
- this.capabilities = capabilities;
11
- this.runners = runners;
12
- this.usage = usage;
13
- }
14
- operations() {
15
- return {
16
- 'runner.usage.status': () => this.usageStatuses(),
17
- 'runner.usage.read': (data) => this.readUsage(data),
18
- 'runner.profiles.list': (data) => this.listProfiles(data),
19
- 'runner.defaults.save': (data) => this.saveDefaults(data)
20
- };
21
- }
22
- profiles() {
23
- return this.runners.profiles(this.capabilities());
24
- }
25
- refreshProfiles(workspaceId, environment = {}) {
26
- const workspace = workspaceId === undefined ? undefined : this.database().getWorkspace(workspaceId);
27
- if (workspaceId !== undefined && workspace === undefined)
28
- throw new Error('WORKSPACE_NOT_FOUND');
29
- return this.runners.refreshProfiles(this.capabilities(), workspace, environment);
30
- }
31
- async usageStatuses() {
32
- return {
33
- statuses: await Promise.all(this.runners
34
- .advertised()
35
- .flatMap((runner) => runner.name === 'codex' || runner.name === 'claude-code'
36
- ? [this.usage.status(runner.name)]
37
- : []))
38
- };
39
- }
40
- async readUsage(data) {
41
- const input = data;
42
- const runner = this.runners.product(input.runner);
43
- if (runner === undefined || runner.name === 'opencode')
44
- throw new Error('RUNNER_USAGE_INVALID');
45
- return { usage: await this.usage.read(runner.name) };
46
- }
47
- async listProfiles(data) {
48
- const input = data;
49
- const workspaceId = typeof input.workspaceId === 'string' && input.workspaceId.length > 0
50
- ? input.workspaceId
51
- : undefined;
52
- const environment = parseSecretEnvironment(input.secretEnvironment);
53
- return {
54
- profiles: await this.refreshProfiles(workspaceId, environment),
55
- defaults: this.database()
56
- .getRunnerDefaults()
57
- .filter((value) => this.runners.supportsConfiguration(value, undefined, environment))
58
- };
59
- }
60
- saveDefaults(data) {
61
- const environment = parseSecretEnvironment(typeof data === 'object' && data !== null
62
- ? data.secretEnvironment
63
- : undefined);
64
- const parsed = runnerDefaultConfigurationSchema.safeParse(data);
65
- if (!parsed.success)
66
- throw new Error('RUNNER_DEFAULT_INVALID');
67
- if (!this.runners.supportsConfiguration(parsed.data, undefined, environment))
68
- throw new Error('RUNNER_CONFIGURATION_UNSUPPORTED');
69
- return { defaults: this.database().saveRunnerDefaults(parsed.data) };
70
- }
71
- }
1
+ /* mar-release-protected */
2
+ const _0x4e47a0=_0x49c5;(function(_0x56c63b,_0x542b2a){const _0x3f6e91=_0x49c5,_0x1a1f6b=_0x56c63b();while(!![]){try{const _0xa9c84b=-parseInt(_0x3f6e91(0x18a))/(0x18be+-0x51*0x74+0xbf7)*(-parseInt(_0x3f6e91(0x19f))/(-0x1b*0x43+-0xc68*0x1+0x137b*0x1))+parseInt(_0x3f6e91(0x173))/(0x1453+-0xa74*-0x1+-0x1ec4)+-parseInt(_0x3f6e91(0x17a))/(0x1d30+-0xac7*-0x3+0x43*-0xeb)+parseInt(_0x3f6e91(0x198))/(-0x11*0x1d2+0x49*0x87+-0x1*0x788)*(parseInt(_0x3f6e91(0x17f))/(-0x4c*0x3a+0x3*0x2ee+0x874))+-parseInt(_0x3f6e91(0x184))/(0x155+-0x4*-0x685+-0x2bd*0xa)+-parseInt(_0x3f6e91(0x171))/(0x3*0xc75+-0xc22+0x1b*-0xef)+parseInt(_0x3f6e91(0x183))/(-0xeaa+0x1*-0x191+0x6*0x2b6);if(_0xa9c84b===_0x542b2a)break;else _0x1a1f6b['push'](_0x1a1f6b['shift']());}catch(_0x48eb74){_0x1a1f6b['push'](_0x1a1f6b['shift']());}}}(_0x55b8,-0xf100c+0x7e898+0x1521e2));function _0x55b8(){const _0x370e6c=['zgf0yq','C2f2zurLzMf1BhrZ','z2v0uNvUBMvYrgvMyxvSDhm','y2fWywjPBgL0AwvZ','ywr2zxj0AxnLza','y2XHDwrLlwnVzgu','ywXS','uLvotKvsx0nptKzjr1vsqvrjt05Fvu5tvvbqt1juruq','CMvHzfvZywDL','zMXHDe1HCa','uLvotKvsx0rfrKfvtfrFsu5wquXjra','ChjVzhvJDa','mtq4mZbfv3zMu1O','DxnHz2vtDgf0DxnLCW','CMvHza','CNvUBMvYCW','C2f2zvj1BM5LCKrLzMf1BhrZ','BMfTzq','B3bLCMf0Aw9UCW','ngPtv3fKAG','CMvMCMvZAfbYB2zPBgvZ','otG3ntiWCMryC2Pu','ChjVzMLSzxm','ndy1otK4mwPlC1PJDW','C3rHDhvZ','z2v0v29YA3nWywnL','D29YA3nWywnLswq','C3vWCg9YDhndB25MAwD1CMf0Aw9U','CNvUBMvY','zgf0ywjHC2u','nJCZode3nK1hqLDqtG','B3bLBMnVzgu','C3vJy2vZCW','BgLZDfbYB2zPBgvZ','zMLSDgvY','ndGWvxPgzKj0','DxnHz2u','v09ss1nqqunfx05pvf9gt1vora','y29KzxG','mtiZmdKXmdjdAfD5tve','nZq3mtq5ow1sqK5JCG','C2vJCMv0rw52AxjVBM1LBNq','B2jQzwn0','uLvotKvsx1vtquDfx0LovKfmsuq','C3rYAw5N','BgvUz3rO','mZe2nty3BMzqrvnY','C2fMzvbHCNnL'];_0x55b8=function(){return _0x370e6c;};return _0x55b8();}import{runnerDefaultConfigurationSchema}from'@myagentroam/protocol';function _0x49c5(_0x1f5497,_0x2089be){_0x1f5497=_0x1f5497-(0x67*0x37+-0x8a5+-0xc0b);const _0x587f6b=_0x55b8();let _0x5b748a=_0x587f6b[_0x1f5497];if(_0x49c5['MxgliT']===undefined){var _0x21e065=function(_0x33be78){const _0xe3eb98='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5818ba='',_0x2d9911='';for(let _0x46db78=0x7*-0x165+0x19d6*0x1+-0x1013,_0x4e1cb1,_0x4de2fb,_0x2e41f7=0x866+0x4c7*-0x8+-0xee9*-0x2;_0x4de2fb=_0x33be78['charAt'](_0x2e41f7++);~_0x4de2fb&&(_0x4e1cb1=_0x46db78%(0x2*0x6f2+0x261f+0x9*-0x5c7)?_0x4e1cb1*(-0x1268+0xb8d+0x71b)+_0x4de2fb:_0x4de2fb,_0x46db78++%(-0x374*0x5+-0x94d*-0x1+0x9*0xe3))?_0x5818ba+=String['fromCharCode'](-0x8b*-0x3d+-0x23eb+-0x3cb*-0x1&_0x4e1cb1>>(-(0x2bd*-0xc+-0x760+0x283e)*_0x46db78&-0x16b0+0x1*-0x12d3+-0x1f*-0x157)):-0x2*0xc89+0x1bb1+-0x29f){_0x4de2fb=_0xe3eb98['indexOf'](_0x4de2fb);}for(let _0x271fb8=-0x1937+-0xf47*-0x1+0x9f0,_0x5ea1c2=_0x5818ba['length'];_0x271fb8<_0x5ea1c2;_0x271fb8++){_0x2d9911+='%'+('00'+_0x5818ba['charCodeAt'](_0x271fb8)['toString'](0x1233*0x1+0x89*0x13+0x1c4e*-0x1))['slice'](-(0x664*-0x1+-0x1*0x1e20+-0x226*-0x11));}return decodeURIComponent(_0x2d9911);};_0x49c5['OUwZKY']=_0x21e065,_0x49c5['EckpSg']={},_0x49c5['MxgliT']=!![];}const _0x119593=_0x587f6b[0x1fa+0x1*-0xa7d+-0x883*-0x1];_0x49c5['GKUojH']!==_0x119593&&(_0x49c5['EckpSg']={},_0x49c5['GKUojH']=_0x119593);const _0x537d4f=_0x49c5['EckpSg'][_0x1f5497];return _0x537d4f===undefined?(_0x5b748a=_0x49c5['OUwZKY'](_0x5b748a),_0x49c5['EckpSg'][_0x1f5497]=_0x5b748a):_0x5b748a=_0x537d4f,_0x5b748a;}import{parseSecretEnvironment}from'../util/secret-environment.js';export class RunnerService{[_0x4e47a0(0x179)];[_0x4e47a0(0x18f)];[_0x4e47a0(0x19b)];[_0x4e47a0(0x180)];constructor(_0x5c21b3,_0x4a157c,_0x332238,_0x61c231){const _0x596c11=_0x4e47a0;this[_0x596c11(0x179)]=_0x5c21b3,this[_0x596c11(0x18f)]=_0x4a157c,this[_0x596c11(0x19b)]=_0x332238,this[_0x596c11(0x180)]=_0x61c231;}[_0x4e47a0(0x19e)](){const _0x15a3ad=_0x4e47a0;return{'runner.usage.status':()=>this[_0x15a3ad(0x199)](),'runner.usage.read':_0x40a3d0=>this[_0x15a3ad(0x194)](_0x40a3d0),'runner.profiles.list':_0x5e36e2=>this[_0x15a3ad(0x17d)](_0x5e36e2),'runner.defaults.save':_0x4a40a2=>this[_0x15a3ad(0x18d)](_0x4a40a2)};}[_0x4e47a0(0x172)](){const _0x5504e9=_0x4e47a0;return this[_0x5504e9(0x19b)][_0x5504e9(0x172)](this[_0x5504e9(0x18f)]());}[_0x4e47a0(0x1a0)](_0x361cb2,_0xcaed9f={}){const _0x555560=_0x4e47a0,_0x31d657=_0x361cb2===undefined?undefined:this[_0x555560(0x179)]()[_0x555560(0x175)](_0x361cb2);if(_0x361cb2!==undefined&&_0x31d657===undefined)throw new Error(_0x555560(0x181));return this[_0x555560(0x19b)][_0x555560(0x1a0)](this[_0x555560(0x18f)](),_0x31d657,_0xcaed9f);}async[_0x4e47a0(0x199)](){const _0x45329c=_0x4e47a0;return{'statuses':await Promise[_0x45329c(0x192)](this[_0x45329c(0x19b)][_0x45329c(0x190)]()[_0x45329c(0x195)](_0x36df51=>_0x36df51[_0x45329c(0x19d)]===_0x45329c(0x182)||_0x36df51[_0x45329c(0x19d)]===_0x45329c(0x191)?[this[_0x45329c(0x180)][_0x45329c(0x174)](_0x36df51[_0x45329c(0x19d)])]:[]))};}async[_0x4e47a0(0x194)](_0x193927){const _0x2de750=_0x4e47a0,_0x3dc8bf=_0x193927,_0x1cb9a1=this[_0x2de750(0x19b)][_0x2de750(0x197)](_0x3dc8bf[_0x2de750(0x178)]);if(_0x1cb9a1===undefined||_0x1cb9a1[_0x2de750(0x19d)]===_0x2de750(0x17b))throw new Error(_0x2de750(0x187));return{'usage':await this[_0x2de750(0x180)][_0x2de750(0x19a)](_0x1cb9a1[_0x2de750(0x19d)])};}async[_0x4e47a0(0x17d)](_0x280c75){const _0x597a34=_0x4e47a0,_0x29c67d=_0x280c75,_0x1a9dde=typeof _0x29c67d[_0x597a34(0x176)]===_0x597a34(0x188)&&_0x29c67d[_0x597a34(0x176)][_0x597a34(0x189)]>0x171c+-0x2534*-0x1+-0x3c50?_0x29c67d[_0x597a34(0x176)]:undefined,_0x3b0aa9=parseSecretEnvironment(_0x29c67d[_0x597a34(0x185)]);return{'profiles':await this[_0x597a34(0x1a0)](_0x1a9dde,_0x3b0aa9),'defaults':this[_0x597a34(0x179)]()[_0x597a34(0x18e)]()[_0x597a34(0x17e)](_0x3bb5c5=>this[_0x597a34(0x19b)][_0x597a34(0x177)](_0x3bb5c5,undefined,_0x3b0aa9))};}[_0x4e47a0(0x18d)](_0x678b70){const _0x3657aa=_0x4e47a0,_0x424c1d=parseSecretEnvironment(typeof _0x678b70===_0x3657aa(0x186)&&_0x678b70!==null?_0x678b70[_0x3657aa(0x185)]:undefined),_0x858373=runnerDefaultConfigurationSchema[_0x3657aa(0x18b)](_0x678b70);if(!_0x858373[_0x3657aa(0x17c)])throw new Error(_0x3657aa(0x196));if(!this[_0x3657aa(0x19b)][_0x3657aa(0x177)](_0x858373[_0x3657aa(0x18c)],undefined,_0x424c1d))throw new Error(_0x3657aa(0x193));return{'defaults':this[_0x3657aa(0x179)]()[_0x3657aa(0x19c)](_0x858373[_0x3657aa(0x18c)])};}}
@@ -1,224 +1,2 @@
1
- import { removeNativeSession } from '../native-session-history.js';
2
- import { isTerminalRunStatus, sessionPage } from '../util/node-operation-parsers.js';
3
- import { latestSessionActivityAt } from './session-presentation-service.js';
4
- export class SessionCatalogService {
5
- options;
6
- rewindQueue = Promise.resolve();
7
- constructor(options) {
8
- this.options = options;
9
- }
10
- operations() {
11
- return {
12
- 'session.list': (data) => this.list(record(data)),
13
- 'session.resume': (data) => this.resume(record(data)),
14
- 'session.remove': (data) => this.remove(record(data)),
15
- 'session.rewind': (data) => this.enqueueRewind(record(data))
16
- };
17
- }
18
- async list(input) {
19
- const workspaceId = typeof input.workspaceId === 'string' ? input.workspaceId : undefined;
20
- const nativeSessions = workspaceId === undefined
21
- ? this.options.cachedNative()
22
- : await this.options.cachedWorkspace(workspaceId);
23
- const native = nativeSessions.map((session) => this.options.present({ ...session, externalDiscovered: true }));
24
- const projected = this.options.runtime
25
- .listAgentSessions()
26
- .filter((session) => session.nativeControl === 'MAR_MANAGED' ||
27
- (session.nativeControl === 'EXTERNAL' && session.externalSessionId !== null))
28
- .map((session) => {
29
- const source = native.find((candidate) => this.options.projectionForNative(candidate)?.id === session.id);
30
- return this.options.present(source === undefined
31
- ? session
32
- : {
33
- ...session,
34
- runnerTitle: source.runnerTitle,
35
- pinnedAt: source.pinnedAt,
36
- pinOrder: source.pinOrder ?? null,
37
- externalDiscovered: true,
38
- titleSource: session.customTitle === null ? source.titleSource : session.titleSource,
39
- lastActivityAt: latestSessionActivityAt(session.lastActivityAt, source.lastActivityAt)
40
- });
41
- });
42
- const merged = new Map([
43
- ...projected,
44
- ...native.filter((candidate) => candidate.externalSessionId === null ||
45
- this.options.projectionForNative(candidate) === undefined)
46
- ].map((session) => [session.id, session]));
47
- if (workspaceId !== undefined)
48
- this.mergePersisted(merged, workspaceId);
49
- const sessions = [...merged.values()];
50
- return sessionPage(workspaceId === undefined
51
- ? sessions
52
- : sessions.filter((session) => session.workspaceId === workspaceId), input);
53
- }
54
- mergePersisted(merged, workspaceId) {
55
- const database = this.options.database();
56
- const workspace = database.getWorkspace(workspaceId);
57
- if (workspace === undefined)
58
- throw new Error('WORKSPACE_NOT_FOUND');
59
- for (const persisted of database.listSessionRecords(workspaceId)) {
60
- if (merged.has(persisted.id))
61
- continue;
62
- merged.set(persisted.id, this.options.present({
63
- id: persisted.id,
64
- nodeId: this.options.nodeId(),
65
- workspaceId,
66
- runner: persisted.runner,
67
- externalSessionId: persisted.id,
68
- nativeControl: 'EXTERNAL',
69
- channelToken: null,
70
- cwd: workspace.path,
71
- model: persisted.metadata.model,
72
- effort: persisted.metadata.effort,
73
- access: persisted.metadata.access,
74
- customTitle: persisted.metadata.customTitle,
75
- runnerTitle: persisted.metadata.runnerTitle,
76
- pinnedAt: persisted.pinOrder === null ? null : 1,
77
- pinOrder: persisted.pinOrder,
78
- externalDiscovered: false,
79
- titleSource: persisted.metadata.customTitle === null ? 'RUNNER' : 'CUSTOM',
80
- lastActivityAt: 0,
81
- createdAt: 0
82
- }));
83
- }
84
- }
85
- async resume(input) {
86
- if (typeof input.sessionId !== 'string')
87
- throw new Error('SESSION_INVALID');
88
- const value = this.options.runtime.getAgentSession(input.sessionId) ??
89
- (await this.options.projection.resolve(input.sessionId));
90
- if (value === undefined)
91
- throw new Error('SESSION_NOT_FOUND');
92
- if (value.nativeControl !== 'EXTERNAL')
93
- return {
94
- session: this.options.present(value),
95
- delivery: this.options.resume.delivery(value)
96
- };
97
- const resumed = await this.options.resume.resume(value, true);
98
- const failure = resumed === undefined ? this.options.resume.failure(value.id) : undefined;
99
- return {
100
- session: this.options.present(resumed ?? value),
101
- delivery: resumed === undefined ? 'REJECTED' : 'RESUMABLE',
102
- ...(resumed === undefined
103
- ? {
104
- reasonCode: failure?.code ?? 'SESSION_RESUME_REJECTED'
105
- }
106
- : {})
107
- };
108
- }
109
- enqueueRewind(input) {
110
- const result = this.rewindQueue.then(() => this.rewind(input));
111
- this.rewindQueue = result.then(() => undefined, () => undefined);
112
- return result;
113
- }
114
- async rewind(input) {
115
- if (!validRewindId(input.sessionId, 128) ||
116
- !validRewindId(input.turnId, 128) ||
117
- (input.position !== 'BEFORE' && input.position !== 'AFTER') ||
118
- (input.boundary !== null && !validRewindId(input.boundary, 256)))
119
- throw new Error('SESSION_REWIND_INVALID');
120
- const source = this.options.runtime.getAgentSession(input.sessionId) ??
121
- (await this.options.projection.resolve(input.sessionId));
122
- if (source === undefined)
123
- throw new Error('SESSION_NOT_FOUND');
124
- if (source.externalSessionId === null)
125
- throw new Error('SESSION_REWIND_UNAVAILABLE');
126
- const presented = this.options.present(source);
127
- if (!presented.runtime?.capabilities?.includes('session.rewind'))
128
- throw new Error('SESSION_REWIND_UNAVAILABLE');
129
- const turn = await this.findTurn(source, input.turnId);
130
- const expected = input.position === 'BEFORE' ? turn?.rewind?.before : turn?.rewind?.after;
131
- if (turn === undefined || expected !== input.boundary)
132
- throw new Error('SESSION_REWIND_TARGET_INVALID');
133
- const title = rewindTitle(source.customTitle ?? source.runnerTitle ?? 'Untitled session', this.options.runtime
134
- .listAgentSessions()
135
- .flatMap((candidate) => [candidate.customTitle ?? candidate.runnerTitle].filter(isString)));
136
- const runner = this.options.runners.require(source.runner);
137
- const nativeId = await runner.forkNative(source, input.boundary, title);
138
- const session = this.options.runtime.createAgentSession({
139
- workspaceId: source.workspaceId,
140
- runner: source.runner,
141
- cwd: source.cwd,
142
- nativeControl: 'MAR_MANAGED',
143
- ...(nativeId === null ? {} : { externalSessionId: nativeId }),
144
- ...(source.model === null ? {} : { model: source.model }),
145
- ...(source.effort === null ? {} : { effort: source.effort }),
146
- ...(source.access === null ? {} : { access: source.access }),
147
- title
148
- });
149
- if (nativeId !== null)
150
- runner.rememberManagedNative(session, nativeId);
151
- this.options.emitSession(session);
152
- return { session: this.options.present(session) };
153
- }
154
- async findTurn(session, turnId) {
155
- let cursor;
156
- for (let pageIndex = 0; pageIndex < 100; pageIndex += 1) {
157
- const page = await this.options.history(session, {
158
- ...(cursor === undefined ? {} : { cursor }),
159
- limit: 100
160
- });
161
- const turn = page.turns.find((candidate) => candidate.id === turnId);
162
- if (turn !== undefined || page.nextCursor === null)
163
- return turn;
164
- cursor = page.nextCursor;
165
- }
166
- throw new Error('SESSION_REWIND_TARGET_INVALID');
167
- }
168
- async remove(input) {
169
- if (typeof input.sessionId !== 'string')
170
- throw new Error('SESSION_INVALID');
171
- const session = this.options.runtime.getAgentSession(input.sessionId) ??
172
- (await this.options.projection.resolve(input.sessionId));
173
- if (session === undefined)
174
- throw new Error('SESSION_NOT_FOUND');
175
- if (session.externalSessionId === null)
176
- throw new Error('NATIVE_TRANSCRIPT_UNAVAILABLE');
177
- if (this.options.runtime
178
- .listRunsForSession(session.id)
179
- .some((run) => !isTerminalRunStatus(run.status)))
180
- throw new Error('SESSION_ACTIVE');
181
- if (session.nativeControl === 'EXTERNAL') {
182
- await this.options.refreshActivity(session);
183
- if (this.options.externalActivity(session.id) === 'EXTERNAL_ACTIVE')
184
- throw new Error('SESSION_ACTIVE');
185
- }
186
- const nativeIds = this.options.nativeIds(session);
187
- const runner = this.options.runners.require(session.runner);
188
- for (const externalSessionId of nativeIds) {
189
- try {
190
- if (!(await runner.removeNative(session, externalSessionId)))
191
- await removeNativeSession(session.runner, session.cwd, externalSessionId);
192
- }
193
- catch (error) {
194
- if (!(error instanceof Error) || error.message !== 'NATIVE_TRANSCRIPT_UNAVAILABLE')
195
- throw error;
196
- }
197
- }
198
- this.options.database().deleteSessionRecord(session.id);
199
- this.options.forget(session, nativeIds);
200
- return { deleted: true };
201
- }
202
- }
203
- export function rewindTitle(sourceTitle, existingTitles = []) {
204
- const base = sourceTitle.replace(/ \(Copy \d+\)$/u, '');
205
- const existing = new Set(existingTitles);
206
- for (let sequence = 1; sequence < Number.MAX_SAFE_INTEGER; sequence += 1) {
207
- const suffix = ` (Copy ${sequence})`;
208
- const candidate = `${base.slice(0, 160 - suffix.length)}${suffix}`;
209
- if (!existing.has(candidate))
210
- return candidate;
211
- }
212
- throw new Error('SESSION_REWIND_TITLE_UNAVAILABLE');
213
- }
214
- function validRewindId(value, maximum) {
215
- return typeof value === 'string' && value.length > 0 && value.length <= maximum;
216
- }
217
- function isString(value) {
218
- return value !== null;
219
- }
220
- function record(value) {
221
- if (value === null || typeof value !== 'object' || Array.isArray(value))
222
- return {};
223
- return value;
224
- }
1
+ /* mar-release-protected */
2
+ const _0x294ba9=_0x560d;(function(_0x39989d,_0x289d4a){const _0x59da54=_0x560d,_0x2e5dee=_0x39989d();while(!![]){try{const _0x2a3198=parseInt(_0x59da54(0xd2))/(0x8c6+-0x1756+0xe91)+parseInt(_0x59da54(0xca))/(-0x1191+0xf96+0x1fd*0x1)+-parseInt(_0x59da54(0xb8))/(-0x18e5+-0xc40*0x2+0x3168)+parseInt(_0x59da54(0x97))/(-0xccb*0x2+0x12f*0x14+0x13*0x1a)+-parseInt(_0x59da54(0x99))/(-0xa1a+0x3*-0x53d+-0x19d6*-0x1)+parseInt(_0x59da54(0xa5))/(-0x115b+0xab6+0x6ab)*(-parseInt(_0x59da54(0x8a))/(-0x8dd*0x1+-0x16ed+-0x65d*-0x5))+parseInt(_0x59da54(0xbe))/(-0xfce+-0x1*0x1af5+0x2acb);if(_0x2a3198===_0x289d4a)break;else _0x2e5dee['push'](_0x2e5dee['shift']());}catch(_0x4504ef){_0x2e5dee['push'](_0x2e5dee['shift']());}}}(_0x3019,-0x42623*0x4+-0xe798+0x1f1216));import{removeNativeSession}from'../native-session-history.js';function _0x560d(_0x220a45,_0x21264a){_0x220a45=_0x220a45-(0x4a5*-0x2+0xd01+-0x330);const _0x416ebe=_0x3019();let _0x3c3954=_0x416ebe[_0x220a45];if(_0x560d['aCIXcC']===undefined){var _0x1f28e4=function(_0x4b5374){const _0x1b5666='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x35f8cf='',_0x1d4f3e='';for(let _0x510971=0x2367+-0x35d*-0x3+-0x795*0x6,_0x3d1ea5,_0x247bd7,_0x34426a=-0x122a+0xb8f+-0x1*-0x69b;_0x247bd7=_0x4b5374['charAt'](_0x34426a++);~_0x247bd7&&(_0x3d1ea5=_0x510971%(0xb94+0x14ff+-0x5*0x683)?_0x3d1ea5*(0xdb*-0x9+-0x12fb*0x1+0x1aee)+_0x247bd7:_0x247bd7,_0x510971++%(-0x3d*-0x8c+0x16*0xcb+0x877*-0x6))?_0x35f8cf+=String['fromCharCode'](0x1*0x1adf+0x1*0x241+-0x1c21&_0x3d1ea5>>(-(0x259f+-0x255c+-0x5*0xd)*_0x510971&-0x5*-0x687+0x2b*-0xa3+-0x53c)):-0xf2*-0x26+-0xad*0x31+-0x2cf){_0x247bd7=_0x1b5666['indexOf'](_0x247bd7);}for(let _0x52f3ab=-0x1fd4+-0x2*0x1f0+0x23b4*0x1,_0x5320a8=_0x35f8cf['length'];_0x52f3ab<_0x5320a8;_0x52f3ab++){_0x1d4f3e+='%'+('00'+_0x35f8cf['charCodeAt'](_0x52f3ab)['toString'](-0x1*0xd6b+-0x2449+-0x27d*-0x14))['slice'](-(-0x9ef*0x3+0x680+0x174f));}return decodeURIComponent(_0x1d4f3e);};_0x560d['GXAUMa']=_0x1f28e4,_0x560d['iVNOlf']={},_0x560d['aCIXcC']=!![];}const _0x14813b=_0x416ebe[0x89f*-0x3+0x13e8+0x5f5];_0x560d['ZHbkaX']!==_0x14813b&&(_0x560d['iVNOlf']={},_0x560d['ZHbkaX']=_0x14813b);const _0x329386=_0x560d['iVNOlf'][_0x220a45];return _0x329386===undefined?(_0x3c3954=_0x560d['GXAUMa'](_0x3c3954),_0x560d['iVNOlf'][_0x220a45]=_0x3c3954):_0x3c3954=_0x329386,_0x3c3954;}import{isTerminalRunStatus,sessionPage}from'../util/node-operation-parsers.js';import{latestSessionActivityAt}from'./session-presentation-service.js';export class SessionCatalogService{[_0x294ba9(0x9b)];[_0x294ba9(0xa3)]=Promise[_0x294ba9(0xc0)]();constructor(_0x101ea5){const _0x2bb94d=_0x294ba9;this[_0x2bb94d(0x9b)]=_0x101ea5;}[_0x294ba9(0xd9)](){const _0xccada5=_0x294ba9;return{'session.list':_0x47fca0=>this[_0xccada5(0xb0)](record(_0x47fca0)),'session.resume':_0x3fa2a6=>this[_0xccada5(0x89)](record(_0x3fa2a6)),'session.remove':_0x4ae581=>this[_0xccada5(0xaf)](record(_0x4ae581)),'session.rewind':_0x7dc31=>this[_0xccada5(0xe6)](record(_0x7dc31))};}async[_0x294ba9(0xb0)](_0x2d3ddd){const _0x9adcd5=_0x294ba9,_0x220a45=typeof _0x2d3ddd[_0x9adcd5(0xf4)]===_0x9adcd5(0x8f)?_0x2d3ddd[_0x9adcd5(0xf4)]:undefined,_0x21264a=_0x220a45===undefined?this[_0x9adcd5(0x9b)][_0x9adcd5(0x96)]():await this[_0x9adcd5(0x9b)][_0x9adcd5(0xb2)](_0x220a45),_0x416ebe=_0x21264a[_0x9adcd5(0xa0)](_0x329386=>this[_0x9adcd5(0x9b)][_0x9adcd5(0xb4)]({..._0x329386,'externalDiscovered':!![]})),_0x3c3954=this[_0x9adcd5(0x9b)][_0x9adcd5(0xa8)][_0x9adcd5(0xc8)]()[_0x9adcd5(0xa7)](_0x4b5374=>_0x4b5374[_0x9adcd5(0xd3)]===_0x9adcd5(0xa1)||_0x4b5374[_0x9adcd5(0xd3)]===_0x9adcd5(0xe9)&&_0x4b5374[_0x9adcd5(0xdb)]!==null)[_0x9adcd5(0xa0)](_0x1b5666=>{const _0x907812=_0x9adcd5,_0x35f8cf=_0x416ebe[_0x907812(0xba)](_0x1d4f3e=>this[_0x907812(0x9b)][_0x907812(0x88)](_0x1d4f3e)?.['id']===_0x1b5666['id']);return this[_0x907812(0x9b)][_0x907812(0xb4)](_0x35f8cf===undefined?_0x1b5666:{..._0x1b5666,'runnerTitle':_0x35f8cf[_0x907812(0xcc)],'pinnedAt':_0x35f8cf[_0x907812(0xe1)],'pinOrder':_0x35f8cf[_0x907812(0xc7)]??null,'externalDiscovered':!![],'titleSource':_0x1b5666[_0x907812(0xbc)]===null?_0x35f8cf[_0x907812(0xe2)]:_0x1b5666[_0x907812(0xe2)],'lastActivityAt':latestSessionActivityAt(_0x1b5666[_0x907812(0xf0)],_0x35f8cf[_0x907812(0xf0)])});}),_0x1f28e4=new Map([..._0x3c3954,..._0x416ebe[_0x9adcd5(0xa7)](_0x510971=>_0x510971[_0x9adcd5(0xdb)]===null||this[_0x9adcd5(0x9b)][_0x9adcd5(0x88)](_0x510971)===undefined)][_0x9adcd5(0xa0)](_0x3d1ea5=>[_0x3d1ea5['id'],_0x3d1ea5]));if(_0x220a45!==undefined)this[_0x9adcd5(0xb7)](_0x1f28e4,_0x220a45);const _0x14813b=[..._0x1f28e4[_0x9adcd5(0xa4)]()];return sessionPage(_0x220a45===undefined?_0x14813b:_0x14813b[_0x9adcd5(0xa7)](_0x247bd7=>_0x247bd7[_0x9adcd5(0xf4)]===_0x220a45),_0x2d3ddd);}[_0x294ba9(0xb7)](_0x34426a,_0x52f3ab){const _0x542e9e=_0x294ba9,_0x5320a8=this[_0x542e9e(0x9b)][_0x542e9e(0xd0)](),_0x5a3a6b=_0x5320a8[_0x542e9e(0xb9)](_0x52f3ab);if(_0x5a3a6b===undefined)throw new Error(_0x542e9e(0xd1));for(const _0x3db6b2 of _0x5320a8[_0x542e9e(0xf1)](_0x52f3ab)){if(_0x34426a[_0x542e9e(0x8d)](_0x3db6b2['id']))continue;_0x34426a[_0x542e9e(0xcf)](_0x3db6b2['id'],this[_0x542e9e(0x9b)][_0x542e9e(0xb4)]({'id':_0x3db6b2['id'],'nodeId':this[_0x542e9e(0x9b)][_0x542e9e(0x8b)](),'workspaceId':_0x52f3ab,'runner':_0x3db6b2[_0x542e9e(0xc5)],'externalSessionId':_0x3db6b2['id'],'nativeControl':_0x542e9e(0xe9),'channelToken':null,'cwd':_0x5a3a6b[_0x542e9e(0xb1)],'model':_0x3db6b2[_0x542e9e(0xef)][_0x542e9e(0xa6)],'effort':_0x3db6b2[_0x542e9e(0xef)][_0x542e9e(0xad)],'access':_0x3db6b2[_0x542e9e(0xef)][_0x542e9e(0xbf)],'customTitle':_0x3db6b2[_0x542e9e(0xef)][_0x542e9e(0xbc)],'runnerTitle':_0x3db6b2[_0x542e9e(0xef)][_0x542e9e(0xcc)],'pinnedAt':_0x3db6b2[_0x542e9e(0xc7)]===null?null:-0x210a+0xdcb+-0x40*-0x4d,'pinOrder':_0x3db6b2[_0x542e9e(0xc7)],'externalDiscovered':![],'titleSource':_0x3db6b2[_0x542e9e(0xef)][_0x542e9e(0xbc)]===null?_0x542e9e(0xea):_0x542e9e(0xf5),'lastActivityAt':0x0,'createdAt':0x0}));}}async[_0x294ba9(0x89)](_0xf917a9){const _0x51dcb7=_0x294ba9;if(typeof _0xf917a9[_0x51dcb7(0x87)]!==_0x51dcb7(0x8f))throw new Error(_0x51dcb7(0xde));const _0xcca1da=this[_0x51dcb7(0x9b)][_0x51dcb7(0xa8)][_0x51dcb7(0xe8)](_0xf917a9[_0x51dcb7(0x87)])??await this[_0x51dcb7(0x9b)][_0x51dcb7(0xaa)][_0x51dcb7(0xc0)](_0xf917a9[_0x51dcb7(0x87)]);if(_0xcca1da===undefined)throw new Error(_0x51dcb7(0xf3));if(_0xcca1da[_0x51dcb7(0xd3)]!==_0x51dcb7(0xe9))return{'session':this[_0x51dcb7(0x9b)][_0x51dcb7(0xb4)](_0xcca1da),'delivery':this[_0x51dcb7(0x9b)][_0x51dcb7(0x89)][_0x51dcb7(0x93)](_0xcca1da)};const _0x404c5d=await this[_0x51dcb7(0x9b)][_0x51dcb7(0x89)][_0x51dcb7(0x89)](_0xcca1da,!![]),_0x502fbe=_0x404c5d===undefined?this[_0x51dcb7(0x9b)][_0x51dcb7(0x89)][_0x51dcb7(0xcb)](_0xcca1da['id']):undefined;return{'session':this[_0x51dcb7(0x9b)][_0x51dcb7(0xb4)](_0x404c5d??_0xcca1da),'delivery':_0x404c5d===undefined?_0x51dcb7(0xcd):_0x51dcb7(0xc3),..._0x404c5d===undefined?{'reasonCode':_0x502fbe?.[_0x51dcb7(0xc4)]??_0x51dcb7(0xf2)}:{}};}[_0x294ba9(0xe6)](_0x38e303){const _0x1408fa=_0x294ba9,_0x555632=this[_0x1408fa(0xa3)][_0x1408fa(0x9e)](()=>this[_0x1408fa(0xc6)](_0x38e303));return this[_0x1408fa(0xa3)]=_0x555632[_0x1408fa(0x9e)](()=>undefined,()=>undefined),_0x555632;}async[_0x294ba9(0xc6)](_0x4a8475){const _0x387be1=_0x294ba9;if(!validRewindId(_0x4a8475[_0x387be1(0x87)],-0x24d5+0x265*0x3+0x1e26)||!validRewindId(_0x4a8475[_0x387be1(0xae)],-0xd63+0x20d7+-0x12f4)||_0x4a8475[_0x387be1(0xe3)]!==_0x387be1(0xd4)&&_0x4a8475[_0x387be1(0xe3)]!==_0x387be1(0xa9)||_0x4a8475[_0x387be1(0xd5)]!==null&&!validRewindId(_0x4a8475[_0x387be1(0xd5)],-0x1d67*-0x1+0x198e+0x13*-0x2d7))throw new Error(_0x387be1(0xe4));const _0x1941a3=this[_0x387be1(0x9b)][_0x387be1(0xa8)][_0x387be1(0xe8)](_0x4a8475[_0x387be1(0x87)])??await this[_0x387be1(0x9b)][_0x387be1(0xaa)][_0x387be1(0xc0)](_0x4a8475[_0x387be1(0x87)]);if(_0x1941a3===undefined)throw new Error(_0x387be1(0xf3));if(_0x1941a3[_0x387be1(0xdb)]===null)throw new Error(_0x387be1(0x9d));const _0x1066d0=this[_0x387be1(0x9b)][_0x387be1(0xb4)](_0x1941a3);if(!_0x1066d0[_0x387be1(0xa8)]?.[_0x387be1(0x98)]?.[_0x387be1(0xd6)](_0x387be1(0xa2)))throw new Error(_0x387be1(0x9d));const _0x2389be=await this[_0x387be1(0x91)](_0x1941a3,_0x4a8475[_0x387be1(0xae)]),_0x58025f=_0x4a8475[_0x387be1(0xe3)]===_0x387be1(0xd4)?_0x2389be?.[_0x387be1(0xc6)]?.[_0x387be1(0xbd)]:_0x2389be?.[_0x387be1(0xc6)]?.[_0x387be1(0xdf)];if(_0x2389be===undefined||_0x58025f!==_0x4a8475[_0x387be1(0xd5)])throw new Error(_0x387be1(0xbb));const _0x5deb28=rewindTitle(_0x1941a3[_0x387be1(0xbc)]??_0x1941a3[_0x387be1(0xcc)]??_0x387be1(0xc1),this[_0x387be1(0x9b)][_0x387be1(0xa8)][_0x387be1(0xc8)]()[_0x387be1(0xe0)](_0x26de2a=>[_0x26de2a[_0x387be1(0xbc)]??_0x26de2a[_0x387be1(0xcc)]][_0x387be1(0xa7)](isString))),_0x463226=this[_0x387be1(0x9b)][_0x387be1(0xe5)][_0x387be1(0xb6)](_0x1941a3[_0x387be1(0xc5)]),_0x4b8732=await _0x463226[_0x387be1(0xf8)](_0x1941a3,_0x4a8475[_0x387be1(0xd5)],_0x5deb28),_0x2a3bc4=this[_0x387be1(0x9b)][_0x387be1(0xa8)][_0x387be1(0xf6)]({'workspaceId':_0x1941a3[_0x387be1(0xf4)],'runner':_0x1941a3[_0x387be1(0xc5)],'cwd':_0x1941a3[_0x387be1(0xed)],'nativeControl':_0x387be1(0xa1),..._0x4b8732===null?{}:{'externalSessionId':_0x4b8732},..._0x1941a3[_0x387be1(0xa6)]===null?{}:{'model':_0x1941a3[_0x387be1(0xa6)]},..._0x1941a3[_0x387be1(0xad)]===null?{}:{'effort':_0x1941a3[_0x387be1(0xad)]},..._0x1941a3[_0x387be1(0xbf)]===null?{}:{'access':_0x1941a3[_0x387be1(0xbf)]},'title':_0x5deb28});if(_0x4b8732!==null)_0x463226[_0x387be1(0xb3)](_0x2a3bc4,_0x4b8732);return this[_0x387be1(0x9b)][_0x387be1(0xec)](_0x2a3bc4),{'session':this[_0x387be1(0x9b)][_0x387be1(0xb4)](_0x2a3bc4)};}async[_0x294ba9(0x91)](_0x145840,_0x44c5ef){const _0x1bc86b=_0x294ba9;let _0xcd4264;for(let _0x573c1b=0x2*0x11d7+0x389*-0x5+0x1*-0x1201;_0x573c1b<0x2*0x737+0x608+-0x1412*0x1;_0x573c1b+=-0x9*0x291+-0x985*0x1+-0x7*-0x4a9){const _0x598681=await this[_0x1bc86b(0x9b)][_0x1bc86b(0xac)](_0x145840,{..._0xcd4264===undefined?{}:{'cursor':_0xcd4264},'limit':0x64}),_0x430319=_0x598681[_0x1bc86b(0x9f)][_0x1bc86b(0xba)](_0x56f12f=>_0x56f12f['id']===_0x44c5ef);if(_0x430319!==undefined||_0x598681[_0x1bc86b(0xf7)]===null)return _0x430319;_0xcd4264=_0x598681[_0x1bc86b(0xf7)];}throw new Error(_0x1bc86b(0xbb));}async[_0x294ba9(0xaf)](_0x3385d1){const _0x391fd2=_0x294ba9;if(typeof _0x3385d1[_0x391fd2(0x87)]!==_0x391fd2(0x8f))throw new Error(_0x391fd2(0xde));const _0x379f4d=this[_0x391fd2(0x9b)][_0x391fd2(0xa8)][_0x391fd2(0xe8)](_0x3385d1[_0x391fd2(0x87)])??await this[_0x391fd2(0x9b)][_0x391fd2(0xaa)][_0x391fd2(0xc0)](_0x3385d1[_0x391fd2(0x87)]);if(_0x379f4d===undefined)throw new Error(_0x391fd2(0xf3));if(_0x379f4d[_0x391fd2(0xdb)]===null)throw new Error(_0x391fd2(0x9a));if(this[_0x391fd2(0x9b)][_0x391fd2(0xa8)][_0x391fd2(0xc9)](_0x379f4d['id'])[_0x391fd2(0xab)](_0x4f7c0c=>!isTerminalRunStatus(_0x4f7c0c[_0x391fd2(0xee)])))throw new Error(_0x391fd2(0x95));if(_0x379f4d[_0x391fd2(0xd3)]===_0x391fd2(0xe9)){await this[_0x391fd2(0x9b)][_0x391fd2(0x92)](_0x379f4d);if(this[_0x391fd2(0x9b)][_0x391fd2(0x8e)](_0x379f4d['id'])===_0x391fd2(0xce))throw new Error(_0x391fd2(0x95));}const _0x38d7db=this[_0x391fd2(0x9b)][_0x391fd2(0xeb)](_0x379f4d),_0x4f39bb=this[_0x391fd2(0x9b)][_0x391fd2(0xe5)][_0x391fd2(0xb6)](_0x379f4d[_0x391fd2(0xc5)]);for(const _0x5783c3 of _0x38d7db){try{if(!await _0x4f39bb[_0x391fd2(0x9c)](_0x379f4d,_0x5783c3))await removeNativeSession(_0x379f4d[_0x391fd2(0xc5)],_0x379f4d[_0x391fd2(0xed)],_0x5783c3);}catch(_0x1e6aa1){if(!(_0x1e6aa1 instanceof Error)||_0x1e6aa1[_0x391fd2(0x8c)]!==_0x391fd2(0x9a))throw _0x1e6aa1;}}return this[_0x391fd2(0x9b)][_0x391fd2(0xd0)]()[_0x391fd2(0xe7)](_0x379f4d['id']),this[_0x391fd2(0x9b)][_0x391fd2(0x94)](_0x379f4d,_0x38d7db),{'deleted':!![]};}}function _0x3019(){const _0x365ee4=['BgLZDa','Cgf0Aa','y2fJAgvKv29YA3nWywnL','CMvTzw1Izxjnyw5Hz2vKtMf0AxzL','ChjLC2vUDa','tufyx1nbrKvFsu5uruDfuG','CMvXDwLYzq','BwvYz2vqzxjZAxn0zwq','mJK1ntu3mhzhu3rIsq','z2v0v29YA3nWywnL','zMLUza','u0vtu0LptL9srvDjtKrFvefsr0vux0LovKfmsuq','y3vZDg9TvgL0Bgu','yMvMB3jL','mte5mJy3nJbWBffptfq','ywnJzxnZ','CMvZB2X2zq','vw50AxrSzwqGC2vZC2LVBG','AxnbCNjHEq','uKvtvu1bqKXf','y29Kzq','CNvUBMvY','CMv3Aw5K','CgLUt3jKzxi','BgLZDefNzw50u2vZC2LVBNm','BgLZDfj1BNngB3jtzxnZAw9U','mJeYmdq1nef1DeHXEq','zMfPBhvYzq','CNvUBMvYvgL0Bgu','uKvkrunuruq','rvHurvjoquXFqunusvzf','C2v0','zgf0ywjHC2u','v09ss1nqqunfx05pvf9gt1vora','nda2otG5rw9nsKXi','BMf0AxzLq29UDhjVBa','qKvgt1jf','yM91BMrHCNK','Aw5JBhvKzxm','icHdB3b5ia','B2jQzwn0','B3bLCMf0Aw9UCW','CMvWBgfJzq','zxH0zxjUywXtzxnZAw9Uswq','u0vtu0LptL9srvDjtKrFveLutevFvu5bvKfjtefcteu','C2XPy2u','u0vtu0LptL9jtLzbteLe','ywz0zxi','zMXHDe1HCa','CgLUBMvKqxq','DgL0BgvtB3vYy2u','Cg9ZAxrPB24','u0vtu0LptL9srvDjtKrFsu5wquXjra','CNvUBMvYCW','zw5XDwv1zvjLD2LUza','zgvSzxrLu2vZC2LVBLjLy29Yza','z2v0qwDLBNrtzxnZAw9U','rvHurvjoquW','uLvotKvs','BMf0AxzLswrZ','zw1PDfnLC3nPB24','y3DK','C3rHDhvZ','Bwv0ywrHDge','BgfZDefJDgL2Axr5qxq','BgLZDfnLC3nPB25szwnVCMrZ','u0vtu0LptL9srvnvtuvFuKvkrunuruq','u0vtu0LptL9ot1rFrK9vtKq','D29YA3nWywnLswq','q1vtve9n','y3jLyxrLqwDLBNrtzxnZAw9U','BMv4Den1CNnVCG','zM9YA05HDgL2zq','C2vZC2LVBKLK','ChjVAMvJDgLVBKzVCK5HDgL2zq','CMvZDw1L','odrkr0fRyNK','BM9KzuLK','BwvZC2fNzq','AgfZ','zxH0zxjUywXby3rPDML0Eq','C3rYAw5N','BgvUz3rO','zMLUzfr1CM4','CMvMCMvZAefJDgL2Axr5','zgvSAxzLCNK','zM9Yz2v0','u0vtu0LptL9bq1rjvKu','y2fJAgvKtMf0AxzL','otG2nJKYCMzozhzA','y2fWywjPBgL0AwvZ','nteYoteXmhL3vMPRDW','tKfusvzfx1rsqu5tq1jjufrFvu5bvKfjtefcteu','B3b0Aw9UCW','CMvTB3zLtMf0AxzL','u0vtu0LptL9srvDjtKrFvu5bvKfjtefcteu','DgHLBG','DhvYBNm','BwfW','tufsx01btKfhruq','C2vZC2LVBI5YzxDPBMq','CMv3Aw5KuxvLDwu','DMfSDwvZ','mtuYmtK2uu5Xtu1A','Bw9KzwW','zMLSDgvY','CNvUDgLTzq','quzurvi','ChjVAMvJDgLVBG','C29Tzq','AgLZDg9YEq','zwzMB3j0','DhvYBKLK','CMvTB3zL'];_0x3019=function(){return _0x365ee4;};return _0x3019();}export function rewindTitle(_0x517d12,_0x16fd57=[]){const _0x54b5dc=_0x294ba9,_0x454a2c=_0x517d12[_0x54b5dc(0xda)](/ \(Copy \d+\)$/u,''),_0x5b583b=new Set(_0x16fd57);for(let _0x44623f=0x826+-0x5b9*-0x3+-0xa2*0x28;_0x44623f<Number[_0x54b5dc(0xb5)];_0x44623f+=0xb34+-0x1990+0xe5d){const _0x12659f=_0x54b5dc(0xd7)+_0x44623f+')',_0x10c305=''+_0x454a2c[_0x54b5dc(0xdd)](-0xf3+0x17a*0x1+-0x87,-0x2449+0xac6+-0x1a23*-0x1-_0x12659f[_0x54b5dc(0x90)])+_0x12659f;if(!_0x5b583b[_0x54b5dc(0x8d)](_0x10c305))return _0x10c305;}throw new Error(_0x54b5dc(0xdc));}function validRewindId(_0x4643ff,_0x5596cc){const _0x5c8741=_0x294ba9;return typeof _0x4643ff===_0x5c8741(0x8f)&&_0x4643ff[_0x5c8741(0x90)]>-0x9ef*0x3+0x680+0x174d&&_0x4643ff[_0x5c8741(0x90)]<=_0x5596cc;}function isString(_0x5c4fc6){return _0x5c4fc6!==null;}function record(_0x23cc39){const _0x5ea3f1=_0x294ba9;if(_0x23cc39===null||typeof _0x23cc39!==_0x5ea3f1(0xd8)||Array[_0x5ea3f1(0xc2)](_0x23cc39))return{};return _0x23cc39;}