feat: CCXT dynamic credentials + snapshot management + wizard refactor#117
Merged
luokerenx4 merged 3 commits intomasterfrom Apr 10, 2026
Merged
feat: CCXT dynamic credentials + snapshot management + wizard refactor#117luokerenx4 merged 3 commits intomasterfrom
luokerenx4 merged 3 commits intomasterfrom
Conversation
Controlled <select> with no matching value caused React state to stay empty while browser visually displayed the first option — user thinks it's selected but onChange never fires, leading to Zod validation failure on submit. Closes #92 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- SnapshotStore.deleteByTimestamp(): chunk-aware delete with index update - SnapshotService.deleteSnapshot() + DELETE API endpoint - Dev page Snapshots tab: browse per-account, expand details, delete with confirm - CLAUDE.md: add tsc --noEmit pre-commit rule, git fetch before PR rule Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fixes inability to configure wallet-based exchanges like Hyperliquid: CcxtBroker previously hardcoded apiKey + secret + password fields, but each CCXT exchange declares its own requiredCredentials map (10 standard fields including walletAddress, privateKey, uid, twofa, etc.). Backend - CcxtBroker.configSchema accepts all 10 CCXT credential fields, with legacy `apiSecret` aliased to `secret` for back-compat - Constructor passes all set fields through to ccxt[exchange]() generically - init() validates via the exchange's own checkRequiredCredentials() and reports which fields are missing - New endpoints: GET /ccxt/exchanges (list all CCXT-supported exchanges) and GET /ccxt/exchanges/:name/credentials (read requiredCredentials) - BrokerRegistryEntry gets a setupGuide field; ccxt/alpaca/ibkr each have a multi-paragraph guide explaining what they are, how to get credentials, and prerequisites Frontend - TradingPage CreateWizard refactored from two-step to single-page form (consistent with EditDialog and other config dialogs); deleted StepIndicator and the sensitive/non-sensitive field split that put Hyperliquid's walletAddress and privateKey on different pages - Selecting a platform shows the broker's setupGuide as a description block before the configuration fields - For CCXT: exchange dropdown is populated dynamically from /ccxt/exchanges, and credential fields are loaded based on the selected exchange via /ccxt/exchanges/:name/credentials - EditDialog also wired with dynamic CCXT credential fetching - Bump version to 0.9.0-beta.11 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
Big quality-of-life batch covering broker configuration, snapshot management, and account creation UX.
CCXT dynamic credentials (Hyperliquid support)
requiredCredentialsmap at runtime instead of hardcoding apiKey + secret + passwordwalletAddress+privateKey(Hyperliquid, dYdX),password(OKX passphrase),uid,twofa, etc.GET /ccxt/exchangesandGET /ccxt/exchanges/:name/credentialsSnapshot management
New Account wizard refactor
CLAUDE.md
Bumps to `0.9.0-beta.11`.
Test plan
🤖 Generated with Claude Code