From fed71b2948165881516d0cbd42caa328bd5bc89b Mon Sep 17 00:00:00 2001 From: Stas Moreinis Date: Mon, 9 Feb 2026 12:27:37 -0800 Subject: [PATCH 1/2] Update task_message_repository.py --- agentex/src/domain/repositories/task_message_repository.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/agentex/src/domain/repositories/task_message_repository.py b/agentex/src/domain/repositories/task_message_repository.py index 8d5e1e30..9d8a932e 100644 --- a/agentex/src/domain/repositories/task_message_repository.py +++ b/agentex/src/domain/repositories/task_message_repository.py @@ -19,7 +19,10 @@ class TaskMessageRepository(MongoDBCRUDRepository[TaskMessageEntity]): # These will be created once at startup, not per request INDEXES = [ { - "keys": [("task_id", pymongo.ASCENDING), ("created_at", pymongo.ASCENDING)], + "keys": [ + ("task_id", pymongo.ASCENDING), + ("created_at", pymongo.DESCENDING), + ], "name": "task_id_created_at_idx", "description": "Compound index for querying messages by task_id and sorting by created_at", }, @@ -40,7 +43,7 @@ class TaskMessageRepository(MongoDBCRUDRepository[TaskMessageEntity]): "keys": [ ("task_id", pymongo.ASCENDING), ("content.type", pymongo.ASCENDING), - ("created_at", pymongo.ASCENDING), + ("created_at", pymongo.DESCENDING), ], "name": "task_id_content_type_created_at_idx", "description": "Compound index for filtering messages by task_id, content type, and sorting by created_at", From 9dd7b45bdc87d96241b0c8c55adefa16f2420681 Mon Sep 17 00:00:00 2001 From: Stas Moreinis Date: Mon, 9 Feb 2026 12:38:40 -0800 Subject: [PATCH 2/2] Remove redundant MongoDB indexes and enforce unique constraint on task states Drop standalone task_id_idx from both messages and task_states collections since the compound indexes with task_id as leftmost prefix already cover task_id-only queries. Add unique: true to task_agent_compound_idx to enforce the (task_id, agent_id) uniqueness invariant at the database level. --- .../src/domain/repositories/task_message_repository.py | 5 ----- agentex/src/domain/repositories/task_state_repository.py | 8 ++------ 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/agentex/src/domain/repositories/task_message_repository.py b/agentex/src/domain/repositories/task_message_repository.py index 9d8a932e..92ab9ac2 100644 --- a/agentex/src/domain/repositories/task_message_repository.py +++ b/agentex/src/domain/repositories/task_message_repository.py @@ -26,11 +26,6 @@ class TaskMessageRepository(MongoDBCRUDRepository[TaskMessageEntity]): "name": "task_id_created_at_idx", "description": "Compound index for querying messages by task_id and sorting by created_at", }, - { - "keys": [("task_id", pymongo.ASCENDING)], - "name": "task_id_idx", - "description": "Single index for task_id queries and delete operations", - }, { "keys": [ ("task_id", pymongo.ASCENDING), diff --git a/agentex/src/domain/repositories/task_state_repository.py b/agentex/src/domain/repositories/task_state_repository.py index 16e43147..d2dab1ae 100644 --- a/agentex/src/domain/repositories/task_state_repository.py +++ b/agentex/src/domain/repositories/task_state_repository.py @@ -21,12 +21,8 @@ class TaskStateRepository(MongoDBCRUDRepository[StateEntity]): { "keys": [("task_id", pymongo.ASCENDING), ("agent_id", pymongo.ASCENDING)], "name": "task_agent_compound_idx", - "description": "Compound index for get_by_task_and_agent queries", - }, - { - "keys": [("task_id", pymongo.ASCENDING)], - "name": "task_id_idx", - "description": "Single index for task_id queries", + "unique": True, + "description": "Unique compound index for get_by_task_and_agent queries", }, { "keys": [("agent_id", pymongo.ASCENDING)],