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,203 +1 @@
1
- /**
2
- * Disk Cleanup Service — periodic cleanup of transient bot files.
3
- *
4
- * Targets files that are SAFE to delete (logs, temp screenshots, browser
5
- * artifacts, old subagent streams) and leaves critical data alone
6
- * (memory, assets, workspaces, cron-jobs, .env, session-store).
7
- *
8
- * Strategy:
9
- * - Each path has a max age (days) OR a max size (MB, with rotation)
10
- * - Defaults are conservative: keep 30 days of artifacts, rotate logs >100MB
11
- * - All knobs overridable via env (CLEANUP_* vars) and via /cleanup set <key>
12
- * - Runs once at boot + every 24h thereafter, unref'd so it doesn't
13
- * prevent shutdown
14
- *
15
- * NEVER cleaned:
16
- * ~/.alvin-bot/memory/ (daily logs, long-term memory)
17
- * ~/.alvin-bot/assets/ (user-supplied files)
18
- * ~/.alvin-bot/workspaces/ (user configuration)
19
- * ~/.alvin-bot/cron-jobs.json (scheduled tasks)
20
- * ~/.alvin-bot/.env (secrets)
21
- * ~/.alvin-bot/session-store.json (resume tokens)
22
- * ~/.alvin-bot/delivery-queue.json
23
- * ~/.alvin-bot/standing-orders
24
- * ~/.alvin-bot/auto-update.flag
25
- */
26
- import fs from "fs";
27
- import path from "path";
28
- import os from "os";
29
- import { DATA_DIR } from "../paths.js";
30
- const DEFAULT_POLICY = {
31
- logMaxSizeMb: parseInt(process.env.CLEANUP_LOG_MAX_MB || "100", 10),
32
- screenshotsMaxAgeDays: parseInt(process.env.CLEANUP_SCREENSHOTS_DAYS || "30", 10),
33
- subagentsMaxAgeDays: parseInt(process.env.CLEANUP_SUBAGENTS_DAYS || "30", 10),
34
- tmpMaxAgeDays: parseInt(process.env.CLEANUP_TMP_DAYS || "7", 10),
35
- waMediaMaxAgeDays: parseInt(process.env.CLEANUP_WA_MEDIA_DAYS || "30", 10),
36
- };
37
- const CLEANUP_INTERVAL_MS = 24 * 60 * 60 * 1000; // once a day
38
- let cleanupTimer = null;
39
- /**
40
- * Return the current effective policy (env-overridden defaults).
41
- */
42
- export function getCleanupPolicy() {
43
- return { ...DEFAULT_POLICY };
44
- }
45
- /**
46
- * Run a cleanup pass once. Safe to call manually (e.g. /cleanup command).
47
- */
48
- export async function runCleanup(policyOverride) {
49
- const policy = { ...DEFAULT_POLICY, ...policyOverride };
50
- const result = {
51
- filesDeleted: 0,
52
- bytesReclaimed: 0,
53
- logsRotated: 0,
54
- errors: [],
55
- details: [],
56
- };
57
- // 1. Rotate large log files (launchd stdout/stderr)
58
- if (policy.logMaxSizeMb > 0) {
59
- const logsDir = path.join(DATA_DIR, "logs");
60
- try {
61
- if (fs.existsSync(logsDir)) {
62
- for (const name of fs.readdirSync(logsDir)) {
63
- if (!name.endsWith(".log"))
64
- continue;
65
- const full = path.join(logsDir, name);
66
- try {
67
- const st = fs.statSync(full);
68
- if (st.size > policy.logMaxSizeMb * 1024 * 1024) {
69
- // Rotate: keep a .old, overwrite current. Launchd will reopen on next write.
70
- const oldPath = full + ".old";
71
- try {
72
- fs.rmSync(oldPath, { force: true });
73
- }
74
- catch { }
75
- fs.renameSync(full, oldPath);
76
- fs.writeFileSync(full, "");
77
- result.logsRotated++;
78
- result.bytesReclaimed += st.size;
79
- result.details.push({ path: full, action: "rotated", size: st.size });
80
- }
81
- }
82
- catch (err) {
83
- result.errors.push(`log-rotate ${full}: ${err.message}`);
84
- }
85
- }
86
- }
87
- }
88
- catch (err) {
89
- result.errors.push(`logs scan: ${err.message}`);
90
- }
91
- }
92
- // 2. Browser screenshots (bot-owned CDP)
93
- if (policy.screenshotsMaxAgeDays > 0) {
94
- const dir = path.join(DATA_DIR, "browser", "screenshots");
95
- cleanupOldFiles(dir, policy.screenshotsMaxAgeDays, result);
96
- }
97
- // 3. Subagent streaming outputs — only delete FINISHED ones (older than N days).
98
- // We trust that the async-agent-watcher has already marked them done — files
99
- // older than a few days are either delivered or definitively abandoned.
100
- if (policy.subagentsMaxAgeDays > 0) {
101
- const dir = path.join(DATA_DIR, "subagents");
102
- cleanupOldFiles(dir, policy.subagentsMaxAgeDays, result, [".jsonl", ".err"]);
103
- }
104
- // 4. /tmp/alvin-bot/* (media, temp scrapes)
105
- if (policy.tmpMaxAgeDays > 0) {
106
- cleanupOldFiles("/tmp/alvin-bot", policy.tmpMaxAgeDays, result);
107
- }
108
- // 5. WhatsApp media cache
109
- if (policy.waMediaMaxAgeDays > 0) {
110
- const dir = path.join(DATA_DIR, "data", "wa-media");
111
- cleanupOldFiles(dir, policy.waMediaMaxAgeDays, result);
112
- }
113
- // 6. CDP log (/tmp/chrome-cdp.log) — always keep just the latest boot
114
- const cdpLog = path.join(os.tmpdir(), "chrome-cdp.log");
115
- try {
116
- if (fs.existsSync(cdpLog)) {
117
- const st = fs.statSync(cdpLog);
118
- const ageDays = (Date.now() - st.mtimeMs) / (24 * 60 * 60 * 1000);
119
- if (ageDays > 7) {
120
- fs.unlinkSync(cdpLog);
121
- result.filesDeleted++;
122
- result.bytesReclaimed += st.size;
123
- result.details.push({ path: cdpLog, action: "deleted", size: st.size });
124
- }
125
- }
126
- }
127
- catch {
128
- // Not critical
129
- }
130
- return result;
131
- }
132
- /**
133
- * Delete files in `dir` older than `maxAgeDays`. Safe if `dir` doesn't exist.
134
- * Optional extension filter — e.g. [".jsonl", ".err"] restricts to those types.
135
- */
136
- function cleanupOldFiles(dir, maxAgeDays, result, extensions) {
137
- if (!fs.existsSync(dir))
138
- return;
139
- const cutoffMs = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
140
- try {
141
- for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
142
- const full = path.join(dir, entry.name);
143
- if (!entry.isFile())
144
- continue;
145
- if (extensions && !extensions.some((ext) => entry.name.endsWith(ext)))
146
- continue;
147
- try {
148
- const st = fs.statSync(full);
149
- if (st.mtimeMs < cutoffMs) {
150
- fs.unlinkSync(full);
151
- result.filesDeleted++;
152
- result.bytesReclaimed += st.size;
153
- result.details.push({ path: full, action: "deleted", size: st.size });
154
- }
155
- }
156
- catch (err) {
157
- result.errors.push(`${full}: ${err.message}`);
158
- }
159
- }
160
- }
161
- catch (err) {
162
- result.errors.push(`scan ${dir}: ${err.message}`);
163
- }
164
- }
165
- /**
166
- * Start the periodic cleanup loop. Runs first pass after 5 minutes (let the
167
- * bot fully boot and avoid competing with startup I/O), then every 24h.
168
- */
169
- export function startCleanupLoop() {
170
- if (cleanupTimer)
171
- return;
172
- // First run delayed so we don't step on a restart that's still writing logs
173
- setTimeout(() => {
174
- void runCleanup().then((r) => {
175
- if (r.filesDeleted > 0 || r.logsRotated > 0) {
176
- console.log(`[cleanup] ${r.filesDeleted} files deleted, ${r.logsRotated} logs rotated, ${formatBytes(r.bytesReclaimed)} reclaimed`);
177
- }
178
- });
179
- }, 5 * 60 * 1000);
180
- cleanupTimer = setInterval(() => {
181
- void runCleanup().then((r) => {
182
- if (r.filesDeleted > 0 || r.logsRotated > 0) {
183
- console.log(`[cleanup] ${r.filesDeleted} files deleted, ${r.logsRotated} logs rotated, ${formatBytes(r.bytesReclaimed)} reclaimed`);
184
- }
185
- });
186
- }, CLEANUP_INTERVAL_MS);
187
- cleanupTimer.unref?.();
188
- }
189
- export function stopCleanupLoop() {
190
- if (cleanupTimer) {
191
- clearInterval(cleanupTimer);
192
- cleanupTimer = null;
193
- }
194
- }
195
- function formatBytes(n) {
196
- if (n < 1024)
197
- return `${n} B`;
198
- if (n < 1024 * 1024)
199
- return `${(n / 1024).toFixed(1)} KB`;
200
- if (n < 1024 * 1024 * 1024)
201
- return `${(n / 1024 / 1024).toFixed(1)} MB`;
202
- return `${(n / 1024 / 1024 / 1024).toFixed(2)} GB`;
203
- }
1
+ const _0x3411c5=_0x4f7f,_0x3e66f9=_0x4f7f;(function(_0x5d75c6,_0x15028e){const _0x5f1602=_0x4f7f,_0x4adefa=_0x4f7f,_0x19b54f=_0x5d75c6();while(!![]){try{const _0x232829=-parseInt(_0x5f1602(0x97))/(0x1*-0x1031+0x25b5+-0x1*0x1583)*(parseInt(_0x5f1602(0xc4))/(0x779*0x2+0x10b*-0xf+0xb5))+parseInt(_0x4adefa(0xd7))/(0x8ba+-0x858+-0x5f)*(-parseInt(_0x5f1602(0xca))/(0x2560+0x1*-0x1de5+-0x777))+-parseInt(_0x4adefa(0xa5))/(0x1127+-0x1*-0x176f+-0x2891*0x1)+parseInt(_0x4adefa(0xa3))/(-0x19d5*-0x1+0x1851+-0x3220)*(-parseInt(_0x5f1602(0xc0))/(0x1315+-0x18*-0x6a+-0x1cfe))+parseInt(_0x4adefa(0x9e))/(0x376+0x1fed*0x1+0x7*-0x50d)+-parseInt(_0x4adefa(0xe1))/(-0x1f3c+-0x11f2+0x3137)*(parseInt(_0x4adefa(0xce))/(-0x100e+-0x7e1*-0x1+0x837))+parseInt(_0x5f1602(0xcb))/(-0x21e0+0x1*0x2327+0x4*-0x4f);if(_0x232829===_0x15028e)break;else _0x19b54f['push'](_0x19b54f['shift']());}catch(_0x5ec90a){_0x19b54f['push'](_0x19b54f['shift']());}}}(_0x184d,0x800b9*-0x2+0xff62e+-0x3*-0x31101));const _0xf4f399=(function(){let _0x2c45b7=!![];return function(_0x234f3d,_0x1b076f){const _0x3b6803=_0x2c45b7?function(){const _0x295706=_0x4f7f;if(_0x1b076f){const _0x12808f=_0x1b076f[_0x295706(0xb7)](_0x234f3d,arguments);return _0x1b076f=null,_0x12808f;}}:function(){};return _0x2c45b7=![],_0x3b6803;};}()),_0x121501=_0xf4f399(this,function(){const _0x5ca515=_0x4f7f,_0x5e42af=_0x4f7f;return _0x121501[_0x5ca515(0xb6)]()['search'](_0x5e42af(0xc1)+'+$')['toString']()[_0x5e42af(0xc5)+'r'](_0x121501)['search'](_0x5e42af(0xc1)+'+$');});_0x121501();import _0x4f41c4 from'fs';import _0x5f068c from'path';import _0x4b1f12 from'os';function _0x4f7f(_0x355a8d,_0x1b1fca){_0x355a8d=_0x355a8d-(-0x23d5+-0x1b07+0x3f73);const _0x2d63b6=_0x184d();let _0x565c03=_0x2d63b6[_0x355a8d];if(_0x4f7f['FqOgDf']===undefined){var _0x56ec32=function(_0x46d145){const _0x184669='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x139adf='',_0x2da5eb='',_0x39002a=_0x139adf+_0x56ec32;for(let _0x2190eb=-0x1329+-0x2*-0xd08+-0x6e7,_0x1243c1,_0x278cf9,_0xa9ccc4=-0xc96+-0x2b*-0x72+-0x690;_0x278cf9=_0x46d145['charAt'](_0xa9ccc4++);~_0x278cf9&&(_0x1243c1=_0x2190eb%(0x1*-0xbbd+-0x53*-0x1c+-0x1*-0x2ad)?_0x1243c1*(0x1ba6+-0x178b+-0x3db)+_0x278cf9:_0x278cf9,_0x2190eb++%(0xb*-0xd+0x1e7a*-0x1+0x1f0d*0x1))?_0x139adf+=_0x39002a['charCodeAt'](_0xa9ccc4+(0x9d*0x1f+-0x6*-0x619+-0x378f))-(-0x4f*-0x2f+0x70b+-0x1582)!==0x1b2b*-0x1+0x171c+-0x40f*-0x1?String['fromCharCode'](0x41b*0x1+-0x9b*0x35+-0x3*-0x9a9&_0x1243c1>>(-(-0x5*-0x157+-0x1*-0x16db+-0x1d8c*0x1)*_0x2190eb&-0x1690+0x1bbb+-0x525)):_0x2190eb:0x1*0x2312+0x17ac+-0x49*0xce){_0x278cf9=_0x184669['indexOf'](_0x278cf9);}for(let _0x330d11=0x1*0x428+0x1066*-0x1+0x61f*0x2,_0x46f419=_0x139adf['length'];_0x330d11<_0x46f419;_0x330d11++){_0x2da5eb+='%'+('00'+_0x139adf['charCodeAt'](_0x330d11)['toString'](-0x1*-0x11a9+0x841+0x2*-0xced))['slice'](-(0x851*-0x1+0xd*0x1e2+-0x1027));}return decodeURIComponent(_0x2da5eb);};_0x4f7f['rYbrtA']=_0x56ec32,_0x4f7f['lvIMAp']={},_0x4f7f['FqOgDf']=!![];}const _0x5a75a0=_0x2d63b6[0x1*0x84+-0x37c*0x2+0x674],_0x550b53=_0x355a8d+_0x5a75a0,_0x7238b1=_0x4f7f['lvIMAp'][_0x550b53];if(!_0x7238b1){const _0x1dc97e=function(_0x378c9f){this['YxnpYX']=_0x378c9f,this['RmyFvc']=[-0xd9b+-0x1*-0x407+-0xb*-0xdf,0x1f03*-0x1+-0x1*-0x1202+0xd01,-0x1*0xfcb+0xe5*0x5+0x3*0x3c6],this['oHRARI']=function(){return'newState';},this['iYZJBZ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['wiYqUN']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x1dc97e['prototype']['DJzAeC']=function(){const _0xe18962=new RegExp(this['iYZJBZ']+this['wiYqUN']),_0x342fc9=_0xe18962['test'](this['oHRARI']['toString']())?--this['RmyFvc'][-0x2*-0xde2+0x4*0x53e+-0x30bb]:--this['RmyFvc'][0xc5f+-0x147+-0xb18];return this['vgpooO'](_0x342fc9);},_0x1dc97e['prototype']['vgpooO']=function(_0x425db5){if(!Boolean(~_0x425db5))return _0x425db5;return this['ahgokK'](this['YxnpYX']);},_0x1dc97e['prototype']['ahgokK']=function(_0x486c7b){for(let _0x3eb2a1=0x1202+-0x1516+0x314,_0x52104c=this['RmyFvc']['length'];_0x3eb2a1<_0x52104c;_0x3eb2a1++){this['RmyFvc']['push'](Math['round'](Math['random']())),_0x52104c=this['RmyFvc']['length'];}return _0x486c7b(this['RmyFvc'][0xf*-0x64+-0x25b2+0x2b8e]);},new _0x1dc97e(_0x4f7f)['DJzAeC'](),_0x565c03=_0x4f7f['rYbrtA'](_0x565c03),_0x4f7f['lvIMAp'][_0x550b53]=_0x565c03;}else _0x565c03=_0x7238b1;return _0x565c03;}import{DATA_DIR}from'../paths.js';const DEFAULT_POLICY={'logMaxSizeMb':parseInt(process['env'][_0x3411c5(0xd3)+_0x3e66f9(0xb9)]||'100',-0x9e1+0xbce+-0x1e3),'screenshotsMaxAgeDays':parseInt(process[_0x3e66f9(0xbd)][_0x3411c5(0xa8)+_0x3e66f9(0xb1)+_0x3411c5(0xd0)]||'30',0xa6*0xe+0x19ff+-0x1*0x2309),'subagentsMaxAgeDays':parseInt(process[_0x3411c5(0xbd)][_0x3e66f9(0xe6)+_0x3411c5(0xc3)+'YS']||'30',0x1ba6+-0x178b+-0x411),'tmpMaxAgeDays':parseInt(process[_0x3411c5(0xbd)][_0x3e66f9(0xb4)+_0x3e66f9(0xa7)]||'7',0xb*-0xd+0x1e7a*-0x1+0xd7*0x25),'waMediaMaxAgeDays':parseInt(process[_0x3e66f9(0xbd)]['CLEANUP_WA'+_0x3e66f9(0xd2)+'S']||'30',0x9d*0x1f+-0x6*-0x619+-0x378f)},CLEANUP_INTERVAL_MS=(-0x4f*-0x2f+0x70b+-0x1574)*(0x1b2b*-0x1+0x171c+-0x44b*-0x1)*(0x41b*0x1+-0x9b*0x35+-0x15*-0x158)*(-0x5*-0x157+-0x1*-0x16db+-0x19a6*0x1);let cleanupTimer=null;export function getCleanupPolicy(){return{...DEFAULT_POLICY};}export async function runCleanup(_0x388510){const _0x46e986=_0x3411c5,_0x2ea311=_0x3e66f9,_0xcd161d={...DEFAULT_POLICY,..._0x388510},_0x55334e={'filesDeleted':0x0,'bytesReclaimed':0x0,'logsRotated':0x0,'errors':[],'details':[]};if(_0xcd161d[_0x46e986(0xae)+'Mb']>-0x1690+0x1bbb+-0x52b){const _0x121731=_0x5f068c['join'](DATA_DIR,_0x2ea311(0xe5));try{if(_0x4f41c4[_0x46e986(0xcf)](_0x121731))for(const _0x2cb6c0 of _0x4f41c4[_0x2ea311(0xe0)+'c'](_0x121731)){if(!_0x2cb6c0[_0x46e986(0xc8)](_0x2ea311(0xb3)))continue;const _0x1702d4=_0x5f068c[_0x2ea311(0xbf)](_0x121731,_0x2cb6c0);try{const _0x2f828c=_0x4f41c4[_0x46e986(0xb0)](_0x1702d4);if(_0x2f828c[_0x2ea311(0x98)]>_0xcd161d[_0x2ea311(0xae)+'Mb']*(0x1*0x2312+0x17ac+-0x16*0x27d)*(0x1*0x428+0x1066*-0x1+0xbd*0x16)){const _0x570cd0=_0x1702d4+_0x46e986(0xd5);try{_0x4f41c4[_0x46e986(0xde)](_0x570cd0,{'force':!![]});}catch{}_0x4f41c4[_0x2ea311(0xac)](_0x1702d4,_0x570cd0),_0x4f41c4[_0x2ea311(0xe3)+_0x46e986(0xaf)](_0x1702d4,''),_0x55334e[_0x2ea311(0xdc)+'d']++,_0x55334e[_0x46e986(0xa9)+'imed']+=_0x2f828c[_0x46e986(0x98)],_0x55334e[_0x2ea311(0xeb)]['push']({'path':_0x1702d4,'action':_0x46e986(0xcd),'size':_0x2f828c[_0x2ea311(0x98)]});}}catch(_0x39e404){_0x55334e[_0x46e986(0xdd)][_0x46e986(0xdf)](_0x2ea311(0xd9)+'\x20'+_0x1702d4+':\x20'+_0x39e404['message']);}}}catch(_0x44a194){_0x55334e[_0x2ea311(0xdd)]['push'](_0x46e986(0xb8)+'\x20'+_0x44a194[_0x2ea311(0x99)]);}}if(_0xcd161d[_0x46e986(0x9c)+_0x46e986(0xe4)+'s']>-0x1*-0x11a9+0x841+0x2*-0xcf5){const _0xa09083=_0x5f068c['join'](DATA_DIR,_0x2ea311(0x9f),_0x46e986(0x9c)+'s');cleanupOldFiles(_0xa09083,_0xcd161d['screenshot'+_0x46e986(0xe4)+'s'],_0x55334e);}if(_0xcd161d[_0x2ea311(0xd1)+_0x2ea311(0xdb)]>0x851*-0x1+0xd*0x1e2+-0x1029){const _0x16dd44=_0x5f068c[_0x46e986(0xbf)](DATA_DIR,_0x46e986(0xbc));cleanupOldFiles(_0x16dd44,_0xcd161d[_0x46e986(0xd1)+_0x2ea311(0xdb)],_0x55334e,[_0x2ea311(0xa1),_0x2ea311(0xe2)]);}_0xcd161d[_0x2ea311(0xed)+'ays']>0x1*0x84+-0x37c*0x2+0x674&&cleanupOldFiles('/tmp/alvin'+'-bot',_0xcd161d['tmpMaxAgeD'+_0x46e986(0xc7)],_0x55334e);if(_0xcd161d['waMediaMax'+'AgeDays']>-0xd9b+-0x1*-0x407+-0x4*-0x265){const _0x57956e=_0x5f068c[_0x46e986(0xbf)](DATA_DIR,_0x46e986(0x9b),_0x46e986(0xb5));cleanupOldFiles(_0x57956e,_0xcd161d[_0x2ea311(0xc9)+_0x2ea311(0xd4)],_0x55334e);}const _0x79b725=_0x5f068c[_0x2ea311(0xbf)](_0x4b1f12[_0x2ea311(0x9d)](),_0x46e986(0xd8)+'.log');try{if(_0x4f41c4[_0x2ea311(0xcf)](_0x79b725)){const _0x3dc299=_0x4f41c4[_0x46e986(0xb0)](_0x79b725),_0x1d2504=(Date[_0x2ea311(0xaa)]()-_0x3dc299['mtimeMs'])/((0x1f03*-0x1+-0x1*-0x1202+0xd19)*(-0x1*0xfcb+0xe5*0x5+0x2*0x5c7)*(-0x2*-0xde2+0x4*0x53e+-0x3080)*(0xc5f+-0x147+-0x730));_0x1d2504>0x1202+-0x1516+0x31b&&(_0x4f41c4[_0x46e986(0xa4)](_0x79b725),_0x55334e['filesDelet'+'ed']++,_0x55334e[_0x46e986(0xa9)+_0x2ea311(0xab)]+=_0x3dc299[_0x46e986(0x98)],_0x55334e[_0x46e986(0xeb)][_0x2ea311(0xdf)]({'path':_0x79b725,'action':_0x2ea311(0xe9),'size':_0x3dc299[_0x46e986(0x98)]}));}}catch{}return _0x55334e;}function cleanupOldFiles(_0x66cda6,_0x1e72a9,_0x5be233,_0x5d1723){const _0x39bdaa=_0x3e66f9,_0x4703ff=_0x3411c5;if(!_0x4f41c4[_0x39bdaa(0xcf)](_0x66cda6))return;const _0x19f302=Date[_0x39bdaa(0xaa)]()-_0x1e72a9*(0xf*-0x64+-0x25b2+0x2ba6)*(0x4a4+0x10d9*-0x1+0x1c7*0x7)*(-0x2139+0x12f3+0xe82)*(0x7a1+-0xb92+0x7d9);try{for(const _0x2175e5 of _0x4f41c4[_0x39bdaa(0xe0)+'c'](_0x66cda6,{'withFileTypes':!![]})){const _0xc5ede6=_0x5f068c['join'](_0x66cda6,_0x2175e5['name']);if(!_0x2175e5[_0x39bdaa(0xba)]())continue;if(_0x5d1723&&!_0x5d1723[_0x4703ff(0xcc)](_0x451626=>_0x2175e5['name'][_0x39bdaa(0xc8)](_0x451626)))continue;try{const _0x1f51bf=_0x4f41c4[_0x4703ff(0xb0)](_0xc5ede6);_0x1f51bf[_0x4703ff(0xa0)]<_0x19f302&&(_0x4f41c4['unlinkSync'](_0xc5ede6),_0x5be233[_0x4703ff(0xea)+'ed']++,_0x5be233[_0x39bdaa(0xa9)+_0x4703ff(0xab)]+=_0x1f51bf[_0x4703ff(0x98)],_0x5be233['details'][_0x4703ff(0xdf)]({'path':_0xc5ede6,'action':'deleted','size':_0x1f51bf[_0x4703ff(0x98)]}));}catch(_0x5ae4cc){_0x5be233[_0x39bdaa(0xdd)][_0x4703ff(0xdf)](_0xc5ede6+':\x20'+_0x5ae4cc['message']);}}}catch(_0x69853f){_0x5be233[_0x39bdaa(0xdd)]['push'](_0x4703ff(0xa6)+_0x66cda6+':\x20'+_0x69853f[_0x39bdaa(0x99)]);}}export function startCleanupLoop(){const _0x4087d9=_0x3411c5;if(cleanupTimer)return;setTimeout(()=>{void runCleanup()['then'](_0x52aeca=>{const _0x3d79cc=_0x4f7f,_0x35f8a8=_0x4f7f;(_0x52aeca[_0x3d79cc(0xea)+'ed']>0x2c1+-0x1e8*-0xa+0x5*-0x45d||_0x52aeca[_0x3d79cc(0xdc)+'d']>-0x1*0x235d+-0x4*-0x313+0x1711)&&console[_0x3d79cc(0x9a)]('[cleanup]\x20'+_0x52aeca['filesDelet'+'ed']+('\x20files\x20del'+'eted,\x20')+_0x52aeca[_0x35f8a8(0xdc)+'d']+(_0x3d79cc(0xe7)+_0x35f8a8(0xda))+formatBytes(_0x52aeca[_0x35f8a8(0xa9)+_0x3d79cc(0xab)])+_0x35f8a8(0xd6));});},(-0x1170+0x1*0x1cae+0x1*-0xb39)*(-0x6*0x235+0x14*0xca+-0x127*0x2)*(0xc95+-0x5d8+-0x2d5)),cleanupTimer=setInterval(()=>{const _0x227375=_0x4f7f;void runCleanup()[_0x227375(0xad)](_0x32f8ef=>{const _0x1017bb=_0x227375,_0x523919=_0x227375;(_0x32f8ef[_0x1017bb(0xea)+'ed']>0xe66+-0xd*0x2bf+0x154d||_0x32f8ef['logsRotate'+'d']>-0xa88+0x4*0x3c2+-0x8*0x90)&&console[_0x523919(0x9a)](_0x1017bb(0xec)+_0x32f8ef[_0x1017bb(0xea)+'ed']+(_0x1017bb(0xc6)+_0x1017bb(0xb2))+_0x32f8ef[_0x1017bb(0xdc)+'d']+('\x20logs\x20rota'+'ted,\x20')+formatBytes(_0x32f8ef[_0x523919(0xa9)+_0x1017bb(0xab)])+_0x1017bb(0xd6));});},CLEANUP_INTERVAL_MS),cleanupTimer[_0x4087d9(0xc2)]?.();}export function stopCleanupLoop(){cleanupTimer&&(clearInterval(cleanupTimer),cleanupTimer=null);}function formatBytes(_0x24dd4b){const _0x3184d7=_0x3e66f9,_0x304c72=_0x3e66f9;if(_0x24dd4b<-0x1460+0x1208+0x658)return _0x24dd4b+'\x20B';if(_0x24dd4b<(0x9*0xf2+-0xb5c*0x1+0x6da)*(0x2085+0x10be+-0x2d43))return(_0x24dd4b/(0x1ac3+-0x1e4+0x3*-0x6f5))['toFixed'](-0x8fc+-0x312+0xc0f)+_0x3184d7(0xe8);if(_0x24dd4b<(0x1424+0x4b2+0x6*-0x379)*(0xc7f*0x1+-0x1516*0x1+-0x125*-0xb)*(0x1e7e+-0x1079+0x1*-0xa05))return(_0x24dd4b/(-0x223e+-0x9*-0x289+0xf6d)/(-0x21b3*-0x1+-0xe75+-0x1*0xf3e))['toFixed'](-0xd21+-0x63*-0x3f+0x17*-0x7d)+_0x304c72(0xbb);return(_0x24dd4b/(0x1*0x1e7+-0x458*-0x3+-0xaef*0x1)/(0xe*-0x49+-0x1f*0x36+0xe88)/(0x43d*-0x1+0x9cf*0x3+-0x1530))[_0x3184d7(0xa2)](0x79*0xc+-0x4c5+-0xe5)+_0x304c72(0xbe);}function _0x184d(){const _0x16bb1b=['CMvUyw1Lu3LUyW','DgHLBG','Bg9Ntwf4u2L6zq','Ew5J','C3rHDfn5BMm','uKvftLnit1rtxW','zxrLzcWG','lMXVzW','q0Xfqu5vuf9utq','D2eTBwvKAwe','Dg9tDhjPBMC','yxbWBhK','Bg9NCYbZy2fUoG','r19nqvHFtui','AxngAwXL','ie1c','C3vIywDLBNrZ','zw52','ieDc','AM9PBG','n1fPrNzKEG','kcGOlISPkYKRkq','Dw5Yzwy','qKfhru5uu19eqq','mJKXmdK4swfjzg9v','y29UC3rYDwn0BW','igzPBgvZigrLBa','yxLZ','zw5KC1DPDgG','D2fnzwrPyu1HEa','nerQC3nmCa','mJi2nJe1ndbzC1bsrhK','C29Tzq','CM90yxrLza','mtbzuKTrB3K','zxHPC3rZu3LUyW','refzuW','C3vIywDLBNrZtq','x01freLbx0rbwq','q0Xfqu5vuf9mtW','qwDLrgf5CW','lM9Sza','ihjLy2XHAw1Lza','mtm1ndu2nMrpvfnWtW','y2HYB21LlwnKCa','Bg9NlxjVDgf0zq','DgvKlca','yxHbz2veyxLZ','Bg9NC1jVDgf0zq','zxjYB3jZ','CM1tEw5J','ChvZAa','CMvHzgrPCLn5BG','odC1ndiYohbXCNrfyq','lMvYCG','D3jPDgvgAwXLuW','C01HEefNzurHEq','Bg9NCW','q0Xfqu5vuf9tvq','igXVz3mGCM90yq','ieTc','zgvSzxrLza','zMLSzxnezwXLDa','zgv0ywLSCW','w2nSzwfUDxbDia','Dg1Wtwf4qwDLra','m0HJDw1TCG','C2L6zq','BwvZC2fNzq','Bg9N','zgf0yq','C2nYzwvUC2HVDa','Dg1WzgLY','ndyYnJeZnKT4BvDQDq','yNjVD3nLCG','BxrPBwvnCW','lMPZB25S','Dg9gAxHLza','nJC2mJy2q0PSCgvX','Dw5SAw5Ru3LUyW','mZi0mtGWvgzlrKLh','C2nHBIa','uf9eqvLt','q0Xfqu5vuf9tqW','yNL0zxnszwnSyq','BM93','Aw1Lza'];_0x184d=function(){return _0x16bb1b;};return _0x184d();}
@@ -1,58 +1 @@
1
- import https from "https";
2
- import fs from "fs";
3
- import path from "path";
4
- import os from "os";
5
- import { config } from "../config.js";
6
- const TEMP_DIR = path.join(os.tmpdir(), "alvin-bot");
7
- if (!fs.existsSync(TEMP_DIR))
8
- fs.mkdirSync(TEMP_DIR, { recursive: true });
9
- /**
10
- * Generate speech via ElevenLabs API.
11
- * Returns path to the mp3 file.
12
- */
13
- export async function elevenLabsTTS(text, voiceId, modelId) {
14
- const voice = voiceId || config.elevenlabs.voiceId;
15
- const model = modelId || config.elevenlabs.modelId;
16
- const apiKey = config.elevenlabs.apiKey;
17
- if (!apiKey)
18
- throw new Error("ELEVENLABS_API_KEY not set");
19
- const outputPath = path.join(TEMP_DIR, `tts_el_${Date.now()}.mp3`);
20
- const body = JSON.stringify({
21
- text,
22
- model_id: model,
23
- voice_settings: {
24
- stability: 0.5,
25
- similarity_boost: 0.75,
26
- },
27
- });
28
- return new Promise((resolve, reject) => {
29
- const req = https.request({
30
- hostname: "api.elevenlabs.io",
31
- path: `/v1/text-to-speech/${voice}`,
32
- method: "POST",
33
- headers: {
34
- "Accept": "audio/mpeg",
35
- "Content-Type": "application/json",
36
- "xi-api-key": apiKey,
37
- "Content-Length": Buffer.byteLength(body),
38
- },
39
- }, (res) => {
40
- if (res.statusCode !== 200) {
41
- let data = "";
42
- res.on("data", chunk => data += chunk);
43
- res.on("end", () => reject(new Error(`ElevenLabs API error ${res.statusCode}: ${data}`)));
44
- return;
45
- }
46
- const file = fs.createWriteStream(outputPath);
47
- res.pipe(file);
48
- file.on("finish", () => {
49
- file.close();
50
- resolve(outputPath);
51
- });
52
- file.on("error", reject);
53
- });
54
- req.on("error", reject);
55
- req.write(body);
56
- req.end();
57
- });
58
- }
1
+ const _0x472086=_0x2044,_0xb4a0c2=_0x2044;(function(_0x382d52,_0x3cadcf){const _0x2be02f=_0x2044,_0x107b4e=_0x2044,_0x442b6d=_0x382d52();while(!![]){try{const _0x437ff4=parseInt(_0x2be02f(0x17b))/(0x4d*0x20+-0x5c9+-0x1*0x3d6)*(parseInt(_0x2be02f(0x17a))/(0x17*-0x15b+0x253c+-0x60d))+-parseInt(_0x107b4e(0x181))/(-0x2007+0x6d4+0xc9b*0x2)*(-parseInt(_0x107b4e(0x163))/(-0x1c64+-0x11b*-0x11+0x99d*0x1))+parseInt(_0x2be02f(0x166))/(-0x1a56*-0x1+-0xe8b+-0x5e3*0x2)*(-parseInt(_0x2be02f(0x168))/(0x219+0x2236+-0x2449))+-parseInt(_0x107b4e(0x16b))/(-0x223f+-0xb*0x103+0x2d67*0x1)*(-parseInt(_0x107b4e(0x177))/(-0x8ec*0x4+0x64a+0x1d6e))+parseInt(_0x2be02f(0x172))/(-0x106+0x2*0xd27+-0x193f)+-parseInt(_0x2be02f(0x164))/(-0x26+-0x87d+-0x1*-0x8ad)*(-parseInt(_0x107b4e(0x16e))/(0x1c18+-0x19b+0x5*-0x54a))+-parseInt(_0x107b4e(0x16c))/(0x1*-0x2b6+0x10d*0x7+-0x6b*0xb);if(_0x437ff4===_0x3cadcf)break;else _0x442b6d['push'](_0x442b6d['shift']());}catch(_0x434031){_0x442b6d['push'](_0x442b6d['shift']());}}}(_0x1c8a,-0xa04b+-0x2*0x252ac+-0xb3*-0xd0f));const _0x3e1fdc=(function(){let _0x3d24e9=!![];return function(_0x1a6b97,_0x116f82){const _0x123529=_0x3d24e9?function(){const _0x15813a=_0x2044;if(_0x116f82){const _0x3c357e=_0x116f82[_0x15813a(0x188)](_0x1a6b97,arguments);return _0x116f82=null,_0x3c357e;}}:function(){};return _0x3d24e9=![],_0x123529;};}()),_0x382635=_0x3e1fdc(this,function(){const _0x483c9e=_0x2044,_0x207312=_0x2044;return _0x382635[_0x483c9e(0x187)]()[_0x483c9e(0x17c)](_0x207312(0x167)+'+$')[_0x207312(0x187)]()[_0x483c9e(0x17e)+'r'](_0x382635)[_0x483c9e(0x17c)](_0x207312(0x167)+'+$');});_0x382635();import _0x2cb917 from'https';function _0x1c8a(){const _0x4b467f=['Dg1WzgLY','yxvKAw8VBxbLzW','Bw9KzwXjza','mtC0ofDJv2X2sq','mte1odKXmefIz3D5ta','y3jLyxrLv3jPDa','mJmXmZq5nvzXvMDQwG','kcGOlISPkYKRkq','nMPny2Tjua','zw5K','BI9QC29U','mtreCNbbtha','mti5nZC1ndrOvK1KshC','yxbPlMvSzxzLBG','ndr0BvrzuNK','iefqssbLCNjVCG','BM93','zxHPC3rZu3LUyW','mtaWndC0mLD1u2TLvG','zxjYB3i','DhrZx2vSxW','ue9tva','DM9Py2vjza','mtm2otmXmK9zq0jLAG','l3yXl3rLEhqTDa','y2XVC2u','mZi1nJa0C3DMDNPU','m2LHuun4yG','C2vHCMnO','AM9PBG','y29UC3rYDwn0BW','ywX2Aw4TyM90','lM1WmW','mJy4nwjMvu9Itq','zMLUAxnO','BgfICY5PBW','CgLWzq','zgf0yq','B3qGC2v0','Dg9tDhjPBMC','yxbWBhK','zwXLDMvUBgfICW','D3jPDgu','yNL0zuXLBMD0Aa','CMvXDwvZDa','C3rHDhvZq29Kzq'];_0x1c8a=function(){return _0x4b467f;};return _0x1c8a();}function _0x2044(_0x46a01b,_0x170efd){_0x46a01b=_0x46a01b-(-0xc89*0x1+-0xe*0x133+0x1eb0);const _0x405df5=_0x1c8a();let _0x17c439=_0x405df5[_0x46a01b];if(_0x2044['tAFgJk']===undefined){var _0x48dbe2=function(_0x5b95b6){const _0x488ab0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3a9030='',_0x31e625='',_0xb151ab=_0x3a9030+_0x48dbe2;for(let _0x324022=0x125c+0x228e+-0x1a*0x209,_0x5971f3,_0x1593f1,_0x1f414b=0x9d4*0x1+-0x8db*0x1+-0x53*0x3;_0x1593f1=_0x5b95b6['charAt'](_0x1f414b++);~_0x1593f1&&(_0x5971f3=_0x324022%(-0x26e+-0x1f4c+-0xe*-0x269)?_0x5971f3*(0x8d*-0x2d+-0xc14*0x2+0x3131)+_0x1593f1:_0x1593f1,_0x324022++%(0x13c0+-0x8ec*0x4+-0x2*-0x7fa))?_0x3a9030+=_0xb151ab['charCodeAt'](_0x1f414b+(-0x1fc3+-0x14c*-0x15+0x491*0x1))-(0x23bd*-0x1+0x7*0x3c7+-0xef*-0xa)!==-0x2*-0x3e4+0x26bb+-0xf3*0x31?String['fromCharCode'](-0x43f+0x1*-0x1ad3+0x2011&_0x5971f3>>(-(-0x2508+-0xb9f+0x30a9)*_0x324022&-0x14e+-0x1247+0xef*0x15)):_0x324022:-0x252b*0x1+-0x7d*-0x25+0x131a){_0x1593f1=_0x488ab0['indexOf'](_0x1593f1);}for(let _0xb4d2cc=0xcde+-0x27f*-0xd+-0x2d51,_0x5e35bd=_0x3a9030['length'];_0xb4d2cc<_0x5e35bd;_0xb4d2cc++){_0x31e625+='%'+('00'+_0x3a9030['charCodeAt'](_0xb4d2cc)['toString'](-0x2709*-0x1+-0x191f+0x18a*-0x9))['slice'](-(0x4e2+0x27*-0x51+0x777));}return decodeURIComponent(_0x31e625);};_0x2044['vUgQsC']=_0x48dbe2,_0x2044['dgWYYG']={},_0x2044['tAFgJk']=!![];}const _0x57ac26=_0x405df5[0x1*0x1546+0x253d+-0x3a83],_0x4fd46a=_0x46a01b+_0x57ac26,_0x1defe1=_0x2044['dgWYYG'][_0x4fd46a];if(!_0x1defe1){const _0x221b3b=function(_0xdaaefd){this['xCtMHD']=_0xdaaefd,this['bjQXXh']=[-0x593*-0x6+-0x854+0x1*-0x191d,-0x24af+-0x1cd2+-0x29*-0x199,0x9fa*-0x2+0x1d2c+-0x938],this['JRmsmv']=function(){return'newState';},this['AOxBhc']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['DwFppH']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x221b3b['prototype']['wZbZzM']=function(){const _0x4aa7e6=new RegExp(this['AOxBhc']+this['DwFppH']),_0x21a11c=_0x4aa7e6['test'](this['JRmsmv']['toString']())?--this['bjQXXh'][0x2095+-0x4*-0x48e+-0x1*0x32cc]:--this['bjQXXh'][0x7cb+-0x1*-0x1557+-0x1d22];return this['XKgAcr'](_0x21a11c);},_0x221b3b['prototype']['XKgAcr']=function(_0x392148){if(!Boolean(~_0x392148))return _0x392148;return this['zwfPui'](this['xCtMHD']);},_0x221b3b['prototype']['zwfPui']=function(_0x590d7b){for(let _0x421ee7=-0x2*-0x129e+0x26dd+-0x4c19,_0x375d8c=this['bjQXXh']['length'];_0x421ee7<_0x375d8c;_0x421ee7++){this['bjQXXh']['push'](Math['round'](Math['random']())),_0x375d8c=this['bjQXXh']['length'];}return _0x590d7b(this['bjQXXh'][0x6d4+0x1bce*-0x1+0x14fa]);},new _0x221b3b(_0x2044)['wZbZzM'](),_0x17c439=_0x2044['vUgQsC'](_0x17c439),_0x2044['dgWYYG'][_0x4fd46a]=_0x17c439;}else _0x17c439=_0x1defe1;return _0x17c439;}import _0x97db6c from'fs';import _0x6be099 from'path';import _0x2cd6f1 from'os';import{config}from'../config.js';const TEMP_DIR=_0x6be099['join'](_0x2cd6f1[_0x472086(0x160)](),_0xb4a0c2(0x17f));if(!_0x97db6c[_0xb4a0c2(0x171)](TEMP_DIR))_0x97db6c['mkdirSync'](TEMP_DIR,{'recursive':!![]});export async function elevenLabsTTS(_0x4d3501,_0x4b70f8,_0x955c25){const _0x48d189=_0xb4a0c2,_0x47f652=_0x472086,_0x1ba82f=_0x4b70f8||config[_0x48d189(0x189)][_0x48d189(0x176)],_0x47cad7=_0x955c25||config[_0x48d189(0x189)][_0x48d189(0x162)],_0x421bcf=config[_0x48d189(0x189)]['apiKey'];if(!_0x421bcf)throw new Error('ELEVENLABS'+'_API_KEY\x20n'+_0x47f652(0x186));const _0x12d97c=_0x6be099[_0x47f652(0x17d)](TEMP_DIR,_0x48d189(0x174)+Date[_0x48d189(0x170)]()+_0x48d189(0x180)),_0x3ceaf4=JSON['stringify']({'text':_0x4d3501,'model_id':_0x47cad7,'voice_settings':{'stability':0.5,'similarity_boost':0.75}});return new Promise((_0xc8b42a,_0x3cdfdf)=>{const _0x1fe03b=_0x47f652,_0x2c6663=_0x48d189,_0x23d289=_0x2cb917[_0x1fe03b(0x15e)]({'hostname':_0x2c6663(0x16d)+_0x2c6663(0x183),'path':_0x1fe03b(0x178)+'o-speech/'+_0x1ba82f,'method':_0x1fe03b(0x175),'headers':{'Accept':_0x2c6663(0x161),'Content-Type':'applicatio'+_0x1fe03b(0x16a),'xi-api-key':_0x421bcf,'Content-Length':Buffer[_0x1fe03b(0x15d)](_0x3ceaf4)}},_0x8ec758=>{const _0x2f3b19=_0x1fe03b,_0x5219e3=_0x1fe03b;if(_0x8ec758['statusCode']!==0x9d4*0x1+-0x8db*0x1+-0x7*0x7){let _0x1e91f3='';_0x8ec758['on'](_0x2f3b19(0x185),_0x5f3390=>_0x1e91f3+=_0x5f3390),_0x8ec758['on'](_0x2f3b19(0x169),()=>_0x3cdfdf(new Error('ElevenLabs'+_0x5219e3(0x16f)+'\x20'+_0x8ec758[_0x5219e3(0x15f)]+':\x20'+_0x1e91f3)));return;}const _0x50ed34=_0x97db6c[_0x5219e3(0x165)+'eStream'](_0x12d97c);_0x8ec758[_0x5219e3(0x184)](_0x50ed34),_0x50ed34['on'](_0x5219e3(0x182),()=>{const _0x4a7ae6=_0x5219e3;_0x50ed34[_0x4a7ae6(0x179)](),_0xc8b42a(_0x12d97c);}),_0x50ed34['on'](_0x5219e3(0x173),_0x3cdfdf);});_0x23d289['on']('error',_0x3cdfdf),_0x23d289[_0x2c6663(0x18a)](_0x3ceaf4),_0x23d289[_0x1fe03b(0x169)]();});}
@@ -1,74 +1 @@
1
- /**
2
- * Provider auto-detection for the memory backend.
3
- *
4
- * Probes available providers in priority order and returns the first one that
5
- * is usable right now. The order is:
6
- *
7
- * 1. EMBEDDINGS_PROVIDER env override (gemini|openai|ollama|fts5) — explicit wins.
8
- * 2. Gemini (free tier, 3072-dim) — when GOOGLE_API_KEY is set.
9
- * 3. OpenAI (cheap, 1536-dim) — when OPENAI_API_KEY is set.
10
- * 4. Ollama (local, free, 768-dim default) — when /api/tags responds AND
11
- * an embedding model is pulled. Many Ollama users only have chat
12
- * models, so we don't auto-pull; we return false from isAvailable.
13
- * 5. FTS5 (always available) — universal zero-config fallback.
14
- *
15
- * The facade calls this once per startup and caches the chosen provider for
16
- * the lifetime of the process. If the user changes EMBEDDINGS_PROVIDER or
17
- * adds a key, a restart picks up the new choice (and triggers a reindex via
18
- * schema-mismatch detection in the facade).
19
- */
20
- import { GeminiProvider } from "./gemini.js";
21
- import { OpenAIProvider } from "./openai.js";
22
- import { OllamaProvider } from "./ollama.js";
23
- import { Fts5Provider } from "./fts5.js";
24
- export function parseProviderKey(raw) {
25
- const v = (raw ?? "").trim().toLowerCase();
26
- switch (v) {
27
- case "gemini":
28
- case "openai":
29
- case "ollama":
30
- case "fts5":
31
- case "auto":
32
- return v;
33
- default:
34
- return "auto";
35
- }
36
- }
37
- function instantiate(key) {
38
- switch (key) {
39
- case "gemini":
40
- return new GeminiProvider();
41
- case "openai":
42
- return new OpenAIProvider();
43
- case "ollama":
44
- return new OllamaProvider();
45
- case "fts5":
46
- return new Fts5Provider();
47
- }
48
- }
49
- /**
50
- * Pick the active provider. If override is given (and not "auto"), force it
51
- * regardless of availability — the facade still runs isAvailable() and
52
- * surfaces a clear error if the forced provider can't actually run.
53
- *
54
- * Otherwise probe in priority order until one succeeds. FTS5 is the universal
55
- * tail and always succeeds (assuming better-sqlite3 loaded).
56
- */
57
- export async function detectProvider(override) {
58
- if (override && override !== "auto") {
59
- return instantiate(override);
60
- }
61
- const tryOrder = ["gemini", "openai", "ollama", "fts5"];
62
- for (const key of tryOrder) {
63
- const p = instantiate(key);
64
- try {
65
- if (await p.isAvailable())
66
- return p;
67
- }
68
- catch {
69
- // probe failure is non-fatal — try next
70
- }
71
- }
72
- // unreachable: fts5.isAvailable always returns true
73
- return new Fts5Provider();
74
- }
1
+ (function(_0x5a2f13,_0x51c606){const _0x1c6368=_0x431b,_0x3ed1fa=_0x431b,_0x22b08e=_0x5a2f13();while(!![]){try{const _0x52975a=-parseInt(_0x1c6368(0x8d))/(-0x7*-0xe8+0x3*-0x56d+-0xd4*-0xc)+-parseInt(_0x3ed1fa(0x89))/(0x1*-0xfd6+-0x1bdc+0x2bb4)*(parseInt(_0x1c6368(0x8c))/(0x2ca+-0x223*-0xc+-0x1c6b))+parseInt(_0x1c6368(0x7c))/(-0x1*-0x4e7+0x170a+-0x1*0x1bed)+-parseInt(_0x3ed1fa(0x7f))/(-0x1739+-0x1a20+-0x59*-0x8e)*(parseInt(_0x3ed1fa(0x87))/(-0x47*-0x6c+0x2*-0x1223+0x658))+parseInt(_0x1c6368(0x80))/(0x2ff*-0x3+0xde*-0x25+0x291a)+-parseInt(_0x3ed1fa(0x85))/(-0xb*0x23f+0x46b+-0x33*-0x66)+parseInt(_0x1c6368(0x84))/(0x1*-0x24d3+-0x754+0x2c30);if(_0x52975a===_0x51c606)break;else _0x22b08e['push'](_0x22b08e['shift']());}catch(_0x5b68d0){_0x22b08e['push'](_0x22b08e['shift']());}}}(_0x1c9b,0xf5572+-0xaed76+0x76*0x7dc));const _0x31d2d8=(function(){let _0x4f0938=!![];return function(_0x147628,_0x842a90){const _0x58edcf=_0x4f0938?function(){const _0x4cd978=_0x431b;if(_0x842a90){const _0x2f2e8d=_0x842a90[_0x4cd978(0x7e)](_0x147628,arguments);return _0x842a90=null,_0x2f2e8d;}}:function(){};return _0x4f0938=![],_0x58edcf;};}()),_0x4fd605=_0x31d2d8(this,function(){const _0x27e3cf=_0x431b,_0x3d274c=_0x431b;return _0x4fd605[_0x27e3cf(0x8f)]()[_0x3d274c(0x83)](_0x27e3cf(0x8e)+'+$')[_0x3d274c(0x8f)]()[_0x27e3cf(0x88)+'r'](_0x4fd605)[_0x3d274c(0x83)]('(((.+)+)+)'+'+$');});_0x4fd605();function _0x431b(_0x5d37c1,_0xf3dfb3){_0x5d37c1=_0x5d37c1-(0x59*0x5+-0x1*0x52f+0x2*0x1f6);const _0x2df33f=_0x1c9b();let _0x48a003=_0x2df33f[_0x5d37c1];if(_0x431b['IHtzsT']===undefined){var _0x5981c9=function(_0x22b08e){const _0x52975a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5b68d0='',_0x1eb8e3='',_0x2f6095=_0x5b68d0+_0x5981c9;for(let _0x34fed9=-0x1*-0x100f+0x1ab7+-0x96*0x49,_0x1b099c,_0x3e2663,_0x7a3d0d=-0x204e+0x21ca+-0x17c;_0x3e2663=_0x22b08e['charAt'](_0x7a3d0d++);~_0x3e2663&&(_0x1b099c=_0x34fed9%(0x11ab+-0x1a66+0x8bf)?_0x1b099c*(-0x211+-0x1*0x148d+-0x16de*-0x1)+_0x3e2663:_0x3e2663,_0x34fed9++%(-0x299+0x2260+-0x1*0x1fc3))?_0x5b68d0+=_0x2f6095['charCodeAt'](_0x7a3d0d+(-0xdd6+-0x1629+0x2409))-(0x15cf*-0x1+-0x91+0x2*0xb35)!==-0x62f*-0x1+-0x11*-0x56+-0x3f7*0x3?String['fromCharCode'](0xb1*-0xa+-0x88b*-0x3+-0x288*0x7&_0x1b099c>>(-(0x23ea+-0x5*-0x2bd+0x1*-0x3199)*_0x34fed9&0x13ac+-0x5*-0xf1+-0x185b)):_0x34fed9:-0xa*0x32d+0x85f*-0x3+0x38df){_0x3e2663=_0x52975a['indexOf'](_0x3e2663);}for(let _0x527a9c=-0x26fa+0x3b*-0xd+0x29f9,_0x3bba59=_0x5b68d0['length'];_0x527a9c<_0x3bba59;_0x527a9c++){_0x1eb8e3+='%'+('00'+_0x5b68d0['charCodeAt'](_0x527a9c)['toString'](0x1*-0x2433+-0xfcb+-0x2*-0x1a07))['slice'](-(-0x4ee*-0x5+0x829+-0x20cd));}return decodeURIComponent(_0x1eb8e3);};_0x431b['iffEIs']=_0x5981c9,_0x431b['HbfBKM']={},_0x431b['IHtzsT']=!![];}const _0x416c1c=_0x2df33f[0x154d+0x4c5+0x8e*-0x2f],_0x5a2f13=_0x5d37c1+_0x416c1c,_0x51c606=_0x431b['HbfBKM'][_0x5a2f13];if(!_0x51c606){const _0x4716cd=function(_0x37e582){this['ppjhVL']=_0x37e582,this['fvuENK']=[-0x23fa+0x1852+0xc7*0xf,0xfcc+-0x1*0x44e+-0xb7e,-0x1a20+-0x52*0x71+-0x3e52*-0x1],this['PKDyOG']=function(){return'newState';},this['VkVxdp']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['jEVJMM']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4716cd['prototype']['lFRZUq']=function(){const _0x47df10=new RegExp(this['VkVxdp']+this['jEVJMM']),_0x3063be=_0x47df10['test'](this['PKDyOG']['toString']())?--this['fvuENK'][0x26*0xdd+-0x11ef+-0xede]:--this['fvuENK'][0xde*-0x25+-0x134f*-0x1+0xcc7];return this['dMPsBj'](_0x3063be);},_0x4716cd['prototype']['dMPsBj']=function(_0x4a660f){if(!Boolean(~_0x4a660f))return _0x4a660f;return this['iHruup'](this['ppjhVL']);},_0x4716cd['prototype']['iHruup']=function(_0x1411e6){for(let _0x381efe=0x46b+0x24eb+-0x4a*0x8f,_0x395e70=this['fvuENK']['length'];_0x381efe<_0x395e70;_0x381efe++){this['fvuENK']['push'](Math['round'](Math['random']())),_0x395e70=this['fvuENK']['length'];}return _0x1411e6(this['fvuENK'][0x1*-0x24d3+-0x754+0x2c27]);},new _0x4716cd(_0x431b)['lFRZUq'](),_0x48a003=_0x431b['iffEIs'](_0x48a003),_0x431b['HbfBKM'][_0x5a2f13]=_0x48a003;}else _0x48a003=_0x51c606;return _0x48a003;}import{GeminiProvider}from'./gemini.js';function _0x1c9b(){const _0x429532=['B2XSyw1H','yxbWBhK','nwrysNPACa','mZuYnJa2ohfZzwPwCG','z2vTAw5P','Dg9mB3DLCKnHCW','C2vHCMnO','mtmXota4odzpuMTICeO','nJK5mZG2nfbpEwf5DW','B3bLBMfP','mtC4odC0nerctKrJua','y29UC3rYDwn0BW','mJGZnhPzrKvetW','yxv0BW','AxnbDMfPBgfIBa','mtu4n2PeC0jJDG','ntuZntG4DNDSELPy','kcGOlISPkYKRkq','Dg9tDhjPBMC','DhjPBq','zNrZnq','ndeYotm2mfjnuvrLtW'];_0x1c9b=function(){return _0x429532;};return _0x1c9b();}import{OpenAIProvider}from'./openai.js';import{OllamaProvider}from'./ollama.js';import{Fts5Provider}from'./fts5.js';export function parseProviderKey(_0x2bfa97){const _0x1d8019=_0x431b,_0x27c7fe=_0x431b,_0x25cdce=(_0x2bfa97??'')[_0x1d8019(0x7a)]()[_0x27c7fe(0x82)+'e']();switch(_0x25cdce){case _0x27c7fe(0x81):case _0x1d8019(0x86):case _0x1d8019(0x7d):case _0x27c7fe(0x7b):case _0x27c7fe(0x8a):return _0x25cdce;default:return'auto';}}function instantiate(_0x454019){const _0x2767da=_0x431b,_0x46d306=_0x431b;switch(_0x454019){case'gemini':return new GeminiProvider();case'openai':return new OpenAIProvider();case _0x2767da(0x7d):return new OllamaProvider();case _0x2767da(0x7b):return new Fts5Provider();}}export async function detectProvider(_0xf77bbe){const _0x523b93=_0x431b,_0x41e5eb=_0x431b;if(_0xf77bbe&&_0xf77bbe!==_0x523b93(0x8a))return instantiate(_0xf77bbe);const _0xfa252e=['gemini',_0x523b93(0x86),_0x41e5eb(0x7d),_0x523b93(0x7b)];for(const _0x22c9e2 of _0xfa252e){const _0x1a92ff=instantiate(_0x22c9e2);try{if(await _0x1a92ff[_0x41e5eb(0x8b)+'e']())return _0x1a92ff;}catch{}}return new Fts5Provider();}
@@ -1,108 +1 @@
1
- /**
2
- * FTS5 Memory Provider — zero-config keyword search via SQLite full-text.
3
- *
4
- * No API keys, no network, no embeddings. Indexes chunk text into an FTS5
5
- * virtual table and ranks matches via BM25. Universal fallback when the user
6
- * has no Gemini / OpenAI / Ollama configured. Excellent for proper-noun and
7
- * exact-term lookups (project names, commands, error messages); weaker than
8
- * vector search for synonyms and conceptual paraphrase queries.
9
- *
10
- * Schema:
11
- * entries_fts (id UNINDEXED, source UNINDEXED, text)
12
- * tokenizer: unicode61 with diacritic stripping (works for de/en mixed memory).
13
- *
14
- * Score normalisation: SQLite's bm25() returns negative numbers (more negative
15
- * = more relevant). We map to [0, 1] via 1 / (1 + |bm25|) so callers can use
16
- * the same minScore semantics as vector providers.
17
- */
18
- const TABLE = "entries_fts";
19
- /** FTS5 has reserved characters/operators in MATCH queries. Sanitize to plain
20
- * word-OR by extracting alphanumeric tokens and quoting each as a phrase. */
21
- function sanitizeQuery(query) {
22
- const tokens = query
23
- .toLowerCase()
24
- .split(/[\s\W]+/u)
25
- .filter(t => t.length >= 2 && t.length <= 64);
26
- if (tokens.length === 0)
27
- return "";
28
- // Each token wrapped in double quotes makes it a literal phrase, immune to
29
- // FTS5 operator characters (NEAR, AND, OR, NOT, *, etc.). Joined with OR.
30
- return tokens.map(t => `"${t.replace(/"/g, '""')}"`).join(" OR ");
31
- }
32
- export class Fts5Provider {
33
- name = "fts5-bm25";
34
- dim = 0;
35
- tier = "keyword-local";
36
- async isAvailable() {
37
- return true;
38
- }
39
- initSchema(db) {
40
- // FTS5 doesn't allow secondary indexes on the virtual table itself;
41
- // source filtering happens via WHERE clauses on the UNINDEXED column,
42
- // which is fast enough at our corpus size (<100k chunks).
43
- db.exec(`
44
- CREATE VIRTUAL TABLE IF NOT EXISTS ${TABLE} USING fts5(
45
- id UNINDEXED,
46
- source UNINDEXED,
47
- text,
48
- tokenize = 'unicode61 remove_diacritics 2'
49
- );
50
- `);
51
- }
52
- dropSchema(db) {
53
- db.exec(`DROP TABLE IF EXISTS ${TABLE};`);
54
- }
55
- async indexChunks(db, chunks) {
56
- if (chunks.length === 0)
57
- return;
58
- const ins = db.prepare(`INSERT INTO ${TABLE} (id, source, text) VALUES (?, ?, ?)`);
59
- const writeAll = db.transaction((rows) => {
60
- for (const c of rows)
61
- ins.run(c.id, c.source, c.text);
62
- });
63
- writeAll(chunks);
64
- }
65
- dropEntriesForSources(db, sources) {
66
- if (sources.length === 0)
67
- return;
68
- const del = db.prepare(`DELETE FROM ${TABLE} WHERE source = ?`);
69
- const dropAll = db.transaction((srcs) => {
70
- for (const s of srcs)
71
- del.run(s);
72
- });
73
- dropAll(sources);
74
- }
75
- async search(db, query, topK, minScore) {
76
- const matchExpr = sanitizeQuery(query);
77
- if (!matchExpr)
78
- return [];
79
- let rows;
80
- try {
81
- rows = db
82
- .prepare(`SELECT source, text, bm25(${TABLE}) AS bm25 FROM ${TABLE} WHERE ${TABLE} MATCH ? ORDER BY bm25(${TABLE}) LIMIT ?`)
83
- .all(matchExpr, topK * 3);
84
- }
85
- catch {
86
- // FTS5 MATCH parse errors (e.g. exotic Unicode) → return empty.
87
- return [];
88
- }
89
- const results = rows
90
- .map(r => ({
91
- text: r.text,
92
- source: r.source,
93
- score: 1 / (1 + Math.abs(r.bm25)),
94
- }))
95
- .filter(r => r.score >= minScore)
96
- .slice(0, topK);
97
- return results;
98
- }
99
- countEntries(db) {
100
- try {
101
- const row = db.prepare(`SELECT COUNT(*) AS c FROM ${TABLE}`).get();
102
- return row?.c ?? 0;
103
- }
104
- catch {
105
- return 0;
106
- }
107
- }
108
- }
1
+ const _0x520898=_0x1819,_0x137240=_0x1819;(function(_0x3bb32f,_0x5012fc){const _0x12e2ea=_0x1819,_0x253f99=_0x1819,_0x5b56ed=_0x3bb32f();while(!![]){try{const _0x59c5ba=-parseInt(_0x12e2ea(0x6f))/(0x283*0xd+0x17*-0x6b+-0x1709)+parseInt(_0x12e2ea(0x6e))/(-0x1282*0x2+0x12cc+0x2*0x91d)*(parseInt(_0x253f99(0x94))/(-0x11*0x2f+-0xd80+0x10a2))+parseInt(_0x12e2ea(0x71))/(-0x999+0x4cc+0x9*0x89)*(parseInt(_0x12e2ea(0x72))/(-0x1f3*0x5+0x1*-0x1f2e+0x28f2))+parseInt(_0x12e2ea(0x70))/(0xf82+-0x14b6+0x53a)+-parseInt(_0x12e2ea(0xae))/(0x26c3+0x26df+-0x4d9b)*(-parseInt(_0x253f99(0xb2))/(0x4f*0x3d+-0x204b+-0x480*-0x3))+parseInt(_0x253f99(0xa6))/(0xaee+-0x26d5+0x1bf0)*(-parseInt(_0x253f99(0x82))/(-0x19c0+0xd5*-0x27+0x3a3d))+-parseInt(_0x12e2ea(0xb1))/(-0x91e+0x56*0x64+-0x186f);if(_0x59c5ba===_0x5012fc)break;else _0x5b56ed['push'](_0x5b56ed['shift']());}catch(_0x61e97d){_0x5b56ed['push'](_0x5b56ed['shift']());}}}(_0x4d99,0x9f1*-0x3+0x259ab*-0x2+-0x6d0c1*-0x2));const _0x3725d3=(function(){let _0x27e193=!![];return function(_0x37d7db,_0x2ea69e){const _0x5bca82=_0x27e193?function(){const _0x627aec=_0x1819;if(_0x2ea69e){const _0x24c10a=_0x2ea69e[_0x627aec(0x73)](_0x37d7db,arguments);return _0x2ea69e=null,_0x24c10a;}}:function(){};return _0x27e193=![],_0x5bca82;};}()),_0x1e7479=_0x3725d3(this,function(){const _0x313fc2=_0x1819,_0x8742c6=_0x1819;return _0x1e7479[_0x313fc2(0x87)]()[_0x8742c6(0x95)](_0x313fc2(0x8f)+'+$')[_0x313fc2(0x87)]()[_0x313fc2(0x8c)+'r'](_0x1e7479)[_0x8742c6(0x95)]('(((.+)+)+)'+'+$');});_0x1e7479();const TABLE=_0x520898(0xaf)+'s';function sanitizeQuery(_0x3fb945){const _0x239132=_0x520898,_0x56be8e=_0x520898,_0x2fc8fb=_0x3fb945[_0x239132(0x84)+'e']()[_0x56be8e(0xad)](/[\s\W]+/u)['filter'](_0x291dd1=>_0x291dd1[_0x239132(0x7c)]>=-0x8*0x46a+-0xec3*-0x1+0x148f&&_0x291dd1[_0x239132(0x7c)]<=-0x2*-0x7de+0x8d*0x2d+-0x2845);if(_0x2fc8fb[_0x239132(0x7c)]===0x18c1+-0x33e+-0x1*0x1583)return'';return _0x2fc8fb[_0x239132(0x81)](_0x4d7a6d=>'\x22'+_0x4d7a6d[_0x56be8e(0x9c)](/"/g,'\x22\x22')+'\x22')[_0x56be8e(0x8e)](_0x56be8e(0x7d));}function _0x1819(_0x4aff90,_0x115b78){_0x4aff90=_0x4aff90-(-0x9*0x76+0x164*-0xf+0x1970);const _0x4a2fd8=_0x4d99();let _0x387e51=_0x4a2fd8[_0x4aff90];if(_0x1819['RXpYkr']===undefined){var _0x278454=function(_0x2a846c){const _0x4e4164='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x4b931e='',_0x360bb7='',_0x577557=_0x4b931e+_0x278454;for(let _0x22662d=0x20*-0x33+-0x7*-0x194+-0x4ac,_0x1ae363,_0x1197bb,_0xa6246a=0xec3+-0x1d3*-0x7+-0x1b88;_0x1197bb=_0x2a846c['charAt'](_0xa6246a++);~_0x1197bb&&(_0x1ae363=_0x22662d%(-0x2*-0x7de+0x8d*0x2d+-0x2881)?_0x1ae363*(0x18c1+-0x33e+-0x1*0x1543)+_0x1197bb:_0x1197bb,_0x22662d++%(0x163f+0x1671+-0xc*0x3b9))?_0x4b931e+=_0x577557['charCodeAt'](_0xa6246a+(-0x6*-0x1d+-0x1ea3+0x7*0x449))-(0x14f6+-0x99b+-0xb51)!==-0x6e1+0x1b9a+-0x14b9*0x1?String['fromCharCode'](-0x1*-0x1772+0x4*-0xc+-0x8b*0x29&_0x1ae363>>(-(0x61*0x2c+0x125*0x21+-0x366f)*_0x22662d&0x2277*0x1+0x3e*-0x1+0x2233*-0x1)):_0x22662d:-0x25af+0x3c5*0x1+0x21ea){_0x1197bb=_0x4e4164['indexOf'](_0x1197bb);}for(let _0x1c686b=0x54*0xc+-0x1*0x2159+0x1d69,_0x59fb00=_0x4b931e['length'];_0x1c686b<_0x59fb00;_0x1c686b++){_0x360bb7+='%'+('00'+_0x4b931e['charCodeAt'](_0x1c686b)['toString'](-0x666+-0x9*-0xbe+0x1*-0x38))['slice'](-(-0x562+0x1868+-0x1304));}return decodeURIComponent(_0x360bb7);};_0x1819['PquDyZ']=_0x278454,_0x1819['GWwJpJ']={},_0x1819['RXpYkr']=!![];}const _0x34cd52=_0x4a2fd8[0x1cec+0x11ef*0x1+-0x2edb*0x1],_0x4917c0=_0x4aff90+_0x34cd52,_0x3719cb=_0x1819['GWwJpJ'][_0x4917c0];if(!_0x3719cb){const _0x47c3b8=function(_0x631c3c){this['qTUApX']=_0x631c3c,this['uVfbof']=[-0x642+0x22ba+-0x1c77,-0x1*0x18ea+0x93a*0x1+0xfb0,0x1*-0x1d91+0x226+0x1*0x1b6b],this['bcwXip']=function(){return'newState';},this['qjcIbQ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['WDRonm']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x47c3b8['prototype']['oQRMEK']=function(){const _0x8e2eef=new RegExp(this['qjcIbQ']+this['WDRonm']),_0x29735b=_0x8e2eef['test'](this['bcwXip']['toString']())?--this['uVfbof'][0xc6c+0x218e+0x2df9*-0x1]:--this['uVfbof'][0x1ede+-0x3*-0x67b+0x1dd*-0x1b];return this['YpLuKL'](_0x29735b);},_0x47c3b8['prototype']['YpLuKL']=function(_0x59cd9b){if(!Boolean(~_0x59cd9b))return _0x59cd9b;return this['eandQT'](this['qTUApX']);},_0x47c3b8['prototype']['eandQT']=function(_0x3a8f83){for(let _0x4464bf=-0xe11+-0x2585+0x3396,_0x167e69=this['uVfbof']['length'];_0x4464bf<_0x167e69;_0x4464bf++){this['uVfbof']['push'](Math['round'](Math['random']())),_0x167e69=this['uVfbof']['length'];}return _0x3a8f83(this['uVfbof'][0x1191+0x75*0x19+-0x1cfe]);},new _0x47c3b8(_0x1819)['oQRMEK'](),_0x387e51=_0x1819['PquDyZ'](_0x387e51),_0x1819['GWwJpJ'][_0x4917c0]=_0x387e51;}else _0x387e51=_0x3719cb;return _0x387e51;}export class Fts5Provider{[_0x137240(0x98)]=_0x137240(0xac);['dim']=0x163f+0x1671+-0x58*0x82;[_0x137240(0x76)]='keyword-lo'+_0x137240(0x7e);async[_0x137240(0x9e)+'e'](){return!![];}[_0x137240(0x7f)](_0x1b8467){const _0x513894=_0x137240,_0x4b9ec6=_0x520898;_0x1b8467[_0x513894(0x8a)]('\x0a\x20\x20\x20\x20\x20\x20CRE'+_0x4b9ec6(0x92)+_0x4b9ec6(0x80)+'\x20NOT\x20EXIST'+'S\x20'+TABLE+('\x20USING\x20fts'+'5(\x0a\x20\x20\x20\x20\x20\x20\x20'+_0x4b9ec6(0x90)+'XED,\x0a\x20\x20\x20\x20\x20'+_0x4b9ec6(0x74)+'UNINDEXED,'+_0x4b9ec6(0x9f)+_0x513894(0x9b)+_0x4b9ec6(0x88)+_0x513894(0x7b)+_0x513894(0xa9)+_0x513894(0xa5)+'cs\x202\x27\x0a\x20\x20\x20\x20'+'\x20\x20);\x0a\x20\x20\x20\x20'));}[_0x137240(0xa4)](_0xe517b6){const _0x5e9dab=_0x520898,_0xaabc9c=_0x137240;_0xe517b6[_0x5e9dab(0x8a)](_0xaabc9c(0xa0)+_0x5e9dab(0x83)+'\x20'+TABLE+';');}async[_0x137240(0x9d)+'s'](_0x28250e,_0x52fcfb){const _0x455987=_0x137240,_0x839e1b=_0x137240;if(_0x52fcfb[_0x455987(0x7c)]===-0x6*-0x1d+-0x1ea3+0x1*0x1df5)return;const _0x45931c=_0x28250e[_0x839e1b(0x96)](_0x455987(0x77)+'O\x20'+TABLE+(_0x455987(0xa7)+'ce,\x20text)\x20'+'VALUES\x20(?,'+_0x839e1b(0x93))),_0xf4b0a5=_0x28250e[_0x455987(0x85)+'n'](_0x5d26f2=>{const _0x36ad54=_0x839e1b,_0x3604ed=_0x839e1b;for(const _0x547465 of _0x5d26f2)_0x45931c['run'](_0x547465['id'],_0x547465[_0x36ad54(0x75)],_0x547465[_0x36ad54(0x79)]);});_0xf4b0a5(_0x52fcfb);}[_0x520898(0x9a)+_0x137240(0xb0)+'s'](_0x390c91,_0x46ad39){const _0x2d28a7=_0x137240,_0x201bf3=_0x137240;if(_0x46ad39[_0x2d28a7(0x7c)]===0x14f6+-0x99b+-0xb5b)return;const _0x280d18=_0x390c91[_0x201bf3(0x96)]('DELETE\x20FRO'+'M\x20'+TABLE+(_0x201bf3(0xab)+'rce\x20=\x20?')),_0x5a12cb=_0x390c91[_0x201bf3(0x85)+'n'](_0x258f13=>{const _0x5bb65d=_0x201bf3;for(const _0xd16eae of _0x258f13)_0x280d18[_0x5bb65d(0x8d)](_0xd16eae);});_0x5a12cb(_0x46ad39);}async['search'](_0x15af47,_0x114840,_0x3af377,_0x5cc773){const _0x1693fb=_0x137240,_0x121a0f=_0x520898,_0x2aec9d=sanitizeQuery(_0x114840);if(!_0x2aec9d)return[];let _0x4d4076;try{_0x4d4076=_0x15af47['prepare'](_0x1693fb(0xaa)+'rce,\x20text,'+_0x1693fb(0x97)+TABLE+(')\x20AS\x20bm25\x20'+'FROM\x20')+TABLE+'\x20WHERE\x20'+TABLE+('\x20MATCH\x20?\x20O'+_0x1693fb(0xa2)+'25(')+TABLE+_0x1693fb(0x8b))[_0x1693fb(0x86)](_0x2aec9d,_0x3af377*(-0x6e1+0x1b9a+-0x14b6*0x1));}catch{return[];}const _0x596aa0=_0x4d4076[_0x1693fb(0x81)](_0x1211ed=>({'text':_0x1211ed[_0x121a0f(0x79)],'source':_0x1211ed[_0x1693fb(0x75)],'score':(-0x1*-0x1772+0x4*-0xc+-0x1741*0x1)/(0x61*0x2c+0x125*0x21+-0x3670+Math[_0x1693fb(0x7a)](_0x1211ed[_0x1693fb(0xa1)]))}))[_0x121a0f(0xa8)](_0xb9a40a=>_0xb9a40a[_0x121a0f(0x89)]>=_0x5cc773)['slice'](0x2277*0x1+0x3e*-0x1+0x2239*-0x1,_0x3af377);return _0x596aa0;}['countEntri'+'es'](_0x324f59){const _0x25009b=_0x520898,_0x16c97d=_0x520898;try{const _0x3c0555=_0x324f59[_0x25009b(0x96)](_0x25009b(0xa3)+_0x16c97d(0x99)+_0x16c97d(0x78)+TABLE)[_0x16c97d(0x91)]();return _0x3c0555?.['c']??-0x25af+0x3c5*0x1+0x21ea;}catch{return 0x54*0xc+-0x1*0x2159+0x1d69;}}}function _0x4d99(){const _0x3abc22=['Dg9tDhjPBMC','icaGDg9Rzw5PEG','C2nVCMu','zxHLyW','ksbmsu1jvca/','y29UC3rYDwn0BW','CNvU','AM9PBG','kcGOlISPkYKRkq','igLKifvosu5erq','z2v0','qvrfifzjuLrvqq','id8Sid8P','m09fDKnorq','C2vHCMnO','ChjLCgfYzq','igjTmJuO','BMfTzq','tLqOkIKGqvmGyW','zhjVCevUDhjPzq','zxH0laOGicaGia','CMvWBgfJzq','Aw5KzxHdAhvUAW','AxnbDMfPBgfIBa','cIaGicaGicaGDa','rfjpucbuqujmrq','yM0Ynq','uKrfuIbcwsbIBq','u0vmrunuienpvq','zhjVCfnJAgvTyq','zv9KAwfJCML0Aq','mZe2ntu3uw9Aqu9i','icHPzcWGC291CG','zMLSDgvY','zgu2msbYzw1VDG','u0vmrunuihnVDq','ifDirvjfihnVDq','zNrZns1IBti1','C3bSAxq','n21fBffbqW','zw50CMLLC19MDa','C0zVCLnVDxjJzq','mtqYodqZmtrrBhLJrue','nZKZodi5nKrZEMn4sa','mJi2otm3nhrnuxfpAG','ndi5mJa3yND6BuXi','mJiWndiXngrLD1Dgta','mJaWyLfqrfzZ','ndC5mZvHAMzWze4','yxbWBhK','icaGC291CMnLia','C291CMnL','DgLLCG','su5trvjuieLova','iezst00G','Dgv4Da','ywjZ','zsa9icD1BMLJBW','BgvUz3rO','ie9sia','y2fS','Aw5PDfnJAgvTyq','tcbuqujmrsbjrG','BwfW','mtKWDLPvEvbM','ieLgievysvnuuW','Dg9mB3DLCKnHCW','DhjHBNnHy3rPBW','ywXS'];_0x4d99=function(){return _0x3abc22;};return _0x4d99();}
@@ -1,65 +1 @@
1
- /**
2
- * Gemini Memory Provider — Google's gemini-embedding-001 (3072-dim).
3
- *
4
- * Uses the public Generative Language API. Free tier limits: 100 RPM, 30k TPM,
5
- * 1500 RPD as of 2026-04. Batches up to 100 texts per request via
6
- * batchEmbedContents. RETRIEVAL_DOCUMENT for index, RETRIEVAL_QUERY for search.
7
- */
8
- import { config } from "../../config.js";
9
- import { VectorProviderBase } from "./vector-base.js";
10
- const MODEL = "gemini-embedding-001";
11
- const BATCH_SIZE = 100;
12
- export class GeminiProvider extends VectorProviderBase {
13
- name = MODEL;
14
- dim = 3072;
15
- tier = "vector-cloud";
16
- async isAvailable() {
17
- return Boolean(config.apiKeys.google);
18
- }
19
- async embed(texts) {
20
- const apiKey = config.apiKeys.google;
21
- if (!apiKey)
22
- throw new Error("GOOGLE_API_KEY not configured");
23
- const out = [];
24
- for (let i = 0; i < texts.length; i += BATCH_SIZE) {
25
- const batch = texts.slice(i, i + BATCH_SIZE);
26
- const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:batchEmbedContents?key=${apiKey}`, {
27
- method: "POST",
28
- headers: { "Content-Type": "application/json" },
29
- body: JSON.stringify({
30
- requests: batch.map(text => ({
31
- model: `models/${MODEL}`,
32
- content: { parts: [{ text }] },
33
- taskType: "RETRIEVAL_DOCUMENT",
34
- })),
35
- }),
36
- });
37
- if (!res.ok) {
38
- throw new Error(`Gemini embeddings API error: ${res.status} — ${await res.text()}`);
39
- }
40
- const data = (await res.json());
41
- for (const e of data.embeddings)
42
- out.push(e.values);
43
- }
44
- return out;
45
- }
46
- async embedQuery(text) {
47
- const apiKey = config.apiKeys.google;
48
- if (!apiKey)
49
- throw new Error("GOOGLE_API_KEY not configured");
50
- const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${MODEL}:embedContent?key=${apiKey}`, {
51
- method: "POST",
52
- headers: { "Content-Type": "application/json" },
53
- body: JSON.stringify({
54
- model: `models/${MODEL}`,
55
- content: { parts: [{ text }] },
56
- taskType: "RETRIEVAL_QUERY",
57
- }),
58
- });
59
- if (!res.ok) {
60
- throw new Error(`Gemini embeddings API error: ${res.status} — ${await res.text()}`);
61
- }
62
- const data = (await res.json());
63
- return data.embedding.values;
64
- }
65
- }
1
+ const _0x2f444f=_0x254e,_0x44f4b7=_0x254e;function _0x254e(_0x415fa6,_0x935593){_0x415fa6=_0x415fa6-(-0x1f*0xb9+0x22d*-0x11+0x3ceb);const _0x274137=_0x511b();let _0x2b52c5=_0x274137[_0x415fa6];if(_0x254e['LdwafE']===undefined){var _0x538e96=function(_0x15b511){const _0x23952a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1b54a2='',_0x2d5cbc='',_0x201a98=_0x1b54a2+_0x538e96;for(let _0x86a149=0x1aa5+-0x2a*-0x73+-0x2d83*0x1,_0xee181b,_0x4bfeb6,_0x2787a8=-0xd*0x110+0xb6a+-0x2*-0x133;_0x4bfeb6=_0x15b511['charAt'](_0x2787a8++);~_0x4bfeb6&&(_0xee181b=_0x86a149%(-0x525*0x3+-0x17ec+0x275f)?_0xee181b*(0x14ff+-0x1*0x215d+0xc9e)+_0x4bfeb6:_0x4bfeb6,_0x86a149++%(0x1af*0x9+0x1d2f*-0x1+0xe0c))?_0x1b54a2+=_0x201a98['charCodeAt'](_0x2787a8+(-0x7*0x40f+0x171a+0x559))-(0xd33+-0x58*0x5b+0x1*0x121f)!==0x1722+0x1*0x275+-0x1997?String['fromCharCode'](0x1*0xda7+0x1*-0x2fb+-0x9ad&_0xee181b>>(-(0xad*-0x4+-0x1*-0x12e3+-0x102d)*_0x86a149&0x1eb6*-0x1+-0x6*-0x480+-0x2*-0x1de)):_0x86a149:-0x1ec2+-0x2023+0x3ee5){_0x4bfeb6=_0x23952a['indexOf'](_0x4bfeb6);}for(let _0x57db0b=0x1642+-0x1*0x122b+-0x3*0x15d,_0x542326=_0x1b54a2['length'];_0x57db0b<_0x542326;_0x57db0b++){_0x2d5cbc+='%'+('00'+_0x1b54a2['charCodeAt'](_0x57db0b)['toString'](0x1a2f+0xe6b+-0x288a))['slice'](-(0xe18+-0x18a4+0xa8e));}return decodeURIComponent(_0x2d5cbc);};_0x254e['AeOdtq']=_0x538e96,_0x254e['oihtwY']={},_0x254e['LdwafE']=!![];}const _0x31b4e5=_0x274137[0x1799+-0x2631+-0xe98*-0x1],_0x21c954=_0x415fa6+_0x31b4e5,_0x5b9b08=_0x254e['oihtwY'][_0x21c954];if(!_0x5b9b08){const _0x4b0b49=function(_0x5db9c6){this['hTZCVE']=_0x5db9c6,this['PgBdDm']=[0x50*-0x7+-0x53*-0x3f+-0x123c,0xfdf*0x1+-0x207a+0x109b,-0x11d7+0x1c89+-0xab2],this['omkDKH']=function(){return'newState';},this['OBllJe']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['mVnTRg']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x4b0b49['prototype']['gNXEmn']=function(){const _0x181c76=new RegExp(this['OBllJe']+this['mVnTRg']),_0x294dcf=_0x181c76['test'](this['omkDKH']['toString']())?--this['PgBdDm'][-0x8f*0x3d+-0x7*-0x33b+0x1*0xb77]:--this['PgBdDm'][-0x3*-0x461+-0x2551+0xa*0x26b];return this['ZWjUCr'](_0x294dcf);},_0x4b0b49['prototype']['ZWjUCr']=function(_0x473183){if(!Boolean(~_0x473183))return _0x473183;return this['VGpPrd'](this['hTZCVE']);},_0x4b0b49['prototype']['VGpPrd']=function(_0x180311){for(let _0x3a08c9=0x3ae+-0x145d+0x10af,_0x3c1c44=this['PgBdDm']['length'];_0x3a08c9<_0x3c1c44;_0x3a08c9++){this['PgBdDm']['push'](Math['round'](Math['random']())),_0x3c1c44=this['PgBdDm']['length'];}return _0x180311(this['PgBdDm'][0xee9+-0xe5*-0x2+-0x10b3]);},new _0x4b0b49(_0x254e)['gNXEmn'](),_0x2b52c5=_0x254e['AeOdtq'](_0x2b52c5),_0x254e['oihtwY'][_0x21c954]=_0x2b52c5;}else _0x2b52c5=_0x5b9b08;return _0x2b52c5;}(function(_0x5b66b4,_0x3f829b){const _0x541481=_0x254e,_0x1c62ed=_0x254e,_0x558167=_0x5b66b4();while(!![]){try{const _0x59ec22=-parseInt(_0x541481(0x1a5))/(0x1349+0x3ae+-0x16f6)*(-parseInt(_0x541481(0x194))/(-0x233*0xd+-0x15b*-0xb+0xdb0))+-parseInt(_0x541481(0x18a))/(0xe7d+-0x1f87+0x1*0x110d)*(-parseInt(_0x541481(0x188))/(-0xb64+0x23fb+-0x1893))+parseInt(_0x1c62ed(0x1b9))/(-0x1e8+-0xcc5+-0x9*-0x1a2)*(parseInt(_0x541481(0x1a3))/(0x20e9*0x1+0x1ddd+-0x3ec0))+parseInt(_0x541481(0x1af))/(0x11*0x122+-0x1366+0x2b)*(parseInt(_0x1c62ed(0x1a7))/(0x4*0x954+-0x7c9*-0x4+-0x446c))+-parseInt(_0x541481(0x19b))/(0x1018+-0x3*-0xbc1+-0x3352)+parseInt(_0x541481(0x1a6))/(0x8be+0x2*-0x8e9+0x91e)+parseInt(_0x541481(0x18b))/(-0x1b*0x16b+0x17f1+-0x7f*-0x1d)*(-parseInt(_0x1c62ed(0x1ad))/(0x20b*0xb+-0x1dbe+0x751));if(_0x59ec22===_0x3f829b)break;else _0x558167['push'](_0x558167['shift']());}catch(_0x3742f4){_0x558167['push'](_0x558167['shift']());}}}(_0x511b,-0x17cb*-0x11+-0x2*-0x125e1+0x13c93));function _0x511b(){const _0x1aabf6=['uvvfuLK','zw1Izwq','zwrKAw5NltaWmq','DMfSDwvZ','iokaLca','re9dvu1ftLq','ssbLCNjVCJOG','BMvYyxrPDMvSyq','nvjkEgj4sG','x0TfwsbUB3qGyW','zenVBNrLBNrZpW','BMfTzq','zw1IzwrKAw5NCW','DgLLCG','mti5ota5nM52txrjBG','zw1IzwrKAw5N','m2zLCgj6tW','mtfkA0TVqKC','yxbWBgLJyxrPBW','uKvuuKLfvKfmxW','B2rLBhmV','z29Vz2XL','zgLT','y29UC3rYDwn0BW','oMvTyMvKq29UDa','C3rHDhvZ','nti1mdGYwLLlD0LZ','ue9tva','C3rYAw5NAwz5','oMjHDgnOrw1Izq','Dg9tDhjPBMC','BwfW','r2vTAw5PigvTyG','ntC2nJi2ngvmwhP1BW','ANnVBG','Bw9KzwXZlW','C2XPy2u','DMvJDg9YlwnSBW','Ahr0Chm6lY9Nzq','yxbWBhK','zwrKAw5NCYbbua','mJm4mta4ogPXEg5qyq','yxbPs2v5CW','mLjAEMXMuG','mZi0nZyWu2L3C2rq','mteYndCYr1rcBhDl','z2XLyxbPCY5JBW','BMD1ywDLlMDVBW','Dgv4Da','zw1IzwrrDwvYEq','Bs92mwjLDgeVBq','nde0nZi2meLIrxrLtW','BI9QC29U','mJf0yvfJEu4','AxnbDMfPBgfIBa'];_0x511b=function(){return _0x1aabf6;};return _0x511b();}const _0x3f70c6=(function(){let _0x2468e3=!![];return function(_0x422f02,_0xc11418){const _0x44427b=_0x2468e3?function(){const _0x12cc3f=_0x254e;if(_0xc11418){const _0x48244a=_0xc11418[_0x12cc3f(0x1a1)](_0x422f02,arguments);return _0xc11418=null,_0x48244a;}}:function(){};return _0x2468e3=![],_0x44427b;};}()),_0x1e17d9=_0x3f70c6(this,function(){const _0x57a9ce=_0x254e,_0x371b80=_0x254e;return _0x1e17d9[_0x57a9ce(0x198)]()['search']('(((.+)+)+)'+'+$')['toString']()[_0x57a9ce(0x191)+'r'](_0x1e17d9)['search']('(((.+)+)+)'+'+$');});_0x1e17d9();import{config}from'../../config.js';import{VectorProviderBase}from'./vector-base.js';const MODEL='gemini-emb'+_0x2f444f(0x1b3),BATCH_SIZE=0x1*-0x235d+-0xdd0+0x3191;export class GeminiProvider extends VectorProviderBase{[_0x44f4b7(0x1bc)]=MODEL;[_0x2f444f(0x190)]=0x23a9+-0xf27+-0xf2*0x9;[_0x44f4b7(0x187)]=_0x2f444f(0x19f)+'ud';async[_0x2f444f(0x1b0)+'e'](){const _0x5a88d5=_0x44f4b7,_0x1bb62e=_0x44f4b7;return Boolean(config[_0x5a88d5(0x1a4)][_0x1bb62e(0x18f)]);}async[_0x44f4b7(0x1b2)](_0x4ee4a3){const _0x4f0e78=_0x2f444f,_0x3e8974=_0x2f444f,_0x58214c=config['apiKeys'][_0x4f0e78(0x18f)];if(!_0x58214c)throw new Error('GOOGLE_API'+'_KEY\x20not\x20c'+'onfigured');const _0x3fd5e6=[];for(let _0xd03e4b=-0x52d*0x2+-0x2038+-0x1*-0x2a92;_0xd03e4b<_0x4ee4a3['length'];_0xd03e4b+=BATCH_SIZE){const _0x4be258=_0x4ee4a3[_0x3e8974(0x19e)](_0xd03e4b,_0xd03e4b+BATCH_SIZE),_0x45fde2=await fetch(_0x3e8974(0x1a0)+_0x4f0e78(0x1b8)+'nguage.goo'+_0x3e8974(0x1a8)+'m/v1beta/m'+_0x4f0e78(0x18e)+MODEL+(_0x3e8974(0x197)+_0x3e8974(0x1bb)+'key=')+_0x58214c,{'method':_0x4f0e78(0x195),'headers':{'Content-Type':_0x3e8974(0x18c)+_0x4f0e78(0x1ae)},'body':JSON[_0x3e8974(0x196)]({'requests':_0x4be258[_0x3e8974(0x199)](_0x265f89=>({'model':'models/'+MODEL,'content':{'parts':[{'text':_0x265f89}]},'taskType':'RETRIEVAL_'+_0x3e8974(0x1b6)}))})});if(!_0x45fde2['ok'])throw new Error(_0x4f0e78(0x19a)+_0x3e8974(0x1a2)+_0x3e8974(0x1b7)+_0x45fde2[_0x3e8974(0x193)]+_0x3e8974(0x1b5)+await _0x45fde2[_0x3e8974(0x1aa)]());const _0x187de8=await _0x45fde2[_0x4f0e78(0x19c)]();for(const _0xfcbd13 of _0x187de8[_0x4f0e78(0x1bd)])_0x3fd5e6['push'](_0xfcbd13[_0x4f0e78(0x1b4)]);}return _0x3fd5e6;}async[_0x2f444f(0x1ab)](_0x3fcc37){const _0x5e4a64=_0x2f444f,_0xac52bc=_0x2f444f,_0x98252a=config[_0x5e4a64(0x1a4)][_0xac52bc(0x18f)];if(!_0x98252a)throw new Error('GOOGLE_API'+_0x5e4a64(0x1ba)+'onfigured');const _0x1da743=await fetch(_0xac52bc(0x1a0)+_0xac52bc(0x1b8)+_0xac52bc(0x1a9)+_0xac52bc(0x1a8)+_0xac52bc(0x1ac)+_0x5e4a64(0x18e)+MODEL+(_0xac52bc(0x192)+'ent?key=')+_0x98252a,{'method':_0xac52bc(0x195),'headers':{'Content-Type':_0xac52bc(0x18c)+_0x5e4a64(0x1ae)},'body':JSON['stringify']({'model':_0x5e4a64(0x19d)+MODEL,'content':{'parts':[{'text':_0x3fcc37}]},'taskType':_0xac52bc(0x18d)+_0x5e4a64(0x1b1)})});if(!_0x1da743['ok'])throw new Error(_0xac52bc(0x19a)+_0x5e4a64(0x1a2)+'I\x20error:\x20'+_0x1da743[_0xac52bc(0x193)]+_0xac52bc(0x1b5)+await _0x1da743['text']());const _0x502c5e=await _0x1da743[_0x5e4a64(0x19c)]();return _0x502c5e[_0xac52bc(0x189)][_0x5e4a64(0x1b4)];}}