th-1fca98: render cross-client images + bump engine to persist them - #520
Merged
Merged
Conversation
A photo sent from iOS showed only as text in the desktop app's view of the same conversation. The engine now persists a user turn's images as image content items (smooth-operator #564); smooth-web renders them from history. - History parsing extracted to a pure, unit-tested history.ts: historyImages() turns persisted `type:'image'` items into renderable attachments (App.tsx's live-send path already rendered attachments). operator.ts can't be node-tested (Vite-only extensionless imports), so the pure logic lives where the test runner can load it. - Engine bump: smooth-operator-server/svc rev b6c6b84 -> 9b30ed7b (carries the persistence fix), moving core 1.7.10 -> 1.10.0. That core adds three additive AgentEvent::Completed fields (spend taint flags + response id, th-126fe6) and makes Session.agent_id optional; construction sites take the serde defaults older output already produced (no behavior change). Verified: full workspace build + clippy --all-targets clean; smooth-cast /code/daemon test suites green (776 tests); web history.test.ts green; vite build clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HVAvzYG7unJjCD9c3B9j1f
🦋 Changeset detectedLatest commit: 73b5d08 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
brentrager
enabled auto-merge (squash)
September 8, 2026 01:32
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.
Problem
A photo sent from the iOS Big Smooth app showed only as text in the desktop app's view of the same conversation — the image never reached other clients' history.
Fix (smooth side; the engine fix is smooth-operator #564, merged)
smooth-operator-server/svcgit revb6c6b84→9b30ed7b, which carries the persistence fix (a user turn's images are now stored asimagecontent items). This moves core1.7.10→1.10.0.AgentEvent::Completedfields (spend taint flags + response id, th-126fe6) and makesSession.agent_idoptional. The handful of construction sites (smooth-cast,smooth-code, one test insmooth-daemon) were updated to the serde defaults older output already produced — no behavior change.operator.tsinto a pure, unit-testablehistory.ts.historyImages()turns persistedtype:'image'items into renderable attachments;renderHistorysets them on user turns.App.tsx's live-send path already rendersm.attachments, so images now appear on history load too. (operator.tsitself isn't node-testable — it uses Vite-only extensionless imports — which is why the pure logic moved.)Verification
cargo build+clippy --workspace --all-targetsclean;smooth-cast/smooth-code/smooth-daemonsuites green (776 tests).history.test.ts: image items → attachments (data: mime + httpsimage/*default), empty for text-only / string / old-daemon shapes.vite buildclean; typecheck clean; pre-commit (fmt + clippy + format:check) green.Parity follow-up
iOS + Android should render persisted image items in their transcript history too ("always parity on mobile"). Reachable now that the engine persists them; tracked under the same pearl.
🤖 Generated with Claude Code