- Remove routes/mcp_resources.py (ui:// URI resolver endpoint)
- Frontend now directly accesses /robots/{bot_id}/skills/{server}/apps/{resource}.html
- Add Daytona fallback middleware to fetch files from sandbox on 404
- Add utils/daytona_file_fetcher.py for on-demand single file download
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
pmda-drug-info skill's pmda_server.py imports opensearchpy to query
the OpenSearch pmda_sections index. catalog-agent base image already
ships psycopg (for PG drug_master queries) but was missing
opensearch-py, so the MCP stdio server failed at import time with
ModuleNotFoundError → 0 tools exposed to the bot.
Add opensearch-py >=2.2.0,<3.0.0 to pyproject.toml dependencies and
the matching pinned line (opensearch-py==2.7.1) to requirements.txt.
Verified pmda-drug-info needs:
from opensearchpy import OpenSearch # os_client.py
from opensearchpy.helpers import bulk # ingest path
After this image is rebuilt and deployed to onprem-dev, MCP stdio
servers loaded from skill plugin.json start cleanly and tools/list
returns the 10 tools from pmda_tools.json.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Update langfuse CallbackHandler to use trace_context instead of removed trace_id/session_id/user_id params
- Pass session_id/user_id via LangChain metadata with langfuse_ prefix
- Move dereference param from TarFile.add() to tarfile.open()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>