Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
b616a52
feat(settings): temperature + models.dev context detection in AI & Ch…
ddutchie Jul 23, 2026
14f0dcb
feat(notes): Live Preview editor mode with inline markdown rendering
ddutchie Jul 23, 2026
75e94aa
feat(notes): render callouts inline in Live Preview (Tier 2 POC)
ddutchie Jul 23, 2026
9fc34f3
Linking a note to a task no longer risks deleting the note.
ddutchie Jul 24, 2026
9d78d09
Add ConnectorLogo component for community registry connectors
ddutchie Jul 24, 2026
16402a8
Registry 1: community manifest fetch + cache
ddutchie Jul 24, 2026
6462d77
Registry 2: Browse Community tools + 1-click install
ddutchie Jul 24, 2026
d9fb6f8
Handle OAuth sign-in cancellation + timeout clearly
ddutchie Jul 24, 2026
6913947
ConnectorLogo: add Zapier glyph for the gateway connector
ddutchie Jul 24, 2026
7af9d0d
Lint: remove explicit any in registry/link tests; tidy BrowseCommunit…
ddutchie Jul 24, 2026
c3b0241
Address CodeRabbit review (PR #92)
ddutchie Jul 24, 2026
d546bed
fix(lint): silence intentional set-state-in-effect warnings
ddutchie Jul 24, 2026
2bcd125
fix(notes): disable inline callout widgets (block-widget layout bug)
ddutchie Jul 24, 2026
f40988f
fix(sync): desktop soft-deletes notes (tombstone) instead of hard-delete
ddutchie Jul 24, 2026
89143a0
ConnectorLogo: render registry-supplied iconSvg; drop bundled brand g…
ddutchie Jul 24, 2026
88c58fe
fix: address review findings (OAuth teardown, delete idempotency, SVG…
ddutchie Jul 24, 2026
9dbc701
Show registry brand logos in the configured-servers list
ddutchie Jul 24, 2026
b36e7de
Browse Community: category chips instead of a tag wall
ddutchie Jul 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions changelogs/v2.5.6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# v2.5.6

## Added

- **Temperature is now in AI & Chat settings.** The sampling temperature for the chat panel and inline AI — previously only reachable from the in-chat gear popover — now has a dedicated control in Settings → AI & Chat, matching the Coding Agent settings. Presets (0.1 / 0.3 / 0.5 / 0.7) plus a custom value.
- **Automatic context-window detection via models.dev.** The **Context window** control in both AI & Chat settings (Cloud / Local API provider) and Coding Agent settings now detects your model's real context size from the [models.dev](https://models.dev) catalog. With **Auto** enabled (the default), it applies the detected value automatically whenever you change models — no clicking required. Setting a value manually (custom input or preset) switches to a manual override; tapping **Auto** re-enables automatic detection. Detection is fuzzy, so proxy or gateway model ids (e.g. `playground-claude-opus-4-8`, `us.anthropic.claude-opus-4-7`) still resolve to the underlying model's context size. The catalog is cached locally so lookups are instant and work offline after the first fetch. (This brings desktop in line with the mobile app, which already used models.dev.)
- **Live Preview in the note editor.** Write mode now hides markdown syntax markers (`**`, `#`, `` ` ``, `-`, and `[…](…)` link URLs) on every line except the one your cursor is on — so a note looks rendered while you type, but the markers reappear the moment you click into a line to edit them. Bullet markers render as a `•`, and links show just their display text. Headings now render at their true size and bold/italic/code are properly styled in the editor itself (previously the editor theme referenced highlight classes that were never actually emitted, so formatting only appeared in Read mode), and the editor's heading sizes, body font, line-height and inline-code styling are now matched to Read mode so switching between Write and Read no longer shifts the layout. Nothing else changes: the raw markdown is still what's saved to disk, and Read mode remains the full render (with images, diagrams, and math). This makes the editor far friendlier for anyone who doesn't want to think in markdown.
- **Live Preview now styles highlights, wikilinks and blockquotes too.** `==highlighted==` text, `[[wikilinks]]` (shown as accent chips) and `> blockquotes` (left border) now render inline in Write mode to match Read mode, with their markers hidden until you edit the line.
- **Groundwork for a community tool registry.** Cairn can now fetch a curated catalog of MCP servers and HTTP services from the [cairn-community](https://github.com/ddutchie/cairn-community) registry — an ETag-cached, offline-resilient `manifest.json` validated against the same shape Cairn stores tools in. This is the fetch/cache plumbing; a one-click "Browse Community" installer lands in a follow-up.
- **Browse Community tools.** Settings → Tools has a **Browse** button that opens the community catalog: a search box plus **category** filter chips (Project management, Dev & Code, Docs & Knowledge, CRM & Support, Search & Web, Finance, Design, Automation, Utilities) — a tidy set of groups rather than a wall of granular tags (tags still power search). Browse MCP servers (Jira, Linear, Notion, GitHub, monday, Sentry, Asana, Stripe, HubSpot, Canva, Cloudflare, Vercel, Tavily…) and HTTP services (weather, search…), each with its brand logo and the exact endpoint shown before you install. One click installs a tool (disabled, for review); connectors that need an API key prompt for it (stored in the OS keychain, never in the database or sent to the model), and OAuth connectors install ready to Connect. Installed items show an **Update** button when the registry ships a newer version. Connector logos come from the registry itself (compiled and sanitized upstream), so new connectors — and their brand marks — appear here without updating the app. Your **configured servers list** shows the same brand logos too.

## Changed

- **Settings now reflow gracefully in a narrow window.** Settings rows previously kept their label and control side-by-side even when the window got narrow, squashing long descriptions into a thin column. Rows now stack the control below the label once the settings pane is narrow (via container queries), and the AI Provider toggle wraps instead of overflowing.
- **Corrected the AI Provider description.** It referenced "Apple Intelligence," which is a mobile-only option — on desktop the choice is between an offline On-Device Llama model and a standard cloud / local (OpenAI-compatible) API connection. The description now says so.
- **Desktop now soft-deletes notes (tombstones) instead of hard-deleting them.** Deleting a note on desktop previously physically removed the database row and relied on the sync engine reconstructing a throwaway "tombstone shell" so peers wouldn't resurrect it — a fragile mechanism that, combined with a stale device's oplog, could let a deleted note reappear or a freshly-created note vanish. The row is now tombstoned (`deleted_at` set) exactly like the mobile app already does, so both platforms represent "gone" identically and the deletion carries a durable, comparable timestamp across sync. The note still disappears from every list and search (all live reads already filter tombstones) and its `.md` file is still removed. This unifies the delete lifecycle and is the groundwork for the upcoming delete-wins reconciliation.

## Fixed

- **Outbound HTTPS requests are no longer blocked in development.** The dev Content-Security-Policy only allowed connections to `self` and localhost, so features that call external services from the renderer (like the new models.dev context-window lookup) were refused with a CSP error while running the dev build. Dev now permits `https:` connections, matching the production policy.
- **Linking a note to a task no longer risks deleting the note.** `link_note_to_task` / `unlink_note_from_task` released the MCP write-lock (`mcp_active_writes`) *before* writing the note's `.md` file. Because the file-watcher runs in a separate process, an unlink of the note's old path during that unguarded write could be misread as a deletion and the note's row purged. The file write now happens inside the lock (matching every other note tool), so the watcher correctly treats it as a relocation. Added a regression test asserting the lock is held across the write.
- **Cancelling an MCP sign-in now behaves.** If you deny consent on a connector's authorization page, the browser tab now says "Sign-in cancelled" and Cairn shows a clear cancelled message (previously it reported a confusing "response was missing or invalid"). While Cairn is waiting for the browser step, the button now offers a **Cancel** action instead of being stuck on "Waiting for browser…", and a sign-in that's never completed times out on its own after 10 minutes with a clear message.
- **Editing, deleting, or signing out of an MCP server now fully tears down any in-flight sign-in.** These actions previously only dropped a pending deep-link attempt, leaving a waiting loopback redirect listener bound and orphaned. They now cancel both, so an abandoned browser step never leaks a listener. Re-initiating a sign-in for the same server is also now race-safe: a newer attempt cleanly supersedes an older one instead of both registering listeners and orphaning a loopback.
- **Connector logos with attribute-free `<svg>` tags now size correctly.** The registry logo renderer only injected `width`/`height` when the `<svg>` opening tag was followed by a space, so a `<svg>` (or one led by a tab/newline) that passed the safety guard rendered at its intrinsic size instead of filling the slot. The safety guard's inline-event-handler rejection is also now boundary-aware (it no longer depends on preceding whitespace).
Loading