MessageTool writes to session; remove max_messages limit
- MessageTool now writes sent messages to session history via SessionManager - Agent loop wires SessionManager into MessageTool constructor - Session.get_history() returns full history (removed max_messages limit) Server-side context editing API handles trimming, so we send full history This ensures messages sent via the message() tool (e.g., from heartbeat forks) are visible in the main conversational agent's context. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -119,7 +119,7 @@ class AgentLoop:
|
||||
self.tools.register(WebFetchTool())
|
||||
|
||||
# Message tool
|
||||
message_tool = MessageTool(send_callback=self.bus.publish_outbound)
|
||||
message_tool = MessageTool(send_callback=self.bus.publish_outbound, sessions=self.sessions)
|
||||
self.tools.register(message_tool)
|
||||
|
||||
# Spawn tool (for subagents)
|
||||
|
||||
@@ -4,6 +4,7 @@ from typing import Any, Awaitable, Callable
|
||||
|
||||
from nanobot.agent.tools.base import Tool
|
||||
from nanobot.bus.events import OutboundMessage
|
||||
from nanobot.session import SessionManager
|
||||
|
||||
|
||||
class MessageTool(Tool):
|
||||
@@ -12,11 +13,13 @@ class MessageTool(Tool):
|
||||
def __init__(
|
||||
self,
|
||||
send_callback: Callable[[OutboundMessage], Awaitable[None]] | None = None,
|
||||
sessions: SessionManager | None = None,
|
||||
default_channel: str = "",
|
||||
default_chat_id: str = "",
|
||||
default_message_id: str | None = None,
|
||||
):
|
||||
self._send_callback = send_callback
|
||||
self._sessions = sessions
|
||||
self._default_channel = default_channel
|
||||
self._default_chat_id = default_chat_id
|
||||
self._default_message_id = default_message_id
|
||||
@@ -101,6 +104,13 @@ class MessageTool(Tool):
|
||||
|
||||
try:
|
||||
await self._send_callback(msg)
|
||||
|
||||
if self._sessions:
|
||||
session_key = f"{channel}:{chat_id}"
|
||||
session = self._sessions.get_or_create(session_key)
|
||||
session.add_message("assistant", content)
|
||||
self._sessions.save(session)
|
||||
|
||||
if channel == self._default_channel and chat_id == self._default_chat_id:
|
||||
self._sent_in_turn = True
|
||||
media_info = f" with {len(media)} attachments" if media else ""
|
||||
|
||||
Reference in New Issue
Block a user