All checks were successful
CI / check (push) Successful in 3m41s
Merge three separate patches that all modify internal/mail/router.go into one combined patch to avoid patch ordering conflicts. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
57 lines
1.7 KiB
Diff
57 lines
1.7 KiB
Diff
diff --git a/internal/mail/router.go b/internal/mail/router.go
|
|
--- a/internal/mail/router.go
|
|
+++ b/internal/mail/router.go
|
|
@@ -326,7 +326,11 @@ func agentBeadToAddress(bead *agentBead) string {
|
|
}
|
|
|
|
// Fall back to parsing description for role_type and rig
|
|
- return parseAgentAddressFromDescription(bead.Description)
|
|
+ if bead.Title != "" && strings.Contains(bead.Title, "/") {
|
|
+ return bead.Title
|
|
+ }
|
|
+ return parseAgentAddressFromDescription(bead.Description)
|
|
}
|
|
|
|
// Handle gt- prefixed IDs (legacy format)
|
|
@@ -330,8 +334,28 @@ func agentBeadToAddress(bead *agentBead) string {
|
|
}
|
|
|
|
// Handle gt- prefixed IDs (legacy format)
|
|
- if !strings.HasPrefix(id, "gt-") {
|
|
- return "" // Not a valid agent bead ID
|
|
+ // Handle rig-specific prefixes: <prefix>-<rig>-<role>-<name>
|
|
+ // Examples: j-java-crew-americano -> java/crew/americano
|
|
+ idParts := strings.Split(id, "-")
|
|
+ if len(idParts) >= 3 {
|
|
+ for i, part := range idParts {
|
|
+ if part == "crew" || part == "polecat" || part == "polecats" {
|
|
+ if i >= 1 && i < len(idParts)-1 {
|
|
+ rig := idParts[i-1]
|
|
+ name := strings.Join(idParts[i+1:], "-")
|
|
+ return rig + "/" + part + "/" + name
|
|
+ }
|
|
+ }
|
|
+ if part == "witness" || part == "refinery" {
|
|
+ if i >= 1 {
|
|
+ return idParts[i-1] + "/" + part
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // Handle gt- prefixed IDs (legacy format)
|
|
+ if !strings.HasPrefix(id, "gt-") {
|
|
+ return "" // Not a valid agent bead ID
|
|
}
|
|
|
|
// Strip prefix
|
|
@@ -646,7 +670,7 @@ func (r *Router) validateRecipient(identity string) error {
|
|
}
|
|
|
|
for _, agent := range agents {
|
|
- if agentBeadToAddress(agent) == identity {
|
|
+ if AddressToIdentity(agentBeadToAddress(agent)) == AddressToIdentity(identity) {
|
|
return nil // Found matching agent
|
|
}
|
|
}
|