Commit Graph

533 Commits

Author SHA1 Message Date
ZhouYongyou 2ac48e20a4 refactor(crypto): simplify to local encryption only (remove KMS)
## 🎯 簡化方案(社區友好)
### 移除雲端 KMS
-  刪除 crypto/aliyun_kms.go
-  不包含 GCP KMS
-  僅保留本地 AES-256-GCM 加密
### 更新 SQLite 驅動
-  modernc.org/sqlite(純 Go,無 CGO)
-  與上游保持一致
## 📦 保留核心功能
 crypto/encryption.go        - RSA + AES 加密
 crypto/secure_storage.go    - 數據庫加密層
 api/crypto_handler.go       - API 端點
 web/src/lib/crypto.ts       - 前端加密
 scripts/migrate_encryption.go - 數據遷移
## 🚀 部署方式
```bash
# 僅需一個環境變量
export NOFX_MASTER_KEY=$(openssl rand -base64 32)
go run main.go
```
##  優點
-  零雲服務依賴
-  簡單易部署
-  適合社區用戶
-  保持核心安全功能
2025-11-06 23:58:27 +08:00
ZhouYongyou feeaa14050 feat(security): add end-to-end encryption for sensitive data
## Summary
Add comprehensive encryption system to protect private keys and API secrets.
## Core Components
- `crypto/encryption.go`: RSA-4096 + AES-256-GCM encryption manager
- `crypto/secure_storage.go`: Database encryption layer + audit logs
- `crypto/aliyun_kms.go`: Optional Aliyun KMS integration
- `api/crypto_handler.go`: Encryption API endpoints
- `web/src/lib/crypto.ts`: Frontend two-stage encryption
- `scripts/migrate_encryption.go`: Data migration tool
- `deploy_encryption.sh`: One-click deployment
## Security Architecture
```
Frontend: Two-stage input + clipboard obfuscation
    ↓
Transport: RSA-4096 + AES-256-GCM hybrid encryption
    ↓
Storage: Database encryption + audit logs
```
## Features
 Zero breaking changes (backward compatible)
 Automatic migration of existing data
 <25ms overhead per operation
 Complete audit trail
 Optional cloud KMS support
