{"repo":"ZhuLinsen/daily_stock_analysis","free":true,"listed":false,"github":"https://github.com/ZhuLinsen/daily_stock_analysis","clone":"git clone https://github.com/ZhuLinsen/daily_stock_analysis.git","description":"LLM 驱动的多市场股票智能分析系统：多源行情、实时新闻、决策看板与自动推送，支持零成本定时运行。  LLM-powered multi-market stock analysis system with multi-source market data, real-time news, decision dashboard, automated notifications, and cost-free scheduled runs.","language":"Python","stars":63033,"topics":["a-stock","ai-agent","aigc","llm","quant","quantitative-finance","quantitative-trading"],"license":"MIT","category":"quant_finance_saas","readme_excerpt":"<div align=\"center\">\n\n# 📈 股票智能分析系统\n\n[![GitHub stars](https://img.shields.io/github/stars/ZhuLinsen/daily_stock_analysis?style=social)](https://github.com/ZhuLinsen/daily_stock_analysis/stargazers)\n[![CI](https://github.com/ZhuLinsen/daily_stock_analysis/actions/workflows/ci.yml/badge.svg)](https://github.com/ZhuLinsen/daily_stock_analysis/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![GitHub Actions](https://img.shields.io/badge/GitHub%20Actions-Ready-2088FF?logo=github-actions&logoColor=white)](https://github.com/features/actions)\n[![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker&logoColor=white)](https://hub.docker.com/r/zhulinsen/daily_stock_analysis)\n\n<p align=\"center\">\n  <img src=\"https://trendshift.io/api/badge/trendshift/repositories/18527/daily?language=Python\" alt=\"#1 Python Repository Of The Day | Trendshift\" width=\"250\" height=\"55\"/>&nbsp;<a href=\"https://hellogithub.com/repository/ZhuLinsen/daily_stock_analysis\" target=\"_blank\"><img src=\"https://api.hellogithub.com/v1/widgets/recommend.svg?rid=6daa16e405ce46ed97b4a57706aeb29f&claim_uid=pfiJMqhR9uvDGlT&theme=neutral\" alt=\"Featured｜HelloGitHub\" width=\"230\" /></a>\n</p>\n\n> 🤖 基于 AI 大模型的 A股/港股/美股/日股/韩股/台股自选股智能分析系统，每日自动分析并推送「决策仪表盘」到企业微信/飞书/Telegram/Discord/Slack/邮箱\n\n[**产品预览**](#-产品预览) · [**功能特性**](#-功能特性) · [**快速开始**](#-快速开始) · [**推送效果**](#-推送效果) · [**文档中心**](docs/INDEX.md) · [**完整指南**](docs/full-guide.md)\n\n简体中文 | [English](docs/README_EN.md) | [繁體中文](docs/README_CHT.md)\n\n</div>\n\n## 💖 赞助商 (Sponsors)\n<div align=\"center\">\n  <p align=\"center\">\n    <a href=\"https://open.anspire.cn/dsa?share_code=QFBC0FYC\" target=\"_blank\"><img src=\"./docs/assets/anspire.png\" alt=\"Anspire Open 一站式模型和搜索服务\" width=\"300\" height=\"141\" style=\"width: 300px; height: 141px; object-fit: contain;\"></a>\n    <a href=\"https://serpapi.com/baidu-search-api?utm_source=github_daily_stock_analysis\" target=\"_blank\"><img src=\"./docs/assets/serpapi_banner_zh.png\" alt=\"轻松抓取搜索引擎上的实时金融新闻数据 - SerpApi\" width=\"300\" height=\"141\" style=\"width: 300px; height: 141px; object-fit: contain;\"></a>\n  </p>\n</div>\n\n\n## 🖥️ 产品预览\n\n<p align=\"center\">\n  <img src=\"docs/assets/readme_workspace_tour_20260510.gif\" alt=\"DSA Web 工作台演示\" width=\"720\">\n</p>\n\n## ✨ 功能特性\n\n| 能力 | 覆盖内容 |\n|------|------|\n| AI 决策报告 | 核心结论、评分、趋势、买卖点位、风险警报、催化因素、操作检查清单 |\n| 多市场数据聚合 | 覆盖 A股、港股、美股、日股、韩股、台股和 ETF，支持行情、K 线、技术指标、新闻、公告、基本面与报告辅助数据；不同市场的数据源和能力边界见 [市场支持边界](docs/market-support.md) |\n| Web / 桌面工作台 | 手动分析、任务进度、历史报告、完整 Markdown、回测、持仓、配置管理、浅色 / 深色主题 |\n| Agent 策略问股 | 多轮追问，支持均线、缠论、波浪、趋势、热点、事件、成长、预期等 15 种内置策略，覆盖 Web/Bot/API |\n| 智能导入与补全 | 图片、CSV/Excel、剪贴板导入；股票代码/名称/拼音/别名补全 |\n| 自动化与推送 | GitHub Actions、Docker、本地定时任务、FastAPI 服务和企业微信/飞书/Telegram/Discord/Slack/邮件推送 |\n\n> 功能细节、字段契约、基本面 P0 超时语义、交易纪律、数据源优先级、Web/API 行为请看 [完整配置与部署指南](docs/full-guide.md)。\n\n### 技术栈与数据来源\n\n| 类型 | 支持 |\n|------|------|\n| AI 模型 | [Anspire](https://open.anspire.cn/dsa?share_code=QFBC0FYC)、[AIHubMix](https://inferera.com/?aff=CfMq)、Gemini、OpenAI 兼容、DeepSeek、通义千问、Claude、Ollama 本地模型等 |\n| 行情数据 | [TickFlow](https://tickflow.org/auth/register?ref=WDSGSPS5XC)、AkShare、Tushare、Pytdx、Baostock、YFinance、Longbridge |\n| 新闻搜索 | [Anspire](https://open.anspire.cn/dsa/?share_code=QFBC0FYC)、[SerpAPI](https://serpapi.com/baidu-search-api?utm_source=github_daily_stock_analysis)、[Tavily](https://tavily.com/)、[Bocha](https://open.bocha.cn/)、[Brave](https://brave.com/search/api/)、[MiniMax](https://platform.minimaxi.com/)、SearXNG |\n| 社交舆情 | [Stock Sentiment API](https://api.adanos.org/docs)（Reddit / X / Polymarket，仅美股，可选） |\n\n> 项目默认内置 AkShare、Baostock、YFinance 等免费行情源，可零配置运行；免费源受上游限流、接口变动和网络波动影响，稳定性不保证。长期定时、批量分析或更稳定行情建议配置 TickFlow、Tushare、Longbridge 等 token 型数据源，适用市场、Actions 映射和 fallback 规则见 [数据源配置](docs/full-guide.md#数据源配置)。\n\n## 🚀 快速开始\n\n### 方式一：[GitHub Actions（推荐）](https://www.bilibili.com/video/BV11FEb66EXG/)\n\n> 5 分钟完成部署，零成本，无需服务器。\n\n\n#### 1. Fork 本仓库\n\n点击右上角 `Fork` 按钮（顺便点个 Star⭐ 支持一下）\n\n#### 2. 配置 Secrets\n\n`Settings` → `Secrets and variables` → `Actions` → `New repository secret`\n\n**AI 模型配置（至少配置一个）**\n\n默认先选一个模型服务商并填写 API Key；需要多模型、图片识别、本地模型或高级路由时，再参考 [LLM 配置指南](docs/LLM_CONFIG_GUIDE.md)。\n\n| Secret 名称 | 说明 | 必填 |\n|------------|------|:----:|\n| `ANSPIRE_API_KEYS` | [Anspire](https://open.anspire.cn/dsa?share_code=QFBC0FYC) API Key，一Key同时启用全球热门大模型和联网搜索，本项目新用户提供30元等额的免费额度（GLM5.2、GPT等模型特惠中） | **推荐** |\n| `AIHUBMIX_KEY` | [AIHubMix](https://inferera.com/?aff=CfMq) API Key，一Key切换使用全系模型，无需科学上网，本项目可享 10% 优惠 | **推荐** |\n| `GEMINI_API_KEY` | Google Gemini API Key | 可选 |\n| `ANTHROPIC_API_KEY` | Anthropic Claude API Key | 可选 |\n| `OPENAI_API_KEY` | OpenAI 兼容 API Key（支持 DeepSeek、通义千问等） | 可选 |\n| `OPENAI_BASE_URL` / `OPENAI_MODEL` | 使用 OpenAI 兼容服务时填写 | 可选 |\n\n> Ollama 更适合本地 / Docker 部署，GitHub Actions 推荐使用云端 API。\n\n**通知渠道配置（至少配置一个）**\n\n| Secret 名称 | 说明 |\n|------------|------|\n| `WECHAT_WEBHOOK_URL` | 企业微信机器人 |\n| `FEISHU_WEBHOOK_URL` | 飞书机器人 |\n| `TELEGRAM_BOT_TOKEN` + `TELEGRAM_CHAT_ID` | Telegram |\n| `DISCORD_WEBHOOK_URL` | Discord Webhook |\n| `SLACK_BOT_TOKEN` + `SLACK_CHANNEL_ID` | Slack Bot |\n| `EMAIL_SENDER` + `EMAIL_PASSWORD` | 邮件推送 |\n\n更多渠道、签名校验、分组邮件、Markdown 转图片等配置见 [通知渠道详细配置](docs/full-guide.md#通知渠道详细配置)。\n\n**自选股配置（必填）**\n\n| Secret 名称 | 说明 | 必填 |\n|------------|------|:----:|\n| `STOCK_LIST` | 自选股代码，如 `600519,hk00700,AAPL,7203.T,005930.KS,2330.TW` | ✅ |\n\n**新闻源配置（推荐）**\n\n新闻源会显著影响舆情、公告、事件和催化因素质量，建议至少配置一个搜索服务。\n\n| Secret 名称 | 说明 | 必填 |\n|------------|------|:----:|\n| `ANSPIRE_API_KEYS` | [Anspire AI Search](https://open.anspire.cn/dsa?share_code=QFBC0FYC)：汇聚全球舆情信息，适配A股、美股、港股等新闻和舆情检索；同一Key可复用大模型服务，本项目新用户提供免费30元等额的免费点数 | **推荐** |\n| `SERPAPI_API_KEYS` | [SerpAPI](https://serpapi.com/baidu-search-api?utm_source=github_daily_stock_analysis)：搜索引擎结果补强，适合实时金融新闻 | **推荐** |\n| `TAVILY_API_KEYS` | [Tavily](https://tavily.com/)：通用新闻搜索 API | 可选 |\n| `BOCHA_API_KEYS` | [博查搜索](https://open.bocha.cn/)：中文搜索优化，支持 AI 摘要 | 可选 |\n| `BRAVE_API_KEYS` | [Brave Search](https://brave.com/search/api/)：隐私优先，美股资讯补强 | 可选 |\n| `MINIMAX_API_KEYS` | [MiniMax](https://platform.minimaxi.com/)：结构化搜索结果 | 可选 |\n| `SEARXNG_BASE_URLS` | SearXNG 自建实例：无配额兜底，适合私有部署 | 可选 |\n\n更多搜索源、社交舆情和降级规则见 [搜索服务配置](docs/full-guide.md#搜索服务配置)。\n\n**行情数据源配置（可选）**\n\n> 默认使用 AkShare、Baostock、YFinance 等免费数据源，日志中\"未配置\"的提示不影响运行。\n> 如需更稳定的行情，可按市场配置以下 Secret：\n\n| Secret 名称 | 适用市场 | 说明 |\n|------------|:--------:|------|\n| `TUSHARE_TOKEN` | A 股 | 提升历史行情稳定性 |\n| `LONGBRIDGE_OAUTH_CLIENT_ID` + `LONGBRIDGE_OAUTH_TOKEN_CACHE_B64` | 港股/美股 | 补齐量比、换手率、PE 等字段 |\n\n> 详见 [数据源配置](docs/full-guide.md#数据源配置)。\n\n#### 3. 启用 Actions\n\n`Actions` 标签 → `I understand my workflows, go ahead and enable them`\n\n#### 4. 手动测试\n\n`Actions` → `每日股票分析` → `Run workflow` → `Run workflow`\n\n#### 完成\n\n默认每个**工作日 18:00（北京时间）**自动执行，也可手动触发。默认非交易日（含 A/H/US 节假日）不执行；强制运行、交易日检查、断点续传等规则见 [完整指南](docs/full-guide.md#定时任务配置)。\n\n### 方式二：[客户端配置教程](https://www.bilibili.com/video/BV11FEb66Eyr/) / 本地运行 / Docker 部署\n\n```bash\n# 克隆项目\ngit clone https://github.com/ZhuLinsen/daily_stock_analysis.git && cd daily_stock_analysis\n\n# 安装依赖\npip install -r requirements.txt\n\n# 配置环境变量\ncp .env.example .env && vim .env\n\n# 运行分析\npython main.py\n```\n\n常用命令：\n\n```bash\npython main.py --debug\npython main.py --dry-run\npython main.py --stocks 600519,hk00700,AAPL,2330.TW\npython main.py --market-review\npython main.py --schedule\npython main.py --serve-only\n```\n\n> Docker 部署、定时任务、云服务器访问请参考 [完整指南](docs/full-guide.md)；桌面客户端打包请参考 [桌面端打包说明](docs/desktop-package.md)。\n\n## 📱 推送效果\n\n### 决策仪表盘\n```\n🎯 2026-02-08 决策仪表盘\n共分析3只股票 | 🟢买入:0 🟡观望:2 🔴卖出:1\n\n📊 分析结果摘要\n⚪ 中钨高新(000657): 观望 | 评分 65 | 看多\n⚪ 永鼎股份(600105): 观望 | 评分 48 | 震荡\n🟡 新莱应材(300260): 卖出 | 评分 35 | 看空\n\n⚪ 中钨高新 (000657)\n📰 重要信息速览\n💭 舆情情绪: 市场关注其AI属性与业绩高增长，情绪偏积极，但需消化短期获利盘和主力流出压力。\n📊 业绩预期: 基于舆情信息，公司2025年前三季度业绩同比大幅增长，基本面强劲，为股价提供支撑。\n\n🚨 风险警报:\n\n风险点1：2月5日主力资金大幅净卖出3.63亿元，需警惕短期抛压。\n风险点2：筹码集中度高达35.15%，表明筹码分散，拉升阻力可能较大。\n风险点3：舆情中提及公司历史违规记录及重组相关风险提示，需保持关注。\n✨ 利好催化:\n\n利好1：公司被市场定位为AI服务器HDI核心供应商，受益于AI产业发展。\n利好2：2025年前三季度扣非净利润同比暴涨407.52%，业绩表现强劲。\n📢 最新动态: 【最新消息】舆情显示公司是AI PCB微钻领域龙头，深度绑定全球头部PCB/载板厂。2月5日主力资金净卖出3.63亿元，需关注后续资金流向。\n\n---\n生成时间: 18:00\n```\n\n### 大盘复盘\n```\n🎯 2026-01-10 大盘复盘\n\n📊 主要指数\n- 上证指数: 3250.12 (🟢+0.85%)\n- 深证成指: 10521.36 (🟢+1.02%)\n- 创业板指: 2156.78 (🟢+1.35%)\n\n📈 市场概况\n上涨: 3920 | 下跌: 1349 | 涨停: 155 | 跌停: 3\n\n🔥 板块表现\n领涨: 互联网服务、文化传媒、小金属\n领跌: 保险、航空机场、光伏设备\n```\n\n## ⚙️ 配置说明\n\n完整环境变量、模型渠道、通知渠道、数据源优先级、交易纪律、基本面 P0 语义和部署说明请参考 [完整配置指南](docs/full-guide.md)。\n\n## 🖥️ Web 界面\n\nWeb 工作台提供配置管理、任务监控、手动分析、历史报告、完整 Markdown 报告、Agent 问股、回测、持仓管理、智能导入和浅色 / 深色主题。启动方式：\n\n```bash\npython main.py --webui\npython main.py --webui-only\n```\n\n访问 `http://127.0.0.1:8000` 即可使用。认证、智能导入、搜索补全、历史报告复制、云服务器访问等细节见 [本地 WebUI 管理界面](docs/full-guide.md#本地-webui-管理界面)。\n\n## 🤖 Agent 策略问股\n\n配置任意可用 AI API Key 后，Web `/chat` 页面即可使用策略问股；如需显式关闭可设置 `AGENT_MODE=false`。\n\n- 支持均线金叉、缠论、波浪理论、多头趋势、热点题材、事件驱动、成长质量、预期重估等内置策略\n- 支持实时行情、K 线、技术指标、新闻和风险信息调用\n- 支持多轮追问、会话导出、发送到通知渠道和后台执行\n- 支持自定义策略文件与多 Agent 编排（实验性）\n\n> Agent 具体参数、`skill` 命名兼容、多 Agent 模式和预算护栏见 [完整指南](docs/full-guide.md#本地-webui-管理界面) 与 [LLM 配置指南](docs/LLM_CONFIG_GUIDE.md)。\n\n## 🧩 相关项目 (Related Projects)\n\n> DSA 聚焦日常分析报告；选股实现参考 AlphaSift，AlphaEvo 用于策略验证与进化。\n\n| 项目 | 定位 |\n|------|------|\n| [AlphaSift](https://github.com/ZhuLinsen/alphasift) | DSA 选股实现的参考项目 |\n| [AlphaEvo](https://github.com/ZhuLinsen/alphaevo) | 策略回测与自我进化，用于验证策略规则，并通过迭代探索策略参数与组合 |\n\n## 📬 联系与合作\n\n<table>\n  <tr>\n    <td width=\"92\" valign=\"top\"><strong>合作邮箱</strong></td>\n    <td valign=\"top\">\n      <a href=\"mailto:zhuls345@gmail.com\">zhuls345@gmail.com</a><br>\n      项目咨询、部署支持与功能扩展\n    </td>\n    <td align=\"center\" rowspan=\"3\" valign=\"middle\" width=\"148\">\n      <a href=\"http://xhslink.com/m/tU520DWCKT\" target=\"_blank\"><img src=\"./docs/assets/xiaohongshu_tick.jpg\" width=\"112\" alt=\"小红书二维码\"></a><br>\n      <sub>扫码关注小红书</sub>\n    </td>\n  </tr>\n  <tr>\n    <td width=\"92\" valign=\"top\"><strong>小红书</strong></td>\n    <td valign=\"top\"><a href=\"http://xhslink.com/m/tU520DWCKT\">欢迎关注小红书</a></td>\n  </tr>\n  <tr>\n    <td width=\"92\" valign=\"top\"><strong>问题反馈</strong></td>\n    <td valign=\"","default_branch":"main","files":1109,"tree":[".claude/skills/README.md",".claude/skills/analyze-issue/SKILL.md",".claude/skills/analyze-pr/SKILL.md",".claude/skills/fix-issue/SKILL.md",".dockerignore",".env.example",".gitattributes",".github/CODEOWNERS",".github/FUNDING.yml",".github/ISSUE_TEMPLATE/bug_report.md",".github/ISSUE_TEMPLATE/config.yml",".github/ISSUE_TEMPLATE/feature_request.md",".github/PULL_REQUEST_TEMPLATE.md",".github/ci-test-durations.json",".github/copilot-instructions.md",".github/instructions/backend.instructions.md",".github/instructions/client.instructions.md",".github/instructions/governance.instructions.md",".github/release.yml",".github/requirements-ci.txt",".github/scripts/ai_review.py",".github/scripts/build_release_notes.py",".github/workflows/00-daily-analysis.yml",".github/workflows/auto-tag.yml",".github/workflows/ci.yml",".github/workflows/create-release.yml",".github/workflows/desktop-release.yml",".github/workflows/docker-publish.yml",".github/workflows/ghcr-dockerhub.yml",".github/workflows/network-smoke.yml",".github/workflows/pr-review.yml",".github/workflows/stale.yml",".gitignore","AGENTS.md","CLAUDE.md","LICENSE","README.md","SKILL.md","THIRD_PARTY_NOTICES.md","api/__init__.py","api/app.py","api/deps.py","api/middlewares/__init__.py","api/middlewares/auth.py","api/middlewares/error_handler.py","api/v1/__init__.py","api/v1/endpoints/__init__.py","api/v1/endpoints/agent.py","api/v1/endpoints/alerts.py","api/v1/endpoints/analysis.py","api/v1/endpoints/auth.py","api/v1/endpoints/backtest.py","api/v1/endpoints/decision_signals.py","api/v1/endpoints/health.py","api/v1/endpoints/history.py","api/v1/endpoints/intelligence.py","api/v1/endpoints/portfolio.py","api/v1/endpoints/screening.py","api/v1/endpoints/stocks.py","api/v1/endpoints/system_config.py","api/v1/endpoints/usage.py","api/v1/errors.py","api/v1/router.py","api/v1/schemas/__init__.py","api/v1/schemas/alerts.py","api/v1/schemas/analysis.py","api/v1/schemas/backtest.py","api/v1/schemas/common.py","api/v1/schemas/decision_signals.py","api/v1/schemas/history.py","api/v1/schemas/intelligence.py","api/v1/schemas/market_phase.py","api/v1/schemas/portfolio.py","api/v1/schemas/run_flow.py","api/v1/schemas/stocks.py","api/v1/schemas/system_config.py","api/v1/schemas/usage.py","apps/dsa-desktop/installer.nsh","apps/dsa-desktop/main.js","apps/dsa-desktop/package-lock.json","apps/dsa-desktop/package.json","apps/dsa-desktop/preload.js","apps/dsa-desktop/renderer/loading.html","apps/dsa-desktop/scripts/afterPackMacos.js","apps/dsa-desktop/tests/main.test.js","apps/dsa-desktop/tests/preload.test.js","apps/dsa-web/.gitignore","apps/dsa-web/e2e/market-structure-card-visual.spec.ts","apps/dsa-web/e2e/report-markdown.spec.ts","apps/dsa-web/e2e/smoke.spec.ts","apps/dsa-web/eslint.config.js","apps/dsa-web/index.html","apps/dsa-web/package-lock.json","apps/dsa-web/package.json","apps/dsa-web/playwright.config.ts","apps/dsa-web/public/stocks.index.json","apps/dsa-web/public/vite.svg","apps/dsa-web/src/App.css","apps/dsa-web/src/App.test.tsx","apps/dsa-web/src/App.tsx","apps/dsa-web/src/api/__tests__/agent.test.ts","apps/dsa-web/src/api/__tests__/alerts.test.ts","apps/dsa-web/src/api/__tests__/analysis.test.ts","apps/dsa-web/src/api/__tests__/decisionSignals.test.ts","apps/dsa-web/src/api/__tests__/screening.test.ts","apps/dsa-web/src/api/__tests__/systemConfig.test.ts","apps/dsa-web/src/api/__tests__/usage.test.ts","apps/dsa-web/src/api/agent.ts","apps/dsa-web/src/api/alerts.ts","apps/dsa-web/src/api/analysis.ts","apps/dsa-web/src/api/auth.ts","apps/dsa-web/src/api/backtest.ts","apps/dsa-web/src/api/decisionSignals.ts","apps/dsa-web/src/api/error.ts","apps/dsa-web/src/api/history.ts","apps/dsa-web/src/api/index.ts","apps/dsa-web/src/api/portfolio.ts","apps/dsa-web/src/api/screening.ts","apps/dsa-web/src/api/stocks.ts","apps/dsa-web/src/api/systemConfig.ts","apps/dsa-web/src/api/usage.ts","apps/dsa-web/src/api/utils.ts","apps/dsa-web/src/assets/react.svg","apps/dsa-web/src/components/StockAutocomplete/StockAutocomplete.tsx","apps/dsa-web/src/components/StockAutocomplete/SuggestionsList.tsx","apps/dsa-web/src/components/StockAutocomplete/__tests__/StockAutocomplete.test.tsx","apps/dsa-web/src/components/StockAutocomplete/index.ts","apps/dsa-web/src/components/alerts/AlertRuleForm.tsx","apps/dsa-web/src/components/alerts/AlertRuleList.tsx","apps/dsa-web/src/components/alerts/AlertTriggerHistory.tsx","apps/dsa-web/src/components/alerts/__tests__/AlertRuleForm.test.tsx","apps/dsa-web/src/components/alerts/__tests__/AlertRuleList.test.tsx","apps/dsa-web/src/components/common/ApiErrorAlert.tsx","apps/dsa-web/src/components/common/AppPage.tsx","apps/dsa-web/src/components/common/Badge.tsx","apps/dsa-web/src/components/common/Button.tsx","apps/dsa-web/src/components/common/Card.tsx","apps/dsa-web/src/components/common/Checkbox.tsx","apps/dsa-web/src/components/common/Collapsible.tsx","apps/dsa-web/src/components/common/ConfirmDialog.tsx","apps/dsa-web/src/components/common/Drawer.tsx","apps/dsa-web/src/components/common/EmptyState.tsx","apps/dsa-web/src/components/common/EyeToggleIcon.tsx","apps/dsa-web/src/components/common/InlineAlert.tsx","apps/dsa-web/src/components/common/Input.tsx","apps/dsa-web/src/components/common/JsonViewer.tsx","apps/dsa-web/src/components/common/Loading.tsx","apps/dsa-web/src/components/common/PageHeader.tsx","apps/dsa-web/src/components/common/Pagination.tsx","apps/dsa-web/src/components/common/ParticleBackground.tsx","apps/dsa-web/src/components/common/ScoreGauge.tsx","apps/dsa-web/src/components/common/ScrollArea.tsx","apps/dsa-web/src/components/common/SectionCard.tsx","apps/dsa-web/src/components/common/Select.tsx","apps/dsa-web/src/components/common/StatCard.tsx","apps/dsa-web/src/components/common/StatusDot.tsx","apps/dsa-web/src/components/common/StickyActionBar.tsx","apps/dsa-web/src/components/common/ToastViewport.tsx","apps/dsa-web/src/components/common/Toolbar.tsx","apps/dsa-web/src/components/common/Tooltip.tsx","apps/dsa-web/src/components/common/__tests__/Button.test.tsx","apps/dsa-web/src/components/common/__tests__/ConfirmDialog.test.tsx","apps/dsa-web/src/components/common/__tests__/Input.test.tsx","apps/dsa-web/src/components/common/__tests__/JsonViewer.test.tsx","apps/dsa-web/src/components/common/__tests__/ScrollArea.test.tsx","apps/dsa-web/src/components/common/index.ts","apps/dsa-web/src/components/dashboard/DashboardPanelHeader.tsx","apps/dsa-web/src/components/dashboard/DashboardStateBlock.tsx","apps/dsa-web/src/components/dashboard/__tests__/DashboardStateBlock.test.tsx","apps/dsa-web/src/components/dashboard/index.ts","apps/dsa-web/src/components/decision-signals/DecisionSignalDisplay.tsx","apps/dsa-web/src/components/decision-signals/DecisionSignalProfileCalibration.tsx","apps/dsa-web/src/components/decision-signals/DecisionSignalTimeline.tsx","apps/dsa-web/src/components/decision-signals/__tests__/DecisionSignalDisplay.test.tsx","apps/dsa-web/src/components/decision-signals/__tests__/DecisionSignalProfileCalibration.test.tsx","apps/dsa-web/src/components/decision-signals/__tests__/DecisionSignalTimeline.test.tsx","apps/dsa-web/src/components/history/HistoryList.tsx","apps/dsa-web/src/components/history/HistoryListItem.tsx","apps/dsa-web/src/components/history/StockBar.tsx","apps/dsa-web/src/components/history/StockBarItem.tsx","apps/dsa-web/src/components/history/StockHistoryTrendDrawer.tsx","apps/dsa-web/src/components/history/__tests__/HistoryList.test.tsx","apps/dsa-web/src/components/history/__tests__/StockBarItem.test.tsx","apps/dsa-web/src/components/history/__tests__/StockHistoryTrendDrawer.test.tsx","apps/dsa-web/src/components/history/index.ts","apps/dsa-web/src/components/i18n/UiLanguageToggle.tsx","apps/dsa-web/src/components/layout/RouteBoundary.tsx","apps/dsa-web/src/components/layout/Shell.tsx","apps/dsa-web/src/components/layout/ShellHeader.tsx","apps/dsa-web/src/components/layout/SidebarNav.tsx","apps/dsa-web/src/components/layout/__tests__/RouteBoundary.test.tsx","apps/dsa-web/src/components/layout/__tests__/Shell.test.tsx","apps/dsa-web/src/components/layout/__tests__/SidebarNav.test.tsx","apps/dsa-web/src/components/market-review/MarketReviewRegionSelector.tsx","apps/dsa-web/src/components/market-review/__tests__/MarketReviewRegionSelector.test.tsx","apps/dsa-web/src/components/report/AnalysisContextSummary.tsx","apps/dsa-web/src/components/report/MarketReviewReportView.tsx","apps/dsa-web/src/components/report/MarketStructureCard.tsx","apps/dsa-web/src/components/report/ReportDetails.tsx","apps/dsa-web/src/components/report/ReportDiagnostics.tsx","apps/dsa-web/src/components/report/ReportMarkdown.tsx","apps/dsa-web/src/components/report/ReportMarkdownBody.tsx","apps/dsa-web/src/components/report/ReportMarkdownDrawer.tsx","apps/dsa-web/src/components/report/ReportMarkdownPanel.tsx","apps/dsa-web/src/components/report/ReportNews.tsx","apps/dsa-web/src/components/report/ReportOverview.tsx","apps/dsa-web/src/components/report/ReportStrategy.tsx","apps/dsa-web/src/components/report/ReportSummary.tsx","apps/dsa-web/src/components/report/ShareImageButton.tsx","apps/dsa-web/src/components/report/__tests__/AnalysisContextSummary.test.tsx","apps/dsa-web/src/components/report/__tests__/MarketReviewReportView.test.tsx","apps/dsa-web/src/components/report/__tests__/MarketStructureCard.test.tsx","apps/dsa-web/src/components/report/__tests__/ReportDetails.test.tsx","apps/dsa-web/src/components/report/__tests__/ReportDiagnostics.test.tsx","apps/dsa-web/src/components/report/__tests__/ReportMarkdown.test.tsx","apps/dsa-web/src/components/report/__tests__/ReportMarkdownDrawer.test.tsx","apps/dsa-web/src/components/report/__tests__/ReportNews.test.tsx","apps/dsa-web/src/components/report/__tests__/ReportOverview.test.tsx","apps/dsa-web/src/components/report/__tests__/ShareImageButton.test.tsx","apps/dsa-web/src/components/report/index.ts","apps/dsa-web/src/components/run-flow/RunFlowEventList.tsx","apps/dsa-web/src/components/run-flow/RunFlowGraph.tsx","apps/dsa-web/src/components/run-flow/RunFlowNodeDetails.tsx","apps/dsa-web/src/components/run-flow/RunFlowPanel.tsx","apps/dsa-web/src/components/run-flow/RunFlowSummaryBar.tsx","apps/dsa-web/src/components/run-flow/__tests__/RunFlowEventList.test.tsx","apps/dsa-web/src/components/run-flow/__tests__/RunFlowGraph.test.tsx","apps/dsa-web/src/components/run-flow/__tests__/RunFlowNodeDetails.test.tsx","apps/dsa-web/src/components/run-flow/__tests__/RunFlowPanel.test.tsx","apps/dsa-web/src/components/run-flow/__tests__/topologyViewModel.test.ts","apps/dsa-web/src/components/run-flow/index.ts","apps/dsa-web/src/components/run-flow/topologyViewModel.ts","apps/dsa-web/src/components/run-flow/utils.ts","apps/dsa-web/src/components/settings/AgentBackendStatusPanel.tsx","apps/dsa-web/src/components/settings/AuthSettingsCard.tsx","apps/dsa-web/src/components/settings/ChangePasswordCard.tsx","apps/dsa-web/src/components/settings/GenerationBackendStatusPanel.tsx","apps/dsa-web/src/components/settings/IntelligentImport.tsx","apps/dsa-web/src/components/settings/LLMChannelEditor.tsx","apps/dsa-web/src/components/settings/NotificationTestPanel.tsx","apps/dsa-web/src/components/settings/SettingsAlert.tsx","apps/dsa-web/src/components/settings/SettingsCategoryNav.tsx","apps/dsa-web/src/components/settings/SettingsField.tsx","apps/dsa-web/src/components/settings/SettingsHelpButton.tsx","apps/dsa-web/src/components/settings/SettingsLoading.tsx","apps/dsa-web/src/components/settings/SettingsPanelErrorBoundary.tsx","apps/dsa-web/src/components/settings/SettingsSectionCard.tsx","apps/dsa-web/src/components/settings/__tests__/AgentBackendStatusPanel.test.tsx","apps/dsa-web/src/components/settings/__tests__/AuthSettingsCard.test.tsx","apps/dsa-web/src/components/settings/__tests__/GenerationBackendStatusPanel.test.tsx","apps/dsa-web/src/components/settings/__tests__/IntelligentImport.test.tsx","apps/dsa-web/src/components/settings/__tests__/LLMChannelEditor.test.tsx","apps/dsa-web/src/components/settings/__tests__/NotificationTestPanel.test.tsx","apps/dsa-web/src/components/settings/__tests__/SettingsField.test.tsx","apps/dsa-web/src/components/settings/__tests__/SettingsPanelErrorBoundary.test.tsx","apps/dsa-web/src/components/settings/__tests__/llmProviderTemplates.test.ts","apps/dsa-web/src/components/settings/index.ts","apps/dsa-web/src/components/settings/llmProviderTemplates.ts","apps/dsa-web/src/components/tasks/TaskPanel.tsx","apps/dsa-web/src/components/tasks/__tests__/TaskPanel.test.tsx","apps/dsa-web/src/components/tasks/index.ts","apps/dsa-web/src/components/theme/ThemeProvider.tsx","apps/dsa-web/src/components/theme/ThemeToggle.tsx","apps/dsa-web/src/components/theme/__tests__/ThemeToggle.test.tsx","apps/dsa-web/src/components/watchlist/HomeStockWorkspace.tsx","apps/dsa-web/src/components/watchlist/__tests__/HomeStockWorkspace.test.tsx","apps/dsa-web/src/contexts/AuthContext.tsx","apps/dsa-web/src/contexts/UiLanguageContext.tsx","apps/dsa-web/src/contexts/__tests__/AuthContext.test.tsx","apps/dsa-web/src/contexts/__tests__/UiLanguageContext.test.tsx","apps/dsa-web/src/hooks/__tests__/useAutocomplete.test.tsx","apps/dsa-web/src/hooks/__tests__/useDashboardLifecycle.test.tsx","apps/dsa-web/src/hooks/__tests__/useRunFlowSnapshot.test.tsx","apps/dsa-web/src/hooks/__tests__/useStockIndex.test.tsx","apps/dsa-web/src/hooks/__tests__/useSystemConfig.test.tsx","apps/dsa-web/src/hooks/__tests__/useTaskStream.test.tsx","apps/dsa-web/src/hooks/__tests__/useWatchlist.test.tsx","apps/dsa-web/src/hooks/index.ts","apps/dsa-web/src/hooks/useAuth.ts","apps/dsa-web/src/hooks/useAutocomplete.ts","apps/dsa-web/src/hooks/useDashboardLifecycle.ts","apps/dsa-web/src/hooks/useHomeDashboardState.ts","apps/dsa-web/src/hooks/useRunFlowSnapshot.ts","apps/dsa-web/src/hooks/useStockIndex.ts","apps/dsa-web/src/hooks/useSystemConfig.ts","apps/dsa-web/src/hooks/useTaskStream.ts","apps/dsa-web/src/hooks/useWatchlist.ts","apps/dsa-web/src/i18n/uiText.ts","apps/dsa-web/src/index.css","apps/dsa-web/src/locales/featureText.ts","apps/dsa-web/src/locales/settingsHelp.test.ts","apps/dsa-web/src/locales/settingsHelp.ts","apps/dsa-web/src/main.tsx","apps/dsa-web/src/pages/AlertsPage.tsx","apps/dsa-web/src/pages/BacktestPage.tsx","apps/dsa-web/src/pages/ChatPage.tsx","apps/dsa-web/src/pages/DecisionSignalsPage.tsx","apps/dsa-web/src/pages/HomePage.tsx","apps/dsa-web/src/pages/LoginPage.tsx","apps/dsa-web/src/pages/NotFoundPage.tsx","apps/dsa-web/src/pages/PortfolioPage.tsx","apps/dsa-web/src/pages/SettingsPage.tsx","apps/dsa-web/src/pages/StockScreeningPage.tsx","apps/dsa-web/src/pages/TokenUsagePage.tsx","apps/dsa-web/src/pages/__tests__/AlertsPage.test.tsx","apps/dsa-web/src/pages/__tests__/BacktestPage.test.tsx","apps/dsa-web/src/pages/__tests__/ChatPage.test.tsx","apps/dsa-web/src/pages/__tests__/DecisionSignalsPage.test.tsx","apps/dsa-web/src/pages/__tests__/HomePage.test.tsx","apps/dsa-web/src/pages/__tests__/LoginPage.test.tsx","apps/dsa-web/src/pages/__tests__/PortfolioPage.test.tsx","apps/dsa-web/src/pages/__tests__/SettingsPage.test.tsx","apps/dsa-web/src/pages/__tests__/StockScreeningPage.test.tsx","apps/dsa-web/src/pages/__tests__/TokenUsagePage.test.tsx","apps/dsa-web/src/setupTests.ts","apps/dsa-web/src/stores/__tests__/agentChatStore.test.ts","apps/dsa-web/src/stores/__tests__/stockPoolStore.test.ts","apps/dsa-web/src/stores/agentChatStore.ts","apps/dsa-web/src/stores/analysisStore.ts","apps/dsa-web/src/stores/index.ts","apps/dsa-web/src/stores/stockPoolStore.ts","apps/dsa-web/src/types/alerts.ts","apps/dsa-web/src/types/analysis.ts","apps/dsa-web/src/types/backtest.ts","apps/dsa-web/src/types/decisionSignals.ts","apps/dsa-web/src/types/portfolio.ts","apps/dsa-web/src/types/runFlow.ts","apps/dsa-web/src/types/stockIndex.ts","apps/dsa-web/src/types/systemConfig.ts","apps/dsa-web/src/utils/__tests__/chatFollowUp.test.ts","apps/dsa-web/src/utils/__tests__/chatScroll.test.ts","apps/dsa-web/src/utils/__tests__/cn.test.ts","apps/dsa-web/src/utils/__tests__/decisionAction.test.ts","apps/dsa-web/src/utils/__tests__/decisionSignalLabels.test.ts","apps/dsa-web/src/utils/__tests__/decisionSignalProfile.test.ts","apps/dsa-web/src/utils/__tests__/decisionSignalTime.test.ts","apps/dsa-web/src/utils/__tests__/markdown.stock-report.test.ts","apps/dsa-web/src/utils/__tests__/markdown.test.ts","apps/dsa-web/src/utils/__tests__/normalizeQuery.test.ts","apps/dsa-web/src/utils/__tests__/portfolioFormat.test.ts","apps/dsa-web/src/utils/__tests__/reportLanguage.test.ts","apps/dsa-web/src/utils/__tests__/searchStocks.test.ts","apps/dsa-web/src/utils/__tests__/stockCode.test.ts","apps/dsa-web/src/utils/__tests__/stockIndexLoader.test.ts","apps/dsa-web/src/utils/__tests__/stockList.test.ts","apps/dsa-web/src/utils/__tests__/stockName.test.ts","apps/dsa-web/src/utils/__tests__/validation.test.ts","apps/dsa-web/src/utils/chatExport.ts","apps/dsa-web/src/utils/chatFollowUp.ts","apps/dsa-web/src/utils/chatScroll.ts","apps/dsa-web/src/utils/chatStockCode.ts","apps/dsa-web/src/utils/cn.ts","apps/dsa-web/src/utils/constants.ts","apps/dsa-web/src/utils/decisionAction.ts","apps/dsa-web/src/utils/decisionSignalLabels.ts","apps/dsa-web/src/utils/decisionSignalProfile.ts","apps/dsa-web/src/utils/decisionSignalTime.ts","apps/dsa-web/src/utils/decisionSignalTimeline.ts","apps/dsa-web/src/utils/format.ts","apps/dsa-web/src/utils/markdown.ts","apps/dsa-web/src/utils/marketPhase.ts","apps/dsa-web/src/utils/marketReviewRegion.ts","apps/dsa-web/src/utils/normalizeQuery.ts","apps/dsa-web/src/utils/portfolioFormat.ts","apps/dsa-web/src/utils/reportLanguage.ts","apps/dsa-web/src/utils/searchStocks.ts","apps/dsa-web/src/utils/stockCode.ts","apps/dsa-web/src/utils/stockIndexFields.ts","apps/dsa-web/src/utils/stockIndexLoader.ts","apps/dsa-web/src/utils/stockList.ts","apps/dsa-web/src/utils/stockName.ts","apps/dsa-web/src/utils/systemConfigI18n.ts","apps/dsa-web/src/utils/uiLanguage.ts","apps/dsa-web/src/utils/uuid.ts","apps/dsa-web/src/utils/validation.ts","apps/dsa-web/tailwind.config.js","apps/dsa-web/tests/home-mobile-scroll-styles.test.ts","apps/dsa-web/tests/index.theme-bootstrap.test.ts","apps/dsa-web/tests/login-theme-tokens.test.ts","apps/dsa-web/tests/settings_field_description_fallback.test.tsx","apps/dsa-web/tests/system_config_i18n.test.ts","apps/dsa-web/tests/ui_governance.test.ts","apps/dsa-web/tsconfig.app.json","apps/dsa-web/tsconfig.json","apps/dsa-web/tsconfig.node.json","apps/dsa-web/vite.config.test.ts","apps/dsa-web/vite.config.ts","apps/dsa-web/vitest.config.ts","bot/__init__.py","bot/commands/__init__.py","bot/commands/analyze.py","bot/commands/ask.py","bot/commands/base.py","bot/commands/batch.py","bot/commands/chat.py","bot/commands/help.py","bot/commands/history.py","bot/commands/market.py","bot/commands/research.py","bot/commands/status.py"],"storefront":"/r/ZhuLinsen","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/ZhuLinsen/daily_stock_analysis/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}