mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-27 11:22:03 +00:00
Scheduled jobs delivering to Telegram/etc. started posting a literal '⚠️ No reply: the model returned empty content…' message instead of staying silent. Two interacting causes: 1. The turn-completion explainer (#34452) replaces an empty model turn with a user-facing '⚠️ No reply…' string. In a cron context that is not a silence marker, so the scheduler delivered it — a regression from the previously-silent empty turn. run_job now detects the explainer text deterministically (via the same formatter that produced it) for abnormal-empty turn_exit_reasons and strips it to empty, so the existing empty-response suppression + soft-fail guard apply. The explainer is unchanged on CLI/gateway. 2. The cron suppression used a loose 'SILENT_MARKER in ...upper()' substring check. It leaked bracketless near-markers the model emits ('SILENT', 'NO_REPLY', 'NO REPLY' — #51438, #46917) and wrongly swallowed a real report that merely quoted '[SILENT]' mid-sentence. Replaced with _is_cron_silence_response(): suppresses a canonical token as the whole response, its own first/last line, or the documented bracketed '[SILENT] <note>' prefix — while a token buried mid-sentence in a genuine report is delivered. Preserves the intentional cron trailing/prefix tolerance (existing tests unchanged). Tests: bracketless-variant suppression, mid-sentence-quote delivery, direct matcher contract, and explainer-strip + defensive real-report delivery. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| conftest.py | ||
| test_blueprint_catalog.py | ||
| test_claim_job_for_fire.py | ||
| test_codex_execution_paths.py | ||
| test_compute_next_run_last_run_at.py | ||
| test_cron_context_from.py | ||
| test_cron_inactivity_timeout.py | ||
| test_cron_no_agent.py | ||
| test_cron_prompt_injection_skill.py | ||
| test_cron_provider_pin.py | ||
| test_cron_script.py | ||
| test_cron_workdir.py | ||
| test_cronjob_schema.py | ||
| test_file_permissions.py | ||
| test_jobs.py | ||
| test_jobs_changed_notify.py | ||
| test_jobs_crossprocess_lock.py | ||
| test_parallel_pool.py | ||
| test_rewrite_skill_refs.py | ||
| test_run_one_job.py | ||
| test_scheduler.py | ||
| test_scheduler_mcp_init.py | ||
| test_scheduler_provider.py | ||
| test_suggestions.py | ||