## Migration
```bash
./deploy_encryption.sh  # 5 minutes, zero downtime
```
## Testing
```bash
go test ./crypto -v
```
Related-To: security-enhancement
2025-11-06 23:55:33 +08:00
Lawrence Liu 8dc543b1cf fix(web): 修正 FAQ 翻译文件中的错误信息 (#552)
- 删除 OKX 虚假支持声明(后端未实现)
- 补充 Aster DEX 的 API 配置说明
- 修正测试网说明为暂时不支持
2025-11-06 21:59:10 +08:00
Burt 900323b386 Fix: 提示词, 竞赛数据接口在管理员模式下转为公开 (#607)
* 提示词, 竞赛数据接口在管理员模式下转为公开
* Fix "go vet" error
2025-11-06 20:42:43 +08:00
ZhouYongyou 4ca170fcdb Merge branch 'dev' of https://github.com/NoFxAiOS/nofx into fix/stop-loss-take-profit-method-calls 2025-11-06 14:20:35 +08:00
Ember 8767f9461f bugfix/ fix delete AI Model issue (#594)
* fix: 修复删除AI模型/交易所后UI未刷新的问题
问题描述:
在配置界面删除AI模型或交易所后,虽然后端数据已更新,但前端UI仍然显示已删除的配置项。
根本原因:
React的状态更新机制可能无法检测到数组内容的变化,特别是当API返回的数据与之前的引用相同时。
修复方案:
在 handleDeleteModelConfig 和 handleDeleteExchangeConfig 中使用数组展开运算符 [...items] 创建新数组,确保React能够检测到状态变化并触发重新渲染。
修改文件:
- web/src/components/AITradersPage.tsx
影响范围:
- AI模型删除功能
- 交易所删除功能
Fixes #591
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
* fix: 删除重复的确认对话框
问题描述:
删除AI模型或交易所时,确认对话框会弹出两次
根本原因:
1. ModelConfigModal 的删除按钮 onClick 中有一个 confirm
2. handleDeleteConfig 函数内部也有一个 confirm
修复方案:
移除 Modal 组件中的 confirm,保留 handleDeleteConfig 内部的确认逻辑,因为它包含了更完整的依赖检查功能
修改内容:
- 移除 ModelConfigModal 删除按钮中的 confirm
- 移除 ExchangeConfigModal 删除按钮中的 confirm
- 更新 title 属性为更合适的翻译键
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-06 12:25:25 +08:00
Sue d0c3fc3c12 fix: validate config.db is file not directory (#586)
修复 config.db 验证逻辑,处理误创建为目录的情况:
- 检测 config.db 是否为目录,如果是则删除并重建为文件
- 保留已存在的数据库文件不受影响
- 修复 Docker volume 挂载可能导致的目录创建问题
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-06 10:38:53 +08:00
Diego 54744309dd fix: 修复删除模型/交易所时界面卡死问题并增强依赖检查 (#578)
* fix: 修复删除模型/交易所时界面卡死问题并增强依赖检查
## 问题描述
1. 删除唯一的AI模型或交易所配置时,界面会卡死数秒
2. 删除后配置仍然显示在列表中
3. 可以删除被交易员使用的配置,导致数据不一致
## 修复内容
### 后端性能优化 (manager/trader_manager.go)
- 将循环内的重复数据库查询移到循环外
- 减少N次重复查询(GetAIModels + GetExchanges)为1次查询
- 大幅减少锁持有时间,从数秒降至毫秒级
### 前端显示修复 (web/src/components/AITradersPage.tsx)
- 过滤显示列表,只显示真正配置过的模型/交易所(有apiKey的)
- 删除后重新从后端获取最新数据,确保界面同步
### 前端依赖检查 (web/src/components/AITradersPage.tsx)
- 新增完整的依赖检查,包括停止状态的交易员
- 删除前检查是否有交易员使用该配置
- 显示使用该配置的交易员名称列表
- 阻止删除被使用的配置,保证数据一致性
### 多语言支持 (web/src/i18n/translations.ts)
- 添加依赖检查相关的中英文提示文本
- cannotDeleteModelInUse / cannotDeleteExchangeInUse
- tradersUsing / pleaseDeleteTradersFirst
## 测试建议
1. 创建交易员后尝试删除其使用的模型/交易所,应显示警告并阻止删除
2. 删除未使用的模型/交易所,应立即从列表消失且界面不卡死
3. 刷新页面后,已删除的配置不应再出现
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
* refactor: 重构删除配置函数减少重复代码
## 重构内容
- 创建通用的 handleDeleteConfig 函数
- 使用配置对象模式处理模型和交易所的删除逻辑
- 消除 handleDeleteModelConfig 和 handleDeleteExchangeConfig 之间的重复代码
## 重构效果
- 减少代码行数约 40%
- 提高代码可维护性和可读性
- 便于未来添加新的配置类型
## 功能保持不变
- 依赖检查逻辑完全相同
- 删除流程完全相同
- 用户体验完全相同
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-06 10:32:30 +08:00
ZhouYongyou fa1f869eea fix: 添加双向持仓防御性检查,避免误删除对向订单
在上一个修复(113a30f)中,虽然解决了订单累积问题,但引入了新的风险:
如果用户同时持有同一symbol的多空双向持仓,update_stop_loss/update_take_profit
会误删除另一方向的保护订单。
```
假设:
- BTCUSDT LONG 持仓(止损 95000)
- BTCUSDT SHORT 持仓(止损 105000)
AI 执行:update_stop_loss for SHORT
→ CancelStopLossOrders("BTCUSDT") 删除所有止损
→ SetStopLoss("BTCUSDT", "SHORT", ...) 只设置 SHORT 止损
结果:
- SHORT 止损正确更新 
- LONG 止损被误删  失去保护!
```
1.  技术支持:Binance 设置为双向持仓模式(Hedge Mode)
2.  策略禁止:Prompt 明确禁止"对同一标的同时持有多空"
3.  代码保护:开仓时检查已有同向持仓并拒绝
理论上不应该出现双向持仓,但仍需防御:
- 用户手动操作
- 并发bug
- 遗留数据
在 auto_trader.go 的 update_stop_loss/update_take_profit 函数中:
1. 执行前检测是否存在对向持仓
2. 如果检测到双向持仓:
   - 记录 🚨 严重警告日志
   - 说明这违反策略规则
   - 提示可能的原因和建议
3. 继续执行当前逻辑(因为策略本身禁止双向持仓)
- executeUpdateStopLossWithRecord: 添加双向持仓检测(第1175-1194行)
- executeUpdateTakeProfitWithRecord: 添加双向持仓检测(第1259-1278行)
```
🚨 警告:检测到 BTCUSDT 存在双向持仓(SHORT + LONG),这违反了策略规则
🚨 取消止损单将影响两个方向的订单,请检查是否为用户手动操作导致
🚨 建议:手动平掉其中一个方向的持仓,或检查系统是否有BUG
```
- 会影响所有实现类(binance/aster/hyperliquid)
- 增加复杂度
- 策略已禁止双向持仓,属于异常场景
- 实现过于复杂
- 需要重新实现订单管理逻辑
- 策略禁止场景不应该出现
-  最小侵入性修改
-  及时警告异常情况
-  不影响正常流程
-  为调试提供线索
- 正常使用(单向持仓):无影响,正常工作 
- 异常场景(双向持仓):记录警告,提示用户检查 ⚠️
Related: 113a30f (原始修复)
2025-11-06 02:57:59 +08:00
ZhouYongyou 7db9e42759 fix: 修复 update_stop_loss/update_take_profit 未删除旧订单的BUG
## 问题描述
更新止损止盈时,旧订单没有被删除,导致订单累积。
用户看到多个止损/止盈订单同时存在(如截图所示有4个订单)。
## 根本原因
币安Futures采用双向持仓模式(Hedge Mode),每个symbol可以同时持有LONG和SHORT两个方向的仓位。
取消订单时:
- 创建订单时指定了 PositionSide(LONG/SHORT)
- 取消订单时未遍历所有订单,导致部分订单残留
## 修复内容
### 1. binance_futures.go
- CancelStopLossOrders: 取消所有方向(LONG+SHORT)的止损订单
- CancelTakeProfitOrders: 取消所有方向(LONG+SHORT)的止盈订单
- 添加错误收集机制,记录每个失败的订单
- 增强日志输出,显示订单方向(PositionSide)
- 仅当所有取消都失败时才返回错误
### 2. aster_trader.go
- 同步应用相同的修复逻辑
- 保持多交易所一致性
## 预期效果
- 更新止损时,所有旧止损订单被删除
- 更新止盈时,所有旧止盈订单被删除
- 不会出现订单累积问题
- 更详细的日志输出,方便排查问题
## 测试建议
1. 在双向持仓模式下测试 update_stop_loss
2. 验证旧订单是否全部删除
3. 检查日志中的 positionSide 输出
Related: 用户反馈截图显示4个订单同时存在
2025-11-06 02:57:02 +08:00
杜仲 0d8b749a2c Add public routes for supported models and exchanges (#554) 2025-11-06 02:08:24 +08:00
SkywalkerJi dd6514c786 fix: Fixed redundant key input fields and corrected formatting on the frontend. (#566)
* Eliminate redundant key input fields in the front-end.
* go / react Formatting.
2025-11-06 01:16:04 +08:00
0xYYBB | ZYY | Bobo 366a7fd5f5 fix(prompts): correct confidence scale from 0-1 to 0-100 to match backend schema (#564)
## Problem
The prompts specified confidence range as 0-1 (float), but the backend code
expects 0-100 (integer). This causes JSON parsing errors when AI outputs
values like 0.85:
```
Error: json: cannot unmarshal number 0.85 into Go struct field Decision.confidence of type int
Result: confidence defaults to 0
```
## Root Cause
**Backend Definition** (decision/engine.go:103):
```go
Confidence int `json:"confidence,omitempty"` // 信心度 (0-100)
```
**Prompts (before fix)**:
- adaptive.txt: "confidence (信心度 0-1)"
- nof1.txt: "confidence (float, 0-1)"
**buildHardSystemPrompt** (decision/engine.go:336):
```go
sb.WriteString("- `confidence`: 0-100(开仓建议≥75)\n")
```
The dynamic system prompt was correct, but the base prompts contradicted it.
## Solution
Update prompt files to use consistent 0-100 integer scale:
### adaptive.txt
- `confidence (信心度 0-1)` → `confidence (信心度 0-100)`
- `<0.85` → `<85`
- `0.85-0.90` → `85-90`
- etc.
### nof1.txt
- `confidence (float, 0-1)` → `confidence (int, 0-100)`
- `0.0-0.3` → `0-30`
- `0.3-0.6` → `30-60`
- etc.
## Impact
-  Fixes JSON parsing errors when AI outputs float values
-  Aligns prompts with backend schema
-  Consistent with buildHardSystemPrompt() output format
-  No breaking changes (backend already expects 0-100)
## Testing
```bash
# Verify backend expects 0-100
grep "Confidence int" decision/engine.go
# Output: Confidence int `json:"confidence,omitempty"` // 信心度 (0-100)
# Verify buildHardSystemPrompt uses 0-100
grep "confidence.*0-100" decision/engine.go
# Output: sb.WriteString("- `confidence`: 0-100(开仓建议≥75)\n")
# Build test
go build ./decision/...  #  PASS
```
## Related
- Addresses schema mismatch mentioned in Issue #557
- Note: confidence field is currently not validated by backend (validateDecision
  does not check confidence value), but correct schema prevents parsing errors
---
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-06 00:35:53 +08:00
SkywalkerJi 0abfd13dbf fix: Fix README link (#563)
* Resolved front-end linting issues.
* Streamlining Docker Build Scripts
* Leveraging Native ARM64 Runners on GitHub.
* Use lowercase framework names.
* Streamlining dependencies within the README.
2025-11-06 00:31:05 +08:00
0xYYBB | ZYY | Bobo 4b924f6133 fix(decision): add safe fallback when AI outputs only reasoning without JSON (#561)
## 问题 (Problem)
当 AI 只输出思维链分析没有 JSON 决策时,系统会崩溃并报错:
"无法找到JSON数组起始",导致整个交易周期失败,前端显示红色错误。
## 解决方案 (Solution)
1. 添加安全回退机制 (Safe Fallback)
   - 当检测不到 JSON 数组时,自动生成保底决策
   - Symbol: "ALL", Action: "wait"
   - Reasoning 包含思维链摘要(最多 240 字符)
2. 统一注释为简体中文 + 英文对照
   - 关键修复 (Critical Fix)
   - 安全回退 (Safe Fallback)
   - 退而求其次 (Fallback)
## 效果 (Impact)
- 修复前:系统崩溃,前端显示红色错误 "获取AI决策失败"
- 修复后:系统稳定,自动进入 wait 状态,前端显示绿色成功
- 日志记录:[SafeFallback] 标记方便监控和调试
## 设计考量 (Design Considerations)
- 仅在完全找不到 JSON 时触发(区分于格式错误)
- 有 JSON 但格式错误仍然报错(提示需要改进 prompt)
- 保留完整思维链摘要供后续分析
- 避免隐藏真正的问题(格式错误应该暴露)
## 测试 (Testing)
-  正常 JSON 输出:解析成功
-  纯思维链输出:安全回退到 wait
-  JSON 格式错误:继续报错(预期行为)
-  编译通过
## 监控建议 (Monitoring)
可通过日志统计 fallback 频率:
```bash
grep "[SafeFallback]" logs/nofx.log | wc -l
```
如果频率 > 5% 的交易周期,建议检查并改进 prompt 质量。
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-06 00:08:23 +08:00
Ember c633a782ae Feature/faq (#546)
* feat(web): add FAQ page with search, sidebar, and i18n integration; update navigation and routes; include user feedback analysis docs (faq.md)
* docs: add filled frontend PR template for FAQ feature (PR_FRONTEND_FAQ.md)
* docs(web): add Contributing & Tasks FAQ category near top with guidance on using GitHub Projects and PR contribution standards
* feat(web,api): dynamically embed GitHub Projects roadmap in FAQ via /api/roadmap and RoadmapWidget; add env vars for GitHub token/org/project
* chore(docker): pass GitHub roadmap env vars into backend container
* docs(web): update FAQ with fork-based PR workflow, yellow links to roadmap/task dashboard, and contribution incentives; remove dynamic roadmap embed\n\nchore(api,docker): remove /api/roadmap endpoint and related env wiring
* chore: revert unintended changes (.env.example, api/server.go, docker-compose.yml); remove local-only files (PR_FRONTEND_FAQ.md, web/faq.md) from PR
* feat: 添加对重置密码页面的路由支持
2025-11-05 22:39:42 +08:00
SkywalkerJi 22731189bd fix: Increase Docker build speed by 98%. (#545)
* Resolved front-end linting issues.
* Streamlining Docker Build Scripts
* Leveraging Native ARM64 Runners on GitHub.
* Use lowercase framework names.
2025-11-05 22:24:56 +08:00
Burt 8b853a963d Feat: Enable admin password in admin mode (#540)
* WIP: save local changes before merging
* Enable admin password in admin mode #374
2025-11-05 21:48:28 +08:00
Sue 96ed2c6ea7 feat(auth): implement password reset with Google Authenticator verification (#537)
实现忘记密码功能,用户可以通过邮箱和Google Authenticator验证码重置密码。
**后端改动:**
- 添加 `/api/reset-password` 接口
- 实现 `UpdateUserPassword` 数据库方法
- 验证邮箱、OTP和新密码
**前端改动:**
- 新增 `ResetPasswordPage` 组件
- 在登录页面添加"忘记密码"链接
- 实现密码重置表单(新密码、确认密码、OTP验证)
- 添加密码可见性切换功能
- 支持中英文国际化
**安全特性:**
- 要求Google Authenticator验证
- 密码强度验证(最少6位)
- 密码确认匹配检查
- 密码哈希存储
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-05 21:01:18 +08:00
SkywalkerJi cc6dc8edaa Resolved front-end linting issues. (#533) 2025-11-05 20:41:41 +08:00
SkywalkerJi c76780d850 Add ja docs (#530)
* docs: add Japanese README
* docs: Update README.ja.md
* docs: add DOCKER_DEPLOY.ja.md
---------
Co-authored-by: Ikko Ashimine <ashimine_ikko_bp@tenso.com>
2025-11-05 20:14:26 +08:00
ERIC LEUNG 5328166018 fix: 删除多定义的方法 (#528) 2025-11-05 20:11:50 +08:00
CoderMageFox d01a35cb91 docs: clarify Aster only supports EVM wallets, not Solana wallets (#524) 2025-11-05 19:37:27 +08:00
Ember 01f3b32af2 fix(web): remove undefined setHyperliquidWalletAddr call in ExchangeConfigModal (#525) 2025-11-05 19:35:57 +08:00
0xYYBB | ZYY | Bobo 701ab9c62f Revert "fix: hard system prompt (#401)" (#522)
This reverts commit 7dd669a907c7c2ff1023bd76821af7d13be1f35a.
2025-11-05 19:05:09 +08:00
GitBib 50ab2b5ddf fix: update go.sum with missing modernc.org/sqlite dependencies (#523) 2025-11-05 19:03:32 +08:00
Theshyx11 6d2c64e91b docs: 添加 config.db Docker 启动失败 bug 修复文档 (#210)
## 问题描述
Docker Compose 首次启动时,config.db 被创建为目录而非文件,
导致 SQLite 数据库初始化失败,容器不断重启。
错误信息: "unable to open database file: is a directory"
## 发现时间
2025-11-02 00:14 (UTC+8)
## 根本原因
docker-compose.yml 中的卷挂载配置:
  - ./config.db:/app/config.db
当本地 config.db 不存在时,Docker 会自动创建同名**目录**。
## 临时解决方案
1. docker-compose down
2. rm -rf config.db
3. touch config.db
4. docker-compose up -d
## 修复时间
2025-11-02 00:22 (UTC+8)
## 新增文件
- BUGFIX_CONFIG_DB_2025-11-02.md: 详细的 bug 修复报告
## 建议改进
- 在 DOCKER_DEPLOY.md 中添加预启动步骤说明
- 考虑在 Dockerfile 中添加自动初始化脚本
Co-authored-by: shy <shy@nofx.local>
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-05 18:21:05 +08:00
Sue 467d7da26e feat(api): add server IP display for exchange whitelist configuration (#520)
Added functionality to display server public IP address for users to configure exchange API whitelists, specifically for Binance integration.
Backend changes (api/server.go):
- Add GET /api/server-ip endpoint requiring authentication
- Implement getPublicIPFromAPI() with fallback to multiple IP services
- Implement getPublicIPFromInterface() for local network interface detection
- Add isPrivateIP() helper to filter private IP addresses
- Import net package for IP address handling
Frontend changes (web/):
- Add getServerIP() API method in api.ts
- Display server IP in ExchangeConfigModal for Binance
- Add IP copy-to-clipboard functionality
- Load and display server IP when Binance exchange is selected
- Add i18n translations (en/zh) for whitelist IP messages:
  - whitelistIP, whitelistIPDesc, serverIPAddresses
  - copyIP, ipCopied, loadingServerIP
User benefits:
- Simplifies Binance API whitelist configuration
- Shows exact server IP to add to exchange whitelist
- One-click IP copy for convenience
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-05 18:15:33 +08:00
Jupiteriana 14b788a0f0 fix: hard system prompt (#401) 2025-11-05 17:45:18 +08:00
CoderMageFox 52431921ed feat: add i18n support for candidate coins warnings (#516)
- Add 13 translation keys for candidate coins warnings in both English and Chinese
- Update App.tsx to use t() function for all warning text
- Update AITradersPage.tsx to use t() function for signal source warnings
- Ensure proper internationalization for all user-facing messages
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-05 17:35:38 +08:00
PoorThoth 45a2224dab Change SQLite driver in database configuration (#441)
* Change SQLite driver in database configuration
Replace SQLite driver from 'github.com/mattn/go-sqlite3' to 'modernc.org/sqlite'.
* Update go.mod
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-05 17:34:29 +08:00
CoderMageFox 28fd03d8ba feat: 添加候选币种为0时的前端警告提示 (#515)
* feat: add frontend warnings for zero candidate coins
当候选币种数量为0时,在前端添加详细的错误提示和诊断信息
主要改动:
1. 决策日志中显示候选币种数量,为0时标红警告
2. 候选币种为0时显示详细警告卡片,包含可能原因和解决方案
3. 交易员列表页面添加信号源未配置的全局警告
4. 更新TraderInfo类型定义,添加use_coin_pool和use_oi_top字段
详细说明:
- 在App.tsx的账户状态摘要中添加候选币种显示
- 当候选币种为0时,显示详细的警告卡片,列出:
  * 可能原因(API未配置、连接超时、数据为空等)
  * 解决方案(配置自定义币种、配置API、禁用选项等)
- 在AITradersPage中添加信号源配置检查
  * 当交易员启用了币种池但未配置API时显示全局警告
  * 提供"立即配置信号源"快捷按钮
- 不改变任何后端逻辑,纯UI层面的用户提示改进
影响范围:
- web/src/App.tsx: 决策记录卡片中的警告显示
- web/src/components/AITradersPage.tsx: 交易员列表页警告
- web/src/types.ts: TraderInfo类型定义更新
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
* fix: import AlertTriangle from lucide-react in App.tsx
修复TypeScript编译错误:Cannot find name 'AlertTriangle'
Co-Authored-By: tinkle-community <tinklefund@gmail.com>
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-05 17:11:04 +08:00
zcan 7ab2dbcc8d Fix/binance server time (#453)
* Fix Binance futures server time sync
* Fix Binance server time sync; clean up logging and restore decision sorting
---------
Co-authored-by: tinkle-community <tinklefund@gmail.com>
2025-11-05 17:09:47 +08:00
vicnoah f29e4b18d7 ci(docker): 添加Docker镜像构建和推送的GitHub Actions工作流 (#124)
* ci(docker): 添加Docker镜像构建和推送的GitHub Actions工作流
- 支持在main和develop分支及版本标签的push事件触发
- 支持Pull Request事件及手动触发工作流
- 配置了backend和frontend两个镜像的构建策略
- 使用QEMU和Docker Buildx实现多平台构建(amd64和arm64)
- 集成GitHub Container Registry和Docker Hub登录
- 自动生成镜像元数据和多标签支持
- 支持基于GitHub Actions缓存提升构建速度
- 实现根据事件类型自动决定是否推送镜像
- 输出构建完成的镜像摘要信息
* Update Docker Hub login condition in workflow
* Fix Docker Hub login condition in workflow
* Simplify Docker Hub login step
Removed conditional check for Docker Hub username.
* Change branch names in Docker build workflow
* Update docker-build.yml
2025-11-05 16:55:09 +08:00
ERIC LEUNG 754dc2f17b refactor(AITradersPage): remove unused hyperliquidWalletAddr state (#511) 2025-11-05 16:42:56 +08:00
Icyoung 71f79a72fe Merge pull request #462 from zhouyongyou/fix/quantity-zero-min-notional
fix(trader+decision): prevent quantity=0 error with minimum notional validation
2025-11-05 16:29:24 +08:00
Icyoung 7510af17bc Merge pull request #467 from zhouyongyou/fix/binance-multi-assets-api-error
fix: 智能处理币安多资产模式和统一账户API错误
2025-11-05 16:23:32 +08:00
Icyoung a2fc530060 Merge branch 'dev' into fix/binance-multi-assets-api-error 2025-11-05 16:23:22 +08:00
Icyoung 8d511fe57e Merge pull request #468 from NoFearInMyHeart-G/dev
feat: 增加持仓最高收益缓存和自动止盈机制
2025-11-05 16:22:05 +08:00
Icyoung 483c3b6e08 Merge branch 'dev' into dev 2025-11-05 16:21:57 +08:00
Icyoung 89f95d2bef Merge pull request #437 from zhouyongyou/fix/margin-calculation
fix(margin): correct position sizing formula to prevent insufficient margin errors
2025-11-05 16:13:37 +08:00
Icyoung c06842a501 Merge pull request #436 from zhouyongyou/fix/partial-close-stats
fix(ui): prevent system_prompt_template overwrite when value is empty string
2025-11-05 16:12:12 +08:00
Icyoung 7bfefbb356 Merge branch 'dev' into fix/partial-close-stats 2025-11-05 16:11:53 +08:00
Icyoung e9c6424e95 Merge pull request #433 from zhouyongyou/fix/dual-side-position-mode
fix(binance): initialize dual-side position mode to prevent code=-4061 errors
2025-11-05 16:09:37 +08:00
Icyoung c517cde988 Merge pull request #435 from zhouyongyou/fix/trader-config-overwrite
fix(margin): correct position sizing formula to prevent insufficient margin errors
2025-11-05 16:08:18 +08:00
Icyoung 1e2aff80d4 Merge branch 'dev' into fix/trader-config-overwrite 2025-11-05 16:05:40 +08:00
Icyoung c0cb37252b Merge pull request #434 from zhouyongyou/fix/stop-loss-take-profit-separation
fix(trader): separate stop-loss and take-profit order cancellation to prevent accidental deletions
2025-11-05 16:05:00 +08:00
Icyoung ee0e241643 Merge pull request #429 from zhouyongyou/feat/auto-balance-sync
feat(trader): add automatic balance sync every 10 minutes
2025-11-05 16:02:21 +08:00
tinkle-community 7aa24f8593 Merge pull request #493 from simonjiang99/fix/3-minutes-minimum
fix(api):enforce minimum scan interval of three minutes
2025-11-05 16:02:04 +08:00
Icyoung 52f3985408 Merge branch 'dev' into feat/auto-balance-sync 2025-11-05 16:01:57 +08:00