|
|
|
|
@ -966,7 +966,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1012,7 +1013,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1055,7 +1057,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1095,7 +1098,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1132,7 +1136,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1169,7 +1174,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1197,7 +1203,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
return fake_db, [
|
|
|
|
|
patch("cron.scheduler._hermes_home", tmp_path),
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None),
|
|
|
|
|
patch("dotenv.load_dotenv"),
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"),
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"),
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db),
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1336,7 +1343,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1412,7 +1420,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1451,7 +1460,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1493,7 +1503,8 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -1613,6 +1624,53 @@ class TestRunJobSessionPersistence:
|
|
|
|
|
assert os.getenv("HERMES_CRON_AUTO_DELIVER_THREAD_ID") is None
|
|
|
|
|
fake_db.close.assert_called_once()
|
|
|
|
|
|
|
|
|
|
def test_run_job_resets_secret_source_cache_before_reload(self, tmp_path, monkeypatch):
|
|
|
|
|
"""Each run must clear the secret-source cache before re-reading the
|
|
|
|
|
env, so a long-running gateway re-resolves Bitwarden/BSM-backed secrets
|
|
|
|
|
instead of leaving the startup .env placeholder in place (#33465).
|
|
|
|
|
|
|
|
|
|
A bare ``load_dotenv`` re-load can't do this: startup already recorded
|
|
|
|
|
this HERMES_HOME in ``_APPLIED_HOMES``, so the external-secret pull
|
|
|
|
|
no-ops and only the placeholder is re-applied. The scheduler must call
|
|
|
|
|
``reset_secret_source_cache()`` (forcing the re-pull) and route through
|
|
|
|
|
``load_hermes_dotenv`` (which then re-applies external secret sources).
|
|
|
|
|
"""
|
|
|
|
|
job = {"id": "bsm-job", "name": "bsm", "prompt": "hello"}
|
|
|
|
|
fake_db = MagicMock()
|
|
|
|
|
call_order = []
|
|
|
|
|
|
|
|
|
|
def _record_reset():
|
|
|
|
|
call_order.append("reset")
|
|
|
|
|
|
|
|
|
|
def _record_load(*args, **kwargs):
|
|
|
|
|
call_order.append("load")
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache", _record_reset), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv", _record_load), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value={
|
|
|
|
|
"api_key": "***",
|
|
|
|
|
"base_url": "https://example.invalid/v1",
|
|
|
|
|
"provider": "openrouter",
|
|
|
|
|
"api_mode": "chat_completions",
|
|
|
|
|
},
|
|
|
|
|
), \
|
|
|
|
|
patch("run_agent.AIAgent") as mock_agent_cls:
|
|
|
|
|
mock_agent = MagicMock()
|
|
|
|
|
mock_agent.run_conversation.return_value = {"final_response": "ok"}
|
|
|
|
|
mock_agent_cls.return_value = mock_agent
|
|
|
|
|
success, _output, _final, error = run_job(job)
|
|
|
|
|
|
|
|
|
|
assert success is True
|
|
|
|
|
assert error is None
|
|
|
|
|
# reset MUST precede the reload, else _APPLIED_HOMES no-ops the re-pull.
|
|
|
|
|
assert call_order[:2] == ["reset", "load"], call_order
|
|
|
|
|
|
|
|
|
|
def test_run_job_clears_stale_auto_delivery_thread_id_between_jobs(self, tmp_path, monkeypatch):
|
|
|
|
|
jobs = [
|
|
|
|
|
{
|
|
|
|
|
@ -1709,7 +1767,8 @@ class TestRunJobConfigLogging:
|
|
|
|
|
# (>30s wall clock) under load. See PR #33661 follow-up.
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value={"provider": "openrouter", "api_key": "x",
|
|
|
|
|
"base_url": "https://example.invalid",
|
|
|
|
|
@ -1743,7 +1802,8 @@ class TestRunJobConfigLogging:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value={"provider": "openrouter", "api_key": "x",
|
|
|
|
|
"base_url": "https://example.invalid",
|
|
|
|
|
@ -1781,7 +1841,8 @@ class TestRunJobConfigEnvVarExpansion:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -1814,7 +1875,8 @@ class TestRunJobConfigEnvVarExpansion:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -1844,7 +1906,8 @@ class TestRunJobConfigEnvVarExpansion:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -1873,7 +1936,8 @@ class TestRunJobConfigEnvVarExpansion:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -1917,7 +1981,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -1941,7 +2006,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -1973,7 +2039,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -1996,7 +2063,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -2025,7 +2093,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -2051,7 +2120,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -2081,7 +2151,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -2105,7 +2176,8 @@ class TestRunJobModelResolution:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch("hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
return_value=self._RUNTIME), \
|
|
|
|
|
@ -2147,7 +2219,8 @@ class TestRunJobSkillBacked:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -2207,7 +2280,8 @@ class TestRunJobSkillBacked:
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("tools.credential_files._resolve_hermes_home", return_value=tmp_path), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -2245,7 +2319,8 @@ class TestRunJobSkillBacked:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
@ -2291,7 +2366,8 @@ class TestRunJobSkillBacked:
|
|
|
|
|
|
|
|
|
|
with patch("cron.scheduler._hermes_home", tmp_path), \
|
|
|
|
|
patch("cron.scheduler._resolve_origin", return_value=None), \
|
|
|
|
|
patch("dotenv.load_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.load_hermes_dotenv"), \
|
|
|
|
|
patch("hermes_cli.env_loader.reset_secret_source_cache"), \
|
|
|
|
|
patch("hermes_state.SessionDB", return_value=fake_db), \
|
|
|
|
|
patch(
|
|
|
|
|
"hermes_cli.runtime_provider.resolve_runtime_provider",
|
|
|
|
|
|