UTA management overhaul: health monitoring, connection validation, UI redesign#80
Merged
luokerenx4 merged 7 commits intomasterfrom Mar 22, 2026
Merged
UTA management overhaul: health monitoring, connection validation, UI redesign#80luokerenx4 merged 7 commits intomasterfrom
luokerenx4 merged 7 commits intomasterfrom
Conversation
…keys) Introduce BrokerError with code/permanent fields. UTA now detects permanent errors (CONFIG, AUTH) and marks the account as disabled instead of retrying forever. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…lth monitoring Backend: - Remove migrateLegacyTradingConfig() and crypto.json/securities.json fallback - Seed empty platforms.json/accounts.json on first run (accounts via UI wizard) - Skip account creation when apiKey is missing (safety net in main.ts) - Add onHealthChange callback to UTA, emit account.health events via eventLog - Move eventLog creation before trading init for proper ordering Frontend: - Add BrokerHealthInfo/AccountSummary types - New useAccountHealth hook (initial fetch + SSE subscription) - TradingPage: add Status column with HealthBadge (connected/unstable/reconnecting/disabled) - PortfolioPage: distinguish disabled (grey) from offline (red reconnecting) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Project resource templates shouldn't live inside the runtime data directory — makes it awkward to clear data/ without losing defaults. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CcxtBroker now throws BrokerConfigError on init() without credentials (same as AlpacaBroker) instead of silently entering read-only mode - Remove readOnly field and ensureWritable() — UTA = trading account = must have keys - Wizard Step 3: API Key/Secret now required, Create button disabled when empty - Auto-reconnect after account creation Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace AccountsTable with AccountCard list (health badge, subtitle) - Merge wizard from 3 steps to 2 (platform+connection, then credentials) - Empty state with centered CTA card - EditDialog: health badge in header, show/hide credentials toggle - Upgrade all buttons to standard size, DeleteButton uses btn-danger - Widen dialogs to 560px, increase padding throughout - Section.title accepts ReactNode for inline controls Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- UTA: expose waitForConnect() — resolves after broker.init() + getAccount() - reconnectAccount: await waitForConnect() before returning success - Frontend: await reconnect result in wizard, show error on failure Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- New POST /test-connection API: validates broker.init() + getAccount() with a temporary broker before writing anything to config - Wizard flow: test-connection → success → save config → create UTA (failure shows error in wizard, config untouched) - Exchange field changed from free text to dropdown (14 common exchanges) - Remove dead Market Type selector (not used by backend) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
permanentflag — UTA stops recovery for permanent errors instead of retrying foreverPOST /test-connectionAPI verifiesbroker.init()+getAccount()before persisting config — bad credentials never touch config filesdata/default/→default/: Project templates out of runtime data directoryTest plan
pnpm build+pnpm testpass (879 tests green)🤖 Generated with Claude Code