Unify agent startup with Manager pattern
Refactors all agent startup paths (witness, refinery, crew, polecat) to use a consistent Manager interface with Start(), Stop(), IsRunning(), and SessionName() methods. Includes: - Witness manager with GUPP propulsion nudge for startup - Refinery manager for engineer sessions - Crew manager for worker agents - Session/polecat manager updates - claude_settings_check doctor check for settings validation - Settings management consolidated from rig/manager.go - Settings location moved outside source repos to prevent conflicts 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/steveyegge/gastown/internal/beads"
|
||||
"github.com/steveyegge/gastown/internal/claude"
|
||||
"github.com/steveyegge/gastown/internal/config"
|
||||
"github.com/steveyegge/gastown/internal/git"
|
||||
"github.com/steveyegge/gastown/internal/templates"
|
||||
@@ -436,6 +437,33 @@ Use crew for your own workspace. Polecats are for batch work dispatch.
|
||||
return nil, fmt.Errorf("creating polecats dir: %w", err)
|
||||
}
|
||||
|
||||
// Install Claude settings for all agent directories.
|
||||
// Settings are placed in parent directories (not inside git repos) so Claude
|
||||
// finds them via directory traversal without polluting source repos.
|
||||
fmt.Printf(" Installing Claude settings...\n")
|
||||
settingsRoles := []struct {
|
||||
dir string
|
||||
role string
|
||||
}{
|
||||
{witnessPath, "witness"},
|
||||
{filepath.Join(rigPath, "refinery"), "refinery"},
|
||||
{crewPath, "crew"},
|
||||
{polecatsPath, "polecat"},
|
||||
}
|
||||
for _, sr := range settingsRoles {
|
||||
if err := claude.EnsureSettingsForRole(sr.dir, sr.role); err != nil {
|
||||
fmt.Fprintf(os.Stderr, " Warning: Could not create %s settings: %v\n", sr.role, err)
|
||||
}
|
||||
}
|
||||
fmt.Printf(" ✓ Installed Claude settings\n")
|
||||
|
||||
// Initialize beads at rig level
|
||||
fmt.Printf(" Initializing beads database...\n")
|
||||
if err := m.initBeads(rigPath, opts.BeadsPrefix); err != nil {
|
||||
return nil, fmt.Errorf("initializing beads: %w", err)
|
||||
}
|
||||
fmt.Printf(" ✓ Initialized beads (prefix: %s)\n", opts.BeadsPrefix)
|
||||
|
||||
// Create rig-level agent beads (witness, refinery) in rig beads.
|
||||
// Town-level agents (mayor, deacon) are created by gt install in town beads.
|
||||
if err := m.initAgentBeads(rigPath, opts.Name, opts.BeadsPrefix); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user