Repository navigation
Let the host ask again for images it couldn't supply yet - #15
Merged
Merged
Conversation
resolveImage runs once per image, when it is inserted. An image whose bytes arrive later (a screenshot captured after the message that shows it) stayed empty until the message was drawn again. refreshImages() asks again for every image still without bytes, leaving shown and in-flight ones alone; the React controller passes it through. Co-Authored-By: ace <bot@acehq.dev>
arpan404
added a commit
to arpan404/ace
that referenced
this pull request
Nov 1, 2026
…again Removing the legacy renderer also dropped two things local links and images did: - A link to a file outside the checkout downloaded it from the thread's host, or said it couldn't. markit's link handler only opened checkout files. It now hands the rest to the download the thread screen provides (LinkedFileOpener), with the toast as before. markit percent-encodes targets, so local paths are decoded before the host matches them. - An image captured after the answer that shows it stayed empty, since markit asks for image bytes once. markit gains refreshImages() (pinned to arpan404/markit#15), and an answer with an image calls it after the thread's facts settle. The fake daemon's image.resolve now also matches a capture by its path relative to the capturing agent's folder, as the daemon's alias does. The attachments test reaches local links as links (markit draws <a>, the old renderer drew <button>) and checks a pending image by its missing bytes rather than its absence: markit draws its alt text until then. Co-Authored-By: ace <bot@acehq.dev>
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.
resolveImageruns once per image, when markit inserts it. An image whose bytes arrive later, such as a screenshot an agent captures after the message that shows it, stays empty until the message is drawn again.MarkitRenderer.refreshImages()asksresolveImageagain for every image still without bytes. It leaves images that are already shown, or still being asked for, alone.MarkitController.refreshImages()passes it through for React hosts. Types are inindex.d.tsandreact.d.ts.ace calls it when a thread records new facts. That brings back how ace behaved before markit: an answer's image appears as soon as its capture lands.
Test:
tests/node/inline-engine.test.mjshas a new case. An image the host can't supply stays empty; after the host has its bytes,refreshImages()shows it; a shown image is never asked for again.npm run test:node: 16/16 pass.🤖 Generated with Claude Code