本地跑的插件化股票工作台
OpenStock 把「宿主」和「功能」彻底分开:底座只是一层薄壳(静态托管 + 取数子进程 + 常驻脚本监督),
所有功能都是自包含插件。它绑在 127.0.0.1,不需要注册、不上传任何东西。
为什么这样拆
不是为了"插件化"好看,而是为了三件事:插件崩了不拖垮宿主、数据按人分离、单机部署零运维。
一切皆插件
每个插件目录自包含(页面 + script/ + 数据读写),宿主不 import 插件代码,异常天然隔离。
协议就一句话:stdin JSON → stdout 末行 JSON。
长任务不阻塞页面
取数秒回 + 后台工人脱离父进程 + 心跳 10s + 文件锁(O_EXCL)+ 原子落盘(tmp 后 os.replace),
任务列表刷新不丢进度。
常驻采样有监督
交易时段采样类插件放一个 script/daemon.py,宿主自动拉起、异常指数退避重启、壳退出统一回收。
个人数据收口
所有个人数据落在 database/<插件>/,不进版本库、不与其他人的数据混在一起;新机器首次访问自动播种。
依赖极轻、无构建
前端是原生 HTML/CSS/JS(没有打包步骤),后端只有一层 Python 子进程。核心依赖仅 fastapi uvicorn httpx requests。
数据源可插拔
插件与数据源解耦:同一套页面结构可以接不同的取数实现,换数据源只换插件, 宿主一行代码都不用改。
跑起来只要三步
便携包(推荐):内置 Python 3.13 与全部依赖(含 gm SDK / tushare),机器上不用装任何东西。
1 · 拿到包
openstock-0.1.0-portable.zip
(54.3 MB,解压到任意目录)
想改代码也可以走源码:git clone + 自备 Python 3.11+,依赖自己装。
2 · 自检
双击 setup.bat
检查包内运行时与依赖是否完整(幂等,可重复跑)。出现 MISSING ... 说明包不完整,重新下载。
3 · 启动
双击 start.bat
浏览器自动打开 127.0.0.1:8080。数据源(掘金客户端 / tushare 等)需另行自备。
当前状态
本页与插件目录均由仓库实际内容生成(site/tools/build_registry.py,生成于
—)。下面是明确还没做完的部分,不做粉饰:
已经能用
· 宿主薄壳:静态托管 + /api/plugin/run 取数子进程 + daemon 监督 + /api/health
· 21 个插件,围绕掘金数据源与公开网页接口
· 原子落盘、长任务工人、自举播种、两套数据源同构
· 便携发行包:内置 Python + 全部依赖,解压即用(含 gm SDK / tushare)
还没做完(分发前必修)
· requirements-core/data/optional.txt 三件套(源码方式目前按文档手装)
· GET /api/env/status 环境自检 + 首页按「可用 / 缺依赖 / 需配置」三档分组
· 插件 / 宿主在线更新通道(/api/updates)
· 独立的数据来源声明文件(LICENSE 已加:MIT,第三方清单见 NOTICE)
OpenStock