Releases: saorgage/real-chat
Releases · saorgage/real-chat
1.1.1
Fixed
- "lone leading surrogate in hex escape" (HTTP 400) could brick a chat session. The ranked
vault-search snippet was sliced at fixed character offsets (body.slice(at-60, at+120)), which
could cut through a surrogate pair (e.g. an emoji in a note), leaving a half-character. That
broken snippet got saved into the session as atoolresult, so every later message re-sent it
and the provider rejected the whole request. Two-part fix: the snippet is now surrogate-safe, and
astripLoneSurrogatespass cleans every outgoing message (system/user/assistant/tool) at the
API boundary — so any corrupted text (truncated emoji, bad paste, a poisoned note) can no longer
400 the request. Valid emoji and characters are preserved.
1.1.0
Vision: see and act on an image in one turn
When your chat model can't see an attached image (e.g. DeepSeek), the turn now routes through your configured vision provider (Gemini, etc.) running the full tool loop — so it can see the image and act on it in a single message.
Added
save_attached_image— saves the actual pasted/attached image bytes into your vault and returns a clickable![[link]]. So "save this screenshot and tell me what it says" works in one message.- Image turns now have the complete tool set (create/edit notes, search, etc.) driven by the vision model.
Fixed
- Images were unusable on follow-up turns — the image was dropped after the first send, so follow-ups fell back to a model that can't see images and would claim no image was passed. Attached images are now sticky: the chip persists across turns; tap × to remove.
- A stray
"undefined"was injected into the message text whenever an image was attached.
Verified end-to-end against Gemini 2.5 Flash (OpenAI-compatible): vision + tools + streaming + multi-step tool results all work together.