Skip to content

fix(moa): block the moa virtual provider as a reference or aggregator slot - #53281

Merged
teknium1 merged 1 commit into
mainfrom
fix/moa-block-recursive-slots
Jun 26, 2026
Merged

fix(moa): block the moa virtual provider as a reference or aggregator slot#53281
teknium1 merged 1 commit into
mainfrom
fix/moa-block-recursive-slots

Conversation

@teknium1

@teknium1 teknium1 commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Summary

A MoA preset can currently be saved with the moa virtual provider in a reference or aggregator slot, which creates a recursive MoA tree. The runtime guards in moa_loop.py only catch this mid-turn (references silently skipped, aggregator raises RuntimeError). This blocks it at the config chokepoint so it can never be saved, and hides it from the slot pickers.

Changes

  • hermes_cli/moa_config.py: _clean_slot() rejects provider == "moa" (case-insensitive). Every save path (CLI hermes moa configure, dashboard PUT, desktop settings, hand-edited YAML) routes through this, so a moa reference is dropped (falls back to defaults) and a moa aggregator falls back to the default aggregator. Fail-closed.
  • apps/desktop/src/app/settings/model-settings.tsx: MoA reference/aggregator provider dropdowns use a filtered list that excludes the moa row.
  • web/src/pages/ModelsPage.tsx: the MoA model picker rejects a moa pick with an inline error.
  • Tests: reference slot, aggregator slot, case-insensitive.

Verification

Check Result
moa reference slot dropped → falls back to default references
moa aggregator slot dropped → falls back to default aggregator
MOA / MoA case variants blocked
resolve_moa_preset (moa_loop consumer) never returns a moa slot
Legit configs preserved untouched
tests/hermes_cli/test_moa_config.py 10 passed

Infographic

block-recursive-moa

… slot

A MoA preset whose reference or aggregator slot points at the moa virtual
provider creates a recursive MoA tree. The runtime guards in moa_loop.py only
surface this mid-turn (references silently skipped, aggregator raises). Reject
it at the config chokepoint (_clean_slot) so it can never be saved, and hide it
from the desktop/dashboard slot pickers so it isn't offered as a dead choice.
@github-actions

Copy link
Copy Markdown
Contributor

🔎 Lint report: fix/moa-block-recursive-slots vs origin/main

ruff

Total: 0 on HEAD, 0 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 0 pre-existing issues carried over.

ty (type checker)

Total: 11491 on HEAD, 11493 on base (✅ -2)

🆕 New issues (1):

Rule Count
invalid-assignment 1
First entries
tests/run_agent/test_credits_notices_toggle.py:76: [invalid-assignment] invalid-assignment: Object of type `None` is not assignable to attribute `_credits_session_start_micros` of type `int`

✅ Fixed issues (2):

Rule Count
unresolved-attribute 2
First entries
tests/run_agent/test_credits_notices_toggle.py:76: [unresolved-attribute] unresolved-attribute: Unresolved attribute `_credits_session_start_micros` on type `AIAgent`
run_agent.py:3002: [unresolved-attribute] unresolved-attribute: Object of type `Self@get_credits_spent_micros` has no attribute `_credits_session_start_micros`

Unchanged: 6037 pre-existing issues carried over.

Diagnostics are surfaced as warnings — this check never fails the build.

@alt-glitch alt-glitch added type/bug Something isn't working P3 Low — cosmetic, nice to have comp/cli CLI entry point, hermes_cli/, setup wizard comp/desktop Electron desktop app (apps/desktop/*) comp/dashboard Web dashboard / control panel UI (dashboard/, landing) labels Jun 26, 2026
@teknium1
teknium1 merged commit 7e101e5 into main Jun 26, 2026
32 checks passed
@teknium1
teknium1 deleted the fix/moa-block-recursive-slots branch June 26, 2026 21:42
pai-scaffolde pushed a commit to pai-scaffolde/hermes-agent that referenced this pull request Jun 28, 2026
… slot (NousResearch#53281)

A MoA preset whose reference or aggregator slot points at the moa virtual
provider creates a recursive MoA tree. The runtime guards in moa_loop.py only
surface this mid-turn (references silently skipped, aggregator raises). Reject
it at the config chokepoint (_clean_slot) so it can never be saved, and hide it
from the desktop/dashboard slot pickers so it isn't offered as a dead choice.
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 2, 2026
… slot (NousResearch#53281)

A MoA preset whose reference or aggregator slot points at the moa virtual
provider creates a recursive MoA tree. The runtime guards in moa_loop.py only
surface this mid-turn (references silently skipped, aggregator raises). Reject
it at the config chokepoint (_clean_slot) so it can never be saved, and hide it
from the desktop/dashboard slot pickers so it isn't offered as a dead choice.
habarmc1223-sudo pushed a commit to habarmc1223-sudo/hermes-agent-fluxmem that referenced this pull request Jul 8, 2026
… slot (NousResearch#53281)

A MoA preset whose reference or aggregator slot points at the moa virtual
provider creates a recursive MoA tree. The runtime guards in moa_loop.py only
surface this mid-turn (references silently skipped, aggregator raises). Reject
it at the config chokepoint (_clean_slot) so it can never be saved, and hide it
from the desktop/dashboard slot pickers so it isn't offered as a dead choice.
santhreal pushed a commit to santhreal/hermes-agent that referenced this pull request Jul 13, 2026
… slot (NousResearch#53281)

A MoA preset whose reference or aggregator slot points at the moa virtual
provider creates a recursive MoA tree. The runtime guards in moa_loop.py only
surface this mid-turn (references silently skipped, aggregator raises). Reject
it at the config chokepoint (_clean_slot) so it can never be saved, and hide it
from the desktop/dashboard slot pickers so it isn't offered as a dead choice.
Gravezzz pushed a commit to Gravezzz/hermes-agent that referenced this pull request Jul 21, 2026
… slot (NousResearch#53281)

A MoA preset whose reference or aggregator slot points at the moa virtual
provider creates a recursive MoA tree. The runtime guards in moa_loop.py only
surface this mid-turn (references silently skipped, aggregator raises). Reject
it at the config chokepoint (_clean_slot) so it can never be saved, and hide it
from the desktop/dashboard slot pickers so it isn't offered as a dead choice.
leewenjie pushed a commit to leewenjie/hermes-agent that referenced this pull request Aug 7, 2026
… slot (NousResearch#53281)

A MoA preset whose reference or aggregator slot points at the moa virtual
provider creates a recursive MoA tree. The runtime guards in moa_loop.py only
surface this mid-turn (references silently skipped, aggregator raises). Reject
it at the config chokepoint (_clean_slot) so it can never be saved, and hide it
from the desktop/dashboard slot pickers so it isn't offered as a dead choice.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/dashboard Web dashboard / control panel UI (dashboard/, landing) comp/desktop Electron desktop app (apps/desktop/*) P3 Low — cosmetic, nice to have type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants