Skip to content

feat(config): surface gateway streaming block in DEFAULT_CONFIG#37285

Merged
teknium1 merged 1 commit into
mainfrom
hermes/hermes-123fc42b
Jun 2, 2026
Merged

feat(config): surface gateway streaming block in DEFAULT_CONFIG#37285
teknium1 merged 1 commit into
mainfrom
hermes/hermes-123fc42b

Conversation

@teknium1

@teknium1 teknium1 commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Gateway streaming is now visible in config.yaml. The gateway reads top-level streaming.* and falls back to StreamingConfig defaults when the block is absent — so the feature worked but was undiscoverable: a user with no streaming block sees responses arrive as single messages and has no way to find the toggle short of reading source. (This is exactly the "it didn't stream anything" confusion that surfaced after #37250 landed the transport default.)

Materializes the block in DEFAULT_CONFIG with values byte-identical to the dataclass defaults — discoverability only, zero behavior change.

Changes

  • hermes_cli/config.py: add a root-level streaming block to DEFAULT_CONFIG (enabled, transport, edit_interval, buffer_threshold, cursor, fresh_final_after_seconds), each documented inline. Values match gateway/config.py StreamingConfig() exactly.
  • hermes_cli/config.py: add "streaming" to _KNOWN_ROOT_KEYS so the validator accepts the root key.

Why no version bump

load_config() deep-merges DEFAULT_CONFIG over the user's YAML, so existing installs pick up the default automatically and new installs get it written. No value migration is needed, so _config_version stays at 25.

Not in scope

Setup wizard is untouched — streaming stays opt-in (off by default), just discoverable. (Per request.)

Validation

Check Result
DEFAULT_CONFIG['streaming'] == StreamingConfig() defaults identical, 0 mismatches
'streaming' in _KNOWN_ROOT_KEYS yes
_config_version unchanged (25)
Gateway resolves materialized block enabled=false, transport=auto
Old install (no key) via deep-merge gets streaming, transport=auto
Targeted suite 164 passed (config, validation, drift, streaming-nested)

Infographic

Streaming config now visible

The gateway reads top-level streaming.* with StreamingConfig defaults when the
block is absent, so streaming was invisible — a user with no streaming block
sees responses arrive as single messages and has no way to discover the toggle
short of reading source. This materializes the block in config.yaml so it's
discoverable, with values byte-identical to the dataclass defaults (no behavior
change).

- DEFAULT_CONFIG gains a root-level streaming block (enabled, transport,
  edit_interval, buffer_threshold, cursor, fresh_final_after_seconds), each
  documented inline. Values match gateway/config.py StreamingConfig() exactly.
- _KNOWN_ROOT_KEYS gains 'streaming' so the validator accepts the root key.
- No _config_version bump: load_config deep-merges DEFAULT_CONFIG over user
  YAML, so existing installs pick up the default automatically; no value
  migration needed.

Does NOT touch the setup wizard — streaming stays opt-in, just discoverable.
@github-actions

github-actions Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

🔎 Lint report: hermes/hermes-123fc42b 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: 9647 on HEAD, 9647 on base (➖ 0)

🆕 New issues: none

✅ Fixed issues: none

Unchanged: 4997 pre-existing issues carried over.

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

@teknium1 teknium1 merged commit d78d77e into main Jun 2, 2026
23 checks passed
@teknium1 teknium1 deleted the hermes/hermes-123fc42b branch June 2, 2026 08:22
changman pushed a commit to changman/hermes-agent that referenced this pull request Jun 10, 2026
…Research#37285)

The gateway reads top-level streaming.* with StreamingConfig defaults when the
block is absent, so streaming was invisible — a user with no streaming block
sees responses arrive as single messages and has no way to discover the toggle
short of reading source. This materializes the block in config.yaml so it's
discoverable, with values byte-identical to the dataclass defaults (no behavior
change).

- DEFAULT_CONFIG gains a root-level streaming block (enabled, transport,
  edit_interval, buffer_threshold, cursor, fresh_final_after_seconds), each
  documented inline. Values match gateway/config.py StreamingConfig() exactly.
- _KNOWN_ROOT_KEYS gains 'streaming' so the validator accepts the root key.
- No _config_version bump: load_config deep-merges DEFAULT_CONFIG over user
  YAML, so existing installs pick up the default automatically; no value
  migration needed.

Does NOT touch the setup wizard — streaming stays opt-in, just discoverable.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant