alvin-bot 5.7.0 → 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.
Files changed (136) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/claude.js +1 -102
  3. package/dist/config.js +1 -96
  4. package/dist/engine.js +1 -90
  5. package/dist/find-claude-binary.js +1 -98
  6. package/dist/handlers/async-agent-chunk-handler.js +1 -50
  7. package/dist/handlers/background-bypass.js +1 -75
  8. package/dist/handlers/commands.js +1 -2336
  9. package/dist/handlers/cron-progress.js +1 -52
  10. package/dist/handlers/document.js +1 -194
  11. package/dist/handlers/message.js +1 -959
  12. package/dist/handlers/photo.js +1 -154
  13. package/dist/handlers/platform-message.js +1 -360
  14. package/dist/handlers/stuck-timer.js +1 -54
  15. package/dist/handlers/video.js +1 -237
  16. package/dist/handlers/voice.js +1 -148
  17. package/dist/i18n.js +1 -805
  18. package/dist/index.js +1 -697
  19. package/dist/init-data-dir.js +1 -98
  20. package/dist/middleware/auth.js +1 -233
  21. package/dist/migrate.js +1 -162
  22. package/dist/paths.js +1 -146
  23. package/dist/platforms/discord.js +1 -175
  24. package/dist/platforms/index.js +1 -130
  25. package/dist/platforms/signal.js +1 -205
  26. package/dist/platforms/slack-slash-parser.js +1 -32
  27. package/dist/platforms/slack.js +1 -501
  28. package/dist/platforms/telegram.js +1 -111
  29. package/dist/platforms/types.js +1 -8
  30. package/dist/platforms/whatsapp-auth-helpers.js +1 -53
  31. package/dist/platforms/whatsapp.js +1 -707
  32. package/dist/providers/claude-sdk-provider.js +1 -565
  33. package/dist/providers/codex-cli-provider.js +1 -134
  34. package/dist/providers/index.js +1 -7
  35. package/dist/providers/ollama-provider.js +1 -32
  36. package/dist/providers/openai-compatible.js +1 -406
  37. package/dist/providers/registry.js +1 -352
  38. package/dist/providers/runtime-header.js +1 -45
  39. package/dist/providers/tool-executor.js +1 -475
  40. package/dist/providers/types.js +1 -227
  41. package/dist/services/access.js +1 -144
  42. package/dist/services/allowed-users-gate.js +1 -56
  43. package/dist/services/alvin-dispatch.js +1 -174
  44. package/dist/services/alvin-mcp-tools.js +1 -104
  45. package/dist/services/asset-index.js +1 -224
  46. package/dist/services/async-agent-parser.js +1 -418
  47. package/dist/services/async-agent-watcher.js +1 -583
  48. package/dist/services/auto-diagnostic.js +1 -228
  49. package/dist/services/broadcast.js +1 -52
  50. package/dist/services/browser-manager.js +1 -562
  51. package/dist/services/browser-webfetch.js +1 -127
  52. package/dist/services/browser.js +1 -121
  53. package/dist/services/cdp-bootstrap.js +1 -357
  54. package/dist/services/compaction.js +1 -144
  55. package/dist/services/critical-notify.js +1 -203
  56. package/dist/services/cron-resolver.js +1 -58
  57. package/dist/services/cron-scheduling.js +1 -310
  58. package/dist/services/cron.js +1 -861
  59. package/dist/services/custom-tools.js +1 -317
  60. package/dist/services/delivery-queue.js +1 -173
  61. package/dist/services/delivery-registry.js +1 -21
  62. package/dist/services/disk-cleanup.js +1 -203
  63. package/dist/services/elevenlabs.js +1 -58
  64. package/dist/services/embeddings/auto-detect.js +1 -74
  65. package/dist/services/embeddings/fts5.js +1 -108
  66. package/dist/services/embeddings/gemini.js +1 -65
  67. package/dist/services/embeddings/index.js +1 -496
  68. package/dist/services/embeddings/ollama.js +1 -78
  69. package/dist/services/embeddings/openai.js +1 -49
  70. package/dist/services/embeddings/provider.js +1 -22
  71. package/dist/services/embeddings/vector-base.js +1 -113
  72. package/dist/services/embeddings-migration.js +1 -193
  73. package/dist/services/embeddings.js +1 -9
  74. package/dist/services/env-file.js +1 -50
  75. package/dist/services/exec-guard.js +1 -71
  76. package/dist/services/fallback-order.js +1 -154
  77. package/dist/services/file-permissions.js +1 -93
  78. package/dist/services/heartbeat-file.js +1 -65
  79. package/dist/services/heartbeat.js +1 -313
  80. package/dist/services/hooks.js +1 -44
  81. package/dist/services/imagegen.js +1 -72
  82. package/dist/services/language-detect.js +1 -154
  83. package/dist/services/markdown.js +1 -63
  84. package/dist/services/mcp.js +1 -263
  85. package/dist/services/memory-extractor.js +1 -178
  86. package/dist/services/memory-inject-mode.js +1 -43
  87. package/dist/services/memory-layers.js +1 -156
  88. package/dist/services/memory.js +1 -146
  89. package/dist/services/ollama-manager.js +1 -339
  90. package/dist/services/permissions-wizard.js +1 -291
  91. package/dist/services/personality.js +1 -376
  92. package/dist/services/plugins.js +1 -171
  93. package/dist/services/preflight.js +1 -292
  94. package/dist/services/process-manager.js +1 -291
  95. package/dist/services/release-highlights.js +1 -79
  96. package/dist/services/reminders.js +1 -97
  97. package/dist/services/restart.js +1 -48
  98. package/dist/services/security-audit.js +1 -74
  99. package/dist/services/self-diagnosis.js +1 -272
  100. package/dist/services/self-search.js +1 -129
  101. package/dist/services/session-persistence.js +1 -237
  102. package/dist/services/session.js +1 -282
  103. package/dist/services/skills.js +1 -290
  104. package/dist/services/ssrf-guard.js +1 -162
  105. package/dist/services/standing-orders.js +1 -29
  106. package/dist/services/steer-channel.js +1 -46
  107. package/dist/services/stop-controller.js +1 -52
  108. package/dist/services/subagent-dedup.js +1 -86
  109. package/dist/services/subagent-delivery.js +1 -452
  110. package/dist/services/subagent-stats.js +1 -123
  111. package/dist/services/subagents.js +1 -814
  112. package/dist/services/sudo.js +1 -329
  113. package/dist/services/telegram.js +1 -158
  114. package/dist/services/timing-safe-bearer.js +1 -51
  115. package/dist/services/tool-discovery.js +1 -214
  116. package/dist/services/trends.js +1 -580
  117. package/dist/services/updater.js +1 -291
  118. package/dist/services/usage-tracker.js +1 -144
  119. package/dist/services/users.js +1 -271
  120. package/dist/services/voice.js +1 -104
  121. package/dist/services/watchdog-brake.js +1 -154
  122. package/dist/services/watchdog.js +1 -311
  123. package/dist/services/workspaces.js +1 -276
  124. package/dist/tui/index.js +1 -667
  125. package/dist/util/console-formatter.js +1 -109
  126. package/dist/util/debounce.js +1 -24
  127. package/dist/util/telegram-error-filter.js +1 -62
  128. package/dist/version.js +1 -24
  129. package/dist/web/bind-strategy.js +1 -42
  130. package/dist/web/canvas.js +1 -30
  131. package/dist/web/doctor-api.js +1 -604
  132. package/dist/web/openai-compat.js +1 -252
  133. package/dist/web/server.js +1 -1902
  134. package/dist/web/setup-api.js +1 -1101
  135. package/package.json +5 -2
  136. package/dist/.metadata_never_index +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
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
+
5
18
  ## [5.7.0] — 2026-05-19
6
19
 
7
20
  ### Background-task results now arrive the instant the task finishes, and survive a restart
package/dist/claude.js CHANGED
@@ -1,102 +1 @@
1
- import { query } from "@anthropic-ai/claude-agent-sdk";
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 "dotenv";
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
- import { parseAsyncLaunchedToolResult } from "../services/async-agent-parser.js";
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{}}