fix list_blog_posts uri output + make process_* resilient to agent.run failures
two related bugs caught when phi tried to respond to a smoke test
mention asking for a long-form reintroduction:
1. list_blog_posts returned only the human-facing greengale URL
("https://greengale.app/{handle}/{rkey}"), not the AT-URI. when
phi (the model) wanted to read one of those posts back via
pub_get_document — which requires an AT-URI — she had to translate
url -> at-uri on the fly and guess the collection name. she
guessed "pub.greengale.article". the actual collection on her PDS
is "app.greengale.document". 100% reproducible failure for any
list-then-read flow.
fix: include the AT-URI explicitly in list_blog_posts output
alongside the URL. now the model passes it directly to
pub_get_document, no translation needed.
2. process_mention propagated agent.run exceptions all the way out
to the notification handler, which logged it and posted nothing.
from the operator's view phi looked like she was ignoring people.
when a tool error happens she should surface it, not vanish.
fix: wrap agent.run in process_mention with try/except. on failure,
return a fallback Response that posts a brief honest reply tagging
the operator so the failure gets noticed. process_reflection and
process_musing get the same wrapping but return action='ignore'
instead — they're scheduled and there's no human waiting.
process_exploration was already wrapped (queue items get fail()'d
on exception), so no change needed there.