Instrument gt commands to emit events to activity feed (gt-7aw1m)

Add events.LogFeed calls to the following gt commands:
- nudge.go: Log TypeNudge events when nudging agents
- unsling.go: Log TypeUnhook events when removing work from hooks
- up.go: Log TypeBoot events when starting Gas Town services
- down.go: Log TypeHalt events when stopping Gas Town services
- stop.go: Log TypeKill events when stopping polecat sessions
- polecat_spawn.go: Log TypeSpawn events when spawning polecats

Also add helper functions to events package:
- UnhookPayload: Creates payload for unhook events
- KillPayload: Creates payload for kill events
- HaltPayload: Creates payload for halt events

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-30 10:40:54 -08:00
parent 3cd849e981
commit 907eba7194
7 changed files with 57 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ import (
"github.com/spf13/cobra"
"github.com/steveyegge/gastown/internal/daemon"
"github.com/steveyegge/gastown/internal/events"
"github.com/steveyegge/gastown/internal/style"
"github.com/steveyegge/gastown/internal/tmux"
"github.com/steveyegge/gastown/internal/workspace"
@@ -112,6 +113,15 @@ func runDown(cmd *cobra.Command, args []string) error {
fmt.Println()
if allOK {
fmt.Printf("%s All services stopped\n", style.Bold.Render("✓"))
// Log halt event with stopped services
stoppedServices := []string{"daemon", "deacon", "mayor"}
for _, rigName := range rigs {
stoppedServices = append(stoppedServices, fmt.Sprintf("%s/witness", rigName))
}
if downAll {
stoppedServices = append(stoppedServices, "tmux-server")
}
_ = events.LogFeed(events.TypeHalt, "gt", events.HaltPayload(stoppedServices))
} else {
fmt.Printf("%s Some services failed to stop\n", style.Bold.Render("✗"))
return fmt.Errorf("not all services stopped")

View File

@@ -5,6 +5,7 @@ import (
"strings"
"github.com/spf13/cobra"
"github.com/steveyegge/gastown/internal/events"
"github.com/steveyegge/gastown/internal/style"
"github.com/steveyegge/gastown/internal/tmux"
"github.com/steveyegge/gastown/internal/workspace"
@@ -92,6 +93,7 @@ func runNudge(cmd *cobra.Command, args []string) error {
if townRoot, err := workspace.FindFromCwd(); err == nil && townRoot != "" {
LogNudge(townRoot, "deacon", message)
}
_ = events.LogFeed(events.TypeNudge, sender, events.NudgePayload("", "deacon", message))
return nil
}
@@ -130,6 +132,7 @@ func runNudge(cmd *cobra.Command, args []string) error {
if townRoot, err := workspace.FindFromCwd(); err == nil && townRoot != "" {
LogNudge(townRoot, target, message)
}
_ = events.LogFeed(events.TypeNudge, sender, events.NudgePayload(rigName, target, message))
} else {
// Raw session name (legacy)
exists, err := t.HasSession(target)
@@ -150,6 +153,7 @@ func runNudge(cmd *cobra.Command, args []string) error {
if townRoot, err := workspace.FindFromCwd(); err == nil && townRoot != "" {
LogNudge(townRoot, target, message)
}
_ = events.LogFeed(events.TypeNudge, sender, events.NudgePayload("", target, message))
}
return nil

View File

@@ -8,6 +8,7 @@ import (
"github.com/steveyegge/gastown/internal/config"
"github.com/steveyegge/gastown/internal/constants"
"github.com/steveyegge/gastown/internal/events"
"github.com/steveyegge/gastown/internal/git"
"github.com/steveyegge/gastown/internal/polecat"
"github.com/steveyegge/gastown/internal/rig"
@@ -161,6 +162,9 @@ func SpawnPolecatForSling(rigName string, opts SlingSpawnOptions) (*SpawnedPolec
fmt.Printf("%s Polecat %s spawned\n", style.Bold.Render("✓"), polecatName)
// Log spawn event to activity feed
_ = events.LogFeed(events.TypeSpawn, "gt", events.SpawnPayload(rigName, polecatName))
return &SpawnedPolecatInfo{
RigName: rigName,
PolecatName: polecatName,

View File

@@ -6,6 +6,7 @@ import (
"github.com/spf13/cobra"
"github.com/steveyegge/gastown/internal/config"
"github.com/steveyegge/gastown/internal/events"
"github.com/steveyegge/gastown/internal/git"
"github.com/steveyegge/gastown/internal/rig"
"github.com/steveyegge/gastown/internal/session"
@@ -147,6 +148,9 @@ func runStop(cmd *cobra.Command, args []string) error {
logger := townlog.NewLogger(townRoot)
logger.Log(townlog.EventKill, agent, "gt stop")
// Log kill event to activity feed
_ = events.LogFeed(events.TypeKill, "gt", events.KillPayload(r.Name, info.Polecat, "gt stop"))
// Log captured output (truncated)
if len(output) > 200 {
output = output[len(output)-200:]

View File

@@ -5,6 +5,7 @@ import (
"github.com/spf13/cobra"
"github.com/steveyegge/gastown/internal/beads"
"github.com/steveyegge/gastown/internal/events"
"github.com/steveyegge/gastown/internal/style"
)
@@ -141,6 +142,9 @@ func runUnsling(cmd *cobra.Command, args []string) error {
return fmt.Errorf("unpinning bead %s: %w", pinned.ID, err)
}
// Log unhook event
_ = events.LogFeed(events.TypeUnhook, agentID, events.UnhookPayload(pinned.ID))
fmt.Printf("%s Work removed from hook\n", style.Bold.Render("✓"))
fmt.Printf(" Bead %s is now status=open\n", pinned.ID)

View File

@@ -12,6 +12,7 @@ import (
"github.com/steveyegge/gastown/internal/beads"
"github.com/steveyegge/gastown/internal/config"
"github.com/steveyegge/gastown/internal/daemon"
"github.com/steveyegge/gastown/internal/events"
"github.com/steveyegge/gastown/internal/refinery"
"github.com/steveyegge/gastown/internal/style"
"github.com/steveyegge/gastown/internal/tmux"
@@ -159,6 +160,13 @@ func runUp(cmd *cobra.Command, args []string) error {
fmt.Println()
if allOK {
fmt.Printf("%s All services running\n", style.Bold.Render("✓"))
// Log boot event with started services
startedServices := []string{"daemon", "deacon", "mayor"}
for _, rigName := range rigs {
startedServices = append(startedServices, fmt.Sprintf("%s/witness", rigName))
startedServices = append(startedServices, fmt.Sprintf("%s/refinery", rigName))
}
_ = events.LogFeed(events.TypeBoot, "gt", events.BootPayload("town", startedServices))
} else {
fmt.Printf("%s Some services failed to start\n", style.Bold.Render("✗"))
return fmt.Errorf("not all services started")