- Added an optional status parameter to the GetStrategiesPaginated method, defaulting to Running if not provided.
- Updated the bot retrieval logic to apply the status filter directly, simplifying the filtering process and ensuring accurate bot status management.
- Removed the private _currentBalance field and replaced it with direct access to Config.BotTradingBalance.
- Added OnBalanceUpdatedCallback to TradingBotBase for immediate synchronization and database saving when the balance is updated.
- Updated LiveTradingBotGrain to set the callback for balance updates, ensuring accurate state management.
- Modified PostgreSqlBotRepository to save the updated bot trading balance during entity updates.
- Changed the ProfitAndLoss property assignment from item.Pnl to item.NetPnL in both BotController and DataController, ensuring consistency in profit and loss reporting across the application.
- Added logic to confirm the existence of opening swaps in exchange history before marking positions as filled, addressing potential failures in on-chain transactions.
- Implemented checks for very low token balances and adjusted position statuses accordingly, ensuring accurate tracking and management of positions.
- Improved logging for failed swaps to provide clearer insights into transaction issues and position management.
- Added logic to check for very low token balances (dust) and verify closed positions in exchange history before logging warnings.
- Improved warning logging to avoid redundancy for dust amounts, ensuring accurate tracking of token balance issues.
- Added logic to check if remaining token balances are below $2 USD and verified in exchange history before logging warnings or accepting them as successfully closed.
- Improved logging messages for better clarity on the status of token balances after closing positions and force close attempts, ensuring accurate tracking of transactions.
- Modified the value parameter in the callContract function to convert numeric values to hexadecimal format, ensuring compatibility with contract calls.
- This change enhances the handling of value inputs, improving the robustness of contract interactions.
- Updated sendTokenImpl to estimate gas costs for ETH transfers, ensuring sufficient balance is available for gas fees.
- Implemented gas estimation with fallback mechanisms for gas price and limit, improving reliability of ETH transactions.
- Adjusted the transfer amount based on available balance after accounting for estimated gas costs, providing clearer error messages for insufficient funds.
- Changed progress update message in LlmController from "Sending request to LLM..." to "Thinking..." for better user understanding.
- Updated filtered messages in AiChat component to reflect the new progress update message, ensuring consistency in user experience.
- Updated LlmController to implement a new SSE endpoint for streaming LLM progress updates, utilizing Redis pub/sub for real-time communication.
- Removed SignalR dependencies from AiChatService, replacing them with SSE logic for message streaming.
- Enhanced error handling and logging for Redis interactions, ensuring robust feedback during streaming operations.
- Adjusted request models and methods to accommodate the new streaming architecture, improving clarity and maintainability.
- Added detailed connection options for StackExchange.Redis to improve SignalR backplane reliability.
- Implemented retry logic and connection settings to handle temporary Redis unavailability.
- Updated logging to provide clearer feedback on configuration success or failure, including stack trace information for error handling.
- Ensured fallback to single-instance mode when Redis is not configured, enhancing application resilience.
- Introduced Redis configuration in appsettings.json to enable SignalR backplane functionality.
- Updated Program.cs to conditionally configure SignalR with Redis if a connection string is provided.
- Added Redis connection service registration in ApiBootstrap for distributed scenarios.
- Included necessary package references for StackExchange.Redis and Microsoft.Extensions.Caching.StackExchangeRedis in project files.
- Implemented password masking for Redis connection strings to enhance security.
- Updated GetCurrentCandleForPositionClose method in both FuturesBot and SpotBot to parse the ticker parameter into an enum, enhancing type safety and clarity.
- Adjusted TradingBotBase to use the position's ticker for candle retrieval, ensuring consistency across trading bot implementations.
- Enhanced LlmController to detect and handle redundant tool calls, ensuring efficient processing and preventing unnecessary requests.
- Updated message formatting in GeminiProvider to align with Gemini's expectations, improving the structure of requests sent to the API.
- Improved logging in AiChat component to provide better insights into received responses and fallback mechanisms for empty content.
- Adjusted handling of final responses in AiChat to ensure meaningful content is displayed, enhancing user experience during interactions.
- Added system reminders in LlmController to prevent redundant tool calls and ensure final responses are text-only.
- Updated AiChat component to include a developer mode toggle, allowing users to filter out internal messages during chat interactions.
- Adjusted message handling to improve clarity and user experience, particularly during tool execution and progress updates.
- Modified iteration handling for backtest queries to reflect updated logic for improved performance.
- Introduced a new method in LlmController to generate descriptive messages for tool execution results, improving clarity in progress updates.
- Updated AiChat component to display progress messages in chat history, enhancing user experience during tool execution.
- Refactored progress indicator styling for better visual feedback and readability.
- Adjusted backtest query handling in LlmController to optimize iteration counts based on query type, improving performance and user interaction.
- Enhanced documentation for backtest tools in BacktestMcpTools to clarify usage and parameters, ensuring better understanding for developers.
- Introduced state management for message history, allowing users to navigate through previous messages using the up and down arrow keys.
- Updated input handling to reset history index when the user types a new message, improving user experience.
- Changed the key event handler from 'onKeyPress' to 'onKeyDown' for better control over key events during message input.
- Adjusted appsettings.json to simplify the default model configuration for Gemini integration.
- Added a new endpoint in TradingController to revoke all token approvals for a specified Privy wallet address, with permission checks for user access.
- Implemented the revokeAllApprovals method in TradingService to handle the revocation logic, including error handling and logging.
- Updated IWeb3ProxyService and Web3ProxyService to support revocation requests to the Privy service.
- Introduced a new PrivyRevokeAllApprovalsResponse type for structured responses from the revocation process.
- Enhanced the UI in account tables to allow users to revoke approvals directly from the interface, providing feedback on success or failure.
- Updated appsettings.json to change the default model for Gemini integration.
- Changed the confidence level parameter in AddSignal method calls from Medium to None for both long and short signals in SuperTrendIndicatorBase class.
- This adjustment aims to simplify signal generation logic and may impact trading strategy evaluations.
- Introduced a new type definition for Privy balance response to enhance type safety and clarity in the getWalletBalanceImpl function.
- Updated the makePrivyRequest call to utilize the new PrivyBalanceResponse type, streamlining the handling of balance data.
- This change aims to improve code maintainability and reduce potential errors during balance retrieval processes.
- Added an AbortSignal parameter to the makePrivyRequest function to support request cancellation.
- Improved error handling in makePrivyRequest to preserve detailed error information for better debugging.
- Implemented a fallback mechanism in getWalletBalanceImpl to retrieve wallet balances via direct RPC calls when Privy API fails (e.g., 503 errors).
- Introduced a new getWalletBalanceViaRpc function to handle RPC balance retrieval, including detailed logging and error management.
- Enhanced overall error messaging to provide clearer feedback during balance retrieval processes.
- Increased delay between iterations in LlmController from 500ms to 2000ms to better respect rate limits.
- Added retry logic in LlmController for handling rate limit errors (HTTP 429) with a 10-second wait before retrying.
- Introduced additional delay after tool calls in LlmController to further mitigate rate limit issues.
- Updated GeminiProvider to increase maximum retry attempts from 3 to 5 and base retry delay from 2s to 3s for better handling of rate limits.
- Enhanced logging for rate limit scenarios to provide clearer feedback during API interactions.
- Introduced IServiceScopeFactory to create a scope for background tasks, allowing access to scoped services like ILlmService and IMcpService.
- Enhanced error handling during chat stream processing, providing user-friendly error messages for database connection issues.
- Refactored SendProgressUpdate method to accept hubContext and logger as parameters, improving logging consistency.
- Updated InjectBacktestDetailsFetchingIfNeeded method to utilize scoped services, ensuring accurate backtest detail fetching.
- Improved overall error messaging and logging throughout the LlmController for better user feedback during chat interactions.
- Simplified progress update messages in LlmController by removing iteration details for clarity.
- Enhanced the visual appearance of the AiChat component by adjusting opacity levels for progress indicators and text elements, improving overall readability and user experience.
- Updated styling for tool name and error messages to ensure consistent visual feedback during chat interactions.
- Implemented SignalR integration for real-time chat streaming in LlmController, allowing for progress updates during LLM interactions.
- Refactored AiChat component to handle streaming responses and display progress updates, including iteration status and tool call results.
- Introduced a new ProgressIndicator component to visually represent the current state of chat processing.
- Updated AiChatService to manage SignalR connections and handle streaming updates effectively, improving user experience during chat sessions.
- Enhanced error handling and messaging for better feedback during chat interactions.
- Added a new ChatStream endpoint to handle real-time chat interactions with LLMs, providing streaming progress updates.
- Introduced LlmProgressUpdate class to encapsulate various types of progress updates during chat processing, including iteration starts, tool calls, and final responses.
- Enhanced error handling and user authentication checks within the streaming process to ensure robust interaction.
- Refactored tool execution logic to safely handle tool calls and provide detailed feedback on execution status and results.
- Added a retry policy with exponential backoff for handling transient errors and rate limits in the Gemini API provider.
- Introduced a delay between iterations in LlmController to prevent rapid bursts and avoid hitting rate limits.
- Enhanced logging for retries and error handling to improve visibility into API interactions and rate limiting behavior.
- Updated the calculation of bots allocation USD value to directly sum BotTradingBalance from Bot entities, eliminating the need for additional service calls to fetch bot configurations.
- This change aims to prevent potential deadlocks and improve performance by reducing unnecessary asynchronous calls.
- Reduced the MaxConcurrentPerInstance value from 60 to 30 to optimize resource allocation and improve system performance under load.
- This change aims to enhance stability and responsiveness of the worker backtest compute process.
- Introduced a new buffer amount to prevent overdraw when requested swap amounts exceed wallet balances, enhancing balance management.
- Updated swap logic to apply the buffer conditionally, ensuring safe transaction amounts are used during swaps.
- Improved logging to provide warnings when requested amounts exceed available balances, enhancing user feedback and transparency.
- Implemented logic to calculate broker closing price from PNL when the price is zero or invalid, improving accuracy in trade reconciliation.
- Added detailed logging for calculated closing prices, including entry price, PNL, and leverage, to enhance visibility into trading performance.
- Updated handling of take profit and stop loss updates based on valid closing prices, ensuring more reliable position management.
- Added logic to calculate broker PNL when it is zero or invalid, using actual prices for more accurate profit and loss reporting.
- Improved logging to provide detailed information when PNL is calculated, enhancing visibility into trading performance.
- Updated documentation guidelines to discourage unnecessary .md files unless explicitly requested by users.
- Updated token retrieval logic to ensure non-synthetic tokens are prioritized for swaps, improving accuracy in token selection.
- Added detailed logging for token data, including assetSymbol and baseSymbol, to enhance visibility during token lookups.
- Introduced a new test case to validate the successful swap of USDC to BTC, confirming the resolution to the non-synthetic WBTC token.
- Improved error handling for token lookups, providing clearer feedback when a valid token symbol is not found.
- Introduced a new method to verify the execution of opening swaps in history, ensuring positions are only marked as filled after confirming successful swaps.
- Improved logging to provide detailed feedback on swap confirmation status, including retries for pending swaps and error handling for verification failures.
- Adjusted position status update logic to enhance robustness in managing filled positions, preventing premature status changes.
- Introduced a new variable to capture the closing price based on filled stop loss or take profit trades, improving clarity in the closing message.
- Enhanced message formatting to include the closing price when applicable, providing better feedback on trade outcomes.
- Streamlined conditional checks for filled trades to ensure accurate reporting of closing prices.
- Updated balance checks to utilize user-defined thresholds for minimum trading and swap balances, enhancing flexibility.
- Improved gas fee validation by incorporating user settings, allowing for more personalized transaction management.
- Enhanced logging to provide clearer messages regarding balance sufficiency and gas fee limits, improving user feedback during operations.
- Introduced logic to check if the opening swap was canceled by the broker, marking positions as canceled when necessary.
- Adjusted orphaned balance thresholds for ETH and other tokens to improve balance management.
- Enhanced logging to provide detailed information on swap status, including warnings for canceled swaps and their implications on position management.
- Added a new method to verify swap execution status, improving the robustness of position handling in SpotBot.
- Added logic to wait for ETH→USDC swap to settle before refreshing the USDC balance, preventing premature bot stoppage due to low balance.
- Implemented balance verification and cache invalidation for accurate balance checks post-swap.
- Improved logging to indicate the status of balance refresh and cache invalidation after closing a position.
- Adjusted max dust amount threshold based on token type: increased for ETH to account for gas reserves, while maintaining a lower threshold for other tokens.
- Enhanced logging to clarify when a position is closed, indicating if the remaining balance is expected for gas reserves or if it was successfully closed.
- Increased slippage tolerance from 0.6% to 0.7% to account for gas reserves.
- Improved logging to provide detailed information when adjusting position quantities due to slippage or when retaining original quantities.
- Updated CloseSpotPositionCommandHandler to use the position's opened quantity instead of the entire wallet balance, ensuring gas fees are preserved.
- Adjusted Web3ProxyService settings for retry attempts and operation timeouts to improve performance.
- Enhanced swap token implementation to handle native tokens correctly and increased operation timeout for better reliability.
- Added try-catch block around position closing logic to handle potential failures gracefully.
- Enhanced logging to provide detailed warnings when closing a position fails, ensuring the position status remains unchanged for retry on the next cycle.
- Re-threw exceptions for unhandled cases to inform callers of operation failures, improving overall robustness of the SpotBot.
- Added a new method in IWeb3ProxyService to retrieve token balances directly from the blockchain, ensuring accurate decimal handling.
- Updated ExchangeService to utilize the new on-chain balance method, replacing the previous balance retrieval logic.
- Enhanced SpotBot logging to provide clearer warnings when token balances are significantly lower than expected, and to log cases of excess token balances.
- Introduced a new API endpoint for fetching token balances on-chain, improving the overall functionality of the service.
- Updated SpotBot to log detailed information when detecting small token balances, indicating potential gas reserves or dust.
- Introduced a minimum threshold for orphaned positions, improving decision-making on whether to open new positions.
- Enhanced logging for potential zombie positions, providing clearer warnings when token balances are missing.
- Improved force close logging to clarify the status of remaining balances after attempts to clear them.
- Updated FuturesBot logging to include a prefix indicating the bot type for better clarity in logs.
- Refactored signal retrieval code for improved readability by formatting the method call across multiple lines.
- Minor whitespace adjustments to enhance code consistency.
- Updated SpotBot to log detailed information when a closing position is found in the history, including position direction and dates.
- Enhanced logging for scenarios where no closing position is found or when position history is unavailable, improving clarity on position status.
- Removed outdated log messages to streamline the logging process.
- Added a new method to force close any remaining balance in a trading position if it was not fully closed.
- Enhanced logging to provide detailed information during the force close process, including current price checks and retry attempts.
- Implemented error handling to manage potential failures during the force close operation, ensuring manual intervention is flagged when necessary.
- Changed the default LLM provider for BYOK from Claude to Gemini.
- Updated the provider selection priority to Gemini > OpenAI > Claude for improved service efficiency.
- Removed redundant gemini provider check from the SelectProvider method to streamline the logic.
- Expanded system message to include a comprehensive critical analysis workflow for data retrieval and analysis.
- Added specific guidelines for retrieving complete data and providing in-depth analysis for backtests, bundles, and indicators.
- Emphasized the importance of proactive engagement and multiple tool iterations to ensure thorough responses.
- Updated tool usage instructions to improve clarity and effectiveness in user interactions.