- eval runner: add retry logic (2 attempts) for transient connection drops
- gs-001: accept 'percent' as well as '%' (LLM formatting variance)
- gs-002: use must_contain_one_of for ticker/company name variance
- gs-008/sc-014: fix expected_tools for conditionally-triggered compliance
- graph.py: route 'health check'/'full report' queries to compliance path
so compliance_check always runs for full portfolio report requests
Co-authored-by: Cursor <cursoragent@cursor.com>
Source tags [tool_result_id] were appearing after every individual figure,
making responses unreadable. Rules 1 and 10 in SYSTEM_PROMPT and the
format_node user prompt now enforce one citation per sentence placed at
the end, not inline after each value.
Co-authored-by: Cursor <cursoragent@cursor.com>
Raised bottom from 1.5rem to 5.5rem and reduced size slightly so the
Ask AI button no longer overlaps the Add Account / Add Transaction FABs
that Ghostfolio renders at the bottom-right of the screen.
Co-authored-by: Cursor <cursoragent@cursor.com>
When the agent returns an empty-portfolio response (e.g. after a new
Google OAuth sign-in), a blue banner appears offering to load 18 demo
activities. Clicking 'Load demo data' calls POST /agent/seed with the
user's own bearer token so the seeded data belongs to their account.
Also adds the /seed URL construction in the component constructor.
Co-authored-by: Cursor <cursoragent@cursor.com>
Injects TokenStorageService and passes the active session token in
every /agent/chat request body as bearer_token. The agent now serves
each user's own portfolio data. Unauthenticated visitors still get the
shared demo data via the agent's env-var fallback.
Co-authored-by: Cursor <cursoragent@cursor.com>
* 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