fix(journal): restore weather + events panels; hide daily-prep system msg in chat

The journal UI was over-stripped earlier — weather panel, current-conditions
poll, and the upcoming-events sidebar were all dropped. Restored those (calls
the new /api/journal/weather, /api/journal/weather/current,
/api/journal/weather/refresh, /api/journal/weather/geocode endpoints).

Also: the daily-prep system message was rendering as flat text inside
ChatPanel because there's no .role-system bubble styling. Added a hideMessage
guard in ChatMessage so daily-prep system messages don't render in the chat
stream — they're already shown above as a structured prep card.

News / RSS reactions / article-discuss are intentionally NOT in the journal
(scoped out per user direction). The broader RSS infrastructure cleanup is
a separate, larger task.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-26 12:22:51 -04:00
parent 873e70c7ea
commit cacfcac86a
5 changed files with 405 additions and 149 deletions
+1 -9
View File
@@ -5,7 +5,7 @@ new day). Gathers raw data into a structured prep block that becomes the
first message of the day's journal Conversation.
The output shape lives on Message.msg_metadata as:
{ kind: 'daily_prep', sections: { tasks, events, weather, news,
{ kind: 'daily_prep', sections: { tasks, events, weather,
projects, recent_moments, open_threads } }
Deliberately deterministic — no LLM call here. The journal LLM weaves
@@ -25,7 +25,6 @@ from fabledassistant.services.events import list_events
from fabledassistant.services.journal_search import search_journal
from fabledassistant.services.notes import list_notes
from fabledassistant.services.projects import list_projects
from fabledassistant.services.rss import get_recent_items
from fabledassistant.services.weather import get_cached_weather_rows
logger = logging.getLogger(__name__)
@@ -84,13 +83,6 @@ async def generate_daily_prep(
logger.exception("daily_prep weather section failed for user %d", user_id)
sections["weather"] = []
try:
news = await get_recent_items(user_id=user_id, limit=5)
sections["news"] = news
except Exception:
logger.exception("daily_prep news section failed for user %d", user_id)
sections["news"] = []
try:
projects = await list_projects(user_id=user_id, status="active")
sections["projects"] = [