Cut the 0.8.0 release (dependency upgrades + single-instance and
error-handling hardening): daemon Cargo.toml/Cargo.lock to 0.8.0, extension
metadata.json version to 8, and add the [0.8.0] CHANGELOG entry.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Dependency major upgrades (zbus 4->5, rusqlite 0.31->0.40, dirs 5->6) and the
migration + hardening that came with the review:
- zbus 5: SignalContext -> SignalEmitter, signal_context() -> signal_emitter().
- Single-instance D-Bus name: request with DoNotQueue instead of
ReplaceExisting|AllowReplacement. If the name is already owned the daemon now
exits instead of running without owning it (zbus 5 returns InQueue as Ok) or
stealing the name and orphaning the running instance (zbus does not terminate
a replaced owner). The extension already skips spawning when the name is
owned, so replacement was never needed.
- Stop swallowing real SQLite errors: upsert_item's dedup SELECT and
get_thumbnail/get_raw_item now use .optional().context()? so a missing row is
Ok(None) and a genuine error propagates instead of masquerading as not-found.
- clippy pedantic/nursery cleanup: uninlined format args, redundant mime clone,
pass ObjectId/Connection by reference where not consumed, match->if/is_ok,
doc backticks; #[allow] with rationale for the intentional lints
(significant_drop_tightening on the single-writer lock, unused_async on zbus
interface methods).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Cut the 0.7.0 release (D-Bus rename + theme-recursion fix): daemon
Cargo.toml to 0.7.0, refresh Cargo.lock (gif/half/log patch bumps + version),
extension metadata.json version to 7, and add the [0.7.0] CHANGELOG entry.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Cut the 0.6.0 release (lazy full-history search + image-format and audit
fixes): daemon Cargo.toml/Cargo.lock to 0.6.0, extension metadata.json
version to 6, and add the [0.6.0] CHANGELOG entry.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Audit fixes for the daemon:
- Decode gif/webp/bmp/tiff/ico (enable the pure-Rust image features). These
mimes were accepted by pick_mime but the image crate only had png/jpeg, so
thumbnail decode failed and the item was silently dropped. Drop avif (needs
heavy C deps) and svg (not a raster format the image crate decodes) from the
allowlist so unsupported types are never selected.
- ItemAdded signal preview now uses db::PREVIEW_CHARS (200), matching the
history/search queries, so a just-copied row and the same row after a reload
carry identical text.
- Add a deterministic ", rowid DESC" tiebreaker to the three created_at DESC
orderings (history, search, prune) so items sharing a millisecond have a
stable order and prune can't evict the wrong one at the boundary.
- SetConfig now prunes immediately (and emits ItemDeleted) when max_history is
lowered, instead of waiting for the next copy.
- Request the bus name with AllowReplacement (plus ReplaceExisting) so a
reload's new instance can cleanly take the name; fix the misleading comment.
- Wayland monitor clears its pending-offers map on Selection{None} so it can't
grow across copy-then-clear cycles (wlroots path).
- Document that SubmitItem is a trusted-caller method (the password-manager
hint is enforced client-side; forwarding it is a future contract change).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Cut the 0.5.0 release (light/dark theme support): daemon
Cargo.toml/Cargo.lock to 0.5.0 (no code change, kept in lockstep with the
tag), extension metadata.json version to 5, and promote the CHANGELOG
[Unreleased] entry to [0.5.0] - 2026-05-26.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Cut the 0.4.0 release: daemon Cargo.toml/Cargo.lock to 0.4.0, extension
metadata.json version to 4, and promote the CHANGELOG [Unreleased] entry
to [0.4.0] - 2026-05-26.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The D-Bus interface previously returned content as a base64-encoded
string (type 's'), requiring the daemon to encode and GJS to decode
on every paste. D-Bus natively supports byte arrays (type 'ay'),
eliminating both encode and decode steps entirely.
Changes:
- dbus_service.rs: return (String, Vec<u8>); drop base64 calls
- dbus.js: content_b64 arg changed from type 's' to type 'ay'
- panel.js: remove GLib.base64_decode(); pass ay bytes directly
- Cargo.toml/Cargo.lock: remove base64 dependency (no longer used)
For a 1 MB text paste this avoids allocating a 1.33 MB intermediate
string and decoding it on the compositor main thread.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>