Implement daemon registry system (bd-07b8c8)

- Created global daemon registry at ~/.beads/registry.json
- Daemons auto-register on start, unregister on graceful shutdown
- DiscoverDaemons() now uses registry instead of filesystem scan
- Instant daemon discovery (35ms vs indefinite hang)
- Auto-cleanup of stale registry entries
- Full test coverage

Closes bd-07b8c8, bd-acb971c7
This commit is contained in:
Steve Yegge
2025-10-30 18:37:12 -07:00
parent 13fcccb14d
commit dacf8de993
5 changed files with 435 additions and 3 deletions

View File

@@ -17,6 +17,7 @@ import (
"github.com/spf13/cobra"
"github.com/steveyegge/beads"
"github.com/steveyegge/beads/internal/daemon"
"github.com/steveyegge/beads/internal/rpc"
"github.com/steveyegge/beads/internal/storage"
"github.com/steveyegge/beads/internal/storage/sqlite"
@@ -1434,6 +1435,32 @@ func runDaemonLoop(interval time.Duration, autoCommit, autoPush bool, logPath, p
return
}
// Register daemon in global registry
registry, err := daemon.NewRegistry()
if err != nil {
log.log("Warning: failed to create registry: %v", err)
} else {
entry := daemon.RegistryEntry{
WorkspacePath: workspacePath,
SocketPath: socketPath,
DatabasePath: daemonDBPath,
PID: os.Getpid(),
Version: Version,
StartedAt: time.Now(),
}
if err := registry.Register(entry); err != nil {
log.log("Warning: failed to register daemon: %v", err)
} else {
log.log("Registered in global registry")
}
// Ensure we unregister on exit
defer func() {
if err := registry.Unregister(workspacePath, os.Getpid()); err != nil {
log.log("Warning: failed to unregister daemon: %v", err)
}
}()
}
ticker := time.NewTicker(interval)
defer ticker.Stop()

View File

@@ -11,7 +11,7 @@ import (
var (
// Version is the current version of bd (overridden by ldflags at build time)
Version = "0.19.1"
Version = "0.19.2"
// Build can be set via ldflags at compile time
Build = "dev"
)