Unify agent startup with GUPP propulsion nudge
Witness and Refinery startup was duplicated across cmd/witness.go, cmd/up.go, cmd/rig.go, and daemon.go. Worse, not all code paths sent the propulsion nudge (GUPP - Gas Town Universal Propulsion Principle). Now unified in Manager.Start() which handles everything including nudges. Changes: - witness/manager.go: Full rewrite with session creation, env vars, theming, WaitForClaudeReady, startup nudge, and propulsion nudge (GUPP) - refinery/manager.go: Add propulsion nudge sequence after Claude startup - cmd/witness.go: Simplify to just call mgr.Start(), remove ensureWitnessSession - cmd/rig.go: Use witness.Manager.Start() instead of inline session creation - cmd/start.go: Use witness.Manager.Start() - cmd/up.go: Use witness.Manager.Start(), remove ensureWitness(), add EnsureSettingsForRole in ensureSession() - daemon.go: Use witness.Manager.Start() and refinery.Manager.Start() for unified startup with proper nudges This ensures all agent startup paths (gt witness start, gt rig boot, gt up, daemon restarts) consistently apply GUPP propulsion nudges. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -737,15 +737,14 @@ func runRigBoot(cmd *cobra.Command, args []string) error {
|
||||
skipped = append(skipped, "witness (already running)")
|
||||
} else {
|
||||
fmt.Printf(" Starting witness...\n")
|
||||
// Use ensureWitnessSession to create tmux session (same as gt witness start)
|
||||
created, err := ensureWitnessSession(rigName, r)
|
||||
if err != nil {
|
||||
return fmt.Errorf("starting witness: %w", err)
|
||||
}
|
||||
if created {
|
||||
// Update manager state to reflect running session
|
||||
witMgr := witness.NewManager(r)
|
||||
_ = witMgr.Start() // non-fatal: state file update
|
||||
witMgr := witness.NewManager(r)
|
||||
if err := witMgr.Start(false); err != nil {
|
||||
if err == witness.ErrAlreadyRunning {
|
||||
skipped = append(skipped, "witness (already running)")
|
||||
} else {
|
||||
return fmt.Errorf("starting witness: %w", err)
|
||||
}
|
||||
} else {
|
||||
started = append(started, "witness")
|
||||
}
|
||||
}
|
||||
@@ -818,13 +817,15 @@ func runRigStart(cmd *cobra.Command, args []string) error {
|
||||
skipped = append(skipped, "witness")
|
||||
} else {
|
||||
fmt.Printf(" Starting witness...\n")
|
||||
created, err := ensureWitnessSession(rigName, r)
|
||||
if err != nil {
|
||||
fmt.Printf(" %s Failed to start witness: %v\n", style.Warning.Render("⚠"), err)
|
||||
hasError = true
|
||||
} else if created {
|
||||
witMgr := witness.NewManager(r)
|
||||
_ = witMgr.Start()
|
||||
witMgr := witness.NewManager(r)
|
||||
if err := witMgr.Start(false); err != nil {
|
||||
if err == witness.ErrAlreadyRunning {
|
||||
skipped = append(skipped, "witness")
|
||||
} else {
|
||||
fmt.Printf(" %s Failed to start witness: %v\n", style.Warning.Render("⚠"), err)
|
||||
hasError = true
|
||||
}
|
||||
} else {
|
||||
started = append(started, "witness")
|
||||
}
|
||||
}
|
||||
@@ -1385,12 +1386,14 @@ func runRigRestart(cmd *cobra.Command, args []string) error {
|
||||
skipped = append(skipped, "witness")
|
||||
} else {
|
||||
fmt.Printf(" Starting witness...\n")
|
||||
created, err := ensureWitnessSession(rigName, r)
|
||||
if err != nil {
|
||||
fmt.Printf(" %s Failed to start witness: %v\n", style.Warning.Render("⚠"), err)
|
||||
startErrors = append(startErrors, fmt.Sprintf("witness: %v", err))
|
||||
} else if created {
|
||||
_ = witMgr.Start()
|
||||
if err := witMgr.Start(false); err != nil {
|
||||
if err == witness.ErrAlreadyRunning {
|
||||
skipped = append(skipped, "witness")
|
||||
} else {
|
||||
fmt.Printf(" %s Failed to start witness: %v\n", style.Warning.Render("⚠"), err)
|
||||
startErrors = append(startErrors, fmt.Sprintf("witness: %v", err))
|
||||
}
|
||||
} else {
|
||||
started = append(started, "witness")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user