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>
The incremental sync used `find -type f` which misses symlinks (type l),
so dataset symlinks were never detected and synced to the sandbox.
Additionally, `tar.add()` without `dereference=True` would store broken
symlinks pointing to host-only paths.
- _list_local_changed_files: match both regular files and symlinks
- _tar_workspace_entries: dereference symlinks to pack actual content
- Unify dataset path to `datasets/` (plural) in prompts and SKILL.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Convert all Chinese comments, docstrings, logger/print output,
HTTPException detail messages, and API response messages to English
across the entire codebase. Functional zh/ja localized strings
(e.g. prompt templates, timezone display names, date formats) are
preserved as-is.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When find_device_by_area matches an area successfully but the area lacks the requested device type (e.g., DCU/light), the AI will now proactively suggest nearby controllable areas.
Related Issue: #2766