Commit Graph
61 Commits
Author SHA1 Message Date
shy3130 ec8307eb3b chore: v0.3.7 2026-10-14 15:11:55 +08:00
shy3130 ecb49cbaca release: v0.3.6 — 核心+扩展架构完善版
合并 0.3.6 分支全部内容 (36 提交, 详细历史见 0.3.6 分支):

■ 数据与插件
- TdxQuant 数据源: 通达信量化接入 (实时/五档/日K/复权/分钟), tdxaidata 收进默认依赖
- 扩展表两级拉取配方: 概念/行业出厂即带完整可拉配置, 可作自定义接入参考示例
- 能力门禁日志带生效源; 标的池解析只走 instruments 维表

■ 页面扩展化
- 11 个官方页面全量迁移为单文件扩展 (custom/*/extension.tsx), 删目录即卸载
- 运行时页面包系统: 打包产物上传即挂载, 免重建宿主
- 新装用户扩展页默认隐藏, 老用户升级菜单无感

■ AI
- Responses 协议接入; 会话历史与长任务跨设备同步 (服务端注册表)
- 助手头部快捷入口 + 悬浮球拖拽 zoom 坐标系修复 + 系统设置开关

■ 界面
- 设置「关于」子菜单: 版权/更新/打赏 + 开源许可弹窗与合规声明双保险
- 侧栏两态收起、数据/AI 助手快捷行 (同步呼吸光晕)、核心/扩展 ext 标记
- 界面缩放默认 90%; 菜单设置徽标 Swiss 化; 策略池「叠加」分组
- 情绪评分口径可配置; 财务画像 5 张子表手动拉取

■ 文档与其他
- README 重构「核心+扩展」主线 + 架构图重画; 开放端点数核实为 65
- 版本号 bump 0.3.6; tdx 物化库测试夹具补 macOS dylib
2026-10-13 13:40:17 +08:00
shy3130 17093a8c36 fix(front): 对齐 @tanstack/react-query 至 5.104.1, 与持久化配套包同版
三包此前后台实际为 react-query 5.100.11 + persist-client/persister 5.104.1,
peer 依赖形式上不满足且打包存在 query-core 双拷贝。统一到 5.104.1 后
peer 精确满足, query-core 收敛为单一版本。安装/构建/vitest 105 例/
node:test 5 例全部通过。
2026-10-08 13:27:10 +08:00
shy3130 625f5c7b56 chore: bump version to 0.3.5 — 前后端版本同源(package.json 唯一权威, fallback/VERSION 同步) 2026-10-08 10:36:26 +08:00
shy3130 39f2543ccc chore: bump version to 0.3.4 — 前后端版本同源(package.json 唯一权威, fallback/VERSION 同步) 2026-10-07 21:49:30 +08:00
shy3130 2b73e89b81 feat(app): 桌面端体验优化 — 界面缩放(80%-150%, 修复缩放黑条)/每小时检查更新/侧栏橘黄色呼吸灯下载图标(点击定位并自动检查)/发现新版本徽章带版本号/官网入口/顶部工具栏不折行/页面标题渐变字效; build: 安装包文件名带版本号 + 安装后自动刷新图标缓存 2026-10-06 12:10:32 +08:00
shy3130 af63614610 perf(front,back): 查询缓存持久化 + staleTime 分层 — 重开应用秒出上次数据, 不再全量重拉
- 新增 lib/queryPersist.ts: PersistQueryClientProvider 接入 localStorage 持久化,
  白名单 13 个慢变查询族 (设置/偏好/能力矩阵/自选清单与分组/策略池/regime 全家/自定义信号),
  键首段精确匹配不误伤 watchlist-enriched 等实时行情族; 24h maxAge + 版本 buster;
  快变数据 (实时价/分钟K/告警) 刻意不持久化, 避免陈旧价格误导
- staleTime 分层: settings/preferences 30s, capability-matrix 5min, 自选清单 30s,
  策略池 60s, 自定义信号 60s — 切页不再对慢变数据反复请求
- regime_builder.load_regime_history 加 (path,mtime,size) 签名缓存: Regime 页
  三个端点原先每请求各自全量重读同一 parquet, 现共享一份, 写入后 mtime 失效

验证: pnpm build 通过; 浏览器实测持久化恢复路径 (注入缓存刷新后守卫直接放行,
不再整屏 loading); regime 相关 pytest 22 passed; ruff 零新增; git diff --check 干净
2026-10-05 15:16:16 +08:00
shy3130 f3804215f9 perf(front,back): 首屏弹窗/设置页懒加载落地页 -1.5MB + 后端取数锁收窄/分钟K分区直读/缓存治理 + 错误态与轮询门控
前端 (bundle/渲染/体验):
- StockPreviewDialog/DimensionMembersDialog/ListColumnCustomizer 拆薄壳+lazy 内容 (关闭不挂载, 保留 300ms 退出动画), 落地页静态依赖不再含 echarts/lightweight-charts (~2.2MB→~540KB); Settings 八 tab 与 Onboarding/Auth 按需加载; 字体自托管 @fontsource 替换 CDN 外链; 删除零引用依赖与 buildQuoteMap 死代码
- Watchlist O(n²) symbol 派生链修复 + 批量查询 placeholderData; LimitUpLadder 回调稳定化让 memo 生效; AbnormalMoves 两行组件 memo 化
- 非交易时段轮询降频 (quote_status.is_trading_hours 门控, 字段缺失保持原频); StockPreviewDialog 尊重异动页主开关不再意外触发全市场计算
- 六处错误伪装空态补 isError+重试 (新增共享 ErrorState); Monitor 涨跌色统一 priceColorClass (修 0 值显红); AI 复盘取消生成 (修 reviewStore 中断空指针与半途归档); Regime 主线过滤面板配置晚到回填

后端 (热路径):
- quote_service 监控评估链移出 _fetch_lock, 独立 _evaluate_lock 保两轮不并发; depth_service 网络拉取出锁, parquet 写仍串行
- get_minute/get_minute_batch 优先直读 date= 分区 (缺失回退全树扫描); get_daily_batch 复用 300 天 enriched 历史缓存 (与单股 get_daily 同源判据)
- secrets_store mtime 缓存; 总览 ext 读取 (path,mtime) memo; screener 历史缓存 LRU 硬上限; final 同步状态按日清理; webhook 线程池挂入 lifespan shutdown

验证: pnpm build 通过; 后端 pytest 全量 2489 passed (test_worker_process 1 例时序 flaky 已隔离复跑确认与本次无关); ruff 修改文件零新增告警
2026-10-05 15:07:53 +08:00
shy3130 26e23ef01a feat(dashboard): 12列吸附网格自定义布局 — react-grid-layout v2 封装, 编辑态拖拽/角柄调宽高/删除/恢复默认, 布局规范化与默认布局复刻原排布 2026-09-26 20:12:42 +08:00
shy3130 adfb9da8ac refactor(dashboard): 抽出看板 widgets 到 components/dashboard (纯搬移, 行为不变), 引入 react-grid-layout 依赖 2026-09-26 20:04:02 +08:00
shy3130 7f628816b9 feat(open-api): 0.3.2 开放能力版 — API Token 网关 + Tier A 契约 + 版本清单
- Token 域模块: tsp_ 前缀 + SHA-256 哈希存储 (0600), 明文仅创建时返回一次,
  吊销立即生效, last_used_at 节流落盘 (≥60s)
- Bearer 网关中间件 (与密码会话并行): 五档 scope 校验 (read:market/read:ext/
  read:analysis/run:backtest/paper:trade) + 滑动窗口限流 (默认 120/min,
  OPEN_API_RATE_LIMIT_PER_MIN 可调) + X-RateLimit 响应头; 管理接口永不对 Token 开放
- GET /api/openapi.json?tier=a 契约视图: 按网关规则表过滤 OpenAPI 规范 (58 路径),
  规则表即唯一契约源
- 设置 → 开放接口: Token 管理 UI (创建表单/scope 说明/明文一次性展示/吊销)
- 设置 → 系统设置 检查更新: 静态链接升级为真实版本对比 (GitHub API 优先,
  latest.json 清单兜底), 发现新版本给下载入口
- release.yml 新增 manifest job: Release 附 latest.json (版本/三平台下载地址/sha256),
  支持分批发布按实际资产生成
- 版本 0.3.1 → 0.3.2 (后端 __init__/pyproject + 前端 package.json)
- docs: features.md 开放接口章节; open-platform-plan.md V1/V2 标记已实现
- 测试: test_api_gateway.py 8 项 (域模块/scope 映射/E2E 401-403-200 矩阵/
  429+Retry-After/吊销即拒), 全量 2394 通过
2026-09-25 22:38:58 +08:00
shy3130 4743030425 chore: bump version to 0.3.1 2026-09-24 11:53:37 +08:00
shy3130 b05bba4237 feat(assistant): AI 对话助手 — 完全解耦扩展模块(流式对话 + 18 个只读工具)
后端 app/custom/assistant/ 与前端 src/custom/assistant/ 各自独立, 零核心文件修改,
删除目录即整体卸载(分别由扩展系统启动期自动发现 / 构建期自动挂载)。

- 流式: 模块内自建 SSE + tools 有界循环(核心 generate_ai_text_with_tools 为非流式),
  文本逐 token 推送; 工具事件经 asyncio.Queue 外推为 NDJSON 事件流, 含心跳保活与断连取消
- 工具: 14 个页面查询工具(个股行情/日线/关键价位/财务五表/自选/持仓提醒/信号库/看板总览/
  指数/板块轮动/市场环境/异动/执行策略/因子排名) + 核心 4 个(因子/策略/数据能力/回测);
  全部只读且有界, 大表先过滤再取行, 未知工具名回退核心目录
- 入口: 可拖动悬浮球(位置记忆) / 侧栏 AI 徽标旁入口(DOM 锚定, 无槽位改动) / ⌘K 全局快捷键
- 面板: 页面右缘滑入的非模态面板, 默认 720px, 左缘拖拽调宽并记忆, 会话历史本地持久化
- 合规: 每条回答固定附风险提示与数据口径提示; 无 Key 或不支持工具调用(Codex CLI)时 fail-closed
- 版本: 0.2.4 → 0.3.0(前后端 pyproject/package.json/app.__version__ + uv.lock)
- 文档: README 增补 AI 对话助手章节、扩展机制说明、架构图节点与路线图条目

验证: 受影响模块 pytest tests/test_custom_assistant.py tests/test_extensions.py 21 passed;
全量后端套件 2174 passed(1 例 mining 用例在整套并发下偶发失败, 单跑通过, 与本次改动无关);
ruff 改动文件无新增告警; pnpm build 通过; 浏览器实测逐字流式渲染、工具足迹卡、拖拽调宽与
悬浮球位置记忆、版本显示 v0.3.0
2026-09-18 17:47:49 +08:00
0112020179 8f15ec0739 fix(index): 修复历史分时查询与切日旧数据闪现 2026-09-13 22:05:04 +08:00
shy3130 89847ab860 chore(release): 版本号统一升级至 v0.2.4 2026-09-13 15:59:24 +08:00
shy3130 a4fda9ed36 feat(platform): 因子平台与因子↔策略双向联动 v0.2.3
- 因子平台: /factors 一级页(检验/因子库/编辑器/组合/挖掘), DSL 公式因子(25 算子点选、双语字段、我的因子模板、脏公式守卫), 版本与生命周期, 自动挖掘 L1 统计筛选
- 因子↔策略四条桥: 触发器 Zap 快建因子条件信号、因子一键生成排名策略、自定义信号 AI 提示词接入因子分组、策略回测因子归因(胜/败单入场信号日因子均值, 独立 tab, 双语因子名)
- 回测: 统计卡新增盈亏比(≥1 红/<1 绿), 蒙卡回撤合并为中位/95% 双值卡(自适应字号), 高级设置基础过滤与策略编辑器参数对齐(5 组区间)
- 信号库独立页 /signals(原设置 tab 迁出), 持仓提醒入导航; 挖掘并入因子页第 5 tab, /mining 旧链接重定向
- 研究线配套: 因子目录 61→77(评分/矩阵双内核), stats_v2(Newey-West/BH-FDR/DSR), enriched 管道与异动/报价服务配套调整
- 文档: README 导航与特性表、features.md 因子平台章节、操作说明书 9.2、factor-platform-plan 执行状态与 §5、二开文档桥接说明; 交流与支持节改版
- 版本 0.2.2 → 0.2.3; 后端全量 1625 passed(1 例环境性跳过), 前端 build 通过
2026-09-05 15:41:15 +08:00
shy3130 0d193e540a chore(release): 版本号统一升级至 v0.2.2 2026-08-30 19:43:52 +08:00
shy3130 2c02f3125e feat: v0.2 UI 重构 + 自选分组侧边栏 + 扩展数据时间窗口 + 个股对话框优化
- 侧边栏美化:品牌改名/菜单 active 指示条/收起展开/底部精简
- 数据源+AI 状态卡:名称替换固定文字/档位 tag 条件显示
- 设置页重构:account 合入数据源 tab/数据源置顶/收起展开菜单
- 自选分组侧边栏:二级子菜单/分组跳转同步/清空分组
- 个股对话框:tab 移顶栏/分时关闭/放大全屏/操作按钮归位
- 扩展数据:定时拉取时间窗口(time_window_start/end)
- 版本号: 0.1.88 → 0.2.1
2026-08-10 17:53:14 +08:00
shy3130 1658204e21 chore: 版本号升至 0.1.88
统一升级 4 处版本号至 0.1.88:
- VERSION / backend/app/__init__.py / frontend/package.json: 0.1.87 → 0.1.88
- backend/pyproject.toml: 0.1.83 → 0.1.88 (原已滞后 4 个版本, 一并追上)

本版本包含:
- feat(search): 拼音首字母搜索 + 创业/科创/北交所徽标 (#151)
- fix(security): ext_columns DuckDB SQL 注入修复 (#152, closes #150)
2026-07-31 20:03:43 +08:00
shy3130 7b4b12ee06 完善个股点位提醒并发布0.1.87 2026-07-21 22:14:07 +08:00
shy3130 a07d32811f feat: release v0.1.86 2026-07-18 00:49:28 +08:00
shy3130 776c39ccba feat(voice): 监控告警语音播报 (播报个股名称与信号) v0.1.84
- 新增 voiceBroadcast.ts: 浏览器原生 speechSynthesis, 零依赖/零后端改动
- 按 source 分类拼接文案, 必念个股名称不念代码, 含涨跌幅
  · strategy: [名称] 进入/移出 策略「名」 [涨跌幅]
  · signal:   [名称] 买入/卖出信号触发 [涨跌幅]
  · price/market: [名称] [条件摘要] [涨跌幅]
- 默认偏好 Google 中国大陆语音 (音质最佳), 异步注入自动同步回显
- 整批合并一句 + 正在播报时丢弃新批次 (防快行情叠噪音)
- AlertToast 加 dispatchSideEffects 聚合点: 弹窗逻辑与副作用职责分离
- System 设置页加语音播报区: 开关(默认关)/音色/语速/试听
- 版本号同步升至 0.1.84 (VERSION / __version__ / package.json)
- README 监控中心加语音播报特性说明
2026-07-11 11:21:57 +08:00
shy3130 f1f79b68e7 release: v0.1.83 2026-07-10 12:00:49 +08:00
shy3130 9d30be7934 feat: 新增企业微信推送、个股分析页重构、价位算法优化及多处交互改进 (v0.1.82)
- 推送: 新增企业微信群机器人通道(与飞书并列), 监控告警/复盘报告多渠道分发
- 个股分析: 历史报告改为右侧常驻栏(展示全部股票报告), 进页面自动恢复上次选股
- 价位算法: 成交密集区改用换手率衰减模型(国内主流筹码分布); 缺口回补判定修正(必须完全穿越缺口)
- 回测: 回撤止盈改纯峰值口径(与 trailing_stop 一致); 佣金/印花税/滑点合并一行; 建仓口径加问号气泡说明
- 分时图: 自选列表迷你分时图加渐变填充(对齐个股对话框风格)
- 图表: 个股分析日K图右侧标签适配浅色主题; 价位标签与下方文字行双向 hover 高亮联动
2026-07-07 17:56:25 +08:00
shy3130 fdf9cde826 chore: bump to 0.1.81 2026-07-06 17:42:19 +08:00
shy3130 7b5d345910 feat: 自定义数据源扩展 + 限频集中化 (v0.1.80) 2026-07-05 22:57:46 +08:00
shy3130 051ef06682 chore: 版本号升至 0.1.70 2026-07-02 17:45:30 +08:00
shy3130 0f9ac5b4b2 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
shy3130 b1f655a12a chore: bump version to 0.1.66 2026-06-29 17:50:12 +08:00
shy3130 c089a49d33 chore: bump version to 0.1.65 2026-06-29 17:21:01 +08:00
shy3130 a1a0b13718 chore: bump version to 0.1.64 2026-06-28 20:11:35 +08:00
shy3130 1b8895dbc1 chore: bump version to 0.1.63 2026-06-28 18:20:57 +08:00
shy3130 4ad7362843 修复看板显示bug 2026-06-28 13:49:18 +08:00
shy3130 d27873bbfc 重新设计复盘页面并优化页面 2026-06-28 13:49:05 +08:00
shy3130 d832d8ed5e feat: release v0.1.60 2026-06-27 23:23:34 +08:00
shy3130 08f131c680 docs(readme): 添加 GitHub star 徽章 2026-06-26 23:55:12 +08:00
shy3130 5eedd4d49f chore: bump version 2026-06-26 23:37:56 +08:00
shy3130 e07d8a6441 chore: bump version to 0.1.51 2026-06-26 23:37:04 +08:00
shy3130 72d6c50b45 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 214896ea7d feat(financials): AI 财务分析 — 流式生成 + 全局胶囊 + 历史报告持久化
后端:
- 新增 financial_analyzer 服务(CFA 级九维分析提示词 + LLM 流式调用)
- 新增 ai_reports 持久化存储(保留前 20 条)
- 新增 /analyze 流式接口 + 报告 CRUD 接口
- 同步时间持久化到 preferences.json,重启不丢失

前端:
- 全局 AI 分析对话框(store 驱动,支持最小化/历史模式)
- 全局可拖拽任务胶囊(玻璃拟态,三态配色,60fps 拖拽)
- 历史报告列表面板(财务页底部)
- 轻量 Markdown 渲染器(表格折行/列表/引用)
- 同标的历史二次确认 + 财务菜单改名「财务分析」

同步版本号至 v0.1.45
2026-06-25 22:39:34 +08:00
shy3130 f8f7fc6488 fix(ci): PyInstaller 产物输出到 backend/dist, 与 tickflow.iss Source 路径一致
修复 Inno Setup 找不到打包产物的错误:
  No files found matching ..\backend\dist\TickFlowStockPanel\*
原因: workflow 用 --distpath ../dist 输出到项目根 dist/, 但 .iss 引用的是 backend/dist/
修复: PyInstaller 用默认输出 (backend/dist), DMG/Linux 步骤路径同步调整
2026-06-25 00:35:13 +08:00
shy3130 29bbacb361 chore: 同步版本号 2026-06-25 00:17:31 +08:00
shy3130 3ba7cb4b16 chore: 同步版本号至 0.1.42 (VERSION/__init__/pyproject/package.json) 2026-06-24 23:25:22 +08:00
shy3130 0622a10de2 feat(sidebar): 数据菜单项同步状态指示器 (转圈/完成闪烁)
- 轮询 pipelineJobs: 有活跃 job 每 2s, 无活跃每 15s
- 同步中: 数据菜单项右侧显示蓝色转圈 Loader2
- 同步完成: 切换为绿色对勾 CheckCircle2 + pulse 闪烁, 3 秒后消失
  (用 ref 检测 isDataSyncing true→false 跳变触发)
2026-06-24 23:24:51 +08:00
shy3130 bcc40b6c1d fix: 权限门控避免 free/starter 报错 + 概念分析数据源失效容错
StockPanel:
- 财务指标请求增加 FINANCIAL 能力判断, 无能力时不请求
  (修复 free/starter 点个股弹 'capability not available: financial' 报错)

Indices:
- 指数分时区无 kline.minute.batch (Pro+) 能力时显示锁提示, 不请求接口

ConceptAnalysis:
- 配置的 configId 失效 (扩展数据被删) 时自动回退 pickBestConfig, 避免报错
- 空状态也显示配置按钮, 让用户能重新选择数据源

ExtDimensionAnalysis:
- 顶部数据源/分组字段配置区始终显示 (去掉 !menu 条件)
2026-06-24 23:24:38 +08:00
shy3130 0710eb2d28 feat(ui): 看板无数据提示优化 + 数据页无 Key 引导 + 设置页文案
Dashboard:
- hasNoData 改用 trading_days 判断 (后端 status rows 恒为 0 导致提示无法消除)
- 无数据提示改 warning 黄色风格 + AlertTriangle 图标
- 无数据/无 Key 两提示互斥: 无 Key 优先, 有 Key 无数据才显示同步提示
- API Key 横幅: 邀请码加复制按钮, 文案调整

Data:
- 无 Key 时立即同步按钮置灰禁用 + 显示未配置提示
- 指数数据卡片设置按钮与其它卡片一致 (有数据才显示)

System:
- '清理浏览器缓存' 改名 '刷新前端缓存', 避免误导为清数据
2026-06-24 23:24:25 +08:00
shy3130 a4939bb300 feat(dashboard): 看板无本地数据时显示提示条 + 跳转数据页同步按钮
- enriched/daily 两表均无数据时,顶部显示蓝色提示条
- 「前往同步」按钮 Link 跳转 /data 页面
- 与 none 档(无 key)黄色横幅区分显示

版本: 0.1.38
2026-06-24 18:07:43 +08:00
shy3130 a193e82687 fix(tier): 乱填 key 误判为 free 档 —— 探测改走付费端点验证 key
根因(鸡生蛋蛋生鸡的循环依赖):
  保存乱填 key 后 detect_capabilities → get_client() 读旧 capabilities.json
  (此时还是 none 档)→ _should_use_free_server() 返回 True → 用
  TickFlow.free() 探测 → free 服务器忽略 key, 日K成功 → 误判为 free 档。

修复:
  _probe_real 改用探测专用客户端, 强制走付费端点(api.tickflow.org)验证
  key 有效性, 不再依赖运行时的 get_client()(受旧缓存档位影响)。
  乱填 key 在付费端点全部 AuthenticationError → 正确判定 none 档 + invalid。

版本: 0.1.37
2026-06-24 17:58:56 +08:00
shy3130 9089ec7a48 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 0a17526e33 chore: 同步版本号至 0.1.35 (打包对齐 tag) 2026-06-23 21:49:48 +08:00