hermes-agent/gateway
Ben abbd8646eb feat(gateway,desktop): start cron via resolved CronScheduler provider
Phase 3 — rebind both ticker call sites to resolve_cron_scheduler(). Default
(built-in) path is byte-identical; Phase 0 characterization tests + the full
gateway suite (6919) stay green.

Task 3.1: split gateway/run.py _start_cron_ticker into:
  - _start_gateway_housekeeping() — the gateway-only chores (channel-dir
    refresh, image/doc cache cleanup, paste sweep, curator poll), now on their
    own loop/thread, independent of which cron provider is active.
  - _start_cron_ticker() — kept as a DEPRECATED shim that runs only the
    built-in InProcessCronScheduler().start(), preserving the symbol for
    hermes_cli/debug.py and the Phase 0 characterization test.
Task 3.2: start_gateway() resolves the provider and runs provider.start() in
  the 'cron-scheduler' thread, plus a second 'gateway-housekeeping' thread;
  teardown sets the shared cron_stop, calls provider.stop(), joins both.
Task 3.3: desktop _start_desktop_cron_ticker() swapped its inline tick loop for
  resolve_cron_scheduler().start() (no adapters/loop — desktop has none).

The provider owns ONLY the cron tick (so an external scale-to-zero provider
with no 60s loop fits); gateway housekeeping is decoupled from the cron
trigger. Both threads share cron_stop.

Verified: full tests/cron/ (453) + full tests/gateway/ (6919) green. Manual
gateway smoke (Task 3.4) is operator-run, pending.
2026-06-18 14:14:53 +10:00
..
assets
…
builtin_hooks
…
platforms fix(telegram): resolve replies to rich (sendRichMessage) messages 2026-06-16 13:04:20 -07:00
relay feat(gateway): register relay adapter from config; drop HERMES_GATEWAY_RELAY gate 2026-06-17 16:37:45 -07:00
__init__.py
…
authz_mixin.py fix(gateway): preserve WeCom per-group sender allowlists 2026-06-13 07:18:54 -07:00
channel_directory.py fix: harden WhatsApp target alias salvage 2026-06-15 05:51:47 -07:00
config.py fix(gateway): register relay connection checker 2026-06-17 16:37:45 -07:00
delivery.py
…
display_config.py feat(gateway): rename to tool_progress_grouping, add config/docs/tests 2026-06-16 05:49:24 -07:00
hooks.py
…
kanban_watchers.py
…
memory_monitor.py
…
message_timestamps.py feat(gateway): inject stable human-readable message timestamps 2026-06-16 15:49:59 -07:00
mirror.py
…
pairing.py
…
platform_registry.py
…
response_filters.py fix(gateway): suppress exact silence tokens without mutating history 2026-06-14 03:25:08 -07:00
restart.py
…
rich_sent_store.py fix(telegram): resolve replies to rich (sendRichMessage) messages 2026-06-16 13:04:20 -07:00
run.py feat(gateway,desktop): start cron via resolved CronScheduler provider 2026-06-18 14:14:53 +10:00
runtime_footer.py
…
session.py refactor: remove agent-callable send_message tool (#47856) 2026-06-17 07:11:23 -07:00
session_context.py
…
shutdown_forensics.py
…
slash_access.py
…
slash_commands.py fix: harden salvaged session and browser improvements 2026-06-15 07:46:34 -07:00
status.py Fix dashboard gateway profile scoping 2026-06-17 05:40:57 -07:00
sticker_cache.py
…
stream_consumer.py fix(mattermost): harden delivery hygiene 2026-06-16 06:34:54 -07:00
stream_dispatch.py
…
stream_events.py
…
whatsapp_identity.py
…