Created missing files: - logger.go: Logger type, setupLogger method, and env helpers - signals_unix.go: Unix signal definitions (SIGTERM, SIGINT, SIGHUP) - signals_windows.go: Windows signal definitions - sync.go: Sync loop implementation with export/import/validation helpers Fixed errors: - Added missing 'version' parameter to acquireDaemonLock call - Removed duplicate setupLock method from process.go (kept in daemon.go) - Removed duplicate startRPCServer from daemon.go (kept in rpc.go) - Fixed LogPath -> LogFile config field reference - Removed unused 'io' import from process.go Implementation notes: - exportToJSONL: Full implementation with dependencies, labels, comments - importFromJSONL: Placeholder (TODO: extract from cmd/bd/import.go) - countDBIssues: Uses SQL COUNT(*) optimization with fallback - validatePostImport: Checks for data loss - runSyncLoop/runEventLoop: Main daemon event loops with signal handling All packages now compile successfully with 'go build ./...' Amp-Thread-ID: https://ampcode.com/threads/T-36a7f730-3420-426f-9e23-f13d5fa089c4 Co-authored-by: Amp <amp@ampcode.com>
38 lines
994 B
Go
38 lines
994 B
Go
package daemonrunner
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/steveyegge/beads/internal/rpc"
|
|
)
|
|
|
|
// startRPCServer initializes and starts the RPC server
|
|
func (d *Daemon) startRPCServer(ctx context.Context) (*rpc.Server, chan error, error) {
|
|
// Sync daemon version with CLI version
|
|
rpc.ServerVersion = d.Version
|
|
|
|
server := rpc.NewServer(d.cfg.SocketPath, d.store, d.cfg.WorkspacePath, d.cfg.DBPath)
|
|
serverErrChan := make(chan error, 1)
|
|
|
|
go func() {
|
|
d.log.log("Starting RPC server: %s", d.cfg.SocketPath)
|
|
if err := server.Start(ctx); err != nil {
|
|
d.log.log("RPC server error: %v", err)
|
|
serverErrChan <- err
|
|
}
|
|
}()
|
|
|
|
select {
|
|
case err := <-serverErrChan:
|
|
d.log.log("RPC server failed to start: %v", err)
|
|
return nil, nil, err
|
|
case <-server.WaitReady():
|
|
d.log.log("RPC server ready (socket listening)")
|
|
case <-time.After(5 * time.Second):
|
|
d.log.log("WARNING: Server didn't signal ready after 5 seconds (may still be starting)")
|
|
}
|
|
|
|
return server, serverErrChan, nil
|
|
}
|