From 7c7ddd262caef2ec531ac2e74a17dd72c3812653 Mon Sep 17 00:00:00 2001 From: chengjiansu Date: Thu, 16 Apr 2026 15:56:05 +0800 Subject: [PATCH] refactor: enhance MessageBus.read_inbox with clear parameter - Add clear=True parameter to read_inbox for optional message clearing - Update /inbox command to use clear=False for non-destructive reading - Remove JSON formatting in agent_loop to save tokens - Use walrus operator in s11 claim_task for cleaner code --- agents/s09_agent_teams.py | 9 +++++---- agents/s10_team_protocols.py | 9 +++++---- agents/s11_autonomous_agents.py | 15 +++++++-------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/agents/s09_agent_teams.py b/agents/s09_agent_teams.py index 90f6760df..eee7ef763 100644 --- a/agents/s09_agent_teams.py +++ b/agents/s09_agent_teams.py @@ -97,7 +97,7 @@ def send(self, sender: str, to: str, content: str, f.write(json.dumps(msg) + "\n") return f"Sent {msg_type} to {to}" - def read_inbox(self, name: str) -> list: + def read_inbox(self, name: str, clear: bool = True) -> list: inbox_path = self.dir / f"{name}.jsonl" if not inbox_path.exists(): return [] @@ -105,7 +105,8 @@ def read_inbox(self, name: str) -> list: for line in inbox_path.read_text().strip().splitlines(): if line: messages.append(json.loads(line)) - inbox_path.write_text("") + if clear: + inbox_path.write_text("") return messages def broadcast(self, sender: str, content: str, teammates: list) -> str: @@ -348,7 +349,7 @@ def agent_loop(messages: list): if inbox: messages.append({ "role": "user", - "content": f"{json.dumps(inbox, indent=2)}", + "content": f"{json.dumps(inbox)}", }) response = client.messages.create( model=MODEL, @@ -391,7 +392,7 @@ def agent_loop(messages: list): print(TEAM.list_all()) continue if query.strip() == "/inbox": - print(json.dumps(BUS.read_inbox("lead"), indent=2)) + print(json.dumps(BUS.read_inbox("lead", False), indent=2)) continue history.append({"role": "user", "content": query}) agent_loop(history) diff --git a/agents/s10_team_protocols.py b/agents/s10_team_protocols.py index d5475359c..d5dbb2eda 100644 --- a/agents/s10_team_protocols.py +++ b/agents/s10_team_protocols.py @@ -107,7 +107,7 @@ def send(self, sender: str, to: str, content: str, f.write(json.dumps(msg) + "\n") return f"Sent {msg_type} to {to}" - def read_inbox(self, name: str) -> list: + def read_inbox(self, name: str, clear: bool = True) -> list: inbox_path = self.dir / f"{name}.jsonl" if not inbox_path.exists(): return [] @@ -115,7 +115,8 @@ def read_inbox(self, name: str) -> list: for line in inbox_path.read_text().strip().splitlines(): if line: messages.append(json.loads(line)) - inbox_path.write_text("") + if clear: + inbox_path.write_text("") return messages def broadcast(self, sender: str, content: str, teammates: list) -> str: @@ -429,7 +430,7 @@ def agent_loop(messages: list): if inbox: messages.append({ "role": "user", - "content": f"{json.dumps(inbox, indent=2)}", + "content": f"{json.dumps(inbox)}", }) response = client.messages.create( model=MODEL, @@ -472,7 +473,7 @@ def agent_loop(messages: list): print(TEAM.list_all()) continue if query.strip() == "/inbox": - print(json.dumps(BUS.read_inbox("lead"), indent=2)) + print(json.dumps(BUS.read_inbox("lead", False), indent=2)) continue history.append({"role": "user", "content": query}) agent_loop(history) diff --git a/agents/s11_autonomous_agents.py b/agents/s11_autonomous_agents.py index 3aec416b8..a754affe7 100644 --- a/agents/s11_autonomous_agents.py +++ b/agents/s11_autonomous_agents.py @@ -100,7 +100,7 @@ def send(self, sender: str, to: str, content: str, f.write(json.dumps(msg) + "\n") return f"Sent {msg_type} to {to}" - def read_inbox(self, name: str) -> list: + def read_inbox(self, name: str, clear: bool = True) -> list: inbox_path = self.dir / f"{name}.jsonl" if not inbox_path.exists(): return [] @@ -108,7 +108,8 @@ def read_inbox(self, name: str) -> list: for line in inbox_path.read_text().strip().splitlines(): if line: messages.append(json.loads(line)) - inbox_path.write_text("") + if clear: + inbox_path.write_text("") return messages def broadcast(self, sender: str, content: str, teammates: list) -> str: @@ -142,11 +143,9 @@ def claim_task(task_id: int, owner: str) -> str: if not path.exists(): return f"Error: Task {task_id} not found" task = json.loads(path.read_text()) - if task.get("owner"): - existing_owner = task.get("owner") or "someone else" + if existing_owner := task.get("owner"): return f"Error: Task {task_id} has already been claimed by {existing_owner}" - if task.get("status") != "pending": - status = task.get("status") + if (status := task.get("status")) != "pending": return f"Error: Task {task_id} cannot be claimed because its status is '{status}'" if task.get("blockedBy"): return f"Error: Task {task_id} is blocked by other task(s) and cannot be claimed yet" @@ -523,7 +522,7 @@ def agent_loop(messages: list): if inbox: messages.append({ "role": "user", - "content": f"{json.dumps(inbox, indent=2)}", + "content": f"{json.dumps(inbox)}", }) response = client.messages.create( model=MODEL, @@ -566,7 +565,7 @@ def agent_loop(messages: list): print(TEAM.list_all()) continue if query.strip() == "/inbox": - print(json.dumps(BUS.read_inbox("lead"), indent=2)) + print(json.dumps(BUS.read_inbox("lead", False), indent=2)) continue if query.strip() == "/tasks": TASKS_DIR.mkdir(exist_ok=True)