@fortressllm/sybil 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env copy +91 -0
- package/.env.example +139 -0
- package/BROWSER_CONTROL.md +354 -0
- package/CLI_CHAT_FEATURE.md +224 -0
- package/CLI_GUIDE.md +359 -0
- package/DYNAMIC_SKILLS.md +345 -0
- package/DockerFile.sandbox +14 -0
- package/PROGRESS.md +249 -0
- package/README.md +281 -0
- package/RENAME_LOG.md +62 -0
- package/SIMPLIFIED_TELEGRAM_UX.md +273 -0
- package/SYBIL_SUMMARY.md +360 -0
- package/TASK11_NETWORK.md +202 -0
- package/TASK14_CLI.md +432 -0
- package/TASK8_SAFETY.md +317 -0
- package/TASK9_COMPLETION.md +186 -0
- package/TASK9_SUMMARY.md +201 -0
- package/TELEGRAM_OTP_AUTH.md +359 -0
- package/VECTOR_MEMORY.md +163 -0
- package/assets/logo.png +0 -0
- package/cypfq_code_search.md +287 -0
- package/cypfq_driver_search.md +297 -0
- package/cypfq_github_search.md +297 -0
- package/cypfq_repo_search.md +370 -0
- package/dist/agents/autonomous-agent.d.ts +61 -0
- package/dist/agents/autonomous-agent.d.ts.map +1 -0
- package/dist/agents/autonomous-agent.js +536 -0
- package/dist/agents/autonomous-agent.js.map +1 -0
- package/dist/agents/network.d.ts +1006 -0
- package/dist/agents/network.d.ts.map +1 -0
- package/dist/agents/network.js +1266 -0
- package/dist/agents/network.js.map +1 -0
- package/dist/cli/commands/backup.d.ts +3 -0
- package/dist/cli/commands/backup.d.ts.map +1 -0
- package/dist/cli/commands/backup.js +63 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +163 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +3 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +107 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +138 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +81 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/otp.d.ts +3 -0
- package/dist/cli/commands/otp.d.ts.map +1 -0
- package/dist/cli/commands/otp.js +142 -0
- package/dist/cli/commands/otp.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +3 -0
- package/dist/cli/commands/restore.d.ts.map +1 -0
- package/dist/cli/commands/restore.js +99 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/start.d.ts +3 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +65 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +68 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +3 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +62 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +49 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/whatsapp.d.ts +3 -0
- package/dist/cli/commands/whatsapp.d.ts.map +1 -0
- package/dist/cli/commands/whatsapp.js +281 -0
- package/dist/cli/commands/whatsapp.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +58 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +750 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/mastra/index.d.ts +4 -0
- package/dist/mastra/index.d.ts.map +1 -0
- package/dist/mastra/index.js +37 -0
- package/dist/mastra/index.js.map +1 -0
- package/dist/mastra/memory.d.ts +9 -0
- package/dist/mastra/memory.d.ts.map +1 -0
- package/dist/mastra/memory.js +92 -0
- package/dist/mastra/memory.js.map +1 -0
- package/dist/processors/index.d.ts +74 -0
- package/dist/processors/index.d.ts.map +1 -0
- package/dist/processors/index.js +153 -0
- package/dist/processors/index.js.map +1 -0
- package/dist/processors/semantic-recall.d.ts +63 -0
- package/dist/processors/semantic-recall.d.ts.map +1 -0
- package/dist/processors/semantic-recall.js +216 -0
- package/dist/processors/semantic-recall.js.map +1 -0
- package/dist/processors/tool-search.d.ts +26 -0
- package/dist/processors/tool-search.d.ts.map +1 -0
- package/dist/processors/tool-search.js +41 -0
- package/dist/processors/tool-search.js.map +1 -0
- package/dist/skills/dynamic/skill-generator.d.ts +169 -0
- package/dist/skills/dynamic/skill-generator.d.ts.map +1 -0
- package/dist/skills/dynamic/skill-generator.js +488 -0
- package/dist/skills/dynamic/skill-generator.js.map +1 -0
- package/dist/tools/agent-delegation-tools.d.ts +142 -0
- package/dist/tools/agent-delegation-tools.d.ts.map +1 -0
- package/dist/tools/agent-delegation-tools.js +263 -0
- package/dist/tools/agent-delegation-tools.js.map +1 -0
- package/dist/tools/browser-tools.d.ts +374 -0
- package/dist/tools/browser-tools.d.ts.map +1 -0
- package/dist/tools/browser-tools.js +752 -0
- package/dist/tools/browser-tools.js.map +1 -0
- package/dist/tools/dynamic/registry.d.ts +61 -0
- package/dist/tools/dynamic/registry.d.ts.map +1 -0
- package/dist/tools/dynamic/registry.js +121 -0
- package/dist/tools/dynamic/registry.js.map +1 -0
- package/dist/tools/dynamic/tool-generator.d.ts +99 -0
- package/dist/tools/dynamic/tool-generator.d.ts.map +1 -0
- package/dist/tools/dynamic/tool-generator.js +367 -0
- package/dist/tools/dynamic/tool-generator.js.map +1 -0
- package/dist/tools/extended-tools.d.ts +176 -0
- package/dist/tools/extended-tools.d.ts.map +1 -0
- package/dist/tools/extended-tools.js +464 -0
- package/dist/tools/extended-tools.js.map +1 -0
- package/dist/tools/library/calendar/index.d.ts +134 -0
- package/dist/tools/library/calendar/index.d.ts.map +1 -0
- package/dist/tools/library/calendar/index.js +160 -0
- package/dist/tools/library/calendar/index.js.map +1 -0
- package/dist/tools/podman-workspace-mcp-cli.d.ts +3 -0
- package/dist/tools/podman-workspace-mcp-cli.d.ts.map +1 -0
- package/dist/tools/podman-workspace-mcp-cli.js +12 -0
- package/dist/tools/podman-workspace-mcp-cli.js.map +1 -0
- package/dist/tools/podman-workspace-mcp.d.ts +247 -0
- package/dist/tools/podman-workspace-mcp.d.ts.map +1 -0
- package/dist/tools/podman-workspace-mcp.js +1093 -0
- package/dist/tools/podman-workspace-mcp.js.map +1 -0
- package/dist/tools/podman-workspace.d.ts +148 -0
- package/dist/tools/podman-workspace.d.ts.map +1 -0
- package/dist/tools/podman-workspace.js +682 -0
- package/dist/tools/podman-workspace.js.map +1 -0
- package/dist/tools/telegram-file-tools.d.ts +78 -0
- package/dist/tools/telegram-file-tools.d.ts.map +1 -0
- package/dist/tools/telegram-file-tools.js +294 -0
- package/dist/tools/telegram-file-tools.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +467 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +156 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/web-tools.d.ts +77 -0
- package/dist/tools/web-tools.d.ts.map +1 -0
- package/dist/tools/web-tools.js +416 -0
- package/dist/tools/web-tools.js.map +1 -0
- package/dist/tools/whatsapp-autoreply-tools.d.ts +118 -0
- package/dist/tools/whatsapp-autoreply-tools.d.ts.map +1 -0
- package/dist/tools/whatsapp-autoreply-tools.js +503 -0
- package/dist/tools/whatsapp-autoreply-tools.js.map +1 -0
- package/dist/tools/whatsapp-tools.d.ts +175 -0
- package/dist/tools/whatsapp-tools.d.ts.map +1 -0
- package/dist/tools/whatsapp-tools.js +566 -0
- package/dist/tools/whatsapp-tools.js.map +1 -0
- package/dist/utils/logger.d.ts +65 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +307 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/model-config.d.ts +73 -0
- package/dist/utils/model-config.d.ts.map +1 -0
- package/dist/utils/model-config.js +366 -0
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/semantic-memory.d.ts +82 -0
- package/dist/utils/semantic-memory.d.ts.map +1 -0
- package/dist/utils/semantic-memory.js +189 -0
- package/dist/utils/semantic-memory.js.map +1 -0
- package/dist/utils/system.d.ts +2 -0
- package/dist/utils/system.d.ts.map +1 -0
- package/dist/utils/system.js +24 -0
- package/dist/utils/system.js.map +1 -0
- package/dist/utils/telegram-auth.d.ts +54 -0
- package/dist/utils/telegram-auth.d.ts.map +1 -0
- package/dist/utils/telegram-auth.js +146 -0
- package/dist/utils/telegram-auth.js.map +1 -0
- package/dist/utils/telegram.d.ts +7 -0
- package/dist/utils/telegram.d.ts.map +1 -0
- package/dist/utils/telegram.js +1494 -0
- package/dist/utils/telegram.js.map +1 -0
- package/dist/utils/whatsapp-client.d.ts +166 -0
- package/dist/utils/whatsapp-client.d.ts.map +1 -0
- package/dist/utils/whatsapp-client.js +722 -0
- package/dist/utils/whatsapp-client.js.map +1 -0
- package/dist/workflows/planner-workflow.d.ts +39 -0
- package/dist/workflows/planner-workflow.d.ts.map +1 -0
- package/dist/workflows/planner-workflow.js +165 -0
- package/dist/workflows/planner-workflow.js.map +1 -0
- package/dist/workflows/skill-builder-workflow.d.ts +16 -0
- package/dist/workflows/skill-builder-workflow.d.ts.map +1 -0
- package/dist/workflows/skill-builder-workflow.js +157 -0
- package/dist/workflows/skill-builder-workflow.js.map +1 -0
- package/dist/workspace/index.d.ts +23 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +64 -0
- package/dist/workspace/index.js.map +1 -0
- package/docs/README.md +140 -0
- package/docs/api/agents.md +481 -0
- package/docs/api/browser-tools.md +469 -0
- package/docs/api/memory.md +629 -0
- package/docs/architecture/agent-networks.md +586 -0
- package/docs/architecture/memory.md +579 -0
- package/docs/architecture/overview.md +436 -0
- package/docs/architecture/tools.md +637 -0
- package/docs/cli-tui.md +367 -0
- package/docs/guides/environment-variables.md +502 -0
- package/docs/guides/troubleshooting.md +882 -0
- package/docs/tutorials/agent-networks.md +432 -0
- package/docs/tutorials/dynamic-tools.md +469 -0
- package/docs/tutorials/getting-started.md +263 -0
- package/docs/tutorials/skills.md +561 -0
- package/docs/tutorials/web-browsing.md +329 -0
- package/mastra.db-shm +0 -0
- package/mastra.db-wal +0 -0
- package/package.json +71 -0
- package/plan.md +601 -0
- package/skills/code-review/SKILL.md +48 -0
- package/skills/task-planning/SKILL.md +55 -0
- package/skills/web-research/SKILL.md +79 -0
- package/skills/whatsapp-management/SKILL.md +78 -0
- package/src/agents/autonomous-agent.ts +626 -0
- package/src/agents/network.ts +1307 -0
- package/src/cli/commands/backup.ts +78 -0
- package/src/cli/commands/config.ts +176 -0
- package/src/cli/commands/doctor.ts +111 -0
- package/src/cli/commands/init.ts +150 -0
- package/src/cli/commands/logs.ts +94 -0
- package/src/cli/commands/otp.ts +162 -0
- package/src/cli/commands/restore.ts +118 -0
- package/src/cli/commands/start.ts +76 -0
- package/src/cli/commands/status.ts +81 -0
- package/src/cli/commands/stop.ts +68 -0
- package/src/cli/commands/update.ts +61 -0
- package/src/cli/commands/whatsapp.ts +322 -0
- package/src/cli/index.ts +69 -0
- package/src/cli.ts +830 -0
- package/src/index.ts +124 -0
- package/src/mastra/index.ts +49 -0
- package/src/mastra/memory.ts +99 -0
- package/src/mastra/public/workspace/plan.md +115 -0
- package/src/mastra/public/workspace/research/react-tailwind/skill.md +47 -0
- package/src/processors/index.ts +170 -0
- package/src/processors/semantic-recall.ts +277 -0
- package/src/processors/tool-search.ts +46 -0
- package/src/skills/dynamic/skill-generator.ts +568 -0
- package/src/tools/agent-delegation-tools.ts +301 -0
- package/src/tools/browser-tools.ts +792 -0
- package/src/tools/dynamic/registry.ts +144 -0
- package/src/tools/dynamic/tool-generator.ts +406 -0
- package/src/tools/extended-tools.ts +498 -0
- package/src/tools/library/calendar/index.ts +172 -0
- package/src/tools/podman-workspace-mcp-cli.ts +14 -0
- package/src/tools/podman-workspace-mcp.ts +1290 -0
- package/src/tools/podman-workspace.ts +858 -0
- package/src/tools/telegram-file-tools.ts +320 -0
- package/src/tools/tool-registry.ts +233 -0
- package/src/tools/web-tools.ts +461 -0
- package/src/tools/whatsapp-autoreply-tools.ts +616 -0
- package/src/tools/whatsapp-tools.ts +602 -0
- package/src/utils/logger.ts +368 -0
- package/src/utils/model-config.ts +437 -0
- package/src/utils/semantic-memory.ts +230 -0
- package/src/utils/system.ts +25 -0
- package/src/utils/telegram-auth.ts +201 -0
- package/src/utils/telegram.ts +1847 -0
- package/src/utils/whatsapp-client.ts +808 -0
- package/src/workflows/planner-workflow.ts +178 -0
- package/src/workflows/skill-builder-workflow.ts +175 -0
- package/src/workspace/index.ts +69 -0
- package/tsconfig.json +22 -0
- package/view-logs.sh +116 -0
- package/whatsapp-session.sh +197 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import inquirer from "inquirer";
|
|
5
|
+
import { whatsappManager } from "../../utils/whatsapp-client.js";
|
|
6
|
+
|
|
7
|
+
export const whatsappCommand = new Command("whatsapp")
|
|
8
|
+
.description("Manage WhatsApp integration")
|
|
9
|
+
.option("-s, --status", "Check WhatsApp connection status")
|
|
10
|
+
.option("-i, --initialize", "Initialize WhatsApp connection")
|
|
11
|
+
.option("-q, --qr", "Show QR code for scanning")
|
|
12
|
+
.option("-d, --disconnect", "Disconnect WhatsApp")
|
|
13
|
+
.option("-l, --list-chats", "List WhatsApp chats")
|
|
14
|
+
.option("-c, --list-contacts [limit]", "List WhatsApp contacts (optional: limit number)")
|
|
15
|
+
.option("--get-contact <number>", "Get contact info by phone number or LID")
|
|
16
|
+
.option("--lid-to-phone <lid>", "Map LID to phone number (e.g., 187743636676218910@lid)")
|
|
17
|
+
.option("--phone-to-lid <phone>", "Map phone number to LID (e.g., 1234567890)")
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
console.log(chalk.cyan("\nš± WhatsApp Management\n"));
|
|
20
|
+
|
|
21
|
+
const isReady = whatsappManager.getReadyState();
|
|
22
|
+
|
|
23
|
+
// Show QR code
|
|
24
|
+
if (options.qr) {
|
|
25
|
+
if (isReady) {
|
|
26
|
+
console.log(chalk.yellow("ā ļø WhatsApp is already connected"));
|
|
27
|
+
console.log(chalk.gray(" Run 'sybil whatsapp --disconnect' to disconnect first"));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
console.log(chalk.cyan("š± WhatsApp QR Code\n"));
|
|
32
|
+
|
|
33
|
+
// Listen for QR code event
|
|
34
|
+
whatsappManager.on("qr", (qr: string) => {
|
|
35
|
+
console.log(chalk.white("š± Scan this QR code with your phone:\n"));
|
|
36
|
+
import("qrcode-terminal").then((qrcodeTerminal) => {
|
|
37
|
+
qrcodeTerminal.default.generate(qr, { small: true });
|
|
38
|
+
});
|
|
39
|
+
console.log(chalk.white("\nOr follow these steps:"));
|
|
40
|
+
console.log(chalk.white("1. Open WhatsApp on your phone"));
|
|
41
|
+
console.log(chalk.white("2. Go to Settings ā Linked Devices"));
|
|
42
|
+
console.log(chalk.white("3. Tap 'Link a Device'"));
|
|
43
|
+
console.log(chalk.white("4. Scan the QR code above\n"));
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
await whatsappManager.initialize();
|
|
48
|
+
console.log(chalk.yellow("ā³ Waiting for scan..."));
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.log(chalk.red("Failed to generate QR code"));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Status check (default if no other options)
|
|
57
|
+
if (options.status || (!options.initialize && !options.disconnect && !options.listChats && !options.listContacts && !options.getContact && !options.lidToPhone && !options.phoneToLid)) {
|
|
58
|
+
const spinner = ora("Checking WhatsApp status...").start();
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const ready = whatsappManager.getReadyState();
|
|
62
|
+
spinner.stop();
|
|
63
|
+
|
|
64
|
+
if (ready) {
|
|
65
|
+
const info = await whatsappManager.getMe();
|
|
66
|
+
console.log(chalk.green("ā
WhatsApp Connected"));
|
|
67
|
+
if (info.success && info.info) {
|
|
68
|
+
console.log(` š± Number: ${info.info.number}`);
|
|
69
|
+
console.log(` š¤ Name: ${info.info.name || "N/A"}`);
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
console.log(chalk.yellow("ā ļø WhatsApp Not Connected"));
|
|
73
|
+
console.log(chalk.gray(" Run 'sybil whatsapp --initialize' to connect"));
|
|
74
|
+
}
|
|
75
|
+
} catch (error) {
|
|
76
|
+
spinner.fail(chalk.red("Failed to check status"));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (options.initialize) {
|
|
83
|
+
if (isReady) {
|
|
84
|
+
console.log(chalk.yellow("ā ļø WhatsApp is already connected"));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
console.log(chalk.cyan("š± WhatsApp Initialization"));
|
|
89
|
+
|
|
90
|
+
// Listen for QR code event
|
|
91
|
+
whatsappManager.on("qr", (qr: string) => {
|
|
92
|
+
console.log(chalk.white("\nš± Scan this QR code with your phone:\n"));
|
|
93
|
+
// Using qrcode-terminal to display (same as client)
|
|
94
|
+
import("qrcode-terminal").then((qrcodeTerminal) => {
|
|
95
|
+
qrcodeTerminal.default.generate(qr, { small: true });
|
|
96
|
+
});
|
|
97
|
+
console.log(chalk.white("\nOr follow these steps:"));
|
|
98
|
+
console.log(chalk.white("1. Open WhatsApp on your phone"));
|
|
99
|
+
console.log(chalk.white("2. Go to Settings ā Linked Devices"));
|
|
100
|
+
console.log(chalk.white("3. Tap 'Link a Device'"));
|
|
101
|
+
console.log(chalk.white("4. Scan the QR code above\n"));
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const spinner = ora("Initializing WhatsApp...").start();
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
await whatsappManager.initialize();
|
|
108
|
+
spinner.stop();
|
|
109
|
+
|
|
110
|
+
console.log(chalk.yellow("ā³ Waiting for connection..."));
|
|
111
|
+
|
|
112
|
+
let attempts = 0;
|
|
113
|
+
const maxAttempts = 60;
|
|
114
|
+
|
|
115
|
+
while (attempts < maxAttempts) {
|
|
116
|
+
if (whatsappManager.getReadyState()) {
|
|
117
|
+
console.log(chalk.green("\nā
WhatsApp connected successfully!"));
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
121
|
+
attempts++;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
console.log(chalk.yellow("\nā ļø Timeout waiting for connection"));
|
|
125
|
+
console.log(chalk.gray("Please try again or check the logs"));
|
|
126
|
+
|
|
127
|
+
} catch (error) {
|
|
128
|
+
spinner.fail(chalk.red("Failed to initialize WhatsApp"));
|
|
129
|
+
console.error(error);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (options.disconnect) {
|
|
136
|
+
if (!isReady) {
|
|
137
|
+
console.log(chalk.yellow("ā ļø WhatsApp is not connected"));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const { confirm } = await inquirer.prompt([
|
|
142
|
+
{
|
|
143
|
+
type: "confirm",
|
|
144
|
+
name: "confirm",
|
|
145
|
+
message: "Are you sure you want to disconnect WhatsApp?",
|
|
146
|
+
default: false,
|
|
147
|
+
},
|
|
148
|
+
]);
|
|
149
|
+
|
|
150
|
+
if (!confirm) {
|
|
151
|
+
console.log(chalk.blue("Cancelled."));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const spinner = ora("Disconnecting WhatsApp...").start();
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
await whatsappManager.destroy();
|
|
159
|
+
spinner.succeed(chalk.green("ā
WhatsApp disconnected"));
|
|
160
|
+
} catch (error) {
|
|
161
|
+
spinner.fail(chalk.red("Failed to disconnect"));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (options.listChats) {
|
|
168
|
+
if (!isReady) {
|
|
169
|
+
console.log(chalk.red("ā WhatsApp not connected. Run 'sybil whatsapp --initialize' first."));
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const spinner = ora("Fetching chats...").start();
|
|
174
|
+
|
|
175
|
+
try {
|
|
176
|
+
const result = await whatsappManager.getChats();
|
|
177
|
+
spinner.stop();
|
|
178
|
+
|
|
179
|
+
if (result.success && result.chats) {
|
|
180
|
+
console.log(chalk.cyan(`\nš¬ WhatsApp Chats (${result.totalChats} total):\n`));
|
|
181
|
+
|
|
182
|
+
result.chats.slice(0, 20).forEach((chat, index) => {
|
|
183
|
+
const unread = chat.unreadCount > 0 ? chalk.red(` [${chat.unreadCount} unread]`) : "";
|
|
184
|
+
console.log(` ${index + 1}. ${chat.name}${unread}`);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
if (result.chats.length > 20) {
|
|
188
|
+
console.log(chalk.gray(`\n... and ${result.chats.length - 20} more`));
|
|
189
|
+
}
|
|
190
|
+
} else {
|
|
191
|
+
console.log(chalk.yellow("Could not fetch chats"));
|
|
192
|
+
}
|
|
193
|
+
} catch (error) {
|
|
194
|
+
spinner.fail(chalk.red("Failed to fetch chats"));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (options.listContacts) {
|
|
201
|
+
if (!isReady) {
|
|
202
|
+
console.log(chalk.red("ā WhatsApp not connected. Run 'sybil whatsapp --initialize' first."));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const spinner = ora("Fetching contacts...").start();
|
|
207
|
+
const limit = options.listContacts === true ? 50 : parseInt(options.listContacts, 10) || 50;
|
|
208
|
+
|
|
209
|
+
try {
|
|
210
|
+
const result = await whatsappManager.getAllContacts();
|
|
211
|
+
spinner.stop();
|
|
212
|
+
|
|
213
|
+
if (result.success && result.contacts) {
|
|
214
|
+
console.log(chalk.cyan(`\nš„ WhatsApp Contacts (${result.totalContacts} total):\n`));
|
|
215
|
+
|
|
216
|
+
result.contacts.slice(0, limit).forEach((contact, index) => {
|
|
217
|
+
const lid = contact.lid ? chalk.gray(` [LID: ${contact.lid}]`) : "";
|
|
218
|
+
const name = contact.name ? `${contact.name}` : chalk.gray("No name");
|
|
219
|
+
console.log(` ${index + 1}. ${name} - ${contact.number}${lid}`);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
if (result.contacts.length > limit) {
|
|
223
|
+
console.log(chalk.gray(`\n... and ${result.contacts.length - limit} more`));
|
|
224
|
+
}
|
|
225
|
+
} else {
|
|
226
|
+
console.log(chalk.yellow("Could not fetch contacts"));
|
|
227
|
+
}
|
|
228
|
+
} catch (error) {
|
|
229
|
+
spinner.fail(chalk.red("Failed to fetch contacts"));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (options.getContact) {
|
|
236
|
+
if (!isReady) {
|
|
237
|
+
console.log(chalk.red("ā WhatsApp not connected. Run 'sybil whatsapp --initialize' first."));
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const spinner = ora("Getting contact info...").start();
|
|
242
|
+
|
|
243
|
+
try {
|
|
244
|
+
const result = await whatsappManager.getContact(options.getContact);
|
|
245
|
+
spinner.stop();
|
|
246
|
+
|
|
247
|
+
if (result.success && result.contact) {
|
|
248
|
+
console.log(chalk.cyan("\nš¤ Contact Info:\n"));
|
|
249
|
+
console.log(` š± Number: ${result.contact.number || "N/A"}`);
|
|
250
|
+
console.log(` š¤ Name: ${result.contact.name || "N/A"}`);
|
|
251
|
+
console.log(` š¢ Business: ${result.contact.isBusiness ? "Yes" : "No"}`);
|
|
252
|
+
if (result.contact.lid) {
|
|
253
|
+
console.log(chalk.cyan(` š LID: ${result.contact.lid}`));
|
|
254
|
+
}
|
|
255
|
+
} else {
|
|
256
|
+
console.log(chalk.red(`ā Contact not found: ${result.error}`));
|
|
257
|
+
}
|
|
258
|
+
} catch (error) {
|
|
259
|
+
spinner.fail(chalk.red("Failed to get contact"));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (options.lidToPhone) {
|
|
266
|
+
if (!isReady) {
|
|
267
|
+
console.log(chalk.red("ā WhatsApp not connected. Run 'sybil whatsapp --initialize' first."));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const spinner = ora("Mapping LID to phone number...").start();
|
|
272
|
+
|
|
273
|
+
try {
|
|
274
|
+
const result = await whatsappManager.getContactLidAndPhone(options.lidToPhone);
|
|
275
|
+
spinner.stop();
|
|
276
|
+
|
|
277
|
+
if (result.success) {
|
|
278
|
+
console.log(chalk.cyan("\nš LID Mapping Result:\n"));
|
|
279
|
+
console.log(` š LID: ${result.lid || options.lidToPhone}`);
|
|
280
|
+
console.log(` š± Phone: ${result.phoneNumber || "Not available (user has privacy enabled)"}`);
|
|
281
|
+
if (result.phoneNumber) {
|
|
282
|
+
console.log(` š± Full ID: ${result.phoneNumber}@c.us`);
|
|
283
|
+
}
|
|
284
|
+
} else {
|
|
285
|
+
console.log(chalk.red(`ā Failed to map LID: ${result.error}`));
|
|
286
|
+
}
|
|
287
|
+
} catch (error) {
|
|
288
|
+
spinner.fail(chalk.red("Failed to map LID"));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (options.phoneToLid) {
|
|
295
|
+
if (!isReady) {
|
|
296
|
+
console.log(chalk.red("ā WhatsApp not connected. Run 'sybil whatsapp --initialize' first."));
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const spinner = ora("Mapping phone number to LID...").start();
|
|
301
|
+
|
|
302
|
+
try {
|
|
303
|
+
const result = await whatsappManager.getContactLidAndPhone(options.phoneToLid);
|
|
304
|
+
spinner.stop();
|
|
305
|
+
|
|
306
|
+
if (result.success) {
|
|
307
|
+
console.log(chalk.cyan("\nš Phone to LID Mapping Result:\n"));
|
|
308
|
+
console.log(` š± Phone: ${result.phoneNumber || options.phoneToLid}`);
|
|
309
|
+
console.log(` š LID: ${result.lid || "Not available"}`);
|
|
310
|
+
if (!result.lid) {
|
|
311
|
+
console.log(chalk.gray(" Note: LID not available - user may not have privacy enabled"));
|
|
312
|
+
}
|
|
313
|
+
} else {
|
|
314
|
+
console.log(chalk.red(`ā Failed to map phone: ${result.error}`));
|
|
315
|
+
}
|
|
316
|
+
} catch (error) {
|
|
317
|
+
spinner.fail(chalk.red("Failed to map phone number"));
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
});
|
package/src/cli/index.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sybil CLI
|
|
5
|
+
* Command-line interface for managing Sybil AI Agent
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Command } from "commander";
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
import figlet from "figlet";
|
|
11
|
+
import { initCommand } from "./commands/init.js";
|
|
12
|
+
import { startCommand } from "./commands/start.js";
|
|
13
|
+
import { stopCommand } from "./commands/stop.js";
|
|
14
|
+
import { statusCommand } from "./commands/status.js";
|
|
15
|
+
import { configCommand } from "./commands/config.js";
|
|
16
|
+
import { logsCommand } from "./commands/logs.js";
|
|
17
|
+
import { backupCommand } from "./commands/backup.js";
|
|
18
|
+
import { restoreCommand } from "./commands/restore.js";
|
|
19
|
+
import { updateCommand } from "./commands/update.js";
|
|
20
|
+
import { whatsappCommand } from "./commands/whatsapp.js";
|
|
21
|
+
import { otpCommand } from "./commands/otp.js";
|
|
22
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
23
|
+
|
|
24
|
+
const program = new Command();
|
|
25
|
+
|
|
26
|
+
// Register commands
|
|
27
|
+
program
|
|
28
|
+
.name("sybil")
|
|
29
|
+
.description("CLI for managing Sybil AI Agent")
|
|
30
|
+
.version("1.0.0");
|
|
31
|
+
|
|
32
|
+
// Add all commands
|
|
33
|
+
program.addCommand(initCommand);
|
|
34
|
+
program.addCommand(startCommand);
|
|
35
|
+
program.addCommand(stopCommand);
|
|
36
|
+
program.addCommand(statusCommand);
|
|
37
|
+
program.addCommand(configCommand);
|
|
38
|
+
program.addCommand(logsCommand);
|
|
39
|
+
program.addCommand(backupCommand);
|
|
40
|
+
program.addCommand(restoreCommand);
|
|
41
|
+
program.addCommand(updateCommand);
|
|
42
|
+
program.addCommand(whatsappCommand);
|
|
43
|
+
program.addCommand(otpCommand);
|
|
44
|
+
program.addCommand(doctorCommand);
|
|
45
|
+
|
|
46
|
+
// Show banner only when no arguments provided
|
|
47
|
+
if (process.argv.length <= 2) {
|
|
48
|
+
console.log(
|
|
49
|
+
chalk.cyan(
|
|
50
|
+
figlet.textSync("SYBIL", {
|
|
51
|
+
font: "Big",
|
|
52
|
+
horizontalLayout: "default",
|
|
53
|
+
})
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
console.log(chalk.magenta(" AI Agent Management CLI\n"));
|
|
57
|
+
console.log(chalk.gray(" Use: sybil <command> [options]"));
|
|
58
|
+
console.log(chalk.gray(" Examples:"));
|
|
59
|
+
console.log(chalk.gray(" ⢠sybil init - Setup wizard"));
|
|
60
|
+
console.log(chalk.gray(" ⢠sybil start - Start bot"));
|
|
61
|
+
console.log(chalk.gray(" ⢠sybil otp - Generate OTP"));
|
|
62
|
+
console.log(chalk.gray(" ⢠sybil --help - Show all commands\n"));
|
|
63
|
+
|
|
64
|
+
// Show help when no command provided
|
|
65
|
+
program.help();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Parse and execute commands
|
|
69
|
+
program.parse(process.argv);
|