@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.
- 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 -841
- 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 -973
- 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 -83
- 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 -0
- 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 -93
- 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 -169
- 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 -35
- 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/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,537 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { runnerErrorProjection } from '../../util/runner-error.js';
|
|
3
|
-
import { boundedConversationItemId, compactRunnerText, compactRunnerValue } from '../codex/conversation-parser.js';
|
|
4
|
-
import { openCodePatchToolPayload, openCodeQuestions } from './conversation-parser.js';
|
|
5
|
-
export class OpenCodeManagedRunController {
|
|
6
|
-
runner;
|
|
7
|
-
host;
|
|
8
|
-
interactionTimeoutMs;
|
|
9
|
-
permissions = new Map();
|
|
10
|
-
questions = new Map();
|
|
11
|
-
startingCwds = new Map();
|
|
12
|
-
promptAdmitted = new Set();
|
|
13
|
-
pendingIdle = new Set();
|
|
14
|
-
startingClients = new Map();
|
|
15
|
-
constructor(runner, host, interactionTimeoutMs = 10 * 60_000) {
|
|
16
|
-
this.runner = runner;
|
|
17
|
-
this.host = host;
|
|
18
|
-
this.interactionTimeoutMs = interactionTimeoutMs;
|
|
19
|
-
}
|
|
20
|
-
async executeCommand(session, command, context) {
|
|
21
|
-
if (command.id === 'compact')
|
|
22
|
-
return this.compact(session, context.secretEnvironment);
|
|
23
|
-
if (command.id !== 'plan')
|
|
24
|
-
throw new Error('RUNNER_COMMAND_UNAVAILABLE');
|
|
25
|
-
const current = this.host.commandState(session.id, 'plan');
|
|
26
|
-
if (current?.active)
|
|
27
|
-
this.host.clearCommandState(session.id, 'plan');
|
|
28
|
-
else
|
|
29
|
-
this.host.setCommandState(session.id, {
|
|
30
|
-
commandId: 'plan',
|
|
31
|
-
active: true,
|
|
32
|
-
label: 'Plan Mode',
|
|
33
|
-
detail: 'Subsequent messages use the OpenCode Plan Agent for read-only analysis.',
|
|
34
|
-
closable: true,
|
|
35
|
-
closeInput: '/plan',
|
|
36
|
-
continuation: { label: 'Implement', prompt: 'Implement the plan above.' }
|
|
37
|
-
});
|
|
38
|
-
return { command: command.id, states: this.host.commandStates(session.id) };
|
|
39
|
-
}
|
|
40
|
-
compact(session, environment) {
|
|
41
|
-
if (session.externalSessionId === null ||
|
|
42
|
-
session.model === null ||
|
|
43
|
-
session.nativeControl !== 'MAR_MANAGED' ||
|
|
44
|
-
this.host.hasActiveSessionLease(session.id))
|
|
45
|
-
throw new Error('RUNNER_COMMAND_UNAVAILABLE');
|
|
46
|
-
const runId = crypto.randomUUID();
|
|
47
|
-
const client = this.runner.managedClient(environment);
|
|
48
|
-
this.host.adopt({
|
|
49
|
-
runId,
|
|
50
|
-
sessionId: session.id,
|
|
51
|
-
runner: 'opencode',
|
|
52
|
-
cwd: session.cwd,
|
|
53
|
-
externalSessionId: session.externalSessionId
|
|
54
|
-
});
|
|
55
|
-
this.host.active.add(runId);
|
|
56
|
-
this.runner.execution.set(runId, {
|
|
57
|
-
runId,
|
|
58
|
-
sessionId: session.id,
|
|
59
|
-
nativeSessionId: session.externalSessionId,
|
|
60
|
-
cwd: session.cwd,
|
|
61
|
-
client,
|
|
62
|
-
abort: new AbortController(),
|
|
63
|
-
access: session.access ?? 'default',
|
|
64
|
-
agent: 'build'
|
|
65
|
-
});
|
|
66
|
-
this.host.emit(runId, 'run.started', { command: 'compact' }, 'STARTING');
|
|
67
|
-
void this.runCompact(runId, session.model);
|
|
68
|
-
return {
|
|
69
|
-
command: 'compact',
|
|
70
|
-
run: this.host.run(runId),
|
|
71
|
-
states: this.host.commandStates(session.id)
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
async runCompact(runId, model) {
|
|
75
|
-
const execution = this.runner.execution.get(runId);
|
|
76
|
-
if (execution === undefined)
|
|
77
|
-
return;
|
|
78
|
-
this.host.emit(runId, 'run.running', { command: 'compact' }, 'RUNNING');
|
|
79
|
-
try {
|
|
80
|
-
await execution.client.summarize(execution.cwd, execution.nativeSessionId, model);
|
|
81
|
-
this.finish(runId, 'SUCCEEDED', 'run.completed', { status: 'SUCCEEDED' });
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
this.finish(runId, 'FAILED', 'run.failed', error, 'OPENCODE_COMPACT_FAILED');
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
start(envelope) {
|
|
88
|
-
const payload = envelope.payload;
|
|
89
|
-
if (payload.runner !== 'opencode' ||
|
|
90
|
-
typeof payload.runId !== 'string' ||
|
|
91
|
-
typeof payload.sessionId !== 'string' ||
|
|
92
|
-
typeof payload.input !== 'string' ||
|
|
93
|
-
typeof payload.cwd !== 'string' ||
|
|
94
|
-
typeof payload.model !== 'string' ||
|
|
95
|
-
this.host.intercepted() ||
|
|
96
|
-
this.host.active.has(payload.runId))
|
|
97
|
-
return;
|
|
98
|
-
let environment;
|
|
99
|
-
let mcp;
|
|
100
|
-
let attachments;
|
|
101
|
-
try {
|
|
102
|
-
environment = parseSecretEnvironment(payload.secretEnvironment);
|
|
103
|
-
mcp = this.runner.mcpConfiguration(payload.mcpInstallations, environment);
|
|
104
|
-
attachments = this.host.parseAttachments(payload.attachments);
|
|
105
|
-
}
|
|
106
|
-
catch (error) {
|
|
107
|
-
const projected = runnerErrorProjection(error, 'RUNNER_INPUT_INVALID');
|
|
108
|
-
this.host.emitItem(payload.runId, {
|
|
109
|
-
itemId: boundedConversationItemId('runner-error', payload.runId),
|
|
110
|
-
kind: 'error',
|
|
111
|
-
status: 'FAILED',
|
|
112
|
-
payload: { ...projected, recoverable: true, retryAfterMs: null }
|
|
113
|
-
});
|
|
114
|
-
this.host.emit(payload.runId, 'run.rejected', projected, 'FAILED');
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
void this.run({
|
|
118
|
-
runId: payload.runId,
|
|
119
|
-
sessionId: payload.sessionId,
|
|
120
|
-
input: payload.input,
|
|
121
|
-
cwd: payload.cwd,
|
|
122
|
-
model: payload.model,
|
|
123
|
-
effort: typeof payload.effort === 'string' ? payload.effort : '',
|
|
124
|
-
...(typeof payload.externalSessionId === 'string'
|
|
125
|
-
? { externalSessionId: payload.externalSessionId }
|
|
126
|
-
: {}),
|
|
127
|
-
environment,
|
|
128
|
-
attachments,
|
|
129
|
-
access: typeof payload.access === 'string' ? payload.access : 'default',
|
|
130
|
-
agent: payload.collaborationMode === 'plan' ? 'plan' : 'build',
|
|
131
|
-
...(typeof payload.personalInstructions === 'string'
|
|
132
|
-
? { personalInstructions: payload.personalInstructions }
|
|
133
|
-
: {}),
|
|
134
|
-
mcp
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
cancel(runId, intent) {
|
|
138
|
-
const execution = this.runner.execution.get(runId);
|
|
139
|
-
if (execution === undefined)
|
|
140
|
-
return false;
|
|
141
|
-
void execution.client.abort(execution.cwd, execution.nativeSessionId).finally(() => {
|
|
142
|
-
this.finish(runId, intent === 'INTERRUPT' ? 'INTERRUPTED' : 'CANCELLED', 'run.completed', {
|
|
143
|
-
status: intent === 'INTERRUPT' ? 'INTERRUPTED' : 'CANCELLED'
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
return true;
|
|
147
|
-
}
|
|
148
|
-
decideApproval(input) {
|
|
149
|
-
const pending = this.permissions.get(input.approvalId);
|
|
150
|
-
if (pending === undefined || pending.runId !== input.runId)
|
|
151
|
-
return false;
|
|
152
|
-
clearTimeout(pending.timer);
|
|
153
|
-
this.permissions.delete(input.approvalId);
|
|
154
|
-
void pending.client.replyPermission(pending.cwd, pending.requestId, input.decision);
|
|
155
|
-
return true;
|
|
156
|
-
}
|
|
157
|
-
respondUserInput(runId, requestId, answers) {
|
|
158
|
-
const pending = this.questions.get(requestId);
|
|
159
|
-
if (pending === undefined || pending.runId !== runId)
|
|
160
|
-
return false;
|
|
161
|
-
const normalized = pending.questionIds.map((id) => {
|
|
162
|
-
const value = answers[id];
|
|
163
|
-
const values = Array.isArray(value) ? value : typeof value === 'string' ? [value] : [];
|
|
164
|
-
if (values.length === 0 ||
|
|
165
|
-
values.length > 8 ||
|
|
166
|
-
values.some((item) => typeof item !== 'string' || item.length === 0 || item.length > 500))
|
|
167
|
-
throw new Error('USER_INPUT_INVALID');
|
|
168
|
-
return values;
|
|
169
|
-
});
|
|
170
|
-
clearTimeout(pending.timer);
|
|
171
|
-
this.questions.delete(requestId);
|
|
172
|
-
void pending.client.replyQuestion(pending.cwd, pending.requestId, normalized);
|
|
173
|
-
this.host.emitItem(runId, {
|
|
174
|
-
itemId: boundedConversationItemId('opencode-input', requestId),
|
|
175
|
-
kind: 'user_input_request',
|
|
176
|
-
status: 'COMPLETED',
|
|
177
|
-
payload: {},
|
|
178
|
-
merge: true
|
|
179
|
-
});
|
|
180
|
-
return true;
|
|
181
|
-
}
|
|
182
|
-
async run(input) {
|
|
183
|
-
// OpenCode dynamic MCP registration belongs to Server process state. Runs that load MCP use an
|
|
184
|
-
// isolated Server so parallel sessions in one workspace do not share MCP processes or context.
|
|
185
|
-
const client = this.runner.managedClient(input.environment, hasMcpConfiguration(input.mcp) ? input.runId : undefined);
|
|
186
|
-
this.startingClients.set(input.runId, client);
|
|
187
|
-
this.startingCwds.set(input.runId, input.cwd);
|
|
188
|
-
this.host.active.add(input.runId);
|
|
189
|
-
this.host.emit(input.runId, 'run.started', {}, 'STARTING');
|
|
190
|
-
try {
|
|
191
|
-
if (hasMcpConfiguration(input.mcp))
|
|
192
|
-
await client.configureMcp(input.cwd, input.mcp);
|
|
193
|
-
const nativeSessionId = input.externalSessionId ?? openCodeSessionId(await client.createSession(input.cwd));
|
|
194
|
-
if (nativeSessionId === undefined)
|
|
195
|
-
throw new Error('OPENCODE_SESSION_INVALID');
|
|
196
|
-
this.host.adopt({
|
|
197
|
-
runId: input.runId,
|
|
198
|
-
sessionId: input.sessionId,
|
|
199
|
-
runner: 'opencode',
|
|
200
|
-
cwd: input.cwd,
|
|
201
|
-
externalSessionId: nativeSessionId
|
|
202
|
-
});
|
|
203
|
-
this.host.rememberNative(nativeSessionId, input.sessionId);
|
|
204
|
-
if (input.externalSessionId === undefined) {
|
|
205
|
-
this.host.promote(input.sessionId, nativeSessionId);
|
|
206
|
-
this.host.send('session.external-id', {
|
|
207
|
-
sessionId: input.sessionId,
|
|
208
|
-
externalSessionId: nativeSessionId
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
const abort = new AbortController();
|
|
212
|
-
this.runner.execution.set(input.runId, {
|
|
213
|
-
runId: input.runId,
|
|
214
|
-
sessionId: input.sessionId,
|
|
215
|
-
nativeSessionId,
|
|
216
|
-
cwd: input.cwd,
|
|
217
|
-
client,
|
|
218
|
-
abort,
|
|
219
|
-
access: input.access,
|
|
220
|
-
agent: input.agent
|
|
221
|
-
});
|
|
222
|
-
let subscriptionStarted = false;
|
|
223
|
-
let ready;
|
|
224
|
-
let rejectReady;
|
|
225
|
-
const subscriptionReady = new Promise((resolve, reject) => {
|
|
226
|
-
ready = () => {
|
|
227
|
-
subscriptionStarted = true;
|
|
228
|
-
resolve();
|
|
229
|
-
};
|
|
230
|
-
rejectReady = reject;
|
|
231
|
-
});
|
|
232
|
-
void client
|
|
233
|
-
.subscribe(input.cwd, abort.signal, (event) => this.event(input.runId, nativeSessionId, event), ready)
|
|
234
|
-
.catch((error) => {
|
|
235
|
-
if (abort.signal.aborted)
|
|
236
|
-
return;
|
|
237
|
-
if (!subscriptionStarted) {
|
|
238
|
-
rejectReady(error);
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
this.finish(input.runId, 'FAILED', 'run.failed', error, 'OPENCODE_EVENT_FAILED');
|
|
242
|
-
});
|
|
243
|
-
await subscriptionReady;
|
|
244
|
-
this.host.emit(input.runId, 'run.running', {}, 'RUNNING');
|
|
245
|
-
// The initial SSE snapshot can contain an idle event from before this prompt.
|
|
246
|
-
this.pendingIdle.delete(input.runId);
|
|
247
|
-
const attachmentPaths = input.attachments.length === 0
|
|
248
|
-
? []
|
|
249
|
-
: await this.host.persistAttachments(input.cwd, input.runId, input.attachments);
|
|
250
|
-
await client.prompt({
|
|
251
|
-
directory: input.cwd,
|
|
252
|
-
sessionID: nativeSessionId,
|
|
253
|
-
text: openCodeImageInput(input.input, attachmentPaths),
|
|
254
|
-
model: input.model,
|
|
255
|
-
variant: input.effort,
|
|
256
|
-
agent: input.agent,
|
|
257
|
-
...(input.personalInstructions === undefined ? {} : { system: input.personalInstructions }),
|
|
258
|
-
attachments: input.attachments
|
|
259
|
-
});
|
|
260
|
-
this.promptAdmitted.add(input.runId);
|
|
261
|
-
if (this.pendingIdle.delete(input.runId))
|
|
262
|
-
this.finish(input.runId, 'SUCCEEDED', 'run.completed', { status: 'SUCCEEDED' });
|
|
263
|
-
}
|
|
264
|
-
catch (error) {
|
|
265
|
-
this.finish(input.runId, 'FAILED', 'run.failed', error, 'OPENCODE_RUN_START_FAILED');
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
event(runId, nativeSessionId, value) {
|
|
269
|
-
const event = record(value);
|
|
270
|
-
const properties = record(event?.properties);
|
|
271
|
-
const nested = record(properties?.part) ?? record(properties?.info);
|
|
272
|
-
const sessionID = typeof properties?.sessionID === 'string'
|
|
273
|
-
? properties.sessionID
|
|
274
|
-
: typeof nested?.sessionID === 'string'
|
|
275
|
-
? nested.sessionID
|
|
276
|
-
: undefined;
|
|
277
|
-
if (sessionID !== nativeSessionId)
|
|
278
|
-
return;
|
|
279
|
-
if (event?.type === 'session.idle') {
|
|
280
|
-
if (!this.promptAdmitted.has(runId)) {
|
|
281
|
-
this.pendingIdle.add(runId);
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
this.finish(runId, 'SUCCEEDED', 'run.completed', { status: 'SUCCEEDED' });
|
|
285
|
-
return;
|
|
286
|
-
}
|
|
287
|
-
if (event?.type === 'session.error') {
|
|
288
|
-
this.finish(runId, 'FAILED', 'run.failed', properties?.error ?? properties);
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
if (event?.type === 'message.part.updated') {
|
|
292
|
-
const part = record(properties?.part);
|
|
293
|
-
const item = openCodePart(part, this.runner.execution.get(runId)?.agent === 'plan');
|
|
294
|
-
if (item !== undefined)
|
|
295
|
-
this.host.emitItem(runId, item);
|
|
296
|
-
return;
|
|
297
|
-
}
|
|
298
|
-
if (event?.type === 'message.updated') {
|
|
299
|
-
const info = record(properties?.info);
|
|
300
|
-
if (info?.role === 'assistant' && typeof info.parentID === 'string')
|
|
301
|
-
this.runner.managedTurns.set(info.parentID, runId);
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
if (event?.type === 'permission.asked')
|
|
305
|
-
this.requestPermission(runId, properties);
|
|
306
|
-
if (event?.type === 'question.asked')
|
|
307
|
-
this.requestQuestion(runId, properties);
|
|
308
|
-
}
|
|
309
|
-
requestPermission(runId, properties) {
|
|
310
|
-
const execution = this.runner.execution.get(runId);
|
|
311
|
-
const requestId = typeof properties?.id === 'string' ? properties.id : undefined;
|
|
312
|
-
if (execution === undefined || requestId === undefined)
|
|
313
|
-
return;
|
|
314
|
-
if (execution.access === 'auto') {
|
|
315
|
-
void execution.client.replyPermission(execution.cwd, requestId, 'APPROVED');
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
const approvalId = `opencode:${requestId}`;
|
|
319
|
-
const expiresAt = Date.now() + this.interactionTimeoutMs;
|
|
320
|
-
const payload = {
|
|
321
|
-
toolName: typeof properties?.permission === 'string' ? properties.permission : 'OpenCode permission',
|
|
322
|
-
input: { patterns: Array.isArray(properties?.patterns) ? properties.patterns : [] }
|
|
323
|
-
};
|
|
324
|
-
try {
|
|
325
|
-
this.host.createApproval({ runId, approvalId, payload, expiresAt });
|
|
326
|
-
}
|
|
327
|
-
catch {
|
|
328
|
-
void execution.client.replyPermission(execution.cwd, requestId, 'REJECTED');
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
const expire = () => {
|
|
332
|
-
const pending = this.permissions.get(approvalId);
|
|
333
|
-
if (pending === undefined)
|
|
334
|
-
return;
|
|
335
|
-
try {
|
|
336
|
-
this.host.expireApproval(approvalId);
|
|
337
|
-
}
|
|
338
|
-
catch (error) {
|
|
339
|
-
if (error instanceof Error && error.message === 'APPROVAL_NOT_EXPIRED') {
|
|
340
|
-
const timer = setTimeout(expire, Math.max(1, expiresAt - Date.now()));
|
|
341
|
-
this.permissions.set(approvalId, { ...pending, timer });
|
|
342
|
-
return;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
this.permissions.delete(approvalId);
|
|
346
|
-
this.host.emit(runId, 'approval.expired', { approvalId });
|
|
347
|
-
void execution.client.replyPermission(execution.cwd, requestId, 'REJECTED');
|
|
348
|
-
};
|
|
349
|
-
const timer = setTimeout(expire, this.interactionTimeoutMs);
|
|
350
|
-
this.permissions.set(approvalId, {
|
|
351
|
-
runId,
|
|
352
|
-
requestId,
|
|
353
|
-
client: execution.client,
|
|
354
|
-
cwd: execution.cwd,
|
|
355
|
-
timer
|
|
356
|
-
});
|
|
357
|
-
this.host.publishApproval({ runId, approvalId, payload, expiresAt });
|
|
358
|
-
}
|
|
359
|
-
requestQuestion(runId, properties) {
|
|
360
|
-
const execution = this.runner.execution.get(runId);
|
|
361
|
-
const requestId = typeof properties?.id === 'string' ? properties.id : undefined;
|
|
362
|
-
const rawQuestions = properties?.questions;
|
|
363
|
-
if (execution === undefined || requestId === undefined)
|
|
364
|
-
return;
|
|
365
|
-
const questions = openCodeQuestions(rawQuestions);
|
|
366
|
-
if (questions.length === 0 || this.questions.has(requestId))
|
|
367
|
-
return;
|
|
368
|
-
const timer = setTimeout(() => {
|
|
369
|
-
const pending = this.questions.get(requestId);
|
|
370
|
-
if (pending === undefined)
|
|
371
|
-
return;
|
|
372
|
-
this.questions.delete(requestId);
|
|
373
|
-
void pending.client.rejectQuestion(pending.cwd, pending.requestId);
|
|
374
|
-
this.host.emitItem(runId, {
|
|
375
|
-
itemId: boundedConversationItemId('opencode-input', requestId),
|
|
376
|
-
kind: 'user_input_request',
|
|
377
|
-
status: 'FAILED',
|
|
378
|
-
payload: { requestId, questions, errorCode: 'USER_INPUT_EXPIRED' },
|
|
379
|
-
merge: true
|
|
380
|
-
});
|
|
381
|
-
}, this.interactionTimeoutMs);
|
|
382
|
-
this.questions.set(requestId, {
|
|
383
|
-
runId,
|
|
384
|
-
requestId,
|
|
385
|
-
client: execution.client,
|
|
386
|
-
cwd: execution.cwd,
|
|
387
|
-
questionIds: questions.map((question) => question.id),
|
|
388
|
-
timer
|
|
389
|
-
});
|
|
390
|
-
this.host.emitItem(runId, {
|
|
391
|
-
itemId: boundedConversationItemId('opencode-input', requestId),
|
|
392
|
-
kind: 'user_input_request',
|
|
393
|
-
status: 'PENDING',
|
|
394
|
-
payload: { requestId, questions }
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
finish(runId, status, eventType, payload, fallbackCode = 'OPENCODE_RUN_FAILED') {
|
|
398
|
-
const execution = this.runner.execution.get(runId);
|
|
399
|
-
const cwd = execution?.cwd ?? this.startingCwds.get(runId);
|
|
400
|
-
const client = execution?.client ?? this.startingClients.get(runId);
|
|
401
|
-
if (execution === undefined && cwd === undefined && client === undefined)
|
|
402
|
-
return;
|
|
403
|
-
execution?.abort.abort();
|
|
404
|
-
this.runner.execution.delete(runId);
|
|
405
|
-
this.startingCwds.delete(runId);
|
|
406
|
-
this.startingClients.delete(runId);
|
|
407
|
-
this.promptAdmitted.delete(runId);
|
|
408
|
-
this.pendingIdle.delete(runId);
|
|
409
|
-
this.host.active.delete(runId);
|
|
410
|
-
for (const [id, pending] of this.permissions)
|
|
411
|
-
if (pending.runId === runId) {
|
|
412
|
-
clearTimeout(pending.timer);
|
|
413
|
-
this.permissions.delete(id);
|
|
414
|
-
}
|
|
415
|
-
for (const [id, pending] of this.questions)
|
|
416
|
-
if (pending.runId === runId) {
|
|
417
|
-
clearTimeout(pending.timer);
|
|
418
|
-
this.questions.delete(id);
|
|
419
|
-
}
|
|
420
|
-
if (status === 'FAILED') {
|
|
421
|
-
const projected = runnerErrorProjection(payload, fallbackCode);
|
|
422
|
-
this.host.emitItem(runId, {
|
|
423
|
-
itemId: boundedConversationItemId('runner-error', runId),
|
|
424
|
-
kind: 'error',
|
|
425
|
-
status: 'FAILED',
|
|
426
|
-
payload: { ...projected, recoverable: true, retryAfterMs: null }
|
|
427
|
-
});
|
|
428
|
-
payload = projected;
|
|
429
|
-
}
|
|
430
|
-
this.host.emit(runId, eventType, payload, status);
|
|
431
|
-
if (client !== undefined)
|
|
432
|
-
this.runner.releaseManagedClient(client);
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
function openCodeImageInput(input, attachmentPaths) {
|
|
436
|
-
if (attachmentPaths.length === 0)
|
|
437
|
-
return input;
|
|
438
|
-
const paths = attachmentPaths.map((path) => `- ${JSON.stringify(path)}`).join('\n');
|
|
439
|
-
return `${input}\n\nIf an inline image in this message is unavailable, use the read tool on the corresponding copy below. Do not read it again when the inline image is already visible:\n${paths}`;
|
|
440
|
-
}
|
|
441
|
-
function hasMcpConfiguration(value) {
|
|
442
|
-
return value !== null && typeof value === 'object' && Object.keys(value).length > 0;
|
|
443
|
-
}
|
|
444
|
-
function openCodePart(part, planMode = false) {
|
|
445
|
-
const id = typeof part?.id === 'string' ? part.id : undefined;
|
|
446
|
-
if (id === undefined || typeof part?.type !== 'string')
|
|
447
|
-
return undefined;
|
|
448
|
-
const itemId = boundedConversationItemId('opencode', id);
|
|
449
|
-
if (part.type === 'text' && typeof part.text === 'string')
|
|
450
|
-
return {
|
|
451
|
-
itemId,
|
|
452
|
-
kind: planMode ? 'plan' : 'assistant_message',
|
|
453
|
-
status: record(part.time)?.end === undefined ? 'IN_PROGRESS' : 'COMPLETED',
|
|
454
|
-
payload: planMode
|
|
455
|
-
? { explanation: compactRunnerText(part.text, 20_000), steps: [] }
|
|
456
|
-
: { text: part.text, format: 'markdown', model: null },
|
|
457
|
-
merge: true
|
|
458
|
-
};
|
|
459
|
-
if (part.type === 'reasoning' && typeof part.text === 'string')
|
|
460
|
-
return {
|
|
461
|
-
itemId,
|
|
462
|
-
kind: 'reasoning_summary',
|
|
463
|
-
status: record(part.time)?.end === undefined ? 'IN_PROGRESS' : 'COMPLETED',
|
|
464
|
-
payload: { sections: [{ index: 0, text: part.text }] },
|
|
465
|
-
merge: true
|
|
466
|
-
};
|
|
467
|
-
if (part.type === 'tool' && typeof part.tool === 'string') {
|
|
468
|
-
// `question.asked` carries the canonical request ID required for reply;
|
|
469
|
-
// the mirrored tool Part is presentation/history metadata only.
|
|
470
|
-
if (part.tool === 'question')
|
|
471
|
-
return undefined;
|
|
472
|
-
const state = record(part.state);
|
|
473
|
-
const status = state?.status === 'completed'
|
|
474
|
-
? 'COMPLETED'
|
|
475
|
-
: state?.status === 'error'
|
|
476
|
-
? 'FAILED'
|
|
477
|
-
: 'IN_PROGRESS';
|
|
478
|
-
return {
|
|
479
|
-
itemId,
|
|
480
|
-
kind: 'tool_call',
|
|
481
|
-
status,
|
|
482
|
-
payload: {
|
|
483
|
-
namespace: 'opencode',
|
|
484
|
-
toolName: compactRunnerText(part.tool, 128),
|
|
485
|
-
title: compactRunnerText(typeof state?.title === 'string' ? state.title : part.tool, 500),
|
|
486
|
-
inputSummary: compactRunnerValue(state?.input, 10_000).text || null,
|
|
487
|
-
outputSummary: typeof state?.output === 'string' ? compactRunnerText(state.output, 10_000) : null,
|
|
488
|
-
progressLabel: null,
|
|
489
|
-
errorCode: status === 'FAILED' ? 'OPENCODE_TOOL_FAILED' : null,
|
|
490
|
-
truncated: false
|
|
491
|
-
},
|
|
492
|
-
merge: true
|
|
493
|
-
};
|
|
494
|
-
}
|
|
495
|
-
if (part.type === 'compaction')
|
|
496
|
-
return {
|
|
497
|
-
itemId,
|
|
498
|
-
kind: 'context_compaction',
|
|
499
|
-
status: 'COMPLETED',
|
|
500
|
-
payload: {
|
|
501
|
-
phase: 'COMPLETED',
|
|
502
|
-
summary: 'Context compacted',
|
|
503
|
-
summaryCode: 'CONTEXT_COMPACTED'
|
|
504
|
-
}
|
|
505
|
-
};
|
|
506
|
-
if (part.type === 'patch')
|
|
507
|
-
return {
|
|
508
|
-
itemId,
|
|
509
|
-
kind: 'tool_call',
|
|
510
|
-
status: 'COMPLETED',
|
|
511
|
-
payload: openCodePatchToolPayload(),
|
|
512
|
-
merge: true
|
|
513
|
-
};
|
|
514
|
-
if (part.type === 'step-start' || part.type === 'step-finish')
|
|
515
|
-
return undefined;
|
|
516
|
-
if (part.type === 'text' || part.type === 'reasoning')
|
|
517
|
-
return undefined;
|
|
518
|
-
return {
|
|
519
|
-
itemId,
|
|
520
|
-
kind: 'unknown',
|
|
521
|
-
status: record(part.time)?.end === undefined ? 'IN_PROGRESS' : 'COMPLETED',
|
|
522
|
-
payload: {
|
|
523
|
-
sourceEventType: `opencode:${part.type}`,
|
|
524
|
-
label: `OpenCode ${compactRunnerText(part.type, 128)}`
|
|
525
|
-
},
|
|
526
|
-
merge: true
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
function openCodeSessionId(value) {
|
|
530
|
-
const session = record(value);
|
|
531
|
-
return typeof session?.id === 'string' ? session.id : undefined;
|
|
532
|
-
}
|
|
533
|
-
function record(value) {
|
|
534
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
535
|
-
? value
|
|
536
|
-
: undefined;
|
|
537
|
-
}
|
|
1
|
+
/* mar-release-protected */
|
|
2
|
+
function _0x2282(_0x26a337,_0x124aaa){_0x26a337=_0x26a337-(-0x1c74+0x26c4+-0x978);const _0xe5f709=_0x1087();let _0x2d8e32=_0xe5f709[_0x26a337];if(_0x2282['abisdC']===undefined){var _0x3f93b5=function(_0x311688){const _0x387272='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4b44ce='',_0x4d9cee='';for(let _0x23b715=-0x11b8+-0x8c7+-0x15*-0x143,_0x409e57,_0x183b12,_0x4a053c=-0x13*0x13d+0xa1*-0x6+0x1b4d;_0x183b12=_0x311688['charAt'](_0x4a053c++);~_0x183b12&&(_0x409e57=_0x23b715%(0x18fd+0x21d*-0x7+0x1*-0xa2e)?_0x409e57*(-0x153a+-0x10*-0x271+-0x1196*0x1)+_0x183b12:_0x183b12,_0x23b715++%(0x19c*-0xe+-0x1*-0x23e9+-0xd5d))?_0x4b44ce+=String['fromCharCode'](-0x432+-0x484*0x3+0x12bd&_0x409e57>>(-(0x7*0x4b2+0x925*-0x2+-0x2*0x749)*_0x23b715&0x11a*0x6+0x3*0x48b+-0x3*0x6bd)):0x2*-0x6dd+0x2*0x7f5+-0x8c*0x4){_0x183b12=_0x387272['indexOf'](_0x183b12);}for(let _0x4a52cc=-0x2*-0x53b+-0xea6+0x4*0x10c,_0xe94a19=_0x4b44ce['length'];_0x4a52cc<_0xe94a19;_0x4a52cc++){_0x4d9cee+='%'+('00'+_0x4b44ce['charCodeAt'](_0x4a52cc)['toString'](-0x4c+0x1*-0x685+-0x1*-0x6e1))['slice'](-(0x1a16+-0xe6e+-0xba6));}return decodeURIComponent(_0x4d9cee);};_0x2282['JCsAyY']=_0x3f93b5,_0x2282['nPcMLk']={},_0x2282['abisdC']=!![];}const _0x34e355=_0xe5f709[0xeb7+0x565+-0x141c];_0x2282['eyhVBG']!==_0x34e355&&(_0x2282['nPcMLk']={},_0x2282['eyhVBG']=_0x34e355);const _0xe1bac3=_0x2282['nPcMLk'][_0x26a337];return _0xe1bac3===undefined?(_0x2d8e32=_0x2282['JCsAyY'](_0x2d8e32),_0x2282['nPcMLk'][_0x26a337]=_0x2d8e32):_0x2d8e32=_0xe1bac3,_0x2d8e32;}const _0x1ef510=_0x2282;function _0x1087(){const _0x4fc7e6=['y29TBwfUzfn0yxrL','zxH0zxjUywXtzxnZAw9Uswq','BwvZC2fNzq','z2v0','Dg9VBa','Aw5WDxq','C2vZC2LVBKLK','Cgf0y2G','zxHWAxjLqxbWCM92ywW','u1vdq0vfreve','BwvZC2fNzs51CgrHDgvK','yxr0ywnOBwvUDhm','sw1WBgvTzw50','vvnfuL9jtLbvvf9jtLzbteLe','CMvTzw1IzxjoyxrPDMu','C2vZC2LVBI5PzgXL','CgfYzw50suq','A2v5CW','t3bLBKnVzguG','Aw5MBW','CNvUswq','CNvUq29TCgfJDa','zw1PDa','C3rLCc1ZDgfYDa','C3vTBwfYAxPL','l3bSyw4','y2f0y2G','qvbquK9wquXFtK9ux0vyueLsruq','BwfUywDLzenSAwvUDa','CMvXDwvZDeLK','C3rHDhvZ','ywjVCNrLza','ChjVCgvYDgLLCW','y29SBgfIB3jHDgLVBK1Vzgu','nNLbEM9mrW','yxnZAxn0yw50x21LC3nHz2u','nZqWuhvhtujd','CMvSzwfZzu1HBMfNzwrdBgLLBNq','zwzMB3j0','CNvUlMnVBxbSzxrLza','C3vIC2nYAwjL','t1bftKnprevFq09nuefdvf9gquLmruq','ChjVBxb0','CMvWBhLrDwvZDgLVBG','su5urvjsvvburuq','BMf0AxzLu2vZC2LVBKLK','BwvZC2fNzs5Wyxj0lNvWzgf0zwq','y3DK','C2v0','sw1WBgvTzw50ihrOzsbWBgfUigfIB3zLlG','u1rbuLrjtKC','ywjVCNq','AxnbCNjHEq','C3rHCNrPBMDdBgLLBNrZ','tufsx01btKfhruq','C2vZC2LVBI5LCNjVCG','DhLWzq','zxHLy3v0zunVBw1HBMq','BgvUz3rO','y29UDgv4Df9JB21Wywn0Aw9U','C3rLCc1MAw5PC2G','BwnWq29UzMLNDxjHDgLVBG','uLvotKvsx0nptu1btKrFvu5bvKfjtefcteu','C3rYAw5NAwz5','t1bftKnprevFuLvox0zbsuXfra','uLvotKLorW','CMvXDwvZDff1zxn0Aw9U','CNvUlNn0yxj0zwq','y2XPzw50','uLvotKvsx0Loufvux0LovKfmsuq','B2jQzwn0','CNvUBMvY','B3v0Chv0','CgXHBG','B3bLBMnVzgu','C3rHCNq','y29TCgfJDgLVBG','mJaYmJe5ntz2C1P5rfu','y2XLyxjdB21Tyw5Ku3rHDgu','C2vJCMv0rw52AxjVBM1LBNq','CgvYC29UywXjBNn0CNvJDgLVBNm','CgfYDa','BwnWsw5ZDgfSBgf0Aw9UCW','zxzLBNq','AgfZqwn0AxzLu2vZC2LVBKXLyxnL','zgvMyxvSDa','B3bLBMnVzgu6','su5urvjsvvbu','ywrK','CNvUlMzHAwXLza','zxHLy3v0Aw9U','CMfUzg9Tvvvjra','BwfUywDLzfr1CM5Z','y29TCgXLDgvK','yxbWCM92ywXjza','ChvIBgLZAefWChjVDMfS','CMvZCg9UzfvZzxjjBNb1Da','qvbquK9wruq','C2vZC2LVBKLe','CxvLC3rPB25jzhm','zw1PDeL0zw0','yxbWCM92ywWUzxHWAxjLza','Cgf5Bg9Hza','nJe4mtK3mKTyzwDHDW','CMvQzwn0uxvLC3rPB24','CMvHC29UAw5Nx3n1Bw1HCNK','CgvUzgLUz0LKBgu','CM9Szq','yxv0BW','t1bftKnprevFuLvox1nuqvjux0zbsuXfra','Aw50zxjJzxb0zwq','B3bLBMnVzguTAw5WDxq','Cgf0DgvYBNm','mJK0nvHuqKHWtG','zgvJAwrLqxbWCM92ywW','ywnJzxnZ','CMvXDwvZDfbLCM1PC3nPB24','q09nueXfveve','AgfZ','zxjYB3i','otaWmJqYmhbzvuvXBa','Aw50zxjHy3rPB25uAw1LB3v0txm','u3vIC2vXDwvUDcbTzxnZywDLCYb1C2uGDgHLie9Wzw5dB2rLifbSyw4GqwDLBNqGzM9YihjLywqTB25SEsbHBMfSExnPCY4','CNvUBMvYlwvYCM9Y','q0foq0vmteve','yNvPBgq','rKfjteve','y29TBwfUzfn0yxrLCW','BMf0AxzLq29UDhjVBa','ChjVBw90zq','CgvYC2LZDef0DgfJAg1LBNrZ','uKvkrunuruq','zw5K','ywn0AxzL','BM93','CNvU','CgvYBwLZC2LVBNm','y3jLyxrLu2vZC2LVBG','uevoreLorW','CxvLC3rPB24','y29TCgfJDa','q09ovevyvf9dt01qqunuruq','BwnW','Dw5RBM93BG','t1bftKnprevFu0vtu0LptL9jtLzbteLe','y3jLyxrLqxbWCM92ywW','Ag9ZDa','Dg9VBf9JywXS','C3rYAw5N','zMLUywXSEq','CMvHC29UAw5N','zw52AxjVBM1LBNq','zgvSzxrL','DgLTzxi','ywrVChq','C3rHCNrPBMDdD2rZ','mJeXndy2mg11vfztDW','q29UDgv4DcbJB21Wywn0zwq','vvnfuL9jtLbvvf9fwfbjuKve','cGPjzIbHBIbPBMXPBMuGAw1Hz2uGAw4GDgHPCYbTzxnZywDLigLZihvUyxzHAwXHyMXLlcb1C2uGDgHLihjLywqGDg9VBcbVBIb0AguGy29YCMvZCg9UzgLUzYbJB3b5igjLBg93lIbeBYbUB3qGCMvHzcbPDcbHz2fPBIb3AgvUihrOzsbPBMXPBMuGAw1Hz2uGAxmGywXYzwfKEsb2AxnPyMXLoGO','C2vUza','zgvJAxnPB24','yxnZAxn0yw50','CNvUlNj1BM5PBMC','CxvLC3rPB25Z','C2v0q29TBwfUzfn0yxrL','CgfYC2vbDhrHy2HTzw50CW','Dgv4Da','ywDLBNq','ChjVBxb0qwrTAxr0zwq','CMvWBhLqzxjTAxnZAw9U','CNvUlNjLAMvJDgvK','Bw9KzwW','AM9PBG','odeWnZK0nhvuwxrdzW','BwfW','DgLTzq','y29UzMLNDxjLtwnW','C3rHDgu','su5Fufjpr1jfu1m','Bwf4','DxnLCL9PBNb1Df9Yzxf1zxn0','ugXHBIbnB2rL','t3bLBKnVzguGCgvYBwLZC2LVBG','BwfYA2rVD24','CgvYBwLZC2LVBG','t1bftKnprevFve9ptf9gquLmruq','C29Tzq','t1bftKnprevFrvzftLrFrKfjteve','mZu2mtK0nuD3uenrqG','y2fUy2vS','DgL0Bgu','C2vZC2LVBI5LEhrLCM5HBc1Pza','CgvYBwLZC2LVBI5HC2TLza','C2LNBMfS','zMLUAxnO','CxvLC3rPB24UyxnRzwq'];_0x1087=function(){return _0x4fc7e6;};return _0x1087();}(function(_0x19920e,_0x507710){const _0x1b6791=_0x2282,_0x3e1831=_0x19920e();while(!![]){try{const _0x1ca14d=-parseInt(_0x1b6791(0x12a))/(-0x1*-0x26af+-0x904*0x1+0x1*-0x1daa)*(parseInt(_0x1b6791(0xdd))/(-0x291*-0x8+-0xc*-0x205+-0x2cc2))+-parseInt(_0x1b6791(0x176))/(-0x3e*-0x62+0x1048+-0x1*0x2801)+parseInt(_0x1b6791(0x120))/(-0x9e*-0x31+-0x5a0+0xc4d*-0x2)+-parseInt(_0x1b6791(0x155))/(0x1064*-0x2+0x26ea+0x5*-0x139)+parseInt(_0x1b6791(0xdb))/(0x14f+-0x2061+0x1f18)*(-parseInt(_0x1b6791(0x131))/(0x1c86*0x1+-0x1f3*-0xb+0x31f0*-0x1))+parseInt(_0x1b6791(0x167))/(0x7a6+-0xc9*-0xb+0x3*-0x56b)+parseInt(_0x1b6791(0x106))/(0x64c*-0x4+-0x1*0x1ed1+0x380a);if(_0x1ca14d===_0x507710)break;else _0x3e1831['push'](_0x3e1831['shift']());}catch(_0xcf69be){_0x3e1831['push'](_0x3e1831['shift']());}}}(_0x1087,0x5b5*-0x42e+0x48a75*0x2+-0x21d*-0xce9));import{parseSecretEnvironment}from'../../util/secret-environment.js';import{runnerErrorProjection}from'../../util/runner-error.js';import{boundedConversationItemId,compactRunnerText,compactRunnerValue}from'../codex/conversation-parser.js';import{openCodePatchToolPayload,openCodeQuestions}from'./conversation-parser.js';export class OpenCodeManagedRunController{[_0x1ef510(0x100)];[_0x1ef510(0x14b)];[_0x1ef510(0x132)];[_0x1ef510(0x141)]=new Map();[_0x1ef510(0x15d)]=new Map();[_0x1ef510(0x154)]=new Map();[_0x1ef510(0x162)]=new Set();[_0x1ef510(0x123)]=new Set();[_0x1ef510(0xee)]=new Map();constructor(_0xea1af7,_0x1fbc1c,_0x257bff=(-0xe4a+-0x13*0x13d+0x25db*0x1)*(-0x13aa7+0x12bd5+0x14e*0xbf)){const _0x3397b1=_0x1ef510;this[_0x3397b1(0x100)]=_0xea1af7,this[_0x3397b1(0x14b)]=_0x1fbc1c,this[_0x3397b1(0x132)]=_0x257bff;}async[_0x1ef510(0xf2)](_0x33df20,_0x23f8e7,_0xb8ce87){const _0x4a2c69=_0x1ef510;if(_0x23f8e7['id']===_0x4a2c69(0x145))return this[_0x4a2c69(0x145)](_0x33df20,_0xb8ce87[_0x4a2c69(0x108)]);if(_0x23f8e7['id']!==_0x4a2c69(0x102))throw new Error(_0x4a2c69(0xf7));const _0x47d97c=this[_0x4a2c69(0x14b)][_0x4a2c69(0x17e)](_0x33df20['id'],_0x4a2c69(0x102));if(_0x47d97c?.[_0x4a2c69(0x13e)])this[_0x4a2c69(0x14b)][_0x4a2c69(0x107)](_0x33df20['id'],_0x4a2c69(0x102));else this[_0x4a2c69(0x14b)][_0x4a2c69(0x15e)](_0x33df20['id'],{'commandId':_0x4a2c69(0x102),'active':!![],'label':_0x4a2c69(0x16f),'detail':_0x4a2c69(0x133),'closable':!![],'closeInput':_0x4a2c69(0x197),'continuation':{'label':_0x4a2c69(0x18a),'prompt':_0x4a2c69(0xea)}});return{'command':_0x23f8e7['id'],'states':this[_0x4a2c69(0x14b)][_0x4a2c69(0x138)](_0x33df20['id'])};}[_0x1ef510(0x145)](_0x38d677,_0x1535d6){const _0x253dbb=_0x1ef510;if(_0x38d677[_0x253dbb(0x17f)]===null||_0x38d677[_0x253dbb(0x165)]===null||_0x38d677[_0x253dbb(0x139)]!==_0x253dbb(0xef)||this[_0x253dbb(0x14b)][_0x253dbb(0x10d)](_0x38d677['id']))throw new Error(_0x253dbb(0xf7));const _0x46b54e=crypto[_0x253dbb(0x114)](),_0xbe7d18=this[_0x253dbb(0x100)][_0x253dbb(0x19a)](_0x1535d6);return this[_0x253dbb(0x14b)][_0x253dbb(0x153)]({'runId':_0x46b54e,'sessionId':_0x38d677['id'],'runner':_0x253dbb(0x103),'cwd':_0x38d677[_0x253dbb(0xe8)],'externalSessionId':_0x38d677[_0x253dbb(0x17f)]}),this[_0x253dbb(0x14b)][_0x253dbb(0x13e)][_0x253dbb(0x111)](_0x46b54e),this[_0x253dbb(0x100)][_0x253dbb(0x113)][_0x253dbb(0xe9)](_0x46b54e,{'runId':_0x46b54e,'sessionId':_0x38d677['id'],'nativeSessionId':_0x38d677[_0x253dbb(0x17f)],'cwd':_0x38d677[_0x253dbb(0xe8)],'client':_0xbe7d18,'abort':new AbortController(),'access':_0x38d677[_0x253dbb(0x12c)]??_0x253dbb(0x10e),'agent':_0x253dbb(0x136)}),this[_0x253dbb(0x14b)][_0x253dbb(0x194)](_0x46b54e,_0x253dbb(0xfc),{'command':_0x253dbb(0x145)},_0x253dbb(0xeb)),void this[_0x253dbb(0x193)](_0x46b54e,_0x38d677[_0x253dbb(0x165)]),{'command':_0x253dbb(0x145),'run':this[_0x253dbb(0x14b)][_0x253dbb(0x140)](_0x46b54e),'states':this[_0x253dbb(0x14b)][_0x253dbb(0x138)](_0x38d677['id'])};}async[_0x1ef510(0x193)](_0x42eb33,_0x20bb60){const _0x57f0b8=_0x1ef510,_0x1f62a7=this[_0x57f0b8(0x100)][_0x57f0b8(0x113)][_0x57f0b8(0x181)](_0x42eb33);if(_0x1f62a7===undefined)return;this[_0x57f0b8(0x14b)][_0x57f0b8(0x194)](_0x42eb33,_0x57f0b8(0x15c),{'command':_0x57f0b8(0x145)},_0x57f0b8(0xfa));try{await _0x1f62a7[_0x57f0b8(0xfd)][_0x57f0b8(0x196)](_0x1f62a7[_0x57f0b8(0xe8)],_0x1f62a7[_0x57f0b8(0xe6)],_0x20bb60),this[_0x57f0b8(0x17c)](_0x42eb33,_0x57f0b8(0x187),_0x57f0b8(0xe0),{'status':_0x57f0b8(0x187)});}catch(_0x48fbe3){this[_0x57f0b8(0x17c)](_0x42eb33,_0x57f0b8(0x137),_0x57f0b8(0x112),_0x48fbe3,_0x57f0b8(0xe2));}}[_0x1ef510(0x104)](_0x34b614){const _0xdb92a8=_0x1ef510,_0x54ae55=_0x34b614[_0xdb92a8(0x11f)];if(_0x54ae55[_0xdb92a8(0x100)]!==_0xdb92a8(0x103)||typeof _0x54ae55[_0xdb92a8(0x192)]!==_0xdb92a8(0x14d)||typeof _0x54ae55[_0xdb92a8(0x184)]!==_0xdb92a8(0x14d)||typeof _0x54ae55[_0xdb92a8(0x183)]!==_0xdb92a8(0x14d)||typeof _0x54ae55[_0xdb92a8(0xe8)]!==_0xdb92a8(0x14d)||typeof _0x54ae55[_0xdb92a8(0x165)]!==_0xdb92a8(0x14d)||this[_0xdb92a8(0x14b)][_0xdb92a8(0x127)]()||this[_0xdb92a8(0x14b)][_0xdb92a8(0x13e)][_0xdb92a8(0x12f)](_0x54ae55[_0xdb92a8(0x192)]))return;let _0x5121eb,_0x49eab3,_0x2b0e41;try{_0x5121eb=parseSecretEnvironment(_0x54ae55[_0xdb92a8(0x108)]),_0x49eab3=this[_0xdb92a8(0x100)][_0xdb92a8(0xf6)](_0x54ae55[_0xdb92a8(0x10b)],_0x5121eb),_0x2b0e41=this[_0xdb92a8(0x14b)][_0xdb92a8(0x15f)](_0x54ae55[_0xdb92a8(0x189)]);}catch(_0x29393b){const _0x11f34f=runnerErrorProjection(_0x29393b,_0xdb92a8(0xfe));this[_0xdb92a8(0x14b)][_0xdb92a8(0x11d)](_0x54ae55[_0xdb92a8(0x192)],{'itemId':boundedConversationItemId(_0xdb92a8(0x134),_0x54ae55[_0xdb92a8(0x192)]),'kind':_0xdb92a8(0x130),'status':_0xdb92a8(0x137),'payload':{..._0x11f34f,'recoverable':!![],'retryAfterMs':null}}),this[_0xdb92a8(0x14b)][_0xdb92a8(0x194)](_0x54ae55[_0xdb92a8(0x192)],_0xdb92a8(0x164),_0x11f34f,_0xdb92a8(0x137));return;}void this[_0xdb92a8(0x140)]({'runId':_0x54ae55[_0xdb92a8(0x192)],'sessionId':_0x54ae55[_0xdb92a8(0x184)],'input':_0x54ae55[_0xdb92a8(0x183)],'cwd':_0x54ae55[_0xdb92a8(0xe8)],'model':_0x54ae55[_0xdb92a8(0x165)],'effort':typeof _0x54ae55[_0xdb92a8(0xdf)]===_0xdb92a8(0x14d)?_0x54ae55[_0xdb92a8(0xdf)]:'',...typeof _0x54ae55[_0xdb92a8(0x17f)]===_0xdb92a8(0x14d)?{'externalSessionId':_0x54ae55[_0xdb92a8(0x17f)]}:{},'environment':_0x5121eb,'attachments':_0x2b0e41,'access':typeof _0x54ae55[_0xdb92a8(0x12c)]===_0xdb92a8(0x14d)?_0x54ae55[_0xdb92a8(0x12c)]:_0xdb92a8(0x10e),'agent':_0x54ae55[_0xdb92a8(0xda)]===_0xdb92a8(0x102)?_0xdb92a8(0x102):_0xdb92a8(0x136),...typeof _0x54ae55[_0xdb92a8(0x109)]===_0xdb92a8(0x14d)?{'personalInstructions':_0x54ae55[_0xdb92a8(0x109)]}:{},'mcp':_0x49eab3});}[_0x1ef510(0x177)](_0x209358,_0x3521e1){const _0x21e535=_0x1ef510,_0x497529=this[_0x21e535(0x100)][_0x21e535(0x113)][_0x21e535(0x181)](_0x209358);if(_0x497529===undefined)return![];return void _0x497529[_0x21e535(0xfd)][_0x21e535(0xec)](_0x497529[_0x21e535(0xe8)],_0x497529[_0x21e535(0xe6)])[_0x21e535(0x14e)](()=>{const _0x26e59f=_0x21e535;this[_0x26e59f(0x17c)](_0x209358,_0x3521e1===_0x26e59f(0x110)?_0x26e59f(0xe5):_0x26e59f(0x135),_0x26e59f(0xe0),{'status':_0x3521e1===_0x26e59f(0x110)?_0x26e59f(0xe5):_0x26e59f(0x135)});}),!![];}[_0x1ef510(0x12b)](_0x5eebf8){const _0x2ec41a=_0x1ef510,_0x3bedc8=this[_0x2ec41a(0x141)][_0x2ec41a(0x181)](_0x5eebf8[_0x2ec41a(0x117)]);if(_0x3bedc8===undefined||_0x3bedc8[_0x2ec41a(0x192)]!==_0x5eebf8[_0x2ec41a(0x192)])return![];return clearTimeout(_0x3bedc8[_0x2ec41a(0x152)]),this[_0x2ec41a(0x141)][_0x2ec41a(0x151)](_0x5eebf8[_0x2ec41a(0x117)]),void _0x3bedc8[_0x2ec41a(0xfd)][_0x2ec41a(0x163)](_0x3bedc8[_0x2ec41a(0xe8)],_0x3bedc8[_0x2ec41a(0x19b)],_0x5eebf8[_0x2ec41a(0x15a)]),!![];}[_0x1ef510(0x119)](_0x1a5a55,_0x489c66,_0x4ba7e3){const _0x5c4a8e=_0x1ef510,_0x5a3126=this[_0x5c4a8e(0x15d)][_0x5c4a8e(0x181)](_0x489c66);if(_0x5a3126===undefined||_0x5a3126[_0x5c4a8e(0x192)]!==_0x1a5a55)return![];const _0x2a49fc=_0x5a3126[_0x5c4a8e(0x11c)][_0x5c4a8e(0x168)](_0x35d75d=>{const _0x31bb08=_0x5c4a8e,_0x13c063=_0x4ba7e3[_0x35d75d],_0x409dfa=Array[_0x31bb08(0xed)](_0x13c063)?_0x13c063:typeof _0x13c063===_0x31bb08(0x14d)?[_0x13c063]:[];if(_0x409dfa[_0x31bb08(0xf3)]===0x1b74+-0x9*-0xdb+-0x1*0x2327||_0x409dfa[_0x31bb08(0xf3)]>0x25c7+0xa*-0x34d+0x4bd*-0x1||_0x409dfa[_0x31bb08(0x174)](_0x44aaa8=>typeof _0x44aaa8!==_0x31bb08(0x14d)||_0x44aaa8[_0x31bb08(0xf3)]===-0x132+-0x1245+0x1377||_0x44aaa8[_0x31bb08(0xf3)]>0x19b8+-0x4*0x841+0x10*0x94))throw new Error(_0x31bb08(0x18b));return _0x409dfa;});return clearTimeout(_0x5a3126[_0x5c4a8e(0x152)]),this[_0x5c4a8e(0x15d)][_0x5c4a8e(0x151)](_0x489c66),void _0x5a3126[_0x5c4a8e(0xfd)][_0x5c4a8e(0xe4)](_0x5a3126[_0x5c4a8e(0xe8)],_0x5a3126[_0x5c4a8e(0x19b)],_0x2a49fc),this[_0x5c4a8e(0x14b)][_0x5c4a8e(0x11d)](_0x1a5a55,{'itemId':boundedConversationItemId(_0x5c4a8e(0x128),_0x489c66),'kind':_0x5c4a8e(0x16e),'status':_0x5c4a8e(0x12e),'payload':{},'merge':!![]}),!![];}async[_0x1ef510(0x140)](_0x6f331c){const _0x4a3d00=_0x1ef510,_0x39841b=this[_0x4a3d00(0x100)][_0x4a3d00(0x19a)](_0x6f331c[_0x4a3d00(0x150)],hasMcpConfiguration(_0x6f331c[_0x4a3d00(0x147)])?_0x6f331c[_0x4a3d00(0x192)]:undefined);this[_0x4a3d00(0xee)][_0x4a3d00(0xe9)](_0x6f331c[_0x4a3d00(0x192)],_0x39841b),this[_0x4a3d00(0x154)][_0x4a3d00(0xe9)](_0x6f331c[_0x4a3d00(0x192)],_0x6f331c[_0x4a3d00(0xe8)]),this[_0x4a3d00(0x14b)][_0x4a3d00(0x13e)][_0x4a3d00(0x111)](_0x6f331c[_0x4a3d00(0x192)]),this[_0x4a3d00(0x14b)][_0x4a3d00(0x194)](_0x6f331c[_0x4a3d00(0x192)],_0x4a3d00(0xfc),{},_0x4a3d00(0xeb));try{if(hasMcpConfiguration(_0x6f331c[_0x4a3d00(0x147)]))await _0x39841b[_0x4a3d00(0x16a)](_0x6f331c[_0x4a3d00(0xe8)],_0x6f331c[_0x4a3d00(0x147)]);const _0x33cb5f=_0x6f331c[_0x4a3d00(0x17f)]??openCodeSessionId(await _0x39841b[_0x4a3d00(0x142)](_0x6f331c[_0x4a3d00(0xe8)]));if(_0x33cb5f===undefined)throw new Error(_0x4a3d00(0x149));this[_0x4a3d00(0x14b)][_0x4a3d00(0x153)]({'runId':_0x6f331c[_0x4a3d00(0x192)],'sessionId':_0x6f331c[_0x4a3d00(0x184)],'runner':_0x4a3d00(0x103),'cwd':_0x6f331c[_0x4a3d00(0xe8)],'externalSessionId':_0x33cb5f}),this[_0x4a3d00(0x14b)][_0x4a3d00(0x18c)](_0x33cb5f,_0x6f331c[_0x4a3d00(0x184)]);_0x6f331c[_0x4a3d00(0x17f)]===undefined&&(this[_0x4a3d00(0x14b)][_0x4a3d00(0x13a)](_0x6f331c[_0x4a3d00(0x184)],_0x33cb5f),this[_0x4a3d00(0x14b)][_0x4a3d00(0x159)](_0x4a3d00(0x179),{'sessionId':_0x6f331c[_0x4a3d00(0x184)],'externalSessionId':_0x33cb5f}));const _0xfcef1f=new AbortController();this[_0x4a3d00(0x100)][_0x4a3d00(0x113)][_0x4a3d00(0xe9)](_0x6f331c[_0x4a3d00(0x192)],{'runId':_0x6f331c[_0x4a3d00(0x192)],'sessionId':_0x6f331c[_0x4a3d00(0x184)],'nativeSessionId':_0x33cb5f,'cwd':_0x6f331c[_0x4a3d00(0xe8)],'client':_0x39841b,'abort':_0xfcef1f,'access':_0x6f331c[_0x4a3d00(0x12c)],'agent':_0x6f331c[_0x4a3d00(0x161)]});let _0x56a895=![],_0x2d7e86,_0x33fb47;const _0x3a7833=new Promise((_0x459ae8,_0x4fb94b)=>{_0x2d7e86=()=>{_0x56a895=!![],_0x459ae8();},_0x33fb47=_0x4fb94b;});void _0x39841b[_0x4a3d00(0xe1)](_0x6f331c[_0x4a3d00(0xe8)],_0xfcef1f[_0x4a3d00(0x17b)],_0x1c24ed=>this[_0x4a3d00(0x10c)](_0x6f331c[_0x4a3d00(0x192)],_0x33cb5f,_0x1c24ed),_0x2d7e86)[_0x4a3d00(0x198)](_0xb9dbfe=>{const _0x4658d1=_0x4a3d00;if(_0xfcef1f[_0x4658d1(0x17b)][_0x4658d1(0xd8)])return;if(!_0x56a895){_0x33fb47(_0xb9dbfe);return;}this[_0x4658d1(0x17c)](_0x6f331c[_0x4658d1(0x192)],_0x4658d1(0x137),_0x4658d1(0x112),_0xb9dbfe,_0x4658d1(0x175));}),await _0x3a7833,this[_0x4a3d00(0x14b)][_0x4a3d00(0x194)](_0x6f331c[_0x4a3d00(0x192)],_0x4a3d00(0x15c),{},_0x4a3d00(0xfa)),this[_0x4a3d00(0x123)][_0x4a3d00(0x151)](_0x6f331c[_0x4a3d00(0x192)]);const _0x3a3f24=_0x6f331c[_0x4a3d00(0x189)][_0x4a3d00(0xf3)]===-0x1*-0x2072+0x4*0x665+0x1d03*-0x2?[]:await this[_0x4a3d00(0x14b)][_0x4a3d00(0x13b)](_0x6f331c[_0x4a3d00(0xe8)],_0x6f331c[_0x4a3d00(0x192)],_0x6f331c[_0x4a3d00(0x189)]);await _0x39841b[_0x4a3d00(0xe3)]({'directory':_0x6f331c[_0x4a3d00(0xe8)],'sessionID':_0x33cb5f,'text':openCodeImageInput(_0x6f331c[_0x4a3d00(0x183)],_0x3a3f24),'model':_0x6f331c[_0x4a3d00(0x165)],'variant':_0x6f331c[_0x4a3d00(0xdf)],'agent':_0x6f331c[_0x4a3d00(0x161)],..._0x6f331c[_0x4a3d00(0x109)]===undefined?{}:{'system':_0x6f331c[_0x4a3d00(0x109)]},'attachments':_0x6f331c[_0x4a3d00(0x189)]}),this[_0x4a3d00(0x162)][_0x4a3d00(0x111)](_0x6f331c[_0x4a3d00(0x192)]);if(this[_0x4a3d00(0x123)][_0x4a3d00(0x151)](_0x6f331c[_0x4a3d00(0x192)]))this[_0x4a3d00(0x17c)](_0x6f331c[_0x4a3d00(0x192)],_0x4a3d00(0x187),_0x4a3d00(0xe0),{'status':_0x4a3d00(0x187)});}catch(_0x26e163){this[_0x4a3d00(0x17c)](_0x6f331c[_0x4a3d00(0x192)],_0x4a3d00(0x137),_0x4a3d00(0x112),_0x26e163,_0x4a3d00(0x126));}}[_0x1ef510(0x10c)](_0x3b2c58,_0x598b41,_0xc81f3f){const _0x108095=_0x1ef510,_0x3acd98=record(_0xc81f3f),_0x4df506=record(_0x3acd98?.[_0x108095(0xd9)]),_0x45e40e=record(_0x4df506?.[_0x108095(0x10a)])??record(_0x4df506?.[_0x108095(0x191)]),_0x96e231=typeof _0x4df506?.[_0x108095(0x11b)]===_0x108095(0x14d)?_0x4df506[_0x108095(0x11b)]:typeof _0x45e40e?.[_0x108095(0x11b)]===_0x108095(0x14d)?_0x45e40e[_0x108095(0x11b)]:undefined;if(_0x96e231!==_0x598b41)return;if(_0x3acd98?.[_0x108095(0xf1)]===_0x108095(0x18d)){if(!this[_0x108095(0x162)][_0x108095(0x12f)](_0x3b2c58)){this[_0x108095(0x123)][_0x108095(0x111)](_0x3b2c58);return;}this[_0x108095(0x17c)](_0x3b2c58,_0x108095(0x187),_0x108095(0xe0),{'status':_0x108095(0x187)});return;}if(_0x3acd98?.[_0x108095(0xf1)]===_0x108095(0xf0)){this[_0x108095(0x17c)](_0x3b2c58,_0x108095(0x137),_0x108095(0x112),_0x4df506?.[_0x108095(0x130)]??_0x4df506);return;}if(_0x3acd98?.[_0x108095(0xf1)]===_0x108095(0xe7)){const _0x34433b=record(_0x4df506?.[_0x108095(0x10a)]),_0x50ecb2=openCodePart(_0x34433b,this[_0x108095(0x100)][_0x108095(0x113)][_0x108095(0x181)](_0x3b2c58)?.[_0x108095(0x161)]===_0x108095(0x102));if(_0x50ecb2!==undefined)this[_0x108095(0x14b)][_0x108095(0x11d)](_0x3b2c58,_0x50ecb2);return;}if(_0x3acd98?.[_0x108095(0xf1)]===_0x108095(0x188)){const _0x24f7db=record(_0x4df506?.[_0x108095(0x191)]);if(_0x24f7db?.[_0x108095(0x124)]===_0x108095(0x15b)&&typeof _0x24f7db[_0x108095(0x18e)]===_0x108095(0x14d))this[_0x108095(0x100)][_0x108095(0x115)][_0x108095(0xe9)](_0x24f7db[_0x108095(0x18e)],_0x3b2c58);return;}if(_0x3acd98?.[_0x108095(0xf1)]===_0x108095(0x17a))this[_0x108095(0x12d)](_0x3b2c58,_0x4df506);if(_0x3acd98?.[_0x108095(0xf1)]===_0x108095(0x17d))this[_0x108095(0xfb)](_0x3b2c58,_0x4df506);}[_0x1ef510(0x12d)](_0x131c4b,_0x2a984e){const _0x4fb59a=_0x1ef510,_0x15fbe8=this[_0x4fb59a(0x100)][_0x4fb59a(0x113)][_0x4fb59a(0x181)](_0x131c4b),_0x573399=typeof _0x2a984e?.['id']===_0x4fb59a(0x14d)?_0x2a984e['id']:undefined;if(_0x15fbe8===undefined||_0x573399===undefined)return;if(_0x15fbe8[_0x4fb59a(0x12c)]===_0x4fb59a(0x125)){void _0x15fbe8[_0x4fb59a(0xfd)][_0x4fb59a(0x163)](_0x15fbe8[_0x4fb59a(0xe8)],_0x573399,_0x4fb59a(0x11a));return;}const _0x2086c8=_0x4fb59a(0x10f)+_0x573399,_0x10e9b2=Date[_0x4fb59a(0x13f)]()+this[_0x4fb59a(0x132)],_0x18a393={'toolName':typeof _0x2a984e?.[_0x4fb59a(0x172)]===_0x4fb59a(0x14d)?_0x2a984e[_0x4fb59a(0x172)]:_0x4fb59a(0x170),'input':{'patterns':Array[_0x4fb59a(0xed)](_0x2a984e?.[_0x4fb59a(0x129)])?_0x2a984e[_0x4fb59a(0x129)]:[]}};try{this[_0x4fb59a(0x14b)][_0x4fb59a(0x14a)]({'runId':_0x131c4b,'approvalId':_0x2086c8,'payload':_0x18a393,'expiresAt':_0x10e9b2});}catch{void _0x15fbe8[_0x4fb59a(0xfd)][_0x4fb59a(0x163)](_0x15fbe8[_0x4fb59a(0xe8)],_0x573399,_0x4fb59a(0x13c));return;}const _0xa45403=()=>{const _0xff2d0a=_0x4fb59a,_0x55167d=this[_0xff2d0a(0x141)][_0xff2d0a(0x181)](_0x2086c8);if(_0x55167d===undefined)return;try{this[_0xff2d0a(0x14b)][_0xff2d0a(0x186)](_0x2086c8);}catch(_0x3a8c1a){if(_0x3a8c1a instanceof Error&&_0x3a8c1a[_0xff2d0a(0x180)]===_0xff2d0a(0x199)){const _0x78015=setTimeout(_0xa45403,Math[_0xff2d0a(0x16d)](-0x1*-0x1c1c+0xc54+0x1*-0x286f,_0x10e9b2-Date[_0xff2d0a(0x13f)]()));this[_0xff2d0a(0x141)][_0xff2d0a(0xe9)](_0x2086c8,{..._0x55167d,'timer':_0x78015});return;}}this[_0xff2d0a(0x141)][_0xff2d0a(0x151)](_0x2086c8),this[_0xff2d0a(0x14b)][_0xff2d0a(0x194)](_0x131c4b,_0xff2d0a(0x11e),{'approvalId':_0x2086c8}),void _0x15fbe8[_0xff2d0a(0xfd)][_0xff2d0a(0x163)](_0x15fbe8[_0xff2d0a(0xe8)],_0x573399,_0xff2d0a(0x13c));},_0x4d4b8f=setTimeout(_0xa45403,this[_0x4fb59a(0x132)]);this[_0x4fb59a(0x141)][_0x4fb59a(0xe9)](_0x2086c8,{'runId':_0x131c4b,'requestId':_0x573399,'client':_0x15fbe8[_0x4fb59a(0xfd)],'cwd':_0x15fbe8[_0x4fb59a(0xe8)],'timer':_0x4d4b8f}),this[_0x4fb59a(0x14b)][_0x4fb59a(0x118)]({'runId':_0x131c4b,'approvalId':_0x2086c8,'payload':_0x18a393,'expiresAt':_0x10e9b2});}[_0x1ef510(0xfb)](_0x3bdb78,_0x76141e){const _0x260e36=_0x1ef510,_0x319454=this[_0x260e36(0x100)][_0x260e36(0x113)][_0x260e36(0x181)](_0x3bdb78),_0x5c6f50=typeof _0x76141e?.['id']===_0x260e36(0x14d)?_0x76141e['id']:undefined,_0x2514d1=_0x76141e?.[_0x260e36(0x15d)];if(_0x319454===undefined||_0x5c6f50===undefined)return;const _0x60944b=openCodeQuestions(_0x2514d1);if(_0x60944b[_0x260e36(0xf3)]===0x1*0x693+0xe43+-0xe*0x17d||this[_0x260e36(0x15d)][_0x260e36(0x12f)](_0x5c6f50))return;const _0xb4bed2=setTimeout(()=>{const _0x17ff71=_0x260e36,_0x4927d2=this[_0x17ff71(0x15d)][_0x17ff71(0x181)](_0x5c6f50);if(_0x4927d2===undefined)return;this[_0x17ff71(0x15d)][_0x17ff71(0x151)](_0x5c6f50),void _0x4927d2[_0x17ff71(0xfd)][_0x17ff71(0x121)](_0x4927d2[_0x17ff71(0xe8)],_0x4927d2[_0x17ff71(0x19b)]),this[_0x17ff71(0x14b)][_0x17ff71(0x11d)](_0x3bdb78,{'itemId':boundedConversationItemId(_0x17ff71(0x128),_0x5c6f50),'kind':_0x17ff71(0x16e),'status':_0x17ff71(0x137),'payload':{'requestId':_0x5c6f50,'questions':_0x60944b,'errorCode':_0x17ff71(0x157)},'merge':!![]});},this[_0x260e36(0x132)]);this[_0x260e36(0x15d)][_0x260e36(0xe9)](_0x5c6f50,{'runId':_0x3bdb78,'requestId':_0x5c6f50,'client':_0x319454[_0x260e36(0xfd)],'cwd':_0x319454[_0x260e36(0xe8)],'questionIds':_0x60944b[_0x260e36(0x168)](_0x2f24ef=>_0x2f24ef['id']),'timer':_0xb4bed2}),this[_0x260e36(0x14b)][_0x260e36(0x11d)](_0x3bdb78,{'itemId':boundedConversationItemId(_0x260e36(0x128),_0x5c6f50),'kind':_0x260e36(0x16e),'status':_0x260e36(0x143),'payload':{'requestId':_0x5c6f50,'questions':_0x60944b}});}[_0x1ef510(0x17c)](_0x1cbeb6,_0x4e65b2,_0x1a4279,_0x1366e7,_0x1a56e8=_0x1ef510(0xf9)){const _0x3eda1e=_0x1ef510,_0x10c3f7=this[_0x3eda1e(0x100)][_0x3eda1e(0x113)][_0x3eda1e(0x181)](_0x1cbeb6),_0xa0c493=_0x10c3f7?.[_0x3eda1e(0xe8)]??this[_0x3eda1e(0x154)][_0x3eda1e(0x181)](_0x1cbeb6),_0x164b5c=_0x10c3f7?.[_0x3eda1e(0xfd)]??this[_0x3eda1e(0xee)][_0x3eda1e(0x181)](_0x1cbeb6);if(_0x10c3f7===undefined&&_0xa0c493===undefined&&_0x164b5c===undefined)return;_0x10c3f7?.[_0x3eda1e(0xec)][_0x3eda1e(0xec)](),this[_0x3eda1e(0x100)][_0x3eda1e(0x113)][_0x3eda1e(0x151)](_0x1cbeb6),this[_0x3eda1e(0x154)][_0x3eda1e(0x151)](_0x1cbeb6),this[_0x3eda1e(0xee)][_0x3eda1e(0x151)](_0x1cbeb6),this[_0x3eda1e(0x162)][_0x3eda1e(0x151)](_0x1cbeb6),this[_0x3eda1e(0x123)][_0x3eda1e(0x151)](_0x1cbeb6),this[_0x3eda1e(0x14b)][_0x3eda1e(0x13e)][_0x3eda1e(0x151)](_0x1cbeb6);for(const [_0x59989b,_0x1439ef]of this[_0x3eda1e(0x141)])_0x1439ef[_0x3eda1e(0x192)]===_0x1cbeb6&&(clearTimeout(_0x1439ef[_0x3eda1e(0x152)]),this[_0x3eda1e(0x141)][_0x3eda1e(0x151)](_0x59989b));for(const [_0x5287d4,_0x247a15]of this[_0x3eda1e(0x15d)])_0x247a15[_0x3eda1e(0x192)]===_0x1cbeb6&&(clearTimeout(_0x247a15[_0x3eda1e(0x152)]),this[_0x3eda1e(0x15d)][_0x3eda1e(0x151)](_0x5287d4));if(_0x4e65b2===_0x3eda1e(0x137)){const _0x200861=runnerErrorProjection(_0x1366e7,_0x1a56e8);this[_0x3eda1e(0x14b)][_0x3eda1e(0x11d)](_0x1cbeb6,{'itemId':boundedConversationItemId(_0x3eda1e(0x134),_0x1cbeb6),'kind':_0x3eda1e(0x130),'status':_0x3eda1e(0x137),'payload':{..._0x200861,'recoverable':!![],'retryAfterMs':null}}),_0x1366e7=_0x200861;}this[_0x3eda1e(0x14b)][_0x3eda1e(0x194)](_0x1cbeb6,_0x1a4279,_0x1366e7,_0x4e65b2);if(_0x164b5c!==undefined)this[_0x3eda1e(0x100)][_0x3eda1e(0xde)](_0x164b5c);}}function openCodeImageInput(_0x3c1039,_0x21ba8){const _0x2692e7=_0x1ef510;if(_0x21ba8[_0x2692e7(0xf3)]===0x167d+0x3*-0x243+-0xfb4)return _0x3c1039;const _0x57aef8=_0x21ba8[_0x2692e7(0x168)](_0x40fd67=>'-\x20'+JSON[_0x2692e7(0xf8)](_0x40fd67))[_0x2692e7(0x166)]('\x0a');return _0x3c1039+_0x2692e7(0x158)+_0x57aef8;}function hasMcpConfiguration(_0x4a64c){const _0x4d93b9=_0x1ef510;return _0x4a64c!==null&&typeof _0x4a64c===_0x4d93b9(0xff)&&Object[_0x4d93b9(0x18f)](_0x4a64c)[_0x4d93b9(0xf3)]>0x1*-0x685+-0x9*0x3e9+-0x13*-0x232;}function openCodePart(_0xf09243,_0x1cd3e8=![]){const _0xb90733=_0x1ef510,_0x3dbb54=typeof _0xf09243?.['id']===_0xb90733(0x14d)?_0xf09243['id']:undefined;if(_0x3dbb54===undefined||typeof _0xf09243?.[_0xb90733(0xf1)]!==_0xb90733(0x14d))return undefined;const _0x4a79f4=boundedConversationItemId(_0xb90733(0x103),_0x3dbb54);if(_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x160)&&typeof _0xf09243[_0xb90733(0x160)]===_0xb90733(0x14d))return{'itemId':_0x4a79f4,'kind':_0x1cd3e8?_0xb90733(0x102):_0xb90733(0xdc),'status':record(_0xf09243[_0xb90733(0x169)])?.[_0xb90733(0x13d)]===undefined?_0xb90733(0x16c):_0xb90733(0x12e),'payload':_0x1cd3e8?{'explanation':compactRunnerText(_0xf09243[_0xb90733(0x160)],-0x82b5+0xd*-0x83c+0x13be1),'steps':[]}:{'text':_0xf09243[_0xb90733(0x160)],'format':_0xb90733(0x171),'model':null},'merge':!![]};if(_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x14f)&&typeof _0xf09243[_0xb90733(0x160)]===_0xb90733(0x14d))return{'itemId':_0x4a79f4,'kind':_0xb90733(0x122),'status':record(_0xf09243[_0xb90733(0x169)])?.[_0xb90733(0x13d)]===undefined?_0xb90733(0x16c):_0xb90733(0x12e),'payload':{'sections':[{'index':0x0,'text':_0xf09243[_0xb90733(0x160)]}]},'merge':!![]};if(_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x182)&&typeof _0xf09243[_0xb90733(0x182)]===_0xb90733(0x14d)){if(_0xf09243[_0xb90733(0x182)]===_0xb90733(0x144))return undefined;const _0x16a788=record(_0xf09243[_0xb90733(0x16b)]),_0x4ccca5=_0x16a788?.[_0xb90733(0x19c)]===_0xb90733(0x116)?_0xb90733(0x12e):_0x16a788?.[_0xb90733(0x19c)]===_0xb90733(0x130)?_0xb90733(0x137):_0xb90733(0x16c);return{'itemId':_0x4a79f4,'kind':_0xb90733(0x14c),'status':_0x4ccca5,'payload':{'namespace':_0xb90733(0x103),'toolName':compactRunnerText(_0xf09243[_0xb90733(0x182)],-0x21ad+-0x557+0x2784),'title':compactRunnerText(typeof _0x16a788?.[_0xb90733(0x178)]===_0xb90733(0x14d)?_0x16a788[_0xb90733(0x178)]:_0xf09243[_0xb90733(0x182)],-0x95*0x3+0x3*0x457+0x4a9*-0x2),'inputSummary':compactRunnerValue(_0x16a788?.[_0xb90733(0x183)],-0x139f+0x6a*0x43+0x1ef1)[_0xb90733(0x160)]||null,'outputSummary':typeof _0x16a788?.[_0xb90733(0x101)]===_0xb90733(0x14d)?compactRunnerText(_0x16a788[_0xb90733(0x101)],-0x497e+-0x3*0xc61+0x95b1):null,'progressLabel':null,'errorCode':_0x4ccca5===_0xb90733(0x137)?_0xb90733(0x173):null,'truncated':![]},'merge':!![]};}if(_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x105))return{'itemId':_0x4a79f4,'kind':_0xb90733(0xf4),'status':_0xb90733(0x12e),'payload':{'phase':_0xb90733(0x12e),'summary':_0xb90733(0x156),'summaryCode':_0xb90733(0x146)}};if(_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x185))return{'itemId':_0x4a79f4,'kind':_0xb90733(0x14c),'status':_0xb90733(0x12e),'payload':openCodePatchToolPayload(),'merge':!![]};if(_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x195)||_0xf09243[_0xb90733(0xf1)]===_0xb90733(0xf5))return undefined;if(_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x160)||_0xf09243[_0xb90733(0xf1)]===_0xb90733(0x14f))return undefined;return{'itemId':_0x4a79f4,'kind':_0xb90733(0x148),'status':record(_0xf09243[_0xb90733(0x169)])?.[_0xb90733(0x13d)]===undefined?_0xb90733(0x16c):_0xb90733(0x12e),'payload':{'sourceEventType':_0xb90733(0x10f)+_0xf09243[_0xb90733(0xf1)],'label':_0xb90733(0x190)+compactRunnerText(_0xf09243[_0xb90733(0xf1)],0x1*-0x1d1+0x5b4+-0x363)},'merge':!![]};}function openCodeSessionId(_0x296cd2){const _0xf85b61=_0x1ef510,_0x22b26e=record(_0x296cd2);return typeof _0x22b26e?.['id']===_0xf85b61(0x14d)?_0x22b26e['id']:undefined;}function record(_0x1d78fa){const _0x234447=_0x1ef510;return typeof _0x1d78fa===_0x234447(0xff)&&_0x1d78fa!==null&&!Array[_0x234447(0xed)](_0x1d78fa)?_0x1d78fa:undefined;}
|