Skip to content

fix(omnio): align Sprites paths, media, and CDP cleanup - #53

Merged
ppazosp merged 4 commits into
omnio/background-job-deliveryfrom
omnio/sprite-path-resolution
Aug 3, 2026
Merged

fix(omnio): align Sprites paths, media, and CDP cleanup#53
ppazosp merged 4 commits into
omnio/background-job-deliveryfrom
omnio/sprite-path-resolution

Conversation

@ppazosp

@ppazosp ppazosp commented Jul 31, 2026

Copy link
Copy Markdown

This stack layer fixes the Hermes-side runtime mismatches found in the reported Sprite traces: sandbox home paths, binary media reads, first-tool vision initialization, and remote-CDP timeout cleanup.

Sprite-owned filesystem behavior

  • Container-backed file operations preserve a tilde until the remote environment resolves it against the Sprite user's home.
  • SpritesFileOperations expands path, src, and dst inside the Sprite before calling Toolbox.
  • vision_analyze uses the pair-authenticated raw Toolbox file stream as the authoritative Sprite path, avoiding binary corruption from terminal stdout/base64 framing.
  • When vision is the first filesystem consumer, it lazily acquires the same conversation environment as the file tools before reading /tmp, /home, ~/brand, or ~/uploads.
  • Raw reads are bounded to the existing ingest limit plus one byte. Missing, invalid, oversized, or failed Sprite transports now fail explicitly instead of falling back to shell output that may contain non-image error text.

Remote CDP cleanup

A remote Toolbox CDP session does not own a local agent-browser daemon PID. Timed-out cleanup now removes only the ephemeral client socket directory in that case and does not emit the misleading daemon PID unavailable warning. Local daemon sessions retain verified PID termination.

Backward compatibility

Backward compatible. This Hermes revision ships inside the same atomically provisioned runtime generation as its proxy, sandbox assets, and Toolbox, and that refleeted generation preserves the currently deployed frontend/control-plane contract. Refleet all Sprite pairs before merging the frontend/control-plane change; internal mixed runtime generations are intentionally unsupported. There are no database, persisted-data, or public API migrations.

Dependencies and go-live

This PR remains stacked on omnio/background-job-delivery. Its exact revision is pinned by Omnia PR NousResearch#3948. Deploy it only through a full Sprite refleet so Hermes, proxy, sandbox assets, and Toolbox move as one runtime generation before the frontend/control-plane change is merged.

Verification

  • Focused path/file coverage from the prior layer: 41 passed.
  • Current image/path regression set: 59 passed.
  • Focused image, vision, and Sprites-environment suites: 148 passed in isolated files.

Coverage matrix for first-tool vision reads:

Behaviour Category Observable outcome Status
first vision_analyze reads /tmp/screenshots Happy Raw Toolbox bytes reach the image resolver without a prior terminal call Covered
a top-level call with no explicit task id uses the default environment Edge The default Sprites binding supplies the image Covered
an active conversation environment is reused Happy No duplicate environment is created Covered
environment creation fails Error The Toolbox/environment error surfaces; no host fallback occurs Covered
non-Sprites sandbox behavior remains unchanged Compatibility Existing fail-closed container tests still pass Covered
  • Focused Ruff checks passed for all newly changed Python files.

  • git diff --check passed.

  • Full local Hermes sweep: 48,562 passed. The 31 failures and 10 collection failures are unrelated local platform/optional-dependency baseline failures (including absent optional ACP modules); none are in changed files.

  • Real Sprite path probe from the prior head: cd ~, a user-space executable under ~/.local/bin, terminal output under ~, and read_file all resolved the same home directory; probe files were cleaned up.

  • GitHub CI is running on eed96b26bff8c58e8f47d638c3ae34a59e6f81a4. The previous head was green across all eight Python shards and Desktop E2E.

  • The optional real-Docker resolver test could not start its python:3.11-slim fixture because local Docker Desktop hung; it never reached resolver code. The unit-level sandbox command path remains covered.


Prepared with Codex.

@ppazosp
ppazosp marked this pull request as ready for review August 1, 2026 10:56
@ppazosp
ppazosp force-pushed the omnio/sprite-path-resolution branch from 2460728 to 8bed19d Compare August 1, 2026 12:34
@ppazosp ppazosp changed the title fix(sprites): resolve home paths inside the sandbox fix(omnio): align Sprites paths, media, and CDP cleanup Aug 3, 2026
@ppazosp
ppazosp merged commit 58f9566 into main Aug 3, 2026
37 checks passed
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