alvin-bot 5.7.0 → 5.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +25 -31
  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 -174
  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 -583
  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 -86
  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 -1902
  135. package/dist/web/setup-api.js +1 -1101
  136. package/package.json +5 -2
  137. package/dist/.metadata_never_index +0 -0
@@ -1,214 +1 @@
1
- /**
2
- * Tool Discovery Service
3
- *
4
- * Scans the system at startup for available CLI tools, configured plugins,
5
- * and custom tools. Injects a summary into the system prompt so the AI
6
- * knows exactly what it can use — instead of guessing or saying "I'd need X".
7
- *
8
- * Philosophy: An agent that doesn't know its own capabilities is useless.
9
- */
10
- import { execSync } from "child_process";
11
- import fs from "fs";
12
- import { resolve } from "path";
13
- import { TOOLS_MD, TOOLS_JSON, PLUGINS_DIR } from "../paths.js";
14
- // Cache the report — only scan once per process lifetime
15
- let cachedReport = null;
16
- /**
17
- * CLI tools to probe for. Grouped by category.
18
- * Each entry: [binary, description]
19
- */
20
- const TOOL_PROBES = {
21
- "📧 Email & Communication": [
22
- ["himalaya", "Email CLI (IMAP/SMTP) — list, read, send, search emails"],
23
- ["wacli", "WhatsApp CLI — send messages, search history"],
24
- ["signal-cli", "Signal messenger CLI"],
25
- ],
26
- "🌐 Web & Network": [
27
- ["curl", "HTTP requests"],
28
- ["wget", "File downloads"],
29
- ["httpie", "Modern HTTP client"],
30
- ["jq", "JSON processor"],
31
- ],
32
- "📄 Document Processing": [
33
- ["pandoc", "Universal document converter (Markdown, HTML, PDF, DOCX, LaTeX)"],
34
- ["pdftotext", "Extract text from PDFs"],
35
- ["pdfinfo", "PDF metadata"],
36
- ["pdftoppm", "PDF to images"],
37
- ["gs", "Ghostscript — PDF manipulation (merge, split, compress)"],
38
- ["wkhtmltopdf", "HTML to PDF renderer"],
39
- ["libreoffice", "Office document conversion"],
40
- ],
41
- "🎨 Image Processing": [
42
- ["sips", "macOS image processing (resize, convert, rotate)"],
43
- ["magick", "ImageMagick — advanced image manipulation"],
44
- ["convert", "ImageMagick convert (legacy)"],
45
- ["ffmpeg", "Audio/Video/Image swiss army knife"],
46
- ],
47
- "🎬 Audio & Video": [
48
- ["ffmpeg", "Audio/Video conversion, extraction, streaming"],
49
- ["ffprobe", "Media file analysis (duration, codecs, bitrate)"],
50
- ["yt-dlp", "Download videos from YouTube and 1000+ sites"],
51
- ["whisper", "OpenAI Whisper — local speech-to-text"],
52
- ],
53
- "💻 Development": [
54
- ["node", "Node.js runtime"],
55
- ["npm", "Node package manager"],
56
- ["npx", "Node package executor"],
57
- ["python3", "Python 3"],
58
- ["pip3", "Python package manager"],
59
- ["git", "Version control"],
60
- ["gh", "GitHub CLI — issues, PRs, repos, actions"],
61
- ["docker", "Container runtime"],
62
- ["pm2", "Process manager"],
63
- ],
64
- "🖥️ macOS Automation": [
65
- ["osascript", "AppleScript / JXA automation"],
66
- ["cliclick", "Mouse/keyboard automation (click, type, key press)"],
67
- ["screencapture", "Take screenshots"],
68
- ["brightness", "Display brightness control"],
69
- ["blueutil", "Bluetooth control"],
70
- ["SwitchAudioSource", "Audio device switching"],
71
- ["mas", "Mac App Store CLI"],
72
- ["pbcopy", "Copy to clipboard"],
73
- ["pbpaste", "Paste from clipboard"],
74
- ],
75
- "📊 Data & Analysis": [
76
- ["sqlite3", "SQLite database CLI"],
77
- ["psql", "PostgreSQL client"],
78
- ["mysql", "MySQL client"],
79
- ["csvtool", "CSV processing"],
80
- ["mlr", "Miller — CSV/JSON/TSV data processor"],
81
- ],
82
- "🔧 System": [
83
- ["ssh", "Remote shell access"],
84
- ["sshpass", "SSH with password (non-interactive)"],
85
- ["rsync", "Fast file sync/transfer"],
86
- ["trash", "Safe file deletion (recoverable)"],
87
- ["htop", "System monitor"],
88
- ["lsof", "Open file/port inspector"],
89
- ],
90
- };
91
- /** Check if a binary exists on the system */
92
- function whichTool(name) {
93
- try {
94
- return execSync(`which ${name} 2>/dev/null`, { encoding: "utf-8", timeout: 3000 }).trim() || null;
95
- }
96
- catch {
97
- return null;
98
- }
99
- }
100
- /** Load custom tool names from TOOLS.md (with legacy tools.json fallback) */
101
- function loadCustomTools() {
102
- // Prefer TOOLS.md — extract tool names from ## headings
103
- if (fs.existsSync(TOOLS_MD)) {
104
- try {
105
- const content = fs.readFileSync(TOOLS_MD, "utf-8");
106
- const names = [];
107
- for (const match of content.matchAll(/^## (.+)$/gm)) {
108
- const name = match[1].trim().replace(/\s+/g, "_").toLowerCase();
109
- if (name)
110
- names.push(name);
111
- }
112
- if (names.length > 0)
113
- return names;
114
- }
115
- catch { /* fall through */ }
116
- }
117
- // Legacy fallback: docs/tools.json
118
- try {
119
- const data = JSON.parse(fs.readFileSync(TOOLS_JSON, "utf-8"));
120
- const tools = data.tools || data.items || (Array.isArray(data) ? data : []);
121
- return tools.map((t) => t.name || t.id || "unknown");
122
- }
123
- catch {
124
- return [];
125
- }
126
- }
127
- /** Get list of loaded plugins (read plugin directory) */
128
- function discoverPlugins() {
129
- try {
130
- return fs.readdirSync(PLUGINS_DIR)
131
- .filter(d => fs.statSync(resolve(PLUGINS_DIR, d)).isDirectory())
132
- .filter(d => fs.existsSync(resolve(PLUGINS_DIR, d, "index.js")));
133
- }
134
- catch {
135
- return [];
136
- }
137
- }
138
- /**
139
- * Scan the system for available tools. Cached after first call.
140
- */
141
- export function discoverTools(forceRescan = false) {
142
- if (cachedReport && !forceRescan)
143
- return cachedReport;
144
- const cliTools = [];
145
- const seen = new Set();
146
- for (const [category, probes] of Object.entries(TOOL_PROBES)) {
147
- for (const [name, description] of probes) {
148
- if (seen.has(name))
149
- continue;
150
- seen.add(name);
151
- const path = whichTool(name);
152
- if (path) {
153
- cliTools.push({ name, path, description, category });
154
- }
155
- }
156
- }
157
- const customTools = loadCustomTools();
158
- const plugins = discoverPlugins();
159
- // Build human-readable summary for the system prompt
160
- const lines = ["## Available Tools & Capabilities\n"];
161
- lines.push("The following tools are installed and ready to use on this system.\n");
162
- lines.push("**IMPORTANT:** Use these tools DIRECTLY. Do NOT say 'I would need X' when X is listed here.\n");
163
- // Group CLI tools by category
164
- const byCategory = new Map();
165
- for (const tool of cliTools) {
166
- const list = byCategory.get(tool.category) || [];
167
- list.push(tool);
168
- byCategory.set(tool.category, list);
169
- }
170
- for (const [category, tools] of byCategory) {
171
- lines.push(`### ${category}`);
172
- for (const t of tools) {
173
- lines.push(`- **${t.name}** — ${t.description}`);
174
- }
175
- lines.push("");
176
- }
177
- // Plugins
178
- if (plugins.length > 0) {
179
- lines.push("### 🔌 Active Plugins");
180
- for (const p of plugins) {
181
- lines.push(`- **${p}** — Use \`/${p}\` or ask directly about ${p} features`);
182
- }
183
- lines.push("");
184
- }
185
- // Custom tools
186
- if (customTools.length > 0) {
187
- lines.push(`### 🛠️ Custom Tools (${customTools.length} defined in TOOLS.md)`);
188
- lines.push(`Available via Web UI or by name. Examples: ${customTools.slice(0, 10).join(", ")}${customTools.length > 10 ? "..." : ""}`);
189
- lines.push("");
190
- }
191
- // Usage guidelines
192
- lines.push("### 💡 Usage Guidelines");
193
- lines.push("- **Act first, ask later.** If a tool is available → use it directly.");
194
- lines.push("- **`which <tool>`** if unsure whether something is installed.");
195
- lines.push("- **Combine tools:** e.g. `curl` + `jq` for APIs, `ffmpeg` + `ffprobe` for media.");
196
- lines.push("- **Missing tools:** Suggest installation, do NOT give up.");
197
- lines.push("");
198
- const summary = lines.join("\n");
199
- cachedReport = { cliTools, customTools, plugins, summary, scannedAt: Date.now() };
200
- console.log(`🔍 Tool discovery: ${cliTools.length} CLI tools, ${plugins.length} plugins, ${customTools.length} custom tools`);
201
- return cachedReport;
202
- }
203
- /**
204
- * Get the tool summary for injection into the system prompt.
205
- */
206
- export function getToolSummary() {
207
- return discoverTools().summary;
208
- }
209
- /**
210
- * Force rescan (e.g., after plugin install).
211
- */
212
- export function rescanTools() {
213
- return discoverTools(true);
214
- }
1
+ function _0x570a(){const _0x155993=['D2HPy2GG','CgfUzg9J','AM9PBG','Dg9tDhjPBMC','kIPjtvbpuLrbtG','ihjVDgf0zsK','kgr1CMf0Aw9Ula','Dg9VBhm','AgLTywXHEwe','z2L2zsb1Cc4','CMvZCYK','DcdIGjqGuergig1H','AwvZcG','BwfJt1mGAw1HzW','B20Gvg9VBhmGka','AxnbCNjHEq','ignSAxbIB2fYza','u2fMzsbMAwXLia','CNn0lcbHC2SGBa','DgLVBIWGC3rYzq','AgvZzsb0B29SCW','B24Sigv4DhjHyW','A2fNzsbTyw5HzW','AhrVCa','zgvSzxrPB24Gka','CgfYC2u','B250CM9S','C3nOCgfZCW','BMCGkhjLC2L6zq','ywrK','Aw5NihrVB2XZia','C2vHCMnOigHPCW','vIbKyxrHihbYBW','zg9JA2vY','BY9jBwfNzsbZDW','zsbhDwLKzwXPBG','lsaQkMb3AgLJAa','rxH0CMfJDcb0zq','B21LDgHPBMCGAq','C2LNBMfSlwnSAq','vMvYC2LVBIbJBW','zg9JDw1LBNqGyW','CNvUDgLTzq','Dw5RBM93BG','sfruucbYzxf1zq','CMvJB3zLCMfIBa','ifbsCYWGCMvWBW','B3nHC2nYAxb0','ug9ZDgDYzvnrta','Cg0Y','y2SSihr5CguSia','zw50CMLLCW','iokaLcbPC3n1zxmS','AxrLBxm','BgWGywnJzxnZ','C3nO','BgaGkYbGANfGia','yxjLigLUC3rHBa','B3v0ia','zgLYzwn0BhKU','lsaQkG','yxbWBhK','CMvHzgrPCLn5BG','rgLZCgXHEsbICG','rMLSzsbKB3DUBa','A2v5ihbYzxnZkq','zMzWCM9Izq','mJK5odf1AgHdC1G','yNjPz2H0BMvZCW','yMX1zxv0AwW','z2uGzxHLy3v0BW','ygzMBxbLz2aGkW','mJe5otyZAMnUr2Lp','BYbJB252zxjZAq','txLtuuWGy2XPzq','B2XZ','Exn0zw0UcG','y2f0zwDVCNK','mtG5oduZsLbUqMDR','igLMihvUC3vYzq','BgvUz3rO','tw91C2uVA2v5yG','mZi4nJq2wvfnzwzn','twvKAweGzMLSzq','Ahr0CgLL','B2fKCW','igbMzNbYB2jLya','igeGDg9VBcbPCW','y292zxj5oIa','ntuZmJmYn2XowLDMuW','Dg8TDgv4Da','uhjVy2vZCYbTyq','CYWGywn0Aw9UCW','u2LNBMfSig1LCW','sw1Hz2vnywDPyW','kgXLz2fJEsK','ugfZDguGzNjVBq','AgvUifGGAxmGBa','lsaQkKfJDcbMAq','Axn0zwqGAgvYzq','iokgKIb1C2uGAxqG','zMvY','BwvZC2fNzxmSia','BIWGzg8GtK9uia','kIOG4Ocuia','ifn1z2DLC3qGAq','CZOG','vgfRzsbZy3jLzq','CgXPDcWGy29TCa','z2v0','vdOQkIbvC2uGDa','DhjPBq','AxneAxjLy3rVCG','igf2ywLSywjSzq','qxbWBgvty3jPCa','zxjZAw9U','u3LZDgvTig1VBG','BwfNAwnR','AgfZ','CNn5BMm','ierjuKvdveXzlG','mtuZody3mNz3A2vzvW','CMvHzezPBgvtEq','DhjHC2G','tw9KzxjUieHuva','y2uGC3DPDgnOAq','AxrVCG','C2vHCMnO','z2uGBwfUywDLCG','C3rHDfn5BMm','Cg9YDcbPBNnWzq','yw5PChvSyxrPBW','uMvTB3rLihnOzq','CgLWmW','yw1PBMC','BNrYB2W','lsaQkK1PC3nPBG','CgrMAw5MBW','sLnptIbWCM9Jzq','uergig1LDgfKyq','rIbYzw5KzxjLCG','u1fmAxrLigrHDa','CgjWyxn0zq','ienmssb0B29SCW','icHTzxjNzsWGCW','BguGvg9VBhmGjG','ChnXBa','zxHPC3rZu3LUyW','u1yVsLnptI9uuW','B1nVDxjJzq','ywWGC3bLzwnOlq','igzVCIbTzwrPyq','BM9Kzq','C2vUz2vYienmsq','idi+l2rLDI9UDq','Bwf0y2HbBgW','igfUywX5C2LZia','t2zMAwnLigrVyW','yxrLCI4QkIbjzG','ienHCgfIAwXPDa','zMLSDgvY','CgrMDg9WCg0','kIOG4OcuifvZzsbG','BMqGmtaWmcSGCW','qxvKAw8VvMLKzq','lcbJB252zxj0la','BMfTzq','B3jLienmsq','Dg9YEq','BNn0ywXSyxrPBW','odi1odbKDhnpCgW','iYmJipcFKQeGvxnHzW','BNbT','B2fYzcbHDxrVBq','sfrntcWGuergla','Aw5KzxGUANm','BwfW','C3fSAxrLmW','ucbJBgLLBNq','ihbSDwDPBNmSia','AxrYyxrLkq','qMX1zxrVB3rOia','zsb0B29SCZOQkG','CYbPBNn0ywXSzq','rMfZDcbMAwXLia','ExqTzgXW','BNnOB3rZ','C3nVCG','8j+uJsbuB29SigrPCW','ig9Yigj5ig5HBq','D2fJBgK','yxnZD29YzcaOBG','BNb4','CMvWBgfJzq','uhL0Ag9Uidm','BIbut09muY5Tza','C2LWCW','zYb0B29SCZOQkG','CgjJB3b5','rw1HAwWGq0Xjia','AwDODg5LC3mGyW','EhqGzNjVBsbqra','ig5LzwqGwcCGDW','C3rZ','mtiWrePmrezc','ignSAwvUDa','BxLZCwW','zs4GrxHHBxbSzq','tM9KzsbWywnRyq','vw5PDMvYC2fSia','keLnqvaVu01uua','lI4U','vgHLigzVBgXVDW','sfrntcb0BYbqra','ndrku1brugW','DcaViePyqsbHDq','ksdIGjqGBgLZDcWG','ig9UihrOAxmGCW','t3bLBIbMAwXLlW','zsbWCM9JzxnZAq','t3bLBKfjifDOAq','BgvKigfUzcbYzq','DxrMltG','AYdIGjqGywr2yw5J','C2XPy2u','rg93BMXVywqGDG','Bg9N','Dg9TyxrPB24','ywr5ihrVihvZzq','Dg9mB3DLCKnHCW','zMzTCgvN','ierVie5pvcbZyq','kcGOlISPkYKRkq','iYmJia','z2vZ','r2HVC3rZy3jPCa','qxvKAw8Gzgv2Aq','ierpq1GSieXHva','CgrMDg90zxH0','teKG4OcuihnLBMqG','q1nwihbYB2nLCW','D2HPC3bLCG','BMfNzxi','D2DLDa','ChvZAa','BhnVzG','twfYA2rVD24Sia','qxzHAwXHyMXLia','twLSBgvYiokaLcbd','y3vYBa','BgLICMvVzMzPyW','lsaQkKnVBwjPBG','idX0B29SpMaQkG','C2v0','q29WEsb0BYbJBa','B24TAw50zxjHyW','DgL2zsK','AxjLy3rSEsbHyG','y2vZC29Y','D2TODg1SDg9Wza','uhL0Ag9UihbHyW','tM9Kzs5QCYbYDq','iYmJipcFM6dVUi8Gq3vZDa'];_0x570a=function(){return _0x155993;};return _0x570a();}const _0x1f8d41=_0x3105,_0x3699b0=_0x3105;(function(_0x3c223f,_0x404366){const _0x320d09=_0x3105,_0x370dc0=_0x3105,_0x10c9a8=_0x3c223f();while(!![]){try{const _0x2da15f=-parseInt(_0x320d09(0x1c7))/(0x20b*-0xb+0x11*-0x140+0xc1*0x3a)+-parseInt(_0x320d09(0x1cb))/(-0x166*-0x1a+-0x25f8+0x19e)+-parseInt(_0x320d09(0x1c1))/(0x2050+0x1313*-0x1+-0xd3a)+parseInt(_0x370dc0(0x24f))/(0x3b3+-0xee9+0x59d*0x2)*(-parseInt(_0x370dc0(0x223))/(-0x1c96+-0x169f+0x333a))+-parseInt(_0x370dc0(0x245))/(-0x1*-0x11d+0x139c*-0x1+0x1285)*(parseInt(_0x320d09(0x1bc))/(0x1dcd*0x1+0x975*0x1+-0x273b))+parseInt(_0x320d09(0x1f2))/(0x1a89+0x640+-0x20c1)+parseInt(_0x370dc0(0x1d2))/(0x1*-0x13b1+0x12fc+0xbe);if(_0x2da15f===_0x404366)break;else _0x10c9a8['push'](_0x10c9a8['shift']());}catch(_0x162edf){_0x10c9a8['push'](_0x10c9a8['shift']());}}}(_0x570a,-0x4*-0x8096+-0x209*-0x1ac+-0x2*0x1d98c));const _0x160068=(function(){let _0x11fbeb=!![];return function(_0x2a8919,_0x11bfe4){const _0x54a8bb=_0x11fbeb?function(){const _0x738af1=_0x3105;if(_0x11bfe4){const _0x4a5a3e=_0x11bfe4[_0x738af1(0x1b6)](_0x2a8919,arguments);return _0x11bfe4=null,_0x4a5a3e;}}:function(){};return _0x11fbeb=![],_0x54a8bb;};}()),_0x14cf85=_0x160068(this,function(){const _0x5d11ad=_0x3105,_0x1219da=_0x3105;return _0x14cf85[_0x5d11ad(0x17c)]()[_0x1219da(0x1f8)](_0x5d11ad(0x15a)+'+$')[_0x5d11ad(0x17c)]()['constructo'+'r'](_0x14cf85)['search'](_0x1219da(0x15a)+'+$');});_0x14cf85();function _0x3105(_0xd0e84c,_0x33b664){_0xd0e84c=_0xd0e84c-(-0x5b+0xd2c+-0xb7d);const _0x21f6c0=_0x570a();let _0x5b689d=_0x21f6c0[_0xd0e84c];if(_0x3105['GlgjqV']===undefined){var _0x27df0a=function(_0x5cdfc7){const _0x580e96='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x15476d='',_0x48a297='',_0x5f31b4=_0x15476d+_0x27df0a;for(let _0x597b7e=0x1*0x203e+0x28*0x7+-0x2156,_0xab90eb,_0x52079f,_0x1442c4=-0x120c+0x2300+-0x4*0x43d;_0x52079f=_0x5cdfc7['charAt'](_0x1442c4++);~_0x52079f&&(_0xab90eb=_0x597b7e%(0x1d6+0x4*0x5fc+-0x2*0xce1)?_0xab90eb*(-0x1f35+-0xdb*0xb+-0x28de*-0x1)+_0x52079f:_0x52079f,_0x597b7e++%(0x8*0x293+-0x1440+-0x54))?_0x15476d+=_0x5f31b4['charCodeAt'](_0x1442c4+(0x5d1*-0x1+-0x51+-0x18b*-0x4))-(-0x134a+0x4b3*-0x3+-0x216d*-0x1)!==0x11c8+-0x1b6+-0x22*0x79?String['fromCharCode'](0x10ab+-0x2ef*-0x5+-0x1e57&_0xab90eb>>(-(-0x5*0x4e8+-0x1e4a*-0x1+-0xb8*0x8)*_0x597b7e&-0x17*-0x8e+0x2302+-0x2fbe)):_0x597b7e:0xb16+0x6d4+0x2*-0x8f5){_0x52079f=_0x580e96['indexOf'](_0x52079f);}for(let _0x15c0e3=0x1372*0x2+0x1633+-0x3d17,_0x4526b5=_0x15476d['length'];_0x15c0e3<_0x4526b5;_0x15c0e3++){_0x48a297+='%'+('00'+_0x15476d['charCodeAt'](_0x15c0e3)['toString'](-0x16*-0xdf+-0x1bb4+-0x89a*-0x1))['slice'](-(-0x210d+-0x1c9b+0x3daa));}return decodeURIComponent(_0x48a297);};_0x3105['MYdlIm']=_0x27df0a,_0x3105['bZAaSj']={},_0x3105['GlgjqV']=!![];}const _0x28fded=_0x21f6c0[0x217b+-0xd0c+0x1*-0x146f],_0x12d0f3=_0xd0e84c+_0x28fded,_0x7c0e38=_0x3105['bZAaSj'][_0x12d0f3];if(!_0x7c0e38){const _0x5210fc=function(_0x470fcd){this['ieZfYp']=_0x470fcd,this['oyWTrI']=[0x1ed0+-0x12ae+0x73*-0x1b,-0x1275+0x2d0+0x10b*0xf,0x12a2+-0x1f9*0x10+0xcee],this['ZayPQV']=function(){return'newState';},this['vtGfuV']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['PXExCY']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x5210fc['prototype']['WxUxnS']=function(){const _0x3c103c=new RegExp(this['vtGfuV']+this['PXExCY']),_0x3c4151=_0x3c103c['test'](this['ZayPQV']['toString']())?--this['oyWTrI'][-0x1231+0xd*0xbf+0x57*0x19]:--this['oyWTrI'][0x1958+0x16c7+-0x301f];return this['AhAuSg'](_0x3c4151);},_0x5210fc['prototype']['AhAuSg']=function(_0x49310a){if(!Boolean(~_0x49310a))return _0x49310a;return this['eXdcVe'](this['ieZfYp']);},_0x5210fc['prototype']['eXdcVe']=function(_0x5c1124){for(let _0x159164=-0xba9+0x1511+0xe*-0xac,_0x3bc108=this['oyWTrI']['length'];_0x159164<_0x3bc108;_0x159164++){this['oyWTrI']['push'](Math['round'](Math['random']())),_0x3bc108=this['oyWTrI']['length'];}return _0x5c1124(this['oyWTrI'][0x1*0x11df+0x52c+-0x170b]);},new _0x5210fc(_0x3105)['WxUxnS'](),_0x5b689d=_0x3105['MYdlIm'](_0x5b689d),_0x3105['bZAaSj'][_0x12d0f3]=_0x5b689d;}else _0x5b689d=_0x7c0e38;return _0x5b689d;}import{execSync}from'child_process';import _0x43d176 from'fs';import{resolve}from'path';import{TOOLS_MD,TOOLS_JSON,PLUGINS_DIR}from'../paths.js';let cachedReport=null;const TOOL_PROBES={'📧\x20Email\x20&\x20Communication':[[_0x1f8d41(0x181),_0x3699b0(0x240)+_0x1f8d41(0x24b)+_0x1f8d41(0x251)+'read,\x20send'+',\x20search\x20e'+'mails'],[_0x3699b0(0x237),'WhatsApp\x20C'+_0x3699b0(0x161)+_0x3699b0(0x1df)+_0x1f8d41(0x198)+_0x3699b0(0x221)],[_0x1f8d41(0x1a0),_0x3699b0(0x1d6)+_0x1f8d41(0x212)]],'🌐\x20Web\x20&\x20Network':[[_0x3699b0(0x16b),_0x3699b0(0x1a5)+_0x1f8d41(0x244)],[_0x1f8d41(0x165),_0x3699b0(0x1b9)+_0x3699b0(0x1ce)],[_0x3699b0(0x1cd),_0x1f8d41(0x1f5)+_0x3699b0(0x22b)],['jq',_0x3699b0(0x203)+_0x3699b0(0x234)]],'📄\x20Document\x20Processing':[[_0x3699b0(0x17a),_0x3699b0(0x24a)+_0x3699b0(0x1a2)+'onverter\x20('+_0x3699b0(0x168)+_0x3699b0(0x227)+_0x1f8d41(0x15f)+'eX)'],[_0x3699b0(0x160),_0x3699b0(0x19e)+_0x1f8d41(0x242)+'Fs'],[_0x1f8d41(0x202),_0x3699b0(0x204)+'ta'],[_0x1f8d41(0x21a),'PDF\x20to\x20ima'+_0x1f8d41(0x15c)],['gs',_0x1f8d41(0x15d)+_0x1f8d41(0x184)+'nipulation'+_0x3699b0(0x209)+_0x1f8d41(0x1e5)+_0x1f8d41(0x183)],[_0x3699b0(0x175)+'f',_0x1f8d41(0x24e)+_0x1f8d41(0x205)],[_0x3699b0(0x16c)+'e',_0x3699b0(0x216)+'ument\x20conv'+_0x1f8d41(0x1ec)]],'🎨\x20Image\x20Processing':[[_0x3699b0(0x23d),_0x3699b0(0x186)+_0x3699b0(0x254)+_0x1f8d41(0x195)+_0x3699b0(0x21e)+_0x1f8d41(0x17e)],[_0x1f8d41(0x1ee),'ImageMagic'+_0x1f8d41(0x258)+'ed\x20image\x20m'+_0x1f8d41(0x1fc)+'n'],['convert',_0x1f8d41(0x1d7)+'k\x20convert\x20'+_0x1f8d41(0x1d8)],[_0x3699b0(0x158),_0x3699b0(0x21d)+_0x3699b0(0x19b)+'iss\x20army\x20k'+'nife']],'🎬\x20Audio\x20&\x20Video':[[_0x1f8d41(0x158),'Audio/Vide'+_0x3699b0(0x1c2)+_0x3699b0(0x18e)+_0x1f8d41(0x18c)+_0x3699b0(0x1ff)],[_0x1f8d41(0x1bb),_0x1f8d41(0x1cc)+_0x1f8d41(0x215)+_0x3699b0(0x17f)+'\x20codecs,\x20b'+_0x1f8d41(0x22d)],[_0x3699b0(0x232),_0x3699b0(0x25a)+'ideos\x20from'+'\x20YouTube\x20a'+_0x3699b0(0x21c)+'ites'],[_0x3699b0(0x163),_0x3699b0(0x255)+'sper\x20—\x20loc'+_0x1f8d41(0x20f)+_0x1f8d41(0x1d3)]],'💻\x20Development':[[_0x3699b0(0x211),_0x1f8d41(0x177)+'ntime'],[_0x1f8d41(0x225),_0x1f8d41(0x249)+_0x3699b0(0x1f9)],[_0x3699b0(0x239),'Node\x20packa'+_0x3699b0(0x1bf)+'r'],['python3',_0x1f8d41(0x23b)],[_0x1f8d41(0x1fe),_0x1f8d41(0x176)+_0x3699b0(0x18f)+'er'],['git',_0x3699b0(0x1a1)+_0x3699b0(0x200)],['gh','GitHub\x20CLI'+_0x1f8d41(0x1ad)+_0x1f8d41(0x1a7)+_0x3699b0(0x1d5)],[_0x3699b0(0x19a),'Container\x20'+_0x1f8d41(0x1a3)],[_0x1f8d41(0x1aa),_0x1f8d41(0x1d4)+_0x3699b0(0x164)]],'🖥️\x20macOS\x20Automation':[[_0x1f8d41(0x1a8),_0x1f8d41(0x1eb)+_0x1f8d41(0x250)+_0x1f8d41(0x155)],['cliclick',_0x1f8d41(0x1ca)+_0x3699b0(0x226)+'ation\x20(cli'+_0x1f8d41(0x1ab)+_0x3699b0(0x1ba)],['screencapt'+'ure',_0x3699b0(0x1e4)+_0x1f8d41(0x233)],[_0x3699b0(0x1bd),_0x1f8d41(0x1b8)+_0x3699b0(0x241)+_0x3699b0(0x193)],[_0x3699b0(0x1be),_0x1f8d41(0x22e)+'control'],['SwitchAudi'+_0x3699b0(0x20e),_0x1f8d41(0x15e)+_0x1f8d41(0x1f6)+'ng'],['mas','Mac\x20App\x20St'+_0x3699b0(0x220)],[_0x1f8d41(0x23f),_0x3699b0(0x170)+'ipboard'],[_0x1f8d41(0x207),_0x1f8d41(0x1d9)+_0x1f8d41(0x189)]],'📊\x20Data\x20&\x20Analysis':[[_0x3699b0(0x22a),_0x3699b0(0x206)+'abase\x20CLI'],[_0x3699b0(0x20b),_0x1f8d41(0x1a9)+_0x1f8d41(0x246)],[_0x3699b0(0x247),_0x1f8d41(0x1c3)+'nt'],['csvtool',_0x3699b0(0x162)+'sing'],['mlr',_0x1f8d41(0x16a)+_0x3699b0(0x20d)+_0x1f8d41(0x199)+_0x3699b0(0x174)]],'🔧\x20System':[[_0x3699b0(0x1b0),_0x3699b0(0x1fd)+_0x3699b0(0x1af)],[_0x3699b0(0x194),'SSH\x20with\x20p'+_0x3699b0(0x238)+_0x1f8d41(0x171)+_0x3699b0(0x172)],[_0x1f8d41(0x1f0),_0x3699b0(0x231)+'sync/trans'+_0x3699b0(0x1de)],[_0x3699b0(0x1f4),_0x1f8d41(0x18a)+_0x3699b0(0x191)+_0x3699b0(0x1a6)+'e)'],[_0x3699b0(0x190),_0x3699b0(0x1ed)+_0x3699b0(0x1f7)],[_0x3699b0(0x167),_0x3699b0(0x253)+_0x3699b0(0x1fb)+'ctor']]};function whichTool(_0x26b2b6){const _0x1adeb8=_0x1f8d41,_0x194e48=_0x3699b0;try{return execSync(_0x1adeb8(0x179)+_0x26b2b6+(_0x1adeb8(0x213)+'ll'),{'encoding':'utf-8','timeout':0xbb8})[_0x194e48(0x1e8)]()||null;}catch{return null;}}function loadCustomTools(){const _0x4b3fee=_0x1f8d41,_0xd40b69=_0x1f8d41;if(_0x43d176[_0x4b3fee(0x20c)](TOOLS_MD))try{const _0x472a86=_0x43d176[_0xd40b69(0x1f3)+'nc'](TOOLS_MD,_0xd40b69(0x257)),_0x28c36e=[];for(const _0x468efb of _0x472a86[_0xd40b69(0x214)](/^## (.+)$/gm)){const _0xcb6614=_0x468efb[0x2300+-0x1*0x1f13+0xfb*-0x4][_0xd40b69(0x1e8)]()[_0x4b3fee(0x23a)](/\s+/g,'_')[_0x4b3fee(0x157)+'e']();if(_0xcb6614)_0x28c36e[_0xd40b69(0x166)](_0xcb6614);}if(_0x28c36e['length']>0x1c9*-0x3+0x14f4+-0xf99)return _0x28c36e;}catch{}try{const _0x3f423d=JSON[_0x4b3fee(0x192)](_0x43d176[_0xd40b69(0x1f3)+'nc'](TOOLS_JSON,_0x4b3fee(0x257))),_0x5a6a98=_0x3f423d[_0x4b3fee(0x180)]||_0x3f423d[_0xd40b69(0x1ae)]||(Array[_0x4b3fee(0x188)](_0x3f423d)?_0x3f423d:[]);return _0x5a6a98[_0xd40b69(0x229)](_0x44d165=>_0x44d165[_0xd40b69(0x21f)]||_0x44d165['id']||_0x4b3fee(0x1a4));}catch{return[];}}function discoverPlugins(){const _0x3d53e9=_0x3699b0,_0x45e322=_0x1f8d41;try{return _0x43d176[_0x3d53e9(0x1b7)+'c'](PLUGINS_DIR)[_0x45e322(0x219)](_0x1f3b30=>_0x43d176[_0x3d53e9(0x1fa)](resolve(PLUGINS_DIR,_0x1f3b30))[_0x3d53e9(0x1e9)+'y']())[_0x45e322(0x219)](_0x1b3373=>_0x43d176['existsSync'](resolve(PLUGINS_DIR,_0x1b3373,_0x3d53e9(0x228))));}catch{return[];}}export function discoverTools(_0x13dbef=![]){const _0xe4da5c=_0x1f8d41,_0x7dc162=_0x3699b0;if(cachedReport&&!_0x13dbef)return cachedReport;const _0x3d378e=[],_0x3805d3=new Set();for(const [_0x4ac834,_0x3c07dc]of Object[_0xe4da5c(0x1ac)](TOOL_PROBES)){for(const [_0x589bf7,_0x5390bf]of _0x3c07dc){if(_0x3805d3[_0xe4da5c(0x1ef)](_0x589bf7))continue;_0x3805d3[_0xe4da5c(0x196)](_0x589bf7);const _0x20f759=whichTool(_0x589bf7);_0x20f759&&_0x3d378e[_0xe4da5c(0x166)]({'name':_0x589bf7,'path':_0x20f759,'description':_0x5390bf,'category':_0x4ac834});}}const _0x16a2ca=loadCustomTools(),_0x1557a5=discoverPlugins(),_0x57d066=['##\x20Availab'+_0x7dc162(0x20a)+_0x7dc162(0x218)+_0x7dc162(0x185)];_0x57d066[_0xe4da5c(0x166)](_0xe4da5c(0x24d)+_0x7dc162(0x197)+_0x7dc162(0x1b2)+_0x7dc162(0x256)+_0xe4da5c(0x156)+_0xe4da5c(0x252)+_0x7dc162(0x1c5)),_0x57d066[_0xe4da5c(0x166)](_0xe4da5c(0x17d)+_0x7dc162(0x1e7)+_0xe4da5c(0x18d)+_0xe4da5c(0x1f1)+_0x7dc162(0x159)+'y\x20\x27I\x20would'+_0x7dc162(0x243)+_0x7dc162(0x1da)+_0x7dc162(0x1dc)+'.\x0a');const _0x474fd5=new Map();for(const _0x4713e9 of _0x3d378e){const _0xde0d07=_0x474fd5[_0xe4da5c(0x1e6)](_0x4713e9[_0xe4da5c(0x1c6)])||[];_0xde0d07[_0xe4da5c(0x166)](_0x4713e9),_0x474fd5[_0xe4da5c(0x16f)](_0x4713e9[_0xe4da5c(0x1c6)],_0xde0d07);}for(const [_0x590f10,_0x182a4f]of _0x474fd5){_0x57d066['push'](_0x7dc162(0x15b)+_0x590f10);for(const _0x233eeb of _0x182a4f){_0x57d066[_0x7dc162(0x166)](_0xe4da5c(0x1b5)+_0x233eeb['name']+_0x7dc162(0x1e1)+_0x233eeb['descriptio'+'n']);}_0x57d066['push']('');}if(_0x1557a5[_0x7dc162(0x1c9)]>-0xdb*0xb+-0xf85*0x1+-0xc77*-0x2){_0x57d066[_0xe4da5c(0x166)]('###\x20🔌\x20Acti'+'ve\x20Plugins');for(const _0x51bab0 of _0x1557a5){_0x57d066['push']('-\x20**'+_0x51bab0+(_0xe4da5c(0x21b)+'/')+_0x51bab0+('`\x20or\x20ask\x20d'+_0x7dc162(0x173)+_0x7dc162(0x1b3))+_0x51bab0+'\x20features');}_0x57d066['push']('');}_0x16a2ca[_0x7dc162(0x1c9)]>0x182+0x135c+-0x14de&&(_0x57d066[_0xe4da5c(0x166)](_0x7dc162(0x178)+_0xe4da5c(0x187)+_0x16a2ca[_0x7dc162(0x1c9)]+('\x20defined\x20i'+_0xe4da5c(0x23c)+')')),_0x57d066[_0xe4da5c(0x166)](_0x7dc162(0x169)+'via\x20Web\x20UI'+_0x7dc162(0x236)+_0xe4da5c(0x248)+_0x7dc162(0x1e3)+_0x16a2ca[_0xe4da5c(0x259)](-0x1*0x51+-0x259f*-0x1+-0x254e,0x4b3*-0x3+-0xb25*0x1+-0x1*-0x1948)[_0xe4da5c(0x17b)](',\x20')+(_0x16a2ca[_0xe4da5c(0x1c9)]>-0x20*0x2f+0x1b*-0x12f+0x25df?_0x7dc162(0x24c):'')),_0x57d066[_0x7dc162(0x166)](''));_0x57d066['push'](_0x7dc162(0x224)+_0x7dc162(0x19c)+'es'),_0x57d066['push'](_0x7dc162(0x1db)+_0x7dc162(0x18b)+_0xe4da5c(0x217)+_0x7dc162(0x1d0)+_0xe4da5c(0x1ea)+_0xe4da5c(0x1dd)+_0x7dc162(0x1b4)),_0x57d066[_0x7dc162(0x166)](_0xe4da5c(0x19d)+_0x7dc162(0x16e)+_0xe4da5c(0x1c8)+'\x20whether\x20s'+_0xe4da5c(0x19f)+_0xe4da5c(0x230)+'d.'),_0x57d066['push'](_0x7dc162(0x16d)+_0xe4da5c(0x22f)+'\x20e.g.\x20`cur'+_0x7dc162(0x1b1)+'for\x20APIs,\x20'+_0xe4da5c(0x1c0)+_0xe4da5c(0x1cf)+_0x7dc162(0x210)+'.'),_0x57d066[_0xe4da5c(0x166)](_0x7dc162(0x201)+_0x7dc162(0x23e)+_0x7dc162(0x1e2)+_0x7dc162(0x222)+_0x7dc162(0x1e0)+_0x7dc162(0x182)),_0x57d066[_0xe4da5c(0x166)]('');const _0x5f282d=_0x57d066[_0x7dc162(0x17b)]('\x0a');return cachedReport={'cliTools':_0x3d378e,'customTools':_0x16a2ca,'plugins':_0x1557a5,'summary':_0x5f282d,'scannedAt':Date['now']()},console[_0xe4da5c(0x154)](_0x7dc162(0x235)+_0x7dc162(0x1d1)+_0x3d378e[_0x7dc162(0x1c9)]+(_0x7dc162(0x208)+',\x20')+_0x1557a5[_0xe4da5c(0x1c9)]+_0xe4da5c(0x22c)+_0x16a2ca['length']+('\x20custom\x20to'+_0x7dc162(0x1c4))),cachedReport;}export function getToolSummary(){return discoverTools()['summary'];}export function rescanTools(){return discoverTools(!![]);}