安全边界、任务与模块组织¶
2026-10-30更新。实现沿用Gradio、SQLite、统一回测账本、普通OpenAI兼容文本生成、json_repair与传统ReAct,没有更换研究体系或降低PIT、留出和双轨复核门槛。
分层与依赖¶
| 区域 | 当前职责 |
|---|---|
api/security.py |
REST、Gradio、静态资源和WebSocket共同访问边界;本地/令牌、Host、Origin、上传体积与浏览器会话 |
agent/model_catalog.py、documents/knowledge.py |
API与Gradio共享的模型配置、知识资料应用操作,避免前端导入HTTP路由 |
frontend/service_dispatch.py |
按回调所属领域惰性装配服务;兼容原有门面公共路径 |
frontend/features/ai_* |
对话、项目会话、洞察和工作流区域及事件绑定;不复制业务执行器 |
strategy/composition/ |
布局、图形文档、证据索引、编译和执行定义;API不反向依赖页面模块 |
core/database_schema.sql、migrations.py |
幂等建表及有版本升级;初始化加线程与进程文件锁 |
core/task_control.py |
SQLite所有者、期限、心跳和取消信号;不以本进程内存集合代替全局所有权 |
theme.py保留装配,CSS/JS成为独立资源;拆分前后资源摘要已比对。AI巨型渲染函数拆为区域和事件组;关系图构建移至data/relation_graph.py,深层相关性复用按日期对齐的收益计算。语言字典、建表声明和静态样式按用途维护,不机械按行数拆分。
本轮重点拆分不代表全仓不存在大模块。行情数据族、市场/策略页面和回测引擎仍有较长实现,应结合后续真实改动逐族拆分,避免一次重写引起金融语义回退。
访问和执行信任¶
访问控制先于业务路由,覆盖读和写;公开探针只表示进程存活。来源校验和认证承担不同职责,持有令牌也不能忽略跨站校验。默认单一管理身份,无多租户授权承诺。
策略创建与详情只做静态识别。实际加载使用冻结字节、来源/摘要校验和明确复核记录;经复核自定义源码进入有状态RPC工作进程,内置代码保留受信任路径。Windows Job Object约束内存、进程数量与退出清理;POSIX分支使用资源限制。AST和审计钩子均不作为恶意代码沙箱。
网络连接校验URL、解析后的地址并固定连接目标,同时保留Host与TLS服务名校验,阻断云元数据、link-local等目标及DNS重绑定;合法本地模型/MCP服务仍可使用。凭据连接关闭隐式代理继承,代理部署需单独制定可信策略。Qlib Workflow、原生CLI与MCP程序配置属于管理员提供的可执行能力,不能当作普通不可信内容上传运行。
密钥存环境引用,公开表示递归脱敏;HTTP异常只返回稳定业务码和request_id,校验错误不回显输入对象。Loguru统一处理已知密钥、消息、结构化附加字段和异常文本,不输出局部变量。环境文件以锁、唯一临时文件和原子替换保护并发更新;POSIX设置仅所有者可读写,Windows仍依赖目录ACL。旧明文加解密占位不再冒充加密服务。
任务与并发语义¶
任务所有权由SQLite条件写入确定。活跃所有者持续心跳,其他Web/CLI进程查询时不会因为本地ACTIVE为空就误改状态;取消请求写入租约并在检查点读取。调度与模拟风险监控由租约选出单一执行者,待机进程按周期接管过期所有权。异常启动释放占用;持久化失败则保留错误并依靠期限回收,不编造成功终态。
回测等待队列、缓存、WebSocket连接/订阅/发送和SSE通道有独立容量限制。SSE同步研究生成器在单独有界线程通道运行,异步消费者轮询队列,断连发出停止信号;已进入外部同步调用的工作须等当前受限请求结束。WebSocket发送有时限,慢连接独立处理并在finally清理。
上传解析和Gradio首次构建通过独立容量限制离开事件循环。图谱各分支操作私有快照,主线程在共同截止时间内合并已完成结果;超时分支不能继续修改已返回图。普通网络调用仍受连接/读取超时和返回后预算检查约束;DNS、底层原生调用及远端服务并非可随意中断的硬实时系统。
定时任务默认对正超时采用可终止进程。显式线程模式属于软超时:函数未退出前保持互斥与租约,不自动重试产生重复副作用。缓存清理有容量上限;AI会话锁原本已使用WeakValueDictionary,本轮复核纠正了此前“锁不回收”的审计表述,没有再造一套清理机制。
验证与剩余风险¶
egs/entrypoints/check_quality.py在当前解释器执行全量Ruff、格式和mypy,可加--security-tests运行边界/并发测试。可选库的局部类型声明仅覆盖已使用接口;Gradio自动生成的单个.pyi不参与人工格式门禁,其手写实现仍检查。安全扫描发现按可利用路径人工复核,参数数组子进程和固定SQL片段不直接等同命令/SQL注入。
Windows实际验证包括独立进程任务所有权、取消、源码工作进程、费用现金守恒、原生Qlib既有流程、浏览器点击、令牌登录/CLI和一次真实小预算模型调用。mock行情的回测数值只验证账本和协议,不是样本外收益证据。Linux实机验证因当前WSL基础能力不可用而未完成,不将静态条件分支当成实测。
主环境Pillow与Gradio版本约束仍冲突,独立图片环境只减少特定入口暴露;deepmerge构建链公告仍无修复版本。已跟踪环境文件停止后续跟踪,历史Git对象与已存在备份没有被改写;密钥是否有效、是否需要撤销/轮换需由账户所有者核实。使用方式见访问控制与源码运行。