Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 1 of 32 Next →
February 28, 2026
minor NotesSnippets

Rework GitHub Gist integration: sync-all, gist picker for publish

Notes 1.65.2 → 1.66.0 | Snippets 1.9.0 → 1.10.0 | 1c438ac1
Details

Replace the individual gist source picker with a "Sync All Gists" button that

pulls every user gist as a collection in a single operation. Replace the inline

"Publish as Gist" dialog in both Snippets and Notes with a gist picker modal

that lets users add files to existing gists or create new ones.

Snippets plugin:

  • GistSyncService: add SyncAllGistsAsync() for bulk gist discovery/sync,

add AddSnippetToExistingGistAsync() for adding files to existing gists

  • GistSourcesViewModel: remove add-source flow (IsAddingSource, gist picker

list, LoadAvailableGistsAsync), add SyncAllGists command with progress

  • GistSourcesOverlay: remove gist picker panel, update empty state text,

replace footer with "Sync All Gists" button + progress indicator

  • New GistPickerViewModel + GistPickerOverlay: two-tab picker (add to

existing gist from local GistSources, or create new gist)

  • SnippetsViewModel: replace ShowPublishGistDialog/CancelPublishGist/

ConfirmPublishGist with PublishToGistAsync using the new picker

  • SnippetsView: remove inline publish panel, add GistPickerOverlay

Notes plugin:

  • GistPublishService: add ListUserGistsAsync() with pagination and

AddToExistingGistAsync() with duplicate filename handling

  • New GistPickerViewModel + GistPickerOverlay: two-tab picker (add to

existing gist from GitHub API, or create new gist)

  • NotesViewModel: replace fire-and-forget PublishToGistAsync with picker

workflow that returns gist URL on confirm

  • NotesView: add GistPickerOverlay

Snippets 1.9.0 → 1.10.0, Notes 1.65.2 → 1.66.0

minor Rss

Add article category tags, tag filtering, and summary dedup

Rss 1.9.6 → 1.10.0 | d3dd60de
Details

Parse <category> elements from RSS/Atom feeds into a new Categories

field on RssArticle. Both FetchFeedAsync and RefreshFeedAsync now

extract category terms via SyndicationItem.Categories.

Article detail view shows category tags as styled pills below the

author/date line. Article list items also display compact tag labels.

Tag filter dropdown in the toolbar lets users filter articles by any

tag present in the current article set. Clear button resets the filter.

Summary preamble box is now hidden when the summary text is just a

prefix repetition of the article content — detected via normalized

plain-text comparison in HasDistinctSummary on RssArticle. This

prevents the redundant preamble block seen with feeds like the

PrivStack changelog where summary == content.

Version bump 1.9.6 → 1.10.0

minor Contacts

Add fuzzy search, new AI intents, and RAG improvements to Contacts plugin

Contacts 1.9.7 → 1.10.0 | e322ffa7
Details

Add StringSimilarity utility (Jaro-Winkler, Levenshtein, Token Jaccard) for

fuzzy name matching in contact resolution and search. ResolveContactAsync now

falls back to fuzzy matching (threshold 0.6) when exact match fails, including

a full scan fallback for typos/nicknames. Search intent also augments SDK

results with fuzzy matches.

New intents:

  • contacts.get_contact: retrieves full contact details (emails, phones,

addresses, social profiles, tags, recent interactions)

  • contacts.list_by_company: lists contacts at a company (fuzzy matched)
  • contacts.list_by_group: lists contacts in a group (fuzzy matched)

RAG indexing now includes:

  • Company chunks with name, industry, website, employee count
  • Group chunks with name, description, member count, member names
  • Enriched contact chunks with tags, address, social profiles

Version bump 1.9.7 → 1.10.0

minor Snippets

Full-featured GitHub Gists integration for Snippets plugin (v1.9.0)

Snippets 1.8.0 → 1.9.0 | 10faac40
Details

Adds bidirectional gist sync and full gist management capabilities:

