Skip to content

Commit 07239db

Browse files
committed
docs(changelog): prepare v3.9.0 release notes
1 parent 6c0a5f2 commit 07239db

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

docs/CHANGELOG.md

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
99
1010
## [Unreleased]
1111

12-
### 修复
12+
## [3.9.0] - 2026-03-20
1313

14-
- 🔎 **Web 自动补全 Enter 提交语义修正** — 股票自动补全在搜索命中候选时不再默认高亮第一项;候选列表展开但用户尚未用方向键或鼠标明确选中时,按 Enter 会继续提交原始输入,避免手动输入被第一条候选静默覆盖。
15-
- 🌍 **补齐 `REPORT_LANGUAGE` 启动解析与历史展示本地化边界**`Config` 在启动时继续遵循“真实环境变量优先、`.env` 兜底”的既有语义,并在两者冲突时输出显式告警,减少 `REPORT_LANGUAGE` 来源不清带来的误判;同时 `/api/v1/history/{id}` 英文详情响应会同步本地化 `sentiment_label`,历史 Markdown 也会正确识别英文 `bias_status` 的风险等级 emoji,避免出现 `乐观``🚨Safe` 这类中英混排/误报展示。
16-
- 📰 **Tavily 时效新闻检索发布时间映射修复**#782)— Tavily 在股票新闻和严格时效的情报维度中现在会显式使用 `topic="news"`,并兼容 `published_date` / `publishedDate` 两种发布时间字段;修复了 Tavily 明明返回结果却在后续硬过滤阶段被全部记为 `drop_unknown` 丢弃的问题,同时将机构分析、业绩预期、行业分析等分析型维度恢复为宽源搜索,不再被统一压缩成新闻模式。
14+
### 发布亮点
15+
16+
- 🤖 **模型链路与报告语言更灵活** — Agent 现在可以通过 `AGENT_LITELLM_MODEL` 独立选择模型链路,普通分析与 Agent 报告也可通过 `REPORT_LANGUAGE=zh|en` 输出统一语言,减少“英文内容 + 中文壳子”这类混排问题,并允许团队分别权衡主分析与 Agent 的成本、速度和能力。
17+
- 🔎 **首页分析体验完成一轮闭环优化** — 首页新增 A 股自动补全,支持代码、中文名、拼音和别名检索;同时 Dashboard 状态收口到统一 store,历史、报告、新闻与 Markdown 抽屉的交互更稳定,“Ask AI” 追问也会优先携带当前报告上下文。
18+
- 💬 **通知与检索能力继续外扩** — 新增 Slack 一等通知渠道;SearXNG 在未配置自建实例时可以自动发现公共实例并按受控轮询降级;Tavily 时效新闻链路修复后,严格时效过滤不再错误丢光有效结果。
19+
- 💼 **持仓与市场复盘链路更稳** — A 股 market review 可选接入 TickFlow 强化指数与涨跌统计;持仓账本写入改为串行化以缩小并发超卖窗口;汇率刷新入口和禁用态提示也更加清晰,减少用户误判。
1720

1821
### 新功能
1922

20-
- 🔎 **Web 股票自动补全 MVP** — 首页分析输入框新增本地索引驱动的自动补全,支持股票代码、中文名、拼音和别名匹配;选中候选后会提交 canonical code,并透传 `stock_name``original_query``selection_source` 到分析请求、任务状态和 SSE 事件;索引加载失败时自动退回旧输入模式,不阻断原有提交流程。同步补充了静态索引加载器、索引生成脚本和前后端契约测试。分阶段进行开发,第一阶段仅支持A股。
21-
- 🔎 **SearXNG 公共实例自动发现与受控轮询**#752)— 新增 `SEARXNG_PUBLIC_INSTANCES_ENABLED`,在未配置 `SEARXNG_BASE_URLS` 时默认从 `searx.space` 拉取公共实例列表,并按受控轮询顺序选择实例;同次请求内遇到超时、连接错误、HTTP 非 200 或无效 JSON 会自动切换到下一个实例。已配置自建实例的用户保持原有优先级与语义不变;`daily_analysis` GitHub Actions 工作流也已支持显式透传该开关并在启动日志中展示当前状态。
22-
- 📈 **TickFlow market review enhancement** (#632) — 新增可选 `TICKFLOW_API_KEY`;配置后,A 股大盘复盘的主要指数行情优先尝试 TickFlow;若当前 TickFlow 套餐支持标的池查询,市场涨跌统计也会优先尝试 TickFlow。失败或权限不足时立即回退到现有 `AkShare / Tushare / efinance` 链路;板块涨跌榜回退顺序保持不变。接入层同时适配了真实 SDK 契约:主指数查询按单次请求上限分批拉取,并将 TickFlow 返回的比例型 `change_pct` / `amplitude` 统一转换为项目内部的百分比口径。
23+
- 🔎 **Web 股票自动补全 MVP** — 首页分析输入框新增本地索引驱动的自动补全,支持股票代码、中文名、拼音和别名匹配;选中候选后会提交 canonical code,并透传 `stock_name``original_query``selection_source` 到分析请求、任务状态和 SSE 事件;索引加载失败时自动退回旧输入模式,不阻断原有提交流程。同步补充了静态索引加载器、索引生成脚本和前后端契约测试。分阶段进行开发,第一阶段仅支持 A 股。
2324
- 💬 **Slack 一等通知渠道** — 新增 Slack 原生通知支持,同时支持 Bot Token 和 Incoming Webhook 两种接入方式;同时配置时优先使用 Bot API,确保文本与图片发送到同一频道;Bot Token 模式支持图片上传(raw body POST,不使用 multipart);新增 `SLACK_BOT_TOKEN``SLACK_CHANNEL_ID``SLACK_WEBHOOK_URL` 配置项,GitHub Actions 工作流同步补齐对应 Secrets 传递。
24-
- 💼 **持仓账本并发写入串行化**#742)— 持仓源事件写入/删除现在会在 SQLite 下先获取串行化写锁,减少并发卖出把超售流水写入账本的窗口;直接持仓写接口在锁竞争时返回 `409 portfolio_busy`,CSV 导入保持逐条提交并把 busy 计入 `failed_count`
25-
- 🚀 **Agent 与普通分析模型解耦(Issue #692** — 新增 `AGENT_LITELLM_MODEL`(留空继承 `LITELLM_MODEL`,无前缀按 `openai/<model>` 归一);Agent 执行链路与 `/api/v1/agent/models``is_primary/is_fallback` 标记改为基于 Agent 实际模型链路;系统配置与启动期校验补齐 `AGENT_LITELLM_MODEL``unknown_model/missing_runtime_source` 检查;Web 设置页新增 Agent 主模型选择并与渠道模式运行时配置同步。
2625
- 🌍 **报告输出语言可配置**(Issue #758)— 新增 `REPORT_LANGUAGE=zh|en`,默认 `zh`;语言设置会同步注入普通分析与 Agent Prompt,并覆盖 Markdown/Jinja 模板、通知 fallback、历史/API `report_language` 元数据及 Web 报告页固定文案,避免“英文内容 + 中文壳子”的混合输出。
26+
- 🚀 **Agent 与普通分析模型解耦**(Issue #692)— 新增 `AGENT_LITELLM_MODEL`(留空继承 `LITELLM_MODEL`,无前缀按 `openai/<model>` 归一);Agent 执行链路与 `/api/v1/agent/models``is_primary/is_fallback` 标记改为基于 Agent 实际模型链路;系统配置与启动期校验补齐 `AGENT_LITELLM_MODEL``unknown_model/missing_runtime_source` 检查;Web 设置页新增 Agent 主模型选择并与渠道模式运行时配置同步。
27+
- 🔎 **SearXNG 公共实例自动发现与受控轮询**#752)— 新增 `SEARXNG_PUBLIC_INSTANCES_ENABLED`,在未配置 `SEARXNG_BASE_URLS` 时默认从 `searx.space` 拉取公共实例列表,并按受控轮询顺序选择实例;同次请求内遇到超时、连接错误、HTTP 非 200 或无效 JSON 会自动切换到下一个实例。已配置自建实例的用户保持原有优先级与语义不变;`daily_analysis` GitHub Actions 工作流也已支持显式透传该开关并在启动日志中展示当前状态。
28+
- 📈 **TickFlow market review enhancement** (#632) — 新增可选 `TICKFLOW_API_KEY`;配置后,A 股大盘复盘的主要指数行情优先尝试 TickFlow;若当前 TickFlow 套餐支持标的池查询,市场涨跌统计也会优先尝试 TickFlow。失败或权限不足时立即回退到现有 `AkShare / Tushare / efinance` 链路;板块涨跌榜回退顺序保持不变。接入层同时适配了真实 SDK 契约:主指数查询按单次请求上限分批拉取,并将 TickFlow 返回的比例型 `change_pct` / `amplitude` 统一转换为项目内部的百分比口径。
2729

28-
### 文档
30+
### 改进
2931

30-
- 新增 Ollama 本地模型配置说明,同步更新 README.md 与 docs/README_EN.md(Fixes #690
31-
- 完善 Ollama 配置说明:`docs/full-guide.md` / `docs/full-guide_EN.md` 环境变量表与 Note 补充 `OLLAMA_API_BASE`,避免英文用户误以为 Ollama 不能作为独立配置入口;合并重复的 `OLLAMA_API_BASE` 条目为单一条目
32+
- **Dashboard state slice and workspace closure** — moved Home / Dashboard state into `stockPoolStore`, consolidated history selection, report loading, task syncing, polling refresh, and markdown drawer handling under a single state slice.
33+
- **Dashboard panel standardization** — kept the current dashboard layout contract stable while unifying history, report, news, and markdown presentation with shared tokens, standardized states, and bounded in-panel scrolling for the history list.
34+
- **Dashboard-to-chat follow-up bridge** — routed “Ask AI” follow-ups through report-context hydration instead of direct cross-page state coupling, while keeping chat sends usable when enriched history context is still loading.
35+
- 💼 **持仓账本并发写入串行化**#742)— 持仓源事件写入/删除现在会在 SQLite 下先获取串行化写锁,减少并发卖出把超售流水写入账本的窗口;直接持仓写接口在锁竞争时返回 `409 portfolio_busy`,CSV 导入保持逐条提交并把 busy 计入 `failed_count`
36+
- 💱 **持仓页汇率手动刷新入口补齐**#748)— Web `/portfolio` 页面现在会在“汇率状态”卡片中展示“刷新汇率”按钮,直接调用现有 `POST /api/v1/portfolio/fx/refresh` 接口;刷新后会仅重载快照与风险数据,并以内联摘要反馈“已更新 / 仍 stale / 刷新失败”的结果,减少用户对 `fxStale` 长时间停留的误解。
3237

3338
### 修复
3439

40+
- 🔎 **Web 自动补全 Enter 提交语义修正** — 股票自动补全在搜索命中候选时不再默认高亮第一项;候选列表展开但用户尚未用方向键或鼠标明确选中时,按 Enter 会继续提交原始输入,避免手动输入被第一条候选静默覆盖。
41+
- 🌍 **补齐 `REPORT_LANGUAGE` 启动解析与历史展示本地化边界**`Config` 在启动时继续遵循“真实环境变量优先、`.env` 兜底”的既有语义,并在两者冲突时输出显式告警,减少 `REPORT_LANGUAGE` 来源不清带来的误判;同时 `/api/v1/history/{id}` 英文详情响应会同步本地化 `sentiment_label`,历史 Markdown 也会正确识别英文 `bias_status` 的风险等级 emoji,避免出现 `乐观``🚨Safe` 这类中英混排/误报展示。
42+
- 📰 **Tavily 时效新闻检索发布时间映射修复**#782)— Tavily 在股票新闻和严格时效的情报维度中现在会显式使用 `topic="news"`,并兼容 `published_date` / `publishedDate` 两种发布时间字段;修复了 Tavily 明明返回结果却在后续硬过滤阶段被全部记为 `drop_unknown` 丢弃的问题,同时将机构分析、业绩预期、行业分析等分析型维度恢复为宽源搜索,不再被统一压缩成新闻模式。
3543
- 💱 **持仓页汇率刷新禁用语义修正**#772)— 当 `PORTFOLIO_FX_UPDATE_ENABLED=false` 时,`POST /api/v1/portfolio/fx/refresh` 现在会返回显式 `refresh_enabled=false``disabled_reason`,Web `/portfolio` 页面会明确提示“汇率在线刷新已被禁用”,不再误报“当前范围无可刷新的汇率对”。
3644
- 🤖 **Agent timeout and config hardening**`AGENT_ORCHESTRATOR_TIMEOUT_S` now also protects the legacy single-agent ReAct loop, parallel tool batches stop waiting once the remaining budget is exhausted, and invalid numeric `.env` values fall back to safe defaults with warnings instead of crashing startup.
3745
- 🌐 **CORS wildcard + credentials compatibility**`CORS_ALLOW_ALL=true` no longer combines `allow_origins=["*"]` with credentialed requests, avoiding browser-side cross-origin failures in demo/development setups.
3846
- 🧭 **Unavailable Agent settings hidden from Web UI** — Deep Research / Event Monitor controls are now treated as compatibility-only metadata in the current branch and are removed from the Settings page to avoid exposing non-functional toggles.
39-
- 💱 **持仓页汇率手动刷新入口补齐**#748)— Web `/portfolio` 页面现在会在“汇率状态”卡片中展示“刷新汇率”按钮,直接调用现有 `POST /api/v1/portfolio/fx/refresh` 接口;刷新后会仅重载快照与风险数据,并以内联摘要反馈“已更新 / 仍 stale / 刷新失败”的结果,减少用户对 `fxStale` 长时间停留的误解。
40-
### Changed
4147

42-
- **Dashboard state slice and workspace closure** — moved Home / Dashboard state into `stockPoolStore`, consolidated history selection, report loading, task syncing, polling refresh, and markdown drawer handling under a single state slice.
43-
- **Dashboard panel standardization** — kept the current dashboard layout contract stable while unifying history, report, news, and markdown presentation with shared tokens, standardized states, and bounded in-panel scrolling for the history list.
44-
- **Dashboard-to-chat follow-up bridge** — routed “Ask AI” follow-ups through report-context hydration instead of direct cross-page state coupling, while keeping chat sends usable when enriched history context is still loading.
45-
- **Frontend regression coverage for PR7** — expanded targeted tests for `HomePage`, `ChatPage`, `stockPoolStore`, `AuthContext`, `useDashboardLifecycle`, `useTaskStream`, and history interactions, and validated lint, full web tests, build, and Playwright smoke coverage.
48+
### 文档
49+
50+
- 新增 Ollama 本地模型配置说明,同步更新 `README.md``docs/README_EN.md`(Fixes #690
51+
- 完善 Ollama 配置说明:`docs/full-guide.md` / `docs/full-guide_EN.md` 环境变量表与 Note 补充 `OLLAMA_API_BASE`,避免英文用户误以为 Ollama 不能作为独立配置入口;合并重复的 `OLLAMA_API_BASE` 条目为单一条目
52+
- 明确文档同步治理边界:补充 `README.md`、专题文档、双语文档与交付说明之间的默认同步规则,减少后续文档漂移
4653

4754
## [3.8.0] - 2026-03-17
4855

@@ -1042,7 +1049,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
10421049

10431050
---
10441051

1045-
[Unreleased]: https://github.com/ZhuLinsen/daily_stock_analysis/compare/v3.8.0...HEAD
1052+
[Unreleased]: https://github.com/ZhuLinsen/daily_stock_analysis/compare/v3.9.0...HEAD
1053+
[3.9.0]: https://github.com/ZhuLinsen/daily_stock_analysis/compare/v3.8.0...v3.9.0
10461054
[3.8.0]: https://github.com/ZhuLinsen/daily_stock_analysis/compare/v3.7.0...v3.8.0
10471055
[3.7.0]: https://github.com/ZhuLinsen/daily_stock_analysis/compare/v3.6.0...v3.7.0
10481056
[3.6.0]: https://github.com/ZhuLinsen/daily_stock_analysis/compare/v3.5.0...v3.6.0

0 commit comments

Comments
 (0)