更改项目名为NebulaShell
This commit is contained in:
42
.vscode/launch.json
vendored
42
.vscode/launch.json
vendored
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@@ -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
28
.vscode/tasks.json
vendored
@@ -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
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
|
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
|
||||||
|
|
||||||
|
|||||||
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">
|
<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!
|
||||||
|
|
||||||
[](https://github.com/Starlight-apk/FutureOSS)
|
[](https://github.com/Starlight-apk/NebulaShell)
|
||||||
[](https://github.com/Starlight-apk/FutureOSS/fork)
|
[](https://github.com/Starlight-apk/NebulaShell/fork)
|
||||||
[](https://github.com/Starlight-apk/FutureOSS/watchers)
|
[](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>
|
||||||
|
|
||||||
|
|||||||
@@ -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 | 安全 · 灵活 · 高效
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
#!/usr/bin/env python3
|
||||||
"""FutureOSS 主入口 - 兼容旧版启动方式
|
"""NebulaShell 主入口 - 兼容旧版启动方式
|
||||||
|
|
||||||
此文件用于兼容 README 中描述的 `python main.py` 启动方式。
|
此文件用于兼容 README 中描述的 `python main.py` 启动方式。
|
||||||
推荐使用 `oss serve` 命令启动。
|
推荐使用 `oss serve` 命令启动。
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
"""Future OSS"""
|
"""NebulaShell"""
|
||||||
__version__ = "1.2.0"
|
__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.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}")
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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]]:
|
||||||
|
|||||||
@@ -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 注入机制
|
||||||
|
|||||||
@@ -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"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -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
|
||||||
@@ -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",
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
12
start.bat
12
start.bat
@@ -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
|
||||||
|
|||||||
12
start.sh
12
start.sh
@@ -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")
|
||||||
|
|||||||
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 # 插件清单
|
├── manifest.json # 插件清单
|
||||||
├── main.py # 主逻辑实现
|
├── main.py # 主逻辑实现
|
||||||
├── PL/
|
├── PL/
|
||||||
@@ -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"
|
||||||
},
|
},
|
||||||
@@ -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
Reference in New Issue
Block a user