zhulinsen
e45d5ce202
fix: 修复 Linux 分享图中文缺失 ( #2270 )
...
* fix: render CJK text in Linux share images
* fix(review-feedback-2270): 补到 PR 附件或评论里,和本次渲染修复说明保持一致
* fix: preserve report language contract in share images
2026-08-24 23:20:56 +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
zhulinsen
e1e042096d
fix: 修复 WebUI 版本与静态资源识别 ( #2099 )
...
* fix: make WebUI build identity reliable
* fix: address WebUI build metadata review
* fix: track WebUI dependency content state
2026-07-25 22:26:39 +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
d0ab0663b8
ci: speed up Docker build checks ( #1820 )
...
* ci: speed up docker build checks
* test: align Dockerfile cache assertion
2026-06-27 22:35:44 +08:00
mumu
cca629ff24
fix(issue-1771): chore(docker):-raise-default-compose-mem ( #1774 )
2026-06-24 20:17:20 +08:00
LunarFeller
e4c7ccec40
fix(docker): grant efinance cache dir to non-root user ( #1749 )
...
efinance writes its search cache (search-cache.json) into its own
package directory (site-packages/efinance/data), which is root-owned
in the image. Since the container runs as the non-root dsa user
(uid 1000), every A-share fetch failed with PermissionError, forcing
EfinanceFetcher (the default priority-0 source) to fail and fall back.
Pre-create and chown the efinance data dir to dsa at build time. The
path is resolved dynamically to avoid hardcoding the Python version.
This is image-internal static content, so the fix belongs at build
time rather than the runtime mount-repair in the entrypoint (#1263 ),
which only covers user-mounted volumes.
Fixes #1748
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:05:49 +08:00
mumu
0ca4e07b0e
feat: integrate AlphaSift with DSA runtime enrichment ( #1577 )
...
* feat: integrate AlphaSift with DSA runtime enrichment
* feat: pin AlphaSift DSA provider context
* fix: clean up AlphaSift warning display
* fix(review-feedback-1577): pass the headers through a path AlphaSift actually uses, such as a
* fix(review-feedback-1577): 补齐 LLM 运行时桥接兼容性的关键证据
* fix: keep AlphaSift screening lightweight
* fix(review-feedback-1577): Populate DSA news when reusing context
* fix(review-feedback-1577): 补齐外部 LLM/LiteLLM 兼容依据,并修正 docs/CHANGELOG.md 的格式/重复条目问题
* fix(review-feedback-1577): 补齐外部模型/API 兼容依据或在 PR 正文中明确指向已更新文档中的官方来源与迁移/回退边界
* fix(review-feedback-1577): scripts/build-backend.ps1 已随本 PR 调整 AlphaSift 打包/收集逻辑,但完整改动文件列表未包含
* fix(review-feedback-1577): 处理 AlphaSift LLM bridge 对全局 LiteLLM 状态的并发污染风险
* fix: reuse DSA daily history for AlphaSift
* fix(review-feedback-1577): 补齐 --collect-all alphasift 或等价 hidden imports,并增加打包产物级导入验证
* fix(review-feedback-1577): fix the macOS AlphaSift package verifier
* fix(review-feedback-1577): scripts/build-backend-macos.sh 和 scripts/build-backend.ps1
* fix(review-feedback-1577): 处理运行时阻塞风险、CHANGELOG 删除既有条目,以及补齐外部模型/API 兼容证据
* fix(review-feedback-1577): scripts/build-backend-macos.sh:当前“Verifying packaged AlphaSift
* fix(review-feedback-1577): 收敛下面的可用性判断和外部 API/模型兼容证据缺口
* fix(review-feedback-1577): src/config.py、src/core/config registry.py、src/services/alphasift
* fix(review-feedback-1577): scripts/build-backend-macos.sh:新增的 packaged AlphaSift importability
* fix(review-feedback-1577): make the archive fallback require a dsa adapter entry or exercise the
* fix(review-feedback-1577): 处理无关测试改动,并补齐桌面打包文档/验证边界
2026-06-05 08:53:55 +08:00
mumu
72213437f2
feat: add lightweight AlphaSift screening integration ( #1443 )
...
* feat: add lightweight AlphaSift screening integration
* fix(review-feedback-1443): 解决冲突后重新确认受影响文件和 CI 结果 and Restrict install spec before executing pip
* fix(review-feedback-1443): add a feature/auth gate before invoking installation side effects
* fix: repair AlphaSift enable flow
* fix(review-feedback-1443): Enable config before calling AlphaSift install
* fix(review-feedback-1443): re-fetch status in the error path to avoid this UI/backend state
* fix(review-feedback-1443): 补充对应回归测试
* fix(review-feedback-1443): 补充对应测试
* fix(review-feedback-1443): api/v1/endpoints/alphasift.py 的状态接口会返回 ALPHASIFT INSTALL SPEC,而项目默认
* fix(review-feedback-1443): 补一个前端用例覆盖
* fix(review-feedback-1443): 解决冲突后再合入
* fix(review-feedback-1443): 解决后再重新确认 diff 与 CI 结果
* fix(review-feedback-1443): 解决冲突并确认解决后的 diff 未引入新风险
* fix(review-feedback-1443): Read picks from AlphaSift ScreenResult and Use AlphaSift's actual
* fix(review-feedback-1443): 修正
* fix(review-feedback-1443): 解决冲突并重新确认 CI/Web gate 结果
* fix(review-feedback-1443): 解决冲突并重新确认 CI/Web gate,另外需要澄清本次 diff 中 LLM 配置相关改动是否属于本 PR 范围及其兼容性影响
* fix(review-feedback-1443): 解决冲突,并补齐受影响前端构建/测试验证后再合入
* fix(review-feedback-1443): 解决冲突,并补齐受影响前端 Web gate 或等价 CI 证据后再合入
* fix(review-feedback-1443): 解决冲突,并补齐受影响 Web gate 与兼容性验证说明后再合入
* fix(review-feedback-1443): mark this field sensitive and/or display only a masked/sanitized source
* fix(review-feedback-1443): 解决冲突,并补齐受影响前端验证与外部兼容性说明后再合入
* fix(review-feedback-1443): 解决冲突,并补齐冲突解决后的验证结果后再合入
* fix(review-feedback-1443): 解决冲突,并补齐受影响后端/Web 验证证据后再合入
* fix(review-feedback-1443): 解决冲突后基于最终 head 重新给出验证结论,否则无法确认最终合入内容与当前审查内容一致
* fix(review-feedback-1443): 解决冲突并补齐冲突后的验证结论
* fix(review-feedback-1443): Clear stale candidates when strategy changes
* fix(review-feedback-1443): preserve TestClient cookies across requests
* fix(review-feedback-1443): 解决冲突并基于冲突后的最终 head 重新确认受影响验证,当前不能直接合入
* fix(review-feedback-1443): 补回归测试
* fix(review-feedback-1443): 补后端回归测试
* fix(review-feedback-1443): 解决冲突,并在解决后重新给出基于最终 head 的验证结果
* fix(review-feedback-1443): 解决冲突并基于最终 diff 重新确认验证结果
* fix(review-feedback-1443): 解决冲突,并在冲突解决后的最终 head 上重新给出后端与 Web 相关验证结论
* fix(review-feedback-1443): 解决冲突,并在最终 head 上重新确认后端、Web 和文档改动仍一致
* fix(review-feedback-1443): 当前 PR 存在合并冲突,虽然 CI 摘要为 success,但冲突解决后的最终代码和验证结果尚未形成,当前不能直接合入
* fix(review-feedback-1443): 解决冲突并补齐验证
* fix(review-feedback-1443): 解决冲突
* fix(review-feedback-1443): 修正测试客户端生命周期问题,并补齐前端 lint/build 验证
* fix(review-feedback-1443): 解决冲突
* feat: refine AlphaSift adapter integration
* fix: restore settings help metadata for CI
* fix(review-feedback-1443): Do not run lifespan for non-context TestClient requests
* fix(review-feedback-1443): Pin AlphaSift install source to an immutable ref
* fix(review-feedback-1443): 补齐后再合入
* fix: harden alphasift review feedback
* fix(review-feedback-1443): api/v1/endpoints/alphasift.py:自动安装路径在 adapter 可导入但 get status 返回
* fix: package alphasift endpoint in desktop build
* fix: bundle alphasift in desktop builds
* fix(review-feedback-1443): docs/alphasift-integration.md 中 AlphaSift adapter contract /
* fix: honor empty alphasift install spec
* fix: bundle alphasift in docker image
2026-05-31 23:12:23 +08:00
mumu
647b9d24e5
fix: support Longbridge OAuth token cache ( #1490 )
...
* fix: support Longbridge OAuth token cache
* fix(review-feedback-1490): bump the runtime dependency minimum or fail with a clear upgrade
* fix(review-feedback-1490): 补充对应回归测试
* fix(review-feedback-1490): Point OAuth cache at the dsa home in Docker
* fix(review-feedback-1490): 修复或给出明确的 CI 重跑通过证据
* fix(review-feedback-1490): 处理 Docker/Actions 持久化 token cache 已损坏时无法被新的 LONGBRIDGE OAUTH TOKEN
* fix: tighten Longbridge OAuth compatibility
* fix: refresh stale Longbridge OAuth cache
* fix: guard Longbridge OAuth SDK availability
2026-05-29 23:08:16 +08:00
mumu
e8305ba738
fix(issue-1399): [bug]-docker-挂载-.env-文件时-os.replace()-更新 ( #1401 )
2026-05-22 22:45:44 +08:00
mumu
8a0b093d24
fix: auto repair Docker mount permissions ( #1263 )
2026-05-11 23:13:37 +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
Rin
34cdf5b0c7
chore: implement non-root execution for Docker ( #1214 )
2026-05-07 19:17:38 +08:00
Mark
9249de1e53
fix: add explicit project name to docker-compose to avoid cross-project conflicts ( #448 )
...
When multiple projects have their compose files under a docker/ directory,
Docker Compose defaults to the same project name "docker", causing orphan
container warnings across projects.
Co-authored-by: ma_k <ma_k@ctrip.com >
2026-02-27 19:30:38 +08:00
Mark
75896f6d05
fix(agent): include framework category in skill rendering + Docker strategies missing ( #406 )
...
* fix(agent): include framework category in skill instructions rendering
`get_skill_instructions()` only iterated over ["trend", "pattern",
"reversal"] categories, silently dropping all strategies with
`category: framework` (box_oscillation, chan_theory, wave_theory,
emotion_cycle). Add "framework" to the category map and use a
dynamic fallback so future custom categories are never lost.
Also:
- Document `AGENT_SKILLS=all` shorthand in .env.example
- Add `AGENT_SKILLS` config to README
- Add CHANGELOG entry
- Update strategies/README.md and Skill docstring with framework category
Fixes #403
* fix(docker): include strategies directory in Docker image and compose
Dockerfile was missing `COPY strategies/ ./strategies/`, and
docker-compose.yml did not mount the strategies directory, causing
all 11 built-in strategies to fail loading in containerized deployments.
---------
Co-authored-by: ma_k <ma_k@ctrip.com >
2026-02-26 20:44:24 +08:00
Alfred
292c638f3a
fix: Docker DNS resolution and host mode port documentation ( Fixes #372 ) ( #374 )
...
- docker-compose.yml: add comment on --port vs ports when using network_mode: host
- docs/FAQ.md: add Q14.1 Docker DNS resolution troubleshooting
- docs/CHANGELOG.md: record this fix
2026-02-24 19:47:52 +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
Alfred
5883dc41bd
feat: add Markdown-to-image for notification channels ( Fixes #289 ) ( #315 )
...
* feat: add Markdown-to-image for notification channels (Fixes #289 )
- Add MARKDOWN_TO_IMAGE_CHANNELS config for telegram, wechat, custom, email
- New src/md2img.py: markdown_to_image() via imgkit/wkhtmltoimage
- Extract markdown_to_html_document to src/formatters.py for reuse
- Implement image sending: Telegram sendPhoto, WeChat base64+md5,
Discord webhook multipart, email inline attachment
- Add imgkit to requirements, wkhtmltopdf to Dockerfile
- Graceful fallback to text when imgkit/wkhtmltopdf unavailable
* fix(docker): pin to bookworm for wkhtmltopdf, add runtime deps
wkhtmltopdf was removed from Debian testing (2025). Pin base image to
python:3.11-slim-bookworm. Add fontconfig, libjpeg62-turbo, libxrender1,
libxext6 for headless wkhtmltopdf.
* docs(md2img): add security note on command injection and XSS
* refactor(md2img): extract _should_use_image_for_channel, document Fallback rules
* docs: add Markdown-to-image dependency install guide (imgkit, wkhtmltopdf)
2026-02-13 21:16:22 +08:00
mumu
4c791a2818
Fix/improve docker consistency and resolve critical batch/notification bugs( #303 )
...
- Fix #297 : Replace non-existent 'webui' service with 'server' in documentation.
- Fix #281 , #298 : Generate unique query_id per stock in batch mode to prevent dashboard content mismatch.
- Fix #287 : Add exponential backoff retry and rate-limit handling for Telegram notifications.
- Sync Dockerfile and docker-compose.yml environment variables to WEBUI_HOST (PR #291 follow-up).
2026-02-11 21:43:11 +08:00
lralin
aafbb5f2ba
Change API_HOST to WEBUI_HOST in docker-compose ( #291 )
2026-02-11 21:15:53 +08:00
mumu
52917baa02
feat!: replace legacy WebUI with unified FastAPI architecture #major ( #267 )
...
* feat!: replace legacy WebUI with unified FastAPI architecture #major
- Remove legacy WebUI (web/ package based on ThreadingHTTPServer)
- Unify CLI commands: --webui now seamlessly launches the new FastAPI service
- Migrate task service from web/services.py to src/services/task_service.py
- Update documentation to reflect the new simplified usage
* refactor(service): support parameterized query source in TaskService
2026-02-06 22:06:01 +08:00
Krane
9847157980
Feature/React web support 新的WebUI ( #256 )
...
* feat(web): add FastAPI & React web connect
* feat: add FastAPI package
* feat: system base struct
* feat: frontend base struct
* feat: 基础分析接口,历史记录接口
* fix: 使用正确的 FastAPI 方法定义,避免线程阻塞
* fix: 对接历史报告页、详情页
* fix: 修复接口问题
* fix: 网络配置 允许公网访问 跨域配置
* fix: 页面打包 & 提供 Server 静态访问
* fix: 优化dock栏样式
* fix: 优化图标样式
* fix: 修改部分配色
* fix: 删除垃圾文档
* fix: 删除垃圾代码
* fix: 驼峰转换工具
* fix: 历史记录列表滚动加载(分页)
* feat: 显示分析中任务
* fix: 调整布局
* fix: 优化 Market Sentiment 组件动效
* fix: 历史列表组件bug
* fix: FastAPI 日志配置
* feat: 新闻历史接口
* feat: 资讯列表
* feat: 优化布局
* fix: 修复页面元素变宽问题
* fix: 中文标题
* fix: 任务列表状态显示问题
* fix: 抽取日志配置
* fix: 优化报告价格显示
* fix: 修复编译错误
* fix: FastAPI 启动提取到 main.py
* fix: 补充新web-ui启动文档
* fix: 默认发送通知
* fix: FastAPI 模式适配 docker
* fix: FastAPI 模式文档
* Update api/v1/endpoints/stocks.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
* fix: package-lock.json
* fix: 修改错别字
* fix: 更新文档说明
* fix: 更新文档说明
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2026-02-05 20:56:38 +08:00
mumu
2ca8d10ab1
fix(docker): respect WEBUI_PORT from .env file ( fixes #221 )
...
- Remove hardcoded WEBUI_PORT=8000 from docker-compose.yml environment
- Use variable substitution in port mapping with default fallback
- WEBUI_PORT is now properly read from .env file
2026-02-02 20:51:04 +08:00
zhulinsen
d44fab23b2
fix: correct docker-compose paths and documentation commands
2026-01-26 18:02:08 +08:00
Krane
24693d5ec4
fix : #145 修改文档命令路径
2026-01-26 12:48:00 +08:00
Krane
afcdaad08b
fix : #145 dockerfile 缺少 copy src 文件夹
2026-01-26 12:12:57 +08:00
zhulinsen
9f0871a774
refactor: project structure optimization and network stability (v1.7.0)
...
- 📦 Structure: Move core modules to src/, docs to docs/, docker configs to docker/
- 🔧 Config: Fix .env loading path and remove hardcoded proxy settings
- 🌐 Network: Implement smart proxy routing (auto NO_PROXY for domestic apis)
- 🛡️ Stability: Enhance EfinanceFetcher with robust retry logic for ProtocolErrors
- 📝 Docs: Update relative links in READMEs and update CHANGELOG to v1.7.0
2026-01-25 16:35:32 +08:00