refac
This commit is contained in:
@@ -2345,7 +2345,7 @@ class TaskItem(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
async def tasks(
|
async def tasks(
|
||||||
tasks: list[TaskItem],
|
tasks: Optional[list[TaskItem]] = None,
|
||||||
overwrite: bool = True,
|
overwrite: bool = True,
|
||||||
__chat_id__: str = None,
|
__chat_id__: str = None,
|
||||||
__message_id__: str = None,
|
__message_id__: str = None,
|
||||||
@@ -2356,7 +2356,8 @@ async def tasks(
|
|||||||
"""
|
"""
|
||||||
Create or update a checklist of tasks tied to this chat.
|
Create or update a checklist of tasks tied to this chat.
|
||||||
Useful whenever a request involves multiple pieces of work that
|
Useful whenever a request involves multiple pieces of work that
|
||||||
should be tracked individually.
|
should be tracked individually. Call without arguments to retrieve
|
||||||
|
the existing list.
|
||||||
|
|
||||||
By default the entire list is replaced (overwrite=true). Set
|
By default the entire list is replaced (overwrite=true). Set
|
||||||
overwrite=false to patch specific items by id without discarding
|
overwrite=false to patch specific items by id without discarding
|
||||||
@@ -2368,7 +2369,7 @@ async def tasks(
|
|||||||
it completed before moving on, or cancel and replace it if the
|
it completed before moving on, or cancel and replace it if the
|
||||||
approach changes.
|
approach changes.
|
||||||
|
|
||||||
:param tasks: List of task items. Each must have: id (string, unique identifier), content (string, task description, required for new tasks), status (one of: pending, in_progress, completed, cancelled).
|
:param tasks: Optional list of task items. Each item: id (string), content (string, required for new tasks), status (pending|in_progress|completed|cancelled). Leave empty to fetch without modifying.
|
||||||
:param overwrite: If true (default), replaces the entire task list. If false, updates/adds tasks by id while keeping existing ones.
|
:param overwrite: If true (default), replaces the entire task list. If false, updates/adds tasks by id while keeping existing ones.
|
||||||
:return: JSON with the full task list and summary counts
|
:return: JSON with the full task list and summary counts
|
||||||
"""
|
"""
|
||||||
@@ -2400,7 +2401,10 @@ async def tasks(
|
|||||||
item_id = str(d.get('id', '') or '').strip()
|
item_id = str(d.get('id', '') or '').strip()
|
||||||
return item_id if item_id else str(idx + 1)
|
return item_id if item_id else str(idx + 1)
|
||||||
|
|
||||||
if overwrite:
|
if tasks is None:
|
||||||
|
# Read-only - return current list
|
||||||
|
all_tasks = Chats.get_chat_tasks_by_id(__chat_id__)
|
||||||
|
elif overwrite:
|
||||||
# Full replacement - validate and write
|
# Full replacement - validate and write
|
||||||
all_tasks = []
|
all_tasks = []
|
||||||
for idx, task in enumerate(tasks):
|
for idx, task in enumerate(tasks):
|
||||||
@@ -2464,19 +2468,19 @@ async def tasks(
|
|||||||
if not any(t['id'] == item_id for t in existing_tasks):
|
if not any(t['id'] == item_id for t in existing_tasks):
|
||||||
all_tasks.append(existing_by_id[item_id])
|
all_tasks.append(existing_by_id[item_id])
|
||||||
|
|
||||||
# Persist to DB
|
# Persist to DB and emit (skip for read-only)
|
||||||
Chats.update_chat_tasks_by_id(__chat_id__, all_tasks)
|
if tasks is not None:
|
||||||
|
Chats.update_chat_tasks_by_id(__chat_id__, all_tasks)
|
||||||
|
|
||||||
# Emit to frontend for real-time UI update
|
if __event_emitter__:
|
||||||
if __event_emitter__:
|
await __event_emitter__(
|
||||||
await __event_emitter__(
|
{
|
||||||
{
|
'type': 'chat:message:tasks',
|
||||||
'type': 'chat:message:tasks',
|
'data': {
|
||||||
'data': {
|
'tasks': all_tasks,
|
||||||
'tasks': all_tasks,
|
},
|
||||||
},
|
}
|
||||||
}
|
)
|
||||||
)
|
|
||||||
|
|
||||||
# Build summary counts
|
# Build summary counts
|
||||||
pending = sum(1 for t in all_tasks if t['status'] == 'pending')
|
pending = sum(1 for t in all_tasks if t['status'] == 'pending')
|
||||||
|
|||||||
Reference in New Issue
Block a user