Lv, Qi
427776b863
feat(analysis): Implement Configurable Analysis Template Engine
...
This commit introduces a comprehensive, template-based analysis orchestration system, refactoring the entire analysis generation workflow from the ground up.
Key Changes:
1. **Backend Architecture (`report-generator-service`):**
* Replaced the naive analysis workflow with a robust orchestrator based on a Directed Acyclic Graph (DAG) of module dependencies.
* Implemented a full topological sort (`petgraph`) to determine the correct execution order and detect circular dependencies.
2. **Data Models (`common-contracts`, `data-persistence-service`):**
* Introduced the concept of `AnalysisTemplateSets` to allow for multiple, independent, and configurable analysis workflows.
* Created a new `analysis_results` table to persist the output of each module for every analysis run, ensuring traceability.
* Implemented a file-free data seeding mechanism to populate default analysis templates on service startup.
3. **API Layer (`api-gateway`):**
* Added a new asynchronous endpoint (`POST /analysis-requests/{symbol}`) to trigger analysis workflows via NATS messages.
* Updated all configuration endpoints to support the new `AnalysisTemplateSets` model.
4. **Frontend UI (`/config`, `/query`):**
* Completely refactored the "Analysis Config" page into a two-level management UI for "Template Sets" and the "Modules" within them, supporting full CRUD operations.
* Updated the "Query" page to allow users to select which analysis template to use when generating a report.
This new architecture provides a powerful, flexible, and robust foundation for all future development of our intelligent analysis capabilities.
2025-11-18 07:47:08 +08:00
Lv, Qi
60e6c8f61b
feat(config): 将服务配置全面迁移至数据库
...
本次提交完成了一项重要的架构重构,将所有外部服务的API凭证管理从环境变量迁移到了中心化的数据库配置中。
主要变更:
1. **统一配置源**:
- `data-persistence-service` 现已提供 `/api/v1/configs/data_sources` 端点,用于统一管理数据源配置。
- 所有配置(LLM 和数据源)现在都通过数据库的 `system_config` 表进行管理,实现了“单一事实源”。
2. **增强服务韧性**:
- 重构了 `finnhub-`, `tushare-`, `alphavantage-provider-service`。
- 这些服务在启动时不再强制要求 API Key。
- 引入了动态配置轮询器 (`config_poller`),服务现在可以定期从数据库获取最新配置。
- 实现了“降级模式”:当配置缺失时,服务会进入 `Degraded` 状态并暂停处理消息,而不是直接崩溃。配置恢复后,服务会自动回到 `Active` 状态。
- `/health` 端点现在能准确反映服务的真实运行状态。
3. **前端易用性提升**:
- 您在 `/config` 页面上增加了“数据源配置”面板,允许用户通过 UI 动态更新所有 API Token。
4. **部署简化**:
- 从 `docker-compose.yml` 中移除了所有已废弃的 `_API_KEY` 环境变量,消除了启动时的警告。
这项重构显著提升了系统的可维护性、健壮性和用户体验,为未来的功能扩展奠定了坚实的基础。
2025-11-18 05:58:18 +08:00
Lv, Qi
a1e4b265ba
feat(config): Implement database-centric LLM provider architecture
...
本次提交完成了一次全面的架构重构,实现了以数据库为中心的、支持多供应商的LLM配置体系。
**核心变更**:
1. **数据库驱动配置**: 废弃了所有基于本地文件的配置方案 (`analysis-config.json`),将LLM Provider和分析模块的配置作为结构化数据存入数据库的`system_config`表中,由`data-persistence-service`统一管理。
2. **Schema-in-Code**: 在`common-contracts`中定义了所有配置的Rust Structs,作为整个系统的“单一事实源”,确保了端到端的类型安全。
3. **服务职责重构**:
* `data-persistence-service`吸收了配置管理功能,成为配置的“守门人”。
* `config-service-rs`服务已被彻底移除。
* `report-generator-service`重构为可以为每个任务动态创建使用不同Provider配置的LLM客户端。
4. **前端功能增强**:
* 新增了独立的`/llm-config`页面,用于对LLM Providers及其可用模型进行完整的CRUD管理,并支持模型自动发现。
* 重构了旧的`/config`页面,为分析模块提供了级联选择器来精确指定所需的Provider和Model。
此次重构极大地提升了系统的灵活性和可扩展性,完全对齐了“配置即数据”的现代化设计原则。
2025-11-17 04:41:36 +08:00
Lv, Qi
53d69a00e5
fix(services): make providers observable and robust
...
- Fix Dockerfile stub builds; compile full sources (no empty binaries)
- Add ca-certificates and curl in runtime images for TLS/healthchecks
- Enable RUST_LOG and RUST_BACKTRACE for all providers
- Add HTTP /health healthchecks in docker-compose for ports 8000-8004
- Standardize Tushare /health to structured HealthStatus JSON
- Enforce strict config validation (FINNHUB_API_KEY, TUSHARE_API_TOKEN)
- Map provider API keys via .env in docker-compose
- Log provider_services at API Gateway startup for diagnostics
Outcome: provider containers no longer exit silently; missing keys fail fast with explicit errors; health and logs are consistent across modules.
2025-11-17 04:40:51 +08:00
Lv, Qi
9d62a53b73
refactor(architecture): Align frontend & docs with DB gateway pattern
...
本次提交旨在完成一次架构一致性重构,核心目标是使前端代码和相关文档完全符合“`data-persistence-service`是唯一数据库守门人”的设计原则。
主要变更包括:
1. **移除前端数据库直连**:
* 从`docker-compose.yml`中删除了`frontend`服务的`DATABASE_URL`。
* 彻底移除了`frontend`项目中的`Prisma`依赖、配置文件和客户端实例。
2. **清理前端UI**:
* 从配置页面中删除了所有与数据库设置相关的UI组件和业务逻辑。
3. **同步更新文档**:
* 更新了《用户使用文档》和《需求文档》,移除了所有提及或要求前端进行数据库配置的过时内容。
此次重构后,系统前端的数据交互已完全收敛至`api-gateway`,确保了架构的统一性、健壮性和高内聚。
2025-11-17 01:29:56 +08:00
Lv, Qi
45ec5bb16d
reorg docs
2025-11-17 00:58:43 +08:00
Lv, Qi
ceffa0d95c
chore(build): unify Dockerfiles and root .dockerignore; fix services after deps upgrade
...
- secrecy: migrate Secret<String> -> SecretString across services; adjust usages
- warnings: clean unused imports/structs (no behavior change)
- docker-compose: remove unnecessary host port mappings; rely on app-network; keep frontend only
- build: set build.context to repo root; reference per-service Dockerfiles
- add: root .dockerignore to exclude target/node_modules/ref/archive/docs and logs
- data-persistence-service: refine cargo-chef with path deps; slim context; copy correct targets
- Dockerfiles: normalize multi-stage builds; fix WORKDIR and release binary paths
- nats: resolve 4222 conflict by not binding to host
- verified: all rust services build successfully with new flow
2025-11-16 23:34:28 +08:00
Lv, Qi
5327e76aaa
chore: 提交本轮 Rust 架构迁移相关改动
...
- docker-compose: 下线 Python backend/config-service,切换至 config-service-rs
- archive: 归档 legacy Python 目录至 archive/python/*
- services: 新增/更新 common-contracts、api-gateway、各 provider、report-generator-service、config-service-rs
- data-persistence-service: API/system 模块与模型/DTO 调整
- frontend: 更新 useApi 与 API 路由
- docs: 更新路线图并勾选光荣退役
- cleanup: 移除 data-distance-service 占位测试
2025-11-16 20:55:46 +08:00
Lv, Qi
0e45dd4a3f
docs: 更新路线图—勾选光荣退役并归档旧Python服务
...
- 勾选阶段五第3项下线Python服务
- 描述将 backend/ 与 services/config-service/ 归档至 archive/python/
- 明确无Python组件下系统运行的验收标准
2025-11-16 20:54:01 +08:00
Lv, Qi
a6cca48fed
chore(cleanup): remove redundant data-distance-service stub tests
...
- Covered by data-persistence-service tests (db/api).
- No references or compose entries.
2025-11-16 20:52:26 +08:00
Lv, Qi
21155bc4f8
feat(realtime): 接入前端实时报价并完善后端缓存
...
前端: 新增 RealTimeQuoteResponse 类型;新增 useRealtimeQuote Hook 并在报告页图表旁展示价格与时间戳(严格 TTL,无兜底)
FastAPI: 新增 GET /financials/{market}/{symbol}/realtime?max_age_seconds=.. 只读端点;通过 DataPersistenceClient 读取 Rust 缓存
Rust: 新增 realtime_quotes hypertable 迁移;新增 POST /api/v1/market-data/quotes 与 GET /api/v1/market-data/quotes/{symbol}?market=..;新增 DTO/Model/DB 函数;修正 #[api] 宏与路径参数;生成 SQLx 离线缓存 (.sqlx) 以支持离线构建
Python: DataPersistenceClient 新增 upsert/get 实时报价,并调整 GET 路径与参数
说明: TradingView 图表是第三方 websocket,不受我们缓存控制;页面数值展示走自有缓存通路,统一且可控。
2025-11-09 05:12:14 +08:00
Lv, Qi
230f180dea
fix(frontend): remove localhost rewrites and enforce NEXT_PUBLIC_BACKEND_URL
...
- remove Next.js rewrites to http://127.0.0.1:8000
- require NEXT_PUBLIC_BACKEND_URL in API routes (config, financials, config/test)
- prevent accidental fallback to host ports; use container service name backend:8000
2025-11-08 22:59:03 +08:00
Lv, Qi
3d0fd6f704
refactor(phase0-1): 容器化与配置服务拆分,并清理根目录
...
- 新增 docker-compose 与 Tiltfile,容器化 backend/frontend/postgres(宿主口+10000)
- 新增 services/config-service(GET /api/v1/system, /analysis-modules),并加入 compose
- backend ConfigManager 移除本地文件回退,强制依赖 config-service
- 新增 backend/frontend Dockerfile
- 清理根目录:移动 pm2.config.js -> deployment/;dev.py -> scripts/;删除根 package.json 与 lock
- 新增 .gitignore,忽略二进制与临时文件
2025-11-08 21:07:38 +08:00
xucheng
ca60410966
feat: 通用市场财务/快照/分析接口;增强数据源与配置读取
...
Backend
- router(financial): 新增通用路径 /{market}/{stock_code}、/snapshot、/analysis/stream
- 用 MarketEnum 统一市场(cn/us/hk/jp)
- 将 /china/{ts_code} 改为通用 get_financials,并规范 period,按年限裁剪
- 新增通用昨日快照接口(CN 复用原逻辑,其他市场兜底近交易日收盘)
- data_manager: 仅从 config/config.json 读取各 provider API key,不再读取环境变量
- series 构建更健壮:None/空结构判定;接受 numpy/pandas 数值类型并安全转 float
- provider(finnhub):
- SDK 失败时使用 httpx 直连兜底(profile2、financials-reported)
- 规范化年度报表,映射 revenue/net income/gross profit/assets/equity/goodwill/OCF/CapEx
- 计算 gross/net margin、ROA、ROE;直接产出 series 结构
- 增加关键步骤日志与异常保护
- provider(yfinance): 修正同步阻塞的获取逻辑,使用 run_in_executor 包装
Frontend
- hooks(useApi):
- 将中国财务接口路径改为 /api/financials/cn
- 新增 useFinancials 与 useSnapshot,统一多市场数据访问
- report/[symbol]/page.tsx:
- 支持多市场(映射 usa→us、china→cn 等),统一 symbol 与分析流路径
- 去除仅限中国市场的 UI 限制,财务/分析/图表对多市场可用
- 使用新的分析与快照 API 路径
- lib/prisma.ts: 去除无关内容(微小空行调整)
Docs
- 重组文档目录:
- docs/已完成任务/tasks.md(重命名自 docs/tasks.md)
- docs/未完成任务/us_market_integration_tasks.md 新增
BREAKING CHANGE
- API 路径变更:
- 财务数据:/api/financials/china/{ts_code} → /api/financials/{market}/{stock_code}
- 快照:/api/financials/china/{ts_code}/snapshot → /api/financials/{market}/{stock_code}/snapshot
- 分析流:/api/financials/china/{ts_code}/analysis/{type}/stream → /api/financials/{market}/{stock_code}/analysis/{type}/stream
- 前端需使用 useFinancials/useSnapshot 或更新为 /cn 路径以兼容中国市场
2025-11-06 20:01:08 +08:00
xucheng
0b09abf2e5
docs(logs): add 2025-11-06 dev log; unignore docs/logs; add data dictionary and project status
2025-11-06 19:57:17 +08:00
xucheng
edfd51b0a7
feat: 昨日快照API与前端卡片;注册orgs路由;多项优化
...
- backend(financial): 新增 /china/{ts_code}/snapshot API,返回昨日交易日的收盘价/市值/PE/PB/股息率等
- backend(schemas): 新增 TodaySnapshotResponse
- backend(main): 注册 orgs 路由 /api/v1/orgs
- backend(providers:finnhub): 归一化财报字段并计算 gross_margin/net_margin/ROA/ROE
- backend(providers:tushare): 股东户数报告期与财报期对齐
- backend(routers/financial): years 默认改为 10(最大 10)
- config: analysis-config.json 切换到 qwen-flash-2025-07-28
- frontend(report/[symbol]): 新增“昨日快照”卡片、限制展示期数为10、优化增长与阈值高亮、修正类名与标题处理
- frontend(reports/[id]): 统一 period 变量与计算,修正表格 key
- frontend(hooks): 新增 useChinaSnapshot 钩子与类型
- scripts: dev.sh 增加调试输出
2025-11-05 17:00:32 +08:00
xucheng
3475138419
feat(数据): 新增员工、股东及税务指标并生成日志
...
- 后端: Tushare provider 新增 get_employee_number, get_holder_number, get_tax_to_ebt 方法,并在 financial 路由中集成。
- 前端: report 页面新增对应图表展示,并更新相关类型与工具函数。
- 清理: 移除多个过时的测试脚本。
- 文档: 创建 2025-11-04 开发日志并更新用户手册。
2025-11-04 21:22:32 +08:00
xucheng
3ffb30696b
修改了财务数据获取时的一些结构,但还没有完成,今天先做到这儿。
2025-11-04 14:03:34 +08:00
xucheng
ff7dc0c95a
feat(backend): introduce DataManager and multi-provider; analysis orchestration; streaming endpoints; remove legacy tushare_client; enhance logging
...
feat(frontend): integrate Prisma and reports API/pages
chore(config): add data_sources.yaml; update analysis-config.json
docs: add 2025-11-03 dev log; update user guide
scripts: enhance dev.sh; add tushare_legacy_client
deps: update backend and frontend dependencies
2025-11-03 21:48:08 +08:00
xucheng
b982cd5368
更新前端配置、文档和脚本
2025-10-31 22:14:19 +08:00
xucheng
69b1b481b2
添加 PM2 守护 portwardenc-amd64 程序支持
2025-10-31 22:13:07 +08:00
xucheng
93199f8659
增加stop脚本
2025-10-31 03:12:04 +00:00
xucheng
8b5d5f5777
feat(frontend): add always-visible '重新生成分析' button per module\nfix(backend): inject dependency context for single-module generation (final_conclusion placeholders)
2025-10-31 03:09:43 +00:00
xucheng
1e904eb7f4
chore(frontend): use 127.0.0.1:8000 in rewrites to avoid IPv6 (::1)
2025-10-30 08:56:07 +00:00
xucheng
cb0a12eef5
chore(frontend): 提交前端静态资源与 API 路由调整
2025-10-30 16:28:53 +08:00
xucheng
1794674806
chore(gitignore): 限定 /public、/reports 与 /test(s)/,避免误忽略前端必要文件
2025-10-30 16:28:05 +08:00
xucheng
2852436a82
chore: sync local changes after pulling remote updates
2025-10-30 08:12:58 +00:00
xucheng
515e2d53c9
chore(run.sh): enhance logging and add npm check for frontend setup
2025-10-30 16:08:21 +08:00
xucheng
7d42abea78
chore(run.sh): add detailed logging for venv setup
2025-10-30 15:29:04 +08:00
xucheng
194a4d4377
fix(run.sh): add check for python3-venv and provide instructions
2025-10-30 15:16:45 +08:00
xucheng
2f7cd70d36
feat: add run script to start frontend and backend with pm2
2025-10-30 15:03:03 +08:00
xucheng
e01d57c217
Merge branch 'develop'
...
# Conflicts:
# backend/app/routers/config.py
# backend/app/routers/financial.py
# backend/app/schemas/config.py
# backend/app/schemas/financial.py
# backend/app/services/company_profile_client.py
# backend/app/services/config_manager.py
# backend/requirements.txt
# frontend/src/app/config/page.tsx
# frontend/src/app/report/[symbol]/page.tsx
# frontend/src/hooks/useApi.ts
# frontend/src/stores/useConfigStore.ts
# frontend/src/types/index.ts
# scripts/dev.sh
2025-10-30 14:53:47 +08:00
xucheng
b5a4d2212c
feat: 实现动态分析配置并优化前端UI
...
本次提交引入了一系列重要功能,核心是实现了财务分析模块的动态配置,并对配置和报告页面的用户界面进行了改进。
主要变更:
- **动态配置:**
- 后端实现了 `ConfigManager` 服务,用于动态管理 `analysis-config.json` 和 `config.json`。
- 添加了用于读取和更新配置的 API 端点。
- 开发了前端 `/config` 页面,允许用户实时查看和修改分析配置。
- **后端增强:**
- 更新了 `AnalysisClient` 和 `CompanyProfileClient` 以使用新的配置系统。
- 重构了财务数据相关的路由。
- **前端改进:**
- 新增了可复用的 `Checkbox` UI 组件。
- 使用更直观和用户友好的界面重新设计了配置页面。
- 改进了财务报告页面的布局和数据展示。
- **文档与杂务:**
- 更新了设计和需求文档以反映新功能。
- 更新了前后端依赖。
- 修改了开发脚本 `dev.sh`。
2025-10-30 14:50:36 +08:00
xucheng
e0aa61b8c4
feat: 添加分析模块配置和分析功能,更新财务数据处理逻辑
2025-10-29 22:49:27 +08:00
xucheng
6508589027
feat: 完成公司简介部分
2025-10-28 23:31:28 +08:00
xucheng
aab1ab665b
feat: 完成基础财务分析系统功能开发
2025-10-28 23:30:12 +08:00
xucheng
ce6cc1ddb8
chore: Untrack .kiro directory
2025-10-21 20:19:47 +08:00
xucheng
4d7aa56b4b
Initial commit
2025-10-21 20:17:14 +08:00