alvin-bot 5.6.2 → 5.8.0
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/CHANGELOG.md +29 -0
- package/README.md +1 -1
- package/dist/claude.js +1 -102
- package/dist/config.js +1 -96
- package/dist/engine.js +1 -90
- package/dist/find-claude-binary.js +1 -98
- package/dist/handlers/async-agent-chunk-handler.js +1 -50
- package/dist/handlers/background-bypass.js +1 -75
- package/dist/handlers/commands.js +1 -2336
- package/dist/handlers/cron-progress.js +1 -52
- package/dist/handlers/document.js +1 -194
- package/dist/handlers/message.js +1 -959
- package/dist/handlers/photo.js +1 -154
- package/dist/handlers/platform-message.js +1 -360
- package/dist/handlers/stuck-timer.js +1 -54
- package/dist/handlers/video.js +1 -237
- package/dist/handlers/voice.js +1 -148
- package/dist/i18n.js +1 -805
- package/dist/index.js +1 -697
- package/dist/init-data-dir.js +1 -98
- package/dist/middleware/auth.js +1 -233
- package/dist/migrate.js +1 -162
- package/dist/paths.js +1 -146
- package/dist/platforms/discord.js +1 -175
- package/dist/platforms/index.js +1 -130
- package/dist/platforms/signal.js +1 -205
- package/dist/platforms/slack-slash-parser.js +1 -32
- package/dist/platforms/slack.js +1 -501
- package/dist/platforms/telegram.js +1 -111
- package/dist/platforms/types.js +1 -8
- package/dist/platforms/whatsapp-auth-helpers.js +1 -53
- package/dist/platforms/whatsapp.js +1 -707
- package/dist/providers/claude-sdk-provider.js +1 -565
- package/dist/providers/codex-cli-provider.js +1 -134
- package/dist/providers/index.js +1 -7
- package/dist/providers/ollama-provider.js +1 -32
- package/dist/providers/openai-compatible.js +1 -406
- package/dist/providers/registry.js +1 -352
- package/dist/providers/runtime-header.js +1 -45
- package/dist/providers/tool-executor.js +1 -475
- package/dist/providers/types.js +1 -227
- package/dist/services/access.js +1 -144
- package/dist/services/allowed-users-gate.js +1 -56
- package/dist/services/alvin-dispatch.js +1 -130
- package/dist/services/alvin-mcp-tools.js +1 -104
- package/dist/services/asset-index.js +1 -224
- package/dist/services/async-agent-parser.js +1 -418
- package/dist/services/async-agent-watcher.js +1 -443
- package/dist/services/auto-diagnostic.js +1 -228
- package/dist/services/broadcast.js +1 -52
- package/dist/services/browser-manager.js +1 -562
- package/dist/services/browser-webfetch.js +1 -127
- package/dist/services/browser.js +1 -121
- package/dist/services/cdp-bootstrap.js +1 -357
- package/dist/services/compaction.js +1 -144
- package/dist/services/critical-notify.js +1 -203
- package/dist/services/cron-resolver.js +1 -58
- package/dist/services/cron-scheduling.js +1 -310
- package/dist/services/cron.js +1 -861
- package/dist/services/custom-tools.js +1 -317
- package/dist/services/delivery-queue.js +1 -173
- package/dist/services/delivery-registry.js +1 -21
- package/dist/services/disk-cleanup.js +1 -203
- package/dist/services/elevenlabs.js +1 -58
- package/dist/services/embeddings/auto-detect.js +1 -74
- package/dist/services/embeddings/fts5.js +1 -108
- package/dist/services/embeddings/gemini.js +1 -65
- package/dist/services/embeddings/index.js +1 -496
- package/dist/services/embeddings/ollama.js +1 -78
- package/dist/services/embeddings/openai.js +1 -49
- package/dist/services/embeddings/provider.js +1 -22
- package/dist/services/embeddings/vector-base.js +1 -113
- package/dist/services/embeddings-migration.js +1 -193
- package/dist/services/embeddings.js +1 -9
- package/dist/services/env-file.js +1 -50
- package/dist/services/exec-guard.js +1 -71
- package/dist/services/fallback-order.js +1 -154
- package/dist/services/file-permissions.js +1 -93
- package/dist/services/heartbeat-file.js +1 -65
- package/dist/services/heartbeat.js +1 -313
- package/dist/services/hooks.js +1 -44
- package/dist/services/imagegen.js +1 -72
- package/dist/services/language-detect.js +1 -154
- package/dist/services/markdown.js +1 -63
- package/dist/services/mcp.js +1 -263
- package/dist/services/memory-extractor.js +1 -178
- package/dist/services/memory-inject-mode.js +1 -43
- package/dist/services/memory-layers.js +1 -156
- package/dist/services/memory.js +1 -146
- package/dist/services/ollama-manager.js +1 -339
- package/dist/services/permissions-wizard.js +1 -291
- package/dist/services/personality.js +1 -376
- package/dist/services/plugins.js +1 -171
- package/dist/services/preflight.js +1 -292
- package/dist/services/process-manager.js +1 -291
- package/dist/services/release-highlights.js +1 -79
- package/dist/services/reminders.js +1 -97
- package/dist/services/restart.js +1 -48
- package/dist/services/security-audit.js +1 -74
- package/dist/services/self-diagnosis.js +1 -272
- package/dist/services/self-search.js +1 -129
- package/dist/services/session-persistence.js +1 -237
- package/dist/services/session.js +1 -282
- package/dist/services/skills.js +1 -290
- package/dist/services/ssrf-guard.js +1 -162
- package/dist/services/standing-orders.js +1 -29
- package/dist/services/steer-channel.js +1 -46
- package/dist/services/stop-controller.js +1 -52
- package/dist/services/subagent-dedup.js +1 -0
- package/dist/services/subagent-delivery.js +1 -452
- package/dist/services/subagent-stats.js +1 -123
- package/dist/services/subagents.js +1 -814
- package/dist/services/sudo.js +1 -329
- package/dist/services/telegram.js +1 -158
- package/dist/services/timing-safe-bearer.js +1 -51
- package/dist/services/tool-discovery.js +1 -214
- package/dist/services/trends.js +1 -580
- package/dist/services/updater.js +1 -291
- package/dist/services/usage-tracker.js +1 -144
- package/dist/services/users.js +1 -271
- package/dist/services/voice.js +1 -104
- package/dist/services/watchdog-brake.js +1 -154
- package/dist/services/watchdog.js +1 -311
- package/dist/services/workspaces.js +1 -276
- package/dist/tui/index.js +1 -667
- package/dist/util/console-formatter.js +1 -109
- package/dist/util/debounce.js +1 -24
- package/dist/util/telegram-error-filter.js +1 -62
- package/dist/version.js +1 -24
- package/dist/web/bind-strategy.js +1 -42
- package/dist/web/canvas.js +1 -30
- package/dist/web/doctor-api.js +1 -604
- package/dist/web/openai-compat.js +1 -252
- package/dist/web/server.js +1 -1831
- package/dist/web/setup-api.js +1 -1101
- package/package.json +5 -2
- package/dist/.metadata_never_index +0 -0
|
@@ -1,252 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenAI-Compatible API — /v1/chat/completions + /v1/models
|
|
3
|
-
*
|
|
4
|
-
* Allows external tools (e.g., OpenClaw) to use Claude via Alvin-Bot's
|
|
5
|
-
* Agent SDK. Routes through Claude Code CLI OAuth (Max subscription).
|
|
6
|
-
*
|
|
7
|
-
* Auth: Bearer token (WEBHOOK_TOKEN from .env)
|
|
8
|
-
*/
|
|
9
|
-
import crypto from "crypto";
|
|
10
|
-
import { ClaudeSDKProvider } from "../providers/claude-sdk-provider.js";
|
|
11
|
-
import { config } from "../config.js";
|
|
12
|
-
// Lazy-initialized provider (shares nothing with Telegram sessions)
|
|
13
|
-
let provider = null;
|
|
14
|
-
function getProvider() {
|
|
15
|
-
if (!provider) {
|
|
16
|
-
provider = new ClaudeSDKProvider();
|
|
17
|
-
}
|
|
18
|
-
return provider;
|
|
19
|
-
}
|
|
20
|
-
// ── Auth ────────────────────────────────────────────────
|
|
21
|
-
function checkBearer(req) {
|
|
22
|
-
if (!config.webhookToken)
|
|
23
|
-
return false; // No token = disabled
|
|
24
|
-
const auth = req.headers.authorization || "";
|
|
25
|
-
return auth === `Bearer ${config.webhookToken}`;
|
|
26
|
-
}
|
|
27
|
-
// ── Models Endpoint ─────────────────────────────────────
|
|
28
|
-
function handleModels(res) {
|
|
29
|
-
const now = Math.floor(Date.now() / 1000);
|
|
30
|
-
res.setHeader("Content-Type", "application/json");
|
|
31
|
-
res.end(JSON.stringify({
|
|
32
|
-
object: "list",
|
|
33
|
-
data: [
|
|
34
|
-
{ id: "alvin-opus-4", object: "model", created: now, owned_by: "alvin-bot" },
|
|
35
|
-
{ id: "alvin-sonnet-4", object: "model", created: now, owned_by: "alvin-bot" },
|
|
36
|
-
{ id: "alvin-haiku-4", object: "model", created: now, owned_by: "alvin-bot" },
|
|
37
|
-
],
|
|
38
|
-
}));
|
|
39
|
-
}
|
|
40
|
-
function buildPromptFromMessages(messages) {
|
|
41
|
-
let systemPrompt = "";
|
|
42
|
-
const conversationParts = [];
|
|
43
|
-
for (const msg of messages) {
|
|
44
|
-
if (msg.role === "system") {
|
|
45
|
-
systemPrompt += (systemPrompt ? "\n\n" : "") + msg.content;
|
|
46
|
-
}
|
|
47
|
-
else if (msg.role === "user") {
|
|
48
|
-
conversationParts.push(`User: ${msg.content}`);
|
|
49
|
-
}
|
|
50
|
-
else if (msg.role === "assistant") {
|
|
51
|
-
conversationParts.push(`Assistant: ${msg.content}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// Single message: extract raw content without "User:" prefix
|
|
55
|
-
if (conversationParts.length <= 1) {
|
|
56
|
-
const lastUser = messages.filter(m => m.role === "user").pop();
|
|
57
|
-
return { prompt: lastUser?.content || "", systemPrompt };
|
|
58
|
-
}
|
|
59
|
-
// Multi-turn: format as conversation context
|
|
60
|
-
return { prompt: conversationParts.join("\n\n"), systemPrompt };
|
|
61
|
-
}
|
|
62
|
-
async function handleChatCompletions(req, res, body) {
|
|
63
|
-
// Parse request
|
|
64
|
-
let oaiReq;
|
|
65
|
-
try {
|
|
66
|
-
oaiReq = JSON.parse(body);
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
70
|
-
res.end(JSON.stringify({ error: { message: "Invalid JSON body", type: "invalid_request_error" } }));
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (!oaiReq.messages || !Array.isArray(oaiReq.messages) || oaiReq.messages.length === 0) {
|
|
74
|
-
res.writeHead(400, { "Content-Type": "application/json" });
|
|
75
|
-
res.end(JSON.stringify({ error: { message: "messages array is required", type: "invalid_request_error" } }));
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
const { prompt, systemPrompt } = buildPromptFromMessages(oaiReq.messages);
|
|
79
|
-
const completionId = `chatcmpl-${crypto.randomUUID().replace(/-/g, "").slice(0, 24)}`;
|
|
80
|
-
const created = Math.floor(Date.now() / 1000);
|
|
81
|
-
const model = oaiReq.model || "claude-opus-4-6";
|
|
82
|
-
// Optional session resumption via header
|
|
83
|
-
const sessionId = req.headers["x-session-id"] || null;
|
|
84
|
-
const p = getProvider();
|
|
85
|
-
if (oaiReq.stream !== false) {
|
|
86
|
-
// ── Streaming Response (SSE) ──────────────────────
|
|
87
|
-
res.writeHead(200, {
|
|
88
|
-
"Content-Type": "text/event-stream",
|
|
89
|
-
"Cache-Control": "no-cache",
|
|
90
|
-
"Connection": "keep-alive",
|
|
91
|
-
"X-Accel-Buffering": "no",
|
|
92
|
-
});
|
|
93
|
-
// Initial role chunk
|
|
94
|
-
const roleChunk = {
|
|
95
|
-
id: completionId,
|
|
96
|
-
object: "chat.completion.chunk",
|
|
97
|
-
created,
|
|
98
|
-
model,
|
|
99
|
-
choices: [{ index: 0, delta: { role: "assistant", content: "" }, finish_reason: null }],
|
|
100
|
-
};
|
|
101
|
-
res.write(`data: ${JSON.stringify(roleChunk)}\n\n`);
|
|
102
|
-
let outputSessionId = "";
|
|
103
|
-
let inputTokens = 0;
|
|
104
|
-
let outputTokens = 0;
|
|
105
|
-
try {
|
|
106
|
-
for await (const chunk of p.query({ prompt, systemPrompt, sessionId })) {
|
|
107
|
-
if (chunk.type === "text" && chunk.delta) {
|
|
108
|
-
const sseChunk = {
|
|
109
|
-
id: completionId,
|
|
110
|
-
object: "chat.completion.chunk",
|
|
111
|
-
created,
|
|
112
|
-
model,
|
|
113
|
-
choices: [{ index: 0, delta: { content: chunk.delta }, finish_reason: null }],
|
|
114
|
-
};
|
|
115
|
-
res.write(`data: ${JSON.stringify(sseChunk)}\n\n`);
|
|
116
|
-
}
|
|
117
|
-
if (chunk.type === "done") {
|
|
118
|
-
outputSessionId = chunk.sessionId || "";
|
|
119
|
-
inputTokens = chunk.inputTokens || 0;
|
|
120
|
-
outputTokens = chunk.outputTokens || 0;
|
|
121
|
-
// Final chunk with finish_reason
|
|
122
|
-
const doneChunk = {
|
|
123
|
-
id: completionId,
|
|
124
|
-
object: "chat.completion.chunk",
|
|
125
|
-
created,
|
|
126
|
-
model,
|
|
127
|
-
choices: [{ index: 0, delta: {}, finish_reason: "stop" }],
|
|
128
|
-
...(inputTokens || outputTokens ? {
|
|
129
|
-
usage: { prompt_tokens: inputTokens, completion_tokens: outputTokens, total_tokens: inputTokens + outputTokens },
|
|
130
|
-
} : {}),
|
|
131
|
-
};
|
|
132
|
-
res.write(`data: ${JSON.stringify(doneChunk)}\n\n`);
|
|
133
|
-
}
|
|
134
|
-
if (chunk.type === "error") {
|
|
135
|
-
const errChunk = {
|
|
136
|
-
id: completionId,
|
|
137
|
-
object: "chat.completion.chunk",
|
|
138
|
-
created,
|
|
139
|
-
model,
|
|
140
|
-
choices: [{ index: 0, delta: { content: `\n\n[Error: ${chunk.error}]` }, finish_reason: "stop" }],
|
|
141
|
-
};
|
|
142
|
-
res.write(`data: ${JSON.stringify(errChunk)}\n\n`);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
const errMsg = err instanceof Error ? err.message : String(err);
|
|
148
|
-
const errChunk = {
|
|
149
|
-
id: completionId,
|
|
150
|
-
object: "chat.completion.chunk",
|
|
151
|
-
created,
|
|
152
|
-
model,
|
|
153
|
-
choices: [{ index: 0, delta: { content: `\n\n[Error: ${errMsg}]` }, finish_reason: "stop" }],
|
|
154
|
-
};
|
|
155
|
-
res.write(`data: ${JSON.stringify(errChunk)}\n\n`);
|
|
156
|
-
}
|
|
157
|
-
// Emit session ID for multi-turn support
|
|
158
|
-
if (outputSessionId) {
|
|
159
|
-
res.write(`data: ${JSON.stringify({ session_id: outputSessionId })}\n\n`);
|
|
160
|
-
}
|
|
161
|
-
res.write("data: [DONE]\n\n");
|
|
162
|
-
res.end();
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
// ── Non-Streaming Response ────────────────────────
|
|
166
|
-
let fullText = "";
|
|
167
|
-
let inputTokens = 0;
|
|
168
|
-
let outputTokens = 0;
|
|
169
|
-
let outputSessionId = "";
|
|
170
|
-
try {
|
|
171
|
-
for await (const chunk of p.query({ prompt, systemPrompt, sessionId })) {
|
|
172
|
-
if (chunk.type === "text" && chunk.delta) {
|
|
173
|
-
fullText += chunk.delta;
|
|
174
|
-
}
|
|
175
|
-
if (chunk.type === "done") {
|
|
176
|
-
outputSessionId = chunk.sessionId || "";
|
|
177
|
-
inputTokens = chunk.inputTokens || 0;
|
|
178
|
-
outputTokens = chunk.outputTokens || 0;
|
|
179
|
-
}
|
|
180
|
-
if (chunk.type === "error") {
|
|
181
|
-
res.writeHead(500, { "Content-Type": "application/json" });
|
|
182
|
-
res.end(JSON.stringify({
|
|
183
|
-
error: { message: chunk.error || "Provider error", type: "server_error" },
|
|
184
|
-
}));
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
catch (err) {
|
|
190
|
-
const errMsg = err instanceof Error ? err.message : String(err);
|
|
191
|
-
res.writeHead(500, { "Content-Type": "application/json" });
|
|
192
|
-
res.end(JSON.stringify({
|
|
193
|
-
error: { message: errMsg, type: "server_error" },
|
|
194
|
-
}));
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
res.writeHead(200, {
|
|
198
|
-
"Content-Type": "application/json",
|
|
199
|
-
...(outputSessionId ? { "x-session-id": outputSessionId } : {}),
|
|
200
|
-
});
|
|
201
|
-
res.end(JSON.stringify({
|
|
202
|
-
id: completionId,
|
|
203
|
-
object: "chat.completion",
|
|
204
|
-
created,
|
|
205
|
-
model,
|
|
206
|
-
choices: [{
|
|
207
|
-
index: 0,
|
|
208
|
-
message: { role: "assistant", content: fullText },
|
|
209
|
-
finish_reason: "stop",
|
|
210
|
-
}],
|
|
211
|
-
usage: {
|
|
212
|
-
prompt_tokens: inputTokens,
|
|
213
|
-
completion_tokens: outputTokens,
|
|
214
|
-
total_tokens: inputTokens + outputTokens,
|
|
215
|
-
},
|
|
216
|
-
}));
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
// ── Exported Handler ────────────────────────────────────
|
|
220
|
-
/**
|
|
221
|
-
* Handle OpenAI-compatible API requests (/v1/...).
|
|
222
|
-
* Returns true if the request was handled, false if not an /v1/ route.
|
|
223
|
-
*/
|
|
224
|
-
export function handleOpenAICompat(req, res, urlPath, body) {
|
|
225
|
-
// Only handle /v1/ routes
|
|
226
|
-
if (!urlPath.startsWith("/v1/"))
|
|
227
|
-
return false;
|
|
228
|
-
// Auth check (Bearer token required)
|
|
229
|
-
if (!checkBearer(req)) {
|
|
230
|
-
res.writeHead(401, { "Content-Type": "application/json" });
|
|
231
|
-
res.end(JSON.stringify({
|
|
232
|
-
error: { message: "Invalid API key", type: "authentication_error" },
|
|
233
|
-
}));
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
// GET /v1/models
|
|
237
|
-
if (urlPath === "/v1/models" && req.method === "GET") {
|
|
238
|
-
handleModels(res);
|
|
239
|
-
return true;
|
|
240
|
-
}
|
|
241
|
-
// POST /v1/chat/completions
|
|
242
|
-
if (urlPath === "/v1/chat/completions" && req.method === "POST") {
|
|
243
|
-
handleChatCompletions(req, res, body);
|
|
244
|
-
return true;
|
|
245
|
-
}
|
|
246
|
-
// Unknown /v1/ route
|
|
247
|
-
res.writeHead(404, { "Content-Type": "application/json" });
|
|
248
|
-
res.end(JSON.stringify({
|
|
249
|
-
error: { message: `Unknown endpoint: ${urlPath}`, type: "invalid_request_error" },
|
|
250
|
-
}));
|
|
251
|
-
return true;
|
|
252
|
-
}
|
|
1
|
+
(function(_0x1ccd51,_0x23b9ca){const _0x2b5faf=_0x2ca4,_0x1ea1a1=_0x2ca4,_0x567345=_0x1ccd51();while(!![]){try{const _0x2a8221=parseInt(_0x2b5faf(0x1ca))/(-0x2*-0xf47+0x2*-0x1253+-0x1*-0x619)*(-parseInt(_0x1ea1a1(0x1d1))/(0x170d*-0x1+0x804+0xf0b))+-parseInt(_0x2b5faf(0x1c2))/(-0x752+0x2252*0x1+0x93*-0x2f)*(-parseInt(_0x1ea1a1(0x193))/(0x1*-0x671+-0x4f7+-0x1*-0xb6c))+parseInt(_0x1ea1a1(0x17f))/(0x1ffa+-0x1082+0x317*-0x5)+parseInt(_0x2b5faf(0x1c6))/(0x4a3*-0x5+0x79*0xe+0x1097)+parseInt(_0x2b5faf(0x1ce))/(-0xc65+-0xc38+0x53*0x4c)*(parseInt(_0x1ea1a1(0x1cd))/(-0x1a74*0x1+0x3*-0xceb+0x413d))+-parseInt(_0x1ea1a1(0x1b7))/(-0x1949+-0x24cd+-0x9*-0x6e7)*(-parseInt(_0x2b5faf(0x1ab))/(0x4a*-0x7c+-0x16a9+0x3a8b))+-parseInt(_0x2b5faf(0x1b6))/(-0x185c+-0x734+0xa89*0x3);if(_0x2a8221===_0x23b9ca)break;else _0x567345['push'](_0x567345['shift']());}catch(_0x3bc6a0){_0x567345['push'](_0x567345['shift']());}}}(_0x5141,-0x128de7+-0xad364+-0x1*-0x2b3008));const _0x35a109=(function(){let _0x142584=!![];return function(_0xca54c3,_0x428647){const _0x1c2d38=_0x142584?function(){const _0x137e1b=_0x2ca4;if(_0x428647){const _0x2226d1=_0x428647[_0x137e1b(0x17e)](_0xca54c3,arguments);return _0x428647=null,_0x2226d1;}}:function(){};return _0x142584=![],_0x1c2d38;};}()),_0x30be9c=_0x35a109(this,function(){const _0xb8be6f=_0x2ca4,_0x4421da=_0x2ca4;return _0x30be9c[_0xb8be6f(0x1c9)]()[_0xb8be6f(0x184)](_0x4421da(0x190)+'+$')[_0x4421da(0x1c9)]()[_0xb8be6f(0x1b5)+'r'](_0x30be9c)[_0x4421da(0x184)](_0xb8be6f(0x190)+'+$');});_0x30be9c();import _0x30b971 from'crypto';function _0x5141(){const _0x51d850=['yxbWBgLJyxrPBW','BwvZC2fNzxmGyq','ywX2Aw4TB3b1CW','otm3mdiWnNLryvnUCq','CMvWBgfJzq','ywX2Aw4TyM90','Dg9tDhjPBMC','m3rgzK1ZDG','ue9tva','zxjYB3i','ndG2mdG4v0vyBKTc','ndLSBgzRtfK','uhjVDMLKzxiGzq','Aw9U','mZe0mJe0uuHLEKPO','l3yXl21VzgvSCW','B3v0Chv0vg9Rzq','zgvSDge','l3yXl2nOyxqVyW','CM9Szq','zg9Uzq','zhbVAw50oIa','A2vLCc1HBgL2zq','yxbWBhK','otaZntiWmfrOu0Hgva','C2vYDMvYx2vYCG','vxnLCJOG','C2vZC2LVBKLK','BM93','C2vHCMnO','AM9PBG','AgvHzgvYCW','y2HHDgnTCgWT','DhLWzq','ywX2Aw4TC29UBG','zgf0ytOG','CNjVCG','ssbRzxK','D3jPDgu','yxv0Ag9YAxPHDa','cGPBrxjYB3i6ia','kcGOlISPkYKRkq','DxnLCG','Aw52ywXPzf9Yzq','mJG2nJiWneXKyMPNwG','rv0kcG','yxnZAxn0yw50','lxn0CMvHBq','CNjHEsbPCYbYzq','Bw9KzwW','sw52ywXPzcbkuW','zw5K','y2HHDc5JB21WBa','DgLVBL9LCNjVCG','vw5RBM93BIbLBG','CxvLC3rFzxjYBW','D2vIAg9VA1rVAW','C2XPy2u','qxnZAxn0yw50oG','BI9QC29U','Cg9W','BwvZC2fNzxm','r0vu','sw52ywXPzcbbua','C3LZDgvT','C3rYAw5NAwz5','zxqTna','yxv0AgvUDgLJyq','mZm3mfvfqwTtrW','zxrPB24Uy2H1BG','CY00lty','CxvLCNK','Bwv0Ag9K','BgvUz3rO','D3jPDgvizwfK','zMXVB3i','Ec1ZzxnZAw9Ulq','C3rVCa','y29UC3rYDwn0BW','nti3nZK5mtrqv0Hvuuu','ndq0mZneDLLyA1u','Dgv4Dc9LDMvUDa','CMfUzg9Tvvvjra','ywX2Aw4TAgfPAW','C3rYzwfT','y29UDgvUDa','BgLZDa','BwvZC2fNzq','AxnbCNjHEq','qMvHCMvYia','Dgv4Da','m0rgz2fozG'];_0x5141=function(){return _0x51d850;};return _0x5141();}import{ClaudeSDKProvider}from'../providers/claude-sdk-provider.js';function _0x2ca4(_0x30b971,_0x142584){_0x30b971=_0x30b971-(0x1eb6+0x1*0xd05+-0x3*0xe15);const _0xca54c3=_0x5141();let _0x428647=_0xca54c3[_0x30b971];if(_0x2ca4['nnlRkA']===undefined){var _0x1c2d38=function(_0x542e6e){const _0x944707='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2b043c='',_0x2d9bc2='',_0x549811=_0x2b043c+_0x1c2d38;for(let _0x33f61d=0x425+0x1c5a+0xad5*-0x3,_0x1f8ced,_0x3e2aca,_0x564d68=-0x42d+-0x23c1+0x27ee;_0x3e2aca=_0x542e6e['charAt'](_0x564d68++);~_0x3e2aca&&(_0x1f8ced=_0x33f61d%(-0x14a6+0x1*-0x6e2+0x6e3*0x4)?_0x1f8ced*(-0x1707+0x5e5+0x5*0x37a)+_0x3e2aca:_0x3e2aca,_0x33f61d++%(-0x715*0x3+-0x2410+0x3953))?_0x2b043c+=_0x549811['charCodeAt'](_0x564d68+(0xdcd*-0x2+-0x36d*-0xb+-0xa0b))-(0x100+-0xcd7*-0x1+-0xdcd)!==-0xd3*-0x1+-0x9af*-0x3+-0x1*0x1de0?String['fromCharCode'](0x1*0x12e5+-0x3*0xc0e+-0x2*-0x922&_0x1f8ced>>(-(0x8b3+0x2e1+-0xb92)*_0x33f61d&-0x1c47+0x1661+-0x17b*-0x4)):_0x33f61d:0xeef*0x2+-0x2*-0xfe+0x38a*-0x9){_0x3e2aca=_0x944707['indexOf'](_0x3e2aca);}for(let _0x211997=0x1efc+-0x741+-0xe1*0x1b,_0x5cd0b6=_0x2b043c['length'];_0x211997<_0x5cd0b6;_0x211997++){_0x2d9bc2+='%'+('00'+_0x2b043c['charCodeAt'](_0x211997)['toString'](0x2e5+-0x1b09*-0x1+-0x1dde))['slice'](-(-0xe2+-0x1edb+-0x1b*-0x12d));}return decodeURIComponent(_0x2d9bc2);};_0x2ca4['TSKoUe']=_0x1c2d38,_0x2ca4['dcUwMz']={},_0x2ca4['nnlRkA']=!![];}const _0x2226d1=_0xca54c3[-0xbc2+0x6a5*0x5+-0x1577*0x1],_0x39822b=_0x30b971+_0x2226d1,_0x6b47b9=_0x2ca4['dcUwMz'][_0x39822b];if(!_0x6b47b9){const _0x51ad01=function(_0x342dce){this['fFvaxQ']=_0x342dce,this['zochVa']=[-0x16ab+0x1*0x586+0x1126,-0x6a4*-0x3+0x1*0x1445+0x2831*-0x1,0xb4*-0x27+0x8*-0x312+0x33fc],this['nvcFQA']=function(){return'newState';},this['hUJypH']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['AkyYbK']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x51ad01['prototype']['eSbqAm']=function(){const _0x10a96c=new RegExp(this['hUJypH']+this['AkyYbK']),_0x3efe74=_0x10a96c['test'](this['nvcFQA']['toString']())?--this['zochVa'][0x11*-0x23d+-0x4*-0x36a+-0x12*-0x15b]:--this['zochVa'][-0xf*-0x281+-0xa79+-0x1b16];return this['vVvSMn'](_0x3efe74);},_0x51ad01['prototype']['vVvSMn']=function(_0x5027b3){if(!Boolean(~_0x5027b3))return _0x5027b3;return this['riYcxq'](this['fFvaxQ']);},_0x51ad01['prototype']['riYcxq']=function(_0x9bf8f1){for(let _0x1e1e91=-0xb73+0x1*0x1b00+-0xf8d,_0x2e15ad=this['zochVa']['length'];_0x1e1e91<_0x2e15ad;_0x1e1e91++){this['zochVa']['push'](Math['round'](Math['random']())),_0x2e15ad=this['zochVa']['length'];}return _0x9bf8f1(this['zochVa'][-0xbab+0x2203+-0x1658]);},new _0x51ad01(_0x2ca4)['eSbqAm'](),_0x428647=_0x2ca4['TSKoUe'](_0x428647),_0x2ca4['dcUwMz'][_0x39822b]=_0x428647;}else _0x428647=_0x6b47b9;return _0x428647;}import{config}from'../config.js';let provider=null;function getProvider(){return!provider&&(provider=new ClaudeSDKProvider()),provider;}function checkBearer(_0x39822b){const _0x3bda17=_0x2ca4,_0x41a04f=_0x2ca4;if(!config[_0x3bda17(0x19f)+'en'])return![];const _0x6b47b9=_0x39822b[_0x41a04f(0x186)][_0x41a04f(0x18e)+_0x3bda17(0x1d0)]||'';return _0x6b47b9===_0x3bda17(0x1c0)+config[_0x3bda17(0x19f)+'en'];}function handleModels(_0x542e6e){const _0x1f288e=_0x2ca4,_0x29fa71=_0x2ca4,_0x944707=Math[_0x1f288e(0x1b2)](Date[_0x1f288e(0x183)]()/(-0x42d+-0x23c1+0x2bd6));_0x542e6e['setHeader']('Content-Ty'+'pe',_0x1f288e(0x1c3)+_0x1f288e(0x1a2)),_0x542e6e[_0x29fa71(0x19a)](JSON['stringify']({'object':_0x29fa71(0x1bd),'data':[{'id':_0x29fa71(0x1c5)+'-4','object':_0x29fa71(0x198),'created':_0x944707,'owned_by':'alvin-bot'},{'id':_0x29fa71(0x189)+_0x1f288e(0x1a9),'object':_0x1f288e(0x198),'created':_0x944707,'owned_by':_0x29fa71(0x1c8)},{'id':_0x29fa71(0x1ba)+'u-4','object':'model','created':_0x944707,'owned_by':'alvin-bot'}]}));}function buildPromptFromMessages(_0x2b043c){const _0x277bd2=_0x2ca4,_0x22431c=_0x2ca4;let _0x2d9bc2='';const _0x549811=[];for(const _0x33f61d of _0x2b043c){if(_0x33f61d['role']===_0x277bd2(0x1a7))_0x2d9bc2+=(_0x2d9bc2?'\x0a\x0a':'')+_0x33f61d[_0x22431c(0x1bc)];else{if(_0x33f61d[_0x277bd2(0x1d6)]===_0x277bd2(0x191))_0x549811['push'](_0x277bd2(0x181)+_0x33f61d[_0x277bd2(0x1bc)]);else _0x33f61d[_0x22431c(0x1d6)]===_0x22431c(0x195)&&_0x549811['push'](_0x277bd2(0x1a1)+'\x20'+_0x33f61d['content']);}}if(_0x549811[_0x22431c(0x1b0)]<=-0x14a6+0x1*-0x6e2+0x3ef*0x7){const _0x1f8ced=_0x2b043c['filter'](_0x3e2aca=>_0x3e2aca[_0x277bd2(0x1d6)]===_0x22431c(0x191))[_0x22431c(0x1a3)]();return{'prompt':_0x1f8ced?.['content']||'','systemPrompt':_0x2d9bc2};}return{'prompt':_0x549811[_0x22431c(0x185)]('\x0a\x0a'),'systemPrompt':_0x2d9bc2};}async function handleChatCompletions(_0x564d68,_0x211997,_0x5cd0b6){const _0x379801=_0x2ca4,_0x533d0d=_0x2ca4;let _0x51ad01;try{_0x51ad01=JSON['parse'](_0x5cd0b6);}catch{_0x211997[_0x379801(0x1b1)](-0x1707+0x5e5+0x1*0x12b2,{'Content-Type':'applicatio'+'n/json'}),_0x211997[_0x379801(0x19a)](JSON['stringify']({'error':{'message':_0x533d0d(0x199)+'ON\x20body','type':_0x533d0d(0x192)+'quest_erro'+'r'}}));return;}if(!_0x51ad01[_0x533d0d(0x1a4)]||!Array[_0x379801(0x1bf)](_0x51ad01[_0x379801(0x1a4)])||_0x51ad01[_0x379801(0x1a4)]['length']===-0x715*0x3+-0x2410+0x394f){_0x211997['writeHead'](0xdcd*-0x2+-0x36d*-0xb+-0x885,{'Content-Type':_0x379801(0x1c3)+'n/json'}),_0x211997[_0x533d0d(0x19a)](JSON[_0x379801(0x1a8)]({'error':{'message':_0x379801(0x1c4)+_0x533d0d(0x197)+'quired','type':'invalid_re'+_0x379801(0x19e)+'r'}}));return;}const {prompt:_0x342dce,systemPrompt:_0x10a96c}=buildPromptFromMessages(_0x51ad01[_0x533d0d(0x1a4)]),_0x3efe74=_0x379801(0x187)+_0x30b971[_0x379801(0x1b9)]()[_0x379801(0x1c7)](/-/g,'')[_0x533d0d(0x1a0)](0x100+-0xcd7*-0x1+-0xdd7,-0xd3*-0x1+-0x9af*-0x3+-0x1*0x1dc8),_0x5027b3=Math[_0x379801(0x1b2)](Date[_0x533d0d(0x183)]()/(0x1*0x12e5+-0x3*0xc0e+-0x3*-0x70f)),_0x9bf8f1=_0x51ad01[_0x379801(0x198)]||'claude-opu'+_0x379801(0x1ad),_0x1e1e91=_0x564d68[_0x379801(0x186)][_0x379801(0x1b3)+'id']||null,_0x2e15ad=getProvider();if(_0x51ad01[_0x533d0d(0x1bb)]!==![]){_0x211997[_0x533d0d(0x1b1)](0x8b3+0x2e1+-0xacc,{'Content-Type':_0x533d0d(0x1b8)+_0x533d0d(0x196),'Cache-Control':'no-cache','Connection':_0x379801(0x17d),'X-Accel-Buffering':'no'});const _0x8c6849={'id':_0x3efe74,'object':_0x379801(0x19b)+_0x533d0d(0x1ac)+'k','created':_0x5027b3,'model':_0x9bf8f1,'choices':[{'index':0x0,'delta':{'role':_0x379801(0x195),'content':''},'finish_reason':null}]};_0x211997['write']('data:\x20'+JSON[_0x379801(0x1a8)](_0x8c6849)+'\x0a\x0a');let _0x165f82='',_0x17af6b=-0x1c47+0x1661+-0x97*-0xa,_0x116009=0xeef*0x2+-0x2*-0xfe+0x38a*-0x9;try{for await(const _0x438cf9 of _0x2e15ad[_0x533d0d(0x1ae)]({'prompt':_0x342dce,'systemPrompt':_0x10a96c,'sessionId':_0x1e1e91})){if(_0x438cf9[_0x379801(0x188)]==='text'&&_0x438cf9[_0x533d0d(0x1d4)]){const _0xd72041={'id':_0x3efe74,'object':_0x533d0d(0x19b)+'etion.chun'+'k','created':_0x5027b3,'model':_0x9bf8f1,'choices':[{'index':0x0,'delta':{'content':_0x438cf9[_0x533d0d(0x1d4)]},'finish_reason':null}]};_0x211997[_0x533d0d(0x18d)](_0x379801(0x18a)+JSON[_0x379801(0x1a8)](_0xd72041)+'\x0a\x0a');}if(_0x438cf9[_0x533d0d(0x188)]===_0x533d0d(0x1d7)){_0x165f82=_0x438cf9[_0x379801(0x182)]||'',_0x17af6b=_0x438cf9['inputToken'+'s']||0x1efc+-0x741+-0xe1*0x1b,_0x116009=_0x438cf9['outputToke'+'ns']||0x2e5+-0x1b09*-0x1+-0x1dee;const _0x1cfea4={'id':_0x3efe74,'object':_0x533d0d(0x19b)+_0x379801(0x1ac)+'k','created':_0x5027b3,'model':_0x9bf8f1,'choices':[{'index':0x0,'delta':{},'finish_reason':'stop'}],..._0x17af6b||_0x116009?{'usage':{'prompt_tokens':_0x17af6b,'completion_tokens':_0x116009,'total_tokens':_0x17af6b+_0x116009}}:{}};_0x211997['write']('data:\x20'+JSON[_0x379801(0x1a8)](_0x1cfea4)+'\x0a\x0a');}if(_0x438cf9[_0x533d0d(0x188)]===_0x379801(0x1cc)){const _0x573084={'id':_0x3efe74,'object':_0x379801(0x19b)+_0x533d0d(0x1ac)+'k','created':_0x5027b3,'model':_0x9bf8f1,'choices':[{'index':0x0,'delta':{'content':_0x533d0d(0x18f)+_0x438cf9[_0x379801(0x1cc)]+']'},'finish_reason':_0x533d0d(0x1b4)}]};_0x211997['write'](_0x379801(0x18a)+JSON['stringify'](_0x573084)+'\x0a\x0a');}}}catch(_0x21c453){const _0x53f67b=_0x21c453 instanceof Error?_0x21c453[_0x379801(0x1be)]:String(_0x21c453),_0x4ae3fd={'id':_0x3efe74,'object':_0x379801(0x19b)+_0x379801(0x1ac)+'k','created':_0x5027b3,'model':_0x9bf8f1,'choices':[{'index':0x0,'delta':{'content':'\x0a\x0a[Error:\x20'+_0x53f67b+']'},'finish_reason':'stop'}]};_0x211997[_0x379801(0x18d)](_0x533d0d(0x18a)+JSON[_0x379801(0x1a8)](_0x4ae3fd)+'\x0a\x0a');}_0x165f82&&_0x211997[_0x533d0d(0x18d)](_0x533d0d(0x18a)+JSON[_0x533d0d(0x1a8)]({'session_id':_0x165f82})+'\x0a\x0a'),_0x211997[_0x379801(0x18d)]('data:\x20[DON'+_0x379801(0x194)),_0x211997[_0x379801(0x19a)]();}else{let _0x1f516d='',_0x6ab1f0=-0xe2+-0x1edb+-0x19*-0x145,_0x1f8db0=-0xbc2+0x6a5*0x5+-0x1577*0x1,_0x2048ca='';try{for await(const _0x3ff2c7 of _0x2e15ad[_0x533d0d(0x1ae)]({'prompt':_0x342dce,'systemPrompt':_0x10a96c,'sessionId':_0x1e1e91})){_0x3ff2c7[_0x533d0d(0x188)]===_0x533d0d(0x1c1)&&_0x3ff2c7[_0x379801(0x1d4)]&&(_0x1f516d+=_0x3ff2c7['delta']);_0x3ff2c7['type']===_0x533d0d(0x1d7)&&(_0x2048ca=_0x3ff2c7[_0x379801(0x182)]||'',_0x6ab1f0=_0x3ff2c7['inputToken'+'s']||-0x16ab+0x1*0x586+0x1125,_0x1f8db0=_0x3ff2c7[_0x379801(0x1d3)+'ns']||-0x6a4*-0x3+0x1*0x1445+0x2831*-0x1);if(_0x3ff2c7[_0x379801(0x188)]===_0x533d0d(0x1cc)){_0x211997['writeHead'](0xb4*-0x27+0x8*-0x312+0x35f0,{'Content-Type':'applicatio'+_0x533d0d(0x1a2)}),_0x211997[_0x379801(0x19a)](JSON[_0x379801(0x1a8)]({'error':{'message':_0x3ff2c7[_0x379801(0x1cc)]||_0x533d0d(0x1cf)+_0x379801(0x18b),'type':'server_err'+'or'}}));return;}}}catch(_0x2129aa){const _0x3d4711=_0x2129aa instanceof Error?_0x2129aa[_0x533d0d(0x1be)]:String(_0x2129aa);_0x211997[_0x533d0d(0x1b1)](0x11*-0x23d+-0x4*-0x36a+-0x47*-0x5f,{'Content-Type':_0x533d0d(0x1c3)+_0x379801(0x1a2)}),_0x211997['end'](JSON[_0x533d0d(0x1a8)]({'error':{'message':_0x3d4711,'type':_0x533d0d(0x180)+'or'}}));return;}_0x211997[_0x533d0d(0x1b1)](-0xf*-0x281+-0xa79+-0x1a4e,{'Content-Type':_0x379801(0x1c3)+_0x379801(0x1a2),..._0x2048ca?{'x-session-id':_0x2048ca}:{}}),_0x211997[_0x533d0d(0x19a)](JSON[_0x379801(0x1a8)]({'id':_0x3efe74,'object':_0x533d0d(0x19b)+'etion','created':_0x5027b3,'model':_0x9bf8f1,'choices':[{'index':0x0,'message':{'role':'assistant','content':_0x1f516d},'finish_reason':_0x533d0d(0x1b4)}],'usage':{'prompt_tokens':_0x6ab1f0,'completion_tokens':_0x1f8db0,'total_tokens':_0x6ab1f0+_0x1f8db0}}));}}export function handleOpenAICompat(_0x4415f8,_0x299d84,_0x1c533e,_0x54db54){const _0x5e9b57=_0x2ca4,_0x5e0df1=_0x2ca4;if(!_0x1c533e['startsWith']('/v1/'))return![];if(!checkBearer(_0x4415f8))return _0x299d84[_0x5e9b57(0x1b1)](-0xb73+0x1*0x1b00+-0xdfc,{'Content-Type':_0x5e0df1(0x1c3)+_0x5e9b57(0x1a2)}),_0x299d84['end'](JSON[_0x5e0df1(0x1a8)]({'error':{'message':_0x5e9b57(0x1a6)+_0x5e0df1(0x18c),'type':_0x5e0df1(0x1aa)+_0x5e9b57(0x19c)}})),!![];if(_0x1c533e===_0x5e9b57(0x1d2)&&_0x4415f8[_0x5e0df1(0x1af)]===_0x5e9b57(0x1a5))return handleModels(_0x299d84),!![];if(_0x1c533e===_0x5e0df1(0x1d5)+'ompletions'&&_0x4415f8[_0x5e0df1(0x1af)]===_0x5e0df1(0x1cb))return handleChatCompletions(_0x4415f8,_0x299d84,_0x54db54),!![];return _0x299d84[_0x5e9b57(0x1b1)](-0xbab+0x2203+-0x14c4,{'Content-Type':_0x5e9b57(0x1c3)+_0x5e0df1(0x1a2)}),_0x299d84[_0x5e9b57(0x19a)](JSON[_0x5e9b57(0x1a8)]({'error':{'message':_0x5e0df1(0x19d)+_0x5e0df1(0x17c)+_0x1c533e,'type':_0x5e0df1(0x192)+_0x5e9b57(0x19e)+'r'}})),!![];}
|