## Additional Changes: - Add test configurations and deployment artifacts - Update web assets and build manifests - Add version management scripts - Include local test configs (.bzzz/ directory) - Update internal runtime and agent configurations - Refresh Next.js build artifacts ## Final State: - Complete deployment system working end-to-end - ironwood successfully deployed and operational - All hardcoded values removed from codebase - Config generation and validation fully functional 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
130 lines
3.8 KiB
Go
130 lines
3.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"chorus.services/bzzz/internal/agent"
|
|
"chorus.services/bzzz/internal/common/runtime"
|
|
"chorus.services/bzzz/logging"
|
|
)
|
|
|
|
// simpleLogger implements the logging.Logger interface
|
|
type simpleLogger struct {
|
|
name string
|
|
}
|
|
|
|
func (l *simpleLogger) Info(msg string, args ...interface{}) {
|
|
log.Printf("[INFO] %s: "+msg, append([]interface{}{l.name}, args...)...)
|
|
}
|
|
|
|
func (l *simpleLogger) Warn(msg string, args ...interface{}) {
|
|
log.Printf("[WARN] %s: "+msg, append([]interface{}{l.name}, args...)...)
|
|
}
|
|
|
|
func (l *simpleLogger) Error(msg string, args ...interface{}) {
|
|
log.Printf("[ERROR] %s: "+msg, append([]interface{}{l.name}, args...)...)
|
|
}
|
|
|
|
func main() {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
// Create logger for agent
|
|
logger := &simpleLogger{name: "bzzz-agent"}
|
|
|
|
// Create runtime
|
|
rt := runtime.NewRuntime(logger)
|
|
|
|
// Initialize shared runtime
|
|
runtimeConfig := runtime.RuntimeConfig{
|
|
ConfigPath: getConfigPath(),
|
|
BinaryType: runtime.BinaryTypeAgent,
|
|
EnableSetupMode: needsSetup(),
|
|
}
|
|
|
|
// Check for instance collision
|
|
if err := runtime.CheckForRunningInstance("agent", runtime.BinaryTypeAgent); err != nil {
|
|
log.Fatalf("Instance check failed: %v", err)
|
|
}
|
|
defer runtime.RemoveInstanceLock("agent", runtime.BinaryTypeAgent)
|
|
|
|
// Initialize runtime services
|
|
services, err := rt.Initialize(ctx, runtimeConfig)
|
|
if err != nil {
|
|
log.Fatalf("Failed to initialize runtime: %v", err)
|
|
}
|
|
|
|
// Start shared services
|
|
if err := rt.Start(ctx, services); err != nil {
|
|
log.Fatalf("Failed to start runtime: %v", err)
|
|
}
|
|
|
|
// Initialize agent-specific components
|
|
agentRunner := agent.NewRunner(services, logger)
|
|
if err := agentRunner.Start(ctx); err != nil {
|
|
log.Fatalf("Failed to start agent runner: %v", err)
|
|
}
|
|
|
|
logger.Info("🤖 BZZZ Autonomous Agent started successfully")
|
|
logger.Info("📍 Node ID: %s", services.Node.ID().ShortString())
|
|
logger.Info("🎯 Agent ID: %s", services.Config.Agent.ID)
|
|
|
|
if services.Config.Agent.Role != "" {
|
|
authority, err := services.Config.GetRoleAuthority(services.Config.Agent.Role)
|
|
if err == nil {
|
|
logger.Info("🎭 Role: %s (Authority: %s)", services.Config.Agent.Role, authority)
|
|
if authority == "master" { // Using string literal to avoid import cycle
|
|
logger.Info("👑 This node can become admin/SLURP")
|
|
}
|
|
}
|
|
}
|
|
|
|
// Start agent-specific background processes
|
|
startAgentBackgroundProcesses(agentRunner, services, logger)
|
|
|
|
logger.Info("✅ Bzzz autonomous agent system fully operational")
|
|
|
|
// Wait for shutdown signals
|
|
sigChan := make(chan os.Signal, 1)
|
|
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
|
<-sigChan
|
|
|
|
logger.Info("🛑 Shutting down autonomous agent...")
|
|
|
|
// Stop agent runner
|
|
if err := agentRunner.Stop(ctx); err != nil {
|
|
logger.Error("Agent runner shutdown error: %v", err)
|
|
}
|
|
|
|
// Stop runtime services
|
|
if err := rt.Stop(ctx, services); err != nil {
|
|
logger.Error("Runtime shutdown error: %v", err)
|
|
}
|
|
|
|
logger.Info("✅ Bzzz autonomous agent shutdown completed")
|
|
}
|
|
|
|
// startAgentBackgroundProcesses starts agent-specific background processes
|
|
func startAgentBackgroundProcesses(agentRunner *agent.Runner, services *runtime.RuntimeServices, logger logging.Logger) {
|
|
// The agent runner already starts most background processes
|
|
// This function can be used for any additional agent-specific processes
|
|
|
|
logger.Info("🔍 Autonomous agent listening for task assignments")
|
|
logger.Info("📡 Ready for P2P task coordination")
|
|
logger.Info("🎯 HMMM collaborative reasoning active")
|
|
logger.Info("🤖 Autonomous task execution enabled")
|
|
}
|
|
|
|
// getConfigPath determines the configuration file path
|
|
func getConfigPath() string {
|
|
return runtime.GetConfigPath()
|
|
}
|
|
|
|
// needsSetup checks if the system needs to run setup mode
|
|
func needsSetup() bool {
|
|
return runtime.NeedsSetup()
|
|
} |