semantics: complete DEF-to-region migration, fix regressions
- Convert legacy [DEF🆔Type] anchors to #region/#endregion across 329 files
- Reinstate _normalize_timestamp_value in sql_generator.py
- Fix MarkerLogger→logger migration in events.py (molecular CoT markers)
- Fix dataset_review orchestrator dependencies (_build_execution_snapshot)
- Fix config_manager stale-record deletion (moved to save path only)
- Add 77 missing [/DEF:] closers in 5 unbalanced test files
- Update assistant_chat.integration.test.js for #region format
- Apply molecular-cot-logging markers (REASON/REFLECT/EXPLORE) via logger.* methods
This commit is contained in:
@@ -1,11 +1,10 @@
|
||||
# #region TasksRouter [C:3] [TYPE Module] [SEMANTICS api, router, tasks, create, list, get, logs]
|
||||
# @BRIEF Defines the FastAPI router for task-related endpoints, allowing clients to create, list, and get the status of tasks.
|
||||
# @LAYER UI (API)
|
||||
# @LAYER: UI (API)
|
||||
# @RELATION DEPENDS_ON -> [TaskManager]
|
||||
# @RELATION DEPENDS_ON -> [ConfigManager]
|
||||
# @RELATION DEPENDS_ON -> [LLMProviderService]
|
||||
|
||||
# [SECTION: IMPORTS]
|
||||
from typing import List, Dict, Any, Optional
|
||||
from fastapi import APIRouter, Depends, HTTPException, status, Query
|
||||
from pydantic import BaseModel
|
||||
@@ -25,7 +24,6 @@ from ...services.llm_prompt_templates import (
|
||||
normalize_llm_settings,
|
||||
resolve_bound_provider_id,
|
||||
)
|
||||
# [/SECTION]
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@@ -51,14 +49,11 @@ class ResumeTaskRequest(BaseModel):
|
||||
|
||||
# #region create_task [C:3] [TYPE Function]
|
||||
# @BRIEF Create and start a new task for a given plugin.
|
||||
# @PARAM: request (CreateTaskRequest) - The request body containing plugin_id and params.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: plugin_id must exist and params must be valid for that plugin.
|
||||
# @POST: A new task is created and started.
|
||||
# @RETURN: Task - The created task instance.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION: DEPENDS_ON -> [ConfigManager]
|
||||
# @RELATION: DEPENDS_ON -> [LLMProviderService]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
# @RELATION DEPENDS_ON -> [ConfigManager]
|
||||
# @RELATION DEPENDS_ON -> [LLMProviderService]
|
||||
@router.post("", response_model=Task, status_code=status.HTTP_201_CREATED)
|
||||
async def create_task(
|
||||
request: CreateTaskRequest,
|
||||
@@ -133,15 +128,10 @@ async def create_task(
|
||||
|
||||
# #region list_tasks [C:2] [TYPE Function]
|
||||
# @BRIEF Retrieve a list of tasks with pagination and optional status filter.
|
||||
# @PARAM: limit (int) - Maximum number of tasks to return.
|
||||
# @PARAM: offset (int) - Number of tasks to skip.
|
||||
# @PARAM: status (Optional[TaskStatus]) - Filter by task status.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task_manager must be available.
|
||||
# @POST: Returns a list of tasks.
|
||||
# @RETURN: List[Task] - List of tasks.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION: BINDS_TO -> [TASK_TYPE_PLUGIN_MAP]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
# @RELATION BINDS_TO -> [TASK_TYPE_PLUGIN_MAP]
|
||||
@router.get("", response_model=List[Task])
|
||||
async def list_tasks(
|
||||
limit: int = 10,
|
||||
@@ -183,12 +173,9 @@ async def list_tasks(
|
||||
|
||||
# #region get_task [C:2] [TYPE Function]
|
||||
# @BRIEF Retrieve the details of a specific task.
|
||||
# @PARAM: task_id (str) - The unique identifier of the task.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task_id must exist.
|
||||
# @POST: Returns task details or raises 404.
|
||||
# @RETURN: Task - The task details.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
@router.get("/{task_id}", response_model=Task)
|
||||
async def get_task(
|
||||
task_id: str,
|
||||
@@ -209,18 +196,10 @@ async def get_task(
|
||||
|
||||
# #region get_task_logs [C:5] [TYPE Function]
|
||||
# @BRIEF Retrieve logs for a specific task with optional filtering.
|
||||
# @PARAM: task_id (str) - The unique identifier of the task.
|
||||
# @PARAM: level (Optional[str]) - Filter by log level (DEBUG, INFO, WARNING, ERROR).
|
||||
# @PARAM: source (Optional[str]) - Filter by source component.
|
||||
# @PARAM: search (Optional[str]) - Text search in message.
|
||||
# @PARAM: offset (int) - Number of logs to skip.
|
||||
# @PARAM: limit (int) - Maximum number of logs to return.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task_id must exist.
|
||||
# @POST: Returns a list of log entries or raises 404.
|
||||
# @RETURN: List[LogEntry] - List of log entries.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION: DEPENDS_ON -> [LogFilter]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
# @RELATION DEPENDS_ON -> [LogFilter]
|
||||
# @TEST_CONTRACT: TaskLogQueryInput -> List[LogEntry]
|
||||
# @TEST_SCENARIO: existing_task_logs_filtered -> Returns filtered logs by level/source/search with pagination.
|
||||
# @TEST_FIXTURE: valid_task_with_mixed_logs -> backend/tests/fixtures/task_logs/valid_task_with_mixed_logs.json
|
||||
@@ -264,13 +243,10 @@ async def get_task_logs(
|
||||
|
||||
# #region get_task_log_stats [C:2] [TYPE Function]
|
||||
# @BRIEF Get statistics about logs for a task (counts by level and source).
|
||||
# @PARAM: task_id (str) - The unique identifier of the task.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task_id must exist.
|
||||
# @POST: Returns log statistics or raises 404.
|
||||
# @RETURN: LogStats - Statistics about task logs.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION: DEPENDS_ON -> [LogStats]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
# @RELATION DEPENDS_ON -> [LogStats]
|
||||
@router.get("/{task_id}/logs/stats", response_model=LogStats)
|
||||
async def get_task_log_stats(
|
||||
task_id: str,
|
||||
@@ -312,12 +288,9 @@ async def get_task_log_stats(
|
||||
|
||||
# #region get_task_log_sources [C:2] [TYPE Function]
|
||||
# @BRIEF Get unique sources for a task's logs.
|
||||
# @PARAM: task_id (str) - The unique identifier of the task.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task_id must exist.
|
||||
# @POST: Returns list of unique source names or raises 404.
|
||||
# @RETURN: List[str] - Unique source names.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
@router.get("/{task_id}/logs/sources", response_model=List[str])
|
||||
async def get_task_log_sources(
|
||||
task_id: str,
|
||||
@@ -337,13 +310,9 @@ async def get_task_log_sources(
|
||||
|
||||
# #region resolve_task [C:2] [TYPE Function]
|
||||
# @BRIEF Resolve a task that is awaiting mapping.
|
||||
# @PARAM: task_id (str) - The unique identifier of the task.
|
||||
# @PARAM: request (ResolveTaskRequest) - The resolution parameters.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task must be in AWAITING_MAPPING status.
|
||||
# @POST: Task is resolved and resumes execution.
|
||||
# @RETURN: Task - The updated task object.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
@router.post("/{task_id}/resolve", response_model=Task)
|
||||
async def resolve_task(
|
||||
task_id: str,
|
||||
@@ -364,13 +333,9 @@ async def resolve_task(
|
||||
|
||||
# #region resume_task [C:2] [TYPE Function]
|
||||
# @BRIEF Resume a task that is awaiting input (e.g., passwords).
|
||||
# @PARAM: task_id (str) - The unique identifier of the task.
|
||||
# @PARAM: request (ResumeTaskRequest) - The input (passwords).
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task must be in AWAITING_INPUT status.
|
||||
# @POST: Task resumes execution with provided input.
|
||||
# @RETURN: Task - The updated task object.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
@router.post("/{task_id}/resume", response_model=Task)
|
||||
async def resume_task(
|
||||
task_id: str,
|
||||
@@ -391,11 +356,9 @@ async def resume_task(
|
||||
|
||||
# #region clear_tasks [C:2] [TYPE Function]
|
||||
# @BRIEF Clear tasks matching the status filter.
|
||||
# @PARAM: status (Optional[TaskStatus]) - Filter by task status.
|
||||
# @PARAM: task_manager (TaskManager) - The task manager instance.
|
||||
# @PRE: task_manager is available.
|
||||
# @POST: Tasks are removed from memory/persistence.
|
||||
# @RELATION: CALLS -> [TaskManager]
|
||||
# @RELATION CALLS -> [TaskManager]
|
||||
@router.delete("", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def clear_tasks(
|
||||
status: Optional[TaskStatus] = None,
|
||||
|
||||
Reference in New Issue
Block a user