Files
NebulaShell/ai.md
Falck 395cda2e8b chore: add website directory to gitignore and update VSCode config
- Add `website/` to .gitignore to exclude website build artifacts
- Add Node.js debug configurations for FutureOSS website in launch.json
- Update VSCode color theme to "Default Dark Modern"
- Refactor plugin loader to simplify dependency and lifecycle plugin loading logic
2026-04-25 06:43:45 +08:00

661 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FutureOSS - AI 专用项目介绍
## 项目概述
**FutureOSS** 是一个面向开发者的插件化运行时框架,采用「一切皆为插件」的设计理念。它是一个轻量级、安全、灵活的底层支撑系统,适用于构建微服务、开发工具链和可扩展的业务系统。
**核心设计哲学**最小化核心框架最大化插件扩展能力。核心框架仅提供最基本的插件加载和管理功能所有其他功能HTTP服务、Web界面、日志系统等都通过插件实现。
## 技术栈
- **语言**: Python 3.10+
- **主要依赖**:
- `click`: CLI 框架
- `pyyaml`: 配置解析
- `websockets`: WebSocket 支持
- `psutil`: 系统监控
- `cryptography`: 加密和签名验证
- **架构**: 插件化微内核架构
- **协议支持**: HTTP RESTful API, WebSocket, TCP HTTP
- **部署**: Docker 容器化支持
## 项目结构
```
/root/future-oss/
├── 📁 oss/ # 核心框架代码
│ ├── cli.py # CLI 命令入口
│ ├── config/ # 配置系统
│ ├── logger/ # 日志系统
│ ├── plugin/ # 插件框架核心
│ │ ├── capabilities.py # 能力接口定义
│ │ ├── loader.py # 插件加载器
│ │ ├── manager.py # 插件生命周期管理
│ │ └── types.py # 类型定义
│ └── shared/ # 共享组件
│ └── router.py # 统一路由系统
├── 📁 store/ # 插件仓库(核心功能)
│ ├── @{FutureOSS}/ # 官方核心插件
│ │ ├── plugin-loader/ # 插件加载器(核心)
│ │ ├── http-api/ # HTTP API 服务
│ │ ├── http-tcp/ # TCP HTTP 服务
│ │ ├── ws-api/ # WebSocket API
│ │ ├── dashboard/ # Web 控制台
│ │ ├── dependency/ # 依赖解析
│ │ ├── signature-verifier/ # 签名验证
│ │ ├── plugin-bridge/ # 插件间通信
│ │ ├── plugin-storage/ # 数据持久化
│ │ ├── pkg-manager/ # 包管理
│ │ ├── log-terminal/ # 日志终端
│ │ ├── json-codec/ # JSON 编解码器
│ │ └── webui/ # Web 用户界面
│ └── @{Falck}/ # 社区插件
│ ├── html-render/ # HTML 渲染引擎
│ └── web-toolkit/ # Web 开发工具集
├── 📁 data/ # 运行时数据目录
├── 📁 static/ # 静态资源
├── 📁 templates/ # 模板文件
├── 📁 tools/ # 开发工具脚本
├── 📁 video/ # 演示视频和文档
├── 📄 pyproject.toml # Python 项目配置
├── 📄 requirements.txt # Python 依赖
├── 📄 docker-compose.yml # Docker 编排配置
├── 📄 Dockerfile # Docker 构建文件
├── 📄 README.md # 项目说明文档
└── 📄 LICENSE # Apache 2.0 许可证
```
## 核心架构
### 1. 插件系统架构
FutureOSS 采用三层插件架构:
1. **核心框架层** (`oss/`): 提供最基本的插件加载和管理能力
2. **核心插件层** (`store/@{FutureOSS}/`): 官方提供的核心功能插件
3. **社区插件层** (`store/@{Falck}/`): 第三方社区插件
### 2. 插件生命周期
```
加载 (load) → 初始化 (init) → 启动 (start) → 运行 (run) → 停止 (stop)
```
### 3. 插件元数据格式
每个插件必须包含 `manifest.json` 文件,格式如下:
```json
{
"metadata": {
"name": "插件名称",
"version": "版本号",
"author": "作者",
"description": "功能描述",
"type": "插件类型 (core/protocol/utility)"
},
"config": {
"enabled": true/false,
"args": {
"参数名": "参数值"
}
},
"dependencies": ["依赖插件列表"],
"permissions": ["所需权限列表"]
}
```
### 4. 安全机制
- **数字签名验证**: 每个插件包含 SIGNATURE 文件
- **权限分级控制**: 插件声明所需权限
- **沙箱环境**: 可选的安全隔离
- **来源验证**: 插件作者命名空间 (@{作者名})
## 核心插件功能
### 系统核心插件
1. **plugin-loader**: 插件扫描、加载与生命周期管理(必需)
2. **http-api**: HTTP RESTful API 服务(端口 8080
3. **http-tcp**: TCP 高性能 HTTP 服务(端口 8082
4. **ws-api**: WebSocket API 服务(端口 8081
5. **dashboard**: Web 可视化监控仪表盘
6. **dependency**: 插件依赖解析与自动安装
7. **signature-verifier**: 插件数字签名验证
8. **plugin-bridge**: 插件间通信桥接
9. **plugin-storage**: 插件数据持久化存储
10. **pkg-manager**: 插件包管理(安装/卸载/搜索)
11. **log-terminal**: 日志终端实时输出
12. **json-codec**: 统一 JSON 编解码器
13. **webui**: Web 用户界面框架
### 社区插件
1. **html-render**: HTML 模板渲染引擎
2. **web-toolkit**: Web 开发工具集(静态文件/模板/路由)
### 禁用插件(默认不加载)
1. **hot-reload**: 开发模式热重载
2. **i18n**: 国际化支持
3. **lifecycle**: 插件生命周期钩子
4. **code-reviewer**: 代码审查工具
5. **plugin-loader-pro**: 高级插件加载器
## PL 注入机制
PL 注入是 plugin-loader 插件提供的一种扩展机制,允许插件通过 `PL/` 文件夹向插件加载器注册自定义功能。
### 工作原理
插件加载器在启动时自动扫描所有插件,检查其 `manifest.json` 中是否声明了 `pl_injection` 配置项:
```
插件加载器启动
扫描所有插件 manifest.json
检查 config.args.pl_injection
├── true → 检查 PL/ 文件夹
│ ├── 存在 PL/main.py → 沙箱执行 → 调用 register(injector) → ✅ 正常加载
│ └── 缺少 PL/ 或 PL/main.py → ⚠️ 警告并 ❌ 拒绝加载
└── false/未声明 → ✅ 正常加载(跳过 PL 检查)
```
### 使用方式
#### 1. 在 manifest.json 中声明
```json
{
"config": {
"args": {
"pl_injection": true
}
}
}
```
#### 2. 创建 PL/main.py
```
store/@{作者名}/插件名/
├── manifest.json # 声明 pl_injection: true
├── main.py # 插件主逻辑
├── PL/ # PL 注入文件夹
│ └── main.py # 注入逻辑(必须包含 register() 函数)
└── README.md
```
#### 3. 实现 register() 函数
```python
# PL/main.py
def register(injector):
"""向插件加载器注册功能
Args:
injector: PLInjector 实例
"""
# 注册普通功能
injector.register_function("my_helper", my_func, "功能描述")
# 注册 HTTP 路由
injector.register_route("GET", "/pl/hello", handler)
# 注册事件处理器
injector.register_event_handler("plugin.started", on_started)
```
### 注入器 API
| 方法 | 说明 |
|------|------|
| `register_function(name, func, description="")` | 注册注入功能 |
| `register_route(method, path, handler)` | 注册 HTTP 路由 |
| `register_event_handler(event_name, handler)` | 注册事件处理器 |
| `get_injected_functions(name=None)` | 获取已注册的注入功能 |
| `get_injection_info(plugin_name=None)` | 获取注入信息 |
| `has_injection(plugin_name)` | 检查插件是否有 PL 注入 |
| `get_registry_info()` | 获取注册表完整信息 |
### 安全限制
PL 注入机制实施了多层安全限制:
| 限制类型 | 具体措施 |
|---------|---------|
| **文件类型限制** | 禁止 PL 文件夹中包含 `.sh``.bat``.exe``.dll``.so` 等可执行文件 |
| **静态源码检查** | 编译前扫描源码,禁止导入 `os/sys/subprocess/socket/ctypes` 等系统模块,禁止 `exec/eval/compile/open/__import__` |
| **沙箱执行** | 在受限沙箱中执行 PL/main.py仅提供安全的 builtins |
| **参数校验** | 功能名称、路由路径、HTTP 方法、事件名称均通过正则校验 |
| **数量限制** | 每个插件最多注册 50 个功能,每个名称最多被注册 10 次 |
| **异常安全** | 所有注册函数自动包装 try-catch异常不影响主流程 |
| **调用者溯源** | 通过栈帧回溯自动识别调用者插件名,防止冒充注册 |
### 行为说明
| 场景 | 结果 |
|------|------|
| `pl_injection: true` + 存在 `PL/main.py` | ✅ 正常加载,执行注入 |
| `pl_injection: true` + 缺少 `PL/` 文件夹 | ❌ 警告并拒绝加载该插件 |
| `pl_injection: true` + 存在 `PL/` 但缺少 `main.py` | ❌ 警告并拒绝加载该插件 |
| 未声明 `pl_injection` | ✅ 正常加载,跳过 PL 检查 |
| `pl_injection: false` | ✅ 正常加载,跳过 PL 检查 |
## 开发与部署
### 开发环境设置
```bash
# 安装依赖
pip install -e .
# 启动开发服务器
oss serve
# 访问 Web 控制台
# http://localhost:8080
```
### Docker 部署
```bash
# 使用 Docker Compose
docker-compose up -d
# 暴露端口
# 8080: HTTP API + 网站
# 8081: WebSocket
# 8082: HTTP TCP
```
### 插件开发
1. **创建插件目录**: `store/@{作者名}/{插件名}/`
2. **编写 manifest.json**: 定义插件元数据
3. **实现 main.py**: 插件主逻辑
4. **添加 SIGNATURE**: 数字签名(可选)
5. **测试插件**: 通过 pkg-manager 安装测试
## API 接口
### HTTP API (端口 8080)
- `GET /health`: 健康检查
- `GET /api/plugins`: 获取插件列表
- `GET /api/plugins/{name}`: 获取插件详情
- `POST /api/plugins/{name}/enable`: 启用插件
- `POST /api/plugins/{name}/disable`: 禁用插件
### WebSocket API (端口 8081)
- 实时日志推送
- 系统状态监控
- 插件事件通知
### TCP HTTP (端口 8082)
- 高性能 HTTP 服务
- 兼容 HTTP/1.1 协议
## 配置系统
### 配置文件位置
1. **全局配置**: `config.yaml` (可选)
2. **插件配置**: `store/@{作者名}/{插件名}/config.json`
3. **环境变量**: 支持 Docker 环境变量覆盖
### 配置优先级
```
环境变量 > 全局配置文件 > 插件默认配置
```
## 数据存储
### 数据目录结构
```
data/
├── html-render/ # 网站渲染文件
├── web-toolkit/ # Web 工具配置
├── plugin-storage/ # 插件持久化数据
└── DCIM/ # 共享资源存储
```
### 存储类型
1. **临时存储**: 内存缓存
2. **持久化存储**: 文件系统 (data/ 目录)
3. **插件私有存储**: 每个插件独立存储空间
## 监控与日志
### 日志系统
- **日志级别**: DEBUG, INFO, WARNING, ERROR, CRITICAL
- **输出目标**: 控制台、文件、WebSocket
- **日志格式**: 结构化 JSON 日志
### 监控指标
- 系统资源使用率 (CPU/内存/磁盘)
- 插件运行状态
- API 请求统计
- 错误率和异常监控
## 扩展能力
### 自定义插件开发
FutureOSS 支持多种插件类型:
1. **协议插件**: 实现网络协议 (HTTP/WebSocket/TCP)
2. **工具插件**: 提供开发工具功能
3. **界面插件**: 扩展 Web 控制台
4. **存储插件**: 实现数据存储后端
5. **中间件插件**: 请求处理管道
### 插件间通信
- **事件系统**: 发布/订阅模式
- **直接调用**: 通过插件管理器
- **共享存储**: 通过 plugin-storage
- **消息队列**: 通过 plugin-bridge
## 最佳实践
### 性能优化
1. **懒加载插件**: 按需加载非核心插件
2. **连接池管理**: 数据库和网络连接复用
3. **缓存策略**: 合理使用内存缓存
4. **异步处理**: I/O 密集型操作异步化
### 安全建议
1. **签名验证**: 生产环境启用所有插件签名验证
2. **权限最小化**: 插件只申请必要权限
3. **沙箱隔离**: 不可信插件启用沙箱模式
4. **定期更新**: 及时更新插件和安全补丁
### 高可用性
1. **健康检查**: 配置完整的健康检查端点
2. **故障转移**: 关键插件多实例部署
3. **监控告警**: 设置系统监控和告警
4. **备份恢复**: 定期备份插件配置和数据
## 故障排除
### 常见问题
1. **插件加载失败**: 检查 manifest.json 格式和依赖
2. **服务启动失败**: 检查端口冲突和权限
3. **性能问题**: 监控系统资源使用情况
4. **内存泄漏**: 检查插件资源释放
### 调试工具
1. **日志终端**: 实时查看系统日志
2. **Web 控制台**: 可视化监控插件状态
3. **API 接口**: 通过 REST API 获取系统信息
4. **开发工具**: tools/ 目录下的辅助脚本
## 官方网站项目
### 项目位置
`/root/future-oss/website/` - FutureOSS 官方宣传网站
### 技术栈
- **后端**: Node.js + Express.js
- **前端**: EJS 模板引擎 + 原生 JavaScript + CSS3
- **构建工具**: npm
- **开发工具**: VS Code 运行与调试配置
### 项目结构
```
website/
├── 📁 public/ # 静态资源
│ ├── css/ # 样式文件
│ │ ├── main.css # 基础样式和变量
│ │ ├── components.css # 组件样式
│ │ ├── animations.css # 动画效果
│ │ └── pages/ # 页面特定样式
│ ├── js/ # JavaScript 文件
│ │ ├── main.js # 主逻辑
│ │ ├── router.js # 前端路由
│ │ ├── animations.js # 动画控制
│ │ └── pages/ # 页面特定脚本
│ └── images/ # 图片资源
├── 📁 src/ # 源代码
│ ├── server.js # Express 服务器
│ ├── router.js # 路由配置
│ ├── controllers/ # 控制器
│ │ ├── pagesController.js # 页面控制器
│ │ └── apiController.js # API 控制器
│ ├── middleware/ # 中间件
│ │ └── performance.js # 性能优化中间件
│ ├── components/ # 组件(预留)
│ ├── pages/ # 页面逻辑(预留)
│ └── styles/ # 样式源码(预留)
├── 📁 views/ # EJS 视图模板
│ ├── layouts/ # 布局文件
│ │ └── main.ejs # 主布局
│ ├── pages/ # 页面模板
│ │ ├── home.ejs # 首页
│ │ ├── features.ejs # 特性页
│ │ ├── architecture.ejs # 架构页
│ │ └── plugins.ejs # 插件页
│ └── partials/ # 局部组件
│ ├── navbar.ejs # 导航栏
│ └── footer.ejs # 页脚
├── 📄 package.json # npm 配置
├── 📄 package-lock.json # 依赖锁定
└── 📄 server.log # 服务器日志
```
### 核心功能
#### 1. 多页面网站
- **首页** (`/`): 项目介绍和快速开始
- **特性页** (`/features`): 核心功能展示
- **架构页** (`/architecture`): 技术架构说明
- **插件页** (`/plugins`): 插件生态系统
#### 2. 性能优化特性
- **响应时间监控**: X-Response-Time 头部
- **缓存控制**: 静态资源长期缓存
- **压缩支持**: Gzip 和预压缩
- **安全头**: CSP、XSS 保护等
- **内存监控**: 实时内存使用监控
#### 3. 用户体验增强
- **加载动画**: 页面加载旋转指示器
- **页面切换动画**: 平滑的页面过渡效果
- **图片懒加载**: 延迟加载非视口图片
- **骨架屏**: 内容加载占位符
- **响应式设计**: 完整的移动端适配
#### 4. API 接口
- `GET /api/health`: 健康检查
- `GET /api/metrics`: 性能指标
- `GET /api/info`: 服务器信息
- `GET /api/stress-test`: 压力测试(仅开发环境)
### 技术特点
#### 服务器特性
- **端口自动切换**: 8080被占用时自动使用8081、8082等
- **优雅关闭**: 支持 SIGTERM/SIGINT 信号优雅关闭
- **错误处理**: 完善的错误处理和404页面
- **中间件栈**: 完整的性能优化中间件
#### 前端特性
- **组件化设计**: 导航栏、页脚等独立组件
- **前端路由**: 支持无刷新页面切换
- **CSS 变量**: 统一的主题变量系统
- **动画系统**: 丰富的CSS动画和过渡效果
#### 开发工具
- **VS Code 调试配置**: 支持直接运行与调试
- **热重载支持**: nodemon 开发模式
- **性能监控**: 实时性能指标输出
- **日志系统**: 结构化服务器日志
### 部署与运行
#### 开发模式
```bash
cd /root/future-oss/website
npm install
npm start
# 访问 http://localhost:8080 (或自动切换的端口)
```
#### 生产部署
```bash
# 使用 PM2 进程管理
pm2 start src/server.js --name "futureoss-website"
# 使用 Docker
docker build -t futureoss-website .
docker run -p 8080:8080 futureoss-website
```
#### VS Code 调试
1. 打开运行与调试面板 (Ctrl+Shift+D)
2. 选择 "FutureOSS 网站: 启动Node.js服务器"
3. 按 F5 启动调试
### 性能优化措施
#### 已实施的优化
1. **响应头优化**: 缓存控制、安全头、压缩头
2. **静态资源优化**: 长期缓存、预压缩支持
3. **代码分割**: 按页面加载CSS和JS
4. **图片优化**: 懒加载、占位符、响应式图片
5. **动画优化**: 减少重绘、will-change提示
#### 监控指标
- **响应时间**: X-Response-Time 头部
- **内存使用**: X-Memory-Usage 头部(开发环境)
- **慢响应日志**: 超过1秒的请求记录
- **错误率**: 500错误监控和记录
### 已知问题和解决方案
#### 1. ERR_HTTP_HEADERS_SENT 错误
- **问题**: 在响应已发送后设置响应头
- **原因**: `responseTime` 中间件在 `finish` 事件中设置头部
- **解决方案**: 使用 `headers` 事件或重写 `end` 方法
- **修复代码**:
```javascript
// 错误写法(在 finish 事件中):
res.on('finish', () => {
res.setHeader('X-Response-Time', `${duration}ms`); // 错误!
});
// 正确写法(重写 end 方法):
const originalEnd = res.end;
res.end = function(...args) {
if (!res.headersSent) {
res.setHeader('X-Response-Time', `${duration}ms`);
}
return originalEnd.apply(this, args);
};
```
#### 2. CSS 加载问题
- **问题**: 页面只显示纯文本CSS未加载
- **原因**: EJS 布局系统未正确配置
- **解决方案**: 安装并配置 `express-ejs-layouts`
- **修复步骤**:
1. `npm install express-ejs-layouts`
2. 在 server.js 中添加中间件
3. 设置默认布局 `app.set('layout', 'layouts/main')`
#### 3. 加载性能问题
- **问题**: 页面加载慢,无加载反馈
- **解决方案**: 添加加载动画和性能优化
- **实施措施**:
1. 添加页面加载旋转动画
2. 实现图片懒加载
3. 添加骨架屏占位符
4. 优化静态资源缓存
### 扩展和定制
#### 添加新页面
1. 在 `views/pages/` 创建新的 `.ejs` 文件
2. 在 `controllers/pagesController.js` 添加渲染函数
3. 在 `src/router.js` 添加路由
4. 在 `public/css/pages/` 添加页面特定CSS
5. 在 `public/js/pages/` 添加页面特定JS
#### 添加新组件
1. 在 `views/partials/` 创建组件 `.ejs` 文件
2. 在 `public/css/components.css` 添加组件样式
3. 在布局或页面中使用 `<%- include('partials/组件名') %>`
#### 主题定制
通过修改 CSS 变量实现主题切换:
```css
:root {
--primary-color: #1e6fbb; /* 主色调 */
--text-primary: #333333; /* 主要文字 */
--bg-primary: #ffffff; /* 背景色 */
/* 更多变量... */
}
```
### 维护指南
#### 日常维护
1. **日志监控**: 定期检查 `server.log` 文件
2. **性能监控**: 关注慢响应日志
3. **错误处理**: 及时修复报告的错误
4. **依赖更新**: 定期更新 npm 包
#### 故障排除
1. **服务器无法启动**: 检查端口占用,查看日志
2. **页面样式异常**: 检查CSS文件路径和网络请求
3. **API 无响应**: 检查路由配置和控制器
4. **性能下降**: 使用 `/api/metrics` 接口诊断
#### 备份策略
1. **代码备份**: Git 版本控制
2. **配置备份**: 备份 `package.json` 和服务器配置
3. **数据备份**: 备份用户上传内容(如有)
4. **日志归档**: 定期归档服务器日志
## 未来发展方向
### 短期规划
1. 插件市场功能完善
2. 更多官方插件开发
3. 性能优化和稳定性提升
4. 官方网站功能增强
### 长期愿景
1. 跨语言插件支持
2. 云原生集成
3. 企业级功能扩展
4. 生态系统建设
## 注意事项
1. **生产部署**: 建议使用 Docker 容器化部署
2. **数据备份**: 定期备份 data/ 目录重要数据
3. **安全更新**: 关注安全公告并及时更新
4. **社区支持**: 通过 Gitee Issues 获取帮助
5. **网站维护**: 定期更新官方网站内容和功能
---
*本文件专为 AI 助手设计,提供 FutureOSS 项目的全面技术概述,帮助 AI 理解项目架构、功能和使用方式。更新日期2026年4月19日*