Skip to content

feat: chunked exec streaming — server-side temp file assembly (#116) - #107

Merged
blaspat merged 10 commits into
mainfrom
feat/issue-116-exec-chunk
Aug 11, 2026
Merged

feat: chunked exec streaming — server-side temp file assembly (#116)#107
blaspat merged 10 commits into
mainfrom
feat/issue-116-exec-chunk

Conversation

@blaspat

@blaspat blaspat commented Aug 11, 2026

Copy link
Copy Markdown
Owner

What

Adds server-side chunked exec streaming support — receives exec_chunk messages from nodes, assembles base64-encoded chunks into temp files, and resolves waiters with the file path on completion.

How

Config — four new fields on NodeServerConfig:

  • exec_chunk_dir — temp file directory (default /tmp/hermes-exec-chunks)
  • exec_chunk_max_total_mb — total disk cap across all active chunks (default 50 MiB, 0 = unlimited)
  • exec_chunk_timeout_s — stale chunk timeout (default 30s)
  • exec_chunk_size — advisory chunk size advertised to nodes (default 64 KiB)

RegistryChunkState dataclass + lifecycle methods (get/set/remove_chunk_state, fail_node_chunks). Wired into register()/unregister() for disconnect cleanup.

Server dispatch_handle_exec_chunk() intercepts exec_chunk messages in the WebSocket loop, decodes base64, appends to temp files via mkstemp, resolves waiters with {output_file, exit_code, status, duration_ms, truncated} on final chunk.

Cleanup:

  • Timeout sweep (background task, 5s interval) — closes files + deletes temp files + fails waiters
  • Startup orphan cleanup — deletes leftover *.chunk files from unclean shutdown
  • Disconnect cleanup — fail_node_chunks on node disconnect/replace

Tools_node_exec_impl dual-path read: output_file (chunked) vs legacy stdout/stderr.

hello_ack — advertises exec_chunk capability so nodes know the server supports it.

Tests: 46/46 pass.

blaspat added 10 commits August 5, 2026 16:51
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
…ls.py (#116)

Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
@blaspat
blaspat merged commit 82e6194 into main Aug 11, 2026
2 checks passed
@blaspat
blaspat deleted the feat/issue-116-exec-chunk branch August 11, 2026 02:38
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