fix(briefing): stale weather auto-refresh + task filter + overdue prompt
Three briefing quality fixes surfaced by reading today's 2026-04-11 compilation output: - **Stale weather**: get_weather was returning 48h-old cache data after a missed scheduler run. Tool now auto-refreshes any cached location older than 6h (fetching fresh data from Open-Meteo), and stamps each location with cache_age_hours + is_stale so the model can hedge instead of faithfully relaying old numbers. - **Cancelled tasks leaking into prose**: briefing loop now defaults list_tasks calls to status=["todo","in_progress"] when the model doesn't specify, so cancelled/done items stop showing up in the summary. Localized to the briefing path — chat still sees full history. - **Overdue in-progress tasks missed by midday check-in**: tightened the check-in prompt to explicitly require two list_tasks calls — one for in_progress (catches items dragging past their due date) and one filtered by due date — so long-running tasks stop getting silently dropped.
This commit is contained in:
@@ -106,6 +106,10 @@ def _agentic_system_prompt(
|
||||
f"You are the user's personal assistant giving a brief {slot} check-in. "
|
||||
"Use tools to see what's changed since this morning. Focus on progress and "
|
||||
"what's still unaddressed.\n\n"
|
||||
"When checking tasks, call list_tasks at least twice:\n"
|
||||
"- once with status=\"in_progress\" to see anything already being worked on "
|
||||
"(regardless of due date — these can quietly drag past their due dates)\n"
|
||||
"- once filtered by due date for what's coming up or overdue today\n\n"
|
||||
"Rules:\n"
|
||||
"- Call tools to see current state. Never assert facts without tool results.\n"
|
||||
"- If nothing meaningful has changed, say so briefly — don't invent progress.\n"
|
||||
@@ -239,6 +243,12 @@ async def run_agentic_briefing(
|
||||
except Exception:
|
||||
arguments = {}
|
||||
|
||||
# Default list_tasks to active statuses only so cancelled/done
|
||||
# items don't slip into briefing prose. The model can still
|
||||
# pass an explicit status filter when it wants something else.
|
||||
if tool_name == "list_tasks" and not arguments.get("status"):
|
||||
arguments["status"] = ["todo", "in_progress"]
|
||||
|
||||
try:
|
||||
if tool_name == "get_rss_items" and rss_override is not None:
|
||||
# Use topic-scored/filtered items already computed by
|
||||
|
||||
Reference in New Issue
Block a user