Models:

  • GistSource: add sync_direction, remote_updated_at, html_url, is_starred, is_own
  • Snippet: add gist_content_hash for dirty detection via SHA256

GitHubGistApiClient:

  • Add CreateGistAsync, UpdateGistAsync, DeleteGistAsync for write operations
  • Add StarGistAsync, UnstarGistAsync, IsGistStarredAsync for star management
  • Add html_url field to GitHubGist DTO

GistSyncService:

  • Refactor SyncAsync to branch on sync_direction (pull_only vs bidirectional)
  • Bidirectional: compare content hashes (local dirty) and timestamps (remote dirty),

push local changes, pull remote changes, remote wins on conflict

  • Add PublishSnippetAsGistAsync: create gist, link snippet, set up collection
  • Add PushSnippetAsync: push local edits to GitHub
  • Add DeleteGistAsync: delete from GitHub, unlink snippets
  • Add RenameGistAsync: update gist description on GitHub
  • Add ToggleStarAsync: star/unstar with local state persistence

GistSourcesViewModel (overlay):

  • Add ToggleStar, StartRename/ConfirmRename/CancelRename, DeleteGistFromGitHub
  • Add OpenInBrowser, CopyEmbedCode, ToggleSyncDirection commands
  • GistSourceEntry: add IsStarred, IsOwn, SyncDirection, IsRenaming, EditName, HtmlUrl
  • Ownership gating: rename/delete only available for owned gists
  • Populate new fields in LoadSourcesAsync and AddSelectedGistAsync

SnippetsViewModel (detail panel):

  • Add SelectedSnippetGistSource, IsGistLinked computed property
  • Add publish dialog state: IsPublishingGist, PublishGistDescription, PublishGistIsPublic
  • Add ShowPublishGistDialog, CancelPublishGist, ConfirmPublishGistAsync commands
  • Add PushToGistAsync, CopyGistEmbedCodeAsync, OpenGistInBrowser commands

GistSourcesOverlay.axaml:

  • Replace remove button with three-dot MenuFlyout (Open, Embed, Rename, Delete, Remove)
  • Add star toggle button on source cards
  • Add sync direction toggle (pull_only ↔ bidirectional) as clickable label
  • Add inline rename with TextBox swap + confirm/cancel buttons

SnippetsView.axaml:

  • Add "gist" text badge next to language badge for gist-linked snippets
  • Add Push, Embed, Open in Browser icon buttons for gist-linked snippets
  • Add Publish button with GitHub icon for unlinked snippets
  • Add inline publish panel with description, public/secret toggle, publish/cancel

SnippetsPlugin.cs:

  • Add sync_direction indexed field to gist_source schema
  • Bump version 1.8.0 → 1.9.0 (csproj + Metadata)
  • Update DetailedDescription to mention bidirectional gist sync
minor Snippets

Add GitHub Gists integration to Snippets plugin (v1.8.0)

Snippets 1.7.6 → 1.8.0 | 7f911b1d
Details

Pull-only sync from GitHub Gists into local snippets. Each gist file

becomes a snippet, auto-grouped into a collection named after the gist

description. Follows the Notes plugin's Wiki Sources pattern.

New files:

  • GistSource model with sync status tracking
  • GitHubGistApiClient (paginated list + single-gist fetch)
  • GistSourceService (SDK CRUD wrapper for gist_source entities)
  • GistSyncService (orchestrates pull sync with file diffing)
  • GistSourcesViewModel (overlay state machine with add/sync/remove)
  • GistSourcesOverlay (modal UI using shared adaptive:ModalOverlay)

Modified files:

  • Snippet: added gist_source_id and gist_filename tracking fields
  • SnippetsPlugin: IConnectionConsumer (gist scope), gist_source entity

schema, service wiring, WipeTargets

  • SnippetsViewModel: lazy GistSourcesViewModel, OpenGistSources command
  • SnippetsView: gear icon with MenuFlyout, overlay embedding
  • csproj: version bump 1.7.6 → 1.8.0
← Prev Page 1 of 32 Next →

Get notified about new releases