Add IQuickActionProvider to Notes plugin (v1.51.0)
Details
Implements IQuickActionProvider on NotesPlugin, registering a "New Sticky
Note" global quick action. The action shows a modal overlay with a
QuickStickyNoteForm control (title, content, color picker) that creates a
sticky note via StickyNoteService from any plugin tab. The form is built
programmatically as a self-contained ContentControl to keep the quick action
lightweight and independent of the Notes view state.
GitHub sync: markdown rendering, comments, timeline, Projects v2 (1.17.0)
Details
Add full markdown rendering for GitHub issue descriptions using a self-contained
MarkdownRenderer control (headings, code fences, lists, blockquotes, tables,
inline bold/italic/code/links). Import GitHub issue comments as TaskNotes with
author attribution and dedup by comment ID. Sync issue timeline events (labeled,
assigned, closed, reopened, milestoned, renamed, cross-referenced) into a new
ActivityLog on tasks, displayed in the detail panel. Add GitHub Projects v2
integration via GraphQL API — sync project boards as PrivStack projects and
link project items to matching synced tasks by source_ref. Extend models with
TaskActivityEvent, GitHubProjectSource, comment/timeline DTOs, and source
tracking fields on ProjectItem. Add project source management to the GitHub
sync overlay with picker, sync, and remove controls.
Migrate Email plugin OAuth to shell-level connections
Details
Delete plugin-owned OAuth infrastructure (OAuthBrowserFlow, EmailOAuthService,
OAuthProviderConfig) — OAuth is now managed at the shell level via Settings →
Connections. Update EmailCredentials to use ConnectionId referencing shell
connections instead of storing tokens directly. Update ImapSyncService and
SmtpSendService to retrieve access tokens via IConnectionService.GetAccessTokenByIdAsync
instead of EmailOAuthService.EnsureValidTokenAsync. Update AccountSetupViewModel
to query existing shell connections rather than launching its own OAuth flow —
users must connect Google/Microsoft in Settings first. Add automatic migration
in EmailPlugin.OnInitializeAsync that detects legacy OAuth accounts (with
RefreshToken but no ConnectionId) and imports them into shell connections via
IConnectionService.ImportConnectionAsync. Remove EmailOAuthService dependency
from all ViewModels. Plugin version bumped to 1.27.0.
Add GitHub Issues sync for Tasks plugin
Details
Implements bidirectional sync between GitHub issues and PrivStack tasks.
Users can add GitHub repositories as issue sources, configure per-repo
filters (assignee, labels, milestone), and choose between bidirectional
or pull-only sync modes.
New files:
- Models: GitHubIssueSource (source config), GitHubIssueModels (API DTOs)
- Services: GitHubIssueApiClient (REST API), GitHubIssueSourceService (CRUD),
GitHubIssueFieldMapper (status/priority mapping), GitHubIssueSyncService
(pull/push orchestration with last-write-wins conflict resolution)
- Controls: ModalOverlay (reusable overlay pattern for Tasks plugin)
- ViewModels: GitHubIssueSourcesViewModel (3-state overlay: source list,
repo picker, filter config)
- Views: GitHubIssueSourcesOverlay (AXAML overlay UI)
Modified files:
- TaskItem.cs: Added source_type, source_id, source_ref, source_etag fields
with IsGitHubIssue and GitHubUrl computed properties
- TasksPlugin.cs: Added github_issue_source entity schema, source tracking
indexed fields, service initialization with IConnectionService guard
- TasksViewModel.cs: Added GitHub service properties, lazy-init overlay VM,
OpenGitHubIssueSources command
- TasksView.axaml: GitHub button in toolbar, GitHub badge on synced tasks,
overlay placement
- TaskDetailPanel.axaml: GitHub Issue metadata card with issue ref and link
Version: 1.15.1 -> 1.16.0
Replace CalendarDatePicker with MiniCalendarPicker in Tasks
Details
Swaps out Avalonia's default CalendarDatePicker for the new
MiniCalendarPicker from UI.Adaptive in both TasksView (due date)
and TaskDetailPanel (due date, start date, reminder). The new
picker shows a compact mini-calendar popup matching the Calendar
plugin's sidebar style. Binds directly to DateTimeOffset? properties
instead of the DateTime? wrapper properties. Bumps to v1.15.0.
Get notified about new releases