alvin-bot 5.6.2 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +1 -1
- package/dist/claude.js +1 -102
- package/dist/config.js +1 -96
- package/dist/engine.js +1 -90
- package/dist/find-claude-binary.js +1 -98
- package/dist/handlers/async-agent-chunk-handler.js +1 -50
- package/dist/handlers/background-bypass.js +1 -75
- package/dist/handlers/commands.js +1 -2336
- package/dist/handlers/cron-progress.js +1 -52
- package/dist/handlers/document.js +1 -194
- package/dist/handlers/message.js +1 -959
- package/dist/handlers/photo.js +1 -154
- package/dist/handlers/platform-message.js +1 -360
- package/dist/handlers/stuck-timer.js +1 -54
- package/dist/handlers/video.js +1 -237
- package/dist/handlers/voice.js +1 -148
- package/dist/i18n.js +1 -805
- package/dist/index.js +1 -697
- package/dist/init-data-dir.js +1 -98
- package/dist/middleware/auth.js +1 -233
- package/dist/migrate.js +1 -162
- package/dist/paths.js +1 -146
- package/dist/platforms/discord.js +1 -175
- package/dist/platforms/index.js +1 -130
- package/dist/platforms/signal.js +1 -205
- package/dist/platforms/slack-slash-parser.js +1 -32
- package/dist/platforms/slack.js +1 -501
- package/dist/platforms/telegram.js +1 -111
- package/dist/platforms/types.js +1 -8
- package/dist/platforms/whatsapp-auth-helpers.js +1 -53
- package/dist/platforms/whatsapp.js +1 -707
- package/dist/providers/claude-sdk-provider.js +1 -565
- package/dist/providers/codex-cli-provider.js +1 -134
- package/dist/providers/index.js +1 -7
- package/dist/providers/ollama-provider.js +1 -32
- package/dist/providers/openai-compatible.js +1 -406
- package/dist/providers/registry.js +1 -352
- package/dist/providers/runtime-header.js +1 -45
- package/dist/providers/tool-executor.js +1 -475
- package/dist/providers/types.js +1 -227
- package/dist/services/access.js +1 -144
- package/dist/services/allowed-users-gate.js +1 -56
- package/dist/services/alvin-dispatch.js +1 -130
- package/dist/services/alvin-mcp-tools.js +1 -104
- package/dist/services/asset-index.js +1 -224
- package/dist/services/async-agent-parser.js +1 -418
- package/dist/services/async-agent-watcher.js +1 -443
- package/dist/services/auto-diagnostic.js +1 -228
- package/dist/services/broadcast.js +1 -52
- package/dist/services/browser-manager.js +1 -562
- package/dist/services/browser-webfetch.js +1 -127
- package/dist/services/browser.js +1 -121
- package/dist/services/cdp-bootstrap.js +1 -357
- package/dist/services/compaction.js +1 -144
- package/dist/services/critical-notify.js +1 -203
- package/dist/services/cron-resolver.js +1 -58
- package/dist/services/cron-scheduling.js +1 -310
- package/dist/services/cron.js +1 -861
- package/dist/services/custom-tools.js +1 -317
- package/dist/services/delivery-queue.js +1 -173
- package/dist/services/delivery-registry.js +1 -21
- package/dist/services/disk-cleanup.js +1 -203
- package/dist/services/elevenlabs.js +1 -58
- package/dist/services/embeddings/auto-detect.js +1 -74
- package/dist/services/embeddings/fts5.js +1 -108
- package/dist/services/embeddings/gemini.js +1 -65
- package/dist/services/embeddings/index.js +1 -496
- package/dist/services/embeddings/ollama.js +1 -78
- package/dist/services/embeddings/openai.js +1 -49
- package/dist/services/embeddings/provider.js +1 -22
- package/dist/services/embeddings/vector-base.js +1 -113
- package/dist/services/embeddings-migration.js +1 -193
- package/dist/services/embeddings.js +1 -9
- package/dist/services/env-file.js +1 -50
- package/dist/services/exec-guard.js +1 -71
- package/dist/services/fallback-order.js +1 -154
- package/dist/services/file-permissions.js +1 -93
- package/dist/services/heartbeat-file.js +1 -65
- package/dist/services/heartbeat.js +1 -313
- package/dist/services/hooks.js +1 -44
- package/dist/services/imagegen.js +1 -72
- package/dist/services/language-detect.js +1 -154
- package/dist/services/markdown.js +1 -63
- package/dist/services/mcp.js +1 -263
- package/dist/services/memory-extractor.js +1 -178
- package/dist/services/memory-inject-mode.js +1 -43
- package/dist/services/memory-layers.js +1 -156
- package/dist/services/memory.js +1 -146
- package/dist/services/ollama-manager.js +1 -339
- package/dist/services/permissions-wizard.js +1 -291
- package/dist/services/personality.js +1 -376
- package/dist/services/plugins.js +1 -171
- package/dist/services/preflight.js +1 -292
- package/dist/services/process-manager.js +1 -291
- package/dist/services/release-highlights.js +1 -79
- package/dist/services/reminders.js +1 -97
- package/dist/services/restart.js +1 -48
- package/dist/services/security-audit.js +1 -74
- package/dist/services/self-diagnosis.js +1 -272
- package/dist/services/self-search.js +1 -129
- package/dist/services/session-persistence.js +1 -237
- package/dist/services/session.js +1 -282
- package/dist/services/skills.js +1 -290
- package/dist/services/ssrf-guard.js +1 -162
- package/dist/services/standing-orders.js +1 -29
- package/dist/services/steer-channel.js +1 -46
- package/dist/services/stop-controller.js +1 -52
- package/dist/services/subagent-dedup.js +1 -0
- package/dist/services/subagent-delivery.js +1 -452
- package/dist/services/subagent-stats.js +1 -123
- package/dist/services/subagents.js +1 -814
- package/dist/services/sudo.js +1 -329
- package/dist/services/telegram.js +1 -158
- package/dist/services/timing-safe-bearer.js +1 -51
- package/dist/services/tool-discovery.js +1 -214
- package/dist/services/trends.js +1 -580
- package/dist/services/updater.js +1 -291
- package/dist/services/usage-tracker.js +1 -144
- package/dist/services/users.js +1 -271
- package/dist/services/voice.js +1 -104
- package/dist/services/watchdog-brake.js +1 -154
- package/dist/services/watchdog.js +1 -311
- package/dist/services/workspaces.js +1 -276
- package/dist/tui/index.js +1 -667
- package/dist/util/console-formatter.js +1 -109
- package/dist/util/debounce.js +1 -24
- package/dist/util/telegram-error-filter.js +1 -62
- package/dist/version.js +1 -24
- package/dist/web/bind-strategy.js +1 -42
- package/dist/web/canvas.js +1 -30
- package/dist/web/doctor-api.js +1 -604
- package/dist/web/openai-compat.js +1 -252
- package/dist/web/server.js +1 -1831
- package/dist/web/setup-api.js +1 -1101
- package/package.json +5 -2
- package/dist/.metadata_never_index +0 -0
|
@@ -1,52 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* Pure helpers for the /cron run progress ticker.
|
|
3
|
-
*
|
|
4
|
-
* Separated from commands.ts so the formatting and safety rules can be
|
|
5
|
-
* unit-tested without standing up the entire grammy Context. The command
|
|
6
|
-
* handler wires these into a setInterval that edits a single Telegram
|
|
7
|
-
* message once per tick, giving the user visible proof-of-life during
|
|
8
|
-
* long-running (10+ min) cron jobs.
|
|
9
|
-
*
|
|
10
|
-
* See test/cron-progress-ticker.test.ts for the contract.
|
|
11
|
-
*/
|
|
12
|
-
/** Human-readable elapsed time — adapts unit to magnitude. */
|
|
13
|
-
export function formatElapsed(seconds) {
|
|
14
|
-
if (seconds < 60)
|
|
15
|
-
return `${seconds}s`;
|
|
16
|
-
const minutes = Math.floor(seconds / 60);
|
|
17
|
-
const remSec = seconds % 60;
|
|
18
|
-
if (minutes < 60)
|
|
19
|
-
return `${minutes}m ${remSec}s`;
|
|
20
|
-
const hours = Math.floor(minutes / 60);
|
|
21
|
-
const remMin = minutes % 60;
|
|
22
|
-
return `${hours}h ${remMin}m`;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Escape Markdown-breaking characters in untrusted display strings so
|
|
26
|
-
* an edit-message call can safely use `parse_mode: Markdown` without
|
|
27
|
-
* triggering "can't parse entities" — the exact bug that killed every
|
|
28
|
-
* daily-job-alert banner for days.
|
|
29
|
-
*
|
|
30
|
-
* We use Telegram Markdown (v1) escape rules: only `*`, `_`, `[`, `` ` ``.
|
|
31
|
-
* The rest flow through unchanged.
|
|
32
|
-
*/
|
|
33
|
-
export function escapeMarkdown(text) {
|
|
34
|
-
return text.replace(/([*_[\]`])/g, "\\$1");
|
|
35
|
-
}
|
|
36
|
-
/** Intermediate ticker text: "🔄 Running *name* · 2m 5s elapsed…" */
|
|
37
|
-
export function buildTickerText(jobName, elapsedSeconds) {
|
|
38
|
-
const safe = escapeMarkdown(jobName);
|
|
39
|
-
return `🔄 Running *${safe}* · ${formatElapsed(elapsedSeconds)} elapsed…`;
|
|
40
|
-
}
|
|
41
|
-
/** Final ticker state: "✅ Done — *name* · 13m 17s" (or ❌ / ⏳). */
|
|
42
|
-
export function buildDoneText(jobName, elapsedSeconds, outcome) {
|
|
43
|
-
const safe = escapeMarkdown(jobName);
|
|
44
|
-
if (outcome.skipped) {
|
|
45
|
-
return `⏳ *${safe}* is already running — not starting a duplicate`;
|
|
46
|
-
}
|
|
47
|
-
if (!outcome.ok) {
|
|
48
|
-
const errLine = outcome.error ? `\n\n${outcome.error.slice(0, 500)}` : "";
|
|
49
|
-
return `❌ *${safe}* — ${formatElapsed(elapsedSeconds)}${errLine}`;
|
|
50
|
-
}
|
|
51
|
-
return `✅ Done — *${safe}* · ${formatElapsed(elapsedSeconds)}`;
|
|
52
|
-
}
|
|
1
|
+
(function(_0x4bc4d8,_0x4a22de){const _0x24d415=_0x9b92,_0x1b191c=_0x9b92,_0x31a979=_0x4bc4d8();while(!![]){try{const _0x567af2=parseInt(_0x24d415(0x1e7))/(0x17*0x55+0x36*0xb0+-0x2cc2)+-parseInt(_0x24d415(0x1eb))/(-0xa12+0x1cb2+-0x129e)+-parseInt(_0x1b191c(0x1d8))/(0x1d*0x13a+-0x1ab5+-0x8da)*(parseInt(_0x1b191c(0x1e3))/(0x11c*-0x1e+-0xb3*0x7+-0x2631*-0x1))+-parseInt(_0x24d415(0x1e9))/(-0x1c*-0xbf+0x1*0x120d+-0x26ec)*(parseInt(_0x24d415(0x1e6))/(0x2*-0x3c1+-0x1ac5+0x224d))+parseInt(_0x1b191c(0x1dc))/(-0x1*0x114f+0x1*-0xb07+0x35*0x89)+parseInt(_0x1b191c(0x1ec))/(0x16b3+0x25*-0x17+-0x1358)+parseInt(_0x24d415(0x1e0))/(-0x1cb3+-0x11d5+0x7*0x6a7);if(_0x567af2===_0x4a22de)break;else _0x31a979['push'](_0x31a979['shift']());}catch(_0x244e3d){_0x31a979['push'](_0x31a979['shift']());}}}(_0xd7a8,-0x1e851*-0x3+-0x1*0x84037+0x7dd07*0x2));const _0x271d22=(function(){let _0x15fd21=!![];return function(_0x5e16a9,_0x20e334){const _0x1927e0=_0x15fd21?function(){const _0x3069cd=_0x9b92;if(_0x20e334){const _0x1bb2ad=_0x20e334[_0x3069cd(0x1df)](_0x5e16a9,arguments);return _0x20e334=null,_0x1bb2ad;}}:function(){};return _0x15fd21=![],_0x1927e0;};}()),_0x3c2b17=_0x271d22(this,function(){const _0x4ea65b=_0x9b92,_0x4338d3=_0x9b92;return _0x3c2b17[_0x4ea65b(0x1e4)]()[_0x4338d3(0x1de)](_0x4338d3(0x1ef)+'+$')['toString']()[_0x4ea65b(0x1e1)+'r'](_0x3c2b17)['search']('(((.+)+)+)'+'+$');});function _0xd7a8(){const _0x37d6cd=['mJe2oti3ogfxsM1krG','ota0oty5nLfyAvnXwG','4PYfierVBMuG4OcuicO','4P2micO','kcGOlISPkYKRkq','iokaLcbUB3qGC3rH','4O+ZicO','mZnzCvbiwg0','CgXPy2f0zq','kIdIGjqG','CMvWBgfJzq','mtC3mJCZnNvgsejNBG','zhKGCNvUBMLUzW','C2vHCMnO','yxbWBhK','mte3nJi4ndDQu3jzvLi','y29UC3rYDwn0BW','C2TPChbLza','mJaWnZiWBujhr21I','Dg9tDhjPBMC','kIdcTYa','nZqYohzKCvPbAW','nZaZotGYq1bUyvzg','zMXVB3i','mZyXme1rr01uua','kIbPCYbHBhjLyq'];_0xd7a8=function(){return _0x37d6cd;};return _0xd7a8();}_0x3c2b17();export function formatElapsed(_0x33c32d){const _0x425498=_0x9b92,_0x2fdae3=_0x9b92;if(_0x33c32d<-0x172*0x14+-0x734*-0x5+0x6e0*-0x1)return _0x33c32d+'s';const _0x57fe66=Math[_0x425498(0x1e8)](_0x33c32d/(0xe6b+0x197e+-0x27ad)),_0x3b4070=_0x33c32d%(0x899+0x13de+0x969*-0x3);if(_0x57fe66<-0x2144+0xf7+0x2089)return _0x57fe66+'m\x20'+_0x3b4070+'s';const _0x26e769=Math[_0x425498(0x1e8)](_0x57fe66/(0xb*-0x1d3+-0x61+-0x2*-0xa57)),_0x584839=_0x57fe66%(0x212f*-0x1+0x5ea*0x1+0x1b81);return _0x26e769+'h\x20'+_0x584839+'m';}export function escapeMarkdown(_0xd0ccb9){const _0x23ba59=_0x9b92;return _0xd0ccb9[_0x23ba59(0x1db)](/([*_[\]`])/g,'\x5c$1');}export function buildTickerText(_0x4d59ff,_0x48331f){const _0x3aff7e=_0x9b92,_0x5f4e85=escapeMarkdown(_0x4d59ff);return'🔄\x20Running\x20'+'*'+_0x5f4e85+_0x3aff7e(0x1e5)+formatElapsed(_0x48331f)+'\x20elapsed…';}function _0x9b92(_0x430f04,_0x10d15a){_0x430f04=_0x430f04-(0x2*0x57a+-0x1e3b+0x151d);const _0x236538=_0xd7a8();let _0x52b596=_0x236538[_0x430f04];if(_0x9b92['zBtbWZ']===undefined){var _0x779330=function(_0xf1745d){const _0x4db556='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3eee58='',_0x1b5950='',_0x1f6065=_0x3eee58+_0x779330;for(let _0x711103=-0x1f1b+0x4b*-0x29+0x2b1e,_0x29b764,_0x53c4be,_0x4c1626=0x8ae*-0x1+-0x1ce8+-0x236*-0x11;_0x53c4be=_0xf1745d['charAt'](_0x4c1626++);~_0x53c4be&&(_0x29b764=_0x711103%(0x1bd*0xe+0x25e8+-0x3e3a)?_0x29b764*(-0x10d*0x20+0x899+0x1947*0x1)+_0x53c4be:_0x53c4be,_0x711103++%(-0x2144+0xf7+0x2051))?_0x3eee58+=_0x1f6065['charCodeAt'](_0x4c1626+(0xb*-0x1d3+-0x61+-0x26*-0x8a))-(0x212f*-0x1+0x5ea*0x1+0x1b4f)!==0x1*0x2509+-0x10f+-0x3*0xbfe?String['fromCharCode'](-0x130b+0x4d1*0x6+-0x8dc&_0x29b764>>(-(-0x150e+0x2604+-0x10f4)*_0x711103&-0x2*-0x1ab+-0xb02*-0x3+0x122b*-0x2)):_0x711103:0x9c1*0x4+0x12a3+0x39a7*-0x1){_0x53c4be=_0x4db556['indexOf'](_0x53c4be);}for(let _0x4914a7=0xfe6+-0x187e+0x64*0x16,_0xd75bb9=_0x3eee58['length'];_0x4914a7<_0xd75bb9;_0x4914a7++){_0x1b5950+='%'+('00'+_0x3eee58['charCodeAt'](_0x4914a7)['toString'](-0x5*0x59b+-0xb*0xc+0x1c9b))['slice'](-(0x19*-0x5+-0x1ce8+0x1d67));}return decodeURIComponent(_0x1b5950);};_0x9b92['NubJiU']=_0x779330,_0x9b92['ZuDMBY']={},_0x9b92['zBtbWZ']=!![];}const _0x6bba9f=_0x236538[0x1fdd+0xf*0x81+-0x276c],_0x19f2e9=_0x430f04+_0x6bba9f,_0x5b1a6d=_0x9b92['ZuDMBY'][_0x19f2e9];if(!_0x5b1a6d){const _0x494889=function(_0x2c9cba){this['pDEScp']=_0x2c9cba,this['xMXzxc']=[-0x2*-0x6c5+0x1*0x853+-0x577*0x4,0x3*-0x694+0x286+0x1136,0x8*0x251+0x91*0x2c+-0x2b74],this['YkKFDl']=function(){return'newState';},this['EpvIhV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['NuMkGT']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x494889['prototype']['tUyLvM']=function(){const _0x492efd=new RegExp(this['EpvIhV']+this['NuMkGT']),_0x45b8de=_0x492efd['test'](this['YkKFDl']['toString']())?--this['xMXzxc'][0x2*-0x10bc+-0xdc9+0x2f42]:--this['xMXzxc'][-0x2fa*-0x3+0xb53+0x1441*-0x1];return this['PJNFuF'](_0x45b8de);},_0x494889['prototype']['PJNFuF']=function(_0x3b655a){if(!Boolean(~_0x3b655a))return _0x3b655a;return this['ZmxXjJ'](this['pDEScp']);},_0x494889['prototype']['ZmxXjJ']=function(_0x191d3a){for(let _0x3fa0e7=-0x1a22+-0xe8*-0x1f+-0x2*0xfb,_0x4714b9=this['xMXzxc']['length'];_0x3fa0e7<_0x4714b9;_0x3fa0e7++){this['xMXzxc']['push'](Math['round'](Math['random']())),_0x4714b9=this['xMXzxc']['length'];}return _0x191d3a(this['xMXzxc'][0x1*0x24fa+0x1*0x1ffb+0x8b*-0x7f]);},new _0x494889(_0x9b92)['tUyLvM'](),_0x52b596=_0x9b92['NubJiU'](_0x52b596),_0x9b92['ZuDMBY'][_0x19f2e9]=_0x52b596;}else _0x52b596=_0x5b1a6d;return _0x52b596;}export function buildDoneText(_0x466fa2,_0x301f1e,_0x5401c6){const _0x2e5df7=_0x9b92,_0x216c48=_0x9b92,_0x124c4b=escapeMarkdown(_0x466fa2);if(_0x5401c6[_0x2e5df7(0x1e2)])return _0x2e5df7(0x1d7)+_0x124c4b+(_0x216c48(0x1ea)+_0x216c48(0x1dd)+_0x216c48(0x1d6)+'rting\x20a\x20du'+_0x216c48(0x1d9));if(!_0x5401c6['ok']){const _0x3b30c6=_0x5401c6['error']?'\x0a\x0a'+_0x5401c6['error']['slice'](0x1*0x2509+-0x10f+-0x3*0xbfe,-0x130b+0x4d1*0x6+-0x7e7):'';return _0x216c48(0x1ee)+_0x124c4b+_0x216c48(0x1da)+formatElapsed(_0x301f1e)+_0x3b30c6;}return _0x2e5df7(0x1ed)+_0x124c4b+_0x216c48(0x1e5)+formatElapsed(_0x301f1e);}
|
|
@@ -1,194 +1 @@
|
|
|
1
|
-
import { InputFile } from "grammy";
|
|
2
|
-
import fs from "fs";
|
|
3
|
-
import path from "path";
|
|
4
|
-
import os from "os";
|
|
5
|
-
import https from "https";
|
|
6
|
-
import { config } from "../config.js";
|
|
7
|
-
import { getSession, addToHistory } from "../services/session.js";
|
|
8
|
-
import { TelegramStreamer } from "../services/telegram.js";
|
|
9
|
-
import { getRegistry } from "../engine.js";
|
|
10
|
-
import { textToSpeech } from "../services/voice.js";
|
|
11
|
-
import { buildSystemPrompt } from "../services/personality.js";
|
|
12
|
-
const TEMP_DIR = path.join(os.tmpdir(), "alvin-bot");
|
|
13
|
-
if (!fs.existsSync(TEMP_DIR))
|
|
14
|
-
fs.mkdirSync(TEMP_DIR, { recursive: true });
|
|
15
|
-
/** React to a message with an emoji. Silently fails if not supported. */
|
|
16
|
-
async function react(ctx, emoji) {
|
|
17
|
-
try {
|
|
18
|
-
await ctx.react(emoji);
|
|
19
|
-
}
|
|
20
|
-
catch { /* ignore */ }
|
|
21
|
-
}
|
|
22
|
-
async function downloadFile(url, dest) {
|
|
23
|
-
return new Promise((resolve, reject) => {
|
|
24
|
-
const file = fs.createWriteStream(dest);
|
|
25
|
-
https.get(url, (response) => {
|
|
26
|
-
response.pipe(file);
|
|
27
|
-
file.on("finish", () => file.close(() => resolve()));
|
|
28
|
-
}).on("error", (err) => {
|
|
29
|
-
fs.unlink(dest, () => { });
|
|
30
|
-
reject(err);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
// File types we can handle
|
|
35
|
-
const SUPPORTED_EXTENSIONS = new Set([
|
|
36
|
-
".pdf", ".txt", ".md", ".csv", ".json", ".xml", ".html", ".htm",
|
|
37
|
-
".doc", ".docx", ".xls", ".xlsx", ".pptx",
|
|
38
|
-
".py", ".js", ".ts", ".jsx", ".tsx", ".java", ".c", ".cpp", ".h",
|
|
39
|
-
".rs", ".go", ".rb", ".php", ".sh", ".bash", ".zsh",
|
|
40
|
-
".yaml", ".yml", ".toml", ".ini", ".conf", ".cfg",
|
|
41
|
-
".log", ".sql", ".env", ".gitignore", ".dockerfile",
|
|
42
|
-
]);
|
|
43
|
-
function isSupportedFile(filename) {
|
|
44
|
-
const ext = path.extname(filename).toLowerCase();
|
|
45
|
-
return SUPPORTED_EXTENSIONS.has(ext);
|
|
46
|
-
}
|
|
47
|
-
export async function handleDocument(ctx) {
|
|
48
|
-
const doc = ctx.message?.document;
|
|
49
|
-
if (!doc)
|
|
50
|
-
return;
|
|
51
|
-
const userId = ctx.from.id;
|
|
52
|
-
const session = getSession(userId);
|
|
53
|
-
if (session.isProcessing) {
|
|
54
|
-
await ctx.reply("Please wait, previous request still running... (/cancel to abort)");
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const filename = doc.file_name || "unknown";
|
|
58
|
-
const ext = path.extname(filename).toLowerCase();
|
|
59
|
-
// Check file size (Telegram max is 20MB for bots)
|
|
60
|
-
if (doc.file_size && doc.file_size > 20 * 1024 * 1024) {
|
|
61
|
-
await ctx.reply("⚠️ File too large (max 20 MB).");
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
session.isProcessing = true;
|
|
65
|
-
session.abortController = new AbortController();
|
|
66
|
-
const streamer = new TelegramStreamer(ctx.chat.id, ctx.api, ctx.message?.message_id);
|
|
67
|
-
let finalText = "";
|
|
68
|
-
const typingInterval = setInterval(() => {
|
|
69
|
-
ctx.api.sendChatAction(ctx.chat.id, "typing").catch(() => { });
|
|
70
|
-
}, 4000);
|
|
71
|
-
try {
|
|
72
|
-
await react(ctx, "📄");
|
|
73
|
-
await ctx.api.sendChatAction(ctx.chat.id, "typing");
|
|
74
|
-
// Download the file
|
|
75
|
-
const file = await ctx.api.getFile(doc.file_id);
|
|
76
|
-
const fileUrl = `https://api.telegram.org/file/bot${config.botToken}/${file.file_path}`;
|
|
77
|
-
// H2: strip any path components from the attacker-controlled file_name
|
|
78
|
-
// to prevent writing outside TEMP_DIR (e.g. file_name="../../../x").
|
|
79
|
-
const safeFilename = path.basename(filename);
|
|
80
|
-
const localPath = path.join(TEMP_DIR, `doc_${Date.now()}_${safeFilename}`);
|
|
81
|
-
// Containment assertion: resolved path must stay inside TEMP_DIR.
|
|
82
|
-
if (!path.resolve(localPath).startsWith(path.resolve(TEMP_DIR))) {
|
|
83
|
-
throw new Error("File path containment violation");
|
|
84
|
-
}
|
|
85
|
-
await downloadFile(fileUrl, localPath);
|
|
86
|
-
const caption = ctx.message?.caption || "";
|
|
87
|
-
const userInstruction = caption || `Analysiere diese Datei: ${filename}`;
|
|
88
|
-
session.messageCount++;
|
|
89
|
-
const registry = getRegistry();
|
|
90
|
-
const activeProvider = registry.getActive();
|
|
91
|
-
const isSDK = activeProvider.config.type === "claude-sdk";
|
|
92
|
-
let queryOpts;
|
|
93
|
-
if (isSDK) {
|
|
94
|
-
// SDK provider: pass file path — Claude can read files natively
|
|
95
|
-
queryOpts = {
|
|
96
|
-
prompt: `Der User hat eine Datei gesendet: ${localPath}\nDateiname: ${filename}\n\nLies die Datei mit dem Read-Tool und bearbeite folgende Anfrage:\n${userInstruction}`,
|
|
97
|
-
systemPrompt: buildSystemPrompt(true, session.language),
|
|
98
|
-
workingDir: session.workingDir,
|
|
99
|
-
effort: session.effort,
|
|
100
|
-
abortSignal: session.abortController.signal,
|
|
101
|
-
sessionId: session.sessionId,
|
|
102
|
-
_sessionState: {
|
|
103
|
-
messageCount: session.messageCount,
|
|
104
|
-
toolUseCount: session.toolUseCount,
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// Non-SDK: try to extract text content and include in prompt
|
|
110
|
-
let fileContent = "";
|
|
111
|
-
if ([".txt", ".md", ".csv", ".json", ".xml", ".html", ".htm",
|
|
112
|
-
".py", ".js", ".ts", ".jsx", ".tsx", ".java", ".c", ".cpp", ".h",
|
|
113
|
-
".rs", ".go", ".rb", ".php", ".sh", ".bash", ".zsh",
|
|
114
|
-
".yaml", ".yml", ".toml", ".ini", ".conf", ".cfg",
|
|
115
|
-
".log", ".sql", ".env", ".gitignore", ".dockerfile"].includes(ext)) {
|
|
116
|
-
// Plain text files — read directly
|
|
117
|
-
fileContent = fs.readFileSync(localPath, "utf-8");
|
|
118
|
-
// Truncate very large files
|
|
119
|
-
if (fileContent.length > 50000) {
|
|
120
|
-
fileContent = fileContent.slice(0, 50000) + "\n\n[... File truncated, total " + fileContent.length + " characters]";
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
fileContent = `[Binary file: ${filename}, ${doc.file_size ? Math.round(doc.file_size / 1024) + " KB" : "unknown size"}. Can only be analyzed with the SDK provider (Claude).]`;
|
|
125
|
-
}
|
|
126
|
-
const fullPrompt = `Datei: ${filename}\n\n\`\`\`\n${fileContent}\n\`\`\`\n\n${userInstruction}`;
|
|
127
|
-
addToHistory(userId, { role: "user", content: fullPrompt });
|
|
128
|
-
queryOpts = {
|
|
129
|
-
prompt: fullPrompt,
|
|
130
|
-
systemPrompt: buildSystemPrompt(false, session.language),
|
|
131
|
-
workingDir: session.workingDir,
|
|
132
|
-
effort: session.effort,
|
|
133
|
-
abortSignal: session.abortController.signal,
|
|
134
|
-
history: session.history,
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
for await (const chunk of registry.queryWithFallback(queryOpts)) {
|
|
138
|
-
switch (chunk.type) {
|
|
139
|
-
case "text":
|
|
140
|
-
finalText = chunk.text || "";
|
|
141
|
-
await streamer.update(finalText);
|
|
142
|
-
break;
|
|
143
|
-
case "tool_use":
|
|
144
|
-
if (chunk.toolName)
|
|
145
|
-
session.toolUseCount++;
|
|
146
|
-
break;
|
|
147
|
-
case "done":
|
|
148
|
-
if (chunk.sessionId)
|
|
149
|
-
session.sessionId = chunk.sessionId;
|
|
150
|
-
if (chunk.costUsd)
|
|
151
|
-
session.totalCost += chunk.costUsd;
|
|
152
|
-
session.lastActivity = Date.now();
|
|
153
|
-
break;
|
|
154
|
-
case "error":
|
|
155
|
-
await ctx.reply(`Error: ${chunk.error}`);
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
await streamer.finalize(finalText);
|
|
160
|
-
await react(ctx, "👍");
|
|
161
|
-
if (!isSDK && finalText) {
|
|
162
|
-
addToHistory(userId, { role: "assistant", content: finalText });
|
|
163
|
-
}
|
|
164
|
-
// Voice reply if enabled
|
|
165
|
-
if (session.voiceReply && finalText.trim()) {
|
|
166
|
-
try {
|
|
167
|
-
await ctx.api.sendChatAction(ctx.chat.id, "upload_voice");
|
|
168
|
-
const audioPath = await textToSpeech(finalText);
|
|
169
|
-
await ctx.replyWithVoice(new InputFile(fs.readFileSync(audioPath), "response.mp3"));
|
|
170
|
-
fs.unlink(audioPath, () => { });
|
|
171
|
-
}
|
|
172
|
-
catch (err) {
|
|
173
|
-
console.error("TTS error:", err);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
// Clean up temp file after a delay (SDK might still need it)
|
|
177
|
-
setTimeout(() => fs.unlink(localPath, () => { }), 60000);
|
|
178
|
-
}
|
|
179
|
-
catch (err) {
|
|
180
|
-
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
181
|
-
await react(ctx, "👎");
|
|
182
|
-
if (errorMsg.includes("abort")) {
|
|
183
|
-
await ctx.reply("Anfrage abgebrochen.");
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
await ctx.reply(`Error: ${errorMsg}`);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
finally {
|
|
190
|
-
clearInterval(typingInterval);
|
|
191
|
-
session.isProcessing = false;
|
|
192
|
-
session.abortController = null;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
1
|
+
const _0x42d26e=_0x3aa4,_0x58b660=_0x3aa4;(function(_0x98f306,_0x4a7743){const _0x15a87d=_0x3aa4,_0x144162=_0x3aa4,_0x5893af=_0x98f306();while(!![]){try{const _0x17abfc=-parseInt(_0x15a87d(0x1d6))/(-0x7a*0x41+0xb*-0x27b+0x3a44)+-parseInt(_0x15a87d(0x227))/(0x619+0x1*-0x1c91+0x167a)+parseInt(_0x144162(0x208))/(0x2127+-0x2a*0x27+-0x1abe)*(parseInt(_0x144162(0x1cf))/(0x5*0x27b+0x5d*0x3+0x6*-0x23f))+-parseInt(_0x15a87d(0x1d0))/(0x7c9*0x3+-0x2*0xb45+0x6*-0x22)*(parseInt(_0x15a87d(0x1ee))/(0x19db+-0x3*-0xbf+-0x1*0x1c12))+-parseInt(_0x144162(0x1a3))/(-0x4*0x45+-0x84b+0x191*0x6)*(parseInt(_0x15a87d(0x1d5))/(-0x16+0xeb*-0x1f+0x1c93))+parseInt(_0x15a87d(0x222))/(-0xcd5*0x1+0x6fd+0x2b*0x23)+parseInt(_0x15a87d(0x1fc))/(0xc7e+0x200e+-0x2c82);if(_0x17abfc===_0x4a7743)break;else _0x5893af['push'](_0x5893af['shift']());}catch(_0x1b0b56){_0x5893af['push'](_0x5893af['shift']());}}}(_0x4789,0x314b1+-0x33*-0x2a1d+-0x31891));const _0x310b6b=(function(){let _0x2dd65a=!![];return function(_0x507cdb,_0x1b1c69){const _0x592dd8=_0x2dd65a?function(){const _0xa8674f=_0x3aa4;if(_0x1b1c69){const _0x393e9a=_0x1b1c69[_0xa8674f(0x23a)](_0x507cdb,arguments);return _0x1b1c69=null,_0x393e9a;}}:function(){};return _0x2dd65a=![],_0x592dd8;};}()),_0x136f6d=_0x310b6b(this,function(){const _0x4cfbda=_0x3aa4,_0x2b99e5=_0x3aa4;return _0x136f6d['toString']()['search'](_0x4cfbda(0x237)+'+$')[_0x2b99e5(0x212)]()[_0x4cfbda(0x1da)+'r'](_0x136f6d)[_0x4cfbda(0x23c)]('(((.+)+)+)'+'+$');});_0x136f6d();import{InputFile}from'grammy';import _0x29a88 from'fs';import _0x22cf8f from'path';import _0x59b3f6 from'os';import _0x52a26a from'https';import{config}from'../config.js';import{getSession,addToHistory}from'../services/session.js';import{TelegramStreamer}from'../services/telegram.js';import{getRegistry}from'../engine.js';function _0x4789(){const _0x51e44f=['zMLSzv9ZAxPL','y2HHDa','zg9JxW','y2XHDwrLlxnKAW','y29ZDfvZza','lIbdyw4GB25SEq','cGPmAwvZigrPzq','lMDV','Dg1WzgLY','DgLVBG','C3rHCNrZv2L0Aa','DcWGChjLDMLVDq','lMPHDMe','zguPlL0','yM90','ignOyxjHy3rLCG','y2fWDgLVBG','z2v0rMLSzq','mti4mZz0CKTJtxG','ndG5nZiWnvPHtvfIAG','zxHPC3rZu3LUyW','z2v0qwn0AxzL','lMnZDG','EcaYmcbnqIKU','nJi5ody2nhDmvxHyAG','ntq0nZm4Cun4reX3','zMLSzv9Uyw1L','lMPZEa','lMrVy3G','y29UC3rYDwn0BW','lM1K','zxH0BMfTzq','igXHCMDLicHTyq','yM9YDcK','ugXLyxnLihDHAq','lM9YzY9MAwXLlW','lNrZ','rMLSzsbWyxrOia','BM93','w0jPBMfYEsbMAq','lMjHC2G','AgfZ','Dgv4Da','Bgu6ia','qw5MCMfNzsbHyG','zMLSzv9Pza','BwvZC2fNzv9Pza','z2v0','ywjVCNrdB250CG','nKLsAvrLva','As50zwXLz3jHBq','yw5JzwWGDg8Gyq','lNHSCW','BwvZC2fNzq','Dw5RBM93BIbZAq','cKrHDgvPBMfTzq','y29UzMLN','lMPZB24','CgLWzq','Dw5SAw5R','Dg9VBf91C2u','Dw5RBM93BG','lNrVBwW','mJaXnJyWmZbosxfJBwC','lNr4Da','lMLUAq','Dg9VBe5HBwu','lMnWCa','ierHDgvPig1PDa','zwfYyMvPDguGzG','zwqGD2L0Acb0Aa','B2XSzxi','zsb0CNvUy2f0zq','lNHTBa','zg9JDw1LBNq','mJeZrMngrg9U','B2XNzw5KzsbbBG','BwvZC2fNzunVDq','igrPzxnLierHDa','zxjYB3i','C2vUzenOyxrbyW','cGPGygak','Dg9VBfvZzunVDq','lMvUDG','lMnVBMy','Dg9tDhjPBMC','DM9Py2vszxbSEq','vg9VBcb1BMqGyG','lNnXBa','cMbGyaOk','BwTKAxjtEw5J','lMXVzW','AxnqCM9JzxnZAq','cGPBlI4UiezPBa','D29YA2LUz0rPCG','zMLSzv9WyxrO','BgfZDefJDgL2Aq','CMvZB2X2zq','y2XVC2u','C3rPBgWGCNvUBG','BgvUz3rO','nZC5odi3nuX1yKrSsW','lNPZAa','z2vICM9JAgvUlG','lNjZ','DgvPigDLC2vUza','ntaXmtmYs0f0rwvS','ywXSyMfJAW','rxjYB3i6ia','DhLWzq','lNbKzG','igjLigfUywX5EG','DxnLCG','zwzMB3j0','lMrVy2TLCMzPBa','CMvWBhK','Dg9mB3DLCKnHCW','CYbYzxf1zxn0ia','CMvZCg9UC2uUBq','DxrMltG','lMPZ','qw5HBhLZAwvYzq','kcGOlISPkYKRkq','yxqGzwLUzsbeyq','CMvHy3q','yxbWBhK','DxbKyxrL','C2vHCMnO','zNjHz2u6cG','yMfZzw5HBwu','Aw5JBhvKzxm','zcWGDg90ywWG','CMvWBhLxAxrOvG','lNLTBa','C2LNBMfS','BgfUz3vHz2u','DhLWAw5N','lMH0BwW','Dg90ywXdB3n0','n0PSwuHIAW','lNbOCa','yxnZAxn0yw50','AgLZDg9YEq','Dcb2Aw9SyxrPBW','yxbP','Ahr0Chm6lY9HCa','lNrZEa','lNb5','DhjPBq','CMvHzezPBgvtEq','lMDPDgLNBM9Yzq','vfrtigvYCM9YoG','zg9Uzq','lMrVyW','rgvYifvZzxiGAa','AwrLCIaOq2XHDq','lNLHBwW','ywX2Aw4TyM90','CM91BMq','C2vZC2LVBKLK','AM9PBG','y29UDgfPBM1LBG','4PQG77IpiezPBguGDg9V','lMnMzW','C2XPy2u'];_0x4789=function(){return _0x51e44f;};return _0x4789();}import{textToSpeech}from'../services/voice.js';import{buildSystemPrompt}from'../services/personality.js';const TEMP_DIR=_0x22cf8f['join'](_0x59b3f6[_0x42d26e(0x1c5)](),_0x42d26e(0x1b5));if(!_0x29a88[_0x42d26e(0x1d1)](TEMP_DIR))_0x29a88[_0x58b660(0x217)](TEMP_DIR,{'recursive':!![]});async function react(_0x170410,_0x2a1bb9){const _0x4191e0=_0x58b660;try{await _0x170410[_0x4191e0(0x239)](_0x2a1bb9);}catch{}}async function downloadFile(_0x335471,_0x3d0237){return new Promise((_0x4b849b,_0x1bfda5)=>{const _0x17ed9d=_0x3aa4,_0x222924=_0x29a88['createWrit'+'eStream'](_0x3d0237);_0x52a26a[_0x17ed9d(0x1ec)](_0x335471,_0x342bce=>{const _0x41696b=_0x17ed9d,_0x442d21=_0x17ed9d;_0x342bce[_0x41696b(0x1f7)](_0x222924),_0x222924['on']('finish',()=>_0x222924[_0x41696b(0x21f)](()=>_0x4b849b()));})['on']('error',_0x59fe9d=>{const _0x23d12d=_0x17ed9d;_0x29a88[_0x23d12d(0x1f8)](_0x3d0237,()=>{}),_0x1bfda5(_0x59fe9d);});});}function _0x3aa4(_0x23a92c,_0x1f7f2d){_0x23a92c=_0x23a92c-(-0xf96*-0x2+0x6b*0x54+0x1*-0x40a5);const _0x42c58f=_0x4789();let _0x42586d=_0x42c58f[_0x23a92c];if(_0x3aa4['fCmcDf']===undefined){var _0x4643e3=function(_0x45e3eb){const _0x4dce22='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x237d1a='',_0x1149c8='',_0x3e92d6=_0x237d1a+_0x4643e3;for(let _0x4f6cb5=0x1*-0x568+-0x1195+0x16fd,_0xf30cef,_0x53f7fb,_0x8f20eb=-0x119*0x5+0xc0c+-0x17*0x49;_0x53f7fb=_0x45e3eb['charAt'](_0x8f20eb++);~_0x53f7fb&&(_0xf30cef=_0x4f6cb5%(0xfa6*-0x1+0x2187+0x10d*-0x11)?_0xf30cef*(0x1*0xd4d+-0xa4a+-0x2c3)+_0x53f7fb:_0x53f7fb,_0x4f6cb5++%(0x44*0x7c+-0x218c+0xa0))?_0x237d1a+=_0x3e92d6['charCodeAt'](_0x8f20eb+(-0xd*0xc7+0x1b87+-0x1162))-(0x10*0x1+0x9d*0x2b+-0x1a65)!==-0x2066+0x20be+-0xb*0x8?String['fromCharCode'](0x9a0+-0x1878+0x5*0x32b&_0xf30cef>>(-(-0x1662+-0x1*0x6fd+0x1d61)*_0x4f6cb5&0x2c8*-0xe+-0xa8d+-0x41*-0xc3)):_0x4f6cb5:0x21ff+0x7d4+0x2b*-0xf9){_0x53f7fb=_0x4dce22['indexOf'](_0x53f7fb);}for(let _0x5377c3=0x16cd+0x1024*-0x1+-0x155*0x5,_0x41b547=_0x237d1a['length'];_0x5377c3<_0x41b547;_0x5377c3++){_0x1149c8+='%'+('00'+_0x237d1a['charCodeAt'](_0x5377c3)['toString'](0x1f4f+-0x7*-0x566+-0x4509))['slice'](-(-0x2*-0xc3d+-0x1197+-0x1*0x6e1));}return decodeURIComponent(_0x1149c8);};_0x3aa4['mNzchM']=_0x4643e3,_0x3aa4['XiJkro']={},_0x3aa4['fCmcDf']=!![];}const _0x2a6054=_0x42c58f[-0x2421+-0x17ab+0x2b*0x164],_0x5e2ffc=_0x23a92c+_0x2a6054,_0xa3c10=_0x3aa4['XiJkro'][_0x5e2ffc];if(!_0xa3c10){const _0x147acb=function(_0x5bf3ff){this['zZpuMu']=_0x5bf3ff,this['mwTVWM']=[0xc02+0x2256+-0x2e57,0xc2+0x119a+-0x125c,0x81c+-0x22db*0x1+0x1abf],this['kHvGvT']=function(){return'newState';},this['QUBntw']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['gkOVZg']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x147acb['prototype']['PFjcyM']=function(){const _0x3d6742=new RegExp(this['QUBntw']+this['gkOVZg']),_0x1decf3=_0x3d6742['test'](this['kHvGvT']['toString']())?--this['mwTVWM'][-0x2429*-0x1+-0x4*-0x44b+-0x3554]:--this['mwTVWM'][-0x1*0xb9c+0x1e*-0x7d+0x1a42];return this['iOLumx'](_0x1decf3);},_0x147acb['prototype']['iOLumx']=function(_0x13dc58){if(!Boolean(~_0x13dc58))return _0x13dc58;return this['TjhkBn'](this['zZpuMu']);},_0x147acb['prototype']['TjhkBn']=function(_0x2a1f09){for(let _0x458e28=0xfd2+-0x79*-0x3+-0x113d,_0x55386a=this['mwTVWM']['length'];_0x458e28<_0x55386a;_0x458e28++){this['mwTVWM']['push'](Math['round'](Math['random']())),_0x55386a=this['mwTVWM']['length'];}return _0x2a1f09(this['mwTVWM'][0x3*0x2b9+-0x2314+0x1ae9]);},new _0x147acb(_0x3aa4)['PFjcyM'](),_0x42586d=_0x3aa4['mNzchM'](_0x42586d),_0x3aa4['XiJkro'][_0x5e2ffc]=_0x42586d;}else _0x42586d=_0xa3c10;return _0x42586d;}const SUPPORTED_EXTENSIONS=new Set([_0x58b660(0x22b),_0x42d26e(0x1fd),_0x42d26e(0x1db),'.csv',_0x58b660(0x1f6),_0x42d26e(0x206),_0x42d26e(0x246),'.htm',_0x58b660(0x1b1),_0x58b660(0x1d9),_0x58b660(0x1f1),'.xlsx','.pptx',_0x42d26e(0x1ab),_0x58b660(0x235),'.ts',_0x58b660(0x1d8),_0x58b660(0x1aa),_0x42d26e(0x1c9),'.c',_0x42d26e(0x200),'.h',_0x58b660(0x225),_0x58b660(0x1c4),'.rb','.php','.sh',_0x58b660(0x1e5),_0x58b660(0x223),_0x58b660(0x1b4),_0x42d26e(0x242),_0x42d26e(0x1fb),_0x58b660(0x1fe),'.conf','.cfg',_0x58b660(0x218),_0x42d26e(0x215),'.env',_0x58b660(0x1ae),'.dockerfil'+'e']);function isSupportedFile(_0x45ad04){const _0x166c52=_0x42d26e,_0xff2450=_0x42d26e,_0x86d455=_0x22cf8f[_0x166c52(0x1dc)](_0x45ad04)['toLowerCas'+'e']();return SUPPORTED_EXTENSIONS[_0xff2450(0x1e6)](_0x86d455);}export async function handleDocument(_0x55e68d){const _0x77f8d1=_0x58b660,_0x12ed15=_0x42d26e,_0x5dcf81=_0x55e68d[_0x77f8d1(0x1f2)]?.[_0x12ed15(0x207)];if(!_0x5dcf81)return;const _0xd9e4f4=_0x55e68d['from']['id'],_0x4ba3c0=getSession(_0xd9e4f4);if(_0x4ba3c0[_0x12ed15(0x219)+'ng']){await _0x55e68d[_0x77f8d1(0x230)](_0x77f8d1(0x1df)+_0x12ed15(0x1c8)+_0x12ed15(0x232)+_0x12ed15(0x220)+'ing...\x20(/c'+_0x12ed15(0x1f0)+_0x77f8d1(0x1de));return;}const _0x22636c=_0x5dcf81[_0x12ed15(0x1d7)]||_0x12ed15(0x1fa),_0x2114eb=_0x22cf8f['extname'](_0x22636c)[_0x12ed15(0x231)+'e']();if(_0x5dcf81[_0x77f8d1(0x1bd)]&&_0x5dcf81[_0x77f8d1(0x1bd)]>(0xf1*-0x11+-0x57d+0x1592)*(0x1774+0x1*-0xa67+-0x1*0x90d)*(-0x29*-0xc2+0x1*0x1b46+-0x3658)){await _0x55e68d[_0x77f8d1(0x230)](_0x12ed15(0x1ba)+_0x77f8d1(0x1dd)+_0x77f8d1(0x1d4));return;}_0x4ba3c0[_0x12ed15(0x219)+'ng']=!![],_0x4ba3c0['abortContr'+_0x77f8d1(0x204)]=new AbortController();const _0x4d901a=new TelegramStreamer(_0x55e68d[_0x77f8d1(0x1be)]['id'],_0x55e68d[_0x77f8d1(0x1a8)],_0x55e68d[_0x77f8d1(0x1f2)]?.[_0x12ed15(0x1eb)]);let _0x1a381e='';const _0x48ec1f=setInterval(()=>{const _0x2d5da2=_0x77f8d1,_0x1ca156=_0x77f8d1;_0x55e68d[_0x2d5da2(0x1a8)][_0x1ca156(0x20d)+_0x1ca156(0x1c6)](_0x55e68d[_0x2d5da2(0x1be)]['id'],_0x2d5da2(0x245))['catch'](()=>{});},-0x1208+0x44*0x7c+0xb8);try{await react(_0x55e68d,'📄'),await _0x55e68d[_0x77f8d1(0x1a8)]['sendChatAc'+'tion'](_0x55e68d[_0x12ed15(0x1be)]['id'],_0x77f8d1(0x245));const _0x24b088=await _0x55e68d[_0x77f8d1(0x1a8)][_0x12ed15(0x1ce)](_0x5dcf81[_0x77f8d1(0x1ea)]),_0xd8e10f=_0x12ed15(0x1a9)+_0x77f8d1(0x1ef)+_0x12ed15(0x1e0)+_0x12ed15(0x1cb)+config['botToken']+'/'+_0x24b088[_0x12ed15(0x21c)],_0x3a69e7=_0x22cf8f[_0x12ed15(0x23e)](_0x22636c),_0x2ed7e0=_0x22cf8f[_0x12ed15(0x1b8)](TEMP_DIR,_0x12ed15(0x1bf)+Date[_0x12ed15(0x1e3)]()+'_'+_0x3a69e7);if(!_0x22cf8f[_0x12ed15(0x21e)](_0x2ed7e0)[_0x12ed15(0x1c7)](_0x22cf8f[_0x12ed15(0x21e)](TEMP_DIR)))throw new Error(_0x77f8d1(0x1e2)+_0x77f8d1(0x1b9)+_0x12ed15(0x1a7)+'n');await downloadFile(_0xd8e10f,_0x2ed7e0);const _0x39825f=_0x55e68d[_0x77f8d1(0x1f2)]?.[_0x77f8d1(0x1cd)]||'',_0x12cd86=_0x39825f||_0x77f8d1(0x236)+_0x12ed15(0x20b)+'ei:\x20'+_0x22636c;_0x4ba3c0[_0x12ed15(0x20a)+'nt']++;const _0x2ee994=getRegistry(),_0x21256d=_0x2ee994[_0x77f8d1(0x1d2)](),_0x3de5b9=_0x21256d[_0x77f8d1(0x1f5)]['type']===_0x12ed15(0x1c0);let _0x3c5431;if(_0x3de5b9)_0x3c5431={'prompt':_0x12ed15(0x1b2)+_0x77f8d1(0x238)+_0x12ed15(0x226)+'et:\x20'+_0x2ed7e0+(_0x12ed15(0x1f4)+':\x20')+_0x22636c+(_0x12ed15(0x1c3)+_0x77f8d1(0x201)+'\x20dem\x20Read-'+_0x77f8d1(0x214)+_0x77f8d1(0x202)+_0x77f8d1(0x209)+_0x12ed15(0x23d))+_0x12cd86,'systemPrompt':buildSystemPrompt(!![],_0x4ba3c0[_0x77f8d1(0x244)]),'workingDir':_0x4ba3c0[_0x77f8d1(0x21b)],'effort':_0x4ba3c0[_0x77f8d1(0x22e)],'abortSignal':_0x4ba3c0['abortContr'+_0x12ed15(0x204)][_0x77f8d1(0x243)],'sessionId':_0x4ba3c0[_0x77f8d1(0x1b7)],'_sessionState':{'messageCount':_0x4ba3c0['messageCou'+'nt'],'toolUseCount':_0x4ba3c0[_0x12ed15(0x20f)+'nt']}};else{let _0x3e57c8='';[_0x77f8d1(0x1fd),_0x77f8d1(0x1db),_0x12ed15(0x1d3),_0x77f8d1(0x1f6),_0x12ed15(0x206),'.html','.htm','.py',_0x12ed15(0x235),_0x12ed15(0x1e1),'.jsx',_0x77f8d1(0x1aa),_0x12ed15(0x1c9),'.c',_0x12ed15(0x200),'.h',_0x77f8d1(0x225),_0x12ed15(0x1c4),'.rb',_0x12ed15(0x1a4),'.sh','.bash',_0x77f8d1(0x223),_0x77f8d1(0x1b4),_0x77f8d1(0x242),_0x77f8d1(0x1fb),_0x77f8d1(0x1fe),_0x12ed15(0x211),_0x77f8d1(0x1bb),_0x12ed15(0x218),_0x12ed15(0x215),_0x12ed15(0x210),'.gitignore',_0x77f8d1(0x22f)+'e'][_0x77f8d1(0x23f)](_0x2114eb)?(_0x3e57c8=_0x29a88[_0x12ed15(0x1ad)+'nc'](_0x2ed7e0,_0x77f8d1(0x234)),_0x3e57c8['length']>0x3eb*-0x53+-0x650b+0x26d8c&&(_0x3e57c8=_0x3e57c8[_0x12ed15(0x1bc)](0x89*-0x25+0x2*0x8+-0x1f*-0xa3,-0x143f4+0x14768+-0x1ffa*-0x6)+(_0x77f8d1(0x21a)+_0x77f8d1(0x205)+_0x77f8d1(0x240))+_0x3e57c8[_0x77f8d1(0x221)]+(_0x12ed15(0x1cc)+'s]'))):_0x3e57c8=_0x12ed15(0x1e4)+_0x12ed15(0x1e8)+_0x22636c+',\x20'+(_0x5dcf81[_0x77f8d1(0x1bd)]?Math[_0x77f8d1(0x1b6)](_0x5dcf81[_0x77f8d1(0x1bd)]/(0x9a0+-0x1878+0xc*0x192))+'\x20KB':_0x77f8d1(0x1f3)+'ze')+(_0x77f8d1(0x1c2)+_0x77f8d1(0x22c)+_0x77f8d1(0x203)+'e\x20SDK\x20prov'+_0x12ed15(0x1b3)+_0x12ed15(0x1ca));const _0x5998e7='Datei:\x20'+_0x22636c+_0x77f8d1(0x20e)+_0x3e57c8+_0x77f8d1(0x216)+_0x12cd86;addToHistory(_0xd9e4f4,{'role':_0x12ed15(0x22d),'content':_0x5998e7}),_0x3c5431={'prompt':_0x5998e7,'systemPrompt':buildSystemPrompt(![],_0x4ba3c0[_0x77f8d1(0x244)]),'workingDir':_0x4ba3c0[_0x12ed15(0x21b)],'effort':_0x4ba3c0[_0x77f8d1(0x22e)],'abortSignal':_0x4ba3c0[_0x77f8d1(0x1ed)+_0x77f8d1(0x204)][_0x77f8d1(0x243)],'history':_0x4ba3c0[_0x77f8d1(0x1a6)]};}for await(const _0x12d222 of _0x2ee994['queryWithF'+_0x12ed15(0x228)](_0x3c5431)){switch(_0x12d222[_0x12ed15(0x22a)]){case _0x12ed15(0x1e7):_0x1a381e=_0x12d222[_0x12ed15(0x1e7)]||'',await _0x4d901a[_0x12ed15(0x23b)](_0x1a381e);break;case _0x77f8d1(0x1f9):if(_0x12d222[_0x12ed15(0x1ff)])_0x4ba3c0[_0x12ed15(0x20f)+'nt']++;break;case _0x77f8d1(0x1b0):if(_0x12d222['sessionId'])_0x4ba3c0[_0x12ed15(0x1b7)]=_0x12d222[_0x12ed15(0x1b7)];if(_0x12d222[_0x77f8d1(0x1c1)])_0x4ba3c0[_0x77f8d1(0x247)]+=_0x12d222[_0x12ed15(0x1c1)];_0x4ba3c0[_0x77f8d1(0x21d)+'ty']=Date[_0x12ed15(0x1e3)]();break;case _0x12ed15(0x20c):await _0x55e68d[_0x12ed15(0x230)](_0x77f8d1(0x229)+_0x12d222[_0x77f8d1(0x20c)]);break;}}await _0x4d901a['finalize'](_0x1a381e),await react(_0x55e68d,'👍');!_0x3de5b9&&_0x1a381e&&addToHistory(_0xd9e4f4,{'role':_0x12ed15(0x1a5),'content':_0x1a381e});if(_0x4ba3c0[_0x12ed15(0x213)]&&_0x1a381e[_0x12ed15(0x1ac)]())try{await _0x55e68d[_0x77f8d1(0x1a8)][_0x77f8d1(0x20d)+_0x12ed15(0x1c6)](_0x55e68d[_0x77f8d1(0x1be)]['id'],'upload_voi'+'ce');const _0x187738=await textToSpeech(_0x1a381e);await _0x55e68d[_0x77f8d1(0x241)+'oice'](new InputFile(_0x29a88[_0x77f8d1(0x1ad)+'nc'](_0x187738),_0x77f8d1(0x233)+'p3')),_0x29a88[_0x77f8d1(0x1f8)](_0x187738,()=>{});}catch(_0xacf4db){console[_0x77f8d1(0x20c)](_0x77f8d1(0x1af),_0xacf4db);}setTimeout(()=>_0x29a88['unlink'](_0x2ed7e0,()=>{}),-0x10c93+-0x1*0x53dd+0x24ad0);}catch(_0x309d42){const _0x452c40=_0x309d42 instanceof Error?_0x309d42['message']:String(_0x309d42);await react(_0x55e68d,'👎'),_0x452c40[_0x77f8d1(0x23f)]('abort')?await _0x55e68d[_0x77f8d1(0x230)](_0x77f8d1(0x1e9)+_0x77f8d1(0x224)):await _0x55e68d['reply'](_0x77f8d1(0x229)+_0x452c40);}finally{clearInterval(_0x48ec1f),_0x4ba3c0[_0x12ed15(0x219)+'ng']=![],_0x4ba3c0[_0x77f8d1(0x1ed)+_0x77f8d1(0x204)]=null;}}
|