Wire entity-ref drag from plugins to InfiniteCanvas
Details
Add cross-plugin entity drag support so users can drag items from
Contacts, Journal, Snippets, RSS, and WebClips onto the Notes
InfiniteCanvas as reference cards. Each plugin emits the
privstack/entity-ref drag format using EntityDragHelper from
UI.Adaptive. Notes plugin wires EntityReferenceClicked events
through IDeepLinkTarget for double-click navigation back to the
source entity. Also adds entity-ref format to the Notes page tree
drag alongside the existing PageTreeNode format. Includes
EntityRefStyles color map for per-type badge rendering on canvas
cards. Version bumps: Notes 1.39.0, Contacts 1.7.0, Journal 1.5.0,
Snippets 1.5.0, RSS 1.7.0, WebClips 1.1.0.
Adaptive sync throttling via server rate-limit discovery (v1.11.0)
Details
Add RateLimitConfig type and get_rate_limits() API client method. On
startup the sync engine fetches the server's throttling config and uses
it to cap flush batches (25 entities/cycle) and insert inter-entity
delays (120ms). Overflow entities are re-queued for the next flush cycle.
This proactively prevents 429 rate limit errors during bulk syncs
instead of relying solely on reactive retry-with-backoff.
Add entity reference support to InfiniteCanvas (v1.28.0)
Details
Add cross-plugin entity reference drag-and-drop to the InfiniteCanvas
control. Introduces the privstack/entity-ref data format enabling any
plugin entity (tasks, contacts, events, etc.) to be dropped onto the
canvas as a reference card, then double-clicked to navigate back.
Changes:
- CanvasModels: add EntityReference type constant, EntityType/EntityId
fields on CanvasElement (additive, backward-compatible JSON)
- New EntityRefDropPayload model for drag format serialization
- New EntityRefStyle record for per-type badge colors and display names
- InfiniteCanvasControl: add EntityRefStyles styled property and
EntityReferenceClicked event alongside existing PageReferenceClicked
- InfiniteCanvasDragDrop: accept entity-ref format in OnDragOver/OnDrop,
deserialize payload and create entity_ref element with badge color
- InfiniteCanvasInteraction: handle entity-ref double-click navigation
before existing page-ref check
- Split InfiniteCanvasRendering.cs (361 lines) into two partials:
InfiniteCanvasRendering.cs keeps Render(), grid, empty state, creation
preview, and perf badge; InfiniteCanvasElementRendering.cs gets all
element-specific Draw methods plus new DrawEntityReference (rounded
card with colored badge circle, title, subtitle)
- New EntityDragHelper in UI.Adaptive/Helpers for plugins to create
entity-ref drag data without boilerplate
- Version bump: PrivStackSdkVersion 1.27.0 → 1.28.0
Add canvas/whiteboard feature to Notes plugin (v1.38.0)
Details
Add standalone whiteboard entities with CRUD operations, infinite canvas
view with sidebar, and embeddable canvas blocks inside pages.
New files:
- Whiteboard model and WhiteboardSummary record for entity storage
- WhiteboardService for whiteboard CRUD via SDK messaging
- CanvasViewModel for whiteboard management, tool selection, autosave
- NotesViewModel.Canvas partial for view switching and page navigation
- CanvasBlockEditor control for embedding canvases inside page blocks
Modified files:
- NotesPlugin: register whiteboard entity schema, sync handler, service init
- Page.cs: add CanvasBlock type with converter support
- NotesView.axaml: replace canvas placeholder with full canvas UI including
whiteboard sidebar, InfiniteCanvasControl, floating toolbar, and
performance warning badge
- NotesView.axaml.cs: wire canvas control events (DataChanged, PageRef,
PerformanceWarning) and FitToView click handler
- PickerViewModels: add Canvas entry to block type picker list
- NotesViewModel: make SwitchToCanvasView async to load whiteboards
Consumes InfiniteCanvasControl from PrivStack.UI.Adaptive v1.27.0.
Whiteboard autosave uses 500ms debounce. Entity type uses LwwDocument
merge strategy for cloud sync compatibility.
Add browser extension companion infrastructure (v1.30.0)
Details
Add IPC server using named pipes for secure local communication between the
desktop app and browser extensions via a native messaging bridge. Includes:
- Named pipe IPC server (IpcServer, IpcConnectionHandler, IpcMessageRouter)
with length-prefixed JSON protocol and constant-time auth token validation
- PrivStack.Bridge native messaging relay (C# AOT console app) that connects
browser extension stdin/stdout to desktop named pipe
- NativeMessagingRegistrar for auto-registering host manifests on Chrome,
Firefox, Edge, and Brave across macOS, Windows, and Linux
- BridgeAuthToken generation and storage in AppSettings
- Graph plugin integration: WebClip node type with filter checkbox,
data loading in GraphDataService, and persisted visibility toggle
- IPC message routing for clip.save, readlater, entity.search, snip.save,
transcribe.enqueue, history.batch_sync, and ping actions
- Version bump: 1.29.4 → 1.30.0
Get notified about new releases