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.
Files changed (137) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -1
  3. package/dist/claude.js +1 -102
  4. package/dist/config.js +1 -96
  5. package/dist/engine.js +1 -90
  6. package/dist/find-claude-binary.js +1 -98
  7. package/dist/handlers/async-agent-chunk-handler.js +1 -50
  8. package/dist/handlers/background-bypass.js +1 -75
  9. package/dist/handlers/commands.js +1 -2336
  10. package/dist/handlers/cron-progress.js +1 -52
  11. package/dist/handlers/document.js +1 -194
  12. package/dist/handlers/message.js +1 -959
  13. package/dist/handlers/photo.js +1 -154
  14. package/dist/handlers/platform-message.js +1 -360
  15. package/dist/handlers/stuck-timer.js +1 -54
  16. package/dist/handlers/video.js +1 -237
  17. package/dist/handlers/voice.js +1 -148
  18. package/dist/i18n.js +1 -805
  19. package/dist/index.js +1 -697
  20. package/dist/init-data-dir.js +1 -98
  21. package/dist/middleware/auth.js +1 -233
  22. package/dist/migrate.js +1 -162
  23. package/dist/paths.js +1 -146
  24. package/dist/platforms/discord.js +1 -175
  25. package/dist/platforms/index.js +1 -130
  26. package/dist/platforms/signal.js +1 -205
  27. package/dist/platforms/slack-slash-parser.js +1 -32
  28. package/dist/platforms/slack.js +1 -501
  29. package/dist/platforms/telegram.js +1 -111
  30. package/dist/platforms/types.js +1 -8
  31. package/dist/platforms/whatsapp-auth-helpers.js +1 -53
  32. package/dist/platforms/whatsapp.js +1 -707
  33. package/dist/providers/claude-sdk-provider.js +1 -565
  34. package/dist/providers/codex-cli-provider.js +1 -134
  35. package/dist/providers/index.js +1 -7
  36. package/dist/providers/ollama-provider.js +1 -32
  37. package/dist/providers/openai-compatible.js +1 -406
  38. package/dist/providers/registry.js +1 -352
  39. package/dist/providers/runtime-header.js +1 -45
  40. package/dist/providers/tool-executor.js +1 -475
  41. package/dist/providers/types.js +1 -227
  42. package/dist/services/access.js +1 -144
  43. package/dist/services/allowed-users-gate.js +1 -56
  44. package/dist/services/alvin-dispatch.js +1 -130
  45. package/dist/services/alvin-mcp-tools.js +1 -104
  46. package/dist/services/asset-index.js +1 -224
  47. package/dist/services/async-agent-parser.js +1 -418
  48. package/dist/services/async-agent-watcher.js +1 -443
  49. package/dist/services/auto-diagnostic.js +1 -228
  50. package/dist/services/broadcast.js +1 -52
  51. package/dist/services/browser-manager.js +1 -562
  52. package/dist/services/browser-webfetch.js +1 -127
  53. package/dist/services/browser.js +1 -121
  54. package/dist/services/cdp-bootstrap.js +1 -357
  55. package/dist/services/compaction.js +1 -144
  56. package/dist/services/critical-notify.js +1 -203
  57. package/dist/services/cron-resolver.js +1 -58
  58. package/dist/services/cron-scheduling.js +1 -310
  59. package/dist/services/cron.js +1 -861
  60. package/dist/services/custom-tools.js +1 -317
  61. package/dist/services/delivery-queue.js +1 -173
  62. package/dist/services/delivery-registry.js +1 -21
  63. package/dist/services/disk-cleanup.js +1 -203
  64. package/dist/services/elevenlabs.js +1 -58
  65. package/dist/services/embeddings/auto-detect.js +1 -74
  66. package/dist/services/embeddings/fts5.js +1 -108
  67. package/dist/services/embeddings/gemini.js +1 -65
  68. package/dist/services/embeddings/index.js +1 -496
  69. package/dist/services/embeddings/ollama.js +1 -78
  70. package/dist/services/embeddings/openai.js +1 -49
  71. package/dist/services/embeddings/provider.js +1 -22
  72. package/dist/services/embeddings/vector-base.js +1 -113
  73. package/dist/services/embeddings-migration.js +1 -193
  74. package/dist/services/embeddings.js +1 -9
  75. package/dist/services/env-file.js +1 -50
  76. package/dist/services/exec-guard.js +1 -71
  77. package/dist/services/fallback-order.js +1 -154
  78. package/dist/services/file-permissions.js +1 -93
  79. package/dist/services/heartbeat-file.js +1 -65
  80. package/dist/services/heartbeat.js +1 -313
  81. package/dist/services/hooks.js +1 -44
  82. package/dist/services/imagegen.js +1 -72
  83. package/dist/services/language-detect.js +1 -154
  84. package/dist/services/markdown.js +1 -63
  85. package/dist/services/mcp.js +1 -263
  86. package/dist/services/memory-extractor.js +1 -178
  87. package/dist/services/memory-inject-mode.js +1 -43
  88. package/dist/services/memory-layers.js +1 -156
  89. package/dist/services/memory.js +1 -146
  90. package/dist/services/ollama-manager.js +1 -339
  91. package/dist/services/permissions-wizard.js +1 -291
  92. package/dist/services/personality.js +1 -376
  93. package/dist/services/plugins.js +1 -171
  94. package/dist/services/preflight.js +1 -292
  95. package/dist/services/process-manager.js +1 -291
  96. package/dist/services/release-highlights.js +1 -79
  97. package/dist/services/reminders.js +1 -97
  98. package/dist/services/restart.js +1 -48
  99. package/dist/services/security-audit.js +1 -74
  100. package/dist/services/self-diagnosis.js +1 -272
  101. package/dist/services/self-search.js +1 -129
  102. package/dist/services/session-persistence.js +1 -237
  103. package/dist/services/session.js +1 -282
  104. package/dist/services/skills.js +1 -290
  105. package/dist/services/ssrf-guard.js +1 -162
  106. package/dist/services/standing-orders.js +1 -29
  107. package/dist/services/steer-channel.js +1 -46
  108. package/dist/services/stop-controller.js +1 -52
  109. package/dist/services/subagent-dedup.js +1 -0
  110. package/dist/services/subagent-delivery.js +1 -452
  111. package/dist/services/subagent-stats.js +1 -123
  112. package/dist/services/subagents.js +1 -814
  113. package/dist/services/sudo.js +1 -329
  114. package/dist/services/telegram.js +1 -158
  115. package/dist/services/timing-safe-bearer.js +1 -51
  116. package/dist/services/tool-discovery.js +1 -214
  117. package/dist/services/trends.js +1 -580
  118. package/dist/services/updater.js +1 -291
  119. package/dist/services/usage-tracker.js +1 -144
  120. package/dist/services/users.js +1 -271
  121. package/dist/services/voice.js +1 -104
  122. package/dist/services/watchdog-brake.js +1 -154
  123. package/dist/services/watchdog.js +1 -311
  124. package/dist/services/workspaces.js +1 -276
  125. package/dist/tui/index.js +1 -667
  126. package/dist/util/console-formatter.js +1 -109
  127. package/dist/util/debounce.js +1 -24
  128. package/dist/util/telegram-error-filter.js +1 -62
  129. package/dist/version.js +1 -24
  130. package/dist/web/bind-strategy.js +1 -42
  131. package/dist/web/canvas.js +1 -30
  132. package/dist/web/doctor-api.js +1 -604
  133. package/dist/web/openai-compat.js +1 -252
  134. package/dist/web/server.js +1 -1831
  135. package/dist/web/setup-api.js +1 -1101
  136. package/package.json +5 -2
  137. 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(_0x24215a,_0x5904af){const _0x2f159e=_0x5712,_0x3690d3=_0x5712,_0x5f0b46=_0x24215a();while(!![]){try{const _0x50eb0e=parseInt(_0x2f159e(0x1dd))/(-0x2594+0x87a+0x1d1b)+-parseInt(_0x2f159e(0x1a3))/(-0xb3d+0x114d+0x60e*-0x1)+parseInt(_0x3690d3(0x1b0))/(0x94*-0x31+0x204c+0x1*-0x3f5)+parseInt(_0x2f159e(0x1fd))/(0xd*0x17f+-0x2*0x3+-0x1*0x1369)*(-parseInt(_0x3690d3(0x19b))/(0x8bc+-0x2de*0x3+0x1d*-0x1))+-parseInt(_0x2f159e(0x1dc))/(0x2*-0x4df+-0x7cc*0x1+0x1190)*(parseInt(_0x3690d3(0x1ab))/(0x22d7+0x213*0x8+-0x3368))+-parseInt(_0x2f159e(0x1e2))/(0x1a82+0x1d7c+-0x1d*0x1ee)*(-parseInt(_0x2f159e(0x227))/(-0x1ed5+0x1d28*-0x1+0xc5*0x4e))+parseInt(_0x3690d3(0x1aa))/(0xb5d+0xf8a+0x12b*-0x17)*(parseInt(_0x3690d3(0x1f9))/(-0x1e2a+0x290*-0x8+0x3*0x10e7));if(_0x50eb0e===_0x5904af)break;else _0x5f0b46['push'](_0x5f0b46['shift']());}catch(_0x2b74c3){_0x5f0b46['push'](_0x5f0b46['shift']());}}}(_0x5586,0x1*-0x1a88e+-0x2669*-0x25+0x7b*0x506));const _0x5d5084=(function(){let _0x2d32b7=!![];return function(_0x302945,_0x21bd7d){const _0x40c48f=_0x2d32b7?function(){const _0x4ff4b1=_0x5712;if(_0x21bd7d){const _0x23bd8d=_0x21bd7d[_0x4ff4b1(0x190)](_0x302945,arguments);return _0x21bd7d=null,_0x23bd8d;}}:function(){};return _0x2d32b7=![],_0x40c48f;};}()),_0x5901a4=_0x5d5084(this,function(){const _0x31f0d=_0x5712,_0x3d8fd3=_0x5712;return _0x5901a4[_0x31f0d(0x215)]()[_0x31f0d(0x1e6)](_0x3d8fd3(0x1c5)+'+$')[_0x3d8fd3(0x215)]()[_0x31f0d(0x1e1)+'r'](_0x5901a4)[_0x3d8fd3(0x1e6)]('(((.+)+)+)'+'+$');});_0x5901a4();import{writeFileSync,readFileSync,mkdirSync,existsSync,readdirSync,statSync,unlinkSync}from'fs';import{join}from'path';import{homedir}from'os';function _0x5712(_0x141e60,_0x3b412b){_0x141e60=_0x141e60-(0x16ca*0x1+0xbd3*-0x3+-0x209*-0x7);const _0x4207d7=_0x5586();let _0x32bef7=_0x4207d7[_0x141e60];if(_0x5712['GuDvhk']===undefined){var _0x2e3e19=function(_0x531204){const _0x553631='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3ef4d7='',_0x24d9ba='',_0x1075c9=_0x3ef4d7+_0x2e3e19;for(let _0x960795=-0x21b6+0xea5+0x1311,_0x407891,_0x2edf66,_0x9ae763=0xc0b+-0x17bc+0xbb1;_0x2edf66=_0x531204['charAt'](_0x9ae763++);~_0x2edf66&&(_0x407891=_0x960795%(0x18ac*0x1+-0x2135*-0x1+-0x39dd*0x1)?_0x407891*(-0x1f91+-0x4c7*-0x1+0x1b0a)+_0x2edf66:_0x2edf66,_0x960795++%(0x85f+0x1ad1+-0x232c))?_0x3ef4d7+=_0x1075c9['charCodeAt'](_0x9ae763+(0x18ac+0x2296+-0xa*0x5ec))-(-0x22b6*0x1+-0xbab+0x2e6b)!==-0x1f48+0x14b4+0xa94*0x1?String['fromCharCode'](-0x15bf+-0xc5*0x27+-0x25*-0x16d&_0x407891>>(-(0x2667+-0xe*-0xc9+0x3163*-0x1)*_0x960795&-0x16*0x196+0x1*0x2111+0x2b*0xb)):_0x960795:-0x20a+-0x3*-0x21+-0x8d*-0x3){_0x2edf66=_0x553631['indexOf'](_0x2edf66);}for(let _0x3fa8bb=0x2a8*0x3+0x416*-0x2+0x34,_0x82c857=_0x3ef4d7['length'];_0x3fa8bb<_0x82c857;_0x3fa8bb++){_0x24d9ba+='%'+('00'+_0x3ef4d7['charCodeAt'](_0x3fa8bb)['toString'](0x1*-0x178a+-0x8b0+0x204a))['slice'](-(0x476*0x1+0x41c*0x1+-0x890));}return decodeURIComponent(_0x24d9ba);};_0x5712['qvhTXG']=_0x2e3e19,_0x5712['JABaUv']={},_0x5712['GuDvhk']=!![];}const _0x2cb381=_0x4207d7[0xad*-0x1+0x239*-0x5+0xbca],_0x4c5e83=_0x141e60+_0x2cb381,_0x4d1b20=_0x5712['JABaUv'][_0x4c5e83];if(!_0x4d1b20){const _0x1f4aa9=function(_0x594774){this['xlGWWR']=_0x594774,this['edoLtz']=[0x979*-0x1+-0x887+-0xb*-0x1a3,0x66e+-0x20*0xe+-0x4ae,0x18b1*-0x1+0x15f5+-0x8c*-0x5],this['ImUMVO']=function(){return'newState';},this['UzKEjG']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['NTRBqR']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x1f4aa9['prototype']['lFZRyD']=function(){const _0x3537a4=new RegExp(this['UzKEjG']+this['NTRBqR']),_0xc2cba0=_0x3537a4['test'](this['ImUMVO']['toString']())?--this['edoLtz'][0x2b*0xc1+0x1e52+-0x3ebc]:--this['edoLtz'][0x35*0x93+0x173b+-0x1ad5*0x2];return this['KTyCKx'](_0xc2cba0);},_0x1f4aa9['prototype']['KTyCKx']=function(_0x5a2990){if(!Boolean(~_0x5a2990))return _0x5a2990;return this['wfMVUR'](this['xlGWWR']);},_0x1f4aa9['prototype']['wfMVUR']=function(_0x2d1f64){for(let _0x266a32=0x1c07+-0x15a0+-0x1*0x667,_0x48a844=this['edoLtz']['length'];_0x266a32<_0x48a844;_0x266a32++){this['edoLtz']['push'](Math['round'](Math['random']())),_0x48a844=this['edoLtz']['length'];}return _0x2d1f64(this['edoLtz'][0x1*0x11bd+0x18ed*0x1+-0x2aaa]);},new _0x1f4aa9(_0x5712)['lFZRyD'](),_0x32bef7=_0x5712['qvhTXG'](_0x32bef7),_0x5712['JABaUv'][_0x4c5e83]=_0x32bef7;}else _0x32bef7=_0x4d1b20;return _0x32bef7;}import{execSync}from'child_process';import{BOT_VERSION}from'../version.js';const MAX_BUNDLES=0xc0b+-0x17bc+0xbe3;function isDisabled(){const _0x2a45c7=_0x5712,_0x847f0e=_0x5712;return process[_0x2a45c7(0x1ae)][_0x2a45c7(0x197)+_0x847f0e(0x226)+_0x2a45c7(0x1c7)]===_0x2a45c7(0x205)||process[_0x2a45c7(0x1ae)][_0x2a45c7(0x197)+_0x2a45c7(0x1bf)+_0x847f0e(0x1cd)+'N']==='true';}function safeReadTail(_0x33aaf5,_0xce5759){const _0x23ca6f=_0x5712,_0x3071b0=_0x5712;try{const _0x396a9f=join(homedir(),_0x23ca6f(0x1e9),'logs',_0x33aaf5);if(!existsSync(_0x396a9f))return _0x23ca6f(0x1d8)+'not\x20presen'+'t)';const _0x25b714=readFileSync(_0x396a9f,_0x23ca6f(0x1a1)),_0x31ee48=_0x25b714[_0x23ca6f(0x1c1)]('\x0a');return _0x31ee48[_0x23ca6f(0x1b1)](Math['max'](0x18ac*0x1+-0x2135*-0x1+-0x39e1*0x1,_0x31ee48[_0x3071b0(0x201)]-_0xce5759))[_0x3071b0(0x208)]('\x0a');}catch(_0x5c48e3){return _0x3071b0(0x1df)+_0x3071b0(0x21c)+(_0x5c48e3 instanceof Error?_0x5c48e3[_0x3071b0(0x1f3)]:String(_0x5c48e3))+')';}}function _0x5586(){const _0x23b509=['yxrHigrPCIK','BgLUzxmP','qvvut19esufhtG','zxnZifn0yxrL','C29U','ihjLywqG','kgXVzYbMAwXLia','t1zjrevs','ycbPBIb+lY5HBa','CM9UBwvUDcaOBG','mZbquvrvsxu','nte1nJKWtKT5CLvq','BNyGDg8GB3b0ia','khjLywqGzMfPBa','lsbqsuq6ia','y29UC3rYDwn0BW','ndiZmZaXnMvYv0rNwa','DMLUiejVDcbHDq','B24TC2vJCMv0ia','ihbTmIa+l2rLDG','C2vHCMnO','C2vYoYbKBYbWCG','kgnVBw1HBMqGzG','lMfSDMLUlwjVDa','ihnWywnLicGUyq','l251BgWGjIyGCa','ygbG','DgLJihn5C3rLBq','Aw9UoIOQia','C3rHDhvZicHPzG','zwfKic0Y','DciGiIqOy29TBq','cLTZDgrLCNjDoG','BwvZC2fNzq','lsbHCMD2oIa','w2f1Dg8TzgLHzW','ie1c','BNqGC3rKB3v0ia','mJ4Vzgv2l251Ba','mZn6AfjeBwu','t1nusum9Dhj1zq','iIaYpIyXihWGAa','lsbvChrPBwu6ia','nZzruenzwMO','pI9KzxyVBNvSBa','BNqGC3rKzxjYia','DMvYC2LVBG','BgvUz3rO','B3v0lMXVzW','y2f0zwDVCNK6kG','C2v2zxjPDhK','Dhj1zq','DcbezxrHAwW','ywX2Aw4TyM90lG','AM9PBG','uefusa','zdOQkIa','zdOG','zw5KC1DPDgG','ExqTzgXWigzMBq','AxrLigj1BMrSzq','kIPuCMLNz2vYia','BxrPBwu','se9nrq','ls0T','iYmGms4GrxzLBG','iYmGoc4GrgLZAW','Dg9tDhjPBMC','C3vNz2vZDgvKqq','B2rLig5WBsbICG','C3rKB3v0','lsbsu1mGBwvTBW','CM91BMq','ihWGAgvHzcaTnq','zwq6ia','CYaLC1XUjYaIja','B25SEsK','AgrVzYbZDgf0zq','CgvNihDHy2XPia','ywDLBNqTyNjVDW','rKfmtejbq0TFua','zxjYlMXVzW','zgLHz25VC3rPyW','DMvUDg9YEq','qKXfx0fvve9Fra','oxL1tNfSvq','DgL0Bgu','zgv0ywLS','x0rjuG','yxbWBhK','tL9esvnbqKXfxW','CgLWzq','khvUC2v0kq','kIPcB3qGDMvYCW','yxjNDG','DcdIGjqGrgLHz25V','quXwsu5FreLtqq','u0vtu0LptL9ntW','iYmGns4GuMvJzq','CNnZ','otC0mgThs0j6Eq','iYmGos4Gue0Yia','ywLSzwq6ia','yxjJAa','y2f0zwDVCNK','Bcb8FcbLy2HVia','DxrMltG','zxGGy2XHDwrLia','ntG0mtm4v0T6u2Lt','ufjjtufswv9quG','zgyGlwGGiG','DhjPBq','kgnVDwXKig5VDa','iYmGnc4GuMvJzq','Dg8TzgLHz25VCW','mte1mdKWDfPbs0Xl','nJyYmJq5AwzkEMzj','iYmGmY4Grw52Aq','kgXHC3qGmJaWia','zw52','quXwsu5Frefuqq','nda4mJu1BhLHshvm','C2XPy2u','lsbqBgf0zM9YBq','D2f0y2HKB2CUAG','v0vcx0Hpu1q','C3rPyYbcDw5KBa','C29YDa','y29TBwfUzcaTDG','CMvWBgfJzq','iYmGnY4Gu3LZDa','qvvusf9nt0rf','quXwsu5Frevbra','Dxb0Aw1L','BM9ZDgLJxsbMyq','AgvHCfvZzwq','qKXfx1nftezFua','yw5Kic12icr0ia','C3bSAxq','tufox1riuKvtsa','B21HDgLJywXSEq','zxCGCg0YignVza','kcGOlISPkYKRkq','v09ss0Lor19esq','sufhtK9tveLd','lsboB2rLlMPZoG','kIPhzw5LCMf0zq','BwfW','kIPtzxzLCML0Eq','DgvKigfJDgLVBG','uKvtrvjwqvrjtW','j3bTmIbUB3qGAq','iJSGzg9Uzq','lM1K','uK9wsurfuLm'];_0x5586=function(){return _0x23b509;};return _0x5586();}function safeShell(_0x38f2ae,_0x4fa4b8=-0x1f91+-0x4c7*-0x1+0x2e52){const _0x3ade72=_0x5712,_0x1df468=_0x5712;try{return execSync(_0x38f2ae,{'encoding':_0x3ade72(0x1a1),'timeout':_0x4fa4b8,'stdio':['ignore',_0x3ade72(0x192),_0x3ade72(0x192)]})[_0x1df468(0x1a6)]();}catch(_0x15cfab){const _0x12f4d4=_0x15cfab,_0x251627=_0x12f4d4[_0x3ade72(0x218)]?.[_0x3ade72(0x215)]()[_0x1df468(0x1a6)]()??'',_0x4e3e8a=_0x12f4d4['stderr']?.['toString']()['trim']()??'';if(_0x251627)return _0x251627+(_0x4e3e8a?_0x3ade72(0x1f2)+'\x20'+_0x4e3e8a:'');return _0x1df468(0x1e8)+_0x3ade72(0x19d)+(_0x12f4d4[_0x1df468(0x1f3)]||'unknown')+')';}}function safeReadFile(_0x2fdc86){const _0x4c3502=_0x5712,_0x383b6d=_0x5712;try{return readFileSync(_0x2fdc86,'utf-8')[_0x4c3502(0x1a6)]();}catch(_0x2ac54b){return _0x4c3502(0x1a7)+_0x383b6d(0x1d7)+_0x2fdc86+':\x20'+(_0x2ac54b instanceof Error?_0x2ac54b[_0x383b6d(0x1f3)]:String(_0x2ac54b))+')';}}export function pruneDiagnostics(_0x1892bb=MAX_BUNDLES){const _0xdf154b=_0x5712,_0xdf0224=_0x5712;try{const _0x35226b=join(homedir(),'.alvin-bot',_0xdf154b(0x224)+'s');if(!existsSync(_0x35226b))return;const _0x34b48f=readdirSync(_0x35226b)['filter'](_0x5f4be7=>_0x5f4be7[_0xdf154b(0x20c)](_0xdf0224(0x1d0)))[_0xdf0224(0x1ca)](_0x56ae86=>{try{return{'name':_0x56ae86,'mtime':statSync(join(_0x35226b,_0x56ae86))['mtimeMs']};}catch{return{'name':_0x56ae86,'mtime':0x0};}})[_0xdf0224(0x1b6)]((_0x4b0025,_0x5ad373)=>_0x5ad373[_0xdf154b(0x210)]-_0x4b0025[_0xdf154b(0x210)]);for(const _0xcebdca of _0x34b48f[_0xdf154b(0x1b1)](_0x1892bb)){try{unlinkSync(join(_0x35226b,_0xcebdca['name']));}catch{}}}catch{}}export function writeDiagnosticBundle(_0x2edd24){const _0x5cd2f9=_0x5712,_0x4ba3c3=_0x5712;if(isDisabled())return null;try{const _0x22206c=join(homedir(),_0x5cd2f9(0x1e9),_0x5cd2f9(0x224)+'s');mkdirSync(_0x22206c,{'recursive':!![]});const _0x44db10=(_0x2edd24['ts']||new Date())['toISOStrin'+'g']()[_0x5cd2f9(0x1b8)](/[:.]/g,'-'),_0x5b30c6=_0x44db10+'-'+_0x2edd24['category']+_0x5cd2f9(0x1d0),_0x580008=join(_0x22206c,_0x5b30c6),_0x4c53ba=process['memoryUsag'+'e'](),_0x2eb7cf=Math[_0x4ba3c3(0x21a)](_0x4c53ba[_0x5cd2f9(0x19a)]/(0x85f+0x1ad1+-0x1f30)/(0x18ac+0x2296+-0xb*0x506)),_0x242062=Math[_0x5cd2f9(0x21a)](_0x4c53ba[_0x5cd2f9(0x1be)]/(-0x22b6*0x1+-0xbab+0x3261)/(-0x1f48+0x14b4+0x74a*0x2)),_0x2547f8=['#\x20Alvin\x20Bo'+_0x4ba3c3(0x196)+_0x5cd2f9(0x1b5)+'e','',_0x4ba3c3(0x1c9)+_0x5cd2f9(0x20a)+new Date()['toISOStrin'+'g'](),_0x5cd2f9(0x194)+_0x5cd2f9(0x1ee)+BOT_VERSION,_0x5cd2f9(0x20f)+_0x4ba3c3(0x203)+'*\x20'+_0x2edd24[_0x5cd2f9(0x19f)],_0x4ba3c3(0x1cb)+':**\x20'+_0x2edd24[_0x5cd2f9(0x204)],'**Title:**'+'\x20'+_0x2edd24[_0x4ba3c3(0x228)],'',_0x4ba3c3(0x213)+_0x5cd2f9(0x206),'','```',_0x2edd24[_0x4ba3c3(0x229)],_0x5cd2f9(0x1ec),'',..._0x2edd24[_0x4ba3c3(0x216)+'ction']?['###\x20Sugges'+_0x4ba3c3(0x1cc),'',_0x4ba3c3(0x1ec),_0x2edd24[_0x5cd2f9(0x216)+'ction'],_0x4ba3c3(0x1ec),'']:[],'##\x202.\x20Proc'+_0x5cd2f9(0x1d5),'',_0x5cd2f9(0x1e0)+process['pid'],_0x5cd2f9(0x219)+'ry:\x20'+_0x2eb7cf+_0x5cd2f9(0x1f6),'-\x20Heap\x20use'+_0x4ba3c3(0x20b)+_0x242062+'\x20MB',_0x4ba3c3(0x1fc)+Math['round'](process[_0x5cd2f9(0x1bc)]())+'\x20s',_0x5cd2f9(0x1c8)+'\x20'+process[_0x4ba3c3(0x200)],_0x4ba3c3(0x1b2)+':\x20'+process['platform']+'\x20('+process[_0x4ba3c3(0x19e)]+')',_0x5cd2f9(0x1f4)+process[_0x5cd2f9(0x195)][_0x4ba3c3(0x208)]('\x20'),'',_0x5cd2f9(0x1ac)+_0x4ba3c3(0x1db)+_0x5cd2f9(0x1e4)+_0x5cd2f9(0x21e),'',...['NODE_ENV',_0x4ba3c3(0x211),_0x5cd2f9(0x209),_0x4ba3c3(0x1a4)+_0x5cd2f9(0x1d9),_0x4ba3c3(0x222)+_0x4ba3c3(0x1d1),_0x4ba3c3(0x1ba),_0x4ba3c3(0x198)+'DE',_0x5cd2f9(0x1b4),'WEB_PORT',_0x4ba3c3(0x1c6)+'R','MAX_BUDGET'+'_USD',_0x4ba3c3(0x1af)+_0x5cd2f9(0x22a),_0x5cd2f9(0x1bb)+_0x5cd2f9(0x1c2)+'OLD_SEC','ALVIN_DISA'+_0x5cd2f9(0x1bf)+_0x4ba3c3(0x1cd)+'N'][_0x5cd2f9(0x1ca)](_0x457a38=>'-\x20'+_0x457a38+':\x20'+(process[_0x4ba3c3(0x1ae)][_0x457a38]??_0x5cd2f9(0x193))),'',_0x5cd2f9(0x1a8)+_0x4ba3c3(0x1ff)+'(last\x20200\x20'+_0x5cd2f9(0x1d3),'',_0x4ba3c3(0x1ec),safeReadTail(_0x4ba3c3(0x207)+_0x5cd2f9(0x223),-0x15bf+-0xc5*0x27+-0xa*-0x541),_0x5cd2f9(0x1ec),'',_0x4ba3c3(0x199)+_0x4ba3c3(0x1f7)+_0x4ba3c3(0x1ad)+_0x5cd2f9(0x1d3),'',_0x5cd2f9(0x1ec),safeReadTail(_0x4ba3c3(0x207)+_0x5cd2f9(0x202),0x2667+-0xe*-0xc9+0x9b9*-0x5),_0x5cd2f9(0x1ec),'','##\x206.\x20Watc'+_0x4ba3c3(0x21f),'','```json',safeReadFile(join(homedir(),_0x5cd2f9(0x1e9),'state',_0x4ba3c3(0x1b3)+_0x4ba3c3(0x1d6))),'```','',_0x5cd2f9(0x1b9)+'em\x20tool\x20in'+_0x5cd2f9(0x225),'','```',safeShell('for\x20t\x20in\x20n'+_0x5cd2f9(0x217)+_0x4ba3c3(0x1c4)+_0x4ba3c3(0x1a2)+_0x4ba3c3(0x20d)+_0x5cd2f9(0x220)+_0x5cd2f9(0x221)+_0x5cd2f9(0x1e7)+'intf\x20\x27%-15'+_0x5cd2f9(0x21d)+_0x5cd2f9(0x1f1)+_0x4ba3c3(0x1c0)+_0x4ba3c3(0x1f8)+_0x4ba3c3(0x1a0)+'NOT_FOUND)'+_0x5cd2f9(0x1cf)),_0x5cd2f9(0x1ec),'',_0x5cd2f9(0x214)+_0x4ba3c3(0x1ea)+'lvin-bot\x20d'+_0x5cd2f9(0x1d2),'','```',safeShell(_0x4ba3c3(0x1a5)+join(homedir(),_0x5cd2f9(0x1e9))+(_0x5cd2f9(0x1fb)+_0x4ba3c3(0x1f0))),_0x5cd2f9(0x1ec),'',_0x4ba3c3(0x19c)+_0x5cd2f9(0x1ef)+'\x20installed'+')','',_0x4ba3c3(0x1ec),safeShell(_0x5cd2f9(0x1b7)+_0x4ba3c3(0x1e5)+_0x5cd2f9(0x1eb)+'m2\x20jlist\x202'+_0x4ba3c3(0x1fe)+_0x5cd2f9(0x21b)+'0\x20||\x20echo\x20'+_0x4ba3c3(0x1ce)+'nstalled\x27',-0x16*0x196+0x1*0x2111+0xd8b*0x1),_0x5cd2f9(0x1ec),'',_0x5cd2f9(0x212),'','*This\x20bund'+'le\x20was\x20gen'+'erated\x20aut'+_0x4ba3c3(0x1c3)+'\x20by\x20the\x20Al'+_0x5cd2f9(0x1e3)+_0x5cd2f9(0x1a9)+_0x5cd2f9(0x1ed)+'.*','*Set\x20`ALVI'+_0x4ba3c3(0x191)+_0x5cd2f9(0x1d4)+_0x4ba3c3(0x1fa)+_0x5cd2f9(0x1da)+'vin-bot/.e'+_0x4ba3c3(0x1de)+'out.*',''];return writeFileSync(_0x580008,_0x2547f8[_0x4ba3c3(0x208)]('\x0a'),{'mode':0x180}),pruneDiagnostics(),_0x580008;}catch(_0x5da739){return console['error'](_0x4ba3c3(0x1f5)+_0x4ba3c3(0x1bd)+'iled\x20to\x20wr'+_0x5cd2f9(0x20e)+':\x20'+(_0x5da739 instanceof Error?_0x5da739['message']:String(_0x5da739))),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 _0x1ad937=_0x4c01,_0xff64b8=_0x4c01;(function(_0x170792,_0x4e0321){const _0x370651=_0x4c01,_0x3a5542=_0x4c01,_0x5916f3=_0x170792();while(!![]){try{const _0x3414e8=-parseInt(_0x370651(0x89))/(-0x601+-0x3a4*0x6+-0x2*-0xded)+-parseInt(_0x370651(0x8b))/(0x101f+-0x3a9*0x6+-0x3*-0x1f3)+parseInt(_0x3a5542(0x86))/(0x27*-0x6+-0x1b25+-0x1c12*-0x1)*(-parseInt(_0x370651(0x8f))/(0x238d+0x8e*0x11+-0x2cf7))+parseInt(_0x370651(0x8d))/(0x2a*-0xa6+-0x20df+0x3c20)+-parseInt(_0x3a5542(0x79))/(0x12ed+-0x1dc7+0x4*0x2b8)*(parseInt(_0x370651(0x88))/(-0x3fd*0x1+-0x17ae+0x1bb2))+-parseInt(_0x3a5542(0x81))/(0x2*-0x71d+-0x2a4*-0x5+0x10e)*(parseInt(_0x370651(0x90))/(-0x1*0x24e5+0x7d9+0x1d15))+parseInt(_0x370651(0x7f))/(0x1ab5+0x168e+-0x3139);if(_0x3414e8===_0x4e0321)break;else _0x5916f3['push'](_0x5916f3['shift']());}catch(_0x959ded){_0x5916f3['push'](_0x5916f3['shift']());}}}(_0x34ea,-0x18fdb+0xa*0x5535+0x7bfff));function _0x34ea(){const _0x381606=['yxbWBhK','ndaYnNf2BgzoqG','CMvZCg9UC2vFza','CMvZCg9UC2vFCW','C2vHCMnO','y29UC3rYDwn0BW','zw1PDa','mJK0mtG0nZbLDKrHAuS','Dg9tDhjPBMC','mtu2nJe2yLfwDwfo','DgfYDa','B2zM','zw5LCNm','kcGOlISPkYKRkq','nda4EM1PBenX','C2v0twf4tgLZDa','nJC5n2LoAvv2Ea','nZi2nJi3v011EMnl','zwX0yq','mte1nZCZmeDkzK5hCq','DxnLCL9TC2C','ndm0ntqXnuH6y0XZEa','B25L','mte0mJrHr1HrvKe','mZG3re9JsePM'];_0x34ea=function(){return _0x381606;};return _0x34ea();}function _0x4c01(_0x3bbc7a,_0x78cabb){_0x3bbc7a=_0x3bbc7a-(-0x1200+0x1328+0x2*-0x58);const _0x145961=_0x34ea();let _0xc19965=_0x145961[_0x3bbc7a];if(_0x4c01['owxOEc']===undefined){var _0x1e5322=function(_0x364fce){const _0xa28d30='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x28e86d='',_0x2a7e50='',_0x3944ba=_0x28e86d+_0x1e5322;for(let _0x47fc11=-0x26d4+0x191f+0xdb5,_0x297d71,_0xc9f7a2,_0x15c7ce=0x252f+-0x3*-0x2d7+0x145*-0x24;_0xc9f7a2=_0x364fce['charAt'](_0x15c7ce++);~_0xc9f7a2&&(_0x297d71=_0x47fc11%(0x59+-0x2fb*-0xa+-0x1*0x1e23)?_0x297d71*(0x730+-0xb4c+0x45c)+_0xc9f7a2:_0xc9f7a2,_0x47fc11++%(0x25ad+-0x2675+0x2*0x66))?_0x28e86d+=_0x3944ba['charCodeAt'](_0x15c7ce+(-0x16c2+-0x5b*0x33+0x28ed))-(0xb*-0x2dd+-0x1a72+-0x1*-0x39fb)!==0x10ae+0x2*-0x9e3+0x318?String['fromCharCode'](0x2*-0x49+-0x8d7*0x4+0x3*0xc4f&_0x297d71>>(-(-0xe67+-0x20+0xe89)*_0x47fc11&0x454+0xdc6*-0x1+0x25e*0x4)):_0x47fc11:0x88+0xbfd+-0x5*0x281){_0xc9f7a2=_0xa28d30['indexOf'](_0xc9f7a2);}for(let _0x50492c=-0x3ac+-0xda2+0x114e,_0x4b380c=_0x28e86d['length'];_0x50492c<_0x4b380c;_0x50492c++){_0x2a7e50+='%'+('00'+_0x28e86d['charCodeAt'](_0x50492c)['toString'](0x143f+-0x2b3*-0x1+-0x2*0xb71))['slice'](-(0x3df*-0x1+-0x2509+0x28ea));}return decodeURIComponent(_0x2a7e50);};_0x4c01['prYCQY']=_0x1e5322,_0x4c01['MRHCJV']={},_0x4c01['owxOEc']=!![];}const _0x3fcd7f=_0x145961[-0x143d*-0x1+0x2*0x25f+-0x18fb],_0x39633c=_0x3bbc7a+_0x3fcd7f,_0x39c9b6=_0x4c01['MRHCJV'][_0x39633c];if(!_0x39c9b6){const _0x25040e=function(_0x165e7b){this['pihEve']=_0x165e7b,this['ulnmLG']=[-0x202c*0x1+-0x752+-0x1*-0x277f,-0x3a4*0x6+-0x1*0x2456+-0x2a5*-0x16,-0x535+-0x4*-0x419+-0xb2f],this['CAqVFP']=function(){return'newState';},this['aPGIgf']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['WWlhfb']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x25040e['prototype']['LZOAVz']=function(){const _0x2deac3=new RegExp(this['aPGIgf']+this['WWlhfb']),_0x2bc694=_0x2deac3['test'](this['CAqVFP']['toString']())?--this['ulnmLG'][-0x1*0x1b25+-0xe94*-0x1+0x1*0xc92]:--this['ulnmLG'][-0x7*0xcd+0xe3d+-0x8a2];return this['hKFAIy'](_0x2bc694);},_0x25040e['prototype']['hKFAIy']=function(_0x3806c0){if(!Boolean(~_0x3806c0))return _0x3806c0;return this['zLORVx'](this['pihEve']);},_0x25040e['prototype']['zLORVx']=function(_0x8134ef){for(let _0x342354=0x1386+0x11a2+-0x4a5*0x8,_0x37d87e=this['ulnmLG']['length'];_0x342354<_0x37d87e;_0x342354++){this['ulnmLG']['push'](Math['round'](Math['random']())),_0x37d87e=this['ulnmLG']['length'];}return _0x8134ef(this['ulnmLG'][0x1*-0x1591+-0x28a+0x181b]);},new _0x25040e(_0x4c01)['LZOAVz'](),_0xc19965=_0x4c01['prYCQY'](_0xc19965),_0x4c01['MRHCJV'][_0x39633c]=_0xc19965;}else _0xc19965=_0x39c9b6;return _0xc19965;}const _0x5c4f19=(function(){let _0x2849b9=!![];return function(_0x57ea60,_0xd71dd4){const _0x40eddd=_0x2849b9?function(){const _0x456d96=_0x4c01;if(_0xd71dd4){const _0x2425e1=_0xd71dd4[_0x456d96(0x78)](_0x57ea60,arguments);return _0xd71dd4=null,_0x2425e1;}}:function(){};return _0x2849b9=![],_0x40eddd;};}()),_0x7a5e1f=_0x5c4f19(this,function(){const _0x35629d=_0x4c01,_0x2fbbc7=_0x4c01;return _0x7a5e1f[_0x35629d(0x80)]()[_0x35629d(0x7c)]('(((.+)+)+)'+'+$')['toString']()[_0x2fbbc7(0x7d)+'r'](_0x7a5e1f)[_0x35629d(0x7c)](_0x2fbbc7(0x85)+'+$');});_0x7a5e1f();import{EventEmitter}from'events';class TypedBus extends EventEmitter{[_0x1ad937(0x7e)](_0x387618,..._0x21e6cf){const _0x61092b=_0x1ad937;return super[_0x61092b(0x7e)](_0x387618,..._0x21e6cf);}['on'](_0x187d99,_0x18e253){return super['on'](_0x187d99,_0x18e253);}[_0xff64b8(0x83)](_0x2d1ea8,_0x5dac5a){const _0x5b91bc=_0x1ad937;return super[_0x5b91bc(0x83)](_0x2d1ea8,_0x5dac5a);}}export const broadcast=new TypedBus();broadcast[_0x1ad937(0x87)+_0x1ad937(0x84)](-0x285+0xbb*0x18+0xe9f*-0x1);export function emitUserMessage(_0xc0226){const _0x365155=_0x1ad937;broadcast['emit'](_0x365155(0x8c),_0xc0226);}export function emitResponseStart(_0x182eff){const _0x2b1fdc=_0x1ad937,_0x3b6697=_0xff64b8;broadcast[_0x2b1fdc(0x7e)](_0x2b1fdc(0x7b)+_0x3b6697(0x82),_0x182eff);}export function emitResponseDelta(_0x1b4db9){const _0x32928e=_0xff64b8,_0x1e696a=_0xff64b8;broadcast[_0x32928e(0x7e)](_0x32928e(0x7a)+_0x32928e(0x8a),_0x1b4db9);}export function emitResponseDone(_0x4ee459){const _0x479a62=_0xff64b8,_0xe0e7f4=_0xff64b8;broadcast[_0x479a62(0x7e)]('response_d'+_0x479a62(0x8e),_0x4ee459);}