refactor: use hq- prefix for role bead references
Migrate all role bead references from gt-*-role to hq-*-role using
beads.RoleBeadIDTown() function. Role beads are stored in town beads
(~/gt/.beads/) with the hq- prefix.
Changes:
- internal/cmd/prime.go: Use RoleBeadIDTown() for all roles
- internal/doctor/agent_beads_check.go: Use RoleBeadIDTown() for rig agents
- internal/polecat/manager.go: Use RoleBeadIDTown("polecat")
- internal/cmd/crew_add.go: Use RoleBeadIDTown("crew")
- internal/beads/beads.go: Update comments to document hq- convention
- Templates: Update bd show gt-deacon to bd show hq-deacon
Note: Tmux session names remain as gt-* (runtime identifiers).
Bead IDs use hq-* for town-level agents (persistent storage).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -35,7 +35,7 @@ gt peek deacon --lines 20
|
|||||||
|
|
||||||
**Step 2: Check agent bead state**
|
**Step 2: Check agent bead state**
|
||||||
```bash
|
```bash
|
||||||
bd show gt-deacon 2>/dev/null
|
bd show hq-deacon 2>/dev/null
|
||||||
# Look for:
|
# Look for:
|
||||||
# - state: running/working/idle
|
# - state: running/working/idle
|
||||||
# - last_activity: when was last update?
|
# - last_activity: when was last update?
|
||||||
|
|||||||
@@ -1388,15 +1388,20 @@ func IsAgentSessionBead(beadID string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Role bead ID naming convention:
|
// Role bead ID naming convention:
|
||||||
// gt-<role>-role
|
// Role beads are stored in town beads (~/.beads/) with hq- prefix.
|
||||||
|
//
|
||||||
|
// Canonical format: hq-<role>-role
|
||||||
//
|
//
|
||||||
// Examples:
|
// Examples:
|
||||||
// - gt-mayor-role
|
// - hq-mayor-role
|
||||||
// - gt-deacon-role
|
// - hq-deacon-role
|
||||||
// - gt-witness-role
|
// - hq-witness-role
|
||||||
// - gt-refinery-role
|
// - hq-refinery-role
|
||||||
// - gt-crew-role
|
// - hq-crew-role
|
||||||
// - gt-polecat-role
|
// - hq-polecat-role
|
||||||
|
//
|
||||||
|
// Use RoleBeadIDTown() to get canonical role bead IDs.
|
||||||
|
// The legacy RoleBeadID() function returns gt-<role>-role for backward compatibility.
|
||||||
|
|
||||||
// RoleBeadID returns the role bead ID for a given role type.
|
// RoleBeadID returns the role bead ID for a given role type.
|
||||||
// Role beads define lifecycle configuration for each agent type.
|
// Role beads define lifecycle configuration for each agent type.
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ func runCrewAdd(cmd *cobra.Command, args []string) error {
|
|||||||
RoleType: "crew",
|
RoleType: "crew",
|
||||||
Rig: rigName,
|
Rig: rigName,
|
||||||
AgentState: "idle",
|
AgentState: "idle",
|
||||||
RoleBead: "gt-crew-role",
|
RoleBead: beads.RoleBeadIDTown("crew"),
|
||||||
}
|
}
|
||||||
desc := fmt.Sprintf("Crew worker %s in %s - human-managed persistent workspace.", name, rigName)
|
desc := fmt.Sprintf("Crew worker %s in %s - human-managed persistent workspace.", name, rigName)
|
||||||
if _, err := bd.CreateAgentBead(crewID, desc, fields); err != nil {
|
if _, err := bd.CreateAgentBead(crewID, desc, fields); err != nil {
|
||||||
|
|||||||
@@ -1204,40 +1204,40 @@ func getAgentFields(ctx RoleContext, state string) *beads.AgentFields {
|
|||||||
RoleType: "crew",
|
RoleType: "crew",
|
||||||
Rig: ctx.Rig,
|
Rig: ctx.Rig,
|
||||||
AgentState: state,
|
AgentState: state,
|
||||||
RoleBead: "gt-crew-role",
|
RoleBead: beads.RoleBeadIDTown("crew"),
|
||||||
}
|
}
|
||||||
case RolePolecat:
|
case RolePolecat:
|
||||||
return &beads.AgentFields{
|
return &beads.AgentFields{
|
||||||
RoleType: "polecat",
|
RoleType: "polecat",
|
||||||
Rig: ctx.Rig,
|
Rig: ctx.Rig,
|
||||||
AgentState: state,
|
AgentState: state,
|
||||||
RoleBead: "gt-polecat-role",
|
RoleBead: beads.RoleBeadIDTown("polecat"),
|
||||||
}
|
}
|
||||||
case RoleMayor:
|
case RoleMayor:
|
||||||
return &beads.AgentFields{
|
return &beads.AgentFields{
|
||||||
RoleType: "mayor",
|
RoleType: "mayor",
|
||||||
AgentState: state,
|
AgentState: state,
|
||||||
RoleBead: "gt-mayor-role",
|
RoleBead: beads.RoleBeadIDTown("mayor"),
|
||||||
}
|
}
|
||||||
case RoleDeacon:
|
case RoleDeacon:
|
||||||
return &beads.AgentFields{
|
return &beads.AgentFields{
|
||||||
RoleType: "deacon",
|
RoleType: "deacon",
|
||||||
AgentState: state,
|
AgentState: state,
|
||||||
RoleBead: "gt-deacon-role",
|
RoleBead: beads.RoleBeadIDTown("deacon"),
|
||||||
}
|
}
|
||||||
case RoleWitness:
|
case RoleWitness:
|
||||||
return &beads.AgentFields{
|
return &beads.AgentFields{
|
||||||
RoleType: "witness",
|
RoleType: "witness",
|
||||||
Rig: ctx.Rig,
|
Rig: ctx.Rig,
|
||||||
AgentState: state,
|
AgentState: state,
|
||||||
RoleBead: "gt-witness-role",
|
RoleBead: beads.RoleBeadIDTown("witness"),
|
||||||
}
|
}
|
||||||
case RoleRefinery:
|
case RoleRefinery:
|
||||||
return &beads.AgentFields{
|
return &beads.AgentFields{
|
||||||
RoleType: "refinery",
|
RoleType: "refinery",
|
||||||
Rig: ctx.Rig,
|
Rig: ctx.Rig,
|
||||||
AgentState: state,
|
AgentState: state,
|
||||||
RoleBead: "gt-refinery-role",
|
RoleBead: beads.RoleBeadIDTown("refinery"),
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ func (c *AgentBeadsCheck) Fix(ctx *CheckContext) error {
|
|||||||
RoleType: "witness",
|
RoleType: "witness",
|
||||||
Rig: rigName,
|
Rig: rigName,
|
||||||
AgentState: "idle",
|
AgentState: "idle",
|
||||||
RoleBead: "gt-witness-role",
|
RoleBead: beads.RoleBeadIDTown("witness"),
|
||||||
}
|
}
|
||||||
desc := fmt.Sprintf("Witness for %s - monitors polecat health and progress.", rigName)
|
desc := fmt.Sprintf("Witness for %s - monitors polecat health and progress.", rigName)
|
||||||
if _, err := bd.CreateAgentBead(witnessID, desc, fields); err != nil {
|
if _, err := bd.CreateAgentBead(witnessID, desc, fields); err != nil {
|
||||||
@@ -244,7 +244,7 @@ func (c *AgentBeadsCheck) Fix(ctx *CheckContext) error {
|
|||||||
RoleType: "refinery",
|
RoleType: "refinery",
|
||||||
Rig: rigName,
|
Rig: rigName,
|
||||||
AgentState: "idle",
|
AgentState: "idle",
|
||||||
RoleBead: "gt-refinery-role",
|
RoleBead: beads.RoleBeadIDTown("refinery"),
|
||||||
}
|
}
|
||||||
desc := fmt.Sprintf("Refinery for %s - processes merge queue.", rigName)
|
desc := fmt.Sprintf("Refinery for %s - processes merge queue.", rigName)
|
||||||
if _, err := bd.CreateAgentBead(refineryID, desc, fields); err != nil {
|
if _, err := bd.CreateAgentBead(refineryID, desc, fields); err != nil {
|
||||||
@@ -261,7 +261,7 @@ func (c *AgentBeadsCheck) Fix(ctx *CheckContext) error {
|
|||||||
RoleType: "crew",
|
RoleType: "crew",
|
||||||
Rig: rigName,
|
Rig: rigName,
|
||||||
AgentState: "idle",
|
AgentState: "idle",
|
||||||
RoleBead: "gt-crew-role",
|
RoleBead: beads.RoleBeadIDTown("crew"),
|
||||||
}
|
}
|
||||||
desc := fmt.Sprintf("Crew worker %s in %s - human-managed persistent workspace.", workerName, rigName)
|
desc := fmt.Sprintf("Crew worker %s in %s - human-managed persistent workspace.", workerName, rigName)
|
||||||
if _, err := bd.CreateAgentBead(crewID, desc, fields); err != nil {
|
if _, err := bd.CreateAgentBead(crewID, desc, fields); err != nil {
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ func (m *Manager) AddWithOptions(name string, opts AddOptions) (*Polecat, error)
|
|||||||
RoleType: "polecat",
|
RoleType: "polecat",
|
||||||
Rig: m.rig.Name,
|
Rig: m.rig.Name,
|
||||||
AgentState: "spawning",
|
AgentState: "spawning",
|
||||||
RoleBead: "gt-polecat-role",
|
RoleBead: beads.RoleBeadIDTown("polecat"),
|
||||||
HookBead: opts.HookBead, // Set atomically at spawn time
|
HookBead: opts.HookBead, // Set atomically at spawn time
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -467,7 +467,7 @@ func (m *Manager) RecreateWithOptions(name string, force bool, opts AddOptions)
|
|||||||
RoleType: "polecat",
|
RoleType: "polecat",
|
||||||
Rig: m.rig.Name,
|
Rig: m.rig.Name,
|
||||||
AgentState: "spawning",
|
AgentState: "spawning",
|
||||||
RoleBead: "gt-polecat-role",
|
RoleBead: beads.RoleBeadIDTown("polecat"),
|
||||||
HookBead: opts.HookBead, // Set atomically at spawn time
|
HookBead: opts.HookBead, // Set atomically at spawn time
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ tmux has-session -t {{ .DeaconSession }} 2>/dev/null && echo "alive" || echo "de
|
|||||||
gt peek deacon --lines 20
|
gt peek deacon --lines 20
|
||||||
|
|
||||||
# Agent bead state
|
# Agent bead state
|
||||||
bd show gt-deacon 2>/dev/null
|
bd show hq-deacon 2>/dev/null
|
||||||
|
|
||||||
# Recent activity
|
# Recent activity
|
||||||
gt feed --since 10m --plain | head -20
|
gt feed --since 10m --plain | head -20
|
||||||
|
|||||||
Reference in New Issue
Block a user