@@ -141,6 +141,20 @@ def _add_safe_info(self, table, service) -> Tuple[Optional[List[str]], Optional[
141141 safe_text = service .safe_address
142142 if safe_exists :
143143 safe_text += " [green]✓[/green]"
144+
145+ # Check if Agent is a signer
146+ agent_key = next ((k for k in service .keys if k .role == "agent" ), None )
147+ if agent_key and on_chain_signers :
148+ key_addr = agent_key .address .lower ()
149+ if not key_addr .startswith ("0x" ):
150+ key_addr = "0x" + key_addr
151+
152+ is_signer = key_addr in [s .lower () for s in on_chain_signers ]
153+ if not is_signer :
154+ safe_text += f"\n [bold red]⚠ Agent { agent_key .address } - NOT A SIGNER![/bold red]"
155+ else :
156+ safe_text += f" (Signer: { agent_key .address [:6 ]} ...)"
157+
144158 elif safe_exists is False :
145159 safe_text = (
146160 f"[bold red]⚠ { service .safe_address } - DOES NOT EXIST ON-CHAIN![/bold red]"
@@ -165,24 +179,50 @@ def _add_staking_info(self, table, service) -> None:
165179
166180 def _add_owner_info (self , table , service ) -> None :
167181 """Add owner information to the display table."""
182+ # 1. Display Signer/EOA Owner
168183 owner_key = next ((k for k in service .keys if k .role == "owner" ), None )
169- owner_addr = service .service_owner_address
170- if not owner_addr and owner_key :
171- owner_addr = owner_key .address
172-
173- if owner_addr :
174- val = owner_addr
175- if owner_key :
176- if owner_key .signature_verified :
177- val = f"[green]{ owner_addr } [/green]"
178- elif not owner_key .is_encrypted :
179- val = f"[red]{ owner_addr } [/red]"
180- status = "🔒 encrypted" if owner_key .is_encrypted else "🔓 plaintext"
181- table .add_row ("Owner" , f"{ val } { status } " )
182- else :
183- table .add_row ("Owner" , val )
184+ if owner_key :
185+ val = owner_key .address
186+ if owner_key .signature_verified :
187+ val = f"[green]{ val } [/green]"
188+ elif not owner_key .is_encrypted :
189+ val = f"[red]{ val } [/red]"
190+ status = "🔒 encrypted" if owner_key .is_encrypted else "🔓 plaintext"
191+ table .add_row ("Owner (EOA)" , f"{ val } { status } " )
192+ elif service .service_owner_address and service .service_owner_address != service .service_owner_safe :
193+ # Fallback if we have an address but no key object, and it's not the safe
194+ table .add_row ("Owner (EOA)" , service .service_owner_address )
195+ else :
196+ table .add_row ("Owner (EOA)" , "[yellow]N/A[/yellow]" )
197+
198+ # 2. Display Safe Owner
199+ if service .service_owner_safe :
200+ # Check on-chain existence if possible (using same helper as agent safe)
201+ on_chain_signers , safe_exists = self ._get_safe_signers (
202+ service .service_owner_safe , service .chain_name
203+ )
204+ val = service .service_owner_safe
205+ if safe_exists :
206+ val += " [green]✓[/green]"
207+
208+ # Check if EOA owner is a signer
209+ if owner_key and on_chain_signers :
210+ key_addr = owner_key .address .lower ()
211+ if not key_addr .startswith ("0x" ):
212+ key_addr = "0x" + key_addr
213+
214+ is_signer = key_addr in [s .lower () for s in on_chain_signers ]
215+ if not is_signer :
216+ val += f"\n [bold red]⚠ { owner_key .address } - NOT A SIGNER![/bold red]"
217+ else :
218+ val += f" (Signer: { owner_key .address [:6 ]} ...)"
219+
220+ elif safe_exists is False :
221+ val += " [bold red]⚠ DOES NOT EXIST![/bold red]"
222+
223+ table .add_row ("Owner (Safe)" , val )
184224 else :
185- table .add_row ("Owner" , "[red]Not detected[/red ]" )
225+ table .add_row ("Owner (Safe) " , "[yellow]N/A[/yellow ]" )
186226
187227 def _add_agent_info (self , table , service , on_chain_signers , safe_exists ) -> None :
188228 """Add agent information to the display table."""
0 commit comments