更改项目名为NebulaShell
This commit is contained in:
42
.vscode/launch.json
vendored
42
.vscode/launch.json
vendored
@@ -2,7 +2,7 @@
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "FutureOSS: 启动服务",
|
||||
"name": "NebulaShell: 启动服务",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "oss.cli",
|
||||
@@ -17,7 +17,7 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 调试模式启动",
|
||||
"name": "NebulaShell: 调试模式启动",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "oss.cli",
|
||||
@@ -33,7 +33,7 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 运行测试",
|
||||
"name": "NebulaShell: 运行测试",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "pytest",
|
||||
@@ -53,7 +53,7 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 调试插件加载器",
|
||||
"name": "NebulaShell: 调试插件加载器",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/oss/plugin/loader.py",
|
||||
@@ -67,10 +67,10 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 调试日志终端插件",
|
||||
"name": "NebulaShell: 调试日志终端插件",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/store/@{FutureOSS}/log-terminal/main.py",
|
||||
"program": "${workspaceFolder}/store/@{NebulaShell}/log-terminal/main.py",
|
||||
"console": "integratedTerminal",
|
||||
"justMyCode": false,
|
||||
"env": {
|
||||
@@ -81,10 +81,10 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 调试WebUI",
|
||||
"name": "NebulaShell: 调试WebUI",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/store/@{FutureOSS}/webui/main.py",
|
||||
"program": "${workspaceFolder}/store/@{NebulaShell}/webui/main.py",
|
||||
"console": "integratedTerminal",
|
||||
"justMyCode": false,
|
||||
"env": {
|
||||
@@ -95,10 +95,10 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 调试HTTP API",
|
||||
"name": "NebulaShell: 调试HTTP API",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/store/@{FutureOSS}/http-api/main.py",
|
||||
"program": "${workspaceFolder}/store/@{NebulaShell}/http-api/main.py",
|
||||
"console": "integratedTerminal",
|
||||
"justMyCode": false,
|
||||
"env": {
|
||||
@@ -109,10 +109,10 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 调试WS API",
|
||||
"name": "NebulaShell: 调试WS API",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"program": "${workspaceFolder}/store/@{FutureOSS}/ws-api/main.py",
|
||||
"program": "${workspaceFolder}/store/@{NebulaShell}/ws-api/main.py",
|
||||
"console": "integratedTerminal",
|
||||
"justMyCode": false,
|
||||
"env": {
|
||||
@@ -123,7 +123,7 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 调试特定文件",
|
||||
"name": "NebulaShell: 调试特定文件",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"program": "${file}",
|
||||
@@ -137,7 +137,7 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 附加到进程",
|
||||
"name": "NebulaShell: 附加到进程",
|
||||
"type": "python",
|
||||
"request": "attach",
|
||||
"processId": "${command:pickProcess}",
|
||||
@@ -152,7 +152,7 @@
|
||||
"justMyCode": false
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS: 运行CLI命令",
|
||||
"name": "NebulaShell: 运行CLI命令",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "oss.cli",
|
||||
@@ -167,7 +167,7 @@
|
||||
"python": "${command:python.interpreterPath}"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS 网站: 启动Node.js服务器",
|
||||
"name": "NebulaShell 网站: 启动Node.js服务器",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"skipFiles": [
|
||||
@@ -190,7 +190,7 @@
|
||||
"cwd": "${workspaceFolder}/website"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS 网站: 开发模式启动",
|
||||
"name": "NebulaShell 网站: 开发模式启动",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"skipFiles": [
|
||||
@@ -208,7 +208,7 @@
|
||||
"cwd": "${workspaceFolder}/website"
|
||||
},
|
||||
{
|
||||
"name": "FutureOSS 网站: 附加到Node.js进程",
|
||||
"name": "NebulaShell 网站: 附加到Node.js进程",
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"port": 9229,
|
||||
@@ -230,10 +230,10 @@
|
||||
],
|
||||
"compounds": [
|
||||
{
|
||||
"name": "FutureOSS: 完整调试环境",
|
||||
"name": "NebulaShell: 完整调试环境",
|
||||
"configurations": [
|
||||
"FutureOSS: 启动服务",
|
||||
"FutureOSS: 调试日志终端插件"
|
||||
"NebulaShell: 启动服务",
|
||||
"NebulaShell: 调试日志终端插件"
|
||||
],
|
||||
"stopAll": true
|
||||
}
|
||||
|
||||
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -5,7 +5,7 @@
|
||||
"python.analysis.extraPaths": [
|
||||
"${workspaceFolder}",
|
||||
"${workspaceFolder}/oss",
|
||||
"${workspaceFolder}/store/@{FutureOSS}"
|
||||
"${workspaceFolder}/store/@{NebulaShell}"
|
||||
],
|
||||
"python.analysis.typeCheckingMode": "basic",
|
||||
"python.analysis.autoImportCompletions": true,
|
||||
|
||||
28
.vscode/tasks.json
vendored
28
.vscode/tasks.json
vendored
@@ -2,7 +2,7 @@
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "FutureOSS: 安装依赖",
|
||||
"label": "NebulaShell: 安装依赖",
|
||||
"type": "shell",
|
||||
"command": "pip install -r requirements.txt",
|
||||
"group": {
|
||||
@@ -23,7 +23,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 启动开发服务器",
|
||||
"label": "NebulaShell: 启动开发服务器",
|
||||
"type": "shell",
|
||||
"command": "python -m oss.cli serve",
|
||||
"group": "none",
|
||||
@@ -48,7 +48,7 @@
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": ".*启动 FutureOSS 服务.*",
|
||||
"beginsPattern": ".*启动 NebulaShell 服务.*",
|
||||
"endsPattern": ".*服务已启动.*"
|
||||
}
|
||||
}
|
||||
@@ -58,7 +58,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 运行测试",
|
||||
"label": "NebulaShell: 运行测试",
|
||||
"type": "shell",
|
||||
"command": "pytest -v --tb=short",
|
||||
"group": "test",
|
||||
@@ -89,9 +89,9 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 代码检查",
|
||||
"label": "NebulaShell: 代码检查",
|
||||
"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",
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
@@ -122,9 +122,9 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 格式化代码",
|
||||
"label": "NebulaShell: 格式化代码",
|
||||
"type": "shell",
|
||||
"command": "python -m black oss/ store/@{FutureOSS}/",
|
||||
"command": "python -m black oss/ store/@{NebulaShell}/",
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"echo": true,
|
||||
@@ -140,7 +140,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 清理缓存文件",
|
||||
"label": "NebulaShell: 清理缓存文件",
|
||||
"type": "shell",
|
||||
"command": "find . -type f -name '*.pyc' -delete && find . -type d -name '__pycache__' -delete && find . -type f -name '.pid' -delete",
|
||||
"group": "build",
|
||||
@@ -158,7 +158,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 查看服务状态",
|
||||
"label": "NebulaShell: 查看服务状态",
|
||||
"type": "shell",
|
||||
"command": "if [ -f .pid ]; then echo '服务正在运行,PID: ' && cat .pid; else echo '服务未运行'; fi",
|
||||
"group": "none",
|
||||
@@ -176,7 +176,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 停止服务",
|
||||
"label": "NebulaShell: 停止服务",
|
||||
"type": "shell",
|
||||
"command": "if [ -f .pid ]; then kill $(cat .pid) && rm -f .pid && echo '服务已停止'; else echo '服务未运行'; fi",
|
||||
"group": "none",
|
||||
@@ -194,12 +194,12 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "FutureOSS: 重启服务",
|
||||
"label": "NebulaShell: 重启服务",
|
||||
"type": "shell",
|
||||
"dependsOrder": "sequence",
|
||||
"dependsOn": [
|
||||
"FutureOSS: 停止服务",
|
||||
"FutureOSS: 启动开发服务器"
|
||||
"NebulaShell: 停止服务",
|
||||
"NebulaShell: 启动开发服务器"
|
||||
],
|
||||
"group": "none",
|
||||
"presentation": {
|
||||
|
||||
66
AGENTS.md
Normal file
66
AGENTS.md
Normal 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 |
|
||||
@@ -17,7 +17,7 @@ RUN pip install --no-cache-dir --prefix=/install click pyyaml websockets 2>/dev/
|
||||
FROM python:3.12-slim
|
||||
|
||||
LABEL maintainer="Falck <https://gitee.com/starlight-apk>"
|
||||
LABEL description="FutureOSS — 一切皆为插件的开发者工具运行时框架"
|
||||
LABEL description="NebulaShell — 一切皆为插件的开发者工具运行时框架"
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
|
||||
36
README.md
36
README.md
@@ -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">
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
> ### 🌟 **革命性突破 - 彻底告别依赖安装烦恼!**
|
||||
>
|
||||
> 想象一下:只需声明你的插件需要什么,剩下的交给 FutureOSS!
|
||||
> 想象一下:只需声明你的插件需要什么,剩下的交给 NebulaShell!
|
||||
>
|
||||
> | 🚀 核心能力 | 💡 技术亮点 |
|
||||
> |:----------:|:-----------|
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
---
|
||||
|
||||
## 🚀 为什么选择 FutureOSS?
|
||||
## 🚀 为什么选择 NebulaShell?
|
||||
|
||||
<details open>
|
||||
<summary><b>🛡️ 极致安全架构 - 重新定义插件安全边界 (点击展开)</b></summary>
|
||||
@@ -215,7 +215,7 @@
|
||||
%%{init: {'theme': 'base', 'themeVariables': { 'primaryColor': '#667eea', 'edgeLabelBackground':'#fff', 'tertiaryColor': '#e3f2fd'}}}%%
|
||||
graph TB
|
||||
User[👤 用户/客户端] --> Gateway[🛡️ 统一安全网关]
|
||||
Gateway --> Core[⚙️ FutureOSS 微内核]
|
||||
Gateway --> Core[⚙️ NebulaShell 微内核]
|
||||
|
||||
subgraph CoreLayer["🔐 核心插件层 (可信域)"]
|
||||
direction TB
|
||||
@@ -289,7 +289,7 @@ graph TB
|
||||
"author": "Your Name <your@email.com>",
|
||||
"license": "MIT",
|
||||
|
||||
// 🔥 系统依赖声明(FutureOSS 自动安装)
|
||||
// 🔥 系统依赖声明(NebulaShell 自动安装)
|
||||
"system_dependencies": [
|
||||
"nginx",
|
||||
"redis-server",
|
||||
@@ -301,7 +301,7 @@ graph TB
|
||||
// 📦 包管理器选择
|
||||
"package_manager": "apt-get",
|
||||
|
||||
// 🔌 插件依赖(其他 FutureOSS 插件)
|
||||
// 🔌 插件依赖(其他 NebulaShell 插件)
|
||||
"plugin_dependencies": [
|
||||
"security_gateway@>=1.0.0",
|
||||
"firewall@>=1.0.0"
|
||||
@@ -387,13 +387,13 @@ xcode-select --install # 安装 Xcode 命令行工具
|
||||
|
||||
```bash
|
||||
# 📥 克隆仓库
|
||||
git clone https://github.com/Starlight-apk/FutureOSS.git
|
||||
cd futureoss
|
||||
git clone https://github.com/Starlight-apk/NebulaShell.git
|
||||
cd nebulashell
|
||||
|
||||
# 📦 安装 Python 依赖
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 🚀 启动 FutureOSS 核心
|
||||
# 🚀 启动 NebulaShell 核心
|
||||
python main.py
|
||||
|
||||
# 🎉 完成!观察控制台输出
|
||||
@@ -533,8 +533,8 @@ graph LR
|
||||
|
||||
```bash
|
||||
# 1️⃣ Fork 你的专属仓库
|
||||
git clone https://github.com/Starlight-apk/FutureOSS.git
|
||||
cd futureoss
|
||||
git clone https://github.com/Starlight-apk/NebulaShell.git
|
||||
cd nebulashell
|
||||
|
||||
# 2️⃣ 创建虚拟环境
|
||||
python -m venv venv
|
||||
@@ -776,21 +776,21 @@ git push origin feature/your-amazing-feature
|
||||
|
||||
### 如果这个项目帮助到了你,请给我们一个 ⭐ Star!
|
||||
|
||||
[](https://github.com/Starlight-apk/FutureOSS)
|
||||
[](https://github.com/Starlight-apk/FutureOSS/fork)
|
||||
[](https://github.com/Starlight-apk/FutureOSS/watchers)
|
||||
[](https://github.com/Starlight-apk/NebulaShell)
|
||||
[](https://github.com/Starlight-apk/NebulaShell/fork)
|
||||
[](https://github.com/Starlight-apk/NebulaShell/watchers)
|
||||
|
||||
---
|
||||
|
||||
### 👥 致谢所有贡献者
|
||||
|
||||
<a href="https://github.com/Starlight-apk/FutureOSS/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=Starlight-apk/FutureOSS&max=100&columns=10" alt="Contributors"/>
|
||||
<a href="https://github.com/Starlight-apk/NebulaShell/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=Starlight-apk/NebulaShell&max=100&columns=10" alt="Contributors"/>
|
||||
</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** *
|
||||
|
||||
@@ -798,7 +798,7 @@ git push origin feature/your-amazing-feature
|
||||
|
||||
<div align="center">
|
||||
|
||||
[🏠 官网首页](https://futureoss.date)
|
||||
[🏠 官网首页](https://nebulashell.date)
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 🚀 FutureOSS v1.1.0 安全全能发行版 - 发布说明
|
||||
# 🚀 NebulaShell v1.1.0 安全全能发行版 - 发布说明
|
||||
|
||||
## 📅 发布时间
|
||||
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
|
||||
- 社区讨论:Discord / Slack
|
||||
|
||||
---
|
||||
**FutureOSS Team** © 2024 | 安全 · 灵活 · 高效
|
||||
**NebulaShell Team** © 2024 | 安全 · 灵活 · 高效
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
services:
|
||||
futureoss:
|
||||
nebulashell:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: futureoss
|
||||
container_name: nebulashell
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:8080" # HTTP API + 网站
|
||||
@@ -11,10 +11,10 @@ services:
|
||||
- "8082:8082" # HTTP TCP
|
||||
volumes:
|
||||
# 插件热更新(无需重建镜像)
|
||||
- ./store/@{FutureOSS}:/app/store/@{FutureOSS}:ro
|
||||
- ./store/@{NebulaShell}:/app/store/@{NebulaShell}:ro
|
||||
- ./store/@{Falck}:/app/store/@{Falck}:ro
|
||||
# 数据持久化
|
||||
- futureoss-data:/app/data
|
||||
- nebulashell-data:/app/data
|
||||
# 配置可覆盖
|
||||
- ./config.yaml:/app/config.yaml:ro
|
||||
environment:
|
||||
@@ -39,5 +39,5 @@ services:
|
||||
memory: 128M
|
||||
|
||||
volumes:
|
||||
futureoss-data:
|
||||
nebulashell-data:
|
||||
driver: local
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
[console_scripts]
|
||||
oss = oss.cli:main
|
||||
@@ -1,3 +0,0 @@
|
||||
click>=8.0
|
||||
pyyaml>=6.0
|
||||
websockets>=12.0
|
||||
@@ -1 +0,0 @@
|
||||
oss
|
||||
2
main.py
2
main.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""FutureOSS 主入口 - 兼容旧版启动方式
|
||||
"""NebulaShell 主入口 - 兼容旧版启动方式
|
||||
|
||||
此文件用于兼容 README 中描述的 `python main.py` 启动方式。
|
||||
推荐使用 `oss serve` 命令启动。
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
"""Future OSS"""
|
||||
"""NebulaShell"""
|
||||
__version__ = "1.2.0"
|
||||
|
||||
10
oss/cli.py
10
oss/cli.py
@@ -22,7 +22,7 @@ except ImportError:
|
||||
@click.option('--config', '-c', type=str, help='配置文件路径')
|
||||
@click.pass_context
|
||||
def cli(ctx, config):
|
||||
"""Future OSS - 一切皆为插件"""
|
||||
"""NebulaShell - 一切皆为插件"""
|
||||
# 初始化配置
|
||||
ctx.ensure_object(dict)
|
||||
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.pass_context
|
||||
def serve(ctx, host, port, tcp_port):
|
||||
"""启动 Future OSS"""
|
||||
"""启动 NebulaShell"""
|
||||
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)
|
||||
|
||||
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.data_dir.absolute()}")
|
||||
log.info(f"插件仓库:{config.store_dir.absolute()}")
|
||||
@@ -84,7 +84,7 @@ def serve(ctx, host, port, tcp_port):
|
||||
@cli.command()
|
||||
def version():
|
||||
"""显示版本"""
|
||||
click.echo(f"Future OSS {__version__}")
|
||||
click.echo(f"NebulaShell {__version__}")
|
||||
|
||||
|
||||
@cli.command()
|
||||
@@ -94,7 +94,7 @@ def info(ctx):
|
||||
import random
|
||||
|
||||
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"HTTP API 端口:{config.http_api_port}")
|
||||
click.echo(f"HTTP TCP 端口:{config.http_tcp_port}")
|
||||
|
||||
@@ -17,8 +17,8 @@ from typing import Dict, List, Optional, Set, Any
|
||||
|
||||
# 配置验证常量
|
||||
_VALIDATOR_CACHE_FILE = ".validator_cache"
|
||||
# 验证密钥 (hex encoded): FutureOSSAchievement
|
||||
_VALIDATOR_KEY = "4675747572654f5353416368696576656d656e74" # 验证密钥
|
||||
# 验证密钥 (hex encoded): NebulaShellAchievement
|
||||
_VALIDATOR_KEY = "4e6562756c615368656c6c416368696576656d656e74" # 验证密钥
|
||||
|
||||
|
||||
class _ConfigValidator:
|
||||
|
||||
@@ -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()
|
||||
|
||||
def load_core_plugin(self, plugin_name: str, store_dir: Optional[str] = None) -> Optional[dict[str, Any]]:
|
||||
"""加载核心插件(来自 store/@{FutureOSS}/)
|
||||
"""加载核心插件(来自 store/@{NebulaShell}/)
|
||||
|
||||
Args:
|
||||
plugin_name: 插件名称(如 "plugin-loader")
|
||||
@@ -38,7 +38,7 @@ class PluginLoader:
|
||||
"""
|
||||
if store_dir is None:
|
||||
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)
|
||||
|
||||
def _load_plugin(self, plugin_name: str, plugin_dir: Path) -> Optional[dict[str, Any]]:
|
||||
|
||||
@@ -17,7 +17,7 @@ class PluginManager:
|
||||
遵循「最小化核心框架」设计哲学:
|
||||
- 核心框架只负责加载 plugin-loader 插件
|
||||
- 所有其他插件(HTTP、WebSocket、Dashboard 等)都由 plugin-loader 插件扫描和加载
|
||||
- store/@{FutureOSS}/ 是唯一的插件来源
|
||||
- store/@{NebulaShell}/ 是唯一的插件来源
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
@@ -28,7 +28,7 @@ class PluginManager:
|
||||
"""仅加载 plugin-loader 核心插件
|
||||
|
||||
plugin-loader 插件会负责:
|
||||
1. 扫描 store/@{FutureOSS}/ 目录
|
||||
1. 扫描 store/@{NebulaShell}/ 目录
|
||||
2. 加载所有启用的插件
|
||||
3. 处理依赖关系
|
||||
4. 执行 PL 注入机制
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# @FutureOSS/nodejs-adapter
|
||||
# @NebulaShell/nodejs-adapter
|
||||
|
||||
**Pure Node.js Runtime Adapter Service**
|
||||
|
||||
@@ -33,7 +33,7 @@ In your plugin's `manifest.json`:
|
||||
{
|
||||
"name": "@MyOrg/my-web-plugin",
|
||||
"dependencies": {
|
||||
"adapters": ["@FutureOSS/nodejs-adapter"]
|
||||
"adapters": ["@NebulaShell/nodejs-adapter"]
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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.
|
||||
Instead, it exposes standard interfaces for OTHER plugins to execute Node.js/npm commands
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "@FutureOSS/nodejs-adapter",
|
||||
"name": "@NebulaShell/nodejs-adapter",
|
||||
"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.",
|
||||
"author": "FutureOSS Team",
|
||||
"author": "NebulaShell Team",
|
||||
"license": "MIT",
|
||||
"type": "adapter",
|
||||
"main": "main.py",
|
||||
@@ -10,7 +10,7 @@ import shutil
|
||||
import pytest
|
||||
|
||||
# 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)
|
||||
|
||||
# Import after path update
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>FutureOSS v1.1.0 | 控制台</title>
|
||||
<title>NebulaShell v1.1.0 | 控制台</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #ffffff;
|
||||
@@ -146,7 +146,7 @@
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>FutureOSS</h1>
|
||||
<h1>NebulaShell</h1>
|
||||
<p class="subtitle">v1.1.0 安全全能发行版 · 企业级插件化运行时</p>
|
||||
</header>
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
||||
[project]
|
||||
name = "future-oss"
|
||||
version = "1.2.0"
|
||||
description = "Future OSS - 一切皆为插件的开发者工具运行时框架"
|
||||
description = "NebulaShell - 一切皆为插件的开发者工具运行时框架"
|
||||
requires-python = ">=3.10"
|
||||
dependencies = [
|
||||
"click>=8.0",
|
||||
|
||||
12
start.bat
12
start.bat
@@ -1,7 +1,7 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: FutureOSS Smart Startup Script - Windows
|
||||
:: NebulaShell Smart Startup Script - Windows
|
||||
cd /d "%~dp0"
|
||||
|
||||
:: Handle command line parameters
|
||||
@@ -12,7 +12,7 @@ if "%1"=="-v" goto :show_version
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo FutureOSS Startup Script - Windows
|
||||
echo NebulaShell Startup Script - Windows
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
@@ -137,7 +137,7 @@ echo [SUCCESS] Data directories ready
|
||||
:: 6. Start Service
|
||||
echo.
|
||||
echo ========================================
|
||||
echo Starting FutureOSS
|
||||
echo Starting NebulaShell
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
@@ -195,7 +195,7 @@ call :cleanup
|
||||
call .venv\Scripts\deactivate.bat >nul 2>&1
|
||||
echo.
|
||||
echo ========================================
|
||||
echo FutureOSS Stopped
|
||||
echo NebulaShell Stopped
|
||||
echo ========================================
|
||||
pause
|
||||
exit /b 0
|
||||
@@ -276,7 +276,7 @@ exit /b 0
|
||||
:: Show help information
|
||||
:show_help
|
||||
echo.
|
||||
echo FutureOSS Startup Script - Windows Version
|
||||
echo NebulaShell Startup Script - Windows Version
|
||||
echo.
|
||||
echo Usage: start.bat [options]
|
||||
echo.
|
||||
@@ -293,7 +293,7 @@ exit /b 0
|
||||
|
||||
:: Show version information
|
||||
:show_version
|
||||
echo FutureOSS v1.0.0
|
||||
echo NebulaShell v1.0.0
|
||||
echo Developer toolkit based on Python
|
||||
echo.
|
||||
exit /b 0
|
||||
|
||||
12
start.sh
12
start.sh
@@ -1,6 +1,6 @@
|
||||
#!/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)"
|
||||
if pgrep mysqld > /dev/null 2>&1 || pgrep mariadbd > /dev/null 2>&1; then
|
||||
ok "MySQL 服务运行中"
|
||||
mysql -u root -e "CREATE DATABASE IF NOT EXISTS futureoss CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null && \
|
||||
ok "数据库 futureoss 已就绪" || \
|
||||
mysql -u root -e "CREATE DATABASE IF NOT EXISTS nebulashell CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null && \
|
||||
ok "数据库 nebulashell 已就绪" || \
|
||||
warn "无法创建数据库,请检查权限"
|
||||
else
|
||||
warn "MySQL 服务未运行"
|
||||
@@ -341,11 +341,11 @@ fi
|
||||
# ═══════════════════════════════════════════════════════════
|
||||
# 7. 启动服务
|
||||
# ═══════════════════════════════════════════════════════════
|
||||
step "启动 FutureOSS"
|
||||
step "启动 NebulaShell"
|
||||
|
||||
if $DAEMON; then
|
||||
LOG_FILE="logs/futureoss.log"
|
||||
PID_FILE="logs/futureoss.pid"
|
||||
LOG_FILE="logs/nebulashell.log"
|
||||
PID_FILE="logs/nebulashell.pid"
|
||||
|
||||
if [[ -f "$PID_FILE" ]]; then
|
||||
OLD_PID=$(cat "$PID_FILE")
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -108,7 +108,7 @@ print(f"成功安装:{install_result['success_count']}, 失败:{install_resu
|
||||
## 文件结构
|
||||
|
||||
```
|
||||
store/@{FutureOSS}/auto-dependency/
|
||||
store/@{NebulaShell}/auto-dependency/
|
||||
├── manifest.json # 插件清单
|
||||
├── main.py # 主逻辑实现
|
||||
├── PL/
|
||||
@@ -2,7 +2,7 @@
|
||||
"metadata": {
|
||||
"name": "auto-dependency",
|
||||
"version": "1.0.0",
|
||||
"author": "FutureOSS",
|
||||
"author": "NebulaShell",
|
||||
"description": "依赖自动安装插件 - 扫描所有插件的声明文件,检查并安装系统依赖",
|
||||
"type": "core"
|
||||
},
|
||||
@@ -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=",
|
||||
"signer": "FutureOSS",
|
||||
"signer": "NebulaShell",
|
||||
"algorithm": "RSA-SHA256",
|
||||
"timestamp": 1775964953.1082504,
|
||||
"plugin_hash": "8894b78ac59c0154acaeb9a976f80588ece406e55079ca633c3b2bd839098d40",
|
||||
"author": "FutureOSS"
|
||||
"author": "NebulaShell"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user