Просмотр исходного кода

Expose topic read watermarks in group summaries

samien 2 месяцев назад
Родитель
Сommit
d7ca226f1f

+ 1 - 0
hermes-plugins/yaoyao/dashboard/group_store.py

@@ -6320,6 +6320,7 @@ class GroupStore:
             "messageCount": int(row["message_count"]),
             "messageCount": int(row["message_count"]),
             "unreadCount": int(row["unread_count"]),
             "unreadCount": int(row["unread_count"]),
             "latestMessageSeq": int(row["latest_message_seq"]),
             "latestMessageSeq": int(row["latest_message_seq"]),
+            "lastReadMessageSeq": int(row["last_read_message_seq"]),
             "createdAt": row["created_at"],
             "createdAt": row["created_at"],
             "updatedAt": row["updated_at"],
             "updatedAt": row["updated_at"],
         }
         }

+ 2 - 2
hermes-plugins/yaoyao/dashboard/tests/test_group_host_contract.py

@@ -34,7 +34,7 @@ def new_id() -> str:
 
 
 class GroupHostContractTests(unittest.TestCase):
 class GroupHostContractTests(unittest.TestCase):
     def test_protocol_v5_host_fields_are_independent_and_compatible(self) -> None:
     def test_protocol_v5_host_fields_are_independent_and_compatible(self) -> None:
-        self.assertEqual(PROTOCOL.PROTOCOL_VERSION, 7)
+        self.assertEqual(PROTOCOL.PROTOCOL_VERSION, 8)
         legacy = PROTOCOL.CreateRoomRequest.model_validate({
         legacy = PROTOCOL.CreateRoomRequest.model_validate({
             "requestId": new_id(),
             "requestId": new_id(),
             "name": "兼容群",
             "name": "兼容群",
@@ -491,7 +491,7 @@ class GroupHostContractTests(unittest.TestCase):
 
 
             migrated = GroupStore(path)
             migrated = GroupStore(path)
             migrated.initialize()
             migrated.initialize()
-            self.assertEqual(migrated.schema_version(), 7)
+            self.assertEqual(migrated.schema_version(), 8)
             with migrated.connection() as connection:
             with migrated.connection() as connection:
                 after_counts = {
                 after_counts = {
                     table: connection.execute(f"SELECT COUNT(*) FROM {table}").fetchone()[0]
                     table: connection.execute(f"SELECT COUNT(*) FROM {table}").fetchone()[0]

+ 6 - 6
hermes-plugins/yaoyao/dashboard/tests/test_group_settings_contract.py

@@ -337,7 +337,7 @@ class GroupSettingsContractTests(unittest.TestCase):
                 )
                 )
 
 
     def test_protocol_v5_advertises_reply_round_contract(self) -> None:
     def test_protocol_v5_advertises_reply_round_contract(self) -> None:
-        self.assertEqual(PROTOCOL.PROTOCOL_VERSION, 7)
+        self.assertEqual(PROTOCOL.PROTOCOL_VERSION, 8)
         self.assertEqual(
         self.assertEqual(
             PROTOCOL.limits_payload()["defaultMaxReplyRounds"], 3
             PROTOCOL.limits_payload()["defaultMaxReplyRounds"], 3
         )
         )
@@ -586,10 +586,10 @@ class GroupSettingsContractTests(unittest.TestCase):
                 agent for agent in refreshed["agents"] if agent["profile"] == "planner"
                 agent for agent in refreshed["agents"] if agent["profile"] == "planner"
             )
             )
             self.assertEqual(events[0]["payload"], planner)
             self.assertEqual(events[0]["payload"], planner)
-            self.assertEqual(
-                events[1]["payload"],
-                current.list_rooms(limit=100, cursor=None).items[0],
-            )
+            summary = current.list_rooms(limit=100, cursor=None).items[0]
+            for key in ("activeRunCount", "unreadCount", "lastMessage"):
+                summary.pop(key)
+            self.assertEqual(events[1]["payload"], summary)
 
 
             after_first_initialize = current.latest_cursor()
             after_first_initialize = current.latest_cursor()
             current.initialize()
             current.initialize()
@@ -711,7 +711,7 @@ class GroupSettingsContractTests(unittest.TestCase):
             self._create_v1_database(path)
             self._create_v1_database(path)
             store = GroupStore(path)
             store = GroupStore(path)
             store.initialize()
             store.initialize()
-            self.assertEqual(store.schema_version(), 7)
+            self.assertEqual(store.schema_version(), 8)
             self.assertEqual(store.journal_epoch(), "11111111-1111-4111-8111-111111111111")
             self.assertEqual(store.journal_epoch(), "11111111-1111-4111-8111-111111111111")
             with store.connection() as connection:
             with store.connection() as connection:
                 room = connection.execute("SELECT * FROM group_rooms").fetchone()
                 room = connection.execute("SELECT * FROM group_rooms").fetchone()

+ 2 - 0
hermes-plugins/yaoyao/dashboard/tests/test_group_topics_contract.py

@@ -384,6 +384,7 @@ class GroupTopicsContractTests(unittest.TestCase):
             )
             )
 
 
             self.assertEqual(first, repeated)
             self.assertEqual(first, repeated)
+            self.assertEqual(first["topic"]["lastReadMessageSeq"], through_seq)
             self.assertEqual(stale["room"]["unreadCount"], 0)
             self.assertEqual(stale["room"]["unreadCount"], 0)
             events = store.events_after(before, 10)
             events = store.events_after(before, 10)
             self.assertEqual(
             self.assertEqual(
@@ -443,6 +444,7 @@ class GroupTopicsContractTests(unittest.TestCase):
                     "messageCount",
                     "messageCount",
                     "unreadCount",
                     "unreadCount",
                     "latestMessageSeq",
                     "latestMessageSeq",
+                    "lastReadMessageSeq",
                     "createdAt",
                     "createdAt",
                     "updatedAt",
                     "updatedAt",
                 },
                 },