Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 55 of 266 Next →
February 27, 2026
patch Desktop Shell

Fix Duncan not seeing embedded datasets in notes pages

Details

AppendEmbeddedDatasetContentAsync expected note content to be a JSON

string and scanned for "dataset_id" via text search. Content is actually

a JSON array of typed block objects, so the method bailed at the

type check and never found any dataset references.

Rewritten to:

  • Parse content as a block array, iterating table/chart blocks
  • Extract dataset_id (Data plugin datasets) and provider_plugin_id +

provider_query_key (cross-plugin queries from Tasks, Contacts, etc.)

  • Query via IPluginDataSourceProvider using the correct provider for

each backing mode

  • Fetch first 20 rows and inject columns + data into Duncan's context
  • Legacy string fallback preserved for older content formats
  • Capped at 3 embedded data sources per note to stay within token limits
patch Desktop Shell

Remove topic restrictions from Duncan cloud system prompt

Details

Duncan was scoped as "dedicated exclusively to the PrivStack ecosystem"

which refused general-knowledge questions. Cloud models use the user's

own API key, so there's no reason to restrict what they can talk about.

Updated cloud system prompt to:

  • Explicitly allow any topic (general knowledge, weather, creative, etc.)
  • Ask for location context (zip code) when needed for location-dependent

questions like weather, if not already in memory

  • Use memory-stored location when available
patch Desktop Shell

Fix API key delete failing when vault blob is already gone

Details

When a vault blob no longer exists (data wipe, profile change), the

VaultBlobDelete call throws NotFound, which aborted the entire delete

handler — leaving the stale key hint in settings and the entry in the

Saved Keys list with no way to remove it.

Now catches the VaultBlobDelete failure independently and still proceeds

to clean up the settings hint and cached provider key.

minor Notes

Add notes.update_note intent and block-aware content parser

Notes 1.64.0 → 1.65.0 | e1190d4a
Details

Enhance the Notes plugin's content parser to create proper block types

from markdown-like syntax: headings (#), bullet lists (-), numbered

lists (1.), task lists (- [ ]), blockquotes (>), code blocks (```),

horizontal rules (---), markdown tables (| |), and [CHART:] markers

for dataset-backed chart blocks.

Add notes.update_note intent for modifying existing notes — supports

replace and append modes. Add AddChart method to PageContentBuilder.

This enables Duncan to create rich, structured notes with appropriate

block types (headings, tables, charts, code blocks, etc.) instead of

flat paragraph text, and to update existing notes.

Bump Notes plugin version to 1.65.0.

patch Desktop Shell

Fix Duncan not initializing — use settings key hints for IsAvailable

Details

The previous fix (deferred recheck) was insufficient. The root issue is

that AiService.IsAvailable called provider.IsConfigured which does a

synchronous vault blob read via FFI. This can fail silently during

startup, and since IsEnabled is a plain getter with no re-notification,

Duncan stays hidden for the session.

New approach: IsAvailable for cloud providers now checks

AppSettings.AiSavedKeyHints instead of reading the vault. The key hints

are persisted in the settings JSON when a user saves an API key, so

they're available immediately at startup — no vault read needed. The

actual vault read still happens at request time via the async path in

CompleteAsync/StreamCompleteAsync, which properly handles vault unlock.

This is a UI-gating-only change. The vault-based IsConfigured check

is still used by GetProviders() (settings page) and at request time.

← Prev Page 55 of 266 Next →

Get notified about new releases