@myagentroam/node 0.9.9 → 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.
- package/dist/capabilities.js +2 -92
- package/dist/claude-agent-sdk.js +2 -330
- package/dist/claude-channel.js +2 -44
- package/dist/codex-app-server.js +2 -503
- package/dist/config.js +2 -56
- package/dist/connector/node-connector-options.js +2 -1
- package/dist/connector/node-operation-router.js +2 -22
- package/dist/connector.js +2 -845
- package/dist/control-outbound-scheduler.js +2 -154
- package/dist/database.js +2 -1418
- package/dist/event-buffer.js +2 -19
- package/dist/fake-runner.js +2 -129
- package/dist/health.js +2 -3
- package/dist/main.js +2 -54
- package/dist/migrations/v001.js +3 -144
- package/dist/migrations/v002.js +2 -143
- package/dist/migrations/v003.js +2 -44
- package/dist/migrations/v004.js +34 -30
- package/dist/native-jsonl-reader.js +2 -186
- package/dist/native-session-history.js +2 -1119
- package/dist/opencode-runtime.js +2 -80
- package/dist/opencode-server.js +2 -263
- package/dist/operational.js +2 -122
- package/dist/process-tree.js +2 -18
- package/dist/rotating-log.js +2 -67
- package/dist/runner/abstract-runner.js +2 -232
- package/dist/runner/claude/managed-run-controller.js +2 -345
- package/dist/runner/claude-code-runner.js +2 -303
- package/dist/runner/codex/composer-image-markers.js +2 -0
- package/dist/runner/codex/conversation-parser.js +2 -861
- package/dist/runner/codex/managed-run-controller.js +2 -460
- package/dist/runner/codex-runner.js +2 -628
- package/dist/runner/fake-test-runner.js +2 -47
- package/dist/runner/opencode/conversation-parser.js +2 -221
- package/dist/runner/opencode/managed-run-controller.js +2 -537
- package/dist/runner/opencode-runner.js +2 -448
- package/dist/runner/runner-registry.js +2 -90
- package/dist/runner-command-engine.js +2 -70
- package/dist/runner-profiles.js +2 -215
- package/dist/runner-usage.js +2 -190
- package/dist/runtime-command-detector.js +2 -73
- package/dist/runtime-state.js +2 -982
- package/dist/service/attachment-domain-state.js +2 -7
- package/dist/service/conversation-history-service.js +2 -457
- package/dist/service/conversation-segment-service.js +2 -162
- package/dist/service/external-session-resume-service.js +2 -118
- package/dist/service/fake-managed-run-service.js +2 -60
- package/dist/service/managed-runner-session-service.js +2 -35
- package/dist/service/mcp-installation-verifier.js +2 -87
- package/dist/service/mcp-node-operation-service.js +2 -90
- package/dist/service/mcp-package-installer.js +2 -136
- package/dist/service/native-session-projection-service.js +2 -280
- package/dist/service/native-session-watch-service.js +2 -383
- package/dist/service/node-connection-lifecycle-service.js +2 -84
- package/dist/service/node-control-channel.js +2 -85
- package/dist/service/node-control-message-service.js +2 -107
- package/dist/service/node-request-service.js +2 -52
- package/dist/service/node-run-event-bridge.js +2 -83
- package/dist/service/node-terminal-channel.js +2 -182
- package/dist/service/node-upgrade-coordinator.js +2 -137
- package/dist/service/node-workspace-coordinator.js +2 -70
- package/dist/service/recent-run-projection-service.js +2 -78
- package/dist/service/run-attachment-service.js +2 -194
- package/dist/service/run-domain-state.js +2 -4
- package/dist/service/run-event-service.js +2 -193
- package/dist/service/run-workbench-service.js +2 -104
- package/dist/service/runner-channel-message-service.js +2 -20
- package/dist/service/runner-interaction-service.js +2 -243
- package/dist/service/runner-service.js +2 -71
- package/dist/service/session-catalog-service.js +2 -224
- package/dist/service/session-command-service.js +2 -76
- package/dist/service/session-context-service.js +2 -101
- package/dist/service/session-domain-state.js +2 -9
- package/dist/service/session-identity-service.js +2 -86
- package/dist/service/session-lifecycle-service.js +2 -240
- package/dist/service/session-message-service.js +2 -173
- package/dist/service/session-presentation-service.js +2 -43
- package/dist/service/session-query-service.js +2 -82
- package/dist/service/skill-directory-service.js +2 -238
- package/dist/service/skill-install-service.js +2 -434
- package/dist/service/skill-node-operation-service.js +2 -206
- package/dist/service/terminal-relay-state.js +2 -3
- package/dist/service/terminal-service.js +2 -52
- package/dist/service/workbench-event-service.js +2 -19
- package/dist/service/workbench-manifest-service.js +2 -69
- package/dist/service/workspace-change-service.js +2 -86
- package/dist/service/workspace-content-search-service.js +2 -477
- package/dist/service/workspace-domain-state.js +2 -41
- package/dist/service/workspace-file-service.js +2 -122
- package/dist/service/workspace-git-exclude-service.js +2 -119
- package/dist/service/workspace-queue-workbench-service.js +2 -304
- package/dist/service/workspace-service.js +2 -69
- package/dist/service/workspace-session-service.js +2 -139
- package/dist/service/workspace-upload-service.js +2 -262
- package/dist/service/workspace-watch-service.js +2 -146
- package/dist/service/workspace-workbench-service.js +2 -405
- package/dist/service.js +2 -38
- package/dist/storage.js +2 -32
- package/dist/supervisor.js +2 -136
- package/dist/terminal.js +2 -416
- package/dist/util/node-operation-parsers.js +2 -382
- package/dist/util/personal-instructions.js +2 -31
- package/dist/util/runner-error.js +2 -52
- package/dist/util/runner-native-session-parsers.js +2 -490
- package/dist/util/safe-error.js +2 -5
- package/dist/util/secret-environment.js +2 -25
- package/dist/workspace.js +2 -1519
- package/package.json +3 -3
- package/dist/capabilities.d.ts +0 -12
- package/dist/claude-agent-sdk.d.ts +0 -92
- package/dist/claude-channel.d.ts +0 -28
- package/dist/codex-app-server.d.ts +0 -133
- package/dist/config.d.ts +0 -18
- package/dist/connector/node-connector-options.d.ts +0 -27
- package/dist/connector/node-operation-router.d.ts +0 -9
- package/dist/connector.d.ts +0 -94
- package/dist/control-outbound-scheduler.d.ts +0 -29
- package/dist/database.d.ts +0 -305
- package/dist/event-buffer.d.ts +0 -9
- package/dist/fake-runner.d.ts +0 -42
- package/dist/health.d.ts +0 -4
- package/dist/main.d.ts +0 -2
- package/dist/migrations/v001.d.ts +0 -3
- package/dist/migrations/v002.d.ts +0 -4
- package/dist/migrations/v003.d.ts +0 -4
- package/dist/migrations/v004.d.ts +0 -4
- package/dist/native-jsonl-reader.d.ts +0 -35
- package/dist/native-session-history.d.ts +0 -126
- package/dist/opencode-runtime.d.ts +0 -33
- package/dist/opencode-server.d.ts +0 -49
- package/dist/operational.d.ts +0 -39
- package/dist/process-tree.d.ts +0 -9
- package/dist/rotating-log.d.ts +0 -17
- package/dist/runner/abstract-runner.d.ts +0 -172
- package/dist/runner/claude/managed-run-controller.d.ts +0 -51
- package/dist/runner/claude-code-runner.d.ts +0 -72
- package/dist/runner/codex/conversation-parser.d.ts +0 -59
- package/dist/runner/codex/managed-run-controller.d.ts +0 -90
- package/dist/runner/codex-runner.d.ts +0 -103
- package/dist/runner/fake-test-runner.d.ts +0 -26
- package/dist/runner/opencode/conversation-parser.d.ts +0 -31
- package/dist/runner/opencode/managed-run-controller.d.ts +0 -82
- package/dist/runner/opencode-runner.d.ts +0 -71
- package/dist/runner/runner-registry.d.ts +0 -19
- package/dist/runner-command-engine.d.ts +0 -28
- package/dist/runner-profiles.d.ts +0 -15
- package/dist/runner-usage.d.ts +0 -33
- package/dist/runtime-command-detector.d.ts +0 -3
- package/dist/runtime-state.d.ts +0 -171
- package/dist/service/attachment-domain-state.d.ts +0 -7
- package/dist/service/conversation-history-service.d.ts +0 -43
- package/dist/service/conversation-segment-service.d.ts +0 -20
- package/dist/service/external-session-resume-service.d.ts +0 -34
- package/dist/service/fake-managed-run-service.d.ts +0 -28
- package/dist/service/managed-runner-session-service.d.ts +0 -12
- package/dist/service/mcp-installation-verifier.d.ts +0 -9
- package/dist/service/mcp-node-operation-service.d.ts +0 -11
- package/dist/service/mcp-package-installer.d.ts +0 -8
- package/dist/service/native-session-projection-service.d.ts +0 -52
- package/dist/service/native-session-watch-service.d.ts +0 -62
- package/dist/service/node-connection-lifecycle-service.d.ts +0 -36
- package/dist/service/node-control-channel.d.ts +0 -32
- package/dist/service/node-control-message-service.d.ts +0 -27
- package/dist/service/node-request-service.d.ts +0 -14
- package/dist/service/node-run-event-bridge.d.ts +0 -40
- package/dist/service/node-terminal-channel.d.ts +0 -29
- package/dist/service/node-upgrade-coordinator.d.ts +0 -29
- package/dist/service/node-workspace-coordinator.d.ts +0 -29
- package/dist/service/recent-run-projection-service.d.ts +0 -14
- package/dist/service/run-attachment-service.d.ts +0 -38
- package/dist/service/run-domain-state.d.ts +0 -4
- package/dist/service/run-event-service.d.ts +0 -33
- package/dist/service/run-workbench-service.d.ts +0 -25
- package/dist/service/runner-channel-message-service.d.ts +0 -13
- package/dist/service/runner-interaction-service.d.ts +0 -39
- package/dist/service/runner-service.d.ts +0 -46
- package/dist/service/session-catalog-service.d.ts +0 -45
- package/dist/service/session-command-service.d.ts +0 -24
- package/dist/service/session-context-service.d.ts +0 -35
- package/dist/service/session-domain-state.d.ts +0 -9
- package/dist/service/session-identity-service.d.ts +0 -24
- package/dist/service/session-lifecycle-service.d.ts +0 -31
- package/dist/service/session-message-service.d.ts +0 -33
- package/dist/service/session-presentation-service.d.ts +0 -34
- package/dist/service/session-query-service.d.ts +0 -35
- package/dist/service/skill-directory-service.d.ts +0 -20
- package/dist/service/skill-install-service.d.ts +0 -21
- package/dist/service/skill-node-operation-service.d.ts +0 -44
- package/dist/service/terminal-relay-state.d.ts +0 -6
- package/dist/service/terminal-service.d.ts +0 -12
- package/dist/service/workbench-event-service.d.ts +0 -9
- package/dist/service/workbench-manifest-service.d.ts +0 -90
- package/dist/service/workspace-change-service.d.ts +0 -9
- package/dist/service/workspace-content-search-service.d.ts +0 -14
- package/dist/service/workspace-domain-state.d.ts +0 -79
- package/dist/service/workspace-file-service.d.ts +0 -18
- package/dist/service/workspace-git-exclude-service.d.ts +0 -4
- package/dist/service/workspace-queue-workbench-service.d.ts +0 -86
- package/dist/service/workspace-service.d.ts +0 -15
- package/dist/service/workspace-session-service.d.ts +0 -23
- package/dist/service/workspace-upload-service.d.ts +0 -39
- package/dist/service/workspace-watch-service.d.ts +0 -23
- package/dist/service/workspace-workbench-service.d.ts +0 -58
- package/dist/service.d.ts +0 -4
- package/dist/storage.d.ts +0 -2
- package/dist/supervisor.d.ts +0 -1
- package/dist/terminal.d.ts +0 -133
- package/dist/util/node-operation-parsers.d.ts +0 -92
- package/dist/util/personal-instructions.d.ts +0 -2
- package/dist/util/runner-error.d.ts +0 -6
- package/dist/util/runner-native-session-parsers.d.ts +0 -74
- package/dist/util/safe-error.d.ts +0 -2
- package/dist/util/secret-environment.d.ts +0 -1
- package/dist/workspace.d.ts +0 -217
|
@@ -1,243 +1,2 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
2
|
-
|
|
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
|
-
|
|
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;}
|