wshy
|
e0badf1458
|
feat(wecom): 智能机器人长连接接入(配置项 + 保活) (#89)
* feat(wecom): 智能机器人长连接接入(配置项 + 保活)
新增企业微信智能机器人(API模式/长连接)通道, 与群推送 Webhook 并存。
后端:
- wecom_bot_service: WebSocket 长连接管理器, daemon 线程内跑 asyncio
连接 wss://openws.work.weixin.qq.com → aibot_subscribe 鉴权
→ 30s ping 心跳 → 断开指数退避重连(min(base*2^(n-1),60s))
结构对齐 depth_service(start/stop/boot_check/apply_credential_change)
- preferences: 新增 wecom_bot_id/secret/enabled getter/setter
- settings: PUT /preferences/wecom-bot 保存即重建连接 + 聚合 GET 补字段
- main.py: lifespan 挂载启停(失败不阻断应用启动)
前端:
- api.ts: Preferences 加 3 字段 + updateWecomBot 函数
- Monitoring.tsx: 智能机器人配置卡片(BotID + Secret 密码框 + 连接状态)
本阶段只做连接保活, 暂不处理消息收发(@交互/流式回复后续扩展)。
* fix(wecom-bot): 卡片标签改为「企业微信 智能机器人」与上方一致
* feat(wecom-bot): 智能机器人长连接独立开关
卡片头部加勾选框, 用户可明确控制长连接开启/关闭:
- 勾选 → 建立 WebSocket 连接保活
- 取消勾选 → 立即断开
后端: 新增 PUT /preferences/wecom-bot-toggle(只切 enabled 不改凭证)
前端: toggleWecomBot API + 勾选框 + 说明文字
凭证不齐时勾选框禁用(无法连接)
* feat(wecom-bot): 接收消息解析并记 INFO 日志(验证接收能力)
收到消息从 DEBUG 提升到 INFO, 并解析关键帧:
- aibot_msg_callback: 用户消息(会话类型/消息类型/用户ID/内容)
- aibot_event_callback: 事件回调(进入会话/卡片点击/被踢等)
- 其他帧: cmd + 原文截断
发消息给机器人即可在后端日志看到接收记录。
|
2026-07-09 16:35:21 +08:00 |
|
wshy
|
ddde2b9653
|
feat: 数据修正功能 + 盘后管道暂停实时行情防竞态 (#87)
* refactor: 「群机器人 Webhook」统一更名为「群推送 Webhook」
"群机器人"易与后续接入的"智能机器人(API 模式)"混淆。
该通道本质是单向往群聊推送消息, 更名为「群推送 Webhook」更准确。
涉及: 飞书/企业微信的 UI 标签、操作指引、后端文档字符串、
错误提示文案(代码逻辑/接口不变)。覆盖 6 个文件, 纯文案改动。
* feat: 数据修正功能 + 盘后管道暂停实时行情防竞态
数据修正/补数据:
- 数据页顶部新增「修正数据」按钮, 弹窗选起始日期重拉到今天
- 复用盘后管道全流程 (维表/A股日K/除权/enriched/指数), 仅日期由用户传入
- run_now() 加 override_start_date 参数, 注入 A股日K + 指数拉取起点
- 新增 /api/kline/repair_daily 端点 (异步 job + 进度轮询)
- 前端 RepairDailyPanel + DatePicker, 默认起始日期为30天前
实时行情暂停机制 (防写盘竞态):
- QuoteService 加 _paused 标志 + pause()/resume()/paused() 上下文管理器
- 盘后管道/数据修正运行期间自动暂停实时行情取数, 防止覆写同一批 parquet
- toggle 端点: 暂停态下禁止开启实时行情 (409)
- 前端开关: 暂停时 disabled + 显示「数据同步运行中,已临时暂停」
- 三处注入 pause: pipeline.py / kline.py(repair_daily) / daily_pipeline.py(定时)
|
2026-07-09 13:47:39 +08:00 |
|
wshy
|
19b2fd8480
|
refactor: 「群机器人 Webhook」统一更名为「群推送 Webhook」 (#86)
"群机器人"易与后续接入的"智能机器人(API 模式)"混淆。
该通道本质是单向往群聊推送消息, 更名为「群推送 Webhook」更准确。
涉及: 飞书/企业微信的 UI 标签、操作指引、后端文档字符串、
错误提示文案(代码逻辑/接口不变)。覆盖 6 个文件, 纯文案改动。
|
2026-07-09 13:33:18 +08:00 |
|
wshy
|
8e56f3efb8
|
feat(monitor): 推送渠道拆分为飞书/企业微信独立勾选 (#74)
把监控推送从单一总开关 webhook_enabled(bool)升级为渠道数组
webhook_channels(list),飞书与企业微信各自独立勾选,做到「勾哪个
推哪个」。沿用项目已有的 review_push_channels 渠道数组模式。
后端:
- RuleModel 新增 webhook_channels 字段;normalize() 兼容老规则,
webhook_enabled=True 自动迁移为 ['feishu','wecom']
- _maybe_send_webhook 按 channels 判断:'feishu' in channels 才推
飞书,'wecom' in channels 才推企业微信
- 新增偏好 webhook_default_channels + PUT 接口;老 webhook_enabled_default
保留兼容
前端:
- RuleEditor 飞书/企业微信勾选各自绑数组 includes/toggle
- 设置页推送通知卡片飞书/企业微信默认勾选独立
- 连板梯队封单弹窗「飞书」单胶囊改为飞书+企业微信双胶囊
- api.ts 类型 + updateWebhookDefaultChannels
|
2026-07-08 13:48:22 +08:00 |
|
shy3130
|
f8914c9140
|
feat: 新增企业微信推送、个股分析页重构、价位算法优化及多处交互改进 (v0.1.82)
- 推送: 新增企业微信群机器人通道(与飞书并列), 监控告警/复盘报告多渠道分发
- 个股分析: 历史报告改为右侧常驻栏(展示全部股票报告), 进页面自动恢复上次选股
- 价位算法: 成交密集区改用换手率衰减模型(国内主流筹码分布); 缺口回补判定修正(必须完全穿越缺口)
- 回测: 回撤止盈改纯峰值口径(与 trailing_stop 一致); 佣金/印花税/滑点合并一行; 建仓口径加问号气泡说明
- 分时图: 自选列表迷你分时图加渐变填充(对齐个股对话框风格)
- 图表: 个股分析日K图右侧标签适配浅色主题; 价位标签与下方文字行双向 hover 高亮联动
|
2026-07-07 17:56:25 +08:00 |
|
shy3130
|
966d94ab03
|
feat: 数据源插件化架构 + stock-sdk 首个插件
将可选数据源改为插件化架构: 插件代码放 backend/app/plugins/<name>/,
用户在设置页点击安装依赖, 主仓库不背运行时依赖(nodejs 等)。
架构:
- loader.py 新增 _load_builtin_plugins() 扫描 plugins/ 目录, 通过
plugin.yaml 清单动态发现并注册插件(委托自检 + 优雅降级)
- runtime 字段支持 node/python, 安装/卸载分别用 npm/pip
- 现有 tickflow + YAML 自定义源逻辑 100% 保留, 插件是叠加层
stock-sdk 插件 (plugins/stocksdk/):
- 原始实现来自 @forrany 的 PR #57, 迁移到插件化架构, 署名保留
- Node 桥接 (bridge.py/mjs) + Python provider, 覆盖日K/除权/分钟/实时
- 设置页主列表直接显示: 未装灰显+安装按钮, 装完可切换/卸载
配套:
- instrument_sync: 通用增强, 任何 provider 都能提供标的维表
- install/uninstall: uv 优先回退 pip, 容错坏 uv.toml + 国内镜像
- 10 例单测全过, tsc 零错误
|
2026-07-06 17:00:56 +08:00 |
|
shy3130
|
fa08981851
|
feat: 自定义数据源扩展 + 限频集中化 (v0.1.80)
|
2026-07-05 22:57:46 +08:00 |
|
shy3130
|
e4f0a95ca2
|
fix: 升级 Expert Key 后财务页「全部同步」无反应
启动时无 FINANCIAL 能力导致调度器 _capset 为 None, 后续在设置页更新 Key
时 app.state.capabilities 已刷新但调度器未同步, trigger() 仍报
no FINANCIAL capability 而拒绝同步。新增 update_capabilities 并在设置 API
刷新能力时同步推给调度器; 前端对 started:false 一律给出提示, 不再静默。
|
2026-06-30 22:30:52 +08:00 |
|
shy3130
|
68841af662
|
feat: 定时复盘飞书推送 + SSE 实时进度
- 定时复盘支持推送到飞书(卡片消息, 完整报告), 渠道多选(飞书可选, 微信开发中)
- 推送开关独立常驻, 与定时/实时行情解耦; 手动/定时生成都可推送
- 定时复盘改流式生成, 通过 SSE(review_progress)实时推给前端, 开着页面可见边生成边显示
- 修复定时任务协程未 await 的 bug(lambda 包裹 async → 改传函数对象 + args)
- LLM 断流自动重试(最多2次), 后端归档 + 飞书推送, 异常兜底通知前端
- 复盘定时下限改为 15:00, 默认 15:10
- 版本号 0.1.66 → 0.1.67
|
2026-06-30 17:28:18 +08:00 |
|
Lzwaang
|
ec6380376d
|
Add Codex CLI AI provider
|
2026-06-29 22:32:58 +08:00 |
|
shy3130
|
37934091ac
|
feat(notify): 推送通知接入飞书 Webhook
新增 webhook_adapter 飞书群机器人推送 (含签名校验);preferences/settings
增加 feishu_webhook_url/secret 与 webhook_enabled_default (新建规则默认推送)
配置与端点;Monitoring 设置页重构为「推送通知」卡片 (渠道列表+飞书地址折叠
+默认渠道勾选);RuleEditor 规则编辑器支持单条规则勾选飞书。
QMT/ptrade 渠道文案统一改为「待定」。
|
2026-06-29 17:17:33 +08:00 |
|
shy3130
|
8a8cd746dc
|
feat: — 数据目录/实时监控/定时复盘/老CPU兼容
1. 桌面客户端体验优化,Polars 兼容内核 (老 CPU 兼容)
2. 自选页实时监控优化
3. 个股监控逻辑优化
4. 新增定时复盘
6. 其他: 修复 settings.py 中 HTTPException 未 import 的既有 bug
|
2026-06-28 18:08:52 +08:00 |
|
shy3130
|
2acaa38a2b
|
feat: release v0.1.60
|
2026-06-27 23:23:34 +08:00 |
|
shy3130
|
2015ef0c78
|
feat: 个股分析(Beta) — 专用日K + 9类关键价位 + AI四维分析
新增个股分析页,以行情与关键价位为视觉主体,与财务分析(财务质量评级)定位互补:
后端:
- indicators/levels.py: 9 类关键价位纯函数计算
· 压力支撑(布林带)/ 成交密集区(POC)/ 枢轴点(可配档位)/ 前高前低
· Keltner通道(MA±n×ATR 短/中/长)/ ATR止损(close±nATR)
· 缺口位(未回补跳空)/ 斐波那契回撤 / 整数关口(自适应步长)
- services/stock_analyzer.py: AI 四维(技术/基本面/财务/消息面)流式分析,NDJSON
- services/stock_reports.py: 报告持久化(最多50条),独立 JSON 存储
- api/stock_analysis.py: levels/analyze/reports 端点
前端:
- AnalysisKChart: 专用 ECharts 日K(主图+成交量+滑块),9 类价位开关
- 蓝色胶囊(Bubble/Host/Dialog),与财务分析紫色主题并存
- stockAnalysisStore: useSyncExternalStore 全局存储,后台流式
- useLastStock + LastStockChip: 记忆最近查看个股(财务/个股分析页)
其他优化:
- AI 设置页:一键清空配置(保留UA) + 保存后乐观更新连接状态/菜单
- MarkdownRenderer: 去除 space-y-0 遮蔽,各块间距与分隔线可见性优化
- 个股分析页 Beta 标识(标题 + 菜单)
- 版本号 0.1.45 → 0.1.50
|
2026-06-26 15:36:52 +08:00 |
|
shy3130
|
37ebe19f1e
|
refactor(ai): 配置页单列卡片重构 + 移除无用的 Token 预算
- AI 设置页改为单列分卡片布局(Card/Field/Toggle 辅助组件),自定义配置卡
头部标注「Chat Completions」
- 移除从未实际生效的 ai_daily_token_budget(后端 config/api/settings +
前端 Settings 接口与保存参数 + UI)
- 测试结果不再展示 token 消耗,仅显示「连通成功 · 模型: xxx」
|
2026-06-25 15:53:15 +08:00 |
|
wshy
|
7c81a03026
|
feat(ai): 可配置 User-Agent 绕过 Cloudflare 等 CDN 拦截 (fix #8) (#10)
问题(Issue #8): AI API 反代到 Cloudflare 后,OpenAI SDK 默认 UA
(OpenAI/Python) 被 Bot Fight Mode 拦截,报 'Your request was blocked'。
方案: 后端始终发送浏览器风格 UA,默认内置 Chrome UA(开箱即用);
AI 设置页提供开关 + 随机生成/手动粘贴的自定义 UA。
后端(config.py / settings.py / ai_generator.py / strategy.py):
- 新增 ai_user_agent 配置项,默认桌面 Chrome UA
- 两处 OpenAI client 创建均注入 default_headers={User-Agent}
(ai_generator 实际生成 + strategy 测试连通性)
- 空 UA 自动回退内置默认,保证默认状态即绕过拦截
前端(api.ts / AI.tsx):
- 自定义 UA 开关:默认关闭(用内置默认),开启才显示输入框
- 随机生成按钮: 产出近期 Chrome 桌面 UA(Win/Mac/Linux 随机)
- 已有自定义 UA 时开关默认开启
不影响直连官方 OpenAI/DeepSeek 的用户(官方不校验 UA)。
|
2026-06-25 10:49:10 +08:00 |
|
shy3130
|
755c114390
|
feat(tier): API 检测重构为 5 档,新增「无」档 + 修复 CapabilityDenied 返回 500
检测逻辑(复权因子分水岭):
- 无 key / 乱填(连单只日K都拿不到) → none 档,不存 key,走 free-api 服务器
- 免费有效 key(有日K无复权) → free 档,存 key,走 free-api 服务器
- 付费 key(有复权) → starter/pro/expert,走 api.tickflow.org
主要改动:
- save_tickflow_key 改为先探后存:无效 key 不持久化,前端提示「Key 无效」
- none/free 档统一走 TickFlow.free(),实时行情开关置灰
- tiers.yaml 新增 none 档,free 档补 kline.daily.batch
- 注册 CapabilityDenied 全局 handler → 403(此前返 500)
- /health mode 三态化,watchlist 无行情能力时提前 return
- 看板页 none 档显示黄色升级提示(含邀请码超链接)
版本: 0.1.36
|
2026-06-24 17:44:58 +08:00 |
|
shy3130
|
41be5096dc
|
feat: 桌面客户端打包 (pywebview + PyInstaller) + 系统通知
- 桌面入口: desktop.py (单实例锁 + 端口探测 + uvicorn + pywebview 窗口)
- 配置层: config.py 加 sys.frozen 检测, frozen 下 data_dir 指向用户目录
- 系统通知: notify_adapter.py 三平台 (Win winotify / mac osascript / Linux notify-send)
接入 quote_service 告警出口, preferences 开关控制, 前端监控设置加 toggle
- 前端: 监控设置加系统通知开关, 系统设置加检查更新入口
- 打包: packaging/tickflow.spec (onedir, collect-all 原生库, 排除 vectorbt)
- CI: .github/workflows/release.yml 手动触发 + 平台可选 (windows/macos/linux)
- 依赖: platformdirs/winotify/plyer 入主依赖, pywebview 入 desktop extras
- README 加桌面客户端下载章节
- bump 版本号到 0.1.33
|
2026-06-23 21:47:29 +08:00 |
|
shy3130
|
b5780b5e30
|
feat: 统一监控引擎 + AlertToast通知 + 声音/角标/看板/Dev页 + 股票名称批量查询
监控引擎 (backend):
- MonitorRuleEngine 统一规则引擎,支持策略/信号/价格/行情四种类型
- JSONL 追加存储 (alert_store.py),支持分页 + 清理
- alert/monitor_rules CRUD API + seed 演示数据
- POST /api/kline/instruments/names 批量股票名称查询
- SSE strategy_alert 事件触发前端通知
前端通知体系:
- AlertToast 自定义弹窗 (Framer Motion + AnimatePresence)
- Web Audio API 合成音效 (12种预设,无需音频文件)
- 侧边栏角标 (monitorBadge.ts) localStorage 持久化未读数
- pendingSeen 机制解决 markSeen/setCurrentTotal 竞态
- 系统设置页: 通知开关 + 最大条数 + 音效选择
- 菜单设置页: 角标数字开关
监控中心 (Monitor.tsx):
- 双栏布局: 左侧实时告警列表 + 右侧规则管理
- RulesList 股票代码后显示中文名称
- RuleEditor 完整规则编辑器组件
- 告警支持查看详情 (StockPreviewDialog)
Dashboard:
- MonitorWidget: Top 10 实时告警卡片
Dev 页面:
- 一键填充演示告警 + 规则 + 分钟探测
- 可视化 SSE 事件流查看
其他:
- v0.1.19 → v0.1.28 (VERSION 从 pyproject.toml 读取)
- dev.ps1/dev.sh 添加 --host 0.0.0.0 (局域网访问)
- 修复 Screener.tsx presets.length 可选链
- README 截图表格更新 (6张) + 监控章节重写
- 删除 MinuteDataProbe 页面 (合并至 Dev)
|
2026-06-21 14:18:08 +08:00 |
|
shy3130
|
d89b9068a7
|
feat: 五档盘口真假涨停修正 + 连板梯队涨跌停切换 + 自动版本管理
连板梯队:
- 新增涨停/跌停方向切换(胶囊式, 涨停红/跌停绿)
- 跌停侧三状态: 跌停/翘板/止跌(对称涨停侧)
- 涨跌停双计数 + 真假板修正/降级标识(问号弹窗)
五档盘口 sealed(真假涨停):
- depth_service 独立旁路线(只读enriched, 不动计算逻辑)
- 涨跌停一体(一次depth.batch双向覆盖)
- 假涨停归炸板/假跌停归翘板, 真封板显示封单量
- 三层防护节流(套餐clamp+限速clamp+接管通知)
- Pro/Expert盘中轮询 + 盘后定版job + 启动补跑
- 收盘job可配置(15:01~18:00, 默认15:02)
- 设置页'连板梯队降级修正'卡片(开关+配置+立即修正)
- 看板页同步应用sealed修正+降级标识
配置/SDK:
- tiers.yaml拆分depth5/depth5.batch, 补全quote.batch
- tickflow SDK升级0.1.21→0.1.23(depth.batch可用)
- 实时行情轮询间隔下限调整(pro 2s/expert 1s)
- capabilities缓存schema版本化(v3)
其他:
- 档位配色抽共享组件TierTag/tierStyle
- Keys页档位问号弹窗(4档位tag+检测说明)
- git hooks自动版本号+0.0.1+打tag
|
2026-06-19 20:09:09 +08:00 |
|
shy3130
|
7369358d08
|
Initial release v0.1.19
|
2026-06-18 17:18:23 +08:00 |
|