Refactor index (#156)
* feat: add Telegram channel with agent swarm support Add Telegram as a messaging channel that can run alongside WhatsApp or standalone (TELEGRAM_ONLY mode). Includes bot pool support for agent swarms where each subagent appears as a different bot identity in the group. - Add grammy dependency for Telegram Bot API - Route messages through tg: JID prefix convention - Add storeMessageDirect for non-Baileys channels - Add sender field to IPC send_message for swarm identity - Support TELEGRAM_BOT_TOKEN, TELEGRAM_ONLY, TELEGRAM_BOT_POOL config Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add index.ts refactor plan Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor: extract channel abstraction, IPC, and router from index.ts Break the 1088-line monolith into focused modules: - src/channels/whatsapp.ts: WhatsAppChannel class implementing Channel interface - src/ipc.ts: IPC watcher and task processing with dependency injection - src/router.ts: message formatting, outbound routing, channel lookup - src/types.ts: Channel interface, OnInboundMessage, OnChatMetadata types Also adds regression test suite (98 tests), updates all documentation and skill files to reflect the new architecture. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * ci: add test workflow for PRs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: remove accidentally committed pool-bot assets Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(ci): remove grammy from base dependencies Grammy is installed by the /add-telegram skill, not a base dependency. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -476,7 +476,11 @@ Read `src/index.ts` and add the email polling infrastructure. First, add these i
|
||||
import { checkForNewEmails, sendEmailReply, getContextKey } from './email-channel.js';
|
||||
import { EMAIL_CHANNEL } from './config.js';
|
||||
import { isEmailProcessed, markEmailProcessed, markEmailResponded } from './db.js';
|
||||
```
|
||||
|
||||
Then add the `startEmailLoop` function:
|
||||
|
||||
```typescript
|
||||
async function startEmailLoop(): Promise<void> {
|
||||
if (!EMAIL_CHANNEL.enabled) {
|
||||
logger.info('Email channel disabled');
|
||||
@@ -524,11 +528,12 @@ Respond to this email. Your response will be sent as an email reply.`;
|
||||
await new Promise(resolve => setTimeout(resolve, EMAIL_CHANNEL.pollIntervalMs));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Then find the `connectWhatsApp` function and add `startEmailLoop()` call after `startMessageLoop()`:
|
||||
Then add `startEmailLoop()` in the `main()` function, after `startMessageLoop()`:
|
||||
|
||||
```typescript
|
||||
// In the connection === 'open' block, after startMessageLoop():
|
||||
// In main(), after startMessageLoop():
|
||||
startEmailLoop();
|
||||
```
|
||||
|
||||
@@ -574,7 +579,7 @@ async function runEmailAgent(
|
||||
|
||||
if (output.newSessionId) {
|
||||
sessions[groupFolder] = output.newSessionId;
|
||||
saveJson(path.join(DATA_DIR, 'sessions.json'), sessions);
|
||||
setSession(groupFolder, output.newSessionId);
|
||||
}
|
||||
|
||||
return output.status === 'success' ? output.result : null;
|
||||
@@ -600,7 +605,7 @@ If you want the agent to be able to send emails proactively from within a sessio
|
||||
}
|
||||
```
|
||||
|
||||
Then add handling in `src/index.ts` in the `processTaskIpc` function or create a new IPC handler for email actions.
|
||||
Then add handling in `src/ipc.ts` in the `processTaskIpc` function or create a new IPC handler for email actions.
|
||||
|
||||
### Step 8: Create Email Group Memory
|
||||
|
||||
|
||||
Reference in New Issue
Block a user