Teknium
2031c819fe
simplify(compat): gateway — re-land 92d0bd0d73 (reverted by stale-index commit b818085298)
...
Re-applies the gateway compat removal byte-for-byte; see 92d0bd0d73 for the
full inventory (30 re-exports/aliases + 2 shim modules dropped, 3 shim-only
names re-removed, 24 callers + 34 test files repointed). No new changes.
2026-09-03 13:12:50 -07:00
Teknium
b818085298
simplify(compat): doctor/status — drop 13 re-exports + the doctor_* globals() facade (97 names), repoint 6 callers / 13 tests
2026-09-03 13:10:52 -07:00
Teknium
92d0bd0d73
simplify(compat): gateway — drop 30 re-exports/aliases + 2 shim modules, re-remove 3 shim-only names, repoint 24 callers + 34 test files
...
Per COMPAT_REMOVAL.md (internal import paths are not a stable API):
Re-exports removed
- gateway/run.py: atomic_json_write, load_dotenv, resolve_delivery_transport,
TurnRunner, merge_pending_message_event, _arm_loop_floor_timer,
start_loop_liveness_watchdog, DEFAULT_GATEWAY_POST_INTERRUPT_GRACE_TIMEOUT,
_UNSET (9) — run_* mixins and tests now import from the defining module
(gateway.delivery / gateway.run_turn_runner / gateway.platforms.base /
gateway.shutdown_watchdog / gateway.restart / utils).
- gateway/session.py: SessionResetPolicy, normalize_whatsapp_identifier,
TranscriptReadError, auto_continue_freshness_window (+ "_now & co." noqa
facade) — gateway/__init__ takes SessionResetPolicy from .config; callers
take TranscriptReadError from gateway.session_transcript.
- gateway/kanban_watchers.py: _wake_scope_id + "tests import via origin" noqa
facade; tests import from kanban_watchers_common / _notifier.
- gateway/slash_commands.py: _model_switch_skew_guard, HISTORY_UNREADABLE.
- gateway/stream_consumer.py: escape_code_fences_for_display.
- gateway/platforms/api_server.py: "re-exported" RunIdempotencyStore comment;
tui_gateway + tests import gateway.platforms.api_server_run_idempotency.
- gateway/platforms/__init__.py: PEP 562 __getattr__/__dir__ lazy QQAdapter /
YuanbaoAdapter facade (no in-tree importer).
- gateway/startup_watchdog.py: whole re-export shim module deleted; the three
in-tree callers import hermes_startup_watchdog directly.
Aliases removed
- gateway/platforms/signal.py: SignalAdapter._markdown_to_signal.
- gateway/shutdown_forensics.py: _parse_systemd_duration_to_us.
- gateway/platforms/yuanbao.py: OutboundManager.start_slow_notifier /
cancel_slow_notifier / get_chat_lock / _chat_locks / CHAT_DICT_MAX_SIZE
delegates; module-level get_active_adapter / send_yuanbao_direct;
MarkdownProcessor has_unclosed_fence / ends_with_table_row /
split_at_paragraph_boundary static pass-throughs (chunk_markdown_text stays —
it carries yuanbao's chunking policy). tools/send_message_senders +
tools/yuanbao_tools call YuanbaoAdapter.get_active() / sender.send_direct().
Shim-only names re-removed (earlier review-fix round 96c104c903 )
- CapabilityDescriptor.from_platform_entry (+ tests/gateway/relay/test_descriptor_from_entry.py)
- SessionTurnLeaseRegistry.__len__ (+ its test)
- is_relay_media_url KEPT: download() uses it, real internal helper.
Tests that pinned a shim (startup_watchdog re-export identity, api_server
RunIdempotencyStore identity, signal wrapper parity) are dropped; tests that
pinned live behavior are repointed at the implementation.
Note: the gateway/run.py hunk of this change was swept into 00a3cfe5c9 by a
concurrent commit on the shared worktree; this commit carries the rest.
Verified in an isolated worktree (HEAD + this change only): ruff clean,
import-smoke of all 33 touched modules under a fresh HERMES_HOME,
605 passed / 1 skipped across the 39 covering test files.
2026-09-03 13:10:49 -07:00
Teknium
fd1a0594c1
refactor(tui_gateway): X2 wave3 — compute_host guarded frame handlers + session-build split, groups profile/kwargs folds, project_tree placement/auto-bucket compaction, projects row/policy folds, entry+oauth plumbing trims (2653->2437 LOC)
2026-09-03 04:15:06 -07:00
Teknium
46afe9ff44
refactor(tui_gateway): control-ack builder, callback/pid/route helpers, envelope collapse (group E)
2026-09-03 00:52:04 -07:00
Teknium
ae94886814
refactor(tui_gateway): table-driven groups passthrough handlers, pid/authority helpers, docstring compaction (group E)
2026-09-03 00:17:58 -07:00
Teknium
3d80006765
refactor(tui_gateway): drop compute_host spike path, unify frame/reply builders, extend _room_method, compact layout (group E)
2026-09-02 23:27:53 -07:00
Teknium
beacf4e942
refactor(tui): resume — verified partial work (acp_adapter + methods_* compaction, bind_module via globals())
2026-09-02 14:09:01 -07:00
David Dudok de Wit
e7433910e9
feat(bot-mode): add scoped cross-gateway Group Chat transport
2026-08-31 01:04:11 -07:00
David Dudok de Wit
93c7089f70
feat(bot-mode): run same-gateway Group Chats without Desktop
2026-08-30 22:19:06 -07:00
Teknium
e730deedd1
feat(bot-mode): Group Chats survive the authority gateway dying — log replication and fenced takeover
...
Every participant gateway can now keep a durable copy of a hosted room's
ordered log and continue the room when its authority host is gone:
- gateway/hosted_room_replicas.py: replica store in root state.db.
ingest_page() persists authority-stamped groups.log pages idempotently,
refusing sequence gaps and authority-epoch regressions. promote_replica()
continues the room locally at epoch+1 with a lineage-proving
authority.claimed event; the stale owner is fenced everywhere the claim
replicates. demote_room() lets a returning stale authority fence itself
(authority.lost) upon observing a newer epoch, killing split-brain writes.
- tui_gateway/methods_groups.py: groups.replicate / groups.replica_state /
groups.promote / groups.demote RPC surface. Promotion requires
confirm=true — storage decides HOW takeover is atomic and provable, the
caller (user action now, lease/quorum driver later) decides WHEN it is
safe, matching the boundary blessed on #97681 .
Validation: 20 new tests incl. a full failover round-trip (A hosts, B
replicates incrementally, A dies, B promotes with complete history, A
returns demoted and fenced); 69 total across the hosted-rooms area; E2E
with two real gateway stores and real install identities.
2026-08-30 20:39:58 -07:00
David Dudok de Wit
cbc67b939f
feat(bot-mode): add durable Group Chat authority and replay
2026-08-30 19:46:14 -07:00