Add new build tag for WhatsApp native support to keep the binary smaller.
This commit is contained in:
parent
76f8ab827f
commit
25362ec763
4 changed files with 31 additions and 4 deletions
8
Makefile
8
Makefile
|
|
@ -87,6 +87,14 @@ build: generate
|
||||||
@echo "Build complete: $(BINARY_PATH)"
|
@echo "Build complete: $(BINARY_PATH)"
|
||||||
@ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME)
|
@ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME)
|
||||||
|
|
||||||
|
## build-whatsapp-native: Build with WhatsApp native (whatsmeow) support; larger binary
|
||||||
|
build-whatsapp-native: generate
|
||||||
|
@echo "Building $(BINARY_NAME) with WhatsApp native for $(PLATFORM)/$(ARCH)..."
|
||||||
|
@mkdir -p $(BUILD_DIR)
|
||||||
|
@$(GO) build $(GOFLAGS) -tags whatsapp_native $(LDFLAGS) -o $(BINARY_PATH) ./$(CMD_DIR)
|
||||||
|
@echo "Build complete: $(BINARY_PATH)"
|
||||||
|
@ln -sf $(BINARY_NAME)-$(PLATFORM)-$(ARCH) $(BUILD_DIR)/$(BINARY_NAME)
|
||||||
|
|
||||||
## build-linux-arm: Build for Linux ARMv7 (e.g. Raspberry Pi Zero 2 W 32-bit)
|
## build-linux-arm: Build for Linux ARMv7 (e.g. Raspberry Pi Zero 2 W 32-bit)
|
||||||
build-linux-arm: generate
|
build-linux-arm: generate
|
||||||
@echo "Building for linux/arm (GOARM=7)..."
|
@echo "Building for linux/arm (GOARM=7)..."
|
||||||
|
|
|
||||||
|
|
@ -391,7 +391,7 @@ picoclaw gateway
|
||||||
|
|
||||||
PicoClaw can connect to WhatsApp in two ways:
|
PicoClaw can connect to WhatsApp in two ways:
|
||||||
|
|
||||||
- **Native (recommended):** In-process using [whatsmeow](https://github.com/tulir/whatsmeow). No separate bridge. Set `"use_native": true` and leave `bridge_url` empty. On first run, scan the QR code with WhatsApp (Linked Devices). Session is stored under your workspace (e.g. `workspace/whatsapp/`).
|
- **Native (recommended):** In-process using [whatsmeow](https://github.com/tulir/whatsmeow). No separate bridge. Set `"use_native": true` and leave `bridge_url` empty. On first run, scan the QR code with WhatsApp (Linked Devices). Session is stored under your workspace (e.g. `workspace/whatsapp/`). The native channel is **optional** to keep the default binary small; build with `-tags whatsapp_native` (e.g. `make build-whatsapp-native` or `go build -tags whatsapp_native ./cmd/...`).
|
||||||
- **Bridge:** Connect to an external WebSocket bridge. Set `bridge_url` (e.g. `ws://localhost:3001`) and keep `use_native` false.
|
- **Bridge:** Connect to an external WebSocket bridge. Set `bridge_url` (e.g. `ws://localhost:3001`) and keep `use_native` false.
|
||||||
|
|
||||||
**Configure (native)**
|
**Configure (native)**
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
//go:build whatsapp_native
|
||||||
|
|
||||||
// PicoClaw - Ultra-lightweight personal AI agent
|
// PicoClaw - Ultra-lightweight personal AI agent
|
||||||
// License: MIT
|
// License: MIT
|
||||||
//
|
//
|
||||||
|
|
@ -58,16 +60,17 @@ type WhatsAppNativeChannel struct {
|
||||||
|
|
||||||
// NewWhatsAppNativeChannel creates a WhatsApp channel that uses whatsmeow for connection.
|
// NewWhatsAppNativeChannel creates a WhatsApp channel that uses whatsmeow for connection.
|
||||||
// storePath is the directory for the SQLite session store (e.g. workspace/whatsapp).
|
// storePath is the directory for the SQLite session store (e.g. workspace/whatsapp).
|
||||||
func NewWhatsAppNativeChannel(cfg config.WhatsAppConfig, bus *bus.MessageBus, storePath string) (*WhatsAppNativeChannel, error) {
|
func NewWhatsAppNativeChannel(cfg config.WhatsAppConfig, bus *bus.MessageBus, storePath string) (Channel, error) {
|
||||||
base := NewBaseChannel("whatsapp", cfg, bus, cfg.AllowFrom)
|
base := NewBaseChannel("whatsapp", cfg, bus, cfg.AllowFrom)
|
||||||
if storePath == "" {
|
if storePath == "" {
|
||||||
storePath = "whatsapp"
|
storePath = "whatsapp"
|
||||||
}
|
}
|
||||||
return &WhatsAppNativeChannel{
|
c := &WhatsAppNativeChannel{
|
||||||
BaseChannel: base,
|
BaseChannel: base,
|
||||||
config: cfg,
|
config: cfg,
|
||||||
storePath: storePath,
|
storePath: storePath,
|
||||||
}, nil
|
}
|
||||||
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *WhatsAppNativeChannel) Start(ctx context.Context) error {
|
func (c *WhatsAppNativeChannel) Start(ctx context.Context) error {
|
||||||
|
|
|
||||||
16
pkg/channels/whatsapp_native_stub.go
Normal file
16
pkg/channels/whatsapp_native_stub.go
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
//go:build !whatsapp_native
|
||||||
|
|
||||||
|
package channels
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/sipeed/picoclaw/pkg/bus"
|
||||||
|
"github.com/sipeed/picoclaw/pkg/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewWhatsAppNativeChannel returns an error when the binary was not built with -tags whatsapp_native.
|
||||||
|
// Build with: go build -tags whatsapp_native ./cmd/...
|
||||||
|
func NewWhatsAppNativeChannel(cfg config.WhatsAppConfig, bus *bus.MessageBus, storePath string) (Channel, error) {
|
||||||
|
return nil, fmt.Errorf("whatsapp native not compiled in; build with -tags whatsapp_native")
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue