Commit Graph

159 Commits

Author SHA1 Message Date
zhulinsen
3b98aa1d77 docs: update AIHubMix referral links to InferEra (#2182) 2026-08-10 21:18:03 +08:00
zhulinsen
e430fcfe48 fix: 收敛选股排序、缓存与热点并发契约 (#2145)
* fix: stabilize screening ranking and hotspot workflows

* fix(review-feedback-2145): Stop timed-out constituent workers before returning and Keep the

* fix: close screening review contract gaps

* fix: bound screening hotspot search workers

* fix(review-feedback-2145): [Verification blocker] 当前 Head 的阻断型 CI 已最终失败:backend-gate。请在本地运行对应

* fix: close screening contract review gaps

* fix: unify hotspot timeout contracts

* fix: bound hotspot search end to end

* fix: bound hotspot detail fallbacks
2026-08-02 18:32:30 +08:00
zhulinsen
bcb7ae4e13 feat: 将参考 AlphaSift 的选股实现纳入主项目 (#2136)
* feat: integrate built-in stock screening engine

* test: verify screening routes via public contract

* refactor: make screening integration fully native

* fix(review-feedback-2136): [Verification blocker] 当前 Head 的阻断型 CI 已最终失败:backend-gate。请在本地运行对应

* feat: persist screening runs and reuse DSA analysis

* fix(review-feedback-2136): 对选股重排应用统一的模型参数兼容逻辑

* fix(review-feedback-2136): 将字段缺失计入数据源失败

* fix(review-feedback-2136): 评审结论 - 代码检查 :当前整个 PR 仍有 3 个未关闭的高置信度代码 blocker。最新复核摘要:当前整个 PR 仍有 3

* fix(review-feedback-2136): 延迟写入候选直到覆盖率通过校验 and 将 DSA 日线成功结果写入 last-good 缓存

* fix(review-feedback-2136): 将直连日线源纳入统一调用超时 and 将新增的选股缓存目录加入桌面更新备份

* fix(review-feedback-2136): 保留完整热点缓存而非请求切片 and 遵守 DSA 上下文声明的候选上限

* fix(review-feedback-2136): 补一条端到端回归:把真实 ScreenResult 经 ScreeningService.screen 落到 /history 和

* fix(review-feedback-2136): 补一个 refresh=true 且 live fetch 失败时返回 stale cache 的回归测试,避免当前只更新 stale
2026-08-01 14:13:23 +08:00
Tom
52e787a736 Update Anspire info (#2033)
* update anspire info

* update anspire for web link

* Update anspire info

---------

Co-authored-by: xiaowei <4775987@qq.com>
2026-07-19 16:32:55 +08:00
Tom
bfdee03241 update anspire for web link (#1955)
* update anspire info

* update anspire for web link

---------

Co-authored-by: xiaowei <4775987@qq.com>
2026-07-07 21:34:31 +08:00
zhulinsen
267c2139ae docs: clarify data source configuration (#1935) 2026-07-05 20:57:42 +08:00
Gach-Coder
a43daa4331 Merge pull request #1889 from Gach-Coder/docs/add-data-source-guide
docs: 在 README 快速开始中添加行情数据源配置说明 (get259#1775)
2026-07-05 19:17:13 +08:00
Tom
2585f8ab92 update anspire info (#1915)
Co-authored-by: xiaowei <4775987@qq.com>
2026-07-04 14:42:25 +08:00
zhulinsen
52afa95103 docs: 更新台股支持文档入口 (#1884)
* docs: update Taiwan stock support docs

* docs: simplify README market coverage
2026-07-02 22:50:02 +08:00
mumu
f61c5362a6 docs: update Trendshift badge and PR workflow rules (#1736) 2026-06-21 15:02:52 +08:00
mumu
a1cae3e614 docs: 补充日韩股票支持说明 (#1729)
* docs: update supported market coverage

* fix(review-feedback-1729): add 日股/韩股 to this homepage capability row, it now reads as though
2026-06-20 13:10:00 +08:00
mumu
3902670f02 docs: add README tutorial links (#1676) 2026-06-13 15:19:04 +08:00
mumu
47f938f32d feat: add mainstream analysis strategy skills (#1332) 2026-05-17 23:02:12 +08:00
mumu
9e02f3f72e docs: tidy README presentation (#1259) 2026-05-10 21:46:08 +08:00
mumu
6c5a17a48d docs: align README preview assets with docs directory (#1258) 2026-05-10 20:16:08 +08:00
mumu
595908c81a chore: reorganize root files (#1257)
* chore: reorganize root files

* fix: mark moved docs assets as binary
2026-05-10 19:50:22 +08:00
mumu
7d44cd0fa7 docs: remove transient PR notes (#1255) 2026-05-10 15:17:41 +08:00
mumu
153a468266 docs: add documentation index and polish README contact section
Add the Chinese documentation center, refresh the English documentation index, and update README navigation links.

Polish the README contact sections across Chinese, Traditional Chinese, and English docs by splitting long email details, aligning contact rows, and adding the Xiaohongshu QR image.

Validation:
- git diff --check
- GitHub CI passed: ai-governance, backend-gate, docker-build
- PR Review passed: security check, static check, AI review, review report
2026-05-10 13:38:57 +08:00
zhulinsen
631cd9d210 docs: keep README badges inline 2026-05-10 10:01:40 +08:00
mumu
469609e6a5 docs: sync Anspire Open docs and deployment guides (#1195) 2026-05-05 21:13:00 +08:00
mumu
695365b3d8 feat: add Anspire Open LLM support (#1193)
* feat: add Anspire Open LLM support
2026-05-04 23:53:22 +08:00
Jonty Wang
07b4fe5795 feat: Add Hong Kong market support (#1068)
* fix: update report title from 'A股智能分析报告' to '股票智能分析报告'

* feat: add support for Hong Kong market in market review and analysis features

* fix: update daily_analysis workflow name and adjust region check in market analyzer

* fix: enhance market region handling in run_market_review and compute_effective_region functions

* test: add Hong Kong market support in MarketReviewLocalizationTestCase

* fix: update market review region handling to include Hong Kong support in documentation and logic

* fix: update daily_analysis workflow name to Chinese and adjust Hong Kong index symbols in yfinance_fetcher

* fix: refactor market review execution to use run_market_review for improved handling

* fix: implement trading day filtering in MarketCommand to skip reviews on market holidays

* fix: update changelog and README to reflect market command enhancements and support for multiple regions

* fix: update YfinanceFetcher to include HK index symbol mappings for improved data retrieval

Co-authored-by: Jonty <jonty.wang@hk.com.sg>
Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com>
2026-04-28 22:25:29 +08:00
mumu
66c273eafb docs: add related projects to readmes (#1135) 2026-04-27 22:47:52 +08:00
mumu
e480fccf50 docs: streamline README documentation (#1120)
* docs: streamline readme documentation
2026-04-25 18:17:22 +08:00
pillsilly
c4d0ee5690 feat(web): add reanalyze button to home dashboard with force_refresh (#1008)
Add a '重新分析' button in the report action bar that triggers
analysis with force_refresh=true to bypass cache. Button is disabled
during analysis and shows existing task warning on duplicate submission.

- Extend SubmitAnalysisOptions with forceRefresh parameter
- Pass forceRefresh through to analysisApi.analyzeAsync()
- Add bilingual labels (zh: 重新分析, en: Reanalyze)
2026-04-24 22:44:23 +08:00
mumu
303a50d0f3 refactor: 补充一份最小化文档说明,明确 Docker 安装场景下应以 Git tag/镜像 tag 判断版本… (#1091) (#1093)
* refactor(issue-1091): [feature]
2026-04-21 19:56:37 +08:00
mumu
3dceb1eca8 Fix: multi-agent AGENT_MAX_STEPS not respecting user override & skill agent graceful degradation (#1031)
* Fix multi-agent AGENT_MAX_STEPS not respecting user override and skill agent failure handling

- Fix AGENT_MAX_STEPS ceiling-only logic: when user raises value above default
  (10), all sub-agents now adopt the global value instead of being capped at
  their per-agent defaults (fixes #1026)
- Fix skill agent failure aborting entire pipeline: specialist/skill agents now
  degrade gracefully like intel/risk stages
- Improve max-steps-exceeded error message with AGENT_MAX_STEPS guidance
- Sync config descriptions in README, .env.example, and config_registry
2026-04-10 20:52:01 +08:00
mumu
04933583a9 fix: inject REPORT_LANGUAGE into workflow and add current_price to status API (#1013, #983) (#1028)
* fix: inject REPORT_LANGUAGE into workflow and add current_price to status API (#1013, #983)
* fix: preserve status API snapshot change pct fallbacks
* fix: keep status change pct scoped to intraday data
2026-04-10 20:36:28 +08:00
jiangmin168168
bfa7b8cd89 Feat/tushare增加港股查询支持 (#994) 2026-04-08 23:03:14 +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
6eab96f8e1 fix: use per-agent max_steps as ceiling instead of override (#1001)
* fix: use per-agent max_steps as ceiling instead of override

_prepare_agent() previously replaced every agent's max_steps with the
orchestrator-level value (AGENT_MAX_STEPS, default 10).  This inflated
specialised agents far beyond their designed limits:
- TechnicalAgent: 6 -> 10
- IntelAgent: 4 -> 10
- DecisionAgent: 3 -> 10

In standard mode this allowed up to 30 LLM calls instead of the intended
13, which is the primary cause of quota exhaustion and timeouts in
multi-agent pipelines.

Now max_steps = min(agent.max_steps, orchestrator.max_steps), so the
global setting acts as a ceiling that never inflates per-agent defaults.
2026-04-05 10:20:19 +08:00
mumu
709604f1f7 feat: [Bug] 公司公告和主力资金流搜索经常无法纳入分析 (#976) (#977)
* feat(issue-976): [feature]-[bug]-公司公告和主力资金流搜索经常无法纳入分析
2026-04-03 13:14:37 +08:00
Rules
dd89d06a7d feat:修复美股数据丢失,新增长桥数据源 (#981)
* fix:新增长桥数据源,补充美港股数据

* ci: Actions 注入 LONGBRIDGE_* 环境变量并增加数据源检查;full-guide 补充 CI 配置说明

Made-with: Cursor

* fix:长桥参数初始化时机调整

* fix:添加长桥初始化调试日志

* fix:调整数据源优先级

* Update tests/test_search_searxng.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update data_provider/base.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update data_provider/longbridge_fetcher.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_CHT.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_EN.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_EN.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update docs/README_CHT.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(longbridge): 使用 get_config() 替代不存在的 config 导入(_is_available)

* fix:CHANGELOG、联调脚本重命名、繁中 README 英文链接、PRINT_QUOTE_PACKAGES 默认值已对齐。

* fix:调整审核中的问题

---------

Co-authored-by: xuxiong <xiong.xu@xsgames.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-02 23:05:08 +08:00
mumu
12ae898c2a feat: 基于现有分析历史与回测结果,提供按股票和时间范围查看“AI预测 vs… (#812) (#913)
* feat(issue-812): [feature]-希望增加一个记录功能,记录每次预测的和实际情况的,计算ai预
2026-04-01 16:10:56 +08:00
mumu
65fe0446aa feat: 隐藏 LiteLLM 实现细节,简化用户侧模型接入体验 (#875) (#925)
* chore(issue-875): [feature]-隐藏-litellm-实现细节,简化用户侧模型接入体验
2026-04-01 16:02:07 +08:00
mumu
a3a820db83 fix: 为 Discord Webhook 请求补充签名验证 (#896) (#934)
* fix(issue-896): [bug]-为-discord-webhook-请求补充签名验证
2026-04-01 11:43:32 +08:00
mumu
87d60e9daa fix: 修复断点续传按自然日判断数据存在性的逻辑 (#880) (#900)
* fix(issue-880): [bug]-修复断点续传按自然日判断数据存在性的逻辑

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix: remove transient pr draft from pr-900

* fix(review-feedback-900): address latest review comments

* fix(review-feedback-900): address latest review comments

* fix(issue-880): [bug]-修复断点续传按自然日判断数据存在性的逻辑

* fix(review-feedback-900): address latest review comments

---------

Co-authored-by: AutoCode Bot <autocode@example.com>
2026-04-01 11:22:17 +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
LouisHong
b59e33a00c #602 [PR 9] Web UI 完成初步统一并进行双主题升级, MVP 版本 (Global UI/UX Optimization) (#869)
* feat(web): extract phase-0 design tokens and stabilize shell baseline

Background:
- PR9 needed a stable styling foundation before page-level polish could be grouped coherently.
- The web shell still mixed early layout DNA with page-local treatments, which made later visual cleanup noisy.

What changed:
- Extracted the initial phase-0 style tokens into the shared stylesheet baseline.
- Tightened shell and sidebar-adjacent framing so shared layout surfaces have a cleaner default edge treatment.
- Aligned common header and toolbar primitives with the phase-0 styling baseline.
- Added the cn utility test coverage that belongs with the shared styling foundation.

Why this grouping:
- These changes form the lowest-level visual baseline for the rest of the PR9 cleanup work.
- Keeping them together makes later page-focused commits easier to review and to revert independently.

Validation:
- Not run in this history-cleanup step; final branch verification will cover lint and build checks.

Risk:
- Shared shell and global stylesheet adjustments can affect multiple pages at once if any token mapping is off.

* refactor(web): restore settings theme consistency and light-mode hierarchy

Background:
- The settings area had drifted away from the restored theme system, especially in light mode where hierarchy, borders, and field framing no longer matched the password and auth surfaces.
- PR9 needed a dedicated settings pass so later page cleanup would not keep reintroducing local fixes.

What changed:
- Re-aligned settings cards, category navigation, field rows, and loading states with the shared theme baseline.
- Restored theme-toggle behavior and tightened the visual contract around settings-specific inputs and editors.
- Normalized related shared controls used by settings forms so select and badge treatments match the refreshed theme hierarchy.
- Updated the main stylesheet to give settings light-mode surfaces clearer spacing, contrast, and resting borders.

Why this grouping:
- These changes are all part of one coherent settings-theme recovery pass.
- Keeping settings recovery separate from chat, home, and backtest polish makes the later review path much easier to reason about.

Validation:
- Not run in this history-cleanup step; final branch verification will cover lint and build checks.

Risk:
- Theme hierarchy adjustments in shared form controls may subtly affect any page that reuses the same select or badge defaults.

* feat(web): add shared status primitives and refine chat-home interaction surfaces

Background:
- PR9 needed reusable status and tooltip primitives before the remaining page-level cleanup could converge on one visual language.
- Chat and home still carried a mix of page-local interaction cues, making report surfaces and message flow harder to keep consistent.

What changed:
- Added shared Tooltip and StatusDot primitives and wired them into the common component exports.
- Hardened tooltip rendering around report surfaces so overlays no longer clip inside constrained containers.
- Refined chat message flow, action affordances, session controls, and progress cues to support the non-blocking interaction model.
- Tightened home and report-facing surfaces, including shared card and input treatments that support the updated report hierarchy.
- Updated the related chat and home tests that move with these interaction changes.

Why this grouping:
- These changes all depend on the same shared primitive layer and mainly affect chat, home, and report-facing interaction surfaces.
- Keeping them in one commit isolates the reusable UI foundation from the later state-unification and final regression passes.

Validation:
- Not run in this history-cleanup step; final branch verification will cover lint and build checks.

Risk:
- Shared tooltip behavior, report surface styling, and chat interaction flow are cross-cutting and can regress multiple views if any container assumptions changed.

* refactor(web): unify empty states, status feedback, portfolio-backtest surfaces, and coverage

Background:
- After the shared primitive pass, PR9 still had fragmented state presentation across home, portfolio, backtest, and adjacent navigation flows.
- Empty states, task/status feedback, and portfolio/backtest surfaces needed to converge before the final regression cleanup could be reviewed sanely.

What changed:
- Unified empty-state and status-feedback treatments across home, task, portfolio, and backtest flows.
- Brought portfolio and backtest surfaces closer to the shared input-surface and table styling conventions, including the remaining page-level polish for their primary layouts.
- Tightened supporting shared components and sidebar behavior that participate in the refreshed state presentation.
- Added and expanded smoke, sidebar, backtest, and portfolio-related test coverage that belongs with this behavior shift.
- Updated the global stylesheet to carry the state, alert, and table refinements that power these pages.

Why this grouping:
- These changes are one coherent pass over the state-feedback layer and the portfolio/backtest page family.
- Keeping them together isolates the broad PR9 convergence work from the final light-theme regression fixes that follow.

Validation:
- Not run in this history-cleanup step; final branch verification will cover lint and build checks.

Risk:
- This commit touches multiple status-bearing pages and shared stylesheet rules, so regressions would most likely show up in empty states, task badges, table surfaces, or auth smoke flow assumptions.

* fix(web): close final light-theme regressions in login and chat presentation

Background:
- After the broader PR9 convergence work, a final pass was still needed to remove light-theme readability regressions and presentation rough edges in login and chat-adjacent surfaces.
- These were the last visible issues before the branch could be treated as a coherent PR9 cleanup line.

What changed:
- Restored light-theme contrast and text hierarchy in the affected login, chat history, and supporting content surfaces.
- Refined chat heading presentation and the sentiment gauge glow so the final visual hierarchy is clearer without adding new interaction patterns.
- Added the lightweight UI-governance coverage that belongs with these final presentation constraints.
- Applied the small follow-up stylesheet and tooltip adjustments required to support the final polish.

Why this grouping:
- These changes are intentionally limited to the last regression-fix pass rather than another broad refactor.
- Keeping them in one final commit makes the cleanup history easier to review and gives a clear rollback point for the last-mile polish.

Validation:
- Not run in this history-cleanup step; final branch verification will cover lint and build checks.

Risk:
- The remaining risk is concentrated in light-theme readability and chat-adjacent presentation details, especially where shared text and gauge styling overlap.

* fix(web): restore remaining PR9 state-feedback parity after regrouping

Background:
- The history regrouping left a small set of state-feedback and page-surface files out of sync with the original PR9 branch.
- Those differences were accidental cleanup omissions rather than intended design changes, so they need an explicit parity restore commit.

What changed:
- Restored the remaining Home, Portfolio, Settings, and task/status presentation updates to match the original PR9 branch content.
- Brought the supporting stylesheet and home-page test expectation back to parity with the source branch.
- Reinstated the intended SettingsAlert and page-level state-feedback treatments that belonged in the PR9 convergence work.

Why this grouping:
- These changes are a narrow parity-recovery pass caused by the history rewrite itself.
- Keeping them together makes it obvious that the commit exists to eliminate cleanup drift rather than introduce new behavior.

Validation:
- Not run in this history-cleanup step; final branch verification will cover lint and build checks.

Risk:
- The remaining risk is limited to state-feedback presentation on Home, Portfolio, and Settings, because this commit only restores source-branch parity for those areas.

* fix(web): keep chat message actions reachable on touch devices

* update docs

* fix(web): restore login page light theme

* fix(web): restore login theme tokens
2026-03-27 18:29:59 +08:00
zhulinsen
067ee38eb4 docs: update README donation section to Xiaohongshu QR codes 2026-03-25 23:07:22 +08:00
LouisHong
6a070eb479 #602 [PR 8] 问股与回测接入优化及 Web 交互回归修复 (#824)
* feat(web): consolidate dashboard, chat, and backtest UI improvements

- polish dashboard follow-up pages and shared UI states across home, chat, and backtest flows
- consolidate chat and backtest page layout, styling, and interaction improvements into a single web UI update
- improve follow-up context handling in chat and add broader regression coverage for dashboard and chat components
- refine text color and opacity usage across shared components for more consistent readability
- restore home page mobile scrolling after the broader UI refactor changed page overflow behavior
- update related tests and changelog entries to reflect the finalized web interaction and styling changes

* feat(ui): optimize light theme shadows, navigation, alerts, and chat bubble styles

- Soften light mode box-shadows globally, replacing hardcoded grays with dynamic CSS variables for a cleaner, non-muddy depth effect.
- Unify SidebarNav active item style: remove inset shadow, apply primary background, and use bold font for better visibility.
- Fix ApiErrorAlert and InlineAlert contrast in light mode: use deep red text for high legibility, and robust dark/light theme CSS variables.
- Fix ThemeToggle menu z-index (z-40) in Shell to prevent overlap by main content pages (e.g., Settings, Backtest).
- Refactor ChatPage avatars and message bubbles to use dedicated dual-theme CSS classes (.chat-avatar-*, .chat-bubble-*).
- Add distinct borders to User/AI chat avatars with lowered opacity in dark mode to prevent visual glare.
- Add subtle borders to AI message bubbles in light mode to enhance separation, preserving semi-transparent borders in dark mode.

* fix(web): restore picker flows and align chat/report interactions

- restore intelligent import file picker behavior and add regression coverage
- align report markdown E2E expectations with the current UI
- improve markdown plain-text extraction used by report export flows
- fix chat session history deletion accessibility by separating row selection and delete actions into independent native buttons
- add chat history regression tests for keyboard-accessible deletion behavior
- deduplicate shared action button variant styles without changing the public Button variant API
- keep user-facing web interactions consistent after recent UI updates

* fix(web): resolve dashboard build issue and speed resolver benchmarks

- remove duplicate notify fields from useHomeDashboardState to fix the dsa-web TypeScript build
- keep the theme toggle button disabled in the current UI state
- cache local name-to-code indexes and fast-return on ambiguous local stock names
- split resolver performance coverage into fast-path and typo-fallback benchmarks with warm-up steps and smaller iteration budgets

* update README.md
2026-03-24 20:03:05 +08:00
LouisHong
f7101b447d #730 [PR2] 股票输入框自动补全 - 拓展索引生成脚本,支持 A股/港股/美股三市场 (#798)
* feat(autocomplete): refactor index generator to support Tushare and multi-market

* docs: update changelog and README for multi-market autocomplete

- Add Unreleased entries for Tushare stock list fetcher, multi-market
  index generation scripts, and updated index data
- Update README to reflect A-share/HK/US coverage instead of
  A-share-only first phase
- Add examples for HK and US stock autocomplete (tencent, aapl)
- Reference TUSHARE_STOCK_LIST_GUIDE.md for index update workflow

* fix: deduplicate US autocomplete symbols
2026-03-22 20:34:34 +08:00
LouisHong
2e49be1b3a feat(web): support markdown and plain-text copy in full report (#785)
* Merge feature/report-markdown-toolbar into feature/report-markdown-toolbar-fix

Conflicts:
- apps/dsa-web/src/pages/__tests__/HomePage.test.tsx: kept upstream dynamic button text
- docs/CHANGELOG.md: merged both sets of changelog entries

* fix: use remove-markdown library to preserve underscores in variable names

Replace regex-based markdown parsing with remove-markdown library to fix
the bug where underscores in variable names (e.g. stock_code, api_key_v2)
were incorrectly stripped. The original regex implementation treated
single underscores as Markdown italic markers.

Refs #785

* update CHANGELOG.md
2026-03-22 20:33:48 +08:00
mumu
6bef880465 refactor: align agent skills with mainstream skill bundles (#780)
* refactor: align agent skills with mainstream skill bundles

* refactor: derive default agent skills from metadata

* fix: harden skill-first compatibility

* docs: clarify strategy-facing skill terminology

* fix: stop implicit bull-trend skill layering

* fix: use bull-trend as the single implicit default skill

* fix: preserve legacy skill config compatibility

* fix: harden skill metadata compatibility
2026-03-20 15:48:31 +08:00
Xinyao Qiu
14d3b746fe feat: add Slack as a first-class notification channel (#747)
* feat: add Slack as a first-class notification channel

* fix: guard Slack image delivery with _should_use_image_for_channel()

* fix: require SLACK_CHANNEL_ID in workflow config check

* docs: add Slack channel entry to CHANGELOG and fix README_CHT nav link

* fix: use Slack new file upload API for image delivery

* fix: update Slack image test for new upload API, add slack to md2img example

* fix: send raw bytes to Slack upload URL and unify bot/webhook precedence

* docs: unify Slack Bot > Webhook precedence across all docs

* docs: add Slack config entries and setup guide to full-guide (zh/en)

Add SLACK_BOT_TOKEN, SLACK_CHANNEL_ID, SLACK_WEBHOOK_URL rows to both
config tables (GitHub Actions + local run) and a dedicated Slack setup
section with Bot-first precedence, mirroring the existing Discord
section structure. Applied to both full-guide.md and full-guide_EN.md.

* feat: register Slack config fields in config_registry for Web settings

Add SLACK_BOT_TOKEN, SLACK_CHANNEL_ID, SLACK_WEBHOOK_URL to
_FIELD_DEFINITIONS (display_order 36-38, between Discord and Pushover)
so /api/v1/system/config/schema and the Web settings page can expose
them. Add SLACK to _infer_category() notification prefix list.

New test file test_config_registry.py (6 cases) verifies field
registration, sensitivity flags, display ordering, and schema response
inclusion — prevents future channels from shipping without UI exposure.

* fix: use password control for SLACK_WEBHOOK_URL to prevent plaintext leak

SLACK_WEBHOOK_URL was marked is_sensitive=True but ui_control was text,
inconsistent with DISCORD_WEBHOOK_URL and other sensitive Webhook fields.
The Web settings page would display the URL in plaintext.

Also added a registry-wide regression test: any is_sensitive field must
use ui_control=password, preventing future channels from repeating this.
2026-03-20 11:41:09 +08:00
LouisHong
73d524a186 #730 [PR1] 首页股票分析输入框自动补全 AutoComplete (#775)
* feat(autocomplete): rebuild web autocomplete mvp

* feat(autocomplete): add error boundary and runtime fallback

Add error boundary and runtime error handling to improve autocomplete stability:

- Add StockAutocompleteBoundary class component to catch render errors
- Add FallbackInput component for graceful degradation
- Add runtimeFallback state and error handling in useAutocomplete hook
- Wrap search logic with try-catch to prevent crashes
- Add comprehensive tests for error scenarios

This ensures the autocomplete degrades to a plain input when:
- Index loading fails (existing behavior)
- Runtime search throws (new)
- Component tree throws during render (new)

* feat(autocomplete): add input validation and optimize name resolution

- Add early rejection for obviously invalid mixed alphanumeric input
- Skip expensive AkShare/fuzzy fallback for non-CJK free text
- Enhance frontend validation with isObviouslyInvalidStockQuery
- Increase minimum query length from 1 to 2 characters
- Add comprehensive test coverage for validation logic
- Update E2E test placeholder text to reflect new capabilities

These changes address code review feedback about:
- Preventing abuse from invalid input patterns
- Improving performance by avoiding unnecessary network calls
- Ensuring consistent validation between frontend and backend

* fix(autocomplete): harden input validation and runtime guards

* update doc

* style(autocomplete): adjust suggestion item hover effect

- Reduce hover background opacity from 35% to 25% for lighter visual effect
- Brighten hover color in dark theme from #257280 to #2dcae6

* fix(autocomplete): do not auto-highlight first suggestion to preserve raw input on Enter

* test(home): align report fixture with report language metadata

* fix: unify task queue stock dedupe key
2026-03-20 11:35:00 +08:00
mumu
ef328e906b feat: add configurable report language (#764)
* feat: add configurable report language

* Fix review follow-ups for history and fallback localization

* fix: prefer .env report language at startup

* fix: address report language review feedback

* fix: address latest report language review feedback
2026-03-19 22:55:17 +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
38d7ab5b5a docs: add Ollama local model configuration guide (Fixes #690) (#744)
* docs: add Ollama local model configuration guide (Fixes #690)

- Add Example 4 and channel mode example in LLM_CONFIG_GUIDE
- Add OLLAMA_API_BASE to .env.example and full-guide
- Add Ollama entry to litellm_config.example.yaml
- Add Q12b to FAQ (CN/EN)
- Add troubleshooting row for Ollama 404 / api/generate/api/show
- Update CHANGELOG

Made-with: Cursor

* docs: sync README with Ollama config per AGENTS.md (address review)

- Add Ollama to AI models list in README.md
- Add OLLAMA_API_BASE to Secrets table with link to config guide
- Add pitfall note: do not use OPENAI_BASE_URL for Ollama
- Sync docs/README_EN.md with same changes
- Update CHANGELOG to mention README sync

Made-with: Cursor

* docs: add OLLAMA_API_BASE to full-guide env table and note (address review)

* docs: remove duplicate OLLAMA_API_BASE entries in full-guide (address review)
2026-03-18 22:37:52 +08:00
Alfred
905b366ef1 feat: integrate TickFlow market review enhancement (#632) (#745)
Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com>
2026-03-18 19:19:08 +08:00