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
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Alvin Bot are documented here.
|
|
4
4
|
|
|
5
|
+
## [5.8.0] — 2026-05-19
|
|
6
|
+
|
|
7
|
+
### Smaller, hardened distribution build
|
|
8
|
+
|
|
9
|
+
The published npm package now ships a hardened, build-optimized
|
|
10
|
+
distribution instead of raw compiled files. The bot behaves exactly as
|
|
11
|
+
before — same commands, same configuration, same data, same
|
|
12
|
+
performance — but the shipped code is leaner and more tamper-resistant.
|
|
13
|
+
Local development is completely untouched: `npm run build` still
|
|
14
|
+
produces the normal readable build for contributors, and an internal
|
|
15
|
+
debug build remains available for troubleshooting. As always, verified
|
|
16
|
+
with a fresh global install on a clean separate machine.
|
|
17
|
+
|
|
18
|
+
## [5.7.0] — 2026-05-19
|
|
19
|
+
|
|
20
|
+
### Background-task results now arrive the instant the task finishes, and survive a restart
|
|
21
|
+
|
|
22
|
+
Detached background-task results were delivered by a 15-second polling
|
|
23
|
+
loop whose in-memory state could diverge across a bot restart, so a task
|
|
24
|
+
that finished around a restart could keep its result undelivered with
|
|
25
|
+
nothing shown in chat. Delivery is now pushed the moment the task's
|
|
26
|
+
process exits — through an always-on local callback guarded by a
|
|
27
|
+
per-boot token — and a startup reconciliation pass drains anything that
|
|
28
|
+
completed while the bot was down. An atomic deliver-once marker
|
|
29
|
+
guarantees the push, the polling backstop, and reconciliation never
|
|
30
|
+
double-deliver, and a cancelled task can no longer be resurrected. The
|
|
31
|
+
polling loop is kept only as a backstop for timeouts and stalled tasks.
|
|
32
|
+
No configuration is required and nothing changes for existing setups.
|
|
33
|
+
|
|
5
34
|
## [5.6.2] — 2026-05-19
|
|
6
35
|
|
|
7
36
|
### Long background-task results now reliably arrive in chat
|
package/README.md
CHANGED
|
@@ -71,7 +71,7 @@ Alvin Bot sits in the same category as **Hermes Agent** (Nous Research) and **Op
|
|
|
71
71
|
- **Use Hermes Agent when** you want a research-grade self-improving agent, need it to act as an **MCP server** for Claude Desktop / Cursor / VS Code, want 200+ model choice or many execution backends, and value a large community.
|
|
72
72
|
- **Use OpenClaw when** you want the **widest messaging reach** (25–50+ channels) plus native mobile apps and voice activation, fully transparent plain-file memory you can git-track, and the largest ecosystem.
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
A longer head-to-head with FAQ and decision guide: **[Alvin Bot vs Hermes vs OpenClaw](https://alvin.alev-b.com/vs/hermes-openclaw)**.
|
|
75
75
|
|
|
76
76
|
---
|
|
77
77
|
|
package/dist/claude.js
CHANGED
|
@@ -1,102 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { readFileSync } from "fs";
|
|
3
|
-
import { resolve, dirname } from "path";
|
|
4
|
-
import { fileURLToPath } from "url";
|
|
5
|
-
import { findClaudeBinary } from "./find-claude-binary.js";
|
|
6
|
-
// Bot project root (one level up from src/)
|
|
7
|
-
const BOT_PROJECT_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
8
|
-
// Load bot's CLAUDE.md at startup — personality, rules, memory instructions
|
|
9
|
-
let botClaudeMd = "";
|
|
10
|
-
try {
|
|
11
|
-
botClaudeMd = readFileSync(resolve(BOT_PROJECT_ROOT, "CLAUDE.md"), "utf-8");
|
|
12
|
-
// Replace relative docs/ paths with absolute paths so memory works from any CWD
|
|
13
|
-
botClaudeMd = botClaudeMd.replaceAll("docs/", `${BOT_PROJECT_ROOT}/docs/`);
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
// CLAUDE.md not found — continue without bot-specific instructions
|
|
17
|
-
}
|
|
18
|
-
// Checkpoint reminder thresholds
|
|
19
|
-
const CHECKPOINT_TOOL_THRESHOLD = 15; // After N tool uses → inject checkpoint reminder
|
|
20
|
-
const CHECKPOINT_MSG_THRESHOLD = 10; // After N messages → inject checkpoint reminder
|
|
21
|
-
export async function runClaudeAgent(opts) {
|
|
22
|
-
// Remove env vars that prevent nested Claude Code sessions
|
|
23
|
-
const cleanEnv = { ...process.env };
|
|
24
|
-
delete cleanEnv.CLAUDECODE;
|
|
25
|
-
delete cleanEnv.CLAUDE_CODE_ENTRYPOINT;
|
|
26
|
-
// Build prompt — inject checkpoint reminder if thresholds exceeded
|
|
27
|
-
let prompt = opts.prompt;
|
|
28
|
-
const needsCheckpoint = opts.toolUseCount >= CHECKPOINT_TOOL_THRESHOLD ||
|
|
29
|
-
opts.messageCount >= CHECKPOINT_MSG_THRESHOLD;
|
|
30
|
-
if (needsCheckpoint) {
|
|
31
|
-
prompt = `[CHECKPOINT] Du hast bereits ${opts.toolUseCount} Tool-Aufrufe und ${opts.messageCount} Nachrichten in dieser Session. Schreibe jetzt einen Checkpoint in deine Memory-Datei (docs/memory/YYYY-MM-DD.md) bevor du diese Anfrage bearbeitest — fasse den bisherigen Kontext kurz zusammen.\n\n${prompt}`;
|
|
32
|
-
}
|
|
33
|
-
// Find the claude native binary path
|
|
34
|
-
const claudePath = findClaudeBinary();
|
|
35
|
-
const q = query({
|
|
36
|
-
prompt,
|
|
37
|
-
options: {
|
|
38
|
-
cwd: opts.workingDir,
|
|
39
|
-
abortController: opts.abortController,
|
|
40
|
-
resume: opts.sessionId ?? undefined,
|
|
41
|
-
pathToClaudeCodeExecutable: claudePath,
|
|
42
|
-
permissionMode: "bypassPermissions",
|
|
43
|
-
allowDangerouslySkipPermissions: true,
|
|
44
|
-
env: cleanEnv,
|
|
45
|
-
settingSources: ["user", "project"],
|
|
46
|
-
allowedTools: [
|
|
47
|
-
"Read", "Write", "Edit", "Bash", "Glob", "Grep",
|
|
48
|
-
"WebSearch", "WebFetch", "Task",
|
|
49
|
-
],
|
|
50
|
-
systemPrompt: `You are an autonomous AI agent, controlled via Telegram.
|
|
51
|
-
Keep answers short and concise, but thorough.
|
|
52
|
-
Use Markdown formatting compatible with Telegram (bold, italic, code blocks).
|
|
53
|
-
When you execute commands or edit files, briefly explain what you did.
|
|
54
|
-
Reply in the language the user writes in.
|
|
55
|
-
|
|
56
|
-
${botClaudeMd}`,
|
|
57
|
-
effort: opts.effort,
|
|
58
|
-
maxTurns: 50,
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
let accumulatedText = "";
|
|
62
|
-
let capturedSessionId = opts.sessionId || "";
|
|
63
|
-
let localToolUseCount = 0;
|
|
64
|
-
for await (const message of q) {
|
|
65
|
-
// System init message — capture session ID
|
|
66
|
-
if (message.type === "system" && "subtype" in message && message.subtype === "init") {
|
|
67
|
-
const sysMsg = message;
|
|
68
|
-
capturedSessionId = sysMsg.session_id;
|
|
69
|
-
}
|
|
70
|
-
// Assistant message — extract text and tool use
|
|
71
|
-
if (message.type === "assistant") {
|
|
72
|
-
const assistantMsg = message;
|
|
73
|
-
capturedSessionId = assistantMsg.session_id;
|
|
74
|
-
if (assistantMsg.message?.content) {
|
|
75
|
-
for (const block of assistantMsg.message.content) {
|
|
76
|
-
if ("text" in block && block.text) {
|
|
77
|
-
accumulatedText += block.text;
|
|
78
|
-
await opts.onText(accumulatedText);
|
|
79
|
-
}
|
|
80
|
-
if ("name" in block) {
|
|
81
|
-
localToolUseCount++;
|
|
82
|
-
if (opts.onToolUse) {
|
|
83
|
-
await opts.onToolUse(block.name);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Result message — complete
|
|
90
|
-
if (message.type === "result") {
|
|
91
|
-
const resultMsg = message;
|
|
92
|
-
// Report tool use count back to caller for session tracking
|
|
93
|
-
if (opts.onToolUseCount) {
|
|
94
|
-
opts.onToolUseCount(localToolUseCount);
|
|
95
|
-
}
|
|
96
|
-
opts.onComplete({
|
|
97
|
-
sessionId: resultMsg.session_id || capturedSessionId,
|
|
98
|
-
cost: "total_cost_usd" in resultMsg ? resultMsg.total_cost_usd : 0,
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
1
|
+
const _0x507fe7=_0x36de,_0x5cdd4a=_0x36de;function _0x525f(){const _0x35236f=['mtqZmZu1rMjKy05M','yxbWBhK','ifrVB2WTqxvMCG','C3LZDgvT','CY9Tzw1VCNKVwq','q0Xbvurfq09erq','mJC1mde4mejVAuD2sa','C2vHCMnO','v3jPDgu','igf1Dg9UB21VDq','mJm2odaWmKLRDgf4CW','yxr0Aw5NignVBq','zhuGzgLLC2uGqq','vgfZAW','B3vUDa','B25dB21WBgv0zq','lcbICMLLzMX5ia','zw52','rwrPDa','B25uB29SvxnLqW','B25uB29SvxnL','ChjVAMvJDa','DxrMltG','C2vZC2LVBKLK','y29UDgvUDa','BwvZC2fNzq','C2vZC2LVBL9Pza','DgfSAwmSignVza','lIbty2HYzwLIzq','A3vYEIb6DxnHBq','DgGGvgvSzwDYyq','wvLzlu1nlurelG','CMjLAxrLC3qG4Ocu','uMvHza','x3vZza','CMvWBgfJzufSBa','mZz1D1DgBK8','BwqPigjLDM9Yia','Aw50igLUigrLAq','D29YA2LUz0rPCG','qMfZAa','AxnZAw9UCW','mZjRsurXrvO','n0TjEMHSyG','rv9ftLrswvbpsq','BMfTzq','Dg90ywXFy29ZDa','q0XbvurflM1K','w0nirunlue9jtG','Dg9VBfvZzunVDq','zxHWBgfPBIb3Aa','zxiGD3jPDgvZia','yxnZAxn0yw50','DhLWzq','A2rVD24GzM9YBq','CMvZDwX0','DxqGDgHVCM91zW','zwqGDMLHifrLBa','CYbbssbHz2vUDa','zw4Gq2HLy2TWBW','zw4GAw4GzgLLCW','BMzYywDLigjLyq','cLDOzw4GEw91ia','v2vIu2vHCMnO','zxiGu2vZC2LVBG','Bw1HBMrZig9Yia','DwzLihvUzca','ywDLihrOzsb1CW','igjPC2HLCMLNzq','mtyXodCZnMTlBerivq','r3jLCa','lcbJB250CM9SBa','nJuWnJuZB3npAuPy','Dgv4Da','yxqGEw91igrPza','Ac4kvxnLie1HCG','kcGOlISPkYKRkq','B25uzxH0','BwvZC2fNzunVDq','v2vIrMv0y2G','q0Xbvurfx0npra','vf0GrhuGAgfZDa','zwDYyw0UcKTLzq','Cgf0AwjSzsb3Aq','oti4nJi5D3n1u1nJ','C3vIDhLWzq','zg9JCY8','B2XSzxi','CcbHBNn3zxjZia','mtm5nZHsCM1ns0S'];_0x525f=function(){return _0x35236f;};return _0x525f();}(function(_0x32c624,_0x4f7811){const _0xeb8e34=_0x36de,_0x4fd357=_0x36de,_0x43e14a=_0x32c624();while(!![]){try{const _0x124833=-parseInt(_0xeb8e34(0x1d5))/(-0x19d2+0x6ff+0x12d4)+parseInt(_0x4fd357(0x18c))/(-0x1097*-0x1+0x259+-0x12ee)+parseInt(_0xeb8e34(0x187))/(0x3be+-0xc90+0x8d5)+-parseInt(_0xeb8e34(0x1b7))/(-0x14d7+0x21b5*-0x1+0x6d2*0x8)*(-parseInt(_0xeb8e34(0x18d))/(0x1d5d+0xd*-0x1f7+-0x3cd))+parseInt(_0x4fd357(0x197))/(0x1d15+0x1831+-0x3540)*(-parseInt(_0x4fd357(0x1b8))/(-0x148+-0x6*-0x14e+-0x685))+-parseInt(_0x4fd357(0x1d2))/(0xb*0x105+0x625+0x1154*-0x1)+-parseInt(_0x4fd357(0x1b1))/(0xc*0xf9+-0x2426+0xfb*0x19)*(-parseInt(_0xeb8e34(0x193))/(-0x22*-0x125+0x1*0x119+-0x27f9));if(_0x124833===_0x4f7811)break;else _0x43e14a['push'](_0x43e14a['shift']());}catch(_0x3e2086){_0x43e14a['push'](_0x43e14a['shift']());}}}(_0x525f,0x34a7*0x5+0xd69*0xdf+0x7*-0xf28c));const _0x3b3dfa=(function(){let _0x37c811=!![];return function(_0x41002b,_0x599f4d){const _0x1e7dbe=_0x37c811?function(){const _0x5a80eb=_0x36de;if(_0x599f4d){const _0xb2b4cb=_0x599f4d[_0x5a80eb(0x18e)](_0x41002b,arguments);return _0x599f4d=null,_0xb2b4cb;}}:function(){};return _0x37c811=![],_0x1e7dbe;};}()),_0x1f1375=_0x3b3dfa(this,function(){const _0x4bd961=_0x36de,_0x34eac8=_0x36de;return _0x1f1375['toString']()[_0x4bd961(0x194)](_0x34eac8(0x1d9)+'+$')['toString']()['constructo'+'r'](_0x1f1375)[_0x4bd961(0x194)](_0x4bd961(0x1d9)+'+$');});_0x1f1375();import{query}from'@anthropic-ai/claude-agent-sdk';import{readFileSync}from'fs';import{resolve,dirname}from'path';function _0x36de(_0x538734,_0x10835e){_0x538734=_0x538734-(-0x1a*0x4a+0x1ad*0xf+-0x101d*0x1);const _0x19c581=_0x525f();let _0x415f4e=_0x19c581[_0x538734];if(_0x36de['LGibzg']===undefined){var _0x46c9e8=function(_0x27faf4){const _0x9eb401='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1712f3='',_0x2e1f8b='',_0x393e85=_0x1712f3+_0x46c9e8;for(let _0x3ec25a=0x61*0x11+0x691*-0x1+0x20,_0x58257a,_0x1fc7d7,_0x2b7373=-0x92*-0x34+-0x18ff+-0x4a9;_0x1fc7d7=_0x27faf4['charAt'](_0x2b7373++);~_0x1fc7d7&&(_0x58257a=_0x3ec25a%(0x14bd+0x1*-0xe06+-0x6b3)?_0x58257a*(-0x18d*-0x11+0x123e+0x2f5*-0xf)+_0x1fc7d7:_0x1fc7d7,_0x3ec25a++%(0x1*-0x16a3+0x4*0x782+0x761*-0x1))?_0x1712f3+=_0x393e85['charCodeAt'](_0x2b7373+(-0x1*0xe17+0x1*-0x1dec+-0x3*-0xeaf))-(-0x1*-0x53d+0x2f*-0x95+0x1628)!==-0x1bfd+0x1*-0xd2b+-0x18*-0x1b7?String['fromCharCode'](-0x9ec+-0x2382+-0x1*-0x2e6d&_0x58257a>>(-(0x23c5+-0x1*-0x236f+-0x4732)*_0x3ec25a&-0xb11+0x1591*0x1+-0x6*0x1bf)):_0x3ec25a:0x34*-0x65+0x1302+0x182){_0x1fc7d7=_0x9eb401['indexOf'](_0x1fc7d7);}for(let _0x3d60be=-0x78a*0x1+0x1c0b+0x1*-0x1481,_0x372fa9=_0x1712f3['length'];_0x3d60be<_0x372fa9;_0x3d60be++){_0x2e1f8b+='%'+('00'+_0x1712f3['charCodeAt'](_0x3d60be)['toString'](0x1*-0xdcd+0x743+0x69a))['slice'](-(-0x22bc+-0x12a*-0x12+0xdca));}return decodeURIComponent(_0x2e1f8b);};_0x36de['JGfMHu']=_0x46c9e8,_0x36de['aCaOMl']={},_0x36de['LGibzg']=!![];}const _0x194188=_0x19c581[-0x25cb+0x2*-0x1e7+0x2999],_0x532f66=_0x538734+_0x194188,_0x4d3687=_0x36de['aCaOMl'][_0x532f66];if(!_0x4d3687){const _0x458141=function(_0x3cdaef){this['mPLERc']=_0x3cdaef,this['TqmxXz']=[-0x1b11+-0x15cf+-0x81*-0x61,-0x1*-0x5fb+0xa8d+0x4*-0x422,-0x8*0x26b+0x1550+-0x6*0x54],this['WxYLLC']=function(){return'newState';},this['uYHYPq']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['mnwzVO']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x458141['prototype']['dQAeQn']=function(){const _0x2852dc=new RegExp(this['uYHYPq']+this['mnwzVO']),_0x3d0eee=_0x2852dc['test'](this['WxYLLC']['toString']())?--this['TqmxXz'][-0x8*-0x17b+-0x19d2+0xdfb]:--this['TqmxXz'][-0x1097*-0x1+0x259+-0x12f0];return this['caCzEu'](_0x3d0eee);},_0x458141['prototype']['caCzEu']=function(_0x5bca0e){if(!Boolean(~_0x5bca0e))return _0x5bca0e;return this['voFzjA'](this['mPLERc']);},_0x458141['prototype']['voFzjA']=function(_0x3def1e){for(let _0x391fac=0x3be+-0xc90+0x8d2,_0x5b2af3=this['TqmxXz']['length'];_0x391fac<_0x5b2af3;_0x391fac++){this['TqmxXz']['push'](Math['round'](Math['random']())),_0x5b2af3=this['TqmxXz']['length'];}return _0x3def1e(this['TqmxXz'][-0x14d7+0x21b5*-0x1+0x1b46*0x2]);},new _0x458141(_0x36de)['dQAeQn'](),_0x415f4e=_0x36de['JGfMHu'](_0x415f4e),_0x36de['aCaOMl'][_0x532f66]=_0x415f4e;}else _0x415f4e=_0x4d3687;return _0x415f4e;}import{fileURLToPath}from'url';import{findClaudeBinary}from'./find-claude-binary.js';const BOT_PROJECT_ROOT=resolve(dirname(fileURLToPath(import.meta.url)),'..');let botClaudeMd='';try{botClaudeMd=readFileSync(resolve(BOT_PROJECT_ROOT,_0x507fe7(0x1bc)),_0x5cdd4a(0x1a3)),botClaudeMd=botClaudeMd[_0x507fe7(0x1b0)](_0x507fe7(0x189),BOT_PROJECT_ROOT+'/docs/');}catch{}const CHECKPOINT_TOOL_THRESHOLD=-0xe7*-0x2a+-0x12a*0xe+-0x158b,CHECKPOINT_MSG_THRESHOLD=-0x331+0x14bd+0x1*-0x1182;export async function runClaudeAgent(_0x4d2181){const _0x32bfaa=_0x507fe7,_0x453a7c=_0x507fe7,_0x2f1971={...process[_0x32bfaa(0x19e)]};delete _0x2f1971[_0x453a7c(0x192)],delete _0x2f1971[_0x32bfaa(0x183)+_0x453a7c(0x1b9)+'NT'];let _0x450daa=_0x4d2181['prompt'];const _0x31e462=_0x4d2181[_0x32bfaa(0x1be)+'nt']>=CHECKPOINT_TOOL_THRESHOLD||_0x4d2181[_0x453a7c(0x1db)+'nt']>=CHECKPOINT_MSG_THRESHOLD;_0x31e462&&(_0x450daa=_0x453a7c(0x1bd)+_0x453a7c(0x184)+'\x20bereits\x20'+_0x4d2181[_0x32bfaa(0x1be)+'nt']+(_0x32bfaa(0x18f)+_0x453a7c(0x1cf))+_0x4d2181[_0x453a7c(0x1db)+'nt']+('\x20Nachricht'+_0x453a7c(0x1c9)+_0x453a7c(0x1cd)+_0x32bfaa(0x1a9)+'\x20jetzt\x20ein'+_0x453a7c(0x1c8)+_0x32bfaa(0x1b3)+'ne\x20Memory-'+'Datei\x20(doc'+_0x32bfaa(0x191)+_0x453a7c(0x1ac)+_0x32bfaa(0x1b2)+_0x32bfaa(0x199)+_0x453a7c(0x1ca)+_0x32bfaa(0x1ad)+'\x20fasse\x20den'+_0x32bfaa(0x1d1)+'n\x20Kontext\x20'+_0x32bfaa(0x1aa)+'men.\x0a\x0a')+_0x450daa);const _0x41f5a6=findClaudeBinary(),_0x2a555c=query({'prompt':_0x450daa,'options':{'cwd':_0x4d2181[_0x453a7c(0x1b4)],'abortController':_0x4d2181['abortContr'+_0x453a7c(0x18a)],'resume':_0x4d2181[_0x453a7c(0x1a4)]??undefined,'pathToClaudeCodeExecutable':_0x41f5a6,'permissionMode':'bypassPerm'+_0x453a7c(0x1b6),'allowDangerouslySkipPermissions':!![],'env':_0x2f1971,'settingSources':['user',_0x453a7c(0x1a2)],'allowedTools':[_0x32bfaa(0x1ae),_0x32bfaa(0x195),_0x32bfaa(0x19f),_0x453a7c(0x1b5),'Glob',_0x32bfaa(0x1d3),_0x453a7c(0x1cc),_0x32bfaa(0x182),_0x32bfaa(0x19a)],'systemPrompt':'You\x20are\x20an'+_0x32bfaa(0x196)+_0x32bfaa(0x1c7)+_0x32bfaa(0x1d4)+_0x32bfaa(0x1c6)+_0x453a7c(0x185)+_0x32bfaa(0x18b)+'short\x20and\x20'+'concise,\x20b'+_0x32bfaa(0x1c5)+_0x32bfaa(0x1d8)+_0x453a7c(0x1c3)+_0x32bfaa(0x198)+_0x32bfaa(0x186)+_0x32bfaa(0x1ab)+'m\x20(bold,\x20i'+_0x32bfaa(0x1a8)+'e\x20blocks).'+_0x32bfaa(0x1cb)+'execute\x20co'+_0x32bfaa(0x1ce)+'edit\x20files'+_0x453a7c(0x19d)+_0x453a7c(0x1bf)+_0x453a7c(0x1d7)+'.\x0aReply\x20in'+'\x20the\x20langu'+_0x32bfaa(0x1d0)+_0x32bfaa(0x1c0)+'in.\x0a\x0a'+botClaudeMd,'effort':_0x4d2181['effort'],'maxTurns':0x32}});let _0x36157e='',_0xe4c82c=_0x4d2181[_0x32bfaa(0x1a4)]||'',_0x315bc7=0xf35*-0x2+0x1a5d+0x40d;for await(const _0x298b84 of _0x2a555c){if(_0x298b84['type']===_0x453a7c(0x190)&&'subtype'in _0x298b84&&_0x298b84[_0x453a7c(0x188)]==='init'){const _0x39a496=_0x298b84;_0xe4c82c=_0x39a496[_0x32bfaa(0x1a7)];}if(_0x298b84['type']===_0x32bfaa(0x1c1)){const _0x45c555=_0x298b84;_0xe4c82c=_0x45c555['session_id'];if(_0x45c555[_0x453a7c(0x1a6)]?.['content'])for(const _0x2ae956 of _0x45c555['message'][_0x32bfaa(0x1a5)]){'text'in _0x2ae956&&_0x2ae956['text']&&(_0x36157e+=_0x2ae956[_0x32bfaa(0x1d6)],await _0x4d2181[_0x32bfaa(0x1da)](_0x36157e)),_0x453a7c(0x1ba)in _0x2ae956&&(_0x315bc7++,_0x4d2181[_0x32bfaa(0x1a1)]&&await _0x4d2181[_0x453a7c(0x1a1)](_0x2ae956[_0x453a7c(0x1ba)]));}}if(_0x298b84[_0x453a7c(0x1c2)]===_0x32bfaa(0x1c4)){const _0xd86a01=_0x298b84;_0x4d2181['onToolUseC'+_0x453a7c(0x19b)]&&_0x4d2181[_0x32bfaa(0x1a0)+'ount'](_0x315bc7),_0x4d2181[_0x32bfaa(0x19c)]({'sessionId':_0xd86a01[_0x32bfaa(0x1a7)]||_0xe4c82c,'cost':_0x453a7c(0x1bb)+_0x32bfaa(0x1af)in _0xd86a01?_0xd86a01['total_cost'+_0x32bfaa(0x1af)]:0x835+0x16d0*0x1+0x1*-0x1f05});}}}
|
package/dist/config.js
CHANGED
|
@@ -1,96 +1 @@
|
|
|
1
|
-
import dotenv from
|
|
2
|
-
import { resolve } from "path";
|
|
3
|
-
import os from "os";
|
|
4
|
-
import { existsSync } from "fs";
|
|
5
|
-
// Load .env from ~/.alvin-bot/.env (primary) with cwd fallback (dev mode)
|
|
6
|
-
const dataEnv = resolve(process.env.ALVIN_DATA_DIR || resolve(os.homedir(), ".alvin-bot"), ".env");
|
|
7
|
-
const cwdEnv = resolve(process.cwd(), ".env");
|
|
8
|
-
if (existsSync(dataEnv)) {
|
|
9
|
-
dotenv.config({ path: dataEnv });
|
|
10
|
-
}
|
|
11
|
-
else if (existsSync(cwdEnv)) {
|
|
12
|
-
dotenv.config({ path: cwdEnv });
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
dotenv.config(); // default behavior
|
|
16
|
-
}
|
|
17
|
-
export const config = {
|
|
18
|
-
// Telegram
|
|
19
|
-
botToken: process.env.BOT_TOKEN || "",
|
|
20
|
-
allowedUsers: (process.env.ALLOWED_USERS || "")
|
|
21
|
-
.split(",")
|
|
22
|
-
.map(Number)
|
|
23
|
-
.filter(Boolean),
|
|
24
|
-
telegramMaxLength: 4096,
|
|
25
|
-
streamThrottleMs: 1500,
|
|
26
|
-
// Agent
|
|
27
|
-
defaultWorkingDir: process.env.WORKING_DIR || os.homedir(),
|
|
28
|
-
maxBudgetUsd: Number(process.env.MAX_BUDGET_USD) || 5.0,
|
|
29
|
-
// Model provider (primary). Default is "groq" — works on a fresh install
|
|
30
|
-
// with only BOT_TOKEN + GROQ_API_KEY. Set PRIMARY_PROVIDER=claude-sdk to
|
|
31
|
-
// use the Claude SDK (requires `claude login` / Claude Max subscription).
|
|
32
|
-
primaryProvider: process.env.PRIMARY_PROVIDER || "groq",
|
|
33
|
-
fallbackProviders: (process.env.FALLBACK_PROVIDERS || "")
|
|
34
|
-
.split(",")
|
|
35
|
-
.map(s => s.trim())
|
|
36
|
-
.filter(Boolean),
|
|
37
|
-
// API Keys (for multi-model support)
|
|
38
|
-
apiKeys: {
|
|
39
|
-
anthropic: process.env.ANTHROPIC_API_KEY || "",
|
|
40
|
-
groq: process.env.GROQ_API_KEY || "",
|
|
41
|
-
openai: process.env.OPENAI_API_KEY || "",
|
|
42
|
-
google: process.env.GOOGLE_API_KEY || "",
|
|
43
|
-
nvidia: process.env.NVIDIA_API_KEY || "",
|
|
44
|
-
openrouter: process.env.OPENROUTER_API_KEY || "",
|
|
45
|
-
},
|
|
46
|
-
// Compaction
|
|
47
|
-
compactionThreshold: Number(process.env.COMPACTION_THRESHOLD) || 80000,
|
|
48
|
-
// Sub-Agents
|
|
49
|
-
maxSubAgents: Number(process.env.MAX_SUBAGENTS) || 4,
|
|
50
|
-
// Default sub-agent timeout. -1 / 0 = unlimited (no hard cut-off).
|
|
51
|
-
// The runtime value lives in sub-agents.json and can be changed at runtime
|
|
52
|
-
// via /subagents timeout; this constant only seeds the initial config on
|
|
53
|
-
// first launch when SUBAGENT_TIMEOUT is not set.
|
|
54
|
-
subAgentTimeout: process.env.SUBAGENT_TIMEOUT !== undefined && process.env.SUBAGENT_TIMEOUT !== ""
|
|
55
|
-
? Number(process.env.SUBAGENT_TIMEOUT)
|
|
56
|
-
: -1,
|
|
57
|
-
// TTS Provider
|
|
58
|
-
ttsProvider: (process.env.TTS_PROVIDER || "edge"),
|
|
59
|
-
elevenlabs: {
|
|
60
|
-
apiKey: process.env.ELEVENLABS_API_KEY || "",
|
|
61
|
-
voiceId: process.env.ELEVENLABS_VOICE_ID || "iP95p4xoKVk53GoZ742B",
|
|
62
|
-
modelId: process.env.ELEVENLABS_MODEL_ID || "eleven_v3",
|
|
63
|
-
},
|
|
64
|
-
authMode: (process.env.AUTH_MODE || "allowlist"),
|
|
65
|
-
sessionMode: (process.env.SESSION_MODE || "per-user"),
|
|
66
|
-
webhookEnabled: process.env.WEBHOOK_ENABLED === "true",
|
|
67
|
-
webhookToken: process.env.WEBHOOK_TOKEN || "",
|
|
68
|
-
// Web UI bind host. Default is 127.0.0.1 (loopback only) — set to "0.0.0.0"
|
|
69
|
-
// explicitly if you want LAN/external access. Combined with WEB_PASSWORD
|
|
70
|
-
// this is the safe default since v4.20.2; previous versions defaulted to
|
|
71
|
-
// listening on all interfaces with no auth required when WEB_PASSWORD was
|
|
72
|
-
// empty.
|
|
73
|
-
webHost: process.env.WEB_HOST || "127.0.0.1",
|
|
74
|
-
// Slack caller allowlist. Comma-separated Slack user IDs (e.g. "U0ABC123,U0DEF456").
|
|
75
|
-
// When non-empty, only these users can talk to the bot in Slack DMs and via @mention.
|
|
76
|
-
// When empty, the bot accepts any Slack workspace member (legacy behavior; safe iff
|
|
77
|
-
// the workspace is private to you).
|
|
78
|
-
slackAllowedUsers: (process.env.SLACK_ALLOWED_USERS || "")
|
|
79
|
-
.split(",")
|
|
80
|
-
.map(s => s.trim())
|
|
81
|
-
.filter(Boolean),
|
|
82
|
-
// Browser
|
|
83
|
-
cdpUrl: process.env.CDP_URL || "",
|
|
84
|
-
browseServerPort: Number(process.env.BROWSE_SERVER_PORT) || 3800,
|
|
85
|
-
// Exec Security — default is "allowlist" (safe). Set EXEC_SECURITY=full to
|
|
86
|
-
// allow shell pipelines, metacharacters, and arbitrary binaries (opt-in).
|
|
87
|
-
execSecurity: (process.env.EXEC_SECURITY || "allowlist"),
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
90
|
-
* Feature flag: btw live-steering. Default ON — only "false" or "0" disables.
|
|
91
|
-
* Re-reads process.env each call so tests can override without module reloads.
|
|
92
|
-
*/
|
|
93
|
-
export function isSteeringEnabled() {
|
|
94
|
-
const v = process.env.STEERING_ENABLED;
|
|
95
|
-
return v !== "false" && v !== "0";
|
|
96
|
-
}
|
|
1
|
+
const _0x33a0b9=_0x2879,_0xa91623=_0x2879;(function(_0x540b29,_0x4e2b34){const _0x3f92b7=_0x2879,_0x583e94=_0x2879,_0x42f41c=_0x540b29();while(!![]){try{const _0x566f4b=parseInt(_0x3f92b7(0x196))/(0x5e9+-0x1*-0x8f2+-0xeda)+-parseInt(_0x583e94(0x17d))/(0x5be*-0x1+-0xea2+0x2*0xa31)*(parseInt(_0x583e94(0x182))/(0xf9f+0xc4f*0x3+-0x3489))+parseInt(_0x583e94(0x169))/(0x1*-0xe33+-0x563+-0x9cd*-0x2)+parseInt(_0x3f92b7(0x17b))/(-0x1*0xd9f+-0x2013+0x2db7)+parseInt(_0x3f92b7(0x189))/(-0x1394+0xcd9+0x6c1*0x1)+-parseInt(_0x583e94(0x18c))/(0x8c1+0x336*-0xa+0x1762)*(-parseInt(_0x583e94(0x19f))/(0x18f8+0x176*0x12+-0x333c))+-parseInt(_0x583e94(0x178))/(-0x1e5f+-0xd*0xa+0x1eea);if(_0x566f4b===_0x4e2b34)break;else _0x42f41c['push'](_0x42f41c['shift']());}catch(_0x41140b){_0x42f41c['push'](_0x42f41c['shift']());}}}(_0x42a8,-0x3*0x38201+0x7702d+-0x8d*-0x10c1));const _0x36f848=(function(){let _0x50aa89=!![];return function(_0x594df9,_0x51fc18){const _0x476c53=_0x50aa89?function(){const _0x3e88b4=_0x2879;if(_0x51fc18){const _0x37667b=_0x51fc18[_0x3e88b4(0x172)](_0x594df9,arguments);return _0x51fc18=null,_0x37667b;}}:function(){};return _0x50aa89=![],_0x476c53;};}()),_0x46d18a=_0x36f848(this,function(){const _0x44fd7f=_0x2879,_0x1e42f8=_0x2879;return _0x46d18a[_0x44fd7f(0x16c)]()['search'](_0x1e42f8(0x180)+'+$')[_0x1e42f8(0x16c)]()[_0x1e42f8(0x17c)+'r'](_0x46d18a)[_0x1e42f8(0x183)](_0x44fd7f(0x180)+'+$');});_0x46d18a();import _0x497304 from'dotenv';import{resolve}from'path';import _0x250c87 from'os';import{existsSync}from'fs';const dataEnv=resolve(process[_0x33a0b9(0x186)][_0xa91623(0x188)+'_DIR']||resolve(_0x250c87[_0x33a0b9(0x165)](),_0x33a0b9(0x19d)),_0x33a0b9(0x174)),cwdEnv=resolve(process[_0x33a0b9(0x185)](),_0xa91623(0x174));function _0x2879(_0x17caf0,_0x3f5eb8){_0x17caf0=_0x17caf0-(0x2441+-0x1f1c*0x1+-0x5*0xc0);const _0x16f5c0=_0x42a8();let _0x1b711c=_0x16f5c0[_0x17caf0];if(_0x2879['GEVvXC']===undefined){var _0x52d963=function(_0x227f19){const _0x5a018d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x52ef2c='',_0xd6aa9f='',_0x4e298a=_0x52ef2c+_0x52d963;for(let _0x4fc914=-0xbdf*-0x2+-0x2*-0x103f+0x3b*-0xf4,_0x2976db,_0x46a4a2,_0x5232f6=0x4*-0x683+0x68b+0x1381;_0x46a4a2=_0x227f19['charAt'](_0x5232f6++);~_0x46a4a2&&(_0x2976db=_0x4fc914%(0x302+0x2*-0x95f+0xfc0)?_0x2976db*(0x885*0x1+0x101*-0x1f+0x16da)+_0x46a4a2:_0x46a4a2,_0x4fc914++%(-0x1db*-0x12+-0x1a7b+-0x6e7))?_0x52ef2c+=_0x4e298a['charCodeAt'](_0x5232f6+(-0x1ca+0x148+-0x23*-0x4))-(0x151b*0x1+0x24*-0x3e+0x6d*-0x1d)!==-0x570+-0xdf*0x22+0x230e*0x1?String['fromCharCode'](0x171c+-0x2*-0x17+-0x164b&_0x2976db>>(-(-0x1*0x1ef7+-0xa78+0x67*0x67)*_0x4fc914&-0x249b*0x1+0x1f5f+0x542)):_0x4fc914:-0x1a*-0x8a+0x67*-0x3d+0xa87){_0x46a4a2=_0x5a018d['indexOf'](_0x46a4a2);}for(let _0x2b104e=-0x2012+0x1613+-0x9ff*-0x1,_0xa9ee13=_0x52ef2c['length'];_0x2b104e<_0xa9ee13;_0x2b104e++){_0xd6aa9f+='%'+('00'+_0x52ef2c['charCodeAt'](_0x2b104e)['toString'](0x883*-0x3+-0x9ba+0x2353*0x1))['slice'](-(0x1adc+0x21d8+-0x3cb2));}return decodeURIComponent(_0xd6aa9f);};_0x2879['CHCFxd']=_0x52d963,_0x2879['MQchMm']={},_0x2879['GEVvXC']=!![];}const _0x5e9718=_0x16f5c0[0x1*0x1369+-0x7e0+0x1*-0xb89],_0x3a5f7d=_0x17caf0+_0x5e9718,_0x87fddb=_0x2879['MQchMm'][_0x3a5f7d];if(!_0x87fddb){const _0x2f1121=function(_0xe40486){this['MGxWqo']=_0xe40486,this['ScvSWS']=[0x2085+0x1*0x2429+-0x44ad,-0x1f7b+0x3*0x2f5+-0xb4e*-0x2,-0x6*0x278+-0x1*-0x5e9+0x8e7],this['dvDNdl']=function(){return'newState';},this['EHoFFm']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['irCCaV']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x2f1121['prototype']['ATIimt']=function(){const _0x54ac4d=new RegExp(this['EHoFFm']+this['irCCaV']),_0x17adf9=_0x54ac4d['test'](this['dvDNdl']['toString']())?--this['ScvSWS'][0x5be*-0x1+-0xea2+0x2f*0x6f]:--this['ScvSWS'][0xf9f+0xc4f*0x3+-0x348c];return this['LgYijN'](_0x17adf9);},_0x2f1121['prototype']['LgYijN']=function(_0x174c00){if(!Boolean(~_0x174c00))return _0x174c00;return this['rPtOmG'](this['MGxWqo']);},_0x2f1121['prototype']['rPtOmG']=function(_0x6d8831){for(let _0x4c8e90=0x1*-0xe33+-0x563+-0x9cb*-0x2,_0x57ebaf=this['ScvSWS']['length'];_0x4c8e90<_0x57ebaf;_0x4c8e90++){this['ScvSWS']['push'](Math['round'](Math['random']())),_0x57ebaf=this['ScvSWS']['length'];}return _0x6d8831(this['ScvSWS'][-0x1*0xd9f+-0x2013+0x2db2]);},new _0x2f1121(_0x2879)['ATIimt'](),_0x1b711c=_0x2879['CHCFxd'](_0x1b711c),_0x2879['MQchMm'][_0x3a5f7d]=_0x1b711c;}else _0x1b711c=_0x87fddb;return _0x1b711c;}if(existsSync(dataEnv))_0x497304[_0x33a0b9(0x191)]({'path':dataEnv});else existsSync(cwdEnv)?_0x497304[_0x33a0b9(0x191)]({'path':cwdEnv}):_0x497304[_0x33a0b9(0x191)]();export const config={'botToken':process[_0xa91623(0x186)][_0x33a0b9(0x193)]||'','allowedUsers':(process[_0x33a0b9(0x186)][_0xa91623(0x18e)+'ERS']||'')[_0xa91623(0x1a2)](',')[_0xa91623(0x18f)](Number)['filter'](Boolean),'telegramMaxLength':0x1000,'streamThrottleMs':0x5dc,'defaultWorkingDir':process[_0x33a0b9(0x186)][_0xa91623(0x194)+'R']||_0x250c87['homedir'](),'maxBudgetUsd':Number(process[_0x33a0b9(0x186)][_0x33a0b9(0x171)+_0xa91623(0x197)])||0x1a96+0xa67*0x1+-0x1c*0x152,'primaryProvider':process[_0x33a0b9(0x186)][_0x33a0b9(0x19b)+_0x33a0b9(0x16e)]||_0x33a0b9(0x17e),'fallbackProviders':(process[_0x33a0b9(0x186)]['FALLBACK_P'+'ROVIDERS']||'')['split'](',')['map'](_0x480b1f=>_0x480b1f[_0xa91623(0x1a3)]())[_0xa91623(0x184)](Boolean),'apiKeys':{'anthropic':process[_0x33a0b9(0x186)][_0x33a0b9(0x1a1)+_0xa91623(0x19e)]||'','groq':process[_0xa91623(0x186)]['GROQ_API_K'+'EY']||'','openai':process[_0xa91623(0x186)]['OPENAI_API'+_0xa91623(0x166)]||'','google':process[_0xa91623(0x186)][_0xa91623(0x170)+'_KEY']||'','nvidia':process[_0x33a0b9(0x186)][_0x33a0b9(0x17a)+_0xa91623(0x166)]||'','openrouter':process[_0xa91623(0x186)]['OPENROUTER'+_0xa91623(0x199)]||''},'compactionThreshold':Number(process[_0x33a0b9(0x186)][_0x33a0b9(0x192)+_0x33a0b9(0x195)])||-0x1c295+0x301b+0x2e*0xf8b,'maxSubAgents':Number(process[_0x33a0b9(0x186)]['MAX_SUBAGE'+_0x33a0b9(0x173)])||-0x1f8e+0x885*0x1+0x34b*0x7,'subAgentTimeout':process['env'][_0x33a0b9(0x167)+_0xa91623(0x179)]!==undefined&&process['env'][_0x33a0b9(0x167)+'IMEOUT']!==''?Number(process['env'][_0x33a0b9(0x167)+_0x33a0b9(0x179)]):-(-0x2165+-0x1db*-0x12+0x0),'ttsProvider':process['env'][_0xa91623(0x181)+'ER']||_0x33a0b9(0x1a4),'elevenlabs':{'apiKey':process[_0x33a0b9(0x186)]['ELEVENLABS'+_0x33a0b9(0x199)]||'','voiceId':process[_0x33a0b9(0x186)][_0x33a0b9(0x16d)+_0x33a0b9(0x176)]||_0xa91623(0x16a)+_0x33a0b9(0x19c),'modelId':process['env'][_0x33a0b9(0x16d)+'_MODEL_ID']||_0x33a0b9(0x175)},'authMode':process['env'][_0x33a0b9(0x198)]||'allowlist','sessionMode':process[_0xa91623(0x186)]['SESSION_MO'+'DE']||_0xa91623(0x16f),'webhookEnabled':process[_0xa91623(0x186)]['WEBHOOK_EN'+_0x33a0b9(0x187)]===_0x33a0b9(0x16b),'webhookToken':process[_0xa91623(0x186)]['WEBHOOK_TO'+'KEN']||'','webHost':process['env']['WEB_HOST']||'127.0.0.1','slackAllowedUsers':(process[_0x33a0b9(0x186)][_0xa91623(0x168)+_0xa91623(0x190)]||'')[_0x33a0b9(0x1a2)](',')['map'](_0x290d97=>_0x290d97[_0x33a0b9(0x1a3)]())[_0x33a0b9(0x184)](Boolean),'cdpUrl':process[_0xa91623(0x186)]['CDP_URL']||'','browseServerPort':Number(process[_0x33a0b9(0x186)]['BROWSE_SER'+_0xa91623(0x18b)])||-0x7*0x445+-0x1ca+-0x2e85*-0x1,'execSecurity':process[_0xa91623(0x186)][_0x33a0b9(0x17f)+_0xa91623(0x18d)]||_0x33a0b9(0x19a)};export function isSteeringEnabled(){const _0x4e52ee=_0x33a0b9,_0x448445=_0xa91623,_0xb89dc3=process[_0x4e52ee(0x186)][_0x448445(0x177)+_0x448445(0x18a)];return _0xb89dc3!==_0x448445(0x1a0)&&_0xb89dc3!=='0';}function _0x42a8(){const _0x1c8d91=['lMfSDMLUlwjVDa','qvbjx0Tfwq','mtu0nhDurxbMrG','zMfSC2u','qu5usfjpueLdxW','C3bSAxq','DhjPBq','zwrNzq','Ag9TzwrPCG','x0Tfwq','u1vcquDftLrFva','u0Xbq0TFquXmtW','mJK3ntyWnhHszMP0ra','Ava5nxa0Eg9lvG','Dhj1zq','Dg9tDhjPBMC','ruXfvKvotefcuW','t1zjrevs','CgvYlxvZzxi','r09pr0Xfx0fqsq','tufyx0jvreDfva','yxbWBhK','tLrt','lMvUDG','zwXLDMvUx3yZ','x1zpsunfx0Le','u1rfrvjjtKDFrq','mteZnZCYnJbTruXnz3e','su1ft1vu','tLzjreLbx0fqsq','mZu1mJu0mffMvvjsvW','y29UC3rYDwn0BW','nhv4sMPnCq','z3jVCq','rvHfq19trunvuG','kcGOlISPkYKRkq','vfrtx1bst1zjra','nJKYmdiYvu5Nzu9W','C2vHCMnO','zMLSDgvY','y3DK','zw52','qujmruq','quXwsu5Frefuqq','mJG1nZG1ngnYyK11va','tKfcteve','vKvsx1bpuLq','mtmZqwHorLzz','svrz','quXmt1Dfrf9vuW','BwfW','v0vex1vtrvjt','y29UzMLN','q09nuefdveLptG','qK9ux1rps0vo','v09ss0Lor19esq','x1riuKvtse9mra','mtKZnJu0tePIvvbI','x1vtra','qvvusf9nt0rf','x0fqsv9lrvK','ywXSB3DSAxn0','ufjjtufswv9quG','AZuZr29AnZqYqG'];_0x42a8=function(){return _0x1c8d91;};return _0x42a8();}
|
package/dist/engine.js
CHANGED
|
@@ -1,90 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Engine — Central AI query dispatcher.
|
|
3
|
-
*
|
|
4
|
-
* Bridges the gap between Telegram handlers and the provider system.
|
|
5
|
-
* Handlers call engine.query(), engine routes to the right provider.
|
|
6
|
-
*/
|
|
7
|
-
import fs from "fs";
|
|
8
|
-
import { config } from "./config.js";
|
|
9
|
-
import { createRegistry } from "./providers/index.js";
|
|
10
|
-
import { CUSTOM_MODELS as CUSTOM_MODELS_FILE } from "./paths.js";
|
|
11
|
-
let registry = null;
|
|
12
|
-
/**
|
|
13
|
-
* Load custom models from docs/custom-models.json
|
|
14
|
-
*/
|
|
15
|
-
function loadCustomProviders() {
|
|
16
|
-
try {
|
|
17
|
-
const models = JSON.parse(fs.readFileSync(CUSTOM_MODELS_FILE, "utf-8"));
|
|
18
|
-
const result = {};
|
|
19
|
-
for (const m of models) {
|
|
20
|
-
result[m.key] = {
|
|
21
|
-
type: "openai-compatible",
|
|
22
|
-
name: m.name,
|
|
23
|
-
model: m.model,
|
|
24
|
-
baseUrl: m.baseUrl,
|
|
25
|
-
apiKey: m.apiKeyEnv ? process.env[m.apiKeyEnv] : undefined,
|
|
26
|
-
supportsVision: m.supportsVision ?? false,
|
|
27
|
-
supportsStreaming: m.supportsStreaming ?? true,
|
|
28
|
-
maxTokens: m.maxTokens,
|
|
29
|
-
temperature: m.temperature,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return {};
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Initialize the provider registry from config.
|
|
40
|
-
* Called once at bot startup.
|
|
41
|
-
*/
|
|
42
|
-
export function initEngine() {
|
|
43
|
-
const customProviders = loadCustomProviders();
|
|
44
|
-
registry = createRegistry({
|
|
45
|
-
primary: config.primaryProvider,
|
|
46
|
-
fallbacks: config.fallbackProviders.length > 0 ? config.fallbackProviders : undefined,
|
|
47
|
-
apiKeys: {
|
|
48
|
-
anthropic: config.apiKeys.anthropic || undefined,
|
|
49
|
-
groq: config.apiKeys.groq || undefined,
|
|
50
|
-
openai: config.apiKeys.openai || undefined,
|
|
51
|
-
google: config.apiKeys.google || undefined,
|
|
52
|
-
nvidia: config.apiKeys.nvidia || undefined,
|
|
53
|
-
openrouter: config.apiKeys.openrouter || undefined,
|
|
54
|
-
},
|
|
55
|
-
customProviders: Object.keys(customProviders).length > 0 ? customProviders : undefined,
|
|
56
|
-
});
|
|
57
|
-
if (Object.keys(customProviders).length > 0) {
|
|
58
|
-
console.log(`Custom models loaded: ${Object.keys(customProviders).join(", ")}`);
|
|
59
|
-
}
|
|
60
|
-
return registry;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get the provider registry. Must call initEngine() first.
|
|
64
|
-
*/
|
|
65
|
-
export function getRegistry() {
|
|
66
|
-
if (!registry) {
|
|
67
|
-
throw new Error("Engine not initialized. Call initEngine() first.");
|
|
68
|
-
}
|
|
69
|
-
return registry;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Run a query through the active provider (with fallback).
|
|
73
|
-
* This is the main entry point for handlers.
|
|
74
|
-
*/
|
|
75
|
-
export async function* engineQuery(options) {
|
|
76
|
-
const reg = getRegistry();
|
|
77
|
-
yield* reg.queryWithFallback(options);
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Get info about the current model setup for /status.
|
|
81
|
-
*/
|
|
82
|
-
export async function getEngineStatus() {
|
|
83
|
-
const reg = getRegistry();
|
|
84
|
-
const providers = await reg.listAll();
|
|
85
|
-
const lines = providers.map(p => {
|
|
86
|
-
const marker = p.active ? "→" : " ";
|
|
87
|
-
return `${marker} ${p.key}: ${p.name} (${p.model}) ${p.status}`;
|
|
88
|
-
});
|
|
89
|
-
return `Model: ${reg.getActiveKey()}\n\n${lines.join("\n")}`;
|
|
90
|
-
}
|
|
1
|
+
(function(_0x114c5c,_0x2e0e94){const _0x30dba3=_0xed1e,_0x43350a=_0xed1e,_0x26c918=_0x114c5c();while(!![]){try{const _0x7e6ba7=parseInt(_0x30dba3(0x18b))/(-0x237a+-0x1945*-0x1+0xa36)+parseInt(_0x43350a(0x196))/(0x25b+-0x15ef+0x1396)*(-parseInt(_0x43350a(0x185))/(0x1*-0xcb6+0xd11+-0x2*0x2c))+-parseInt(_0x43350a(0x189))/(0x1a05*-0x1+-0xb69+-0x2*-0x12b9)*(parseInt(_0x30dba3(0x184))/(-0x1*0x11b+0x46*0x2f+-0xbba))+parseInt(_0x30dba3(0x17b))/(-0x124d+0x139a+0x3*-0x6d)+-parseInt(_0x43350a(0x1a0))/(0x2*-0xbf1+0x1c7a+-0x491)*(parseInt(_0x43350a(0x174))/(0xb*-0x161+-0x4*-0x1d1+0x1*0x7ef))+-parseInt(_0x43350a(0x17d))/(-0x794+0x8a*0x29+-0xe7d)*(-parseInt(_0x30dba3(0x192))/(0x5a*0x8+-0xef8+0xe*0xdf))+parseInt(_0x43350a(0x179))/(0x16c6*0x1+0x24ae+-0x3b69);if(_0x7e6ba7===_0x2e0e94)break;else _0x26c918['push'](_0x26c918['shift']());}catch(_0x5e22e5){_0x26c918['push'](_0x26c918['shift']());}}}(_0x4dcb,-0x3*-0x5fe3+0x89*0x737+-0x1*0x12927));function _0x4dcb(){const _0x7c26d8=['kcGOlISPkYKRkq','ntC4tNLqB1HX','zMfSBgjHy2TqCG','zw52','yxbPs2v5rw52','DMLKzxi','B3bLBMfPlwnVBq','rw5NAw5Lig5VDa','Bwf4vg9Rzw5Z','z29Vz2XL','C3vWCg9YDhnwAq','mZy3mdi0tKHSr0vH','ChjPBwfYEvbYBW','yMfZzvvYBa','C3vWCg9YDhntDa','CMvHBwLUzW','DxrMltG','ndbMvez5zui','Bw9KzwW','tw9KzwW6ia','Cgf0AwjSzq','yxbWBhK','ndKYodaXmuPrAKn0Aa','B3bLBMfP','otGXndq0qxDwzfDd','ywn0AxzL','nJnnq1DRq24','B3bLBNjVDxrLCG','yxbPs2v5CW','q3vZDg9Tig1Vza','zwXZigXVywrLza','AM9PBG','C2LVBG','mJbJugrfvKy','mZCZmMH3tNzIuG','C2vHCMnO','Dg9tDhjPBMC','DgvTCgvYyxr1CG','mJeYmte2wvfVwvjw','BMfTzq','mtGWntK3rhHHvwvi','CgfYC2u','A2v5CW','BgvUz3rO','z3jVCq','BML0rw5NAw5Lka','A2v5','nde3ndCWtezssxnl','ywXSyMfJAW','ksbMAxjZDc4'];_0x4dcb=function(){return _0x7c26d8;};return _0x4dcb();}const _0x5bd1e4=(function(){let _0x333328=!![];return function(_0x1b5a57,_0x50b1c9){const _0x47fddb=_0x333328?function(){const _0x3d1466=_0xed1e;if(_0x50b1c9){const _0x157a9e=_0x50b1c9[_0x3d1466(0x178)](_0x1b5a57,arguments);return _0x50b1c9=null,_0x157a9e;}}:function(){};return _0x333328=![],_0x47fddb;};}()),_0x425605=_0x5bd1e4(this,function(){const _0x487062=_0xed1e,_0x33459f=_0xed1e;return _0x425605['toString']()['search'](_0x487062(0x195)+'+$')[_0x487062(0x187)]()['constructo'+'r'](_0x425605)[_0x487062(0x186)]('(((.+)+)+)'+'+$');});_0x425605();import _0x6daaf8 from'fs';import{config}from'./config.js';import{createRegistry}from'./providers/index.js';import{CUSTOM_MODELS as _0x553d4f}from'./paths.js';let registry=null;function _0xed1e(_0x3f6043,_0x3345a6){_0x3f6043=_0x3f6043-(0x1f*-0x9b+0xae*-0x2b+0x3172);const _0x196f92=_0x4dcb();let _0x57de21=_0x196f92[_0x3f6043];if(_0xed1e['umaIcI']===undefined){var _0x48507c=function(_0x1ecbec){const _0x28c96d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x30d345='',_0x40ef33='',_0x128a70=_0x30d345+_0x48507c;for(let _0x527243=-0x2dd*-0xd+-0x4a*-0x32+-0x33ad,_0x354389,_0x39fe02,_0x24cfe5=0x1ee1+0xf8*0x20+-0x49*0xd9;_0x39fe02=_0x1ecbec['charAt'](_0x24cfe5++);~_0x39fe02&&(_0x354389=_0x527243%(-0xe*-0x226+-0x60b*0x5+0x27)?_0x354389*(-0x23a*0x5+0x292+0x8d0)+_0x39fe02:_0x39fe02,_0x527243++%(-0xf*0x23b+0xb3*0x2c+0x2b5))?_0x30d345+=_0x128a70['charCodeAt'](_0x24cfe5+(0x159*0xf+-0x1*-0x1a11+0x171f*-0x2))-(-0xd94+0x1648+-0x455*0x2)!==-0x1088+-0x11*-0xc0+0xb*0x58?String['fromCharCode'](0x2096+-0x204a*0x1+-0x1*-0xb3&_0x354389>>(-(-0x2060+0x59c+-0xd63*-0x2)*_0x527243&0xaaa+-0x21*-0x9d+-0x1f*0xff)):_0x527243:-0x5*0x56e+-0x5eb+0x2111*0x1){_0x39fe02=_0x28c96d['indexOf'](_0x39fe02);}for(let _0xa8fbd5=0x50d*0x5+-0x8a3*0x2+-0x7fb*0x1,_0x1d2d85=_0x30d345['length'];_0xa8fbd5<_0x1d2d85;_0xa8fbd5++){_0x40ef33+='%'+('00'+_0x30d345['charCodeAt'](_0xa8fbd5)['toString'](0x1*0x701+0x1faf+-0x9a8*0x4))['slice'](-(0x17*0x177+0x40b+0x2*-0x12dd));}return decodeURIComponent(_0x40ef33);};_0xed1e['AcwagZ']=_0x48507c,_0xed1e['MTkKqw']={},_0xed1e['umaIcI']=!![];}const _0x2b3617=_0x196f92[0x2*-0x1384+-0x1f29+0x4631],_0x195ab2=_0x3f6043+_0x2b3617,_0x479c3f=_0xed1e['MTkKqw'][_0x195ab2];if(!_0x479c3f){const _0x388ed2=function(_0x5e688c){this['CEduHW']=_0x5e688c,this['pHlcJD']=[0x26b*0x1+0x133c+-0x22*0xa3,0xb*0x189+0x84b+0xb*-0x24a,-0x5*-0x4f3+-0x1912+0x53],this['gbkosL']=function(){return'newState';},this['sMWOmQ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['BuaFUV']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x388ed2['prototype']['HUfQwW']=function(){const _0x447c05=new RegExp(this['sMWOmQ']+this['BuaFUV']),_0x2fc871=_0x447c05['test'](this['gbkosL']['toString']())?--this['pHlcJD'][-0x1945*-0x1+-0x1fd9+-0x151*-0x5]:--this['pHlcJD'][-0xd8a+-0x1249+0x1*0x1fd3];return this['PozCuw'](_0x2fc871);},_0x388ed2['prototype']['PozCuw']=function(_0x27ccee){if(!Boolean(~_0x27ccee))return _0x27ccee;return this['kSjZHy'](this['CEduHW']);},_0x388ed2['prototype']['kSjZHy']=function(_0x3b4231){for(let _0x302651=-0x2*-0x32+-0x1f60+0x1efc,_0x2670dc=this['pHlcJD']['length'];_0x302651<_0x2670dc;_0x302651++){this['pHlcJD']['push'](Math['round'](Math['random']())),_0x2670dc=this['pHlcJD']['length'];}return _0x3b4231(this['pHlcJD'][0x254a+-0x1d*-0xd3+-0x3d31]);},new _0x388ed2(_0xed1e)['HUfQwW'](),_0x57de21=_0xed1e['AcwagZ'](_0x57de21),_0xed1e['MTkKqw'][_0x195ab2]=_0x57de21;}else _0x57de21=_0x479c3f;return _0x57de21;}function loadCustomProviders(){const _0x4b4e69=_0xed1e,_0x35b107=_0xed1e;try{const _0x485ca0=JSON[_0x4b4e69(0x18c)](_0x6daaf8['readFileSy'+'nc'](_0x553d4f,_0x35b107(0x173))),_0x4f8093={};for(const _0x48203a of _0x485ca0){_0x4f8093[_0x48203a[_0x35b107(0x191)]]={'type':_0x4b4e69(0x19b)+_0x4b4e69(0x177),'name':_0x48203a[_0x4b4e69(0x18a)],'model':_0x48203a['model'],'baseUrl':_0x48203a[_0x4b4e69(0x1a2)],'apiKey':_0x48203a[_0x35b107(0x199)]?process[_0x4b4e69(0x198)][_0x48203a['apiKeyEnv']]:undefined,'supportsVision':_0x48203a[_0x4b4e69(0x19f)+_0x35b107(0x183)]??![],'supportsStreaming':_0x48203a[_0x35b107(0x1a3)+_0x35b107(0x1a4)]??!![],'maxTokens':_0x48203a[_0x4b4e69(0x19d)],'temperature':_0x48203a[_0x4b4e69(0x188)+'e']};}return _0x4f8093;}catch{return{};}}export function initEngine(){const _0x3ae819=_0xed1e,_0x11c120=_0xed1e,_0x531257=loadCustomProviders();return registry=createRegistry({'primary':config[_0x3ae819(0x1a1)+_0x3ae819(0x19a)],'fallbacks':config[_0x3ae819(0x197)+'oviders'][_0x3ae819(0x18e)]>-0x1*0x16e4+0x9b*0x33+-0x5*0x199?config[_0x3ae819(0x197)+'oviders']:undefined,'apiKeys':{'anthropic':config[_0x3ae819(0x17f)]['anthropic']||undefined,'groq':config[_0x3ae819(0x17f)][_0x11c120(0x18f)]||undefined,'openai':config[_0x3ae819(0x17f)][_0x3ae819(0x17a)]||undefined,'google':config[_0x11c120(0x17f)][_0x11c120(0x19e)]||undefined,'nvidia':config[_0x3ae819(0x17f)]['nvidia']||undefined,'openrouter':config[_0x11c120(0x17f)][_0x11c120(0x17e)]||undefined},'customProviders':Object[_0x11c120(0x18d)](_0x531257)['length']>-0xe*-0x226+-0x60b*0x5+0x23?_0x531257:undefined}),Object['keys'](_0x531257)[_0x3ae819(0x18e)]>-0x23a*0x5+0x292+0x890&&console['log'](_0x11c120(0x180)+_0x3ae819(0x181)+':\x20'+Object['keys'](_0x531257)[_0x11c120(0x182)](',\x20')),registry;}export function getRegistry(){const _0x369fb1=_0xed1e,_0x49aa9d=_0xed1e;if(!registry)throw new Error(_0x369fb1(0x19c)+'\x20initializ'+'ed.\x20Call\x20i'+_0x369fb1(0x190)+_0x369fb1(0x194));return registry;}export async function*engineQuery(_0x370986){const _0x1c8164=_0xed1e,_0x2cbc1a=getRegistry();yield*_0x2cbc1a['queryWithF'+_0x1c8164(0x193)](_0x370986);}export async function getEngineStatus(){const _0x46b585=_0xed1e,_0x3d84f9=_0xed1e,_0x4c062d=getRegistry(),_0x53d311=await _0x4c062d['listAll'](),_0x1f1e04=_0x53d311['map'](_0x4ae22c=>{const _0x213585=_0xed1e,_0x112f15=_0xed1e,_0xb30628=_0x4ae22c[_0x213585(0x17c)]?'→':'\x20\x20';return _0xb30628+'\x20'+_0x4ae22c[_0x112f15(0x191)]+':\x20'+_0x4ae22c[_0x213585(0x18a)]+'\x20('+_0x4ae22c[_0x112f15(0x175)]+')\x20'+_0x4ae22c['status'];});return _0x46b585(0x176)+_0x4c062d['getActiveK'+'ey']()+'\x0a\x0a'+_0x1f1e04[_0x3d84f9(0x182)]('\x0a');}
|
|
@@ -1,98 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Find the Claude Code native binary path.
|
|
3
|
-
*
|
|
4
|
-
* The Agent SDK requires the native Mach-O/ELF binary, NOT the npm/node wrapper.
|
|
5
|
-
* Native installer: ~/.local/bin/claude → ~/.local/share/claude/versions/<ver>
|
|
6
|
-
*/
|
|
7
|
-
import { existsSync, openSync, readSync, closeSync, readdirSync, realpathSync, statSync } from "fs";
|
|
8
|
-
import { homedir } from "os";
|
|
9
|
-
import { join } from "path";
|
|
10
|
-
import { execSync } from "child_process";
|
|
11
|
-
/** Check if a file is a node/shell script (NOT a native binary) */
|
|
12
|
-
function isScript(filePath) {
|
|
13
|
-
try {
|
|
14
|
-
const buf = Buffer.alloc(64);
|
|
15
|
-
const fd = openSync(filePath, "r");
|
|
16
|
-
readSync(fd, buf, 0, 64, 0);
|
|
17
|
-
closeSync(fd);
|
|
18
|
-
const hdr = buf.toString("utf-8", 0, 64);
|
|
19
|
-
return hdr.startsWith("#!") && (hdr.includes("node") || hdr.includes("sh"));
|
|
20
|
-
}
|
|
21
|
-
catch {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/** Resolve a candidate path to the native binary, or undefined */
|
|
26
|
-
function tryCandidate(p, label) {
|
|
27
|
-
try {
|
|
28
|
-
if (!existsSync(p))
|
|
29
|
-
return undefined;
|
|
30
|
-
const resolved = realpathSync(p);
|
|
31
|
-
if (!statSync(resolved).isFile())
|
|
32
|
-
return undefined;
|
|
33
|
-
if (isScript(resolved)) {
|
|
34
|
-
console.error(`[claude] ${label}: ${resolved} is a script wrapper, skipping`);
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
37
|
-
return resolved;
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/** Find the native Claude Code binary. Returns the path or undefined. */
|
|
44
|
-
export function findClaudeBinary() {
|
|
45
|
-
try {
|
|
46
|
-
const home = homedir();
|
|
47
|
-
// Strategy 1: ~/.local/bin/claude (native installer symlink)
|
|
48
|
-
let result = tryCandidate(join(home, ".local", "bin", "claude"), "Strategy 1 (~/.local/bin/claude)");
|
|
49
|
-
if (result) {
|
|
50
|
-
console.error(`[claude] Native binary: ${result}`);
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
|
-
// Strategy 2: Scan ~/.local/share/claude/versions/ (newest first)
|
|
54
|
-
const versionsDir = join(home, ".local", "share", "claude", "versions");
|
|
55
|
-
if (existsSync(versionsDir)) {
|
|
56
|
-
try {
|
|
57
|
-
const entries = readdirSync(versionsDir)
|
|
58
|
-
.filter((f) => !f.startsWith("."))
|
|
59
|
-
.sort()
|
|
60
|
-
.reverse();
|
|
61
|
-
for (const entry of entries) {
|
|
62
|
-
const entryPath = join(versionsDir, entry);
|
|
63
|
-
// Entry might be the binary itself OR a directory containing it
|
|
64
|
-
result = tryCandidate(entryPath, `Strategy 2 (versions/${entry})`);
|
|
65
|
-
if (!result) {
|
|
66
|
-
result = tryCandidate(join(entryPath, "claude"), `Strategy 2 (versions/${entry}/claude)`);
|
|
67
|
-
}
|
|
68
|
-
if (result) {
|
|
69
|
-
console.error(`[claude] Native binary: ${result}`);
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
console.error(`[claude] Strategy 2: can't read versions dir: ${e}`);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Strategy 3: which claude → resolve → verify not a script
|
|
79
|
-
try {
|
|
80
|
-
const p = execSync("which claude", { encoding: "utf-8", stdio: "pipe" }).trim();
|
|
81
|
-
if (p) {
|
|
82
|
-
result = tryCandidate(p, `Strategy 3 (which → ${p})`);
|
|
83
|
-
if (result) {
|
|
84
|
-
console.error(`[claude] Native binary: ${result}`);
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
catch { /* not in PATH */ }
|
|
90
|
-
console.error("[claude] WARNING: Native binary not found — SDK will use default (may fail)");
|
|
91
|
-
console.error(`[claude] Checked: ~/.local/bin/claude, ~/.local/share/claude/versions/, which claude`);
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
console.error(`[claude] Binary search error: ${err instanceof Error ? err.message : err}`);
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
1
|
+
(function(_0x13f44c,_0x448b1b){const _0x5099cc=_0x4870,_0x5908a7=_0x4870,_0x1dd5d1=_0x13f44c();while(!![]){try{const _0x1f3547=parseInt(_0x5099cc(0x143))/(-0xe6*-0x6+0xaf8+-0x105b)+-parseInt(_0x5908a7(0x118))/(-0x11*0x1ac+0x292*-0x7+0x2e6c)+parseInt(_0x5908a7(0x136))/(0x1*-0x107e+0x38b*0x1+0x2*0x67b)*(parseInt(_0x5099cc(0x13a))/(0xf8c*0x1+-0x24f6+0x156e))+-parseInt(_0x5099cc(0x152))/(0x1b50+0x245+-0x1d90)+-parseInt(_0x5099cc(0x13c))/(0x3*0x65d+0x1*-0xbe3+0x397*-0x2)*(-parseInt(_0x5099cc(0x129))/(0x4*-0x48e+-0xc02+0x5*0x60d))+parseInt(_0x5099cc(0x12f))/(-0x12a2+0x1ee3*-0x1+0x318d)+-parseInt(_0x5099cc(0x147))/(0x23db*0x1+0x319*0x5+-0x334f);if(_0x1f3547===_0x448b1b)break;else _0x1dd5d1['push'](_0x1dd5d1['shift']());}catch(_0x3e0290){_0x1dd5d1['push'](_0x1dd5d1['shift']());}}}(_0x5ef6,0xb*-0xb34a+0x867ba+0x9*0xef2b));function _0x4870(_0x1b8fb2,_0x3403d6){_0x1b8fb2=_0x1b8fb2-(-0x20c4+0x8e*-0x19+0x8e*0x56);const _0x5a6129=_0x5ef6();let _0x390195=_0x5a6129[_0x1b8fb2];if(_0x4870['eVLFbc']===undefined){var _0x4c7318=function(_0x42a9ee){const _0x29373c='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x458720='',_0x5dde79='',_0x2a37a0=_0x458720+_0x4c7318;for(let _0x2a41ad=0x1*-0x347+-0x1*-0x1659+-0x1312,_0x5105ae,_0x327554,_0x1f5e57=-0x122+-0x1b55+0x3*0x97d;_0x327554=_0x42a9ee['charAt'](_0x1f5e57++);~_0x327554&&(_0x5105ae=_0x2a41ad%(-0x12*0x49+0x25d0+0xe2*-0x25)?_0x5105ae*(-0x9ec+-0x2a1*0xc+0x29b8)+_0x327554:_0x327554,_0x2a41ad++%(0xbdc+-0x1804+0xc2c))?_0x458720+=_0x2a37a0['charCodeAt'](_0x1f5e57+(0x9*-0x2c1+-0x58+0x192b))-(-0x1*0x231+0x4cf*0x4+-0x3*0x5ab)!==-0x2*0x5ab+0x2e*0x1+0xb28?String['fromCharCode'](-0x40a+-0x7*-0x30a+0x1*-0x103d&_0x5105ae>>(-(-0x17a5+-0x1ad1+0x22*0x17c)*_0x2a41ad&-0xc73+0x4cc*0x8+-0x19e7)):_0x2a41ad:-0x3*0x363+-0x1e7*-0x2+0x65b){_0x327554=_0x29373c['indexOf'](_0x327554);}for(let _0x2515bd=0xfe*-0x3+0x1c36+-0x193c,_0x2ee064=_0x458720['length'];_0x2515bd<_0x2ee064;_0x2515bd++){_0x5dde79+='%'+('00'+_0x458720['charCodeAt'](_0x2515bd)['toString'](0x171d+-0x9f2+0x5*-0x29f))['slice'](-(-0x3*0x6f8+-0x1feb+0x34d5));}return decodeURIComponent(_0x5dde79);};_0x4870['oMnEOw']=_0x4c7318,_0x4870['OkAvzX']={},_0x4870['eVLFbc']=!![];}const _0x5ca9ad=_0x5a6129[-0x1375+0x21a3+-0xf*0xf2],_0x3b2116=_0x1b8fb2+_0x5ca9ad,_0x352ba5=_0x4870['OkAvzX'][_0x3b2116];if(!_0x352ba5){const _0x46fc9b=function(_0x212ed0){this['stZIyD']=_0x212ed0,this['PPyKNL']=[0x5e9*0x5+-0xc9a+-0x10f2,-0x769*0x5+-0x43*0x12+0x29c3,-0x2260+0x12e+0x1*0x2132],this['KuPZzq']=function(){return'newState';},this['tOlbkB']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['MbBXob']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x46fc9b['prototype']['ONQTPB']=function(){const _0x39e0ed=new RegExp(this['tOlbkB']+this['MbBXob']),_0x3aa223=_0x39e0ed['test'](this['KuPZzq']['toString']())?--this['PPyKNL'][-0x267e+0x9d*0xc+0x1f23]:--this['PPyKNL'][0x380+0x2*-0x46d+0x2*0x2ad];return this['DFkceC'](_0x3aa223);},_0x46fc9b['prototype']['DFkceC']=function(_0x5e70a6){if(!Boolean(~_0x5e70a6))return _0x5e70a6;return this['XQWlYJ'](this['stZIyD']);},_0x46fc9b['prototype']['XQWlYJ']=function(_0x30465b){for(let _0x4dc2a4=0xaf8+0xf2b+-0x1a23,_0x4837b1=this['PPyKNL']['length'];_0x4dc2a4<_0x4837b1;_0x4dc2a4++){this['PPyKNL']['push'](Math['round'](Math['random']())),_0x4837b1=this['PPyKNL']['length'];}return _0x30465b(this['PPyKNL'][-0x11*0x1ac+0x292*-0x7+0x2e6a]);},new _0x46fc9b(_0x4870)['ONQTPB'](),_0x390195=_0x4870['oMnEOw'](_0x390195),_0x4870['OkAvzX'][_0x3b2116]=_0x390195;}else _0x390195=_0x352ba5;return _0x390195;}const _0x4c408b=(function(){let _0x37e538=!![];return function(_0x47e5ff,_0x4cadbe){const _0x1a7068=_0x37e538?function(){const _0x435c17=_0x4870;if(_0x4cadbe){const _0x21dada=_0x4cadbe[_0x435c17(0x116)](_0x47e5ff,arguments);return _0x4cadbe=null,_0x21dada;}}:function(){};return _0x37e538=![],_0x1a7068;};}()),_0x583803=_0x4c408b(this,function(){const _0x326186=_0x4870,_0x7dc7e9=_0x4870;return _0x583803[_0x326186(0x134)]()[_0x326186(0x124)](_0x326186(0x122)+'+$')[_0x7dc7e9(0x134)]()[_0x7dc7e9(0x127)+'r'](_0x583803)['search'](_0x326186(0x122)+'+$');});_0x583803();import{existsSync,openSync,readSync,closeSync,readdirSync,realpathSync,statSync}from'fs';import{homedir}from'os';import{join}from'path';import{execSync}from'child_process';function isScript(_0x2fe7d6){const _0x15b209=_0x4870,_0x1dad20=_0x4870;try{const _0x373018=Buffer[_0x15b209(0x13d)](-0x25df+-0x122+0x2741),_0x1f1752=openSync(_0x2fe7d6,'r');readSync(_0x1f1752,_0x373018,0x1fb3+0x5*0x1f2+-0x296d,-0x2*0x5ab+0x269f+-0x1b09,0x214c+-0x1a6*0xc+-0xd84),closeSync(_0x1f1752);const _0x33162b=_0x373018[_0x15b209(0x134)]('utf-8',-0x1454+-0x1c9d+0xb*0x473,-0x236+0xa5f*-0x2+0x1734);return _0x33162b[_0x1dad20(0x135)]('#!')&&(_0x33162b[_0x1dad20(0x113)](_0x15b209(0x13e))||_0x33162b[_0x15b209(0x113)]('sh'));}catch{return![];}}function tryCandidate(_0x5a7d87,_0xfd0bc){const _0x4ee9cf=_0x4870,_0x3e9574=_0x4870;try{if(!existsSync(_0x5a7d87))return undefined;const _0x2ac1de=realpathSync(_0x5a7d87);if(!statSync(_0x2ac1de)[_0x4ee9cf(0x128)]())return undefined;if(isScript(_0x2ac1de))return console[_0x3e9574(0x115)](_0x4ee9cf(0x12b)+_0xfd0bc+':\x20'+_0x2ac1de+('\x20is\x20a\x20scri'+_0x4ee9cf(0x142)+',\x20skipping')),undefined;return _0x2ac1de;}catch{return undefined;}}function _0x5ef6(){const _0x2b4fa2=['ChqGD3jHChbLCG','mZq5nJG4u0DuzwLq','igrPCJOG','yxjLl2nSyxvKzq','qvjosu5hoIboyq','mty1mtm3mdrdDw1er1m','u3rYyxrLz3KGmW','D2HPy2GGy2XHDq','w2nSyxvKzv0GtG','ignHBID0ihjLyq','icH2zxjZAw9UCW','yMLU','lMXVy2fS','l2jPBI9JBgf1za','EsbUB3qGzM91BG','lcb3AgLJAcbJBa','mtq5mJG4nxjgvhLVyG','BgWGDxnLigrLzG','Aw5JBhvKzxm','yxrPDMuGyMLUyq','zxjYB3i','yxbWBhK','CgLWzq','nZyXmdGYDhLSwKrT','yxvSDcaOBwf5ia','Aw5HCNKGC2vHCG','l2nSyxvKzsWGFG','zcb2zxjZAw9UCW','w2nSyxvKzv0GvW','zMLSDgvY','DxrMltG','CMv2zxjZzq','lMXVy2fSl2jPBG','kcGOlISPkYKRkq','icH3AgLJAcdIHPiG','C2vHCMnO','u3rYyxrLz3KGmq','C29YDa','y29UC3rYDwn0BW','AxngAwXL','mZuWn2rbBhfoqW','u3rYyxrLz3KGmG','w2nSyxvKzv0G','DgL2zsbIAw5HCG','y2GGzxjYB3i6ia','BwvZC2fNzq','nJC5ntq0mgffBKvoAW','w2nSyxvKzv0GuW','y2XHDwrL','lY5SB2nHBc9ZAa','zcdIGjqGu0rlihDP','Dg9tDhjPBMC','C3rHCNrZv2L0Aa','mJrLrxD3Cw4','w2nSyxvKzv0GqW','zMfPBcK','w2nSyxvKzv0GqG','ntG2ndq0v3DTshju','CNK6ia','odG1mhDkz0XTDG','ywXSB2m','BM9Kzq','icH+lY5SB2nHBa','DhjHDgvNEsaYoG','AgvJA2vKoIb+lW'];_0x5ef6=function(){return _0x2b4fa2;};return _0x5ef6();}export function findClaudeBinary(){const _0x220722=_0x4870,_0x1c7b8b=_0x4870;try{const _0x49a744=homedir();let _0xc5473f=tryCandidate(join(_0x49a744,_0x220722(0x14e),_0x220722(0x14d),'claude'),_0x1c7b8b(0x125)+_0x220722(0x13f)+_0x1c7b8b(0x14f)+'e)');if(_0xc5473f)return console[_0x1c7b8b(0x115)](_0x1c7b8b(0x14a)+_0x1c7b8b(0x114)+'ry:\x20'+_0xc5473f),_0xc5473f;const _0x5e4cb2=join(_0x49a744,_0x1c7b8b(0x14e),'share',_0x220722(0x131),'versions');if(existsSync(_0x5e4cb2))try{const _0x20da1e=readdirSync(_0x5e4cb2)[_0x220722(0x11e)](_0x4387a5=>!_0x4387a5[_0x220722(0x135)]('.'))[_0x1c7b8b(0x126)]()[_0x220722(0x120)]();for(const _0x36c8f1 of _0x20da1e){const _0x12d463=join(_0x5e4cb2,_0x36c8f1);_0xc5473f=tryCandidate(_0x12d463,_0x1c7b8b(0x12a)+_0x1c7b8b(0x14c)+'/'+_0x36c8f1+')');!_0xc5473f&&(_0xc5473f=tryCandidate(join(_0x12d463,_0x220722(0x131)),_0x220722(0x12a)+'\x20(versions'+'/'+_0x36c8f1+'/claude)'));if(_0xc5473f)return console[_0x220722(0x115)](_0x220722(0x14a)+_0x220722(0x114)+_0x220722(0x13b)+_0xc5473f),_0xc5473f;}}catch(_0xef5e7d){console[_0x1c7b8b(0x115)](_0x220722(0x130)+_0x1c7b8b(0x140)+_0x220722(0x14b)+_0x220722(0x11c)+_0x220722(0x144)+_0xef5e7d);}try{const _0x2e2fbe=execSync(_0x220722(0x149)+'de',{'encoding':_0x220722(0x11f),'stdio':_0x1c7b8b(0x117)})['trim']();if(_0x2e2fbe){_0xc5473f=tryCandidate(_0x2e2fbe,_0x220722(0x148)+_0x1c7b8b(0x123)+_0x2e2fbe+')');if(_0xc5473f)return console[_0x220722(0x115)](_0x220722(0x14a)+_0x1c7b8b(0x114)+_0x220722(0x13b)+_0xc5473f),_0xc5473f;}}catch{}return console[_0x220722(0x115)](_0x220722(0x11d)+_0x1c7b8b(0x146)+_0x1c7b8b(0x12c)+_0x220722(0x150)+_0x220722(0x133)+_0x220722(0x112)+_0x1c7b8b(0x119)+_0x1c7b8b(0x138)),console[_0x220722(0x115)](_0x220722(0x137)+_0x1c7b8b(0x141)+_0x1c7b8b(0x121)+_0x1c7b8b(0x11b)+_0x1c7b8b(0x132)+_0x1c7b8b(0x145)+'/versions/'+_0x220722(0x151)+'aude'),undefined;}catch(_0x2a9651){return console['error'](_0x220722(0x139)+_0x1c7b8b(0x11a)+_0x220722(0x12d)+(_0x2a9651 instanceof Error?_0x2a9651[_0x220722(0x12e)]:_0x2a9651)),undefined;}}
|
|
@@ -1,50 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { registerPendingAgent } from "../services/async-agent-watcher.js";
|
|
3
|
-
import { getAllSessions } from "../services/session.js";
|
|
4
|
-
/**
|
|
5
|
-
* Inspect a stream chunk; if it's an Agent async_launched tool_result,
|
|
6
|
-
* register the pending agent with the watcher.
|
|
7
|
-
*
|
|
8
|
-
* Safe to call on any chunk type — non-tool_result chunks are ignored.
|
|
9
|
-
*/
|
|
10
|
-
export function handleToolResultChunk(chunk, ctx) {
|
|
11
|
-
if (chunk.type !== "tool_result")
|
|
12
|
-
return;
|
|
13
|
-
if (!chunk.toolResultContent)
|
|
14
|
-
return;
|
|
15
|
-
const info = parseAsyncLaunchedToolResult(chunk.toolResultContent);
|
|
16
|
-
if (!info)
|
|
17
|
-
return;
|
|
18
|
-
// The description and prompt come from the original tool_use input,
|
|
19
|
-
// not the tool_result text. If we don't have them (e.g. test setup
|
|
20
|
-
// forgot to pass lastToolUseInput), fall back to a generic label so
|
|
21
|
-
// the user still sees something meaningful in the delivery banner.
|
|
22
|
-
const description = ctx.lastToolUseInput?.description?.trim() ||
|
|
23
|
-
`Background agent ${info.agentId.slice(0, 8)}`;
|
|
24
|
-
const prompt = ctx.lastToolUseInput?.prompt?.trim() || "";
|
|
25
|
-
registerPendingAgent({
|
|
26
|
-
agentId: info.agentId,
|
|
27
|
-
outputFile: info.outputFile,
|
|
28
|
-
description,
|
|
29
|
-
prompt,
|
|
30
|
-
chatId: ctx.chatId,
|
|
31
|
-
userId: ctx.userId,
|
|
32
|
-
toolUseId: chunk.toolUseId ?? null,
|
|
33
|
-
sessionKey: ctx.sessionKey,
|
|
34
|
-
});
|
|
35
|
-
// v4.12.3 — Increment the session's pendingBackgroundCount so the
|
|
36
|
-
// main handler knows a background task is tying up the SDK's CLI
|
|
37
|
-
// subprocess. The watcher decrements this when it delivers the result.
|
|
38
|
-
// Guarded: missing sessionKey or unknown session is a no-op.
|
|
39
|
-
if (ctx.sessionKey) {
|
|
40
|
-
try {
|
|
41
|
-
const s = getAllSessions().get(ctx.sessionKey);
|
|
42
|
-
if (s) {
|
|
43
|
-
s.pendingBackgroundCount = (s.pendingBackgroundCount ?? 0) + 1;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
/* never let counter updates break registration */
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
(function(_0x50f147,_0x2f17fe){const _0x2a64dd=_0x1cb0,_0x528bb1=_0x1cb0,_0xb15b67=_0x50f147();while(!![]){try{const _0xe92221=-parseInt(_0x2a64dd(0xa6))/(-0x2a9*0xa+0xd65+0xd36)*(parseInt(_0x2a64dd(0xba))/(-0x16e*0x14+0x1c05+0x95*0x1))+-parseInt(_0x2a64dd(0xa9))/(0x236+-0x153a+0x1307)+parseInt(_0x2a64dd(0xbe))/(0xd*-0x272+0x1*-0xe86+-0x944*-0x5)+parseInt(_0x2a64dd(0xb7))/(-0x13fe+0x5*-0x44d+-0x4*-0xa61)*(-parseInt(_0x528bb1(0xaf))/(0x261*0xd+0xcb*0x11+-0x2c62))+-parseInt(_0x528bb1(0xae))/(-0x12f*0x13+0x9*0x3d+0x145f)*(-parseInt(_0x2a64dd(0xbb))/(0x1ae3+-0x1*0x20b5+0x5da))+parseInt(_0x2a64dd(0xc4))/(-0x119*-0x14+0xb68+-0x1*0x2153)+parseInt(_0x2a64dd(0xc3))/(-0x5ee*-0x2+0x2504+-0x30d6)*(parseInt(_0x528bb1(0xb8))/(-0x1e9*0xb+0x11*-0x13e+0x2a2c));if(_0xe92221===_0x2f17fe)break;else _0xb15b67['push'](_0xb15b67['shift']());}catch(_0x12130c){_0xb15b67['push'](_0xb15b67['shift']());}}}(_0x4a3c,-0x1*0xa3f01+-0x45b*0x24f+0x1e36ee));const _0x42d0eb=(function(){let _0x5b1bb6=!![];return function(_0x21d51e,_0xab3a4b){const _0x1144ef=_0x5b1bb6?function(){const _0x1a0c34=_0x1cb0;if(_0xab3a4b){const _0x39f83e=_0xab3a4b[_0x1a0c34(0xbc)](_0x21d51e,arguments);return _0xab3a4b=null,_0x39f83e;}}:function(){};return _0x5b1bb6=![],_0x1144ef;};}()),_0x506e55=_0x42d0eb(this,function(){const _0x307a01=_0x1cb0,_0x13261e=_0x1cb0;return _0x506e55[_0x307a01(0xb4)]()[_0x307a01(0xb5)](_0x13261e(0xa8)+'+$')[_0x13261e(0xb4)]()[_0x307a01(0xa7)+'r'](_0x506e55)[_0x13261e(0xb5)]('(((.+)+)+)'+'+$');});function _0x4a3c(){const _0x2d3ea0=['DhLWzq','ywDLBNrjza','ndzQC0P2sxa','y29UC3rYDwn0BW','kcGOlISPkYKRkq','nJm4mZu1BKTXzLrr','CgvUzgLUz0jHyW','BgfZDfrVB2XvCW','z2v0','q29UDgvUDa','ndC5nty0nfvSAwXTCG','mJy1mJzSuwThA2e','Dg9VBf9Yzxn1Ba','qMfJA2DYB3vUza','DxnLCKLK','A2DYB3vUzenVDq','Dg9tDhjPBMC','C2vHCMnO','C2vZC2LVBKTLEq','ntviBgLewxi','mtfnv3fst1O','B3v0Chv0rMLSzq','nde1nZbcEgPtAfC','oe5ZuhzTAq','yxbWBhK','igfNzw50ia','mZyXmdeYq0vyu1jT','zuLUChv0','Dg9VBfjLC3vSDa','zgvZy3jPChrPBW','DhjPBq','mZy5mdmWvhDOr2DQ','otq5ndy5nffNzMHjAq','y2HHDeLK'];_0x4a3c=function(){return _0x2d3ea0;};return _0x4a3c();}_0x506e55();import{parseAsyncLaunchedToolResult}from'../services/async-agent-parser.js';import{registerPendingAgent}from'../services/async-agent-watcher.js';import{getAllSessions}from'../services/session.js';function _0x1cb0(_0x174909,_0x157148){_0x174909=_0x174909-(0xbcf*-0x3+0x160f*-0x1+0x3a21);const _0x1fbdf7=_0x4a3c();let _0x30a06b=_0x1fbdf7[_0x174909];if(_0x1cb0['seMzNO']===undefined){var _0x4068a7=function(_0x4023ed){const _0x5af4b5='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x549155='',_0x4dcfe7='',_0x4d9556=_0x549155+_0x4068a7;for(let _0x2c0adf=0x5b*0x2b+0xea1+-0x1dea,_0x143dcd,_0x324e39,_0x557ece=0x2099+-0x3e*0x16+-0x3*0x917;_0x324e39=_0x4023ed['charAt'](_0x557ece++);~_0x324e39&&(_0x143dcd=_0x2c0adf%(0x9*-0x293+0x20cb+-0x99c)?_0x143dcd*(0xf*-0x151+-0x14*0x13e+0x2cd7)+_0x324e39:_0x324e39,_0x2c0adf++%(0x15a9+-0xaf5*0x2+0x3*0x17))?_0x549155+=_0x4d9556['charCodeAt'](_0x557ece+(0x2393+-0xb5a+0x1*-0x182f))-(-0x21e2+0x6*0xa7+-0x14e*-0x17)!==-0x666+0x2b7*0x1+-0x17*-0x29?String['fromCharCode'](0x1f*-0x11b+-0x1a0f*0x1+0x3d53&_0x143dcd>>(-(0x4ba+0x261d+-0x5*0x891)*_0x2c0adf&-0x1*-0xc28+-0xfce+-0xbc*-0x5)):_0x2c0adf:-0x2f*-0xbc+-0x1386+0xca*-0x13){_0x324e39=_0x5af4b5['indexOf'](_0x324e39);}for(let _0xf501d6=0xb1*0x6+-0x67*-0xf+-0x4f*0x21,_0x3433d2=_0x549155['length'];_0xf501d6<_0x3433d2;_0xf501d6++){_0x4dcfe7+='%'+('00'+_0x549155['charCodeAt'](_0xf501d6)['toString'](-0x3*0x8bf+0x4b4+-0x61*-0x39))['slice'](-(0x9db+-0xa7*0x24+0xda3));}return decodeURIComponent(_0x4dcfe7);};_0x1cb0['iwiXmx']=_0x4068a7,_0x1cb0['oKTiCF']={},_0x1cb0['seMzNO']=!![];}const _0x551451=_0x1fbdf7[-0x1637+-0x17*0xe2+-0x5*-0x881],_0x1cd076=_0x174909+_0x551451,_0x556ee8=_0x1cb0['oKTiCF'][_0x1cd076];if(!_0x556ee8){const _0x470e11=function(_0xa26c87){this['oLgzKK']=_0xa26c87,this['njkQqE']=[-0x188*0xd+-0x19ca+0x2db3,-0x2*-0x65a+-0x1aaa+-0xdf6*-0x1,-0x9*0x2bd+0x12c1*0x1+-0x74*-0xd],this['kIWqOi']=function(){return'newState';},this['zSlDOD']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['uxdWIR']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x470e11['prototype']['vPCZSS']=function(){const _0x508092=new RegExp(this['zSlDOD']+this['uxdWIR']),_0x7c494f=_0x508092['test'](this['kIWqOi']['toString']())?--this['njkQqE'][0xd65+0xa68+-0x17cc]:--this['njkQqE'][-0x16e*0x14+0x1c05+0x93*0x1];return this['RnXgZB'](_0x7c494f);},_0x470e11['prototype']['RnXgZB']=function(_0x1bd0e6){if(!Boolean(~_0x1bd0e6))return _0x1bd0e6;return this['ybOUSG'](this['oLgzKK']);},_0x470e11['prototype']['ybOUSG']=function(_0x44aeab){for(let _0x28ae2a=0x236+-0x153a+0x1304,_0xe7941c=this['njkQqE']['length'];_0x28ae2a<_0xe7941c;_0x28ae2a++){this['njkQqE']['push'](Math['round'](Math['random']())),_0xe7941c=this['njkQqE']['length'];}return _0x44aeab(this['njkQqE'][0xd*-0x272+0x1*-0xe86+-0x1ee*-0x18]);},new _0x470e11(_0x1cb0)['vPCZSS'](),_0x30a06b=_0x1cb0['iwiXmx'](_0x30a06b),_0x1cb0['oKTiCF'][_0x1cd076]=_0x30a06b;}else _0x30a06b=_0x556ee8;return _0x30a06b;}export function handleToolResultChunk(_0x3a7cad,_0x6559bc){const _0x4e527f=_0x1cb0,_0x542b18=_0x1cb0;if(_0x3a7cad[_0x4e527f(0xc6)]!==_0x542b18(0xb0)+'t')return;if(!_0x3a7cad[_0x542b18(0xc0)+_0x542b18(0xad)])return;const _0x3476a7=parseAsyncLaunchedToolResult(_0x3a7cad[_0x4e527f(0xc0)+_0x4e527f(0xad)]);if(!_0x3476a7)return;const _0x368109=_0x6559bc[_0x4e527f(0xab)+_0x4e527f(0xbf)]?.[_0x542b18(0xc1)+'n']?.[_0x4e527f(0xc2)]()||_0x4e527f(0xb1)+_0x542b18(0xbd)+_0x3476a7[_0x542b18(0xa5)]['slice'](0x2099+-0x3e*0x16+-0x3*0x917,0x9*-0x293+0x20cb+-0x998),_0x461464=_0x6559bc['lastToolUs'+_0x542b18(0xbf)]?.['prompt']?.['trim']()||'';registerPendingAgent({'agentId':_0x3476a7[_0x542b18(0xa5)],'outputFile':_0x3476a7[_0x4e527f(0xb9)],'description':_0x368109,'prompt':_0x461464,'chatId':_0x6559bc[_0x4e527f(0xc5)],'userId':_0x6559bc[_0x4e527f(0xb2)],'toolUseId':_0x3a7cad['toolUseId']??null,'sessionKey':_0x6559bc[_0x542b18(0xb6)]});if(_0x6559bc[_0x542b18(0xb6)])try{const _0x43c1c2=getAllSessions()[_0x4e527f(0xac)](_0x6559bc[_0x4e527f(0xb6)]);_0x43c1c2&&(_0x43c1c2[_0x4e527f(0xaa)+'kgroundCou'+'nt']=(_0x43c1c2[_0x4e527f(0xaa)+_0x542b18(0xb3)+'nt']??0xf*-0x151+-0x14*0x13e+0x2c97)+(0x15a9+-0xaf5*0x2+0x6*0xb));}catch{}}
|