Skip to content

th-1fca98: render cross-client images + bump engine to persist them - #520

Merged
brentrager merged 2 commits into
mainfrom
th-1fca98-render-images
Sep 8, 2026
Merged

brentrager merged 2 commits into
mainfrom
th-1fca98-render-images

Conversation

@brentrager

Copy link
Copy Markdown
Contributor

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)

  • Engine bump: smooth-operator-server/svc git rev b6c6b849b30ed7b, which carries the persistence fix (a user turn's images are now stored as image content items). This moves core 1.7.101.10.0.
    • Core 1.10 adds three additive AgentEvent::Completed fields (spend taint flags + response id, th-126fe6) and makes Session.agent_id optional. The handful of construction sites (smooth-cast, smooth-code, one test in smooth-daemon) were updated to the serde defaults older output already produced — no behavior change.
  • Web render: history parsing extracted from operator.ts into a pure, unit-testable history.ts. historyImages() turns persisted type:'image' items into renderable attachments; renderHistory sets them on user turns. App.tsx's live-send path already renders m.attachments, so images now appear on history load too. (operator.ts itself isn't node-testable — it uses Vite-only extensionless imports — which is why the pure logic moved.)

Verification

  • Full workspace cargo build + clippy --workspace --all-targets clean; smooth-cast / smooth-code / smooth-daemon suites green (776 tests).
  • history.test.ts: image items → attachments (data: mime + https image/* default), empty for text-only / string / old-daemon shapes.
  • vite build clean; 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

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-bot

changeset-bot Bot commented Sep 8, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 73b5d08

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@smooai/smooth Patch

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
brentrager enabled auto-merge (squash) September 8, 2026 01:32
@brentrager
brentrager merged commit 3c61a47 into main Sep 8, 2026
4 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