Replace mat-icon ligatures (thumb_up/thumb_down) with emoji since
the Material Icons font is not loaded in the app. Remove unused
MatIconModule import.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add NewsArticle Prisma model with Finnhub API integration and PostgreSQL storage
- Create NestJS news module (service, controller, module) with CRUD endpoints
- Add get_portfolio_news AI agent tool wrapping NewsService
- Expand eval suite from 55 to 58 test cases with news-specific scenarios
- Update all references from 8 to 9 tools and 55 to 58 test cases across docs
- Add AI Agent section to project README
- Fix Array<T> lint errors in eval.ts and verification.ts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Switch LLM from Claude Sonnet to Claude Haiku 3.5 (claude-haiku-4-5-20251001),
reducing avg eval latency from ~7s to 3.8s with 100% pass rate (55/55)
- Add streaming endpoint (POST /ai/agent/stream) using Vercel AI SDK streamText()
with SSE, so tokens render progressively in the chat UI
- Update Angular chat component to consume SSE via fetch + ReadableStream reader
- Add user feedback (thumbs up/down) buttons on assistant messages that POST to
new /ai/feedback endpoint and log scores to Langfuse via REST API
- Add delayed loadCurrencies() call on startup to ensure exchange rates are
populated after data-gathering queue processes on fresh deployments
- Fix eval suite dotenv loading so LLM-as-judge can read ANTHROPIC_API_KEY
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The period performance tool was falling back to cost basis when the
local MarketData table lacked historical prices at the period start,
making YTD numbers identical to all-time. Now uses
DataProviderService.getHistoricalRaw() to fetch prices directly from
Yahoo Finance with a 7-day lookback window, ensuring accurate
start-of-period valuations regardless of local DB state.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The LLM now knows the current date so it can correctly interpret
relative time references like "this year" or "this month".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The agent can now answer period-specific performance questions (YTD,
MTD, 1Y, etc.) instead of always returning all-time data. Uses
historical MarketData prices to compute start-of-period valuations
and calculates period gain adjusted for cash flows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rewrite performance tool to compute returns directly from orders +
live quotes, bypassing broken portfolio snapshot calculator
- Add OnApplicationBootstrap hook to CronService to trigger data
gathering (gather7Days) automatically when the server starts
- Update eval results (10/10 pass)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(lib): update displayedColumns type
* feat(lib): use input function for holdings
* feat(lib): make isLoading a computed signal
* feat(lib): make paginator and sort viewchild signals
* feat(lib): make dataSource a computed signal
* feat(lib): use input function for hasPermission fields
* feat(lib): make displayedColumns a computed signal
* feat(lib): remove ngOnChanges
* feat(lib): update types in holdings mock
* fix(lib): update imports for treemap chart component
* fix(lib): remove unused routeQueryParams variable
* fix(lib): prevent creating new table data source every time the signal changes
* fix(lib): remove unused unsubscribe subject as there is no observable subscription
* fix(lib): revert changes to dataSource in the template
* fix(lib): changed locale to input signal
* fix(lib): change ignoreAssetSubClasses to protected
* fix(lib): create canShowDetails function
* fix(lib): remove unused baseCurrency and deviceType inputs
* fix(lib): remove unused baseCurrency and deviceType inputs from stories
* feat(lib): make constructor as public
* fix(lib): prevent table data source to be created every time
* fix(lib): remove unused unsubscribeSubject variable
* fix(lib): change to protected methods
* feat(lib): change locale to signal input
* feat(lib): remove unused deviceType input
* feat(lib): change hasPermissionToOpenDetails to signal input
* feat(lib): change showFooter to signal input
* feat(lib): change activitiesCount to signal input
* feat(lib): change baseCurrency to signal input
* feat(lib): change totalBalanceInBaseCurrency to signal input
* feat(lib): change totalValueInBaseCurrency to signal input
* feat(lib): change outputs to signal outputs
* Adapt accounts and tags of assistant in impersonation mode
* Update changelog
---------
Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com>