{"id":50971090,"url":"https://github.com/byte92/stocktracker","last_synced_at":"2026-06-19T02:30:43.189Z","repository":{"id":354867403,"uuid":"1210649968","full_name":"byte92/stocktracker","owner":"byte92","description":"Local-first portfolio tracker \u0026 AI investing copilot.   本地优先的个人投资记录、组合分析与 AI 投研助手。","archived":false,"fork":false,"pushed_at":"2026-06-10T14:41:48.000Z","size":2336,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T16:22:46.147Z","etag":null,"topics":["ai-agent","finance","investment","local-first","nextjs","portfolio-tracker","sqlite","stock"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/byte92.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-14T16:12:21.000Z","updated_at":"2026-06-10T14:49:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/byte92/stocktracker","commit_stats":null,"previous_names":["byte92/finance_sys","byte92/stocktracker"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/byte92/stocktracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byte92%2Fstocktracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byte92%2Fstocktracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byte92%2Fstocktracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byte92%2Fstocktracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/byte92","download_url":"https://codeload.github.com/byte92/stocktracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/byte92%2Fstocktracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34515405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-19T02:00:06.005Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent","finance","investment","local-first","nextjs","portfolio-tracker","sqlite","stock"],"created_at":"2026-06-19T02:30:42.307Z","updated_at":"2026-06-19T02:30:43.182Z","avatar_url":"https://github.com/byte92.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StockTracker\n\n[![中文](https://img.shields.io/badge/README-%E4%B8%AD%E6%96%87-blue)](./README.md)\n[![English](https://img.shields.io/badge/README-English-lightgrey)](./README_en.md)\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)\n![Node.js](https://img.shields.io/badge/node-20.9%2B-339933?logo=node.js\u0026logoColor=white)\n![pnpm](https://img.shields.io/badge/pnpm-10.x-F69220?logo=pnpm\u0026logoColor=white)\n![Next.js](https://img.shields.io/badge/Next.js-16-black?logo=next.js)\n![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript\u0026logoColor=white)\n![Electron](https://img.shields.io/badge/Electron-desktop-47848F?logo=electron\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-ready-2496ED?logo=docker\u0026logoColor=white)\n\nStockTracker 是一个本地优先的个人投资记录、组合核算和 AI 投研工作台。\n\n它帮助你记录交易、核算真实持仓成本、跟踪行情和收益，并让 AI Agent 基于你的真实持仓、交易记录和公开市场数据做克制的投研分析。数据默认保存在本机 SQLite，不需要账号，不默认上传到云端。\n\n[快速开始](#快速开始) · [桌面客户端](#桌面客户端-) · [Docker 运行](#docker-运行) · [核心能力](#核心能力) · [AI Agent](#ai-agent) · [文档](#文档) · [免责声明](#免责声明)\n\n## 截图与演示\n\n\u003e 以下截图使用脱敏 demo 数据生成，不包含真实持仓或交易记录。\n\n| 组合总览 | 持仓列表 |\n| --- | --- |\n| ![组合总览](./docs/assets/screenshots/readme-overview.png) | ![持仓列表](./docs/assets/screenshots/readme-portfolio.png) |\n\n| 个股详情 | AI 对话 |\n| --- | --- |\n| ![个股详情](./docs/assets/screenshots/readme-stock-detail.png) | ![AI 对话](./docs/assets/screenshots/readme-ai-chat.png) |\n\n## 为什么做它 💡\n\n大多数投资工具擅长展示价格，但不回答持仓核算的具体问题：真实成本是多少、手续费和分红怎么算进去。\n\nStockTracker 的重点是把这些问题算清楚：基于 FIFO 核算每笔卖出的真实盈亏，持仓成本含手续费摊薄；AI Agent 按需读取你的真实持仓批次和交易记录做分析，而不是泛泛聊股票。数据默认存在本机 SQLite，不需要账号，不上传到云端。\n\n## 适合与不适合 🎯\n\nStockTracker 适合：\n\n- 想自己记录股票、ETF、基金或加密资产交易的个人投资者。\n- 关心 FIFO、手续费、分红和真实成本核算的人。\n- 希望数据默认留在本机，并能自行备份和迁移的人。\n- 想把 AI 用在自己的持仓和交易复盘上，而不是泛泛聊天的人。\n- 愿意 self-host，并接受第三方行情接口偶尔波动的人。\n\nStockTracker 不适合：\n\n- 高频交易、自动下单或券商账户同步。\n- 多用户云端协作、跨设备实时同步或团队后台。\n- 对行情实时性和准确性有严格合规要求的生产交易终端。\n- 想获得确定性投资建议、收益承诺或自动买卖指令的场景。\n\n## 核心能力 ✨\n\n### 组合与收益核算 📊\n\n- 本地 SQLite 持久化，默认不依赖云端账号。\n- 支持 A 股（含 ETF）、港股、美股、基金、加密资产的统一记录模型。\n- 支持买入、卖出、分红和加密资产收益记录。\n- 固定基于 FIFO 计算卖出盈亏明细，并按券商摊薄口径计算当前持仓成本、浮动盈亏和总盈亏。\n- 按市场自动计算手续费，支持用户配置费率。\n\n### 行情、估值与图表 📈\n\n- 聚合腾讯财经、Nasdaq、Yahoo Finance、Alpha Vantage 等股票行情源。\n- 加密资产报价和 K 线优先使用 Binance，失败回退 Coinbase。\n- 支持 K 线、技术指标、估值字段、新闻和大盘概览。\n- 内置汇率服务，支持多币种持仓统一折算。\n- 多数据源自动降级，最终兜底到 Manual 手动输入模式。\n\n### AI 投研工作流 🤖\n\n- 内置 AI 对话、组合分析、个股分析和大盘分析。\n- AI Agent Runtime 按需调用 Skill，不把全部持仓粗暴塞进上下文。\n- 交易复盘内置事实账本、成本收益、仓位风险、行情位置和行为纪律等分析框架，并可解释道氏理论、趋势跟随、均值回归等常见方法论。\n- 支持未持仓标的查询，自动解析名称、代码和市场并抓取外部行情。\n- 支持公开网页搜索和受控网页抓取，用于新闻、公告、财报和大盘事件补充。\n- 提供受控的 AI Agent Trace 调试视图，方便排查意图识别和 Skill 调用链路。\n\n### 自部署与工程化 🧰\n\n- 使用 pnpm，项目会阻止 npm/yarn 安装以保持 lockfile 一致。\n- 支持 Electron 桌面客户端（macOS / Windows），下载安装即用。\n- 支持 Docker / Docker Compose 本地运行。\n- 支持中文 / 英文 UI 切换，语言偏好保存在浏览器本地。\n- 支持 OpenAI-compatible 和 Anthropic-compatible 模型服务。\n- 提供服务端结构化日志和外部接口 smoke test，便于排查上游接口变化。\n\n## 快速开始 🚀\n\n环境要求：\n\n- Node.js 20.9+\n- pnpm\n- macOS / Linux / Windows\n\n```bash\ngit clone https://github.com/byte92/stocktracker.git\ncd stocktracker\npnpm install\npnpm dev\n```\n\n启动后访问：\n\n- [http://localhost:3218](http://localhost:3218)\n\n`pnpm dev` 默认使用 `3218`，如果端口被占用会自动向后查找可用端口，并在终端输出实际地址。建议启动后先完成 AI 模型配置，以启用对话、组合分析、标的分析和大盘分析等核心体验。\n\n更多开发、环境变量、数据库和测试说明见 [开发指南](./docs/DEVELOPMENT.md)。\n\n## 桌面客户端 🖥️\n\n不需要命令行或 Docker 环境，下载安装即可使用。\n\n### 下载安装\n\n前往 [GitHub Releases](https://github.com/byte92/stocktracker/releases) 下载对应平台的安装包：\n\n| 平台 | 格式 | 安装方式 |\n| --- | --- | --- |\n| macOS | `.dmg` | 双击打开，拖拽到 Applications |\n| Windows | `.exe` | 运行安装向导 |\n\n首次打开会引导配置 AI 服务（可跳过），数据保存在本地，不需要账号。\n\n### 本地构建\n\n如需从源码构建桌面客户端：\n\n```bash\n# macOS\npnpm electron:build:mac\n\n# Windows\npnpm electron:build:win\n```\n\n构建产物在 `dist-electron/` 目录下。\n\n开发模式调试：\n\n```bash\n# 先构建 Next.js standalone\npnpm build\n\n# 启动 Electron 开发模式\npnpm electron:dev\n```\n\n更多说明见 [Electron 桌面客户端设计](./docs/superpowers/specs/2026-05-29-electron-desktop-client-design.md)。\n\n## AI 模型配置 🔑\n\nStockTracker 的核心体验依赖 AI 对话和分析能力，建议把模型连接信息放在 `.env.local`：\n\n```bash\ncp .env.example .env.local\n```\n\n常用变量：\n\n```bash\nAI_PROVIDER=openai-compatible\nAI_BASE_URL=https://api.openai.com/v1\nAI_MODEL=gpt-4.1-mini\nAI_API_KEY=sk-...\n```\n\n如果 `.env.local` 中的 AI 配置完整，服务端会优先使用环境变量；设置页中的连接配置会作为本地兜底。Temperature、Max Context Tokens、新闻增强和 AI 分析语言仍由设置页控制。\n\n## Docker 运行 🐳\n\n如果你只想把它作为本地服务跑起来，可以直接使用 Docker Compose：\n\n```bash\ngit clone https://github.com/byte92/stocktracker.git\ncd stocktracker/docker\ndocker compose up -d --build\n```\n\n启动后访问：\n\n- [http://localhost:3218](http://localhost:3218)\n\n如需修改宿主机端口，可把 `docker/.env.example` 复制为 `docker/.env` 并修改 `HOST_PORT`。AI 模型配置仍放在根目录 `.env.local`；Docker Compose 会读取 `.env.local` 并注入容器。没有 `docker/.env` 时端口默认使用 `3218`。\n\n容器默认把 SQLite 数据保存在 `docker/data/finance.sqlite` 中，重启不会丢失。更多说明见 [Docker 部署指南](./docker/README.md)。\n\n## AI Agent 🤖\n\nStockTracker 的 AI 不是通用聊天机器人，而是围绕个人持仓和股票数据工作的投研 Agent。\n\n```text\n用户问题\n  -\u003e Planner 识别意图、市场和需要的数据\n  -\u003e security.resolve 解析名称、代码和候选标的\n  -\u003e Skill Registry 选择本地持仓、行情、技术指标、网页搜索等能力\n  -\u003e Executor 按需读取数据\n  -\u003e Context Composer 组装最小必要上下文\n  -\u003e LLM 流式生成回复\n```\n\n当用户询问个股新闻、公告、利好利空，或 A 股大盘今日政策、盘面新闻时，Agent 会按需调用公开网页搜索。搜索结果会作为带标题、链接、摘要和搜索时间的候选来源进入回答上下文。\n\n## 技术栈 🧱\n\n- Next.js App Router + React + TypeScript\n- Electron（桌面客户端）\n- Zustand\n- SQLite + better-sqlite3\n- Tailwind CSS\n- lightweight-charts / Recharts\n- Playwright\n- pnpm\n- Docker / Docker Compose\n\n## 整体架构 🧭\n\n```mermaid\nflowchart TB\n  User[\"用户 / 浏览器\"] --\u003e App[\"Next.js App Router\"]\n  App --\u003e Store[\"Zustand 状态层\"]\n  App --\u003e Api[\"API Routes\"]\n\n  Store --\u003e Api\n  Api --\u003e SQLite[\"SQLite 本地数据库\"]\n  Api --\u003e Finance[\"收益 / 手续费 / FIFO 计算\"]\n  Api --\u003e DataSources[\"行情、K 线、新闻、汇率数据源\"]\n\n  App --\u003e AgentUI[\"AI 对话与分析界面\"]\n  AgentUI --\u003e Agent[\"AI Agent Runtime\"]\n  Agent --\u003e Planner[\"Planner 意图识别\"]\n  Agent --\u003e Skills[\"Skill Registry\"]\n  Skills --\u003e SQLite\n  Skills --\u003e DataSources\n  Agent --\u003e LLM[\"OpenAI / Anthropic 兼容模型服务\"]\n\n  Electron[\"Electron 桌面客户端\"] --\u003e |\"子进程\"| App\n  Docker[\"Docker / Docker Compose\"] --\u003e App\n  Docker --\u003e SQLite\n```\n\n## 文档 📚\n\n- [开发指南](./docs/DEVELOPMENT.md)\n- [Docker 部署指南](./docker/README.md)\n- [项目目录结构](./docs/PROJECT_STRUCTURE.md)\n- [Agent 架构设计](./docs/AGENT_ARCHITECTURE.md)\n- [行情获取说明](./docs/PRICE_FETCHING.md)\n\n## 参与贡献 🤝\n\n欢迎提交 Issue、改进文档、补充测试、优化 UI、修复行情源、扩展 Skill 或完善 Agent Runtime。\n\n提交 PR 前请阅读 [CONTRIBUTING.md](./CONTRIBUTING.md)。\n\n## 免责声明 ⚠️\n\nStockTracker 提供的是交易记录、数据整理和辅助分析工具，不构成任何投资建议。行情、估值、新闻和 AI 输出可能存在延迟、遗漏或错误。请独立判断风险，并对自己的投资决策负责。\n\n## License\n\n[MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbyte92%2Fstocktracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbyte92%2Fstocktracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbyte92%2Fstocktracker/lists"}