@quukk/opencode-clawmessenger 0.3.0 → 1.0.4
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/README.md +71 -623
- package/bin/opencode-clawmessenger +2 -2
- package/bin/opencode-clawmessenger-setup +5 -5
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +1 -288
- package/dist/core/auto-register.d.ts +0 -1
- package/dist/core/auto-register.js +1 -174
- package/dist/core/auto-serve.d.ts +13 -0
- package/dist/core/auto-serve.js +1 -0
- package/dist/core/config.d.ts +2 -3
- package/dist/core/config.js +1 -80
- package/dist/core/daemon.d.ts +0 -1
- package/dist/core/daemon.js +1 -77
- package/dist/core/dedup.d.ts +0 -1
- package/dist/core/dedup.js +1 -25
- package/dist/core/hook-manager.d.ts +0 -1
- package/dist/core/hook-manager.js +1 -33
- package/dist/core/logger.d.ts +0 -1
- package/dist/core/logger.js +1 -49
- package/dist/core/mac-address.d.ts +0 -1
- package/dist/core/mac-address.js +1 -43
- package/dist/core/message-handler.d.ts +0 -1
- package/dist/core/message-handler.js +1 -988
- package/dist/core/ops-assistant.d.ts +0 -1
- package/dist/core/ops-assistant.js +1 -270
- package/dist/core/qr-crypto.d.ts +0 -1
- package/dist/core/qr-crypto.js +1 -66
- package/dist/core/session-manager.d.ts +0 -1
- package/dist/core/session-manager.js +1 -144
- package/dist/core/types.d.ts +1 -2
- package/dist/core/types.js +1 -26
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -16
- package/dist/openclaw/client.d.ts +0 -1
- package/dist/openclaw/client.js +1 -494
- package/dist/opencode/client.d.ts +0 -1
- package/dist/opencode/client.js +1 -279
- package/dist/opencode/event-handler.d.ts +0 -1
- package/dist/opencode/event-handler.js +1 -467
- package/dist/plugin.d.ts +0 -1
- package/dist/plugin.js +1 -148
- package/dist/rongcloud/client.d.ts +0 -1
- package/dist/rongcloud/client.js +1 -292
- package/dist/rongcloud/env-polyfill.d.ts +0 -1
- package/dist/rongcloud/env-polyfill.js +1 -107
- package/dist/rongcloud/server-api.d.ts +0 -1
- package/dist/rongcloud/server-api.js +1 -157
- package/dist/standalone.d.ts +0 -1
- package/dist/standalone.js +1 -229
- package/dist/types/plugin.d.ts +0 -1
- package/dist/types/plugin.js +1 -2
- package/dist/websocket/client.d.ts +0 -1
- package/dist/websocket/client.js +1 -88
- package/dist/websocket/server-client.d.ts +0 -1
- package/dist/websocket/server-client.js +1 -98
- package/package.json +83 -81
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/core/auto-register.d.ts.map +0 -1
- package/dist/core/auto-register.js.map +0 -1
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js.map +0 -1
- package/dist/core/daemon.d.ts.map +0 -1
- package/dist/core/daemon.js.map +0 -1
- package/dist/core/dedup.d.ts.map +0 -1
- package/dist/core/dedup.js.map +0 -1
- package/dist/core/hook-manager.d.ts.map +0 -1
- package/dist/core/hook-manager.js.map +0 -1
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js.map +0 -1
- package/dist/core/mac-address.d.ts.map +0 -1
- package/dist/core/mac-address.js.map +0 -1
- package/dist/core/message-handler.d.ts.map +0 -1
- package/dist/core/message-handler.js.map +0 -1
- package/dist/core/ops-assistant.d.ts.map +0 -1
- package/dist/core/ops-assistant.js.map +0 -1
- package/dist/core/qr-crypto.d.ts.map +0 -1
- package/dist/core/qr-crypto.js.map +0 -1
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/openclaw/client.d.ts.map +0 -1
- package/dist/openclaw/client.js.map +0 -1
- package/dist/opencode/client.d.ts.map +0 -1
- package/dist/opencode/client.js.map +0 -1
- package/dist/opencode/event-handler.d.ts.map +0 -1
- package/dist/opencode/event-handler.js.map +0 -1
- package/dist/plugin.d.ts.map +0 -1
- package/dist/plugin.js.map +0 -1
- package/dist/rongcloud/client.d.ts.map +0 -1
- package/dist/rongcloud/client.js.map +0 -1
- package/dist/rongcloud/env-polyfill.d.ts.map +0 -1
- package/dist/rongcloud/env-polyfill.js.map +0 -1
- package/dist/rongcloud/server-api.d.ts.map +0 -1
- package/dist/rongcloud/server-api.js.map +0 -1
- package/dist/standalone.d.ts.map +0 -1
- package/dist/standalone.js.map +0 -1
- package/dist/types/plugin.d.ts.map +0 -1
- package/dist/types/plugin.js.map +0 -1
- package/dist/websocket/client.d.ts.map +0 -1
- package/dist/websocket/client.js.map +0 -1
- package/dist/websocket/server-client.d.ts.map +0 -1
- package/dist/websocket/server-client.js.map +0 -1
package/dist/opencode/client.js
CHANGED
|
@@ -1,279 +1 @@
|
|
|
1
|
-
import { createOpencodeClient } from '@opencode-ai/sdk/v2/client';
|
|
2
|
-
import { createLogger } from '../core/logger.js';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
import { existsSync, readFileSync } from 'fs';
|
|
5
|
-
const log = createLogger('OpenCodeClient');
|
|
6
|
-
/**
|
|
7
|
-
* 序列化错误对象为可读的字符串
|
|
8
|
-
* 解决 JSON.stringify(Error) 返回 {} 的问题
|
|
9
|
-
*/
|
|
10
|
-
export function serializeError(error) {
|
|
11
|
-
if (error instanceof Error) {
|
|
12
|
-
return error.message || error.name || 'Unknown Error';
|
|
13
|
-
}
|
|
14
|
-
if (typeof error === 'object' && error !== null) {
|
|
15
|
-
const err = error;
|
|
16
|
-
if (err.message)
|
|
17
|
-
return err.message;
|
|
18
|
-
if (err.error)
|
|
19
|
-
return typeof err.error === 'string' ? err.error : JSON.stringify(err.error);
|
|
20
|
-
if (err.detail)
|
|
21
|
-
return err.detail;
|
|
22
|
-
if (err.statusText)
|
|
23
|
-
return err.statusText;
|
|
24
|
-
return JSON.stringify(error);
|
|
25
|
-
}
|
|
26
|
-
return String(error);
|
|
27
|
-
}
|
|
28
|
-
export class OpenCodeClient {
|
|
29
|
-
constructor(options) {
|
|
30
|
-
this.baseUrl = options.baseUrl;
|
|
31
|
-
this.directory = options.directory || process.cwd();
|
|
32
|
-
const config = {
|
|
33
|
-
baseUrl: this.baseUrl,
|
|
34
|
-
directory: this.directory,
|
|
35
|
-
};
|
|
36
|
-
// 如果提供了密码,添加到请求头
|
|
37
|
-
if (options.password) {
|
|
38
|
-
config.headers = {
|
|
39
|
-
'Authorization': `Basic ${Buffer.from(`opencode:${options.password}`).toString('base64')}`
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
this.client = createOpencodeClient(config);
|
|
43
|
-
// 加载 system prompt
|
|
44
|
-
this.systemPrompt = this.loadSystemPrompt();
|
|
45
|
-
log.info({
|
|
46
|
-
hasSystemPrompt: !!this.systemPrompt,
|
|
47
|
-
systemPromptLength: this.systemPrompt?.length || 0,
|
|
48
|
-
directory: this.directory
|
|
49
|
-
}, 'OpenCodeClient initialized');
|
|
50
|
-
}
|
|
51
|
-
loadSystemPrompt() {
|
|
52
|
-
// 1. 首先尝试加载 soul/ 目录下的魂器文件(和 hunqi 插件相同逻辑)
|
|
53
|
-
const soulFiles = ['IDENTITY.md', 'SOUL.md', 'USER.md', 'AGENTS.md'];
|
|
54
|
-
const soulParts = [];
|
|
55
|
-
for (const filename of soulFiles) {
|
|
56
|
-
const filepath = join(this.directory, 'soul', filename);
|
|
57
|
-
if (existsSync(filepath)) {
|
|
58
|
-
try {
|
|
59
|
-
const content = readFileSync(filepath, 'utf-8');
|
|
60
|
-
if (content.trim().length > 0) {
|
|
61
|
-
soulParts.push(`=== ${filename} ===\n\n${content}`);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
catch (err) {
|
|
65
|
-
log.warn({ err, filepath }, 'Failed to read soul file');
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (soulParts.length > 0) {
|
|
70
|
-
const soulText = soulParts.join('\n\n---\n\n');
|
|
71
|
-
log.info({ soulFilesLoaded: soulParts.length, totalLength: soulText.length }, 'Loaded soul framework files');
|
|
72
|
-
return soulText;
|
|
73
|
-
}
|
|
74
|
-
// 2. 回退到 .opencode/prompt.md
|
|
75
|
-
try {
|
|
76
|
-
const promptPath = join(this.directory, '.opencode', 'prompt.md');
|
|
77
|
-
log.info({ promptPath }, 'Looking for system prompt');
|
|
78
|
-
if (existsSync(promptPath)) {
|
|
79
|
-
const content = readFileSync(promptPath, 'utf-8');
|
|
80
|
-
if (content.trim().length > 0) {
|
|
81
|
-
log.info({ path: promptPath, length: content.length }, 'Loaded system prompt');
|
|
82
|
-
return content;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
log.warn({ promptPath }, 'System prompt file not found');
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch (err) {
|
|
90
|
-
log.warn({ err }, 'Failed to load system prompt');
|
|
91
|
-
}
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
getBaseUrl() {
|
|
95
|
-
return this.baseUrl;
|
|
96
|
-
}
|
|
97
|
-
getSystemPrompt() {
|
|
98
|
-
return this.systemPrompt;
|
|
99
|
-
}
|
|
100
|
-
async createSession(title) {
|
|
101
|
-
const { data, error, response } = await this.client.session.create({ title, directory: this.directory });
|
|
102
|
-
if (error) {
|
|
103
|
-
const errStr = serializeError(error);
|
|
104
|
-
const statusText = response?.statusText ? ` [${response.status} ${response.statusText}]` : '';
|
|
105
|
-
throw new Error(`创建会话失败: ${errStr}${statusText}`);
|
|
106
|
-
}
|
|
107
|
-
const sessionId = data?.id || data?.session_id;
|
|
108
|
-
if (!sessionId)
|
|
109
|
-
throw new Error('创建会话返回空 ID');
|
|
110
|
-
log.info({ sessionId }, 'Session created');
|
|
111
|
-
return { id: sessionId };
|
|
112
|
-
}
|
|
113
|
-
async sessionExists(sessionId) {
|
|
114
|
-
try {
|
|
115
|
-
const { data } = await this.client.session.get({ sessionID: sessionId, directory: this.directory });
|
|
116
|
-
return !!data;
|
|
117
|
-
}
|
|
118
|
-
catch {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
async sendPromptAsync(sessionId, text) {
|
|
123
|
-
const { error, response } = await this.client.session.promptAsync({
|
|
124
|
-
sessionID: sessionId,
|
|
125
|
-
directory: this.directory,
|
|
126
|
-
system: this.systemPrompt,
|
|
127
|
-
parts: [{ type: 'text', text: text }],
|
|
128
|
-
});
|
|
129
|
-
if (error) {
|
|
130
|
-
const errStr = serializeError(error);
|
|
131
|
-
const statusText = response?.statusText ? ` [${response.status} ${response.statusText}]` : '';
|
|
132
|
-
throw new Error(`发送消息失败: ${errStr}${statusText}`);
|
|
133
|
-
}
|
|
134
|
-
log.info({ sessionId, hasSystemPrompt: !!this.systemPrompt }, 'promptAsync fired');
|
|
135
|
-
}
|
|
136
|
-
async sendPrompt(sessionId, text) {
|
|
137
|
-
const { error, response } = await this.client.session.prompt({
|
|
138
|
-
sessionID: sessionId,
|
|
139
|
-
directory: this.directory,
|
|
140
|
-
system: this.systemPrompt,
|
|
141
|
-
parts: [{ type: 'text', text: text }],
|
|
142
|
-
});
|
|
143
|
-
if (error) {
|
|
144
|
-
const errStr = serializeError(error);
|
|
145
|
-
const statusText = response?.statusText ? ` [${response.status} ${response.statusText}]` : '';
|
|
146
|
-
throw new Error(`发送消息失败: ${errStr}${statusText}`);
|
|
147
|
-
}
|
|
148
|
-
log.info({ sessionId }, 'Prompt sent, waiting for response');
|
|
149
|
-
return this.waitForResponse(sessionId);
|
|
150
|
-
}
|
|
151
|
-
async subscribeGlobalEvents() {
|
|
152
|
-
const result = await this.client.global.event({});
|
|
153
|
-
log.info('Global SSE stream connected');
|
|
154
|
-
return result;
|
|
155
|
-
}
|
|
156
|
-
async waitForResponse(sessionId) {
|
|
157
|
-
try {
|
|
158
|
-
await this.client.v2.session.wait({ sessionID: sessionId, directory: this.directory });
|
|
159
|
-
log.info({ sessionId }, 'Session completed');
|
|
160
|
-
for (let i = 0; i < 30; i++) {
|
|
161
|
-
const { data: messages } = await this.client.session.messages({ sessionID: sessionId, directory: this.directory });
|
|
162
|
-
if (messages && Array.isArray(messages) && messages.length > 0) {
|
|
163
|
-
const lastMsg = messages[messages.length - 1];
|
|
164
|
-
if (lastMsg.parts && lastMsg.parts.length > 0) {
|
|
165
|
-
const textPart = lastMsg.parts.find((p) => p.type === 'text');
|
|
166
|
-
if (textPart && textPart.text) {
|
|
167
|
-
return textPart.text;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
172
|
-
}
|
|
173
|
-
return '回复已生成但无法读取内容';
|
|
174
|
-
}
|
|
175
|
-
catch (err) {
|
|
176
|
-
log.error({ err, sessionId }, '等待会话完成失败');
|
|
177
|
-
return '响应超时,请稍后重试';
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
async fetchLastMessageText(sessionId) {
|
|
181
|
-
try {
|
|
182
|
-
const { data: messages } = await this.client.session.messages({ sessionID: sessionId, directory: this.directory });
|
|
183
|
-
log.info({ messageCount: messages?.length }, 'Fetched messages');
|
|
184
|
-
if (messages && Array.isArray(messages) && messages.length > 0) {
|
|
185
|
-
// 从后往前找 AI 的回复
|
|
186
|
-
for (let i = messages.length - 1; i >= 0; i--) {
|
|
187
|
-
const msg = messages[i];
|
|
188
|
-
const role = msg.role || msg.author?.role;
|
|
189
|
-
log.info({ index: i, role, info: msg.info, keys: Object.keys(msg).slice(0, 10), hasParts: !!msg.parts, partCount: msg.parts?.length }, 'Checking message');
|
|
190
|
-
if (role === 'assistant' || role === 'model') {
|
|
191
|
-
if (msg.parts && msg.parts.length > 0) {
|
|
192
|
-
const textPart = msg.parts.find((p) => p.type === 'text');
|
|
193
|
-
if (textPart?.text) {
|
|
194
|
-
log.info({ textLength: textPart.text.length }, 'Found AI response');
|
|
195
|
-
return textPart.text;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
// 如果没找到 assistant 消息,返回最后一条消息的文本(可能是不同格式)
|
|
201
|
-
const lastMsg = messages[messages.length - 1];
|
|
202
|
-
if (lastMsg.parts && lastMsg.parts.length > 0) {
|
|
203
|
-
const textPart = lastMsg.parts.find((p) => p.type === 'text');
|
|
204
|
-
if (textPart?.text) {
|
|
205
|
-
log.info({ role: lastMsg.role || lastMsg.author?.role, textLength: textPart.text.length }, 'Using last message as fallback');
|
|
206
|
-
return textPart.text;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
catch (err) {
|
|
212
|
-
log.error({ err: err.message }, 'Failed to fetch messages');
|
|
213
|
-
}
|
|
214
|
-
return null;
|
|
215
|
-
}
|
|
216
|
-
async sendCommand(sessionId, command) {
|
|
217
|
-
try {
|
|
218
|
-
await this.client.session.prompt({
|
|
219
|
-
sessionID: sessionId,
|
|
220
|
-
directory: this.directory,
|
|
221
|
-
parts: [{ type: 'text', text: command }],
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
catch (err) {
|
|
225
|
-
log.warn({ err, sessionId, command }, 'Command failed');
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
async deleteSession(sessionId) {
|
|
229
|
-
try {
|
|
230
|
-
await this.client.session.delete({ sessionID: sessionId });
|
|
231
|
-
log.info({ sessionId }, 'Session deleted');
|
|
232
|
-
}
|
|
233
|
-
catch (err) {
|
|
234
|
-
log.error({ err, sessionId }, '删除会话失败');
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
async listSessions() {
|
|
238
|
-
try {
|
|
239
|
-
const { data } = await this.client.session.list({});
|
|
240
|
-
return data || [];
|
|
241
|
-
}
|
|
242
|
-
catch {
|
|
243
|
-
return [];
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
export async function checkOpencodeStatus(opencodeUrl, password) {
|
|
248
|
-
const headers = {};
|
|
249
|
-
if (password) {
|
|
250
|
-
headers['Authorization'] = `Basic ${Buffer.from(`opencode:${password}`).toString('base64')}`;
|
|
251
|
-
}
|
|
252
|
-
// 尝试多个端点,因为不同版本的 OpenCode 可能响应不同的路径
|
|
253
|
-
const endpoints = [
|
|
254
|
-
`${opencodeUrl}/health`,
|
|
255
|
-
`${opencodeUrl}/api/health`,
|
|
256
|
-
`${opencodeUrl}/v1/health`,
|
|
257
|
-
opencodeUrl, // 最后尝试根路径
|
|
258
|
-
];
|
|
259
|
-
for (const url of endpoints) {
|
|
260
|
-
try {
|
|
261
|
-
log.debug({ url }, 'Trying OpenCode health endpoint');
|
|
262
|
-
const controller = new AbortController();
|
|
263
|
-
const timeoutId = setTimeout(() => controller.abort(), 2000);
|
|
264
|
-
const response = await fetch(url, { method: 'GET', headers, signal: controller.signal });
|
|
265
|
-
clearTimeout(timeoutId);
|
|
266
|
-
if (response.ok || response.status === 401) {
|
|
267
|
-
log.info({ url, status: response.status }, 'OpenCode status check success');
|
|
268
|
-
return true;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
catch (err) {
|
|
272
|
-
log.debug({ url, err: err.message }, 'OpenCode endpoint check failed');
|
|
273
|
-
// 继续尝试下一个端点
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
log.warn({ opencodeUrl }, 'OpenCode status check failed on all endpoints');
|
|
277
|
-
return false;
|
|
278
|
-
}
|
|
279
|
-
//# sourceMappingURL=client.js.map
|
|
1
|
+
const a0_0x155d07=a0_0x39db;(function(_0x65499e,_0x58eeb8){const _0x4c10a1=a0_0x39db,_0x42f13e=_0x65499e();while(!![]){try{const _0x1f1968=parseInt(_0x4c10a1(0x21b))/0x1*(-parseInt(_0x4c10a1(0x272))/0x2)+parseInt(_0x4c10a1(0x1f8))/0x3+parseInt(_0x4c10a1(0x208))/0x4*(-parseInt(_0x4c10a1(0x23d))/0x5)+parseInt(_0x4c10a1(0x20c))/0x6+parseInt(_0x4c10a1(0x209))/0x7+parseInt(_0x4c10a1(0x1e1))/0x8+-parseInt(_0x4c10a1(0x266))/0x9;if(_0x1f1968===_0x58eeb8)break;else _0x42f13e['push'](_0x42f13e['shift']());}catch(_0x52b587){_0x42f13e['push'](_0x42f13e['shift']());}}}(a0_0x5211,0xc609f));import{createOpencodeClient}from'@opencode-ai/sdk/v2/client';import{createLogger}from'../core/logger.js';import{join}from'path';function a0_0x5211(){const _0x361fae=['C3jNwuK','vgLvDK8','s3DRuhq','B2LNyxy','sefQAee','Bw9KzwW','wLD5ug8','y2XPzw50','wefivgG','reXhDwS','A2XLz2u','u3LZDgvTihbYB21WDcbMAwXLig5VDcbMB3vUza','rMfPBgvKihrVigXVywqGC3LZDgvTihbYB21WDa','tunVrum','rNHNyvu','DLzlEvG','u2vZC2LVBIbJCMvHDgvK','DxrMltG','B3bLBMnVzgu6','B3nNqMe','rLz1sg8','AxnbCNjHEq','B2jQzwn0','EMXft0e','qKnvC2K','ChjVBxb0qxn5BMmGzMLYzwq','mtaWntuWndHcrffrwfC','t3bLBKnVzguGC3rHDhvZignOzwnRigzHAwXLzcbVBIbHBgWGzw5KCg9PBNrZ','BK1zsNq','z2XVyMfS','Dg9tDhjPBMC','ugTHtu8','qvL0vNe','uhnhCK4','lM9Wzw5JB2rL','D2fPDa','qKTqyMG','vw5RBM93BIbfCNjVCG','zMLUza','s2DWtfe','r0vu','BffdDxq','C2DKC3q','sLPJAha','ChvZAa','zxzLBNq','surftLrjvfKUBwq','5yIB5BU65lYA6k+D6l+u5zUE56M6ieLe','t3bLBKnVzguGC3rHDhvZignOzwnRihn1y2nLC3m','mtGWmJyYoez1rhbfAq','ELDIsgq','zxjYB3i','Bu92qM4','rKTrrvi','EfDor3y','DhLWzq','ywjVCNq','A3PRs1a','zNjVBq','D2fPDezVCLjLC3bVBNnL','D3nPsfG','562j5B6f5lYA6k+D5A6m5OIq5AsX6lsL','Eg5cAuu','CgnxzLq','D2fYBG','mJa1ode3mKfxqxbpEG','ntC4mdq2mfz6uM5fwa','quTeCxO','tvLZu0S','ody2ntC4mNbcwM9VBG','z2TuBfO','pt09ia','CgfZC3DVCMq','C3rHDhvZ','Aw5MBW','Dgv4Da','tK9mD0S','z3LjsK0','z2v0u3LZDgvTuhjVBxb0','rwnHzfi','v05jrva','zgv0ywLS','yMfZzty0','BxLgwKK','mLrRtLnUCG','vuLswKK','zMros1m','s3jIrvG','uun3t0y','CgfYDhm','ChjVBxb0lM1K','yxv0Ag9Y','vvnfuI5Tza','vhj5Aw5Nie9Wzw5dB2rLigHLywX0AcbLBMrWB2LUDa','AenOCfO','l2fWAs9OzwfSDgG','BevhuwK','AufrCgG','t3bLBKnVzguGzw5KCg9PBNqGy2HLy2SGzMfPBgvK','q2HLy2TPBMCGBwvZC2fNzq','z2v0','qMfZAwmG','DfzMrhG','ANnerwO','A2v5CW','u09vtc5Tza','t1jvzu0','zgvSzxrLu2vZC2LVBG','AgvHzgvYCW','zNPbv1u','q3zMvfm','tKHPCNG','z3vlyxa','BgLZDa','s3jPy0y','tg9HzgvKihn5C3rLBsbWCM9TChq','rxPTAxC','Bg9Hzfn5C3rLBvbYB21WDa','nwHxwKHcsa','wNvmvgi','A0n2vg0','thDMBwG','rNjtvg0','DgTIrxi','DNjruhG','qxfuz3u','qwzqtLm','Eurez3i','Ee5uDNK','C2vZC2LVBG','wgPkEvK','r1nHDfu','tMrMqK4','ELDOy3i','BenWEhu','AvfstMG','yMfZzvvYBa','r2P0y20','ChjVBxb0','quDftLrtlM1K','DvvtA2e','vNvqsLy','yvPPtxe','A3jhEee','swPVA00','BePyBwi','l2HLywX0Aa','yvPhD3m','q2XYEMO','C2vZC2LVBL9Pza','DxrNshq','EgXLuwi','5y+r6ycb5RAi5OgV5AsX6lsLoIa','q2z3A2i','sgLYyM0','rMfPBgvKihrVihjLywqGC291BcbMAwXL','q21Auxm','ALv5yNy','BgvUz3rO','mti1otqXntbRz1f0C1C','zgvIDwC','r3DHzue','BwvZC2fNzq','C3rYAw5NAwz5','CM9Szq','D1zJDfO','B2D0zhG','C2vZC2LVBKv4Axn0CW','zgLYzwn0B3j5','v0Pgzw0','AunYyNa','mtqWmJC3nfjWCLz0ra','BhjKDMS','B2XHsfG','qxLMDvi','C3LZDgvTuhjVBxb0','C291Ba','vxvxC2e','C2vUzfbYB21WDa','CLbjrwu','qNvKwNi','D0HWC1u','AwzzsMe','yxnZAxn0yw50','ChjVBxb0qxn5BMm','Cw1Ty2y','y3jLyxrLu2vZC2LVBG','zMv0y2Hmyxn0twvZC2fNzvrLEhq','rM91BMqGquKGCMvZCg9UC2u','zuzer08','CK1iA2C','z2v0qMfZzvvYBa','r2XVyMfSifntrsbZDhjLyw0Gy29UBMvJDgvK','AgfsteS','t3bLBKnVzgvdBgLLBNqGAw5PDgLHBgL6zwq','u2HcD2C','rg9tvKK','rxPxAeO','tg9HzgvKihnVDwWGzNjHBwv3B3jRigzPBgvZ','q29TBwfUzcbMywLSzwq','BwvZC2fNzxm','C3rHDhvZvgv4Da','5yIB5BU65lYA6k+D5AsX6lsLoIa','tKrItNm','vhH4yKu','vKvyEgW','l3yXl2HLywX0Aa','rK5Qww4','vxnPBMCGBgfZDcbTzxnZywDLigfZigzHBgXIywnR','C3rYAw5N','C2XPy2u','5zUE5Asn5BEY55sF5OIq5l2g5PEG5Rov6k+75y+w5yAf5A65','uvbvBgi','A1r4q2W','rLH6Ahi','BMfTzq','C2DQy3e','uKP5Avq','CgPfq2q','svvkufO','DhjPBq'];a0_0x5211=function(){return _0x361fae;};return a0_0x5211();}import{existsSync,readFileSync}from'fs';const log=createLogger('OpenCodeClient');export function serializeError(_0x580915){const _0x4d5b29=a0_0x39db,_0xb7c22b={'LrHyk':function(_0x5bce67,_0x12f609,_0x31cc23){return _0x5bce67(_0x12f609,_0x31cc23);},'Tdbor':function(_0x30a346,_0x417e27){return _0x30a346>_0x417e27;},'Wuhut':function(_0x28b293,_0x170eb7){return _0x28b293!==_0x170eb7;},'tVfDx':'LJxJH','EcadR':_0x4d5b29(0x1ec),'wsiHX':function(_0x3f1c5c,_0x21b10c){return _0x3f1c5c===_0x21b10c;},'EzWhJ':function(_0x3718fc,_0x2ad933){return _0x3718fc!==_0x2ad933;},'UIRZI':function(_0x24ab30,_0x213eb){return _0x24ab30(_0x213eb);}};if(_0x580915 instanceof Error){if(_0xb7c22b['Wuhut'](_0x4d5b29(0x26d),_0xb7c22b[_0x4d5b29(0x22d)]))return _0x580915[_0x4d5b29(0x269)]||_0x580915[_0x4d5b29(0x1c1)]||_0xb7c22b[_0x4d5b29(0x216)];else{const _0x4ab006=_0xb7c22b['LrHyk'](_0x4f1dc3,_0x61fb24,_0x4d5b29(0x1d8));_0xb7c22b['Tdbor'](_0x4ab006['trim']()[_0x4d5b29(0x265)],0x0)&&_0x3cdc97[_0x4d5b29(0x1f3)]('===\x20'+_0x5491+'\x20===\x0a\x0a'+_0x4ab006);}}if(_0xb7c22b[_0x4d5b29(0x203)](typeof _0x580915,_0x4d5b29(0x1dd))&&_0xb7c22b[_0x4d5b29(0x1af)](_0x580915,null)){const _0x58c5f7=_0x580915;if(_0x58c5f7[_0x4d5b29(0x269)])return _0x58c5f7[_0x4d5b29(0x269)];if(_0x58c5f7[_0x4d5b29(0x1fa)])return _0xb7c22b[_0x4d5b29(0x203)](typeof _0x58c5f7[_0x4d5b29(0x1fa)],_0x4d5b29(0x1bb))?_0x58c5f7[_0x4d5b29(0x1fa)]:JSON['stringify'](_0x58c5f7['error']);if(_0x58c5f7['detail'])return _0x58c5f7[_0x4d5b29(0x218)];if(_0x58c5f7[_0x4d5b29(0x1b3)])return _0x58c5f7[_0x4d5b29(0x1b3)];return JSON['stringify'](_0x580915);}return _0xb7c22b[_0x4d5b29(0x21c)](String,_0x580915);}export class OpenCodeClient{constructor(_0x2cca24){const _0x413daa=a0_0x39db,_0x3453a8={'uDedE':function(_0x5a3ee9,_0x570b3d){return _0x5a3ee9===_0x570b3d;},'Qamra':_0x413daa(0x1fd),'cGLZH':function(_0x305df1,_0x5697ec){return _0x305df1(_0x5697ec);}};this['baseUrl']=_0x2cca24['baseUrl'],this[_0x413daa(0x26f)]=_0x2cca24[_0x413daa(0x26f)]||process['cwd']();const _0x277509={'baseUrl':this[_0x413daa(0x24f)],'directory':this[_0x413daa(0x26f)]};if(_0x2cca24[_0x413daa(0x20f)]){if(_0x3453a8['uDedE'](_0x3453a8['Qamra'],_0x3453a8['Qamra']))_0x277509[_0x413daa(0x233)]={'Authorization':_0x413daa(0x22c)+Buffer[_0x413daa(0x201)](_0x413daa(0x1d9)+_0x2cca24[_0x413daa(0x20f)])[_0x413daa(0x1e5)]('base64')};else return _0x48e059[_0x413daa(0x212)];}this[_0x413daa(0x1ce)]=_0x3453a8['cGLZH'](createOpencodeClient,_0x277509),this[_0x413daa(0x276)]=this[_0x413daa(0x23c)](),log['info']({'hasSystemPrompt':!!this['systemPrompt'],'systemPromptLength':this[_0x413daa(0x276)]?.[_0x413daa(0x265)]||0x0,'directory':this[_0x413daa(0x26f)]},_0x413daa(0x1ac));}[a0_0x155d07(0x23c)](){const _0x317dfa=a0_0x155d07,_0x24f58d={'OCJeR':_0x317dfa(0x283),'AyfuR':_0x317dfa(0x22a),'ORUeM':function(_0x54923e,_0x4cea11){return _0x54923e===_0x4cea11;},'GSatU':_0x317dfa(0x27e),'ZvoEZ':'model','srgYI':function(_0x43a906,_0x266d90){return _0x43a906>_0x266d90;},'WJFem':_0x317dfa(0x221),'FKQER':'Looking\x20for\x20system\x20prompt','krGxA':function(_0x70a1f1,_0x433172,_0x1fb1d7){return _0x70a1f1(_0x433172,_0x1fb1d7);},'KwkPt':_0x317dfa(0x1d8),'XAHTh':'Loaded\x20system\x20prompt','FxgaU':_0x317dfa(0x1d2),'rUQFd':_0x317dfa(0x1f5),'sgdst':_0x317dfa(0x223),'qDWPr':function(_0x2ab05f,_0xd38571,_0x54bbed,_0x11f40d){return _0x2ab05f(_0xd38571,_0x54bbed,_0x11f40d);},'ZuLTb':function(_0xcde169,_0x203750){return _0xcde169(_0x203750);},'mOvBn':'Wakfy','vVKyX':_0x317dfa(0x288),'VEXxl':_0x317dfa(0x26c),'JwnVX':'QOPtP','uUSka':_0x317dfa(0x262),'lJXmb':function(_0x661254,_0x5bcb9a){return _0x661254===_0x5bcb9a;},'guKap':_0x317dfa(0x1c4),'fdNKS':'\x0a\x0a---\x0a\x0a','lEGQi':_0x317dfa(0x1b0),'jsDEj':function(_0x46edff,_0x56b529,_0x445105,_0x528a82){return _0x46edff(_0x56b529,_0x445105,_0x528a82);},'fzAWU':_0x317dfa(0x1e9),'BKPbh':function(_0x2f44c0,_0x15949a,_0x26ef2d){return _0x2f44c0(_0x15949a,_0x26ef2d);},'LnqbS':function(_0x203ac0,_0x4e9138){return _0x203ac0>_0x4e9138;},'yDDgr':_0x317dfa(0x1d3)},_0x40d6ff=[_0x24f58d['rUQFd'],_0x317dfa(0x230),_0x24f58d[_0x317dfa(0x1f1)],_0x317dfa(0x252)],_0x5109c2=[];for(const _0x464ccf of _0x40d6ff){const _0x72dbbb=_0x24f58d['qDWPr'](join,this[_0x317dfa(0x26f)],_0x317dfa(0x277),_0x464ccf);if(_0x24f58d[_0x317dfa(0x23e)](existsSync,_0x72dbbb)){if(_0x24f58d[_0x317dfa(0x1fb)]!==_0x24f58d[_0x317dfa(0x1d6)])try{if(_0x24f58d[_0x317dfa(0x1b7)]!==_0x24f58d['JwnVX']){const _0x523d21=readFileSync(_0x72dbbb,_0x24f58d[_0x317dfa(0x1c9)]);_0x523d21[_0x317dfa(0x1c6)]()[_0x317dfa(0x265)]>0x0&&_0x5109c2['push'](_0x317dfa(0x20e)+_0x464ccf+'\x20===\x0a\x0a'+_0x523d21);}else return _0x390ab1[_0x317dfa(0x211)]({'textLength':_0x51d7e2['text'][_0x317dfa(0x265)]},_0x24f58d['OCJeR']),_0x3c3316[_0x317dfa(0x212)];}catch(_0x4d99c9){log[_0x317dfa(0x207)]({'err':_0x4d99c9,'filepath':_0x72dbbb},_0x24f58d[_0x317dfa(0x253)]);}else{const _0x2cb4d4=_0x13d58c[_0x4cb4b2],_0x37669d=_0x2cb4d4[_0x317dfa(0x26b)]||_0x2cb4d4[_0x317dfa(0x222)]?.[_0x317dfa(0x26b)];_0x5cf2b4[_0x317dfa(0x211)]({'index':_0x433b29,'role':_0x37669d,'info':_0x2cb4d4[_0x317dfa(0x211)],'keys':_0x2860ae[_0x317dfa(0x22f)](_0x2cb4d4)['slice'](0x0,0xa),'hasParts':!!_0x2cb4d4[_0x317dfa(0x220)],'partCount':_0x2cb4d4['parts']?.[_0x317dfa(0x265)]},_0x24f58d[_0x317dfa(0x275)]);if(_0x24f58d['ORUeM'](_0x37669d,_0x24f58d[_0x317dfa(0x24a)])||_0x24f58d[_0x317dfa(0x231)](_0x37669d,_0x24f58d['ZvoEZ'])){if(_0x2cb4d4['parts']&&_0x24f58d[_0x317dfa(0x1c7)](_0x2cb4d4[_0x317dfa(0x220)][_0x317dfa(0x265)],0x0)){const _0x1da485=_0x2cb4d4[_0x317dfa(0x220)][_0x317dfa(0x1ed)](_0x3ea343=>_0x3ea343[_0x317dfa(0x1fe)]===_0x317dfa(0x212));if(_0x1da485?.[_0x317dfa(0x212)])return _0xab40d2[_0x317dfa(0x211)]({'textLength':_0x1da485[_0x317dfa(0x212)][_0x317dfa(0x265)]},_0x317dfa(0x283)),_0x1da485[_0x317dfa(0x212)];}}}}}if(_0x24f58d['srgYI'](_0x5109c2[_0x317dfa(0x265)],0x0)){if(_0x24f58d[_0x317dfa(0x258)](_0x24f58d[_0x317dfa(0x237)],'iHEfC')){const _0x3129da=_0x171858(this[_0x317dfa(0x26f)],_0x317dfa(0x1e9),_0x24f58d['WJFem']);_0x5741e2['info']({'promptPath':_0x3129da},_0x24f58d['FKQER']);if(_0x4205aa(_0x3129da)){const _0x247608=_0x24f58d[_0x317dfa(0x256)](_0x31e24e,_0x3129da,_0x24f58d['KwkPt']);if(_0x24f58d[_0x317dfa(0x1c7)](_0x247608['trim']()[_0x317dfa(0x265)],0x0))return _0x2cc611['info']({'path':_0x3129da,'length':_0x247608[_0x317dfa(0x265)]},_0x24f58d[_0x317dfa(0x1cf)]),_0x247608;}else _0x5a86b5[_0x317dfa(0x207)]({'promptPath':_0x3129da},_0x24f58d[_0x317dfa(0x1d5)]);}else{const _0x12bb0a=_0x5109c2['join'](_0x24f58d[_0x317dfa(0x21d)]);return log[_0x317dfa(0x211)]({'soulFilesLoaded':_0x5109c2[_0x317dfa(0x265)],'totalLength':_0x12bb0a[_0x317dfa(0x265)]},_0x24f58d[_0x317dfa(0x227)]),_0x12bb0a;}}try{const _0x520635=_0x24f58d[_0x317dfa(0x22e)](join,this[_0x317dfa(0x26f)],_0x24f58d[_0x317dfa(0x234)],_0x24f58d[_0x317dfa(0x270)]);log[_0x317dfa(0x211)]({'promptPath':_0x520635},_0x24f58d[_0x317dfa(0x1fc)]);if(existsSync(_0x520635)){const _0x486a24=_0x24f58d[_0x317dfa(0x1eb)](readFileSync,_0x520635,_0x24f58d[_0x317dfa(0x1c9)]);if(_0x24f58d['LnqbS'](_0x486a24[_0x317dfa(0x1c6)]()[_0x317dfa(0x265)],0x0))return log[_0x317dfa(0x211)]({'path':_0x520635,'length':_0x486a24[_0x317dfa(0x265)]},_0x317dfa(0x23a)),_0x486a24;}else log[_0x317dfa(0x207)]({'promptPath':_0x520635},_0x24f58d['FxgaU']);}catch(_0x262b1e){log[_0x317dfa(0x207)]({'err':_0x262b1e},_0x24f58d[_0x317dfa(0x246)]);}return undefined;}[a0_0x155d07(0x286)](){const _0x8669ad=a0_0x155d07;return this[_0x8669ad(0x24f)];}[a0_0x155d07(0x215)](){const _0x3bb1b3=a0_0x155d07;return this[_0x3bb1b3(0x276)];}async[a0_0x155d07(0x281)](_0x5b84b2){const _0x1dd0cc=a0_0x155d07,_0x52eaf8={'Hirbm':_0x1dd0cc(0x1cd),'DLGuk':_0x1dd0cc(0x1d7)},{data:_0x4d7300,error:_0x373ccf,response:_0xbf2707}=await this['client'][_0x1dd0cc(0x248)]['create']({'title':_0x5b84b2,'directory':this[_0x1dd0cc(0x26f)]});if(_0x373ccf){if(_0x52eaf8[_0x1dd0cc(0x261)]===_0x52eaf8[_0x1dd0cc(0x261)]){const _0x45324f=serializeError(_0x373ccf),_0x7c7043=_0xbf2707?.[_0x1dd0cc(0x1b3)]?'\x20['+_0xbf2707['status']+'\x20'+_0xbf2707[_0x1dd0cc(0x1b3)]+']':'';throw new Error(_0x1dd0cc(0x1b4)+_0x45324f+_0x7c7043);}else{if(_0x97f8be['parts']&&_0x1c3dd7['parts'][_0x1dd0cc(0x265)]>0x0){const _0x277726=_0x288642[_0x1dd0cc(0x220)][_0x1dd0cc(0x1ed)](_0x3565b8=>_0x3565b8['type']===_0x1dd0cc(0x212));if(_0x277726?.[_0x1dd0cc(0x212)])return _0x80a50c[_0x1dd0cc(0x211)]({'textLength':_0x277726[_0x1dd0cc(0x212)][_0x1dd0cc(0x265)]},_0x1dd0cc(0x283)),_0x277726[_0x1dd0cc(0x212)];}}}const _0xe5d848=_0x4d7300?.['id']||_0x4d7300?.[_0x1dd0cc(0x25c)];if(!_0xe5d848)throw new Error(_0x1dd0cc(0x1f6));return log['info']({'sessionId':_0xe5d848},_0x52eaf8[_0x1dd0cc(0x1d0)]),{'id':_0xe5d848};}async[a0_0x155d07(0x26e)](_0x5a6912){const _0x1672e6=a0_0x155d07;try{const {data:_0xcbf9e0}=await this[_0x1672e6(0x1ce)][_0x1672e6(0x248)][_0x1672e6(0x22b)]({'sessionID':_0x5a6912,'directory':this['directory']});return!!_0xcbf9e0;}catch{return![];}}async['sendPromptAsync'](_0x5711b0,_0x1b2e39){const _0x417244=a0_0x155d07,_0x3cf2c8={'JZchp':_0x417244(0x212),'bnqvH':_0x417244(0x1e0)},{error:_0x456134,response:_0xca515}=await this['client'][_0x417244(0x248)][_0x417244(0x27f)]({'sessionID':_0x5711b0,'directory':this[_0x417244(0x26f)],'system':this[_0x417244(0x276)],'parts':[{'type':_0x3cf2c8[_0x417244(0x1f2)],'text':_0x1b2e39}]});if(_0x456134){const _0x229030=serializeError(_0x456134),_0x5ac4c1=_0xca515?.[_0x417244(0x1b3)]?'\x20['+_0xca515[_0x417244(0x210)]+'\x20'+_0xca515[_0x417244(0x1b3)]+']':'';throw new Error(_0x417244(0x25f)+_0x229030+_0x5ac4c1);}log[_0x417244(0x211)]({'sessionId':_0x5711b0,'hasSystemPrompt':!!this['systemPrompt']},_0x3cf2c8['bnqvH']);}async[a0_0x155d07(0x279)](_0x143d3f,_0x478634){const _0x4c77fd=a0_0x155d07,_0x2551cd={'CvfTS':_0x4c77fd(0x219),'VuPJV':function(_0x13e07f,_0xfd6cb4){return _0x13e07f(_0xfd6cb4);},'HAjhA':_0x4c77fd(0x25e),'MYsSK':'rClFp','lQCut':function(_0x13402d,_0x597d1c){return _0x13402d(_0x597d1c);},'RJyiT':'Prompt\x20sent,\x20waiting\x20for\x20response'},{error:_0x1e8da6,response:_0x30420c}=await this[_0x4c77fd(0x1ce)][_0x4c77fd(0x248)][_0x4c77fd(0x251)]({'sessionID':_0x143d3f,'directory':this[_0x4c77fd(0x26f)],'system':this[_0x4c77fd(0x276)],'parts':[{'type':_0x4c77fd(0x212),'text':_0x478634}]});if(_0x1e8da6){if(_0x2551cd[_0x4c77fd(0x1cb)]===_0x2551cd[_0x4c77fd(0x20b)]){this[_0x4c77fd(0x24f)]=_0x55962b[_0x4c77fd(0x24f)],this[_0x4c77fd(0x26f)]=_0x565228[_0x4c77fd(0x26f)]||_0x34f176['cwd']();const _0x20730d={'baseUrl':this[_0x4c77fd(0x24f)],'directory':this[_0x4c77fd(0x26f)]};_0x379838[_0x4c77fd(0x20f)]&&(_0x20730d['headers']={'Authorization':_0x4c77fd(0x22c)+_0x2974c5[_0x4c77fd(0x201)]('opencode:'+_0x3a07a3[_0x4c77fd(0x20f)])[_0x4c77fd(0x1e5)](udRzUa[_0x4c77fd(0x235)])}),this['client']=udRzUa[_0x4c77fd(0x254)](_0x4277b1,_0x20730d),this[_0x4c77fd(0x276)]=this[_0x4c77fd(0x23c)](),_0x23a46d[_0x4c77fd(0x211)]({'hasSystemPrompt':!!this[_0x4c77fd(0x276)],'systemPromptLength':this['systemPrompt']?.[_0x4c77fd(0x265)]||0x0,'directory':this[_0x4c77fd(0x26f)]},'OpenCodeClient\x20initialized');}else{const _0x241da1=_0x2551cd[_0x4c77fd(0x1f0)](serializeError,_0x1e8da6),_0xc83fbf=_0x30420c?.[_0x4c77fd(0x1b3)]?'\x20['+_0x30420c['status']+'\x20'+_0x30420c['statusText']+']':'';throw new Error(_0x4c77fd(0x25f)+_0x241da1+_0xc83fbf);}}return log[_0x4c77fd(0x211)]({'sessionId':_0x143d3f},_0x2551cd[_0x4c77fd(0x1c3)]),this[_0x4c77fd(0x202)](_0x143d3f);}async['subscribeGlobalEvents'](){const _0x4e5e1b=a0_0x155d07,_0x7869b6={'ONCYn':_0x4e5e1b(0x287)},_0x558c97=await this['client'][_0x4e5e1b(0x1e4)][_0x4e5e1b(0x1f4)]({});return log[_0x4e5e1b(0x211)](_0x7869b6['ONCYn']),_0x558c97;}async[a0_0x155d07(0x202)](_0x2e6aee){const _0x1ba20c=a0_0x155d07,_0x122d1c={'kCvTm':'Using\x20last\x20message\x20as\x20fallback','KrbEX':function(_0x521fe4,_0x43c4ca){return _0x521fe4(_0x43c4ca);},'AfPNS':'删除会话失败','WNIEP':function(_0x150f57,_0x333721){return _0x150f57!==_0x333721;},'gkTlZ':_0x1ba20c(0x280),'Cfwkb':_0x1ba20c(0x1ae),'vrQPx':'Session\x20completed','pYnht':function(_0x621da8,_0x54853a){return _0x621da8<_0x54853a;},'utgHt':function(_0x1cc59e,_0x1b9ab3){return _0x1cc59e===_0x1b9ab3;},'Lwfmh':'fZoWw','mPQde':function(_0x3d704f,_0x442f42){return _0x3d704f>_0x442f42;},'myFZI':_0x1ba20c(0x255),'dMnqq':function(_0x412f98,_0xcd8222){return _0x412f98-_0xcd8222;},'NOLwK':function(_0x491f33,_0xf95d7a){return _0x491f33>_0xf95d7a;},'kTxCl':_0x1ba20c(0x1ee),'klege':'tLaQs','aZGws':_0x1ba20c(0x204),'jUybv':'响应超时,请稍后重试'};try{if(_0x122d1c[_0x1ba20c(0x217)](_0x122d1c[_0x1ba20c(0x20d)],_0x122d1c[_0x1ba20c(0x260)])){await this[_0x1ba20c(0x1ce)]['v2'][_0x1ba20c(0x248)][_0x1ba20c(0x1ea)]({'sessionID':_0x2e6aee,'directory':this['directory']}),log['info']({'sessionId':_0x2e6aee},_0x122d1c[_0x1ba20c(0x243)]);for(let _0x5bbc89=0x0;_0x122d1c['pYnht'](_0x5bbc89,0x1e);_0x5bbc89++){if(_0x122d1c[_0x1ba20c(0x25d)](_0x122d1c['Lwfmh'],_0x122d1c[_0x1ba20c(0x240)])){const {data:_0x42672d}=await this[_0x1ba20c(0x1ce)]['session'][_0x1ba20c(0x1b2)]({'sessionID':_0x2e6aee,'directory':this[_0x1ba20c(0x26f)]});if(_0x42672d&&Array['isArray'](_0x42672d)&&_0x122d1c['mPQde'](_0x42672d[_0x1ba20c(0x265)],0x0)){if(_0x122d1c[_0x1ba20c(0x25d)](_0x122d1c['myFZI'],_0x122d1c[_0x1ba20c(0x21a)])){const _0x487ccb=_0x42672d[_0x122d1c['dMnqq'](_0x42672d[_0x1ba20c(0x265)],0x1)];if(_0x487ccb[_0x1ba20c(0x220)]&&_0x122d1c[_0x1ba20c(0x213)](_0x487ccb[_0x1ba20c(0x220)]['length'],0x0)){const _0x5898e8=_0x487ccb[_0x1ba20c(0x220)][_0x1ba20c(0x1ed)](_0xd52dd2=>_0xd52dd2[_0x1ba20c(0x1fe)]===_0x1ba20c(0x212));if(_0x5898e8&&_0x5898e8[_0x1ba20c(0x212)]){if(_0x122d1c[_0x1ba20c(0x1bf)]===_0x122d1c[_0x1ba20c(0x1d1)]){const _0x5def89=_0x524322[_0x1ba20c(0x220)]['find'](_0x4c36b5=>_0x4c36b5[_0x1ba20c(0x1fe)]===_0x1ba20c(0x212));if(_0x5def89?.['text'])return _0x1827a1[_0x1ba20c(0x211)]({'role':_0x518fd6[_0x1ba20c(0x26b)]||_0x5387e0['author']?.[_0x1ba20c(0x26b)],'textLength':_0x5def89[_0x1ba20c(0x212)]['length']},_0x122d1c[_0x1ba20c(0x23f)]),_0x5def89[_0x1ba20c(0x212)];}else return _0x5898e8[_0x1ba20c(0x212)];}}}else _0x3efcfb['push'](_0x1ba20c(0x20e)+_0x5d5ca6+'\x20===\x0a\x0a'+_0x43a24e);}await new Promise(_0x559903=>setTimeout(_0x559903,0x3e8));}else{const _0x186095=BEbKBa[_0x1ba20c(0x21e)](_0x4f772b,_0x371f26),_0x5c57d3=_0x26553d?.[_0x1ba20c(0x1b3)]?'\x20['+_0x566b00[_0x1ba20c(0x210)]+'\x20'+_0x3d1ed2['statusText']+']':'';throw new _0x2bfcc8(_0x1ba20c(0x25f)+_0x186095+_0x5c57d3);}}return _0x1ba20c(0x1bd);}else _0x11ba84[_0x1ba20c(0x1fa)]({'err':_0x202e3c,'sessionId':_0x5eba4a},_0x122d1c[_0x1ba20c(0x245)]);}catch(_0x119ef0){return log[_0x1ba20c(0x1fa)]({'err':_0x119ef0,'sessionId':_0x2e6aee},_0x122d1c[_0x1ba20c(0x25a)]),_0x122d1c[_0x1ba20c(0x264)];}}async[a0_0x155d07(0x282)](_0x490120){const _0x373da7=a0_0x155d07,_0xd230a7={'VGvce':function(_0xd34291,_0x5e8a9f){return _0xd34291 instanceof _0x5e8a9f;},'oigav':_0x373da7(0x1ec),'gyIJM':function(_0x1730a8,_0x3c2146){return _0x1730a8===_0x3c2146;},'zWbHd':'object','osgBa':function(_0xed486b,_0x20719d){return _0xed486b===_0x20719d;},'CmZQs':_0x373da7(0x1bb),'tkbEr':function(_0x500e20,_0x4bb3ca,_0x2a7054){return _0x500e20(_0x4bb3ca,_0x2a7054);},'ifYJa':_0x373da7(0x1d8),'NCiFP':function(_0x256cd5,_0x314ba1){return _0x256cd5>_0x314ba1;},'FVuHo':_0x373da7(0x262),'StTHF':'OpenCode\x20endpoint\x20check\x20failed','TiUvO':_0x373da7(0x1ba),'XnddW':'base64','IjokM':_0x373da7(0x200),'TDhRS':'Fetched\x20messages','BCUsi':function(_0x5f12a9,_0x123ddd){return _0x5f12a9!==_0x123ddd;},'xnBiE':_0x373da7(0x25b),'CGgIy':function(_0x1e5de7,_0xb0cbe7){return _0x1e5de7-_0xb0cbe7;},'iCrbp':function(_0x3cc163,_0x530a4a){return _0x3cc163>=_0x530a4a;},'nMYJt':_0x373da7(0x1c5),'pcWfT':_0x373da7(0x1de),'FXzhr':'assistant','VBKSn':_0x373da7(0x1cc),'KricF':_0x373da7(0x27c),'NDbNs':function(_0xe7308,_0x47970d){return _0xe7308>_0x47970d;},'NHirx':function(_0x1bcb22,_0x1e6f05){return _0x1bcb22===_0x1e6f05;},'hChpZ':_0x373da7(0x24d),'rPIEe':_0x373da7(0x283),'AYtVq':function(_0x256f37,_0xd09bec){return _0x256f37-_0xd09bec;},'MCoEC':_0x373da7(0x1ad),'AqTgu':_0x373da7(0x27b),'wtqec':'Failed\x20to\x20fetch\x20messages'};try{if(_0xd230a7[_0x373da7(0x214)](_0xd230a7[_0x373da7(0x257)],_0xd230a7[_0x373da7(0x257)])){const {data:_0x24f5e2}=await this['client'][_0x373da7(0x248)][_0x373da7(0x1b2)]({'sessionID':_0x490120,'directory':this[_0x373da7(0x26f)]});log['info']({'messageCount':_0x24f5e2?.[_0x373da7(0x265)]},_0xd230a7['TDhRS']);if(_0x24f5e2&&Array[_0x373da7(0x1dc)](_0x24f5e2)&&_0xd230a7['NCiFP'](_0x24f5e2[_0x373da7(0x265)],0x0)){if(_0xd230a7[_0x373da7(0x1df)](_0xd230a7[_0x373da7(0x205)],_0x373da7(0x25b))){if(yUAyGY['VGvce'](_0x1a8259,_0x3ea559))return _0x2eb979['message']||_0x2d233b[_0x373da7(0x1c1)]||yUAyGY[_0x373da7(0x1ca)];if(yUAyGY['gyIJM'](typeof _0x5847af,yUAyGY[_0x373da7(0x1f9)])&&_0x42d793!==null){const _0x19ed94=_0x17b34a;if(_0x19ed94[_0x373da7(0x269)])return _0x19ed94[_0x373da7(0x269)];if(_0x19ed94[_0x373da7(0x1fa)])return yUAyGY[_0x373da7(0x1da)](typeof _0x19ed94[_0x373da7(0x1fa)],yUAyGY[_0x373da7(0x263)])?_0x19ed94[_0x373da7(0x1fa)]:_0xd31489['stringify'](_0x19ed94[_0x373da7(0x1fa)]);if(_0x19ed94[_0x373da7(0x218)])return _0x19ed94[_0x373da7(0x218)];if(_0x19ed94[_0x373da7(0x1b3)])return _0x19ed94[_0x373da7(0x1b3)];return _0x2e957a[_0x373da7(0x26a)](_0x1dea95);}return _0x62d134(_0x458a9e);}else{for(let _0x38e842=_0xd230a7['CGgIy'](_0x24f5e2['length'],0x1);_0xd230a7[_0x373da7(0x271)](_0x38e842,0x0);_0x38e842--){if(_0xd230a7[_0x373da7(0x1df)](_0xd230a7[_0x373da7(0x1e3)],_0xd230a7[_0x373da7(0x206)])){const _0x2bdf70=_0x24f5e2[_0x38e842],_0x5e31ce=_0x2bdf70[_0x373da7(0x26b)]||_0x2bdf70['author']?.['role'];log[_0x373da7(0x211)]({'index':_0x38e842,'role':_0x5e31ce,'info':_0x2bdf70['info'],'keys':Object['keys'](_0x2bdf70)[_0x373da7(0x1bc)](0x0,0xa),'hasParts':!!_0x2bdf70[_0x373da7(0x220)],'partCount':_0x2bdf70[_0x373da7(0x220)]?.[_0x373da7(0x265)]},'Checking\x20message');if(_0xd230a7[_0x373da7(0x214)](_0x5e31ce,_0xd230a7[_0x373da7(0x1c0)])||_0x5e31ce===_0xd230a7['VBKSn']){if(_0xd230a7['osgBa'](_0xd230a7[_0x373da7(0x239)],_0xd230a7['KricF'])){if(_0x2bdf70['parts']&&_0xd230a7[_0x373da7(0x1b5)](_0x2bdf70[_0x373da7(0x220)][_0x373da7(0x265)],0x0)){const _0x38dcf2=_0x2bdf70[_0x373da7(0x220)]['find'](_0x4525c4=>_0x4525c4['type']===_0x373da7(0x212));if(_0x38dcf2?.[_0x373da7(0x212)]){if(_0xd230a7['NHirx'](_0xd230a7[_0x373da7(0x225)],_0x373da7(0x278)))try{const _0x541151=yUAyGY[_0x373da7(0x242)](_0x30c6ff,_0x5959f9,yUAyGY[_0x373da7(0x27d)]);yUAyGY['NCiFP'](_0x541151[_0x373da7(0x1c6)]()[_0x373da7(0x265)],0x0)&&_0x1def42[_0x373da7(0x1f3)](_0x373da7(0x20e)+_0x3d557a+'\x20===\x0a\x0a'+_0x541151);}catch(_0x87fc04){_0x159c64[_0x373da7(0x207)]({'err':_0x87fc04,'filepath':_0x3a1f0a},yUAyGY[_0x373da7(0x1db)]);}else return log['info']({'textLength':_0x38dcf2[_0x373da7(0x212)][_0x373da7(0x265)]},_0xd230a7[_0x373da7(0x27a)]),_0x38dcf2[_0x373da7(0x212)];}}}else return[];}}else _0x3de0e4[_0x373da7(0x267)]({'url':_0x93edf8,'err':_0x22d1ff[_0x373da7(0x269)]},_0xd230a7['StTHF']);}const _0x427f1d=_0x24f5e2[_0xd230a7[_0x373da7(0x1e7)](_0x24f5e2[_0x373da7(0x265)],0x1)];if(_0x427f1d['parts']&&_0x427f1d[_0x373da7(0x220)][_0x373da7(0x265)]>0x0){if(_0xd230a7[_0x373da7(0x236)](_0xd230a7[_0x373da7(0x1d4)],_0xd230a7[_0x373da7(0x244)]))return _0x4cedf1['info']({'role':_0x2d8747['role']||_0xe0ab37[_0x373da7(0x222)]?.[_0x373da7(0x26b)],'textLength':_0x39d2c6[_0x373da7(0x212)][_0x373da7(0x265)]},_0xd230a7[_0x373da7(0x1c8)]),_0x264a9f[_0x373da7(0x212)];else{const _0x13e243=_0x427f1d[_0x373da7(0x220)][_0x373da7(0x1ed)](_0x49c22a=>_0x49c22a[_0x373da7(0x1fe)]===_0x373da7(0x212));if(_0x13e243?.[_0x373da7(0x212)])return log[_0x373da7(0x211)]({'role':_0x427f1d[_0x373da7(0x26b)]||_0x427f1d['author']?.[_0x373da7(0x26b)],'textLength':_0x13e243[_0x373da7(0x212)][_0x373da7(0x265)]},_0xd230a7[_0x373da7(0x1c8)]),_0x13e243[_0x373da7(0x212)];}}}}}else return _0x6c96ef['info']({'url':_0x23f621,'status':_0x31dc35[_0x373da7(0x210)]},_0x373da7(0x1f7)),!![];}catch(_0x15dd0f){_0xd230a7[_0x373da7(0x1da)]('xGFMg',_0x373da7(0x268))?_0x335b4c['Authorization']='Basic\x20'+_0x47e679[_0x373da7(0x201)]('opencode:'+_0x3d8c04)[_0x373da7(0x1e5)](_0xd230a7['XnddW']):log['error']({'err':_0x15dd0f[_0x373da7(0x269)]},_0xd230a7['wtqec']);}return null;}async['sendCommand'](_0x1f57a5,_0x59d3de){const _0x39e557=a0_0x155d07,_0x143cd4={'NdfBN':_0x39e557(0x212),'xNTvy':function(_0x4dd03c,_0xe4aade){return _0x4dd03c!==_0xe4aade;},'FrSTm':_0x39e557(0x21f),'LaNqi':_0x39e557(0x1b1)};try{await this[_0x39e557(0x1ce)][_0x39e557(0x248)][_0x39e557(0x251)]({'sessionID':_0x1f57a5,'directory':this[_0x39e557(0x26f)],'parts':[{'type':_0x143cd4[_0x39e557(0x24b)],'text':_0x59d3de}]});}catch(_0x41ed5f){if(_0x143cd4[_0x39e557(0x247)](_0x143cd4[_0x39e557(0x241)],_0x143cd4[_0x39e557(0x241)])){const _0x409b2c=_0xd7e6dc(_0x5d2e0a),_0x30eb50=_0x27cd83?.[_0x39e557(0x1b3)]?'\x20['+_0x64c128[_0x39e557(0x210)]+'\x20'+_0x21c722['statusText']+']':'';throw new _0x3e3074(_0x39e557(0x1b4)+_0x409b2c+_0x30eb50);}else log['warn']({'err':_0x41ed5f,'sessionId':_0x1f57a5,'command':_0x59d3de},_0x143cd4['LaNqi']);}}async[a0_0x155d07(0x232)](_0x4a7d28){const _0x3d04eb=a0_0x155d07,_0x5bd49f={'PsGrN':'响应超时,请稍后重试','zWhcr':'Session\x20deleted','vpCzK':function(_0x5e11ff,_0x2ad2f6){return _0x5e11ff===_0x2ad2f6;},'olaHX':_0x3d04eb(0x1be),'MJMGL':'删除会话失败'};try{await this[_0x3d04eb(0x1ce)][_0x3d04eb(0x248)]['delete']({'sessionID':_0x4a7d28}),log['info']({'sessionId':_0x4a7d28},_0x5bd49f[_0x3d04eb(0x24c)]);}catch(_0xc6d084){if(_0x5bd49f['vpCzK'](_0x5bd49f[_0x3d04eb(0x274)],_0x3d04eb(0x1be)))log[_0x3d04eb(0x1fa)]({'err':_0xc6d084,'sessionId':_0x4a7d28},_0x5bd49f['MJMGL']);else return _0x29d681[_0x3d04eb(0x1fa)]({'err':_0x274e2b,'sessionId':_0x142d47},'等待会话完成失败'),LAJBLq[_0x3d04eb(0x1e8)];}}async['listSessions'](){const _0x1af838=a0_0x155d07,_0x22af78={'iAQph':_0x1af838(0x262)};try{if('OvbRM'!=='OvbRM')_0x43c472[_0x1af838(0x207)]({'err':_0x12e126,'filepath':_0x3697f1},mIXqZM[_0x1af838(0x228)]);else{const {data:_0x2cc66a}=await this[_0x1af838(0x1ce)][_0x1af838(0x248)][_0x1af838(0x238)]({});return _0x2cc66a||[];}}catch{return[];}}}function a0_0x39db(_0x1fbcd4,_0x4eef40){_0x1fbcd4=_0x1fbcd4-0x1ac;const _0x52114e=a0_0x5211();let _0x39db75=_0x52114e[_0x1fbcd4];if(a0_0x39db['rrgqrd']===undefined){var _0x5b528c=function(_0x5400c2){const _0x3de059='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2e8a72='',_0x364ce0='';for(let _0x5f3d23=0x0,_0x3a06e1,_0x226233,_0x11fcbc=0x0;_0x226233=_0x5400c2['charAt'](_0x11fcbc++);~_0x226233&&(_0x3a06e1=_0x5f3d23%0x4?_0x3a06e1*0x40+_0x226233:_0x226233,_0x5f3d23++%0x4)?_0x2e8a72+=String['fromCharCode'](0xff&_0x3a06e1>>(-0x2*_0x5f3d23&0x6)):0x0){_0x226233=_0x3de059['indexOf'](_0x226233);}for(let _0x1484b3=0x0,_0x3f22cc=_0x2e8a72['length'];_0x1484b3<_0x3f22cc;_0x1484b3++){_0x364ce0+='%'+('00'+_0x2e8a72['charCodeAt'](_0x1484b3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x364ce0);};a0_0x39db['JzDQQG']=_0x5b528c,a0_0x39db['oZeOuc']={},a0_0x39db['rrgqrd']=!![];}const _0x3cebb6=_0x52114e[0x0],_0x51083c=_0x1fbcd4+_0x3cebb6,_0x4d2bfd=a0_0x39db['oZeOuc'][_0x51083c];return!_0x4d2bfd?(_0x39db75=a0_0x39db['JzDQQG'](_0x39db75),a0_0x39db['oZeOuc'][_0x51083c]=_0x39db75):_0x39db75=_0x4d2bfd,_0x39db75;}export async function checkOpencodeStatus(_0x5443b6,_0x2633ba){const _0x186460=a0_0x155d07,_0x25c40c={'Gjtcm':'Authorization','eFDGO':_0x186460(0x219),'iQRNh':function(_0x19e96a,_0x55c4b4){return _0x19e96a===_0x55c4b4;},'sgjcq':_0x186460(0x224),'lrdvk':function(_0x5c514b,_0x5115cb,_0x39cd07){return _0x5c514b(_0x5115cb,_0x39cd07);},'TxxbE':_0x186460(0x1ef),'URXAl':function(_0x15279e,_0x350915){return _0x15279e(_0x350915);},'XjJyY':function(_0x2492ff,_0x558e1d){return _0x2492ff===_0x558e1d;},'AwUcI':_0x186460(0x1e6),'FNjYn':_0x186460(0x285),'Ezmiw':_0x186460(0x1f7)},_0x4b1596={};_0x2633ba&&(_0x4b1596[_0x25c40c[_0x186460(0x250)]]=_0x186460(0x22c)+Buffer[_0x186460(0x201)](_0x186460(0x1d9)+_0x2633ba)['toString'](_0x25c40c[_0x186460(0x284)]));const _0x22e09d=[_0x5443b6+_0x186460(0x259),_0x5443b6+_0x186460(0x226),_0x5443b6+_0x186460(0x1b8),_0x5443b6];for(const _0xe100aa of _0x22e09d){if(_0x25c40c[_0x186460(0x24e)](_0x186460(0x20a),'AKDqz'))try{log[_0x186460(0x267)]({'url':_0xe100aa},_0x25c40c[_0x186460(0x1c2)]);const _0x53a052=new AbortController(),_0x24282b=setTimeout(()=>_0x53a052[_0x186460(0x1ff)](),0x7d0),_0x52564f=await _0x25c40c[_0x186460(0x273)](fetch,_0xe100aa,{'method':_0x25c40c[_0x186460(0x1b6)],'headers':_0x4b1596,'signal':_0x53a052['signal']});_0x25c40c['URXAl'](clearTimeout,_0x24282b);if(_0x52564f['ok']||_0x52564f['status']===0x191)return _0x25c40c[_0x186460(0x249)](_0x25c40c['AwUcI'],_0x25c40c[_0x186460(0x1b9)])?this[_0x186460(0x276)]:(log[_0x186460(0x211)]({'url':_0xe100aa,'status':_0x52564f[_0x186460(0x210)]},_0x25c40c[_0x186460(0x23b)]),!![]);}catch(_0x1a0ab4){log[_0x186460(0x267)]({'url':_0xe100aa,'err':_0x1a0ab4[_0x186460(0x269)]},_0x186460(0x229));}else _0x5476f8['warn']({'promptPath':_0xec838},_0x186460(0x1d2));}return log[_0x186460(0x207)]({'opencodeUrl':_0x5443b6},_0x186460(0x1e2)),![];}
|