Add RequestVaultUnlockAsync for plugin vault unlock (v1.34.0)
Details
Add IPrivStackSdk.RequestVaultUnlockAsync(vaultId) so any plugin can
request the host to prompt the user for their master password and
unlock a vault. This replaces the pattern of plugins hardcoding their
own password input UI for vault unlock.
SdkHost implements the method using a delegate callback wired in
ServiceRegistration. The callback dispatches to the UI thread and
shows the existing PasswordConfirmationWindow dialog. If the user
enters the correct password, the vault is initialized (if needed)
and unlocked. Returns true on success, false on cancel or bad password.
Also adds email-credentials and calendar-credentials to the
StandardVaultIds array so they auto-unlock at startup alongside
the connections vault.
SDK version bumped to 1.34.0. Desktop version bumped to 1.32.0.
Refactor GraphDataService and BacklinkService to hybrid provider model (v1.31.0)
Details
GraphDataService now discovers IGraphDataProvider implementations via
IPluginRegistry and aggregates their node, edge, content, and explicit
link contributions. Entity types not covered by any provider fall back
to the existing legacy SDK-based loading path, ensuring zero regressions
while plugins are gradually migrated.
BacklinkService follows the same hybrid pattern: provider contributions
are merged with legacy entity loading, and wiki-link parsing is
consolidated through the shared WikiLinkParser utility.
PluginRegistry auto-registers IGraphDataProvider alongside the existing
ILinkableItemProvider in ActivatePlugin(). GraphPlugin injects
IPluginRegistry into GraphDataService via DI.
All 16 entity types continue to appear in the graph via the legacy
fallback until external plugins implement IGraphDataProvider.
Add IGraphDataProvider capability interface and WikiLinkParser utility (v1.33.0)
Details
Introduces the IGraphDataProvider capability interface in PrivStack.Sdk that
allows plugins to contribute their own graph nodes, structural edges, content
fields for wiki-link parsing, and explicit cross-entity links. This decouples
the Graph plugin and BacklinkService from hard-coded knowledge of every entity
type — each plugin can now self-describe its graph contributions.
New SDK types: GraphContribution, GraphNodeContribution, GraphEdgeContribution,
ContentField, ExplicitLinkContribution, and ParsedLink.
WikiLinkParser consolidates the duplicated wiki-link regex patterns and content
extraction logic previously found in both GraphDataService and BacklinkService
into a single shared utility with ParseLinks(), ExtractContentFromEntity(), and
ExtractSnippet() methods.
Extend UI.Adaptive graph models with unified types and physics settings (v1.32.0)
Details
Add Tags, ModifiedAt, WikiLinkCount fields to GraphNode and Label to GraphEdge.
Port AdjacencyList, BFS, GetLocalGraph, and AssignBfsDepths from plugin GraphData
to the Adaptive GraphData model, enabling the Graph plugin to output Adaptive types
directly without conversion. Remove 5 vestigial PhysicsParameters fields
(RepulsionStrength, SpringStrength, CollisionStrength, VelocityDecay, MinSeparation)
that were marked unused. Add GraphPhysicsSettings composable ObservableObject that
maps 0-100 slider values to consumer-specific parameter ranges, and GraphPhysicsPanel
reusable control with 4 labeled sliders for both Graph plugin and InfoPanel consumers.
Add context menus, element operations, and connector events to InfiniteCanvas (v1.31.0)
Details
Add right-click context menus for elements (Delete, Duplicate, Bring to Front, Send to Back,
Color submenu with 9 presets), connectors (Delete, Style submenu, Arrow submenu, Color submenu),
and empty canvas (Select All, Fit to View).
New public API: BringSelectedToFront, SendSelectedToBack, DuplicateSelected (deep-clone with
connector remapping), SetSelectedElementColor, GetSelectedConnector, GetSelectedElements.
New events: ConnectorSelected (fired on connector selection), ConnectorPropertyChanged (fired
after SetSelectedConnectorStyle/ArrowMode/Color calls). SelectionCleared now also fires when
connector selection is cleared.
Right-click routing added to OnPointerPressed before the left-button guard, dispatching to
hit-test-aware context menu builder in new InfiniteCanvasContextMenu.cs partial.
Get notified about new releases