mirror of
https://github.com/rowboatlabs/rowboat.git
synced 2026-07-12 21:02:17 +02:00
feat(channels): mobile bridge — chat with Rowboat from WhatsApp/Telegram
Adds a transport-agnostic messaging bridge in @x/core that drives the session/turn runtime from your phone: WhatsApp links as a companion device via Baileys QR pairing (self-chat is the command channel), Telegram long-polls the user's own bot token. Commands: list, resume N, new, status, stop; anything else runs a turn in the current session and replies with the final assistant text. Ask-human questions are relayed and answerable from the phone. - packages/core/src/channels/: bridge (commands, settle watcher, ask-human relay), WhatsApp + Telegram transports, config repo, service (lifecycle, status fan-out, QR rendering, current-transport reply routing, dynamic baileys import) - Settings → Mobile tab: enable toggles, QR pairing, bot token, sender allowlists - Strict sender authorization: WhatsApp self-chat + allowlisted numbers (LID-aware), Telegram allowlisted chat IDs only - Telegram offset persisted across restarts; generation-guarded WhatsApp socket lifecycle; vitest coverage for the bridge Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
fc9a76e1cb
commit
c80a09daba
6 changed files with 552 additions and 133 deletions
|
|
@ -13,11 +13,13 @@ import type { ChannelsConfig, ChannelsStatus } from "@x/shared/src/channels.js"
|
|||
type Config = z.infer<typeof ChannelsConfig>
|
||||
type Status = z.infer<typeof ChannelsStatus>
|
||||
|
||||
// Comma/space/newline separated ids ↔ list.
|
||||
// Comma/newline separated entries; each entry keeps digits only, so a
|
||||
// formatted number like "+1 (415) 555-1234" survives as one entry instead of
|
||||
// being shattered at the spaces.
|
||||
function parseIdList(draft: string): string[] {
|
||||
return draft
|
||||
.split(/[\s,]+/)
|
||||
.map((s) => s.replace(/[^\d]/g, ""))
|
||||
.split(/[,;\n]+/)
|
||||
.map((s) => s.replace(/\D/g, ""))
|
||||
.filter(Boolean)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue