The REAL_ESTATE asset class exists but has an empty subclass array,
making it impossible to categorize different types of real estate
investments. This adds three subclasses: RENTAL_PROPERTY,
COMMERCIAL_PROPERTY, and SMALL_BUSINESS. These work with the existing
MANUAL DataSource for user-entered valuations.
- Agent chat: markdown rendering, feedback buttons, sidebar search, category tabs, admin panel with display toggles
- Report page: /report route with Angular lazy loading and auth guard
- Eval pipeline: snapshot generator + deterministic checker (12/12 golden sets passing)
- Pre-commit hook: runs eval:check against saved snapshots (no LLM, milliseconds)
- GitHub Actions: agent-eval.yml CI workflow runs same check on PRs to main
- Golden data tuned to match actual agent response patterns
Static imports fail TS compilation since packages lack type declarations.
Use require() with try/catch and explicitly install @langfuse/otel and
@opentelemetry/sdk-node in the dist directory during Docker build.
- Switch to static imports for @langfuse/otel and @opentelemetry/sdk-node
so webpack includes them in the production bundle
- Redesign agent chat UI: black + teal color scheme matching main app
- Add animated ghostfolio_squash.webm video as logo in header and welcome
- Add /agent/video endpoint to serve the animation
- Update Dockerfile to copy video asset to production build
Add OpenTelemetry-based Langfuse tracing to the AI agent. Every
generateText call now emits spans with tool calls, token usage, and
metadata (userId, conversationId) to Langfuse for monitoring.
Add a new agent module to Ghostfolio with 3 tools (portfolio_summary,
market_data, transaction_history) using Vercel AI SDK + OpenAI. Includes
a chat UI served at /api/v1/agent/ui and an "Agent" link in the main nav.
* fix(lib): resolve typescript errors
* feat(lib): migrate to takeUntilDestroyed
* fix(lib): resolve type errors
* feat(lib): implement output signal
* feat(lib): clean up variables
* fix(lib): resolve input is deprecated
* feat(lib): implement input signal on placeholder
* feat(lib): implement input signal on isLoading
* fix(lib): add type annotations for date adapter
* fix(lib): handle form value possibly null
* fix(lint): use arrow fn for validators
* fix(lib): accounts table typings
* fix(lib): remove unsubscribeSubject due to lack of observable
* fix(lib): remove validators variable
* feat(lib): implement inject functions
* feat(lib): make locale an input signal
* feat(lib): make showActions an input signal
* feat(lib): make accountId an input signal
* feat(lib): make accountCurrency an input signal
* feat(lib): make accountBalances an input signal
* feat(lib): make sort a viewChild signal
* feat(lib): implement isNil
* feat(lib): resolve ts errors
* feat(lib): make days protected and readonly
* feat(lib): create formatDay helper function
* fix(lib): remove unused eslint-disable
* feat(lib): change locale to input signal
* feat(lib): change defaultDateFormat to computed signal
* feat(lib): change deviceType to computed signal
* feat(lib): change marketData to input signal
* feat(lib): change historicalDataItems to computed signal
* feat(nx): run ui test
* feat(lib): update days to improve readability
* feat(nx): revert test changes
* fix(lib): change logic for locale
* fix(lib): disable mutating the injected readonly data
* fix(lib): implement takeUntilDestroyed
* fix(lib): implement takeUntilDestroyed
* fix(lib): organize imports