Elvis Wang
303f4e1c18
feat: GitHub Actions 指数入口 + 指数注册表补全与自选股配置文档 (Refs #2303 ) ( #2332 )
...
* feat: GitHub Actions STOCK_LIST 指数入口与 CLI unsupported 明确拒绝
* feat: 指数注册表新增国证粮食与中证钢铁,补充指数自选股配置文档
- seed 与 bundled 指数清单 31 项扩展至 33 项(sz399365、csi930606)
- 中英 full-guide 新增指数自选股配置小节,README/DEPLOY 同步提示
- 相关确定性测试断言 31→33 并锁定新 canonical
* fix: market-only 分类跳过测试补齐交易日历 mock,消除周末失败
* fix: 测试类级默认关闭 GITHUB_ACTIONS,修复 CI runner 环境注入导致的分类分支误入
* fix: 入口分类按模式边界跳过不消费个股列表的模式,文档收窄指数入口适用范围
- 新增 _skips_stock_entry guard:--backtest/--market-review/--serve-only/--webui-only/--portfolio/--schedule/config.schedule_enabled 整体跳过 --stocks 与 Actions STOCK_LIST 的分类与索引刷新
- --schedule --stocks 的忽略快照警告与分类解耦(传 args.stocks or None)
- 恢复 --stocks + --portfolio 同框提示日志
- 测试:review 反例四格 + Actions portfolio 格 + portfolio 覆盖到达 pipeline.run 入参断言
- 文档:指数分类与整批拒绝收窄为 --stocks 与 GitHub Actions 两入口
2026-09-05 22:03:49 +08:00
Elvis Wang
eb1333a678
feat: 支持通过 --stocks 一次性分析板块指数 ( #2300 )
...
* feat: add one-shot index analysis via --stocks with structured AnalysisTarget pipeline
* fix: render index data sources in aggregate reports
* fix: refresh index registry before --stocks parsing and filter indices on CN holidays
---------
Co-authored-by: zhulinsen <42829555+ZhuLinsen@users.noreply.github.com >
2026-08-28 21:56:48 +08:00
zhulinsen
96bc532dfc
fix: restore persisted runtime schedules ( #2231 )
2026-08-19 23:46:49 +08:00
lmx-2077
cfd6b0a5fb
feat(agent): per-category tool timeouts with graceful degradation ( #1890 ) ( #2134 )
2026-08-17 21:41:19 +08:00
zhulinsen
294210883c
fix: 分析后无报告生成 ( #2201 ) ( #2211 )
...
* fix(issue-2201): [bug]-分析后无报告生成
* fix(review-feedback-2211): Keep the TTM cutoff anchored to the as-of date and Propagate report
* fix(review-feedback-2211): Move the empty-watchlist check before the trading-day return
* fix(review-feedback-2211): preserve the failure status, but defer returning until after the and
* fix(review-feedback-2211): preserve the failure result, but defer returning until after the
* fix(review-feedback-2211): Handle failures in the market-review-only CLI branch
2026-08-14 22:08:51 +08:00
JaxonHu
d13721e817
feat: 新增富途Futu真实持仓导入支持 ( #2042 )
...
* feat: add Futu portfolio import support
* docs: condense Futu changelog entry
* fix: tighten Futu portfolio import contracts
2026-07-20 22:45:45 +08:00
zhulinsen
e8a9ca7742
fix: harden release packages and report market context ( #1994 )
...
* fix: bundle orjson in release packages
* fix: remove duplicate decision signal excerpts
* feat: add TickFlow sector ranking fallback
2026-07-12 18:56:21 +08:00
zhulinsen
523c7b00de
fix: keep WebUI bind options consistent ( #1922 )
...
* fix: keep WebUI CLI bind options authoritative
* fix(review-feedback-1922): apps/dsa-web/src/locales/settingsHelp.ts 未随本次 CLI/WebUI 绑定语义更新
2026-07-05 19:19:10 +08:00
zhulinsen
a3e1b9e3ba
fix: normalize watchlist separators ( #1912 )
2026-07-04 11:57:43 +08:00
zhulinsen
3fddbd8fbc
fix: clarify JP KR service boundaries ( #1823 )
...
* feat: add JP KR market review support
* fix: clarify JP KR service boundaries
* fix(review-feedback-1823): add the fields to the response schema and cover the endpoint path, not
* fix(review-feedback-1823): Avoid routing JP/KR reviews through MarketLight schema
* fix(review-feedback-1823): add JP/KR to that resolver when accepting these values
* fix(review-feedback-1823): Keep JP/KR daily contexts from normalizing to CN and add JP/KR labels
* fix(review-feedback-1823): 解决冲突后再合入
* fix(review-feedback-1823): 解决冲突并确认最终 diff 后再评审合入
* fix(review-feedback-1823): 澄清或补齐验证证据
* fix(review-feedback-1823): 解决冲突,并在冲突解决后的 head 上重新确认关键验证结果
* fix(review-feedback-1823): Make the Chinese JP/KR prompt shell region-aware
* fix(review-feedback-1823): 解决冲突后再判断最终 head 是否可合入
* fix(review-feedback-1823): 基于目标分支解决冲突,并在冲突后的最终 diff 上重新确认相关后端/Web 检查
* fix(review-feedback-1823): 修复
* fix(review-feedback-1823): 解决冲突
* fix(review-feedback-1823): 解决冲突后再合入
* fix(review-feedback-1823): 解决冲突后再合入
* fix(review-feedback-1823): Make the all-markets checkbox exclusive
* fix(review-feedback-1823): 解决冲突,并在冲突解决后的最新 head 上重新确认关键测试和 Web 构建结果
* fix(review-feedback-1823): 解决冲突并确保解决后的 head 重新通过对应验证
* fix(review-feedback-1823): 解决冲突,并在冲突解决后重新确认受影响的后端、Web 与文档改动仍一致
* fix(review-feedback-1823): 解决冲突,再基于最新 base 复核完整 diff,并重新确认相关后端/Web 验证结果仍成立
* fix(review-feedback-1823): 解决冲突后重新确认最终 diff 与 CI 结果
* fix(review-feedback-1823): 收敛
* fix(review-feedback-1823): 基于目标分支解决冲突并重新确认关键验证结果
* fix(review-feedback-1823): 解决
* fix(review-feedback-1823): 收敛
* fix(review-feedback-1823): 解决冲突后重新确认 diff 与 CI
* fix(review-feedback-1823): 补充本次未改变哪些配置契约、对应测试覆盖和回退方式
* fix(review-feedback-1823): 收敛
* fix(review-feedback-1823): PR 描述与实际 diff scope 仍不完全对齐:完整改动包含
* fix(review-feedback-1823): 解决冲突并在冲突后的最终 diff 上重新确认 CI/关键测试结果
* fix(review-feedback-1823): 解决冲突并确认解决后的 diff 与现有 43 个文件 scope 仍一致
* fix(review-feedback-1823): 解决冲突后再合入
* fix(review-feedback-1823): 解决冲突,并在最终 head 上重新确认受影响的后端与 Web 验证结果
* fix(review-feedback-1823): 解决冲突并确认冲突解决后的最终 head 仍通过对应验证
* fix(review-feedback-1823): 处理旧 both 历史记录在 JP/KR 复盘上下文匹配中的语义兼容风险
2026-06-28 18:53:39 +08:00
zhulinsen
ade3b4cb6e
feat: add JP KR market review support ( #1822 )
...
* feat: add JP KR market review support
* fix(review-feedback-1822): update the Market Light schema/service support before accepting these
* fix(review-feedback-1822): add JP/KR to daily market context before accepting them and update
* fix(review-feedback-1822): add English JP/KR strategy text or make the renderer language-aware
* fix(review-feedback-1822): update the prompt role/shell alongside the new accepted regions
* fix(review-feedback-1822): 修正 PR 描述中的过期验证结论,并补充/澄清 JP/KR Yahoo Finance 指数兼容性证据或在线验证边界
* fix(review-feedback-1822): 收敛 Market Light 告警契约与用户文档同步问题
* fix(review-feedback-1822): 修正后再合入
* fix(review-feedback-1822): 补齐外部 Yahoo Finance 指数接入与运行时配置变更的兼容性/迁移证据,并修正 PR 描述中与当前 CI 状态不一致的内容
* fix(review-feedback-1822): 当前 CI 状态为 failure,且阻断型 backend-gate 失败
* fix(review-feedback-1822): 修复 MARKET REVIEW REGION 逗号值在交易日过滤与配置 schema 中的契约漂移,并补充对应回归测试
* fix(review-feedback-1822): 收敛 PR 描述中的验证状态与用户可见 Web 改动证据
* fix(review-feedback-1822): 修正 PR 描述中的过期验证结论,并补充 Web 设置变更的截图或无法截图时的替代可视证据说明
* fix(review-feedback-1822): 收敛 PR 描述中的验证状态,并补齐 Web 设置变更的截图或替代可视证据
* fix(review-feedback-1822): 收敛 PR 描述后再合入
* fix(review-feedback-1822): 收敛 PR 描述中的验证状态,并补充 Web 设置变更截图或无法截图时的替代可视证据说明
* fix(review-feedback-1822): 收敛验证状态和 Web UI 可视证据,避免合入记录与实际 head 不一致
* fix(review-feedback-1822): 收敛 PR 描述中的验证状态与 Web 可视证据
* fix(review-feedback-1822): 收敛 PR 描述中的验证状态,并补齐 Web 设置变更的截图或替代可视证据说明
* fix(review-feedback-1822): 修正 PR 描述与当前 CI 事实不一致的问题,补充 Web 设置可视证据,并收敛或拆出 PR 模板改动
* fix(review-feedback-1822): 收敛 PR 描述与证据
* fix(review-feedback-1822): 修正 PR 描述与证据,使验证状态、用户可见变更证据、模板改动范围和当前 head 保持一致
* fix(review-feedback-1822): 收敛 PR 描述、补齐可视证据,并澄清/补充外部模型/API 与运行时配置迁移相关兼容性证据
* fix(review-feedback-1822): 收敛 Web/文档契约不一致、同步残留测试,并更新 PR 描述与可视证据
2026-06-28 17:03:15 +08:00
LunarFeller
35943d7fe8
fix(serve): import app object before uvicorn startup probe ( #1760 )
...
main.py --serve-only passes the app to uvicorn as the import string
"api.app:app", so uvicorn imports the app lazily inside the server
thread. That import (litellm + the full app tree, ~10s+ on constrained
hosts) runs inside the 3.0s startup self-check window, so the probe
times out and --serve-only returns 1, causing a container restart loop
on slower machines (e.g. a 2 vCPU VPS). Faster hosts finish the import
under 3s and pass, which is why the issue was spec-dependent and
long unreported.
Import the ASGI app object in the calling thread before the probe and
hand the object to uvicorn, so the heavy import stays out of the probe
window. Genuine import failures still surface immediately. Update the
start_api_server unit tests to stub api.app the same way they already
stub uvicorn.
Fixes #1759
Co-authored-by: gang.wu@ximalaya.com <gang.wu@ximalaya.com >
Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com >
2026-06-22 21:11:38 +08:00
mumu
f2e778c058
feat: 支持客户端多时间定时推送 ( #1731 )
...
* feat: support runtime multi-time scheduling
* fix(review-feedback-1731): 修复 and add the missing workers value here, likely None to preserve the
* fix: refine scheduler settings UI
* fix: compact scheduler time inputs
* fix(review-feedback-1731): Refresh scheduler status after saving changes
* fix(review-feedback-1731): Refresh scheduler status after env imports
* fix(review-feedback-1731): Do not mark swallowed analysis failures as success
* fix: align serve scheduler ownership
* fix: preserve runtime scheduler startup semantics
* fix: ignore immediate run when cli owns schedule
* fix(review-feedback-1731): main.py + api/app.py:--serve-only 下虽然 runtime schedule requested 被置为
* fix(review-feedback-1731): apps/dsa-desktop/main.js / main.py / api/app.py / src/services/runtime
* fix: preserve runtime scheduler ownership semantics
* fix(review-feedback-1731): 修正 Desktop 启动会自动分析/调度,以及 Web 调度开关在 runtime 状态与持久配置不一致时无法触发 reconcile 的问题
* fix: remove duplicate scheduler save diff variable
* fix: allow empty schedule times config
* fix: reject busy scheduler run-now requests
* fix(review-feedback-1731): 确认并修正 runtime scheduler 重建时可能重复注册 AGENT EVENT MONITOR ENABLED 后台任务的问题
* fix: keep runtime event monitor idempotent
* fix: preserve runtime scheduler CLI flags
* fix(review-feedback-1731): preserve schedule CLI flags in runtime runs
* fix(review-feedback-1731): 修正 --serve --schedule / --serve + SCHEDULE ENABLED=true 下 API
* fix(review-feedback-1731): 修复当前 diff 引入的运行时并发风险和 Uvicorn 兼容风险
2026-06-21 22:24:19 +08:00
mumu
0ab94a8c3e
fix: support KR stock autocomplete suggestions ( #1723 )
...
* fix: support KR stock autocomplete suggestions
* fix(review-feedback-1723): 补充自动补全 JP/KR 建议渲染截图、前后对比或无法截图说明
* fix(review-feedback-1723): 补充 Web 自动补全 JP/KR 建议渲染的截图或无法截图说明
* fix(review-feedback-1723): docs/review-evidence-kr-autocomplete-ui.md 是针对本 PR
* fix(review-feedback-1723): 修正 PR 描述与当前 head 的实际改动、验证范围不一致问题
* fix(review-feedback-1723): 修正 PR 描述与当前 diff 的实质性不一致,避免合入记录误导后续维护者
* fix(review-feedback-1723): 收敛 PR 描述与实际 diff 的契约不一致,避免用户误以为裸 005930 已会解析为 005930.KS
* fix(review-feedback-1723): 把描述、验证证据和兼容性说明收敛到当前 6 个改动文件真实范围,或补齐描述中声称的后端/历史链路实现与测试
* fix(review-feedback-1723): 收敛 PR 描述与实际 diff,避免把未实现的 bare-code/历史展示能力作为本 PR 已交付内容合入
* fix(review-feedback-1723): 补上相应真实代码与测试后再审
* fix(review-feedback-1723): 补齐所声称的后端实现与测试后再评审
* fix(review-feedback-1723): PR description 与当前完整 diff 不一致:描述声称新增 bare JP/KR code
* fix(review-feedback-1723): PR 描述与当前完整 diff 不一致
* fix(review-feedback-1723): 补充 Refs 1718,方便后续追踪
* fix(review-feedback-1723): 收敛描述与验证证据
* fix: resolve JP KR bare stock codes
* fix: backfill JP KR daily analysis context
* fix(review-feedback-1723): preserve persisted phase timing
* fix: align JP KR history lookup keys
* fix(review-feedback-1723): preserve raw code for snapshot lookups
* fix(review-feedback-1723): 收敛
2026-06-20 10:39:40 +08:00
mumu
a82ae51ca8
feat: enable daily market context by default ( #1673 )
2026-06-13 10:58:18 +08:00
mumu
0db0c78da8
feat: 个股分析接入当日大盘上下文 ( #1623 )
...
* feat: add daily market context for stock analysis
* fix(review-feedback-1623): Share the market context service across worker threads and Use the
* fix(review-feedback-1623): Avoid overwriting per-region context reports and Expand history lookup
* fix(review-feedback-1623): add position even though the guardrail supposedly softened the
* fix(review-feedback-1623): Avoid generating the CLI market review twice
* fix(review-feedback-1623): 修正
* fix(review-feedback-1623): 修复普通 CLI/调度运行中大盘复盘被上下文预热摘要替代的问题,并收敛 PR 描述与当前实现范围
* fix(review-feedback-1623): 修正保守护栏的误判风险,并同步收敛 PR 描述范围
* fix(review-feedback-1623): 处理并发生成大盘上下文的锁语义风险,并澄清/补充外部模型或运行时配置风险检测的依据
* fix(review-feedback-1623): 收敛大盘上下文预热对用户可见大盘复盘的行为影响,并补齐外部模型/API 与运行时配置检测风险的澄清或验证证据
* fix(review-feedback-1623): Do not skip multi-market reviews after one cached context and Do not
* fix(review-feedback-1623): Prime context with the effective trading date
* fix(review-feedback-1623): 收敛 PR 描述与实际 diff 的范围不一致,并澄清结构化检测提示的 provider/model/base
* fix(review-feedback-1623): 补一句“本 PR 不修改 LLM provider/model/base url、默认模型、配置清理或迁移逻辑”,避免后续审查继续误判
* fix(review-feedback-1623): 收敛 PR 描述与实际 diff 的范围矛盾
* fix(review-feedback-1623): 补齐这些承诺的实现
* fix(review-feedback-1623): 收敛 PR 描述与实际 diff 范围,避免以未实现能力作为验收项
* fix(review-feedback-1623): 收敛 PR 描述与实际范围,并澄清外部模型/API 与运行时配置检测风险
* fix(review-feedback-1623): Match freshly saved reviews to the target trade date
* fix(review-feedback-1623): preserve structured market-light risk signals
* fix(review-feedback-1623): Escape market-summary sentinels before prompting
* fix(review-feedback-1623): 修复同日缓存复用时把低敏摘要当完整大盘复盘输出的行为风险,并收敛 PR 描述与实际 diff
* fix(review-feedback-1623): 收敛
* fix(review-feedback-1623): 收敛 PR 描述与实际 scope
* fix(review-feedback-1623): 修正大盘复盘复用语义,并让 PR 描述与实际 scope 对齐
* fix(review-feedback-1623): 修正同日大盘上下文缓存复用语义,并让 PR 描述与实际 scope 对齐
* fix(review-feedback-1623): Disable cached market context when skipping market review
* fix(review-feedback-1623): 收敛 PR 描述与实际 scope,并补充外部模型/API 与运行时配置语义未变化的可核验证据
* fix(review-feedback-1623): 修正 PR 描述与实际 scope 的实质性不一致,并补齐或澄清 LLM/provider/model/base URL
* fix(review-feedback-1623): 修正 operation advice 契约漂移,并让 PR 描述/验收范围与当前实际 diff 对齐
* fix(review-feedback-1623): 收敛 main.py 中大盘复盘复用导致的通知/执行语义变化,并补对应回归测试
* fix(review-feedback-1623): 修复生成型大盘上下文未绑定当前 query id 的行为风险,并收敛 PR body 与实际 diff 范围
* fix(review-feedback-1623): 修复缓存语言匹配问题,并收敛 PR 描述与实际 diff/验收范围的一致性
* fix(review-feedback-1623): 收敛当前实现与描述/文档中的验收边界,并澄清 schedule/CLI 首次运行无历史大盘复盘时是否应生成并注入上下文
* fix(review-feedback-1623): 收敛 PR 描述与 docs/CHANGELOG.md 中关于验收边界的表述,避免与实际 diff 实质性矛盾
* fix(review-feedback-1623): 修正 PR 描述与实际 diff 的范围漂移
* fix(review-feedback-1623): Reuse the cached runtime market context on fallback
* fix(review-feedback-1623): PR 描述:当前完整改动文件列表没有 api/ 、apps/dsa-web/ 、日报状态表或四阶段日报持久化相关实现,但 PR
* fix(review-feedback-1623): 收敛描述范围
* fix(review-feedback-1623): 收敛并发生成复用路径的正确性风险,并修正 PR 描述的实际范围与验收项
* fix(review-feedback-1623): 收敛描述和验收范围
* fix(review-feedback-1623): PR 描述的 Background / Acceptance Criteria 仍包含独立 API、Web
* fix(review-feedback-1623): 收敛 PR 描述与实际实现边界,并补齐 LLM/provider/base url 相关兼容性说明或验证证据
* fix(review-feedback-1623): PR 描述与实际 diff 范围不一致:描述和验收项仍写有独立 API、Web
* fix(review-feedback-1623): Wait long enough for in-flight market reviews
* fix(review-feedback-1623): 修复共享 market review lock 释放后仍不生成匹配上下文的行为风险,并同步收敛 PR description 的实际范围
* fix(review-feedback-1623): 修复锁竞争 fallback 下丢失运行时服务的问题,并同步收敛 PR description 与实际 diff 范围
* fix(review-feedback-1623): 收敛 PR description 与实际改动范围
* fix(review-feedback-1623): PR 描述与实际 diff 存在实质性矛盾:描述声称提供独立 API、Web
* fix(review-feedback-1623): reuse runtime market context and handle English negations
* fix: honor daily market context config
* docs: remove unrelated changelog entries
* fix(review-feedback-1623): preserve the skipped market-review artifact
* fix(review-feedback-1623): add low position cap and are not in CONSERVATIVE TEXT MARKERS , so an
2026-06-13 10:33:04 +08:00
mumu
4b3f679b2d
feat: adapt AlphaSift hotspot topics ( #1635 )
...
* feat: adapt AlphaSift hotspot topics
* fix(review-feedback-1635): preserve cached hotspots when refresh returns no rows and Avoid
* fix(review-feedback-1635): Reload detail when refreshing the selected hotspot and Fall back when
* fix(review-feedback-1635): update by the requested topic or a request token
* fix(review-feedback-1635): preserve analysis when optional serve startup fails and Fall back when
* fix(review-feedback-1635): 当前 CI 状态为 failure,且 backend-gate 为 cancelled、docker-build 为 skipped
* fix(review-feedback-1635): 让 backend-gate / docker-build 在当前 head 上完成并通过,或给出可接受的维护者级豁免说明
* fix(review-feedback-1635): 当前 CI 仍未闭环:结构化事实显示 backend-gate 被取消、docker-build skipped
* fix(review-feedback-1635): 修复 hotspot detail 的上游 schema 容错问题,并让当前 head 的阻断 CI 重新跑通
* fix(review-feedback-1635): docs/CHANGELOG.md:当前 diff 不是在 [Unreleased] 扁平格式下追加本 PR
* fix(review-feedback-1635): CI 闭环未完成:结构化事实显示当前 CI 状态为 failure,backend-gate cancelled、docker-build
* fix(review-feedback-1635): 让当前 head 的阻断型 CI 完整通过,并修正文档中的 AlphaSift commit hash 不一致
* fix(review-feedback-1635): CI 仍未在当前 head 完整通过:结构化事实显示
* fix(review-feedback-1635): 修复 docs/CHANGELOG.md 对主线既有 [Unreleased] 条目的删除,并补齐 AlphaSift
* fix(review-feedback-1635): Accept slash-containing hotspot topics
* fix(review-feedback-1635): Try industry constituents for industry hotspots
* fix(review-feedback-1635): Clear old hotspot details when loading a new topic and preserve the
* test: isolate main schedule environment
* chore: clean AlphaSift PR scope
* fix: respect AlphaSift hotspot fallbacks
2026-06-12 22:38:42 +08:00
LouisHong
4f536026f8
fix: clarify runtime logging context ( #1643 )
...
* fix: clarify market review logging context
* docs: update changelog for logging context
2026-06-09 01:08:55 +08:00
mumu
e2fe6e3056
fix: verify packaged AlphaSift adapter at runtime ( #1637 )
...
* fix: verify packaged AlphaSift adapter at runtime
* fix(review-feedback-1637): Wait for the windowed probe process
* fix(review-feedback-1637): 收敛 docs/CHANGELOG.md 的范围漂移/描述不一致问题
* fix(review-feedback-1637): 收敛 docs/CHANGELOG.md 的无关历史改动,只保留本 PR 对 [Unreleased] 的新增修复条目
2026-06-08 07:21:59 +08:00
fzxiong
39f24df60b
代码健康修复:稳定测试、健康检查、错误响应与 schema 版本记录 ( #1607 )
...
* fix(api): return json from root health endpoint
* test(web): stabilize vitest runtime setup
* chore(security): warn on public web exposure without auth
* refactor(api): centralize error response helpers
* chore(db): record baseline schema version
* refactor(web): extract portfolio formatting helpers
* fix(db): make schema baseline initialization idempotent
* docs: document health check and schema baseline changes
2026-06-05 21:26:06 +08:00
mumu
a13863e50e
fix: 为 Akshare 历史兜底接口增加超时保护 ( #1465 )
...
* fix(issue-1464): [bug]-scheduled-analysis-hangs-when-stoc
* fix(review-feedback-1465): Avoid leaking daemon threads on timed-out Akshare calls
* fix(review-feedback-1465): fix can reintroduce hangs/crashes in the exact scheduled pipeline it
* fix(review-feedback-1465): Use a safe start method for timeout subprocesses
* fix(review-feedback-1465): Call freeze support before spawning timeout workers
2026-05-27 21:18:23 +08:00
LouisHong
c1b17bc5ec
fix: [issue #1446 ] 支持股票自动补全索引远程刷新 ( #1480 )
...
* feat: add remote stock index cache refresh
* test: cover remote stock index cache refresh
* docs: document remote stock index updates
* fix: harden stock index refresh and selection
* fix: stabilize stock index fallback selection
2026-05-27 20:55:37 +08:00
Alfred
adaf6cbfbe
feat: 增加 P2 告警评估 Worker ( #1323 )
...
* feat: add alert evaluation worker
* fix: retry failed alert notifications
2026-05-17 16:32:24 +08:00
mumu
8a0b093d24
fix: auto repair Docker mount permissions ( #1263 )
2026-05-11 23:13:37 +08:00
mumu
d2f677fe5b
fix(issue-1261): [bug]-docker-部署启动失败 ( #1262 )
2026-05-11 22:05:09 +08:00
mumu
c325a14b8f
Add web market review trigger ( #1242 )
...
* feat: add web market review trigger
2026-05-10 15:05:31 +08:00
Alfred
0adcef3627
feat: add notification routing strategy ( #1248 )
...
Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com >
2026-05-10 13:24:02 +08:00
Alfred
f9549c7f39
fix: add notification baseline diagnostics ( #1200 ) ( #1205 )
...
Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com >
2026-05-06 18:46:35 +08:00
Tom
abde35bbf9
集成Anspire search ( #982 )
...
* 集成Anspire search
* fix: add anspire_api_keys to config and handle safely
* fix: add anspire_api_keys to config and handle safely
* 修改单元测试文件、硬编码问题、systemConfigI18n描述
---------
Co-authored-by: xiaowei <4775987@qq.com >
2026-04-07 12:01:39 +08:00
mumu
cfdf0330fb
fix: 修复启动早期失败时日志缺失与根因不透明问题 ( #839 ) ( #932 )
...
* fix(issue-839): [bug]-今天突然就跑不动了
* fix(review-feedback-932): address latest review comments
* fix(review-feedback-932): address latest review comments
* fix(review-feedback-932): address latest review comments
* fix(review-feedback-932): address latest review comments
* fix: add current_time=None to test mock to match updated process_single_stock signature
* fix: rebuild main.py from main and re-apply bootstrap logging improvements
---------
Co-authored-by: Your Name <your_email@example.com >
2026-04-01 15:31:36 +08:00
mumu
2134b47c3f
fix: 修复 WebUI 修改 SCHEDULE_TIME 后运行中的本地内置调度器仍固定在… ( #819 ) ( #914 )
...
* fix(issue-819): [bug]
* fix(review-feedback-914): address latest review comments
* fix(review-feedback-914): address latest review comments
* fix(review-feedback-914): address latest review comments
* fix(review-feedback-914): address latest review comments
2026-03-31 18:46:26 +08:00
mumu
7f201f3b27
fix: restore #648/#649 agent capabilities on main ( #822 )
...
* feat: bot commands & async dispatch — /ask, /chat, /history, /strategies, NL routing (#648 )
* feat: bot commands & async dispatch — /ask, /chat, /history, /strategies, NL routing
- CommandDispatcher with dispatch_async() and NL routing
- /ask multi-stock analysis (parallel execution, portfolio overlay)
- /chat free-form conversation with session persistence
- /history per-user session isolation (colon delimiter format)
- /strategies with category grouping and activation status
- Two-layer NL routing: regex pre-filter → LLM intent parsing
- Async webhook handler for FastAPI integration
- Feishu stream: capped ThreadPoolExecutor replaces unbounded threads
- DingTalk stream: direct async handler awaiting
* fix: address PR #648 review comments
- ask.py: simplify validate_args error message, add _merge_code_args() for comma+space separated codes
- chat.py: simplify validate_args error message
- feishu_stream.py: shutdown ThreadPoolExecutor in stop()
- test_ask_command.py, test_bot_dispatcher_async.py: replace sys.modules litellm hack with litellm_stub
* fix(bot): preserve ask strategy args and serialize Feishu replies
* fix(strategies): remove activate() side-effect from /strategies command
/strategies is a read-only listing command but was calling
sm.activate() which mutates the skill manager state. Replace with
a config-based set lookup (configured_active) to derive ✅ /⬜
status without any write operations. This makes the command
purely read-only and eliminates the risk of altering subsequent
/ask or /chat agent skill sets.
(cherry picked from commit a472b824a8 )
* feat: deep research agent & event monitor — /research command, alert rules, scheduler integration (#649 )
* feat: deep research agent & event monitor — /research command, alert rules, scheduler integration
- ResearchAgent with 3-phase approach (decompose → research → synthesise)
- Token budget tracking for deep research queries
- /research bot command with aliases (/深研, /deepsearch)
- REST endpoint POST /api/v1/agent/research
- EventMonitor with PriceAlert/VolumeAlert rules
- Scheduler background task system for periodic alert polling
- EventMonitor config validation in system_config_service
- main.py: EventMonitor wiring into schedule mode
- Unsupported rule type rejection at config and runtime level
* fix: address PR #649 review comments
- events.py: fix to_dict_list docstring, validate created_at as float, raise ValueError on non-dict rules
- research.py: remove unused import uuid
- agent.py: replace nested ThreadPoolExecutor with asyncio.wait_for, use Field(default_factory=list), pass stock_code context
- scheduler.py: clamp minimum interval_seconds to 30s
- test_multi_agent.py: reduce sleep 3s→0.05s and timeout 1s→0.01s to speed up tests
* fix: normalize price alert direction and tighten research ticker regex
- events.py from_dict_list: .lower() on deserialized direction so
_check_price matches correctly (fixes silent missed alerts for
mixed-case config like {"direction":"Above"})
- research.py: restrict US ticker auto-detection to 1-4 chars
(was 1-5); avoids misclassifying common words (MACRO, TREND)
as stock codes in /research topic queries
(cherry picked from commit 28126db5bd )
* fix: reconcile recovered agent features with current main
* fix: address review feedback and backend gate failures
* fix: address remaining review feedback
* fix: restore bot agent gating and research timeout handling
2026-03-27 21:29:50 +08:00
zhulinsen
d23e53f0c2
release: prepare v3.10.0
2026-03-24 22:16:23 +08:00
Alfred
3eabeda06c
feat: 支持 SearXNG 公共实例自动发现与受控轮询 ( #752 ) ( #769 )
...
* feat: support SearXNG public instance discovery (#752 )
* fix: back off cold-start failures for public searxng (#752 )
2026-03-19 12:40:21 +08:00
Alfred
eaa25f8a26
[ #697 ] fix: 新闻时效硬过滤与策略分窗 ( #707 )
...
* fix: enforce strict news freshness windows (#697 )
* fix: normalize timezone-aware publish date parsing (#697 )
* fix: align analyzer news window with runtime pipeline config (#697 )
2026-03-16 22:40:45 +08:00
mumu
d42952ef5e
Improve analysis API async contracts and startup helpers ( #656 )
...
* Improve analysis API async contracts and startup helpers
* Fix rebased analysis API contract regressions
* fix: align frontend report type union with full responses
2026-03-15 20:54:04 +08:00
Alfred
4608f8f3a6
[feat] 增加 SearXNG支持 Issue #550 ( #588 )
...
* feat(search): add SearXNG support as quota-free fallback (Fixes #550 )
Made-with: Cursor
* fix(pr-588): address Copilot review - test robustness, config urlparse, doc typo
- tests: fix flaky published_date assertion; add sleep patch to 3 retry tests; remove unused SearchResult import
- config: replace double urlparse with single-pass loop for SEARXNG_BASE_URLS
- docs: correct SERPAPI_KEYS to SERPAPI_API_KEYS in zeabur-deployment.md
Made-with: Cursor
2026-03-11 13:36:09 +08:00
Alfred
53e3d2dead
[Feature] 报告引擎 P0:Schema、模板、完整性校验、Brief 模式、历史对比 ( #560 ) ( #561 )
...
* chore(config): add report engine feature flags and template settings
* feat(analyzer): add pydantic schema validation for llm report json
* feat(report): report engine P0 - schema, templates, integrity, brief mode, history comparison
- Pydantic AnalysisReportSchema for LLM JSON validation
- Jinja2 templates (markdown, wechat, brief) with configurable dir
- Content integrity check with retry and placeholder fallback
- Brief mode (REPORT_TYPE=brief) for 3-5 sentence summary
- History comparison service for signal changes across runs
- generate_aggregate_report unified entry, ReportType.from_str(detailed)
- Config: REPORT_TEMPLATES_DIR, REPORT_RENDERER_ENABLED, etc.
Fixes #560
2026-03-09 21:35:55 +08:00
Haode Du
049e7e8f59
feat: add MiniMax Coding Plan web search provider ( #493 )
...
* feat: add MiniMax Coding Plan web search provider
- Add MiniMaxSearchProvider class with POST API to api.minimaxi.com
- Priority: Bocha > MiniMax > Tavily > Brave > SerpAPI
- Dual time-filtering: query augmentation + client-side date filtering
- Circuit breaker: 3 consecutive failures -> 300s cooldown
- New MINIMAX_API_KEY env var (supports multiple keys, comma-separated)
- Update config.py, search_service.py, .env.example
* docs: add MiniMax search provider to all documentation
- .env.example: add MINIMAX_API_KEY and BOCHA_API_KEYS with priority note
- README.md: update tech stack table and secrets table
- docs/full-guide.md: add MiniMax to config tables and search service section
- docs/full-guide_EN.md: add MiniMax to config tables and search service section
- docs/README_EN.md: update tech stack and secrets tables
- docs/README_CHT.md: update tech stack and secrets tables
- docs/DEPLOY.md: add MiniMax to env var tables
- docs/DEPLOY_EN.md: add MiniMax to env var tables
- docs/docker/zeabur-deployment.md: add MiniMax to analysis config table
- docs/CHANGELOG.md: add MiniMax provider to Unreleased section
* update doc
* refactor(search_service): 调整搜索提供者初始化顺序及参数位置
将MiniMax搜索提供者的参数位置和初始化顺序调整到最后,保持代码逻辑清晰
* 添加其他多处minimax_api_keys支持并调整参数顺序
* 增加 Bocha 和 Minimax 的前端配置
* fix: 将MINIMAX_API_KEYS改为单数形式
* docs(CHANGELOG): 调整MiniMax搜索提供商的优先级顺序
更新CHANGELOG.md中MiniMax搜索提供商的优先级描述,从Bocha > MiniMax > Tavily > Brave > SerpAPI调整为Bocha > Tavily > Brave > SerpAPI > MiniMax
* fix: 统一 MINIMAX_API_KEY 为 MINIMAX_API_KEYS 以保持命名一致性
---------
Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com >
2026-03-09 21:29:56 +08:00
zhulinsen
244b7f8797
fix: hot-reload STOCK_LIST on scheduled runs and fix SPA MIME types ( #529 , #520 )
...
- Refresh config.stock_list from .env before each scheduled analysis
so that runtime changes to STOCK_LIST take effect without restart.
- Resolve MIME type explicitly in serve_spa to prevent browsers from
rejecting JS module scripts served as text/plain.
fixes #529
fixes #520
2026-03-06 22:05:08 +08:00
zhulinsen
24d55204d9
fix: bug fixes, CHANGELOG restructure, and CI/release improvements
...
- Fix Telegram _convert_to_telegram_markdown escaping [text](url) links
- Fix duplicate discord_bot_status field silently shadowing Config.discord_bot_status
- Remove unused shutil/subprocess imports from main.py
- Restructure CHANGELOG.md into versioned sections; rename v3.5.0 -> v3.4.7
- Add .github/release.yml for auto-categorized GitHub Release notes by PR label
- Switch auto-tag.yml from opt-out (#skip) to opt-in (#patch/#minor/#major)
- Add FAQ Q17 and full-guide section for non-trading day manual run (fixes #461 docs)
- Update AGENTS.md delivery checklist
2026-02-28 21:04:51 +08:00
Krane
b77519fbfb
fix: webui 启动时自动 build 页面问题 ( #460 )
2026-02-28 16:45:48 +08:00
zhulinsen
2349ac90c7
feat: auto-build frontend assets on WebUI startup and show guide page when not built
...
- Add prepare_webui_frontend_assets() to main.py: auto-runs npm install && npm
run build in apps/dsa-web before starting FastAPI server
- New env var WEBUI_AUTO_BUILD (default: true) to control auto-build behavior
- Replace bare JSON root response with styled HTML guide page when frontend
static files are not present (api/app.py)
- Remove unused RootResponse import from api/app.py
- Update README.md startup instructions and .env.example documentation
- Add changelog entry in docs/CHANGELOG.md
#patch
2026-02-27 20:13:22 +08:00
Alfred
0e2e111545
feat: add trading day check (Issue #373 ) ( #375 )
...
- Add trading_calendar module with exchange-calendars for A/HK/US markets
- Per-stock filtering: analyze only stocks whose markets are open today
- Add TRADING_DAY_CHECK_ENABLED config and --force-run CLI override
- Add is_hk_stock_code to data_provider public API
- Update CHANGELOG, full-guide, README, .env.example
2026-02-24 20:12:18 +08:00
zhulinsen
e780f840a3
feat: add RUN_IMMEDIATELY config, fix web UI centering and settings 500 error
2026-02-22 22:24:09 +08:00
Alfred
0780cfbd7d
fix: BOT 与 WEB UI 股票代码大小写统一 ( fixes #355 ) ( #356 )
...
- 新增 canonical_stock_code(),统一入口处规范化
- BOT analyze: lower() -> strip().upper()
- Config/API/task_queue/main: 股票代码解析时应用规范化
- 历史记录与任务去重可正确识别同一股票
2026-02-21 17:58:48 +08:00
Alfred
7cf1925179
增加 PE 指标、新闻时效性筛查与强势趋势股乖离率放宽 ( fix #296 ) ( #340 )
...
* feat: add PE valuation guidance, news freshness, and strong-trend bias relief (Issue #296 )
- NEWS_MAX_AGE_DAYS: configurable news max age (default 3 days)
- BIAS_THRESHOLD: configurable MA5 bias threshold (default 5.0%)
- Strong trend compensation: relax bias threshold 1.5x for STRONG_BULL with strength>=70
- AI system prompt: add PE valuation focus and strong-trend relief guidance
- SearchService: pass days param to search_comprehensive_intel
- Config/pipeline robustness: boundary clamping, NaN defense
* test: add unit tests for Issue #296 (bias relief, news freshness)
2026-02-16 20:16:35 +08:00
Alfred
542c8e4314
feat: merge stock and market report into one notification (Issue #190 ) ( #330 )
...
- Add MERGE_EMAIL_NOTIFICATION env var (default false) to control merged push
- When enabled, combine个股分析 and 大盘复盘 into single notification
- Reduces email count and spam detection risk
- Incompatible with SINGLE_STOCK_NOTIFY, merge disabled in single-stock mode
- Update README, .env.example, full-guide, CHANGELOG
Fixes #190
2026-02-15 19:11:58 +08:00
mumu
2692b20c2d
feat: add schedule immediate run config and fix docker build ( #333 ) fixes #332
...
* feat: add schedule immediate run config and fix docker build
1. Fix Docker build failure by adding missing `patch/` directory copy.
2. Add comprehensive module import smoke tests in CI to prevent future regressions.
3. Add `SCHEDULE_RUN_IMMEDIATELY` config and `--no-run-immediately` arg to control whether scheduled tasks run on startup.
4. Update documentation for scheduled task configuration.
* fix import error
2026-02-15 14:57:27 +08:00
Krane
5f21df5a95
Bugfix/package import error ( #325 )
...
* fix: StockAnalysisPipeline 导入错误
2026-02-14 15:29:54 +08:00