Remove hardcoded OAuth secrets and bump to v1.58.7
Details
Move all OAuth client credentials (Google, Microsoft, GitHub) to
environment-variable-only resolution with no compiled-in fallback
defaults. This prevents GitHub push protection violations and ensures
secrets never appear in source code. Added .env.example documenting
required variables. App logs warnings on startup if env vars are missing.
Add Habits plugin label to ReminderSchedulerService
Details
Map "privstack.habits" → "Habits & Goals" in the notification label
switch so habit reminders display with the correct plugin name.
Add cross-block drag selection escape detection to RichTextEditor
Details
RichTextEditor now detects when a drag selection moves outside its vertical
bounds (pointer Y < 0 or > Bounds.Height) and fires a new DragSelectionEscaped
event with the block ID and escape direction (+1 below, -1 above). On escape,
the RTE selects text from anchor to the corresponding edge, releases pointer
capture, and stops its internal drag — allowing the parent (NotesView) to take
over cross-block selection.
New public API:
- DragSelectionEscaped event (Action<string, int>)
- SelectToEnd() / SelectToStart() — select from anchor to document edge
- ReleaseDragCapture() — externally end drag state
- SelectionAnchor property (int?) — expose caret anchor position
- HitTestPoint(Point) — char-index hit-test for external callers
Version bump: 1.59.1 → 1.59.2
Persist intent suggestions across app restarts
Details
IntentEngine now saves/loads suggestions to intent-suggestions.json in the
app data directory. Suggestions older than 7 days are auto-expired on load.
Persistence is debounced (2s) to avoid excessive I/O. On dispose, a final
flush ensures no suggestions are lost on clean shutdown.
The AI tray already reads PendingSuggestions on init, so persisted
suggestions appear automatically when the app restarts.
Desktop version 1.58.5 -> 1.58.6.
Include entity context in AI intent prompts and emit IntentExecutedMessage
Details
IntentPromptBuilder.BuildUserPrompt now includes the source entity type
and title so the AI generates contextual titles (e.g. "Dr Hotch Appointment"
instead of "Rescheduled Meeting"). System prompt updated to instruct the AI
to use source context when available.
IntentEngine.ExecuteAsync now broadcasts IntentExecutedMessage after
successful execution so source plugins can create reverse links.
Desktop version 1.58.4 -> 1.58.5.
Get notified about new releases