mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-03 02:50:59 +08:00
Previously, the frontend DecisionRecord type was missing the input_prompt field that exists in the backend DecisionLog, causing the input context sent to AI to not be displayed in the UI. Changes: - Add input_prompt field to DecisionRecord interface in both type files - Add collapsible Input Prompt section in DecisionCard component - Display input_prompt before AI Chain of Thought with blue styling - Use same expand/collapse interaction pattern as CoT trace Now users can view both the input context and AI's reasoning process in the decision cards. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
111 lines
2.3 KiB
TypeScript
111 lines
2.3 KiB
TypeScript
export interface SystemStatus {
|
|
trader_id: string;
|
|
trader_name: string;
|
|
ai_model: string;
|
|
is_running: boolean;
|
|
start_time: string;
|
|
runtime_minutes: number;
|
|
call_count: number;
|
|
initial_balance: number;
|
|
scan_interval: string;
|
|
stop_until: string;
|
|
last_reset_time: string;
|
|
ai_provider: string;
|
|
}
|
|
|
|
export interface AccountInfo {
|
|
total_equity: number;
|
|
wallet_balance: number;
|
|
unrealized_profit: number;
|
|
available_balance: number;
|
|
total_pnl: number;
|
|
total_pnl_pct: number;
|
|
total_unrealized_pnl: number;
|
|
initial_balance: number;
|
|
daily_pnl: number;
|
|
position_count: number;
|
|
margin_used: number;
|
|
margin_used_pct: number;
|
|
}
|
|
|
|
export interface Position {
|
|
symbol: string;
|
|
side: string;
|
|
entry_price: number;
|
|
mark_price: number;
|
|
quantity: number;
|
|
leverage: number;
|
|
unrealized_pnl: number;
|
|
unrealized_pnl_pct: number;
|
|
liquidation_price: number;
|
|
margin_used: number;
|
|
}
|
|
|
|
export interface DecisionAction {
|
|
action: string;
|
|
symbol: string;
|
|
quantity: number;
|
|
leverage: number;
|
|
price: number;
|
|
order_id: number;
|
|
timestamp: string;
|
|
success: boolean;
|
|
error?: string;
|
|
}
|
|
|
|
export interface AccountSnapshot {
|
|
total_balance: number;
|
|
available_balance: number;
|
|
total_unrealized_profit: number;
|
|
position_count: number;
|
|
margin_used_pct: number;
|
|
}
|
|
|
|
export interface DecisionRecord {
|
|
timestamp: string;
|
|
cycle_number: number;
|
|
input_prompt: string;
|
|
cot_trace: string;
|
|
decision_json: string;
|
|
account_state: AccountSnapshot;
|
|
positions: any[];
|
|
candidate_coins: string[];
|
|
decisions: DecisionAction[];
|
|
execution_log: string[];
|
|
success: boolean;
|
|
error_message?: string;
|
|
}
|
|
|
|
export interface Statistics {
|
|
total_cycles: number;
|
|
successful_cycles: number;
|
|
failed_cycles: number;
|
|
total_open_positions: number;
|
|
total_close_positions: number;
|
|
}
|
|
|
|
// 新增:竞赛相关类型
|
|
export interface TraderInfo {
|
|
trader_id: string;
|
|
trader_name: string;
|
|
ai_model: string;
|
|
}
|
|
|
|
export interface CompetitionTraderData {
|
|
trader_id: string;
|
|
trader_name: string;
|
|
ai_model: string;
|
|
total_equity: number;
|
|
total_pnl: number;
|
|
total_pnl_pct: number;
|
|
position_count: number;
|
|
margin_used_pct: number;
|
|
call_count: number;
|
|
is_running: boolean;
|
|
}
|
|
|
|
export interface CompetitionData {
|
|
traders: CompetitionTraderData[];
|
|
count: number;
|
|
}
|