更改项目名为NebulaShell

This commit is contained in:
Falck
2026-05-02 08:30:31 +08:00
parent d16e28ab17
commit 2c2ec60a2b
233 changed files with 298 additions and 276 deletions

42
.vscode/launch.json vendored
View File

@@ -2,7 +2,7 @@
"version": "0.2.0", "version": "0.2.0",
"configurations": [ "configurations": [
{ {
"name": "FutureOSS: 启动服务", "name": "NebulaShell: 启动服务",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"module": "oss.cli", "module": "oss.cli",
@@ -17,7 +17,7 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 调试模式启动", "name": "NebulaShell: 调试模式启动",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"module": "oss.cli", "module": "oss.cli",
@@ -33,7 +33,7 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 运行测试", "name": "NebulaShell: 运行测试",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"module": "pytest", "module": "pytest",
@@ -53,7 +53,7 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 调试插件加载器", "name": "NebulaShell: 调试插件加载器",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/oss/plugin/loader.py", "program": "${workspaceFolder}/oss/plugin/loader.py",
@@ -67,10 +67,10 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 调试日志终端插件", "name": "NebulaShell: 调试日志终端插件",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/store/@{FutureOSS}/log-terminal/main.py", "program": "${workspaceFolder}/store/@{NebulaShell}/log-terminal/main.py",
"console": "integratedTerminal", "console": "integratedTerminal",
"justMyCode": false, "justMyCode": false,
"env": { "env": {
@@ -81,10 +81,10 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 调试WebUI", "name": "NebulaShell: 调试WebUI",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/store/@{FutureOSS}/webui/main.py", "program": "${workspaceFolder}/store/@{NebulaShell}/webui/main.py",
"console": "integratedTerminal", "console": "integratedTerminal",
"justMyCode": false, "justMyCode": false,
"env": { "env": {
@@ -95,10 +95,10 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 调试HTTP API", "name": "NebulaShell: 调试HTTP API",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/store/@{FutureOSS}/http-api/main.py", "program": "${workspaceFolder}/store/@{NebulaShell}/http-api/main.py",
"console": "integratedTerminal", "console": "integratedTerminal",
"justMyCode": false, "justMyCode": false,
"env": { "env": {
@@ -109,10 +109,10 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 调试WS API", "name": "NebulaShell: 调试WS API",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/store/@{FutureOSS}/ws-api/main.py", "program": "${workspaceFolder}/store/@{NebulaShell}/ws-api/main.py",
"console": "integratedTerminal", "console": "integratedTerminal",
"justMyCode": false, "justMyCode": false,
"env": { "env": {
@@ -123,7 +123,7 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 调试特定文件", "name": "NebulaShell: 调试特定文件",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${file}", "program": "${file}",
@@ -137,7 +137,7 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS: 附加到进程", "name": "NebulaShell: 附加到进程",
"type": "python", "type": "python",
"request": "attach", "request": "attach",
"processId": "${command:pickProcess}", "processId": "${command:pickProcess}",
@@ -152,7 +152,7 @@
"justMyCode": false "justMyCode": false
}, },
{ {
"name": "FutureOSS: 运行CLI命令", "name": "NebulaShell: 运行CLI命令",
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"module": "oss.cli", "module": "oss.cli",
@@ -167,7 +167,7 @@
"python": "${command:python.interpreterPath}" "python": "${command:python.interpreterPath}"
}, },
{ {
"name": "FutureOSS 网站: 启动Node.js服务器", "name": "NebulaShell 网站: 启动Node.js服务器",
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"skipFiles": [ "skipFiles": [
@@ -190,7 +190,7 @@
"cwd": "${workspaceFolder}/website" "cwd": "${workspaceFolder}/website"
}, },
{ {
"name": "FutureOSS 网站: 开发模式启动", "name": "NebulaShell 网站: 开发模式启动",
"type": "node", "type": "node",
"request": "launch", "request": "launch",
"skipFiles": [ "skipFiles": [
@@ -208,7 +208,7 @@
"cwd": "${workspaceFolder}/website" "cwd": "${workspaceFolder}/website"
}, },
{ {
"name": "FutureOSS 网站: 附加到Node.js进程", "name": "NebulaShell 网站: 附加到Node.js进程",
"type": "node", "type": "node",
"request": "attach", "request": "attach",
"port": 9229, "port": 9229,
@@ -230,10 +230,10 @@
], ],
"compounds": [ "compounds": [
{ {
"name": "FutureOSS: 完整调试环境", "name": "NebulaShell: 完整调试环境",
"configurations": [ "configurations": [
"FutureOSS: 启动服务", "NebulaShell: 启动服务",
"FutureOSS: 调试日志终端插件" "NebulaShell: 调试日志终端插件"
], ],
"stopAll": true "stopAll": true
} }

View File

@@ -5,7 +5,7 @@
"python.analysis.extraPaths": [ "python.analysis.extraPaths": [
"${workspaceFolder}", "${workspaceFolder}",
"${workspaceFolder}/oss", "${workspaceFolder}/oss",
"${workspaceFolder}/store/@{FutureOSS}" "${workspaceFolder}/store/@{NebulaShell}"
], ],
"python.analysis.typeCheckingMode": "basic", "python.analysis.typeCheckingMode": "basic",
"python.analysis.autoImportCompletions": true, "python.analysis.autoImportCompletions": true,

28
.vscode/tasks.json vendored
View File

@@ -2,7 +2,7 @@
"version": "2.0.0", "version": "2.0.0",
"tasks": [ "tasks": [
{ {
"label": "FutureOSS: 安装依赖", "label": "NebulaShell: 安装依赖",
"type": "shell", "type": "shell",
"command": "pip install -r requirements.txt", "command": "pip install -r requirements.txt",
"group": { "group": {
@@ -23,7 +23,7 @@
} }
}, },
{ {
"label": "FutureOSS: 启动开发服务器", "label": "NebulaShell: 启动开发服务器",
"type": "shell", "type": "shell",
"command": "python -m oss.cli serve", "command": "python -m oss.cli serve",
"group": "none", "group": "none",
@@ -48,7 +48,7 @@
], ],
"background": { "background": {
"activeOnStart": true, "activeOnStart": true,
"beginsPattern": ".*启动 FutureOSS 服务.*", "beginsPattern": ".*启动 NebulaShell 服务.*",
"endsPattern": ".*服务已启动.*" "endsPattern": ".*服务已启动.*"
} }
} }
@@ -58,7 +58,7 @@
} }
}, },
{ {
"label": "FutureOSS: 运行测试", "label": "NebulaShell: 运行测试",
"type": "shell", "type": "shell",
"command": "pytest -v --tb=short", "command": "pytest -v --tb=short",
"group": "test", "group": "test",
@@ -89,9 +89,9 @@
} }
}, },
{ {
"label": "FutureOSS: 代码检查", "label": "NebulaShell: 代码检查",
"type": "shell", "type": "shell",
"command": "python -m pylint oss/ store/@{FutureOSS}/ --rcfile=${workspaceFolder}/.pylintrc || echo 'Pylint检查完成'", "command": "python -m pylint oss/ store/@{NebulaShell}/ --rcfile=${workspaceFolder}/.pylintrc || echo 'Pylint检查完成'",
"group": "build", "group": "build",
"presentation": { "presentation": {
"echo": true, "echo": true,
@@ -122,9 +122,9 @@
} }
}, },
{ {
"label": "FutureOSS: 格式化代码", "label": "NebulaShell: 格式化代码",
"type": "shell", "type": "shell",
"command": "python -m black oss/ store/@{FutureOSS}/", "command": "python -m black oss/ store/@{NebulaShell}/",
"group": "build", "group": "build",
"presentation": { "presentation": {
"echo": true, "echo": true,
@@ -140,7 +140,7 @@
} }
}, },
{ {
"label": "FutureOSS: 清理缓存文件", "label": "NebulaShell: 清理缓存文件",
"type": "shell", "type": "shell",
"command": "find . -type f -name '*.pyc' -delete && find . -type d -name '__pycache__' -delete && find . -type f -name '.pid' -delete", "command": "find . -type f -name '*.pyc' -delete && find . -type d -name '__pycache__' -delete && find . -type f -name '.pid' -delete",
"group": "build", "group": "build",
@@ -158,7 +158,7 @@
} }
}, },
{ {
"label": "FutureOSS: 查看服务状态", "label": "NebulaShell: 查看服务状态",
"type": "shell", "type": "shell",
"command": "if [ -f .pid ]; then echo '服务正在运行PID: ' && cat .pid; else echo '服务未运行'; fi", "command": "if [ -f .pid ]; then echo '服务正在运行PID: ' && cat .pid; else echo '服务未运行'; fi",
"group": "none", "group": "none",
@@ -176,7 +176,7 @@
} }
}, },
{ {
"label": "FutureOSS: 停止服务", "label": "NebulaShell: 停止服务",
"type": "shell", "type": "shell",
"command": "if [ -f .pid ]; then kill $(cat .pid) && rm -f .pid && echo '服务已停止'; else echo '服务未运行'; fi", "command": "if [ -f .pid ]; then kill $(cat .pid) && rm -f .pid && echo '服务已停止'; else echo '服务未运行'; fi",
"group": "none", "group": "none",
@@ -194,12 +194,12 @@
} }
}, },
{ {
"label": "FutureOSS: 重启服务", "label": "NebulaShell: 重启服务",
"type": "shell", "type": "shell",
"dependsOrder": "sequence", "dependsOrder": "sequence",
"dependsOn": [ "dependsOn": [
"FutureOSS: 停止服务", "NebulaShell: 停止服务",
"FutureOSS: 启动开发服务器" "NebulaShell: 启动开发服务器"
], ],
"group": "none", "group": "none",
"presentation": { "presentation": {

66
AGENTS.md Normal file
View File

@@ -0,0 +1,66 @@
# AGENTS.md — NebulaShell
## Quick start
```bash
pip install -r requirements.txt
python -m oss.cli serve # start server on :8080
# or: python main.py
# or: oss serve (after pip install -e .)
```
## Architecture (minimal core philosophy)
- Core framework (`oss/`) loads only **one** builtin plugin: `store/@{NebulaShell}/plugin-loader/`
- `plugin-loader` then scans `store/@{NebulaShell}/` and manages all other plugins
- Two store namespaces: `@{NebulaShell}` (26 official plugins) and `@{Falck}` (2 plugins)
- Entry point: `oss/cli.py:main()``PluginManager``PluginLoader.load_core_plugin("plugin-loader")`
- Each store plugin at `store/@{NebulaShell}/<name>/main.py` must export a `New()` factory function
- Plugin base class: `oss/plugin/types.py:Plugin` (abstract: `init`, `start`, `stop`)
## Commands
| Action | Command |
|--------|---------|
| Start server | `python -m oss.cli serve` |
| Show info | `python -m oss.cli info` |
| Hidden achievements | Prefix with `!!` (e.g., `!!help`, `!!list`, `!!stats`, `!!debug`) |
| Docker | `docker-compose up` (ports 8080-8082) |
Hidden commands defined in `oss/core/achievements.py` — they are a gamification layer, not real administration.
## Config
- **`oss.config.json`** — runtime config (port, host, data/store dirs, log level, permissions)
- Priority: env var > `oss.config.json` > hardcoded defaults (`oss/config/config.py`)
- Must set `PYTHONPATH` to repo root before running anything
- `PYTHONUNBUFFERED=1` recommended for dev
## Test
```bash
pytest -v --tb=short # single test file: oss/tests/test_nodejs_adapter.py
```
Tests require Node.js/npm on `$PATH` or many tests skip. No CI workflows exist.
## Toolchain
```
black oss/ store/@{NebulaShell}/ # formatter (line-length=88)
pylint oss/ store/@{NebulaShell}/ # linter (references .pylintrc, file may not exist)
```
No typechecker configured. No CI.
## Rename history
This project was renamed from **FutureOSS****NebulaShell**. Old name may still appear in git history, external URLs, or stale wiki references. Always use "NebulaShell" in new code.
## Ports
| Port | Service |
|------|---------|
| 8080 | HTTP API + WebUI |
| 8081 | WebSocket |
| 8082 | HTTP TCP |

View File

@@ -17,7 +17,7 @@ RUN pip install --no-cache-dir --prefix=/install click pyyaml websockets 2>/dev/
FROM python:3.12-slim FROM python:3.12-slim
LABEL maintainer="Falck <https://gitee.com/starlight-apk>" LABEL maintainer="Falck <https://gitee.com/starlight-apk>"
LABEL description="FutureOSS — 一切皆为插件的开发者工具运行时框架" LABEL description="NebulaShell — 一切皆为插件的开发者工具运行时框架"
WORKDIR /app WORKDIR /app

View File

@@ -1,4 +1,4 @@
# 🚀 FutureOSS <span style="font-size:1.5em;color:#667eea">v1.2.0</span> 企业级插件化运行时框架 # 🚀 NebulaShell <span style="font-size:1.5em;color:#667eea">v1.2.0</span> 企业级插件化运行时框架
<div align="center"> <div align="center">
@@ -25,7 +25,7 @@
> ### 🌟 **革命性突破 - 彻底告别依赖安装烦恼!** > ### 🌟 **革命性突破 - 彻底告别依赖安装烦恼!**
> >
> 想象一下:只需声明你的插件需要什么,剩下的交给 FutureOSS > 想象一下:只需声明你的插件需要什么,剩下的交给 NebulaShell
> >
> | 🚀 核心能力 | 💡 技术亮点 | > | 🚀 核心能力 | 💡 技术亮点 |
> |:----------:|:-----------| > |:----------:|:-----------|
@@ -38,7 +38,7 @@
--- ---
## 🚀 为什么选择 FutureOSS ## 🚀 为什么选择 NebulaShell
<details open> <details open>
<summary><b>🛡️ 极致安全架构 - 重新定义插件安全边界 (点击展开)</b></summary> <summary><b>🛡️ 极致安全架构 - 重新定义插件安全边界 (点击展开)</b></summary>
@@ -215,7 +215,7 @@
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#667eea', 'edgeLabelBackground':'#fff', 'tertiaryColor': '#e3f2fd'}}}%% %%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#667eea', 'edgeLabelBackground':'#fff', 'tertiaryColor': '#e3f2fd'}}}%%
graph TB graph TB
User[👤 用户/客户端] --> Gateway[🛡️ 统一安全网关] User[👤 用户/客户端] --> Gateway[🛡️ 统一安全网关]
Gateway --> Core[⚙️ FutureOSS 微内核] Gateway --> Core[⚙️ NebulaShell 微内核]
subgraph CoreLayer["🔐 核心插件层 (可信域)"] subgraph CoreLayer["🔐 核心插件层 (可信域)"]
direction TB direction TB
@@ -289,7 +289,7 @@ graph TB
"author": "Your Name <your@email.com>", "author": "Your Name <your@email.com>",
"license": "MIT", "license": "MIT",
// 🔥 系统依赖声明(FutureOSS 自动安装) // 🔥 系统依赖声明(NebulaShell 自动安装)
"system_dependencies": [ "system_dependencies": [
"nginx", "nginx",
"redis-server", "redis-server",
@@ -301,7 +301,7 @@ graph TB
// 📦 包管理器选择 // 📦 包管理器选择
"package_manager": "apt-get", "package_manager": "apt-get",
// 🔌 插件依赖(其他 FutureOSS 插件) // 🔌 插件依赖(其他 NebulaShell 插件)
"plugin_dependencies": [ "plugin_dependencies": [
"security_gateway@>=1.0.0", "security_gateway@>=1.0.0",
"firewall@>=1.0.0" "firewall@>=1.0.0"
@@ -387,13 +387,13 @@ xcode-select --install # 安装 Xcode 命令行工具
```bash ```bash
# 📥 克隆仓库 # 📥 克隆仓库
git clone https://github.com/Starlight-apk/FutureOSS.git git clone https://github.com/Starlight-apk/NebulaShell.git
cd futureoss cd nebulashell
# 📦 安装 Python 依赖 # 📦 安装 Python 依赖
pip install -r requirements.txt pip install -r requirements.txt
# 🚀 启动 FutureOSS 核心 # 🚀 启动 NebulaShell 核心
python main.py python main.py
# 🎉 完成!观察控制台输出 # 🎉 完成!观察控制台输出
@@ -533,8 +533,8 @@ graph LR
```bash ```bash
# 1⃣ Fork 你的专属仓库 # 1⃣ Fork 你的专属仓库
git clone https://github.com/Starlight-apk/FutureOSS.git git clone https://github.com/Starlight-apk/NebulaShell.git
cd futureoss cd nebulashell
# 2⃣ 创建虚拟环境 # 2⃣ 创建虚拟环境
python -m venv venv python -m venv venv
@@ -776,21 +776,21 @@ git push origin feature/your-amazing-feature
### 如果这个项目帮助到了你,请给我们一个 ⭐ Star ### 如果这个项目帮助到了你,请给我们一个 ⭐ Star
[![Star on GitHub](https://img.shields.io/github/stars/Starlight-apk/FutureOSS?style=social&logo=github)](https://github.com/Starlight-apk/FutureOSS) [![Star on GitHub](https://img.shields.io/github/stars/Starlight-apk/NebulaShell?style=social&logo=github)](https://github.com/Starlight-apk/NebulaShell)
[![Fork on GitHub](https://img.shields.io/github/forks/Starlight-apk/FutureOSS?style=social&logo=github)](https://github.com/Starlight-apk/FutureOSS/fork) [![Fork on GitHub](https://img.shields.io/github/forks/Starlight-apk/NebulaShell?style=social&logo=github)](https://github.com/Starlight-apk/NebulaShell/fork)
[![Watch on GitHub](https://img.shields.io/github/watchers/Starlight-apk/FutureOSS?style=social&logo=github)](https://github.com/Starlight-apk/FutureOSS/watchers) [![Watch on GitHub](https://img.shields.io/github/watchers/Starlight-apk/NebulaShell?style=social&logo=github)](https://github.com/Starlight-apk/NebulaShell/watchers)
--- ---
### 👥 致谢所有贡献者 ### 👥 致谢所有贡献者
<a href="https://github.com/Starlight-apk/FutureOSS/graphs/contributors"> <a href="https://github.com/Starlight-apk/NebulaShell/graphs/contributors">
<img src="https://contrib.rocks/image?repo=Starlight-apk/FutureOSS&max=100&columns=10" alt="Contributors"/> <img src="https://contrib.rocks/image?repo=Starlight-apk/NebulaShell&max=100&columns=10" alt="Contributors"/>
</a> </a>
--- ---
*🚀 **Built with ❤️ by [FutureOSS Team](https://github.com/Starlight-apk)** * *🚀 **Built with ❤️ by [NebulaShell Team](https://github.com/Starlight-apk)** *
***面向未来,安全随行 - 让插件开发从未如此简单** * ***面向未来,安全随行 - 让插件开发从未如此简单** *
*🌍 **Made possible by our amazing community** * *🌍 **Made possible by our amazing community** *
@@ -798,7 +798,7 @@ git push origin feature/your-amazing-feature
<div align="center"> <div align="center">
[🏠 官网首页](https://futureoss.date) [🏠 官网首页](https://nebulashell.date)
</div> </div>

View File

@@ -1,4 +1,4 @@
# 🚀 FutureOSS v1.1.0 安全全能发行版 - 发布说明 # 🚀 NebulaShell v1.1.0 安全全能发行版 - 发布说明
## 📅 发布时间 ## 📅 发布时间
2024 年 4 月 24 日 2024 年 4 月 24 日
@@ -137,9 +137,9 @@ firewall.ip.block <ip> reason=<reason>
## 📞 技术支持 ## 📞 技术支持
- 文档https://futureoss.org/docs/v1.1.0 - 文档https://nebulashell.org/docs/v1.1.0
- 问题反馈GitHub Issues - 问题反馈GitHub Issues
- 社区讨论Discord / Slack - 社区讨论Discord / Slack
--- ---
**FutureOSS Team** © 2024 | 安全 · 灵活 · 高效 **NebulaShell Team** © 2024 | 安全 · 灵活 · 高效

View File

@@ -1,9 +1,9 @@
services: services:
futureoss: nebulashell:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: futureoss container_name: nebulashell
restart: unless-stopped restart: unless-stopped
ports: ports:
- "8080:8080" # HTTP API + 网站 - "8080:8080" # HTTP API + 网站
@@ -11,10 +11,10 @@ services:
- "8082:8082" # HTTP TCP - "8082:8082" # HTTP TCP
volumes: volumes:
# 插件热更新(无需重建镜像) # 插件热更新(无需重建镜像)
- ./store/@{FutureOSS}:/app/store/@{FutureOSS}:ro - ./store/@{NebulaShell}:/app/store/@{NebulaShell}:ro
- ./store/@{Falck}:/app/store/@{Falck}:ro - ./store/@{Falck}:/app/store/@{Falck}:ro
# 数据持久化 # 数据持久化
- futureoss-data:/app/data - nebulashell-data:/app/data
# 配置可覆盖 # 配置可覆盖
- ./config.yaml:/app/config.yaml:ro - ./config.yaml:/app/config.yaml:ro
environment: environment:
@@ -39,5 +39,5 @@ services:
memory: 128M memory: 128M
volumes: volumes:
futureoss-data: nebulashell-data:
driver: local driver: local

View File

@@ -1,10 +0,0 @@
Metadata-Version: 2.4
Name: future-oss
Version: 1.2.0
Summary: Future OSS - 一切皆为插件的开发者工具运行时框架
Requires-Python: >=3.10
License-File: LICENSE
Requires-Dist: click>=8.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: websockets>=12.0
Dynamic: license-file

View File

@@ -1,27 +0,0 @@
LICENSE
README.md
pyproject.toml
future_oss.egg-info/PKG-INFO
future_oss.egg-info/SOURCES.txt
future_oss.egg-info/dependency_links.txt
future_oss.egg-info/entry_points.txt
future_oss.egg-info/requires.txt
future_oss.egg-info/top_level.txt
oss/__init__.py
oss/cli.py
oss/core/context.py
oss/logger/logger.py
oss/plugin/base.py
oss/plugin/capabilities.py
oss/plugin/loader.py
oss/plugin/manager.py
oss/plugin/types.py
oss/plugins/auto_dependency.py
oss/plugins/firewall.py
oss/plugins/frp_proxy.py
oss/plugins/ftp_server.py
oss/plugins/multi_lang_deploy.py
oss/plugins/ops_toolbox.py
oss/plugins/security_gateway.py
oss/shared/__init__.py
oss/shared/router.py

View File

@@ -1 +0,0 @@

View File

@@ -1,2 +0,0 @@
[console_scripts]
oss = oss.cli:main

View File

@@ -1,3 +0,0 @@
click>=8.0
pyyaml>=6.0
websockets>=12.0

View File

@@ -1 +0,0 @@
oss

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
"""FutureOSS 主入口 - 兼容旧版启动方式 """NebulaShell 主入口 - 兼容旧版启动方式
此文件用于兼容 README 中描述的 `python main.py` 启动方式。 此文件用于兼容 README 中描述的 `python main.py` 启动方式。
推荐使用 `oss serve` 命令启动。 推荐使用 `oss serve` 命令启动。

View File

@@ -1,2 +1,2 @@
"""Future OSS""" """NebulaShell"""
__version__ = "1.2.0" __version__ = "1.2.0"

View File

@@ -22,7 +22,7 @@ except ImportError:
@click.option('--config', '-c', type=str, help='配置文件路径') @click.option('--config', '-c', type=str, help='配置文件路径')
@click.pass_context @click.pass_context
def cli(ctx, config): def cli(ctx, config):
"""Future OSS - 一切皆为插件""" """NebulaShell - 一切皆为插件"""
# 初始化配置 # 初始化配置
ctx.ensure_object(dict) ctx.ensure_object(dict)
ctx.obj['config'] = init_config(config) ctx.obj['config'] = init_config(config)
@@ -41,7 +41,7 @@ def cli(ctx, config):
@click.option('--tcp-port', type=int, default=None, help='HTTP TCP 端口') @click.option('--tcp-port', type=int, default=None, help='HTTP TCP 端口')
@click.pass_context @click.pass_context
def serve(ctx, host, port, tcp_port): def serve(ctx, host, port, tcp_port):
"""启动 Future OSS""" """启动 NebulaShell"""
config = ctx.obj.get('config', get_config()) config = ctx.obj.get('config', get_config())
# 命令行参数覆盖配置 # 命令行参数覆盖配置
@@ -53,7 +53,7 @@ def serve(ctx, host, port, tcp_port):
config.set('HTTP_TCP_PORT', tcp_port) config.set('HTTP_TCP_PORT', tcp_port)
log = Logger() log = Logger()
log.info(f"Future OSS {__version__} 启动") log.info(f"NebulaShell {__version__} 启动")
log.info(f"监听地址:{config.host}:{config.http_api_port}") log.info(f"监听地址:{config.host}:{config.http_api_port}")
log.info(f"数据目录:{config.data_dir.absolute()}") log.info(f"数据目录:{config.data_dir.absolute()}")
log.info(f"插件仓库:{config.store_dir.absolute()}") log.info(f"插件仓库:{config.store_dir.absolute()}")
@@ -84,7 +84,7 @@ def serve(ctx, host, port, tcp_port):
@cli.command() @cli.command()
def version(): def version():
"""显示版本""" """显示版本"""
click.echo(f"Future OSS {__version__}") click.echo(f"NebulaShell {__version__}")
@cli.command() @cli.command()
@@ -94,7 +94,7 @@ def info(ctx):
import random import random
config = ctx.obj.get('config', get_config()) config = ctx.obj.get('config', get_config())
click.echo(f"Future OSS {__version__}") click.echo(f"NebulaShell {__version__}")
click.echo(f"配置文件:{config._config_file or ''}") click.echo(f"配置文件:{config._config_file or ''}")
click.echo(f"HTTP API 端口:{config.http_api_port}") click.echo(f"HTTP API 端口:{config.http_api_port}")
click.echo(f"HTTP TCP 端口:{config.http_tcp_port}") click.echo(f"HTTP TCP 端口:{config.http_tcp_port}")

View File

@@ -17,8 +17,8 @@ from typing import Dict, List, Optional, Set, Any
# 配置验证常量 # 配置验证常量
_VALIDATOR_CACHE_FILE = ".validator_cache" _VALIDATOR_CACHE_FILE = ".validator_cache"
# 验证密钥 (hex encoded): FutureOSSAchievement # 验证密钥 (hex encoded): NebulaShellAchievement
_VALIDATOR_KEY = "4675747572654f5353416368696576656d656e74" # 验证密钥 _VALIDATOR_KEY = "4e6562756c615368656c6c416368696576656d656e74" # 验证密钥
class _ConfigValidator: class _ConfigValidator:

View File

@@ -1,7 +1,7 @@
"""插件加载器 - 专门用于加载核心插件 """插件加载器 - 专门用于加载核心插件
遵循「最小化核心框架」设计哲学: 遵循「最小化核心框架」设计哲学:
- 只负责加载可信的核心插件(来自 store/@{FutureOSS}/ - 只负责加载可信的核心插件(来自 store/@{NebulaShell}/
- 所有插件都使用统一的加载机制 - 所有插件都使用统一的加载机制
- 不再区分沙箱模式和非沙箱模式 - 不再区分沙箱模式和非沙箱模式
""" """
@@ -17,7 +17,7 @@ class PluginLoader:
"""插件加载器 - 专门用于加载核心插件 """插件加载器 - 专门用于加载核心插件
遵循「最小化核心框架」设计哲学: 遵循「最小化核心框架」设计哲学:
- 只负责加载可信的核心插件(来自 store/@{FutureOSS}/ - 只负责加载可信的核心插件(来自 store/@{NebulaShell}/
- 所有插件都使用统一的加载机制 - 所有插件都使用统一的加载机制
- 不再区分沙箱模式和非沙箱模式 - 不再区分沙箱模式和非沙箱模式
""" """
@@ -27,7 +27,7 @@ class PluginLoader:
self._config = get_config() self._config = get_config()
def load_core_plugin(self, plugin_name: str, store_dir: Optional[str] = None) -> Optional[dict[str, Any]]: def load_core_plugin(self, plugin_name: str, store_dir: Optional[str] = None) -> Optional[dict[str, Any]]:
"""加载核心插件(来自 store/@{FutureOSS}/ """加载核心插件(来自 store/@{NebulaShell}/
Args: Args:
plugin_name: 插件名称(如 "plugin-loader" plugin_name: 插件名称(如 "plugin-loader"
@@ -38,7 +38,7 @@ class PluginLoader:
""" """
if store_dir is None: if store_dir is None:
store_dir = str(self._config.store_dir) store_dir = str(self._config.store_dir)
plugin_dir = Path(store_dir) / "@{FutureOSS}" / plugin_name plugin_dir = Path(store_dir) / "@{NebulaShell}" / plugin_name
return self._load_plugin(plugin_name, plugin_dir) return self._load_plugin(plugin_name, plugin_dir)
def _load_plugin(self, plugin_name: str, plugin_dir: Path) -> Optional[dict[str, Any]]: def _load_plugin(self, plugin_name: str, plugin_dir: Path) -> Optional[dict[str, Any]]:

View File

@@ -17,7 +17,7 @@ class PluginManager:
遵循「最小化核心框架」设计哲学: 遵循「最小化核心框架」设计哲学:
- 核心框架只负责加载 plugin-loader 插件 - 核心框架只负责加载 plugin-loader 插件
- 所有其他插件HTTP、WebSocket、Dashboard 等)都由 plugin-loader 插件扫描和加载 - 所有其他插件HTTP、WebSocket、Dashboard 等)都由 plugin-loader 插件扫描和加载
- store/@{FutureOSS}/ 是唯一的插件来源 - store/@{NebulaShell}/ 是唯一的插件来源
""" """
def __init__(self): def __init__(self):
@@ -28,7 +28,7 @@ class PluginManager:
"""仅加载 plugin-loader 核心插件 """仅加载 plugin-loader 核心插件
plugin-loader 插件会负责: plugin-loader 插件会负责:
1. 扫描 store/@{FutureOSS}/ 目录 1. 扫描 store/@{NebulaShell}/ 目录
2. 加载所有启用的插件 2. 加载所有启用的插件
3. 处理依赖关系 3. 处理依赖关系
4. 执行 PL 注入机制 4. 执行 PL 注入机制

View File

@@ -1,4 +1,4 @@
# @FutureOSS/nodejs-adapter # @NebulaShell/nodejs-adapter
**Pure Node.js Runtime Adapter Service** **Pure Node.js Runtime Adapter Service**
@@ -33,7 +33,7 @@ In your plugin's `manifest.json`:
{ {
"name": "@MyOrg/my-web-plugin", "name": "@MyOrg/my-web-plugin",
"dependencies": { "dependencies": {
"adapters": ["@FutureOSS/nodejs-adapter"] "adapters": ["@NebulaShell/nodejs-adapter"]
} }
} }
``` ```

View File

@@ -1,5 +1,5 @@
""" """
Node.js Runtime Adapter for FutureOSS Node.js Runtime Adapter for NebulaShell
===================================== =====================================
This plugin acts as a pure service provider (Adapter). It does NOT contain its own business logic or pkg. This plugin acts as a pure service provider (Adapter). It does NOT contain its own business logic or pkg.
Instead, it exposes standard interfaces for OTHER plugins to execute Node.js/npm commands Instead, it exposes standard interfaces for OTHER plugins to execute Node.js/npm commands

View File

@@ -1,8 +1,8 @@
{ {
"name": "@FutureOSS/nodejs-adapter", "name": "@NebulaShell/nodejs-adapter",
"version": "1.0.0", "version": "1.0.0",
"description": "Pure Node.js runtime adapter service. Provides execution context for other plugins to run Node.js/npm commands in their own ./pkg directories.", "description": "Pure Node.js runtime adapter service. Provides execution context for other plugins to run Node.js/npm commands in their own ./pkg directories.",
"author": "FutureOSS Team", "author": "NebulaShell Team",
"license": "MIT", "license": "MIT",
"type": "adapter", "type": "adapter",
"main": "main.py", "main": "main.py",

View File

@@ -10,7 +10,7 @@ import shutil
import pytest import pytest
# Add the plugin directory to path # Add the plugin directory to path
PLUGIN_DIR = os.path.join(os.path.dirname(__file__), '..', 'store', '@{FutureOSS}', 'nodejs-adapter') PLUGIN_DIR = os.path.join(os.path.dirname(__file__), '..', 'store', '@{NebulaShell}', 'nodejs-adapter')
sys.path.insert(0, PLUGIN_DIR) sys.path.insert(0, PLUGIN_DIR)
# Import after path update # Import after path update

View File

@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FutureOSS v1.1.0 | 控制台</title> <title>NebulaShell v1.1.0 | 控制台</title>
<style> <style>
:root { :root {
--bg: #ffffff; --bg: #ffffff;
@@ -146,7 +146,7 @@
<body> <body>
<div class="container"> <div class="container">
<header> <header>
<h1>FutureOSS</h1> <h1>NebulaShell</h1>
<p class="subtitle">v1.1.0 安全全能发行版 · 企业级插件化运行时</p> <p class="subtitle">v1.1.0 安全全能发行版 · 企业级插件化运行时</p>
</header> </header>
@@ -204,7 +204,7 @@
</div> </div>
<footer> <footer>
<p>FutureOSS v1.1.0 Security All-in-One Edition</p> <p>NebulaShell v1.1.0 Security All-in-One Edition</p>
<p style="margin-top: 8px;">Built with ❤️ · MIT License</p> <p style="margin-top: 8px;">Built with ❤️ · MIT License</p>
</footer> </footer>
</div> </div>

View File

@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "future-oss" name = "future-oss"
version = "1.2.0" version = "1.2.0"
description = "Future OSS - 一切皆为插件的开发者工具运行时框架" description = "NebulaShell - 一切皆为插件的开发者工具运行时框架"
requires-python = ">=3.10" requires-python = ">=3.10"
dependencies = [ dependencies = [
"click>=8.0", "click>=8.0",

View File

@@ -1,7 +1,7 @@
@echo off @echo off
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
:: FutureOSS Smart Startup Script - Windows :: NebulaShell Smart Startup Script - Windows
cd /d "%~dp0" cd /d "%~dp0"
:: Handle command line parameters :: Handle command line parameters
@@ -12,7 +12,7 @@ if "%1"=="-v" goto :show_version
echo. echo.
echo ======================================== echo ========================================
echo FutureOSS Startup Script - Windows echo NebulaShell Startup Script - Windows
echo ======================================== echo ========================================
echo. echo.
@@ -137,7 +137,7 @@ echo [SUCCESS] Data directories ready
:: 6. Start Service :: 6. Start Service
echo. echo.
echo ======================================== echo ========================================
echo Starting FutureOSS echo Starting NebulaShell
echo ======================================== echo ========================================
echo. echo.
@@ -195,7 +195,7 @@ call :cleanup
call .venv\Scripts\deactivate.bat >nul 2>&1 call .venv\Scripts\deactivate.bat >nul 2>&1
echo. echo.
echo ======================================== echo ========================================
echo FutureOSS Stopped echo NebulaShell Stopped
echo ======================================== echo ========================================
pause pause
exit /b 0 exit /b 0
@@ -276,7 +276,7 @@ exit /b 0
:: Show help information :: Show help information
:show_help :show_help
echo. echo.
echo FutureOSS Startup Script - Windows Version echo NebulaShell Startup Script - Windows Version
echo. echo.
echo Usage: start.bat [options] echo Usage: start.bat [options]
echo. echo.
@@ -293,7 +293,7 @@ exit /b 0
:: Show version information :: Show version information
:show_version :show_version
echo FutureOSS v1.0.0 echo NebulaShell v1.0.0
echo Developer toolkit based on Python echo Developer toolkit based on Python
echo. echo.
exit /b 0 exit /b 0

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ═══════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════
# FutureOSS 智能启动脚本 - Linux # NebulaShell 智能启动脚本 - Linux
# 自动检测环境 / 安装依赖 / 进度显示 / 守护重启 # 自动检测环境 / 安装依赖 / 进度显示 / 守护重启
# ═══════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════
@@ -325,8 +325,8 @@ if command -v mysql &>/dev/null; then
ok "MySQL: $(mysql --version 2>&1)" ok "MySQL: $(mysql --version 2>&1)"
if pgrep mysqld > /dev/null 2>&1 || pgrep mariadbd > /dev/null 2>&1; then if pgrep mysqld > /dev/null 2>&1 || pgrep mariadbd > /dev/null 2>&1; then
ok "MySQL 服务运行中" ok "MySQL 服务运行中"
mysql -u root -e "CREATE DATABASE IF NOT EXISTS futureoss CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null && \ mysql -u root -e "CREATE DATABASE IF NOT EXISTS nebulashell CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null && \
ok "数据库 futureoss 已就绪" || \ ok "数据库 nebulashell 已就绪" || \
warn "无法创建数据库,请检查权限" warn "无法创建数据库,请检查权限"
else else
warn "MySQL 服务未运行" warn "MySQL 服务未运行"
@@ -341,11 +341,11 @@ fi
# ═══════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════
# 7. 启动服务 # 7. 启动服务
# ═══════════════════════════════════════════════════════════ # ═══════════════════════════════════════════════════════════
step "启动 FutureOSS" step "启动 NebulaShell"
if $DAEMON; then if $DAEMON; then
LOG_FILE="logs/futureoss.log" LOG_FILE="logs/nebulashell.log"
PID_FILE="logs/futureoss.pid" PID_FILE="logs/nebulashell.pid"
if [[ -f "$PID_FILE" ]]; then if [[ -f "$PID_FILE" ]]; then
OLD_PID=$(cat "$PID_FILE") OLD_PID=$(cat "$PID_FILE")

View File

@@ -108,7 +108,7 @@ print(f"成功安装:{install_result['success_count']}, 失败:{install_resu
## 文件结构 ## 文件结构
``` ```
store/@{FutureOSS}/auto-dependency/ store/@{NebulaShell}/auto-dependency/
├── manifest.json # 插件清单 ├── manifest.json # 插件清单
├── main.py # 主逻辑实现 ├── main.py # 主逻辑实现
├── PL/ ├── PL/

View File

@@ -2,7 +2,7 @@
"metadata": { "metadata": {
"name": "auto-dependency", "name": "auto-dependency",
"version": "1.0.0", "version": "1.0.0",
"author": "FutureOSS", "author": "NebulaShell",
"description": "依赖自动安装插件 - 扫描所有插件的声明文件,检查并安装系统依赖", "description": "依赖自动安装插件 - 扫描所有插件的声明文件,检查并安装系统依赖",
"type": "core" "type": "core"
}, },

View File

@@ -1,8 +1,8 @@
{ {
"signature": "BRVmR6gX5do7yBsBCtR9jk5/YoE6igio8d3IVNxAtwAtkBdS2Z3LNv9VwMBXeqOE84Dz1+/ypkQO+rdh9VZpGOpAPGxjCyArff9oS3nW6gazMZdLfMKrtsHxVBAL4Ycjb1NmQ3W0kdZa/aS+r2Q/tqVMJ62bqVR5Lbrc2H8eG/i1gPZsEu5tA7KC9pB8oDfaAY/QxeDczg32zWqh9UDD59Hp7TQMZhsWXsH9FgfvKjYKjcsQUEXs6ijUJ6PxHuc2Jx71xhD/IXseOTmnDCMe+8JdPA5aaVN/TEgmT99RXv62wHR+tulyaCYRd/P3sTItSSb1UYfLqEGBumetNAAGdgf33DMijUHKvufuha0JNOm6CCk+8UGbnYnG79HyaBz+pWfiF/pFX+LV7HTJTkBwQc3vXcvXep25UDspSkL+x2w3f1mk9S/oA5mT2go4kSaORxkCb1fAbh74Bn51VRmQV8XLSUOoZvWHjiaMkMdLsyPyTi2+fxqrDD7ehgeQBp3cNSoiGViqYcFcg2xCuHo2P/W441cZMOscfawdLJxg3N4+UC41LTooXN1+IBWzG7jrGTLyeXAFxGeOBo165WoAnsQZ9hh+uj/plv+LIU/mmOBSpJZIb4SuVJfoEcIDGpa7iieVr//8cTnbNTt9zh3GWYuW1NPIm+/WT4YoPfeAs/M=", "signature": "BRVmR6gX5do7yBsBCtR9jk5/YoE6igio8d3IVNxAtwAtkBdS2Z3LNv9VwMBXeqOE84Dz1+/ypkQO+rdh9VZpGOpAPGxjCyArff9oS3nW6gazMZdLfMKrtsHxVBAL4Ycjb1NmQ3W0kdZa/aS+r2Q/tqVMJ62bqVR5Lbrc2H8eG/i1gPZsEu5tA7KC9pB8oDfaAY/QxeDczg32zWqh9UDD59Hp7TQMZhsWXsH9FgfvKjYKjcsQUEXs6ijUJ6PxHuc2Jx71xhD/IXseOTmnDCMe+8JdPA5aaVN/TEgmT99RXv62wHR+tulyaCYRd/P3sTItSSb1UYfLqEGBumetNAAGdgf33DMijUHKvufuha0JNOm6CCk+8UGbnYnG79HyaBz+pWfiF/pFX+LV7HTJTkBwQc3vXcvXep25UDspSkL+x2w3f1mk9S/oA5mT2go4kSaORxkCb1fAbh74Bn51VRmQV8XLSUOoZvWHjiaMkMdLsyPyTi2+fxqrDD7ehgeQBp3cNSoiGViqYcFcg2xCuHo2P/W441cZMOscfawdLJxg3N4+UC41LTooXN1+IBWzG7jrGTLyeXAFxGeOBo165WoAnsQZ9hh+uj/plv+LIU/mmOBSpJZIb4SuVJfoEcIDGpa7iieVr//8cTnbNTt9zh3GWYuW1NPIm+/WT4YoPfeAs/M=",
"signer": "FutureOSS", "signer": "NebulaShell",
"algorithm": "RSA-SHA256", "algorithm": "RSA-SHA256",
"timestamp": 1775964953.1082504, "timestamp": 1775964953.1082504,
"plugin_hash": "8894b78ac59c0154acaeb9a976f80588ece406e55079ca633c3b2bd839098d40", "plugin_hash": "8894b78ac59c0154acaeb9a976f80588ece406e55079ca633c3b2bd839098d40",
"author": "FutureOSS" "author": "NebulaShell"
} }

Some files were not shown because too many files have changed in this diff Show More