alvin-bot 5.7.0 → 5.8.1
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 +25 -0
- package/README.md +25 -31
- 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 -174
- 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 -583
- 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 -86
- 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 -1902
- package/dist/web/setup-api.js +1 -1101
- package/package.json +5 -2
- package/dist/.metadata_never_index +0 -0
|
@@ -1,228 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-Diagnostic Logs-Collector (Self-Preservation Phase 1, feature 2F).
|
|
3
|
-
*
|
|
4
|
-
* On critical failure, write a structured Markdown "forensic bundle" to
|
|
5
|
-
* ~/.alvin-bot/diagnostics/<timestamp>-<category>.md containing:
|
|
6
|
-
*
|
|
7
|
-
* - Bot version + boot info
|
|
8
|
-
* - Last 200 lines of out.log + err.log
|
|
9
|
-
* - Current process state (PID, RSS, uptime, node version, platform)
|
|
10
|
-
* - Non-secret environment vars (PATH, PRIMARY_PROVIDER, …)
|
|
11
|
-
* - Watchdog state (~/.alvin-bot/state/watchdog.json)
|
|
12
|
-
* - System tool inventory (which node/codex/claude/pm2/yt-dlp/…)
|
|
13
|
-
* - Disk space snapshot
|
|
14
|
-
* - The triggering event itself + suggestion
|
|
15
|
-
*
|
|
16
|
-
* The bundle is the input that the 5.0.0 AI-Diagnostic feature (3I) will
|
|
17
|
-
* later feed to a sub-agent for automated analysis. As of 4.26.0 it's a
|
|
18
|
-
* "human-readable forensic dump" — useful on its own, no AI required.
|
|
19
|
-
*
|
|
20
|
-
* Auto-prune: max 50 retained bundles, oldest deleted on next write.
|
|
21
|
-
*
|
|
22
|
-
* Performance: <100KB per bundle, ~50-200ms wall-clock per write,
|
|
23
|
-
* synchronous (we're typically called right before process.exit so
|
|
24
|
-
* blocking is the right semantic). Files are atomic — full bundle or
|
|
25
|
-
* nothing.
|
|
26
|
-
*
|
|
27
|
-
* Opt-out:
|
|
28
|
-
* ALVIN_DISABLE_AUTO_DIAGNOSTIC=true → skip bundle writes
|
|
29
|
-
* ALVIN_DISABLE_SELF_PRESERVATION=true → skip ALL Phase-1
|
|
30
|
-
*/
|
|
31
|
-
import { writeFileSync, readFileSync, mkdirSync, existsSync, readdirSync, statSync, unlinkSync, } from "fs";
|
|
32
|
-
import { join } from "path";
|
|
33
|
-
import { homedir } from "os";
|
|
34
|
-
import { execSync } from "child_process";
|
|
35
|
-
import { BOT_VERSION } from "../version.js";
|
|
36
|
-
const MAX_BUNDLES = 50;
|
|
37
|
-
function isDisabled() {
|
|
38
|
-
return (process.env.ALVIN_DISABLE_AUTO_DIAGNOSTIC === "true" ||
|
|
39
|
-
process.env.ALVIN_DISABLE_SELF_PRESERVATION === "true");
|
|
40
|
-
}
|
|
41
|
-
function safeReadTail(filename, n) {
|
|
42
|
-
try {
|
|
43
|
-
const path = join(homedir(), ".alvin-bot", "logs", filename);
|
|
44
|
-
if (!existsSync(path))
|
|
45
|
-
return "(log file not present)";
|
|
46
|
-
const content = readFileSync(path, "utf-8");
|
|
47
|
-
const lines = content.split("\n");
|
|
48
|
-
return lines.slice(Math.max(0, lines.length - n)).join("\n");
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
return `(read failed: ${err instanceof Error ? err.message : String(err)})`;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
function safeShell(cmd, timeoutMs = 5000) {
|
|
55
|
-
try {
|
|
56
|
-
return execSync(cmd, { encoding: "utf-8", timeout: timeoutMs, stdio: ["ignore", "pipe", "pipe"] }).trim();
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
const e = err;
|
|
60
|
-
const out = e.stdout?.toString().trim() ?? "";
|
|
61
|
-
const stderr = e.stderr?.toString().trim() ?? "";
|
|
62
|
-
if (out)
|
|
63
|
-
return out + (stderr ? `\n[stderr]: ${stderr}` : "");
|
|
64
|
-
return `(command failed: ${e.message || "unknown"})`;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
function safeReadFile(path) {
|
|
68
|
-
try {
|
|
69
|
-
return readFileSync(path, "utf-8").trim();
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
return `(could not read ${path}: ${err instanceof Error ? err.message : String(err)})`;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Prune diagnostic bundles older than MAX_BUNDLES (50). Oldest deleted
|
|
77
|
-
* first by mtime. Best-effort: silent on errors.
|
|
78
|
-
*/
|
|
79
|
-
export function pruneDiagnostics(maxKeep = MAX_BUNDLES) {
|
|
80
|
-
try {
|
|
81
|
-
const dir = join(homedir(), ".alvin-bot", "diagnostics");
|
|
82
|
-
if (!existsSync(dir))
|
|
83
|
-
return;
|
|
84
|
-
const files = readdirSync(dir)
|
|
85
|
-
.filter((f) => f.endsWith(".md"))
|
|
86
|
-
.map((f) => {
|
|
87
|
-
try {
|
|
88
|
-
return { name: f, mtime: statSync(join(dir, f)).mtimeMs };
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
return { name: f, mtime: 0 };
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
|
-
.sort((a, b) => b.mtime - a.mtime);
|
|
95
|
-
for (const f of files.slice(maxKeep)) {
|
|
96
|
-
try {
|
|
97
|
-
unlinkSync(join(dir, f.name));
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
/* best-effort */
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
/* never fail the caller */
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Write a diagnostic bundle for the given event. Returns the absolute
|
|
110
|
-
* path to the written file, or null if disabled / failed.
|
|
111
|
-
*
|
|
112
|
-
* Safe to call from any context — never throws. Side-effects:
|
|
113
|
-
* - Creates ~/.alvin-bot/diagnostics/ if absent
|
|
114
|
-
* - Writes a single ~50-100KB markdown file
|
|
115
|
-
* - Prunes to MAX_BUNDLES retained
|
|
116
|
-
*/
|
|
117
|
-
export function writeDiagnosticBundle(event) {
|
|
118
|
-
if (isDisabled())
|
|
119
|
-
return null;
|
|
120
|
-
try {
|
|
121
|
-
const dir = join(homedir(), ".alvin-bot", "diagnostics");
|
|
122
|
-
mkdirSync(dir, { recursive: true });
|
|
123
|
-
const ts = (event.ts || new Date()).toISOString().replace(/[:.]/g, "-");
|
|
124
|
-
const filename = `${ts}-${event.category}.md`;
|
|
125
|
-
const filepath = join(dir, filename);
|
|
126
|
-
const mem = process.memoryUsage();
|
|
127
|
-
const rssMB = Math.round(mem.rss / 1024 / 1024);
|
|
128
|
-
const heapMB = Math.round(mem.heapUsed / 1024 / 1024);
|
|
129
|
-
const sections = [
|
|
130
|
-
`# Alvin Bot — Diagnostic Bundle`,
|
|
131
|
-
``,
|
|
132
|
-
`**Generated:** ${new Date().toISOString()}`,
|
|
133
|
-
`**Bot version:** ${BOT_VERSION}`,
|
|
134
|
-
`**Trigger category:** ${event.category}`,
|
|
135
|
-
`**Severity:** ${event.severity}`,
|
|
136
|
-
`**Title:** ${event.title}`,
|
|
137
|
-
``,
|
|
138
|
-
`## 1. Event Detail`,
|
|
139
|
-
``,
|
|
140
|
-
"```",
|
|
141
|
-
event.detail,
|
|
142
|
-
"```",
|
|
143
|
-
``,
|
|
144
|
-
...(event.suggestedAction
|
|
145
|
-
? [`### Suggested action`, ``, "```", event.suggestedAction, "```", ``]
|
|
146
|
-
: []),
|
|
147
|
-
`## 2. Process State`,
|
|
148
|
-
``,
|
|
149
|
-
`- PID: ${process.pid}`,
|
|
150
|
-
`- RSS memory: ${rssMB} MB`,
|
|
151
|
-
`- Heap used: ${heapMB} MB`,
|
|
152
|
-
`- Uptime: ${Math.round(process.uptime())} s`,
|
|
153
|
-
`- Node.js: ${process.version}`,
|
|
154
|
-
`- Platform: ${process.platform} (${process.arch})`,
|
|
155
|
-
`- argv: ${process.argv.join(" ")}`,
|
|
156
|
-
``,
|
|
157
|
-
`## 3. Environment (non-secret only)`,
|
|
158
|
-
``,
|
|
159
|
-
...[
|
|
160
|
-
"NODE_ENV",
|
|
161
|
-
"HOME",
|
|
162
|
-
"PATH",
|
|
163
|
-
"PRIMARY_PROVIDER",
|
|
164
|
-
"FALLBACK_PROVIDERS",
|
|
165
|
-
"AUTH_MODE",
|
|
166
|
-
"SESSION_MODE",
|
|
167
|
-
"WEB_HOST",
|
|
168
|
-
"WEB_PORT",
|
|
169
|
-
"WORKING_DIR",
|
|
170
|
-
"MAX_BUDGET_USD",
|
|
171
|
-
"ALVIN_DATA_DIR",
|
|
172
|
-
"ALVIN_DEADMAN_THRESHOLD_SEC",
|
|
173
|
-
"ALVIN_DISABLE_SELF_PRESERVATION",
|
|
174
|
-
].map((key) => `- ${key}: ${process.env[key] ?? "(unset)"}`),
|
|
175
|
-
``,
|
|
176
|
-
`## 4. Recent stderr (last 200 lines)`,
|
|
177
|
-
``,
|
|
178
|
-
"```",
|
|
179
|
-
safeReadTail("alvin-bot.err.log", 200),
|
|
180
|
-
"```",
|
|
181
|
-
``,
|
|
182
|
-
`## 5. Recent stdout (last 200 lines)`,
|
|
183
|
-
``,
|
|
184
|
-
"```",
|
|
185
|
-
safeReadTail("alvin-bot.out.log", 200),
|
|
186
|
-
"```",
|
|
187
|
-
``,
|
|
188
|
-
`## 6. Watchdog state`,
|
|
189
|
-
``,
|
|
190
|
-
"```json",
|
|
191
|
-
safeReadFile(join(homedir(), ".alvin-bot", "state", "watchdog.json")),
|
|
192
|
-
"```",
|
|
193
|
-
``,
|
|
194
|
-
`## 7. System tool inventory`,
|
|
195
|
-
``,
|
|
196
|
-
"```",
|
|
197
|
-
safeShell("for t in node npm brew pm2 codex claude yt-dlp ffmpeg wacli agent-browser; do printf '%-15s %s\\n' \"$t\" \"$(command -v $t 2>/dev/null || echo NOT_FOUND)\"; done"),
|
|
198
|
-
"```",
|
|
199
|
-
``,
|
|
200
|
-
`## 8. Disk space (.alvin-bot data dir)`,
|
|
201
|
-
``,
|
|
202
|
-
"```",
|
|
203
|
-
safeShell(`df -h "${join(homedir(), ".alvin-bot")}" 2>&1 | head -2`),
|
|
204
|
-
"```",
|
|
205
|
-
``,
|
|
206
|
-
`## 9. PM2 status (if installed)`,
|
|
207
|
-
``,
|
|
208
|
-
"```",
|
|
209
|
-
safeShell("command -v pm2 >/dev/null && pm2 jlist 2>/dev/null | head -50 || echo 'pm2 not installed'", 3000),
|
|
210
|
-
"```",
|
|
211
|
-
``,
|
|
212
|
-
`---`,
|
|
213
|
-
``,
|
|
214
|
-
`*This bundle was generated automatically by the Alvin Bot auto-diagnostic system.*`,
|
|
215
|
-
`*Set \`ALVIN_DISABLE_AUTO_DIAGNOSTIC=true\` in ~/.alvin-bot/.env to opt out.*`,
|
|
216
|
-
``,
|
|
217
|
-
];
|
|
218
|
-
writeFileSync(filepath, sections.join("\n"), { mode: 0o600 });
|
|
219
|
-
pruneDiagnostics();
|
|
220
|
-
return filepath;
|
|
221
|
-
}
|
|
222
|
-
catch (err) {
|
|
223
|
-
// Diagnostic writer must not be a new failure mode. Log to stderr
|
|
224
|
-
// (which the critical-notify file flag will reference) and bail.
|
|
225
|
-
console.error(`[auto-diagnostic] failed to write bundle: ${err instanceof Error ? err.message : String(err)}`);
|
|
226
|
-
return null;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
1
|
+
(function(_0x2d4aeb,_0x99771a){const _0x8a4feb=_0x1173,_0x59bade=_0x1173,_0x4e3f19=_0x2d4aeb();while(!![]){try{const _0x3dc6b3=-parseInt(_0x8a4feb(0x1c1))/(-0x1a92+0x19ba+0xd9)+-parseInt(_0x59bade(0x180))/(0x1750+-0x1b40+0x3f2)*(parseInt(_0x59bade(0x142))/(0x2304+-0x1481*0x1+-0xe80))+parseInt(_0x8a4feb(0x195))/(0x2*0xa49+-0x1*-0x1fa9+-0x1*0x3437)*(parseInt(_0x59bade(0x1ab))/(-0x240d+0x11*-0x5+0x2467*0x1))+-parseInt(_0x8a4feb(0x16f))/(0x3e1*0x1+0x61e+-0x17*0x6f)+parseInt(_0x8a4feb(0x146))/(0x1313+-0x140c+-0x8*-0x20)*(parseInt(_0x8a4feb(0x1a7))/(-0x10f*0x8+0x1ca*-0x10+0x24*0x108))+parseInt(_0x59bade(0x1c8))/(-0x7*-0x1df+0xc7*-0x2b+0x145d)+parseInt(_0x8a4feb(0x1d3))/(-0x50d*-0x2+0xa5c+0x4*-0x51b)*(parseInt(_0x59bade(0x17b))/(-0x7e8*0x4+-0x1*0x1931+0x38dc));if(_0x3dc6b3===_0x99771a)break;else _0x4e3f19['push'](_0x4e3f19['shift']());}catch(_0x2cc38b){_0x4e3f19['push'](_0x4e3f19['shift']());}}}(_0x49a4,0x1*-0x3f15f+-0x824f4+0x11cd53));const _0x55a343=(function(){let _0x38e3c7=!![];return function(_0x42359d,_0x5accea){const _0x52f18a=_0x38e3c7?function(){const _0x2a2f8c=_0x1173;if(_0x5accea){const _0x6716c1=_0x5accea[_0x2a2f8c(0x166)](_0x42359d,arguments);return _0x5accea=null,_0x6716c1;}}:function(){};return _0x38e3c7=![],_0x52f18a;};}()),_0x9f6826=_0x55a343(this,function(){const _0x1abe18=_0x1173,_0x53fff2=_0x1173;return _0x9f6826['toString']()[_0x1abe18(0x1d5)](_0x53fff2(0x150)+'+$')[_0x53fff2(0x1e1)]()[_0x53fff2(0x1af)+'r'](_0x9f6826)[_0x1abe18(0x1d5)](_0x1abe18(0x150)+'+$');});_0x9f6826();import{writeFileSync,readFileSync,mkdirSync,existsSync,readdirSync,statSync,unlinkSync}from'fs';import{join}from'path';import{homedir}from'os';import{execSync}from'child_process';import{BOT_VERSION}from'../version.js';function _0x49a4(){const _0x164c13=['ExqTzgXWigzMBq','qvvusf9nt0rf','BgLUzxmP','DxrMltG','D2f0y2HKB2CUAG','B21HDgLJywXSEq','nZu3oty0mgnkCfvfrq','iYmGnc4GuMvJzq','C2vHCMnO','BM90ihbYzxnLBG','iYbbBhzPBIbcBW','C3rKB3v0','BgvUz3rO','Bg9NCW','AgrVzYbZDgf0zq','ygbG','ufjjtufswv9quG','DgLJihn5C3rLBq','quXwsu5Frefuqq','ihWGAgvHzcaTnq','Dg9tDhjPBMC','Dg9ju09tDhjPBG','zdOG','mJaXu2vyqNHP','zgyGlwGGiG','uefusa','C3rPyYbcDw5KBa','mtq5muzuwMPUvW','CgXHDgzVCM0','zw52','iJSGzg9Uzq','BtiGAMXPC3qGmG','iYmJifn1z2DLCW','AwXLzcb0BYb3CG','DMLUiejVDcbHDq','BxrPBwvnCW','uKvtrvjwqvrjtW','kcGOlISPkYKRkq','DhjPBq','pI9KzxyVBNvSBa','CgvNihDHy2XPia','quXwsu5Frevbra','y29TBwfUzcaTDG','BhzPBI1IB3qGza','AwDUB3jL','iYmGos4Gue0Yia','kIPcB3qGDMvYCW','iIaYpIyXihWGAa','iYmGmY4Grw52Aq','BMfTzq','B3v0lMXVzW','zxCGCg0YignVza','B2rLig5WBsbICG','CM91BMq','tL9esvnbqKXfxW','zgLHz25VC3rPyW','CMvWBgfJzq','iYmGns4GuMvJzq','DcbezxrHAwW','yxbWBhK','BNqGC3rKB3v0ia','kIPuCMLNz2vYia','AxrLigj1BMrSzq','j3bTmIbUB3qGAq','khvUC2v0kq','BguGD2fZigDLBG','C2XPy2u','tufox1riuKvtsa','ndm1ndKYqxPtDLP3','BwfW','C3rHDgu','kLnLDcbGquXwsq','lMfSDMLUlwjVDa','ywDLBNqTyNjVDW','BNqGC3rKzxjYia','ihnWywnLicGUyq','quXwsu5FreLtqq','sufhtK9tveLd','lsbHCMD2oIa','kIPuAxrSztOQkG','mtfUuMzkq1G','zM9YihqGAw4GBG','Dxb0Aw1L','lM1K','AgvHCfvZzwq','mte4mZzAA1HkC0K','ywLSzwq6ia','zgv0ywLS','y2f0zwDVCNK','tK9ux0zpvu5ekq','Dhj1zq','AM9PBG','ywX2Aw4TyM90lG','ie1c','rKfmtejbq0TFua','oIOQia','CgLK','kgnVDwXKig5VDa','DgL0Bgu','B24TC2vJCMv0ia','CNnZ','lsbsu1mGBwvTBW','CM9UBwvUDcaOBG','yxjNDG','kgnVBw1HBMqGzG','lsboB2rLlMPZoG','ntj1s1jxtKG','iYmGmI4GuhjVyW','kgXHC3qGmJaWia','BxrPBwu','DgvKigfJDgLVBG','v0vcx1bpuLq','kLrOAxmGyNvUza','Bwf4','zw5KC1DPDgG','B3v0lIO','kIPtzxzLCML0Eq','BM9ZDgLJxsbMyq','tK9erv9ftLy','C3vNz2vZDgvKqq','x0rjuG','kgXVzYbMAwXLia','w2f1Dg8TzgLHzW','lsbvChrPBwu6ia','mJeYmJrosg5Kq2i','igj5ihrOzsbbBa','zxjHDgvKigf1Da','u0vtu0LptL9ntW','mtm5mZvAB1vTu0K','zxGGy2XHDwrLia','yw5Kic12icr0ia','Aw9UoIOQia','y29UC3rYDwn0BW','BwvZC2fNzq','Dw5RBM93BG','C3rHDhvZicHPzG','Bcb8FcbLy2HVia','CgLWzq','t1zjrevs','zxjYB3i','qvvut19esufhtG','mcb8FcbLy2HVia','tufyx0jvreDfva','Aw50zIaNjs0Xnq','v09ss0Lor19esq','zdOQkIa','iYmGms4GrxzLBG','l251BgWGjIyGCa','C3bSAxq','DMLUlwjVDc8Uzq','nJm3nJuWteT6thzv','khjLywqGzMfPBa','zxjYlMXVzW','uK9wsurfuLm','B25SEsK','mJ4Vzgv2l251Ba','iYmGnY4Gu3LZDa','mta5nZGZohv2EMTWtG','ihbTmIa+l2rLDG','y3rPB24','qKXfx0fvve9Fra','Dg8TzgLHz25VCW'];_0x49a4=function(){return _0x164c13;};return _0x49a4();}const MAX_BUNDLES=-0x1*0x1e2+0x1a11+-0x17fd*0x1;function isDisabled(){const _0x16081b=_0x1173,_0x1f32f8=_0x1173;return process[_0x16081b(0x148)][_0x1f32f8(0x177)+_0x16081b(0x1cb)+_0x1f32f8(0x178)]===_0x16081b(0x185)||process[_0x16081b(0x148)][_0x16081b(0x177)+'BLE_SELF_P'+_0x16081b(0x14f)+'N']==='true';}function _0x1173(_0x1b17cc,_0x54c26e){_0x1b17cc=_0x1b17cc-(-0xb14+-0x1682+0xdf*0x28);const _0x16e1ac=_0x49a4();let _0x50fbc5=_0x16e1ac[_0x1b17cc];if(_0x1173['chhErG']===undefined){var _0x3f32cc=function(_0x2853cb){const _0x5f28d8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x291f49='',_0x38ed0a='',_0x52a99b=_0x291f49+_0x3f32cc;for(let _0x5e52b5=-0x18c6+-0x5*-0x59d+-0x34b,_0x112673,_0x18c2eb,_0x58a005=0xf4d*-0x2+-0x1e2+0x207c;_0x18c2eb=_0x2853cb['charAt'](_0x58a005++);~_0x18c2eb&&(_0x112673=_0x5e52b5%(0x1139*0x1+-0x26cc+-0x1*-0x1597)?_0x112673*(-0x16d*0x2+-0xb27+0x29*0x59)+_0x18c2eb:_0x18c2eb,_0x5e52b5++%(0xb91+-0x454*-0x2+-0x1435))?_0x291f49+=_0x52a99b['charCodeAt'](_0x58a005+(0x14f5+0x2*-0xbaa+0x269))-(0x17c3*-0x1+-0x60a+-0x1dd7*-0x1)!==0x1*-0x1c4f+0x2564+-0x915?String['fromCharCode'](0x7*-0x4d6+0xa48+0x1*0x1891&_0x112673>>(-(0x1adf+-0x665*0x4+0x149*-0x1)*_0x5e52b5&0x1626+-0xcdc+-0x251*0x4)):_0x5e52b5:0x182*0x5+0xf2d+-0x1*0x16b7){_0x18c2eb=_0x5f28d8['indexOf'](_0x18c2eb);}for(let _0x48e2f5=-0x29c*-0x3+0x4*-0x5e7+0xfc8,_0x3d59fa=_0x291f49['length'];_0x48e2f5<_0x3d59fa;_0x48e2f5++){_0x38ed0a+='%'+('00'+_0x291f49['charCodeAt'](_0x48e2f5)['toString'](-0x374*0x2+0x1c7b+-0x1583*0x1))['slice'](-(-0x230*-0xc+-0x37a*0x8+0x192));}return decodeURIComponent(_0x38ed0a);};_0x1173['ccypNY']=_0x3f32cc,_0x1173['zkUkMX']={},_0x1173['chhErG']=!![];}const _0x2fea01=_0x16e1ac[-0x26cc+-0xa17+0x30e3],_0x2ddaf8=_0x1b17cc+_0x2fea01,_0x52617d=_0x1173['zkUkMX'][_0x2ddaf8];if(!_0x52617d){const _0x193df9=function(_0x660dc2){this['DOrmuD']=_0x660dc2,this['XZAusw']=[0xf29+-0x1*0x15d0+0x6a8,-0x1*0x2141+0x1*-0x14ae+0x35ef,0x15*0x9f+-0x1d28+0x19*0xa5],this['pPXKyG']=function(){return'newState';},this['COFRpD']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['foArUB']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x193df9['prototype']['rAjDtY']=function(){const _0x34c1a5=new RegExp(this['COFRpD']+this['foArUB']),_0x1ea3ce=_0x34c1a5['test'](this['pPXKyG']['toString']())?--this['XZAusw'][0xd*-0x1bb+-0x1*-0xfb1+-0x3*-0x245]:--this['XZAusw'][0x1eb8+0x1*0x25cd+-0x4485];return this['IYYSFq'](_0x1ea3ce);},_0x193df9['prototype']['IYYSFq']=function(_0x24d6d2){if(!Boolean(~_0x24d6d2))return _0x24d6d2;return this['xJGdfe'](this['DOrmuD']);},_0x193df9['prototype']['xJGdfe']=function(_0x26b804){for(let _0x2efc80=0xca2+0x1*0x1b42+-0x27e4,_0x136966=this['XZAusw']['length'];_0x2efc80<_0x136966;_0x2efc80++){this['XZAusw']['push'](Math['round'](Math['random']())),_0x136966=this['XZAusw']['length'];}return _0x26b804(this['XZAusw'][0x67a*-0x4+0xe5*-0x9+0x21f5*0x1]);},new _0x193df9(_0x1173)['rAjDtY'](),_0x50fbc5=_0x1173['ccypNY'](_0x50fbc5),_0x1173['zkUkMX'][_0x2ddaf8]=_0x50fbc5;}else _0x50fbc5=_0x52617d;return _0x50fbc5;}function safeReadTail(_0x3878d5,_0x24cbad){const _0x27f0aa=_0x1173,_0x77c8bf=_0x1173;try{const _0x393dd6=join(homedir(),_0x27f0aa(0x173),_0x77c8bf(0x1da),_0x3878d5);if(!existsSync(_0x393dd6))return _0x77c8bf(0x1a4)+_0x77c8bf(0x1d6)+'t)';const _0x12dfea=readFileSync(_0x393dd6,_0x77c8bf(0x1d0)),_0x56787d=_0x12dfea[_0x27f0aa(0x1bf)]('\x0a');return _0x56787d[_0x27f0aa(0x16d)](Math[_0x77c8bf(0x19c)](0x1f4a+-0x9*-0x2b5+-0x37a7,_0x56787d[_0x77c8bf(0x1d9)]-_0x24cbad))[_0x77c8bf(0x186)]('\x0a');}catch(_0x8f72b2){return _0x27f0aa(0x1c2)+'ed:\x20'+(_0x8f72b2 instanceof Error?_0x8f72b2[_0x77c8bf(0x1b0)]:String(_0x8f72b2))+')';}}function safeShell(_0x3e4ee6,_0x40cf07=-0xb27+0x47+0x1c*0x116){const _0x5bb967=_0x1173,_0x479b4b=_0x1173;try{return execSync(_0x3e4ee6,{'encoding':_0x5bb967(0x1d0),'timeout':_0x40cf07,'stdio':[_0x479b4b(0x157),'pipe',_0x479b4b(0x1b4)]})[_0x479b4b(0x151)]();}catch(_0xe89e00){const _0x27423a=_0xe89e00,_0x5272db=_0x27423a[_0x5bb967(0x1d8)]?.[_0x5bb967(0x1e1)]()[_0x479b4b(0x151)]()??'',_0x3af939=_0x27423a['stderr']?.[_0x479b4b(0x1e1)]()[_0x5bb967(0x151)]()??'';if(_0x5272db)return _0x5272db+(_0x3af939?'\x0a[stderr]:'+'\x20'+_0x3af939:'');return _0x5bb967(0x193)+_0x5bb967(0x181)+(_0x27423a['message']||_0x479b4b(0x1b1))+')';}}function safeReadFile(_0x3d42c3){const _0x3178f3=_0x1173,_0x514c53=_0x1173;try{return readFileSync(_0x3d42c3,'utf-8')[_0x3178f3(0x151)]();}catch(_0x11fb1a){return _0x3178f3(0x18c)+'\x20read\x20'+_0x3d42c3+':\x20'+(_0x11fb1a instanceof Error?_0x11fb1a[_0x514c53(0x1b0)]:String(_0x11fb1a))+')';}}export function pruneDiagnostics(_0x3ec56e=MAX_BUNDLES){const _0x513265=_0x1173,_0x4d1b75=_0x1173;try{const _0xcab696=join(homedir(),_0x513265(0x173),_0x4d1b75(0x162)+'s');if(!existsSync(_0xcab696))return;const _0x4fba8e=readdirSync(_0xcab696)['filter'](_0xdbe21c=>_0xdbe21c[_0x513265(0x19d)](_0x4d1b75(0x17e)))['map'](_0x3a5f00=>{const _0x26c925=_0x513265;try{return{'name':_0x3a5f00,'mtime':statSync(join(_0xcab696,_0x3a5f00))[_0x26c925(0x14e)]};}catch{return{'name':_0x3a5f00,'mtime':0x0};}})['sort']((_0x827c05,_0x597c78)=>_0x597c78[_0x4d1b75(0x198)]-_0x827c05['mtime']);for(const _0xa94893 of _0x4fba8e[_0x4d1b75(0x16d)](_0x3ec56e)){try{unlinkSync(join(_0xcab696,_0xa94893[_0x4d1b75(0x15c)]));}catch{}}}catch{}}export function writeDiagnosticBundle(_0x1f4402){const _0x17ced1=_0x1173,_0x51b8a3=_0x1173;if(isDisabled())return null;try{const _0x56347=join(homedir(),_0x17ced1(0x173),_0x17ced1(0x162)+'s');mkdirSync(_0x56347,{'recursive':!![]});const _0x235feb=(_0x1f4402['ts']||new Date())[_0x51b8a3(0x1e2)+'g']()[_0x51b8a3(0x163)](/[:.]/g,'-'),_0xe98603=_0x235feb+'-'+_0x1f4402[_0x51b8a3(0x183)]+_0x51b8a3(0x17e),_0x1748f3=join(_0x56347,_0xe98603),_0x2abacd=process['memoryUsag'+'e'](),_0x423191=Math[_0x51b8a3(0x160)](_0x2abacd[_0x17ced1(0x18f)]/(0xb91+-0x454*-0x2+-0x1039)/(0x14f5+0x2*-0xbaa+0x65f)),_0x151149=Math[_0x51b8a3(0x160)](_0x2abacd[_0x51b8a3(0x17f)]/(0x17c3*-0x1+-0x60a+-0x1fd*-0x11)/(0x1*-0x1c4f+0x2564+-0x515)),_0x12730d=[_0x17ced1(0x1d7)+'t\x20—\x20Diagno'+_0x51b8a3(0x145)+'e','','**Generate'+_0x51b8a3(0x1bc)+new Date()[_0x17ced1(0x1e2)+'g'](),_0x51b8a3(0x159)+_0x17ced1(0x1ae)+BOT_VERSION,_0x51b8a3(0x168)+'category:*'+'*\x20'+_0x1f4402[_0x51b8a3(0x183)],_0x17ced1(0x19f)+_0x51b8a3(0x18a)+_0x1f4402['severity'],_0x17ced1(0x17a)+'\x20'+_0x1f4402[_0x51b8a3(0x18d)],'',_0x51b8a3(0x1bd)+_0x17ced1(0x165),'','```',_0x1f4402[_0x51b8a3(0x182)],_0x51b8a3(0x1dc),'',..._0x1f4402[_0x17ced1(0x1a2)+_0x17ced1(0x1ca)]?[_0x17ced1(0x14b)+_0x51b8a3(0x199),'',_0x17ced1(0x1dc),_0x1f4402[_0x17ced1(0x1a2)+_0x51b8a3(0x1ca)],_0x17ced1(0x1dc),'']:[],_0x51b8a3(0x196)+'ess\x20State','','-\x20PID:\x20'+process[_0x51b8a3(0x18b)],_0x51b8a3(0x190)+'ry:\x20'+_0x423191+_0x17ced1(0x188),'-\x20Heap\x20use'+_0x17ced1(0x1e3)+_0x151149+_0x17ced1(0x188),_0x51b8a3(0x1a6)+Math['round'](process[_0x17ced1(0x17d)]())+'\x20s',_0x17ced1(0x194)+'\x20'+process['version'],'-\x20Platform'+':\x20'+process[_0x17ced1(0x147)]+'\x20('+process['arch']+')',_0x17ced1(0x179)+process[_0x17ced1(0x192)][_0x51b8a3(0x186)]('\x20'),'',_0x17ced1(0x15b)+_0x51b8a3(0x191)+_0x51b8a3(0x18e)+_0x17ced1(0x1c5),'',...[_0x51b8a3(0x1a1),'HOME',_0x17ced1(0x144),_0x51b8a3(0x1dd)+_0x17ced1(0x1b5),_0x17ced1(0x189)+_0x17ced1(0x1c4),_0x51b8a3(0x1ce),_0x51b8a3(0x1aa)+'DE','WEB_HOST',_0x17ced1(0x19a),_0x51b8a3(0x1bb)+'R',_0x17ced1(0x1b9)+'_USD',_0x17ced1(0x1df)+_0x17ced1(0x1a3),_0x51b8a3(0x154)+_0x51b8a3(0x16e)+'OLD_SEC',_0x51b8a3(0x177)+'BLE_SELF_P'+_0x51b8a3(0x14f)+'N'][_0x17ced1(0x170)](_0x33a4de=>'-\x20'+_0x33a4de+':\x20'+(process[_0x17ced1(0x148)][_0x33a4de]??_0x51b8a3(0x16b))),'',_0x17ced1(0x1d4)+_0x51b8a3(0x175)+_0x51b8a3(0x197)+_0x17ced1(0x1cf),'',_0x51b8a3(0x1dc),safeReadTail(_0x17ced1(0x187)+_0x17ced1(0x1c3),0x7*-0x4d6+0xa48+0x1*0x185a),_0x17ced1(0x1dc),'',_0x17ced1(0x164)+_0x17ced1(0x167)+_0x51b8a3(0x197)+_0x51b8a3(0x1cf),'','```',safeReadTail('alvin-bot.'+_0x51b8a3(0x15d),0x1adf+-0x665*0x4+0x83*-0x1),_0x51b8a3(0x1dc),'','##\x206.\x20Watc'+_0x51b8a3(0x1db),'','```json',safeReadFile(join(homedir(),_0x17ced1(0x173),_0x17ced1(0x171),_0x51b8a3(0x1d1)+'son')),_0x17ced1(0x1dc),'',_0x17ced1(0x1c7)+'em\x20tool\x20in'+'ventory','','```',safeShell(_0x17ced1(0x17c)+_0x51b8a3(0x15f)+_0x51b8a3(0x15e)+_0x51b8a3(0x1ac)+_0x51b8a3(0x1cd)+_0x17ced1(0x153)+_0x51b8a3(0x174)+'ser;\x20do\x20pr'+_0x51b8a3(0x1ba)+'s\x20%s\x5cn\x27\x20\x22$'+'t\x22\x20\x22$(comm'+_0x51b8a3(0x1ad)+_0x17ced1(0x1c6)+_0x51b8a3(0x1b3)+_0x17ced1(0x184)+_0x51b8a3(0x149)),'```','','##\x208.\x20Disk'+_0x51b8a3(0x176)+_0x51b8a3(0x156)+'ata\x20dir)','','```',safeShell(_0x51b8a3(0x143)+join(homedir(),_0x17ced1(0x173))+(_0x17ced1(0x15a)+'ead\x20-2')),_0x17ced1(0x1dc),'',_0x17ced1(0x158)+_0x17ced1(0x1b2)+'\x20installed'+')','',_0x51b8a3(0x1dc),safeShell(_0x17ced1(0x155)+_0x51b8a3(0x1c9)+_0x17ced1(0x1be)+_0x51b8a3(0x14a)+_0x51b8a3(0x152)+_0x17ced1(0x1e0)+_0x51b8a3(0x1b8)+_0x51b8a3(0x16a)+'nstalled\x27',0x1626+-0xcdc+-0x137*-0x2),_0x17ced1(0x1dc),'','---','',_0x51b8a3(0x19b)+_0x51b8a3(0x16c)+_0x51b8a3(0x1a9)+_0x17ced1(0x1d2)+_0x51b8a3(0x1a8)+_0x51b8a3(0x14d)+_0x51b8a3(0x1cc)+_0x51b8a3(0x1de)+'.*',_0x17ced1(0x172)+_0x51b8a3(0x161)+_0x51b8a3(0x1b7)+'OSTIC=true'+'`\x20in\x20~/.al'+_0x51b8a3(0x1c0)+'nv\x20to\x20opt\x20'+_0x17ced1(0x19e),''];return writeFileSync(_0x1748f3,_0x12730d[_0x17ced1(0x186)]('\x0a'),{'mode':0x180}),pruneDiagnostics(),_0x1748f3;}catch(_0x2f3b26){return console[_0x51b8a3(0x1b6)](_0x51b8a3(0x1a5)+_0x17ced1(0x1a0)+_0x17ced1(0x14c)+_0x17ced1(0x169)+':\x20'+(_0x2f3b26 instanceof Error?_0x2f3b26[_0x51b8a3(0x1b0)]:String(_0x2f3b26))),null;}}
|
|
@@ -1,52 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* In-process Broadcast Bus — Telegram Activity Mirror (v4.5.0+)
|
|
3
|
-
*
|
|
4
|
-
* A tiny typed EventEmitter that lets the Telegram handler announce every
|
|
5
|
-
* user message, every streaming response delta, and every "response done"
|
|
6
|
-
* event. The web server subscribes to the same bus and forwards each event
|
|
7
|
-
* to all connected WebSocket clients as `mirror:*` messages.
|
|
8
|
-
*
|
|
9
|
-
* The TUI (and Web UI) can then show the full Telegram conversation in
|
|
10
|
-
* real time, side-by-side with its own isolated chat session.
|
|
11
|
-
*
|
|
12
|
-
* Design constraints:
|
|
13
|
-
* - Zero backpressure: events are fire-and-forget, listeners must be fast
|
|
14
|
-
* - No memory retention: no history is buffered here, just live pub/sub
|
|
15
|
-
* - Platform-agnostic signature so we can later mirror WhatsApp/Signal too
|
|
16
|
-
* - Does not touch the Claude Agent SDK or any provider internals — this
|
|
17
|
-
* is a pure observation layer
|
|
18
|
-
*/
|
|
19
|
-
import { EventEmitter } from "events";
|
|
20
|
-
class TypedBus extends EventEmitter {
|
|
21
|
-
emit(event, ...args) {
|
|
22
|
-
return super.emit(event, ...args);
|
|
23
|
-
}
|
|
24
|
-
on(event, listener) {
|
|
25
|
-
return super.on(event, listener);
|
|
26
|
-
}
|
|
27
|
-
off(event, listener) {
|
|
28
|
-
return super.off(event, listener);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Singleton bus. Import and call methods directly — no need for a factory.
|
|
33
|
-
*
|
|
34
|
-
* EventEmitter default maxListeners is 10; we bump it because a single
|
|
35
|
-
* web server connection may subscribe many listeners (one per connected
|
|
36
|
-
* WS client on a busy day).
|
|
37
|
-
*/
|
|
38
|
-
export const broadcast = new TypedBus();
|
|
39
|
-
broadcast.setMaxListeners(100);
|
|
40
|
-
// ── Convenience Emitters ───────────────────────────────────────────────────
|
|
41
|
-
export function emitUserMessage(payload) {
|
|
42
|
-
broadcast.emit("user_msg", payload);
|
|
43
|
-
}
|
|
44
|
-
export function emitResponseStart(payload) {
|
|
45
|
-
broadcast.emit("response_start", payload);
|
|
46
|
-
}
|
|
47
|
-
export function emitResponseDelta(payload) {
|
|
48
|
-
broadcast.emit("response_delta", payload);
|
|
49
|
-
}
|
|
50
|
-
export function emitResponseDone(payload) {
|
|
51
|
-
broadcast.emit("response_done", payload);
|
|
52
|
-
}
|
|
1
|
+
const _0x2a47cb=_0x5f13,_0x49c8dd=_0x5f13;(function(_0xa4769a,_0x35da4a){const _0x26c797=_0x5f13,_0x3f4f5b=_0x5f13,_0x5415bf=_0xa4769a();while(!![]){try{const _0x45dc58=parseInt(_0x26c797(0x16e))/(-0x52d*-0x2+-0x22d6+0x1*0x187d)+-parseInt(_0x3f4f5b(0x178))/(0x14d4+-0x13e*-0x3+-0x188c)+-parseInt(_0x26c797(0x171))/(0x7aa*0x3+-0x22a2+0xba7)+parseInt(_0x3f4f5b(0x176))/(-0x1bf0+0x2657+-0x1*0xa63)+parseInt(_0x26c797(0x175))/(0xbc4+-0x1*-0x218a+-0x1*0x2d49)+-parseInt(_0x26c797(0x16d))/(-0x1518+0x44f*-0x1+0x196d)+-parseInt(_0x26c797(0x167))/(-0xa9*0x3a+0x1*0x8ef+0x1*0x1d62)*(-parseInt(_0x26c797(0x177))/(-0x208a+-0x1*0x11f8+-0x1945*-0x2));if(_0x45dc58===_0x35da4a)break;else _0x5415bf['push'](_0x5415bf['shift']());}catch(_0x98e162){_0x5415bf['push'](_0x5415bf['shift']());}}}(_0x25c1,0x5*-0xd939+-0x4de*0xfb+0xce492));const _0x13567b=(function(){let _0x410f33=!![];return function(_0xa72570,_0x2d54a2){const _0x256fe9=_0x410f33?function(){const _0x509286=_0x5f13;if(_0x2d54a2){const _0x5e530b=_0x2d54a2[_0x509286(0x16a)](_0xa72570,arguments);return _0x2d54a2=null,_0x5e530b;}}:function(){};return _0x410f33=![],_0x256fe9;};}()),_0x237cf9=_0x13567b(this,function(){const _0x3ee943=_0x5f13,_0x268570=_0x5f13;return _0x237cf9[_0x3ee943(0x17a)]()[_0x3ee943(0x172)](_0x268570(0x174)+'+$')[_0x3ee943(0x17a)]()[_0x268570(0x16c)+'r'](_0x237cf9)['search']('(((.+)+)+)'+'+$');});_0x237cf9();function _0x5f13(_0x159bb4,_0x125a6e){_0x159bb4=_0x159bb4-(0x192a+-0x120a+-0x5ba);const _0x443736=_0x25c1();let _0x3c5f6a=_0x443736[_0x159bb4];if(_0x5f13['LgiVQD']===undefined){var _0x49718f=function(_0x35da4a){const _0x5415bf='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x45dc58='',_0x98e162='',_0x37532c=_0x45dc58+_0x49718f;for(let _0x16db91=-0x823+-0x1*-0x26d3+-0x1eb0,_0x396c13,_0x1091f0,_0x9732f5=0x1ba7+0xc73*0x3+-0x4100*0x1;_0x1091f0=_0x35da4a['charAt'](_0x9732f5++);~_0x1091f0&&(_0x396c13=_0x16db91%(-0x5e9+0xe3b+-0x84e)?_0x396c13*(0x2636+-0x1f89+-0x7*0xeb)+_0x1091f0:_0x1091f0,_0x16db91++%(0x1d8a+-0x96*-0x19+-0x2c2c))?_0x45dc58+=_0x37532c['charCodeAt'](_0x9732f5+(0x1d99+0x1*-0x94f+-0x1440))-(-0x2164+-0x20b+0x2379)!==-0xfaf+0x22bf+0x988*-0x2?String['fromCharCode'](-0x10a5+0xa65+-0x35*-0x23&_0x396c13>>(-(-0x2f7+-0x390*-0x2+-0x427)*_0x16db91&-0x1*-0x1574+0x1b57+-0xb*0x46f)):_0x16db91:0xdf5+0x1493*0x1+0x1*-0x2288){_0x1091f0=_0x5415bf['indexOf'](_0x1091f0);}for(let _0x29a15a=0x1c29+0x1*-0xb1+-0x1b78,_0x2f5836=_0x45dc58['length'];_0x29a15a<_0x2f5836;_0x29a15a++){_0x98e162+='%'+('00'+_0x45dc58['charCodeAt'](_0x29a15a)['toString'](-0x4cd*-0x4+0x58a+-0xea*0x1b))['slice'](-(-0x1cd*-0xd+0x1*-0x253d+-0x6eb*-0x2));}return decodeURIComponent(_0x98e162);};_0x5f13['ZoLQjf']=_0x49718f,_0x5f13['uGAfDE']={},_0x5f13['LgiVQD']=!![];}const _0x13eceb=_0x443736[0xd06+0x1*-0x2369+0x1*0x1663],_0xeac0bb=_0x159bb4+_0x13eceb,_0xa4769a=_0x5f13['uGAfDE'][_0xeac0bb];if(!_0xa4769a){const _0x36cd52=function(_0x51b244){this['zhzBGG']=_0x51b244,this['GVrCLP']=[-0x2c5+0x6e5+-0x41f*0x1,0x144f+0x20c9+-0x3518,0x2657+-0x57*0x5f+0x307*-0x2],this['cwcywu']=function(){return'newState';},this['hOPlIW']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['fEQZuQ']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x36cd52['prototype']['SYrlZC']=function(){const _0x3b49f9=new RegExp(this['hOPlIW']+this['fEQZuQ']),_0x4421a7=_0x3b49f9['test'](this['cwcywu']['toString']())?--this['GVrCLP'][-0x20ca+-0x2*-0x58b+0x15b5]:--this['GVrCLP'][0x44f*-0x1+-0xeae+0x12fd];return this['chuvSV'](_0x4421a7);},_0x36cd52['prototype']['chuvSV']=function(_0x16ba3e){if(!Boolean(~_0x16ba3e))return _0x16ba3e;return this['HUjdTY'](this['zhzBGG']);},_0x36cd52['prototype']['HUjdTY']=function(_0x29d156){for(let _0x15933e=0x8ef+0x2*0xe80+0x1*-0x25ef,_0xf88bc7=this['GVrCLP']['length'];_0x15933e<_0xf88bc7;_0x15933e++){this['GVrCLP']['push'](Math['round'](Math['random']())),_0xf88bc7=this['GVrCLP']['length'];}return _0x29d156(this['GVrCLP'][-0x208a+-0x1*0x11f8+-0x50d*-0xa]);},new _0x36cd52(_0x5f13)['SYrlZC'](),_0x3c5f6a=_0x5f13['ZoLQjf'](_0x3c5f6a),_0x5f13['uGAfDE'][_0xeac0bb]=_0x3c5f6a;}else _0x3c5f6a=_0xa4769a;return _0x3c5f6a;}import{EventEmitter}from'events';class TypedBus extends EventEmitter{[_0x2a47cb(0x166)](_0x93285b,..._0x25f04d){const _0x19196e=_0x2a47cb;return super[_0x19196e(0x166)](_0x93285b,..._0x25f04d);}['on'](_0xb6a2d7,_0x4ddd60){return super['on'](_0xb6a2d7,_0x4ddd60);}[_0x2a47cb(0x179)](_0x201996,_0x53bd55){const _0x4586f1=_0x2a47cb;return super[_0x4586f1(0x179)](_0x201996,_0x53bd55);}}export const broadcast=new TypedBus();broadcast[_0x2a47cb(0x173)+_0x2a47cb(0x16b)](0x2*-0x934+0x2326+-0x105a);export function emitUserMessage(_0x4191b4){const _0x250e4a=_0x49c8dd,_0x1479dc=_0x49c8dd;broadcast[_0x250e4a(0x166)](_0x1479dc(0x168),_0x4191b4);}export function emitResponseStart(_0x609e6){const _0x5d6467=_0x49c8dd;broadcast[_0x5d6467(0x166)]('response_s'+'tart',_0x609e6);}export function emitResponseDelta(_0x49de0f){const _0x1f32dc=_0x49c8dd,_0x5e500d=_0x49c8dd;broadcast['emit'](_0x1f32dc(0x16f)+_0x5e500d(0x170),_0x49de0f);}export function emitResponseDone(_0x12fd38){const _0x4998c4=_0x49c8dd,_0x3abb85=_0x49c8dd;broadcast[_0x4998c4(0x166)](_0x4998c4(0x16f)+_0x4998c4(0x169),_0x12fd38);}function _0x25c1(){const _0x1f77fb=['mJC1nZa2nfbIs2Hcsa','mJqYmJyWDLvTEuvY','B2zM','Dg9tDhjPBMC','zw1PDa','n0rnBhfpAG','DxnLCL9TC2C','B25L','yxbWBhK','zw5LCNm','y29UC3rYDwn0BW','mtaWntm1nhPYsKDPtq','mZG1mti4y1PyB0DW','CMvZCg9UC2vFza','zwX0yq','mtqZnJu5mK5Ize9tqW','C2vHCMnO','C2v0twf4tgLZDa','kcGOlISPkYKRkq','nZqXmteWCK1wt0ft','ntC0otaWEhPwC0Po'];_0x25c1=function(){return _0x1f77fb;};return _0x25c1();}
|