feat(config): surface gateway streaming block in DEFAULT_CONFIG#37285
Merged
Conversation
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.
Contributor
🔎 Lint report:
|
1 task
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Gateway streaming is now visible in
config.yaml. The gateway reads top-levelstreaming.*and falls back toStreamingConfigdefaults 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_CONFIGwith values byte-identical to the dataclass defaults — discoverability only, zero behavior change.Changes
hermes_cli/config.py: add a root-levelstreamingblock toDEFAULT_CONFIG(enabled,transport,edit_interval,buffer_threshold,cursor,fresh_final_after_seconds), each documented inline. Values matchgateway/config.pyStreamingConfig()exactly.hermes_cli/config.py: add"streaming"to_KNOWN_ROOT_KEYSso the validator accepts the root key.Why no version bump
load_config()deep-mergesDEFAULT_CONFIGover 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_versionstays at 25.Not in scope
Setup wizard is untouched — streaming stays opt-in (off by default), just discoverable. (Per request.)
Validation
DEFAULT_CONFIG['streaming']==StreamingConfig()defaults'streaming'in_KNOWN_ROOT_KEYS_config_versionInfographic