shy3130
|
2b73e89b81
|
feat(app): 桌面端体验优化 — 界面缩放(80%-150%, 修复缩放黑条)/每小时检查更新/侧栏橘黄色呼吸灯下载图标(点击定位并自动检查)/发现新版本徽章带版本号/官网入口/顶部工具栏不折行/页面标题渐变字效; build: 安装包文件名带版本号 + 安装后自动刷新图标缓存
v0.3.3
|
2026-10-06 12:10:32 +08:00 |
|
shy3130
|
30fcade330
|
docs(readme): 官网徽章移至标语下方, 配色改黑底+品牌紫
|
2026-10-05 22:39:30 +08:00 |
|
shy3130
|
fdb8a0f435
|
fix(packaging): 补齐 fuyao 插件 — plugin.yaml 落盘 + provider/client 入 hiddenimports, 打包后设置页恢复数据源
|
2026-10-05 19:41:17 +08:00 |
|
shy3130
|
b23db4ecd7
|
brand: 品牌统一为 TSP — 应用名/图标(浅色圆角卡, Windows/macOS 双平台)对齐 brand 资产, README 新增官网入口与标题行内嵌 logo
|
2026-10-05 18:45:09 +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 |
|
 kevinandGitHub
|
4cb4ae1a7d
|
fix(assistant): 工具调用回传 Gemini 3 的 thought_signature, 同 index 的并行调用按 id 拆开, 不再 400 / 拼接工具名 (#453)
|
2026-10-05 00:21:02 +08:00 |
|
shy3130
|
490c62bca7
|
fix(paper): 对比榜单三处小修 — 空值恒垫底/副标题随排序可变/徽章高亮去歧义
- 可空列 (累计收益/最新日/盈亏比/最近结算) 无值行排序时恒垫底, 不再随升序翻到顶部
- 页头副标题去掉写死的「收益降序」, 改为「点表头排序」
- # 徽章仅在累计收益降序时高亮为收益名次, 其他排序弱化为列位
验证: pnpm build 通过; 浏览器实测默认高亮/名排序弱化/全空列升降序稳定
|
2026-10-05 00:13:27 +08:00 |
|
shy3130
|
3aa07d5ef5
|
feat(paper): 对比榜单加盈亏比列 (胜率旁, 可排序) — 无亏损回合显示 —, 排序空值垫底
后端 compare 已返回 profit_loss_ratio (round 2位), 纯前端改动:
表头 12 列 + 排序键 + 展开行 colSpan 同步, min-w 860→920
验证: pnpm build 通过; 浏览器实测列显示/排序切换/空值 — 正常
|
2026-10-04 22:19:01 +08:00 |
|
shy3130
|
35e21cf126
|
feat(paper): 对比榜单表头点击排序 — 8 列升降序切换, 统计卡与净值图固定收益口径
- 可排序列: 账户/总资产/累计收益/最新日/胜率/回合/持仓/最近结算; 默认累计收益降序, 同列再点翻转
- 空值垫底 (数值 -1e9 / 字符串空串), 账户名换列默认升序, 其余默认降序
- 「收益最高」统计卡与归一化净值叠加 (收益前 8) 不受表头排序影响, 始终按收益口径
- 排序表头样式随 Review._DtTh (活动列方向箭头, 非活动列 hover 淡箭头)
验证: pnpm build 通过; 浏览器实测点「账户」表头升降序切换正确、活动列指示正确、恢复默认排序正常、截图无布局错乱
|
2026-10-04 22:17:39 +08:00 |
|
shy3130
|
379b7d283a
|
feat(paper): 对比视图二期 — 全面去擂台化措辞 + 行内嵌完整账户面板替代跳转
- 措辞: 擂台/参赛/比拼全部改为对比定位 (标题/按钮/卡片/测试/端点文案), 移除 Trophy/Swords 图标
- 交互: 删除「进入」按钮, 点行展开内嵌 AccountPanel (下单/跟单/费用/冻结/持仓/台账/净值/策略对比), 单账户视图仅保留新建向导
- compare 增量字段: created_at/last_nav_date/day_change_pct/auto_rules/auto_enabled/holdings_count (加法契约)
验证: pytest 全量 2485 passed 6 skipped; ruff 通过; pnpm build 通过; 浏览器实测展开面板无擂台字样、无跳转、布局正常
|
2026-10-04 22:11:55 +08:00 |
|
shy3130
|
ca30bdaa84
|
feat(paper): 模拟盘擂台主视图 — 多账户收益对比榜单 + 同规格批量创建
参考擂台模式重构模拟盘默认视图, 对比从弹窗提升为页面主形态;
数据层零改动, 老账户自动上榜, 原单账户记账功能全量保留为下钻视图。
后端 (加法契约):
- POST /api/paper/arena/batch_create: 同本金/同费率一次开 N 个账户
(≤20, 服务端生成 arena_ id), 各绑一条自动跟单规则; 规则整体先校验
再落盘, 任一非法 400 不留半创建状态
- GET /api/paper/compare 增量字段: holdings_count / created_at /
last_nav_date / day_change_pct(末两定版净值) / auto_rules / auto_enabled,
旧前端可忽略
- 开放契约快照 +1 端点 (test_openapi_contract)
前端:
- Paper.tsx 拆为 ArenaView(默认: 摘要卡 + 归一化净值叠加 + 收益降序
榜单[排名/徽章/迷你走势/跟单规则chip] + 行展开持仓与近期成交) 与
AccountView(原视图全量保留, 头部加返回擂台); compare 查询 60s 轻轮询
- ArenaCreateModal: 策略/监控规则联想添加 + 全部策略一键加入(≤20),
方向/仓位/订单类型/冷却为全表共享参数保证同规格
- api.ts: PaperCompareRow 扩展可选擂台字段 + PaperArenaSource 类型
与 paperArenaCreate; 查询键复用 paperCompare/paperAll
验证: 全量 pytest 2485 passed (含新增 test_paper_arena 4 用例);
ruff 通过; pnpm build 通过; 浏览器实测擂台渲染/行展开/下钻返回/
批量创建弹窗交互均正常 (未在真实数据目录实际建账户)
|
2026-10-04 22:01:59 +08:00 |
|
shy3130
|
16ece46861
|
fix(backtest): close_t 卖出遇收盘封死跌停拦截+递延 — 涨停拒买的镜像问题(严重)
回测体检确认的严重项: _can_sell 只拦「一字跌停」, exit_fill=close_t 时尾盘
封板股(盘中正常交易、收盘=跌停价)按跌停收盘价"卖出" — 现实中收盘封死的
卖队排队排不出去, 带止损策略的亏损被系统性低估, 收益虚高。与已修的买入侧
涨停拒买(a64f573e)同构。
- engine.py 四处同构 _can_sell(矩阵/数组 × 独立/组合): exit_fill=close_t 且
无 override(计划出场: 信号/max_hold/期末)时, 凡收盘跌停(limit_down_locked,
含一字)一律拦截, 计数键沿用 sell_limit_down(前端已有「跌停阻塞」标签);
日内风控线(止损/移动止损/止盈, override 盘中价)是封板前穿越成交, 不拦 —
避免把盘中已触发的保护性离场误递延
- 被拦出场经既有 pending_exit 机制递延到下一可卖日成交, TradeRecord 的
blocked_exit_days 保留受阻天数
- 修复递延机制的尾部漏洞: 独立候选两路径原会在窗口末尾静默丢弃仍被递延的
持仓(封板/停牌卡死时 trade 凭空消失) — 改为期末按末日价格强制落账
(_try_close 新增 force 参数跳过可卖性闸门), reason 取 pending 原因,
blocked_exit_days>0 标记; 组合路径本就保留持仓并计入 pending_exit_positions,
无需改
- open_t+1 按次日开盘卖出, 行为不变; signal_next_minute 分钟触发价照旧
测试: test_limit_down_close_exit.py 五场景 — 封板日出场递延到次日/正常日
当日出场不变/日内止损线价当日成交不被误拦/open_t+1 不受影响/期末卡死持仓
强制落账不再丢弃。本地与 TZ=UTC 双跑全量 2481 passed 6 skipped
|
2026-10-04 21:51:31 +08:00 |
|
shy3130
|
a64f573ef2
|
fix(backtest): 用户报告两处修复 — close_t 收盘封涨停拦截 + 移动止盈回撤不再静默钳制
报告①(严重, 收益虚高): _can_buy 只拦「一字板」(收盘涨停且四价合一),
entry_fill=close_t 时尾盘封板股(盘中正常交易、收盘=涨停价)以涨停收盘价
"成交" — 现实中收盘封板的买队排队排不进, 动量类策略信号集中在涨停日,
回测收益系统性虚高(报告实测 55.7% 买单落在涨停收盘日, close_t +586% 对比
open_t+1 -71%)。修复: close_t 口径下凡收盘涨停(limit_up_locked, 含一字)
一律拦截, 拦截原因沿用 buy_limit_up; open_t+1 按次日开盘成交保持只拦次日
一字板。engine.py 四处同构 _can_buy(_simulate_independent_matrix /
simulate_independent_candidates_legacy / _simulate_portfolio_matrix /
simulate_portfolio_legacy)同步修改。旧 simple 路径 simulate() 无任何涨停
守卫但生产代码无调用方, 未动。
报告②(严重, 配置不生效): strategy.py 移动止盈的 min(drawdown, activate)
把用户填的回撤值静默改写成激活值, 无任何提示。改为显式校验报错
「移动止盈回撤(x%)不能大于激活涨幅(y%)」, 与同函数内其他参数组合错误的
_err 风格一致。
测试: test_limit_up_close_fill.py 四场景(封板拦截/正常日成交/open_t+1
信号日封板不影响次日开盘买入/次日一字仍拦截) + test_trailing_drawdown_
validation.py 两场景(超限报错/未超限放行)。本地与 TZ=UTC 双跑全量
2476 passed 6 skipped
|
2026-10-04 18:01:52 +08:00 |
|
shy3130
|
eefd9521bb
|
fix(jobs): 分钟K同步「卡死空转」修复 — 排队等槽有上界 + pending 纳入 reap + SDK 批量调用守护 deadline
用户反馈(升级后数据页分钟K同步无限停在「等待其他计算任务完成…」): 被取消/
已终止的残留线程挂死在单次 SDK 网络读里(SDK timeout=30s×3 只保护其覆盖的
阶段), 协作式取消要到分块边界才生效 → 它持有的独占槽(capacity=2, exclusive
权重=2)永不释放; 排队任务等槽无超时且 status=pending 不在 reap_stale 视野
(旧实现只回收 running), 无限空转只能重启进程。机制为 0.3.1 统一重任务并发
控制(b16957a8)引入, 非 0.3.2 回归。
- pipeline_jobs.run_with_capacity: 槽位等待加 timeout(取 job 自身 timeout_s,
与停滞阈值同源、用户可配), 超时以可读错误失败并按已取消上报 — fn 未执行,
零数据副作用, 四个调用方(kline/pipeline/daily/integrity)的异常分支免改
- pipeline_jobs.reap_stale: pending 排队停滞纳入回收(pending 无 started_at,
总时长硬上限跳过); create() 锚定 last_progress_at, executor 排队中从未
上报进度的任务也有兜底
- kline_sync: SDK 批量调用(日K区间/日K条数/复权因子/分钟K区间/分钟K条数共
5 处)统一 _sdk_call_with_deadline 守护(600s, daemon 线程执行 + join 超时
放弃); 超时走既有分块失败路径, 且补发 on_chunk_done 心跳保留进度上报与
协作取消检查点 — 持有侧线程可退出并释放槽位, 被放弃线程为 daemon 不阻
塞进程退出
测试: 新增排队超时可读失败/槽空闲行为不变/pending 回收与不误杀/硬上限跳过/
SDK deadline 单元与分块循环心跳(分钟+日K); test_queued_pipeline_is_
cancellable_and_not_reaped 按新契约改写为 cancellable_and_reaped_when_stalled
(其旧断言「排队不被 reap」即本 bug 的排队侧契约)。本地与 TZ=UTC 双跑全量
2470 passed 6 skipped
|
2026-10-04 16:50:58 +08:00 |
|
shy3130
|
146bc2418f
|
fix(custom): config_from_dict 白名单补上 full_minute — loader 清洗白名单含它而配置模型构建阶段漏了, 自定义源的「全量分钟」数据集被静默丢弃, 表现为设置页试拉报 does not configure dataset 'full_minute'、provider_has_dataset 为 False、分钟全量批量同步链路静默失效; 回归测试覆盖 清洗→YAML加载→load_all 注册→provider_has_dataset 全链路 (此前能力授予层测试 mock 掉了该函数, 真实路径无覆盖)
Fixes #451
|
2026-10-04 00:47:17 +08:00 |
|
shy3130
|
ff91eca3c0
|
fix(jobs): JobStore 快照落盘原子化 + get() 取锁 — 旧实现在 succeed()/fail() 的 pop→写盘窗口内, 无锁的 get() 会读到写一半的 JSON 而静默返回 None, 轮询方瞬时看到任务凭空消失 (CI test_pipeline_capacity 偶发 TypeError 的根因; 压力复现: 旧代码 2000 轮 2340 次 None, 修复后 0 次)
|
2026-10-04 00:41:01 +08:00 |
|
shy3130
|
88e4c19bc2
|
test(abnormal): 盘中基准动量测试的「今天」改用 cn_today() — 实现按北京日切今日, 测试脏行用宿主 date.today() 在 UTC 16-24 点窗口错开一天不再被排除, CI(UTC runner) 每晚必红 (#446 合并触发的既有时间炸弹, 与其改动无关)
|
2026-10-04 00:29:59 +08:00 |
|
 wshyandGitHub
|
4bbe571ec9
|
Merge pull request #446 from intfoo/pr/strategy-param-string-type
feat(strategy): 支持 string 类型策略参数
|
2026-10-04 00:24:53 +08:00 |
|
intfoo
|
3e105a475d
|
feat(strategy): 支持 string 类型策略参数
META["params"] 新增 string 类型(自由文本),后端本就按非数值类型
原样透传,无需改动;本 PR 补齐前端渲染与扫描守卫:
- StrategyParamDef.type 联合类型加 'string'
- 回测页/策略设置弹窗参数面板:string 渲染为文本输入框
(此前未知类型会掉进 number 分支,文本值被 Number() 转成 NaN)
- paramSweep:string 参数标记「文本参数不可扫描」,buildGrid
防御性跳过(后端 _candidates_for 只支持 float/int 范围展开)
- strategy-guide / compact 指南与 AI 生成 prompt 同步参数类型说明
|
2026-10-01 21:07:56 +08:00 |
|
 wshyandGitHub
|
0b4c410dbb
|
Merge pull request #443 from KenNeo730/fix/integrity-scan-trading-calendar
fix(integrity): 完整性扫描候选日接入 fuyao 交易日历
|
2026-09-29 18:35:46 +08:00 |
|
 wshyandGitHub
|
77e7088e54
|
Merge pull request #440 from kevin9327/fix/assistant-coverage-weekend-lag
fix(assistant): 数据完整性检查按最新日之后至今天的工作日计落后天数, 周末不再误报日线落后
|
2026-09-29 10:49:36 +08:00 |
|
 wshyandGitHub
|
03f43d6790
|
Merge pull request #438 from kevin9327/fix/assistant-confirm-timeout
fix(assistant): 确认卡超时未作答返回 expired, 不再当成「用户已拒绝」回填给模型
|
2026-09-29 10:49:22 +08:00 |
|
 wshyandGitHub
|
3667dec842
|
Merge pull request #436 from kevin9327/fix/sse-event-id-unique
fix(events): SSE 事件 id 由总线分配为严格递增的毫秒时间戳, 同一毫秒的一批告警不再共用 id
|
2026-09-29 10:49:14 +08:00 |
|
 wshyandGitHub
|
3452c0577e
|
Merge pull request #434 from kevin9327/fix/minute-raw-basis-marker
fix(minute-adjust): 部分分区缺日K锚点时不建 .raw_basis 标记, 补齐后可续跑
|
2026-09-29 10:48:04 +08:00 |
|
 wshyandGitHub
|
8f6b2bf0fc
|
Merge pull request #441 from kevin9327/docs/builtin-strategy-count
docs(features): 内置策略数改为 25 并同步代表策略表, 与策略指南口径一致
|
2026-09-29 10:47:54 +08:00 |
|
KenNeo730
|
6e401ab086
|
fix(integrity): 完整性扫描候选日接入 fuyao 交易日历
「周一~周五」近似把休市日当成缺失日: 2026 中秋 09-25(周五) 休市被报
kline_etf_daily missing, realtime_gate 409 后修复任务对休市日永远拉不到
数据, 门禁死锁, 实时行情自长假起打不开 (issue #442)。
- 新增 _trading_calendar(): fuyao 近一年交易日集合, TTL 30 分钟缓存,
取数失败沿用上次成功结果 (stale-while-error), 从未取到才回退周几近似
- _candidate_days 按日历过滤候选日
- 测试的「最近工作日」探针同步升级为「最近交易日」
(_recent_trading_day_before), 避免节假日环境误造休市日分区
本地验证: 37 passed (原 33 + 新增 4); 真实环境 boot 自检通过, 实时行情
门禁恢复放行。
|
2026-09-28 19:18:13 +08:00 |
|
 kevin9327andClaude Opus 5.5
|
3563b14eb9
|
docs(features): 内置策略数改为 25 并同步代表策略表, 与策略指南口径一致
features.md 写 18 个, strategy.md 写 25 个; 按 builtin/ 各模块 META 核对,
普通选股列表 25 个, 另有一个仅供挖掘 worker 使用的研究模板。
Closes #426
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-09-28 19:18:54 +09:00 |
|
 kevin9327andClaude Opus 5.5
|
0181ab6656
|
fix(assistant): 数据完整性检查按最新日之后至今天的工作日计落后天数, 周末不再误报日线落后
_biz_days_behind 数的是 [latest, today) 的工作日, 最新日本身算作落后、
今天不算; 周六/周日对截至周五的数据报「落后约 1 天, 建议补全」。
改为数 (latest, today], 两端都是工作日时结果不变。
Closes #439
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-09-28 19:17:46 +09:00 |
|
shy3130
|
b410f1530c
|
feat(packaging): 桌面图标统一品牌渐变 — generate_icon.py 标记色改 #A78BFA→#7C3AED(影线 70%)并重新生成 ico/icns, tickflow-logo.svg 同步
|
2026-09-28 18:17:30 +08:00 |
|
shy3130
|
18cc8f27b2
|
feat(frontend): favicon 与侧栏菜单图标换新品牌渐变 — 新增 BrandIcons 组件族(19 个 24 网格直角图标, currentColor 跟随主题), nav 全量替换并清理未用 lucide 导入
|
2026-09-28 18:17:26 +08:00 |
|
shy3130
|
a982b35410
|
feat(brand): 品牌资产库扩充与设计提案归档 — logo-dark 深底变体/场景底卡切图/16-24 小尺寸补齐/icon.ico, 另存 19 案 logo 提案评审页(含 12 向图标系统与主标尺寸规范)
|
2026-09-28 18:17:21 +08:00 |
|
 kevin9327andClaude Opus 5.5
|
ef12b6dd60
|
fix(assistant): 确认卡超时未作答返回 expired, 不再当成「用户已拒绝」回填给模型
await_decision 超时也返回 denied, chat_service 为超时准备的文案分支
走不到, 模型被告知用户拒绝且不要重试。超时与溢出回收改为 expired,
同样不执行; 用户点拒绝的行为不变。
Closes #437
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-09-28 19:16:00 +09:00 |
|
 kevin9327andClaude Opus 5.5
|
21bdffd237
|
fix(events): SSE 事件 id 由总线分配为严格递增的毫秒时间戳, 同一毫秒的一批告警不再共用 id
id 原本在格式化时按 time.time() 现算, append_many 一批告警落在同一毫秒
共用一个 id, 按 lastEventId 去重的订阅方只收到第一条; 时钟回拨时 id 也
会变小。发布时持锁分配 max(当前毫秒, 上一个 id + 1)。
Closes #435
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-09-28 19:14:01 +09:00 |
|
 kevin9327andClaude Opus 5.5
|
18327c6519
|
fix(minute-adjust): 部分分区缺日K锚点时不建 .raw_basis 标记, 补齐后可续跑
只在全部分区都缺锚点时才不建标记, 有分区被跳过仍会建; 标记存在后迁移
短路, 被跳过的前复权分区永不换算, 读取时再被复权一次。任一分区缺锚点
即不建标记, 与注释、接口 docstring 和既有测试 docstring 一致。
Closes #433
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-09-28 19:12:08 +09:00 |
|
shy3130
|
1ecdd4acbe
|
docs(readme): 修正「个人开源」徽章乱码 — URL 编码多出 %E4%BA%AA 致渲染为「个亪人开源」
alt 文本一直正确, 仅 shields.io URL 路径部分有误, 故 README 上显示为 5 个字的乱码徽章。乱码自 0.3.2 的 369f04d4 README 大改版引入, 经合并带入 main。已用解码与 shields.io SVG title 双重核对。
|
2026-09-28 12:19:30 +08:00 |
|
shy3130
|
2134e2e3c4
|
merge: 0.3.2 合并到 main — 开放能力版与看板自定义布局
- 开放能力: API Token 网关(scope 默认拒绝) + SSE 事件流 + MCP 服务器 + 助手动作能力
- 看板: 12 列吸附网格自定义布局(react-grid-layout) + 后端持久化
- 更新检查: 启动静默检查 + 侧栏 NEW 徽标 + latest.json 清单
- 版本: 0.3.1 -> 0.3.2; 附 CI 启用与 watchdog 回移
v0.3.2
|
2026-09-28 10:45:32 +08:00 |
|
shy3130
|
3d03bf8dba
|
test(fuyao): test_dataset 预览用例改用相对日期 — 硬编码日期滑出近30天窗口导致必失败
|
2026-09-27 23:03:07 +08:00 |
|
shy3130
|
1ba83821a6
|
test(fuyao): test_dataset 预览用例改用相对日期 — 硬编码日期滑出近30天窗口导致必失败
|
2026-09-27 23:01:53 +08:00 |
|
shy3130
|
74c1021763
|
fix(watchdog): 探测循环取消不再被吞 — stop() 不会再永久挂起(自 0.3.2 回移修复与回归测试)
|
2026-09-27 23:01:53 +08:00 |
|
shy3130
|
a341cfc31e
|
ci: 启用 main 持续集成(自 0.3.2 引入) — 后端全量 pytest + 前端 tsc/vite 构建; 同时修复 0.3.2 README 的 CI 徽章(默认分支无此 workflow 导致 404 裂图)
|
2026-09-27 22:48:55 +08:00 |
|
shy3130
|
cb4dc820f0
|
feat(update): 启动静默检查新版本, 侧栏版本号旁 NEW 徽标 — 自 0.3.2 移植共享单例 updateCheck store(24h 缓存+latest.json 兜底), 设置→系统复用同一 hook; 顺带修复设置页检查更新按钮仍指向改名前仓库
|
2026-09-27 18:53:09 +08:00 |
|
shy3130
|
a1edb94bec
|
update readme
|
2026-09-27 18:47:50 +08:00 |
|
shy3130
|
39981d2537
|
feat(dashboard): 默认布局定稿 v2(用户手动调整版) — 中段四列等高(分布/雷达 h7→8), 双热度/四榜单行顶对齐(y12/y21); 坐标为压实稳定形态, 恢复默认等值落null闭环复验通过
|
2026-09-27 11:12:29 +08:00 |
|
shy3130
|
1a37e5515f
|
feat(dashboard): 用户定稿布局设为代码默认 — 四列中段(分布/雷达/趋势/梯队)+双热度+右侧监控高栏(22行)+四榜单; 坐标取竖直压实稳定形态(列内不留空隙), 保证恢复默认的JSON等值判断成立并落null
|
2026-09-26 23:58:24 +08:00 |
|
shy3130
|
a39f8f4520
|
fix(dashboard): 根治组件内容溢出互相压盖 — 格子内容自然高度可大于定高格子(热度+35/榜单+88/监控+146px, overflow:visible 直接画到下一排上, 榜单DOM靠后把概念热度第5行盖住), 格子 overflow-hidden + 卡片 h-full 物理根除; 默认布局高度按实测校准(热度9/榜单13/监控14行)默认视图零裁切
|
2026-09-26 23:05:41 +08:00 |
|
shy3130
|
2f657e3d07
|
feat(dashboard): 编辑态交互重设计 — 整卡可拖(顶部被遮挡也能从任意位置拖起), 内容 pointer-events:none 阻断内部点击/悬停/iframe 吞拖拽, 八向缩放(四边通长细条+四角直角标线, accent 主题色), 占位格虚线框吸附反馈; 修复 RGL 浏览态残留 104 个隐形手柄 span 挡内容/滚动条(display:none 根除)
|
2026-09-26 22:47:33 +08:00 |
|
shy3130
|
fbf390187f
|
fix(dashboard): 布局加载路径消解重叠坐标 — normalizeLayout 渲染前 compactLayout 兜底, 异常保存的 blob 不再组件压盖(注入重叠blob实测: gainers/losers 自动下沉), 拖拽回写同防线, 修正不实注释
|
2026-09-26 22:36:52 +08:00 |
|
shy3130
|
e65002a478
|
fix(dashboard): 添加组件弹层 portal 到 body + fixed 锚定 — 按钮移入头部后 absolute 弹层受祖先层叠上下文遮挡, 改为脱离文档流顶层渲染(z-9999), 右缘视口钳位, 页面滚动关闭/面板内滚动不关
|
2026-09-26 22:23:43 +08:00 |
|
shy3130
|
2461c3df96
|
fix(dashboard): 默认布局复刻原版排布 — 监控中心回到右栏(榜单右侧/梯队下方), 四榜单收窄为2列占左8列, 不再整行占满把监控挤到页面最底部
|
2026-09-26 22:20:26 +08:00 |
|