mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-25 05:52:34 +00:00
fix(mcp): pre-compile env-var regex and unify interpolation
Remove redundant inner `import re` and regex recompilation on every call in _interpolate_env_vars. Add module-level _ENV_VAR_PATTERN compiled once. Replace the separate _interpolate_value() in mcp_config.py (which used \w+ and would silently fail on env vars containing hyphens or dots) with the shared _ENV_VAR_PATTERN from mcp_tool.py. Remove now-unused import re.
This commit is contained in:
parent
5360b54244
commit
55f3262e78
2 changed files with 8 additions and 9 deletions
|
|
@ -25,6 +25,7 @@ from hermes_cli.config import (
|
||||||
)
|
)
|
||||||
from hermes_cli.colors import Colors, color
|
from hermes_cli.colors import Colors, color
|
||||||
from hermes_constants import display_hermes_home
|
from hermes_constants import display_hermes_home
|
||||||
|
from tools.mcp_tool import _ENV_VAR_PATTERN
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -551,7 +552,7 @@ def cmd_mcp_test(args):
|
||||||
for k, v in headers.items():
|
for k, v in headers.items():
|
||||||
if isinstance(v, str) and ("key" in k.lower() or "auth" in k.lower()):
|
if isinstance(v, str) and ("key" in k.lower() or "auth" in k.lower()):
|
||||||
# Mask the value
|
# Mask the value
|
||||||
resolved = _interpolate_value(v)
|
resolved = _ENV_VAR_PATTERN.sub(lambda m: os.getenv(m.group(1), ""), v)
|
||||||
if len(resolved) > 8:
|
if len(resolved) > 8:
|
||||||
masked = resolved[:4] + "***" + resolved[-4:]
|
masked = resolved[:4] + "***" + resolved[-4:]
|
||||||
else:
|
else:
|
||||||
|
|
@ -581,13 +582,6 @@ def cmd_mcp_test(args):
|
||||||
print()
|
print()
|
||||||
|
|
||||||
|
|
||||||
def _interpolate_value(value: str) -> str:
|
|
||||||
"""Resolve ``${ENV_VAR}`` references in a string."""
|
|
||||||
def _replace(m):
|
|
||||||
return os.getenv(m.group(1), "")
|
|
||||||
return re.sub(r"\$\{(\w+)\}", _replace, value)
|
|
||||||
|
|
||||||
|
|
||||||
# ─── hermes mcp login ────────────────────────────────────────────────────────
|
# ─── hermes mcp login ────────────────────────────────────────────────────────
|
||||||
|
|
||||||
def cmd_mcp_login(args):
|
def cmd_mcp_login(args):
|
||||||
|
|
|
||||||
|
|
@ -279,6 +279,11 @@ _CREDENTIAL_PATTERN = re.compile(
|
||||||
re.IGNORECASE,
|
re.IGNORECASE,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Pre-compiled pattern for ${VAR_NAME} style env-var interpolation.
|
||||||
|
# Supports any non-} characters in the variable name (hyphens, dots, etc.)
|
||||||
|
# so providers like MY-VAR or my.var work correctly.
|
||||||
|
_ENV_VAR_PATTERN = re.compile(r"\$\{([^}]+)\}")
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Security helpers
|
# Security helpers
|
||||||
|
|
@ -2104,7 +2109,7 @@ def _interpolate_env_vars(value):
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
def _replace(m):
|
def _replace(m):
|
||||||
return os.environ.get(m.group(1), m.group(0))
|
return os.environ.get(m.group(1), m.group(0))
|
||||||
return re.sub(r"\$\{([^}]+)\}", _replace, value)
|
return _ENV_VAR_PATTERN.sub(_replace, value)
|
||||||
if isinstance(value, dict):
|
if isinstance(value, dict):
|
||||||
return {k: _interpolate_env_vars(v) for k, v in value.items()}
|
return {k: _interpolate_env_vars(v) for k, v in value.items()}
|
||||||
if isinstance(value, list):
|
if isinstance(value, list):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue