Overhaul Finance plugin architecture and bump to v1.1.0
Details
Major rewrite of the Finance plugin to align with PrivStack SDK patterns
and the architectural specification. Key changes:
- Fix ViewModels to inherit ViewModelBase instead of raw ObservableObject
- Delete empty Class1.cs template file
- Add proper async lifecycle (InitializeAsync) instead of fire-and-forget
- Implement 7 capability interfaces as partial classes: IGraphDataProvider,
ILinkableItemProvider, IDataMetricsProvider, IDeepLinkTarget,
IIndexableContentProvider, ISeedDataProvider, IPluginDataSourceProvider
- Register capabilities in OnInitializeAsync via Host.Capabilities
- Add Budget entity with BudgetMethodologyType (ZeroBased/Envelope)
- Replace boolean cleared flags with ClearedStatus enum (Uncleared/Cleared/Reconciled)
- Add RolloverBehavior enum (StrictReset/PositiveCarryover/NegativeCarryover)
- Add missing finance_category_group and finance_budget entity schemas
- Fix BudgetService income detection to use Income account types
- Implement recursive envelope rollover in GetCategoryBalancesAsync
- Fix TransactionViewModel.Amount to show account-specific split amount
- Add Jaro-Winkler + Token Jaccard similarity to ReconciliationService
- Add reference ID scoring (10% weight) and one-to-many subset sum matching
- Normalize payee strings (remove hyphens, case-insensitive)
- Add QIF parser with flexible date format detection
- Rewrite CSV parser with quoted field handling, delimiter auto-detection,
running balance column exclusion, and debit/credit column splitting
- Fix IngestionService to register all parsers (OFX, QIF, CSV)
- Replace hardcoded XAML colors with DynamicResource tokens
- Rewrite CurrencyBox as proper TemplatedControl with StyledProperty bindings
- Fix TBB banner to display formatted currency string
- Add seed data provider with sample accounts, categories, and transactions
- Remove duplicate MockSdk from TestRunner, delete empty UnitTest1.cs
- Add comprehensive tests for parsers, reconciliation, and balance calculations
Fix Habits plugin compliance gaps and bump to v1.2.0
Details
Comprehensive audit and fix for full plugin compliance:
- Add 5 missing capability registrations in OnInitializeAsync (IGraphDataProvider,
IIntentProvider, IIndexableContentProvider, IQuickActionProvider, ISeedDataProvider)
- Fix GoalDetailPanel $parent binding crash: replace with Tag+Click handler pattern
- Wire goal detail persistence: Status/Priority ComboBox SelectionChanged handlers,
Progress Slider PointerReleased handler, centralized PersistGoal()
- Add reminder_time to habit entity schema indexed fields
- Add async methods to all 4 services (UpdateAsync, DeleteAsync, CreateAsync)
- Add seed progress logging to HabitsSeedService
- Refresh DetailEntries after ToggleHabitCompletion and LogNumericValue
- Version bump 1.1.0 → 1.2.0 (csproj + PluginMetadata synced)
Update Notes AI pipeline for nested blocks and column layouts
Details
ExtractBlockText now recurses into PageBlock.Children and handles
ColumnLayoutBlock, with dedicated helpers for bullet, numbered, and
task list ChildBlocks extraction. InsertBlockRelative replaced with
InsertBlocksRelative which parses AI content through MarkdownBlockParser
to create structured blocks (lists, headings, code, etc.) instead of
plain paragraphs. CaptureBlockText uses ExtractBlockText for full
block-type coverage. Undo handler supports multi-block removal via
semicolon-separated inserted block IDs. Version bump to 1.61.0.
Fix runtime crash: replace $parent type-cast bindings with Click handlers
Details
The $parent[UserControl].((vm:HabitsViewModel)DataContext) binding pattern
causes a runtime ArgumentException because the XAML type resolver cannot
resolve the vm: namespace prefix inside DataTemplate binding expressions.
Switched to Tag+Click handler pattern matching existing plugins.
Add Habits & Goals plugin: models, services, views, viewmodels, capabilities
Details
Complete implementation of the privstack.habits plugin including:
- Entity models (HabitItem, GoalItem, HabitEntry, GoalMilestone, HabitCategory) with
JSON serialization, computed properties, and frequency configuration
- Service layer (HabitService, GoalService, HabitEntryService, CategoryService) as thin
SDK wrappers with sync + async CRUD operations
- Analytics services (StreakCalculator, HabitAnalyticsService) for streak computation,
heatmap data, trend lines, weekly comparisons, and category breakdowns
- Seed data service generating 6 categories, 10 habits with 30-90 days of historical
entries, and 4 goals with milestones
- Main HabitsViewModel with dashboard/habits/goals/analytics view routing, search with
300ms debounce, CRUD commands, and partial classes for dashboard and analytics state
- 7 AXAML views: HabitsView shell, DashboardPanel, HabitsListPanel, GoalsListPanel,
HabitDetailPanel, GoalDetailPanel, AnalyticsPanel — all using compiled bindings
- 5 capability partial classes: IGraphDataProvider, IPluginDataSourceProvider,
IIntentProvider (3 intents), IQuickActionProvider (Cmd+H quick log),
IIndexableContentProvider
- QuickLogHabitForm fix: decimal/double cast for NumericUpDown compatibility
- Converters: StringToColor, ProgressToWidth, BoolToOpacity, FrequencyDisplay
Get notified about new releases