diff --git a/src/context/engine.py b/src/context/engine.py index 435d6d1..38d5178 100644 --- a/src/context/engine.py +++ b/src/context/engine.py @@ -541,9 +541,29 @@ class ContextEngine: else: user_content = "Awaiting task assignment." - messages: list[dict[str, Any]] = [{"role": "user", "content": user_content}] + messages: list[dict[str, Any]] = [] - # Append real conversation (assistant messages + tool results) + # Include previous task exchanges as conversation history + # (so the model remembers what was said in earlier turns) + for entry in session.task_history[-10:]: + summary = entry.get("summary", "") + objective = entry.get("objective", "") + if summary.startswith("User: "): + # Direct response format: "User: X → Agent: Y" + parts = summary.split(" → Agent: ", 1) + user_msg = objective or parts[0].replace("User: ", "", 1) + agent_msg = parts[1] if len(parts) > 1 else summary + messages.append({"role": "user", "content": user_msg}) + messages.append({"role": "assistant", "content": agent_msg}) + elif objective: + # Task with tools — include as compact exchange + messages.append({"role": "user", "content": objective}) + messages.append({"role": "assistant", "content": summary[:500] if summary else "Tarea completada."}) + + # Current user message + messages.append({"role": "user", "content": user_content}) + + # Append real conversation (assistant messages + tool results from current step) if conversation: messages.extend(conversation) diff --git a/src/orchestrator/engine.py b/src/orchestrator/engine.py index 31f8ed8..9018808 100644 --- a/src/orchestrator/engine.py +++ b/src/orchestrator/engine.py @@ -123,6 +123,23 @@ class OrchestratorEngine: # Direct response — no plan needed (saludo, pregunta simple) if isinstance(plan_result, str): logger.info("Planner returned direct response for task %s", task.task_id) + + # Save to task history so conversation context is preserved + session.task_history.append({ + "task_id": task.task_id, + "objective": message, + "status": "completed", + "steps": 0, + "facts": [], + "key_data": {}, + "tools_used": [], + "artifacts_count": 0, + "summary": f"User: {message[:200]} → Agent: {plan_result[:200]}", + "review": "", + }) + if len(session.task_history) > 20: + session.task_history = session.task_history[-20:] + task.status = TaskStatus.COMPLETED session.complete_task()