Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
32c8446
docs: add design spec for call answer + media stream
Jul 29, 2026
5e509a9
docs: add implementation plan for call answer + media stream
Jul 29, 2026
f6e4700
chore: ignore local subagent-driven-development scratch dir
Jul 29, 2026
ad10bc3
feat: add meowcaller dependency for WhatsApp call media
Jul 29, 2026
404a757
docs: fix plan bug — go mod tidy strips unused meowcaller require
Jul 29, 2026
34e038c
fix: actually add meowcaller to go.mod
Jul 29, 2026
79ab4f3
feat: add call registry for tracking answerable meowcaller calls
Jul 29, 2026
4435c64
feat: capture incoming meowcaller calls into the call registry
Jul 29, 2026
5b0f989
feat: add AnswerCall, HangupCall, GetActiveCall to call service
Jul 29, 2026
d65497f
feat: add answer and hangup call HTTP handlers
Jul 29, 2026
a6ffe99
feat: register call answer and hangup routes
Jul 29, 2026
887b0f5
feat: add PCM16LE/float32 conversion for call media stream
Jul 29, 2026
e4c9472
feat: add WebSocket bridge implementing meowcaller media interfaces
Jul 29, 2026
f905738
feat: add call stream HTTP/WebSocket handler
Jul 29, 2026
cf946d3
feat: wire call registry and stream route into main
Jul 29, 2026
efa07ee
fix: reject call via meowcaller instead of raw whatsmeow RejectCall
Jul 29, 2026
f63ba0b
fix: don't call AcceptVideo for a call that starts as video
Jul 29, 2026
855ad75
docs: regenerate swagger docs for call answer/hangup endpoints
Jul 29, 2026
60b2a8f
spike: add POST /call/dial for outbound calls (experimental)
Jul 29, 2026
14991cd
spike: add reaction, add-participant, screen share, hand-raise endpoints
Jul 29, 2026
77290fc
spike: wire outbound video (screen share/camera) into the stream bridge
Jul 29, 2026
cc069f1
spike: request video upgrade before sending outbound video
Jul 29, 2026
a4d8e69
spike: don't call StartVideo on a call that already has video
Jul 29, 2026
35cfd30
spike: retry AddParticipant with backoff on usync timeout
Jul 29, 2026
4bd8818
spike: add video upgrade/enabled/orientation endpoints
Jul 29, 2026
51ca5e1
docs: regenerate swagger docs for spike call-control endpoints
Jul 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ coverage.*
.idea/
.vscode/
.DS_Store
.superpowers/
7 changes: 6 additions & 1 deletion cmd/evolution-go/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@ import (
_ "modernc.org/sqlite"

call_handler "github.com/evolution-foundation/evolution-go/pkg/call/handler"
call_registry "github.com/evolution-foundation/evolution-go/pkg/call/registry"
call_service "github.com/evolution-foundation/evolution-go/pkg/call/service"
call_stream "github.com/evolution-foundation/evolution-go/pkg/call/stream"
chat_handler "github.com/evolution-foundation/evolution-go/pkg/chat/handler"
chat_service "github.com/evolution-foundation/evolution-go/pkg/chat/service"
community_handler "github.com/evolution-foundation/evolution-go/pkg/community/handler"
Expand Down Expand Up @@ -85,6 +87,7 @@ func init() {
func setupRouter(db *gorm.DB, authDB *sql.DB, sqliteDB *sql.DB, config *config.Config, conn *amqp.Connection, exPath string, runtimeCtx *core.RuntimeContext) *gin.Engine {
killChannel := make(map[string](chan bool))
clientPointer := make(map[string]*whatsmeow.Client)
callRegistry := call_registry.NewCallRegistry()

loggerWrapper := logger_wrapper.NewLoggerManager(config)

Expand Down Expand Up @@ -177,6 +180,7 @@ func setupRouter(db *gorm.DB, authDB *sql.DB, sqliteDB *sql.DB, config *config.C
exPath,
mediaStorage,
natsProducer,
callRegistry,
loggerWrapper,
)
instanceService := instance_service.NewInstanceService(
Expand All @@ -192,7 +196,7 @@ func setupRouter(db *gorm.DB, authDB *sql.DB, sqliteDB *sql.DB, config *config.C
messageService := message_service.NewMessageService(clientPointer, messageRepository, whatsmeowService, loggerWrapper)
chatService := chat_service.NewChatService(clientPointer, whatsmeowService, loggerWrapper)
groupService := group_service.NewGroupService(clientPointer, whatsmeowService, loggerWrapper)
callService := call_service.NewCallService(clientPointer, whatsmeowService, loggerWrapper)
callService := call_service.NewCallService(clientPointer, whatsmeowService, callRegistry, loggerWrapper)
communityService := community_service.NewCommunityService(clientPointer, whatsmeowService, loggerWrapper)
labelService := label_service.NewLabelService(clientPointer, whatsmeowService, labelRepository, loggerWrapper)
newsletterService := newsletter_service.NewNewsletterService(clientPointer, whatsmeowService, loggerWrapper)
Expand Down Expand Up @@ -224,6 +228,7 @@ func setupRouter(db *gorm.DB, authDB *sql.DB, sqliteDB *sql.DB, config *config.C
// Passkey ceremony routes — PUBLIC (called by the browser extension from the
// web.whatsapp.com origin, gated only by an opaque ephemeral token).
passkey_handler.RegisterRoutes(r, whatsmeowService)
call_stream.RegisterRoutes(r, callService, instanceService)

routes.NewRouter(
auth_middleware.NewMiddleware(config, instanceService),
Expand Down
Loading