更改项目名为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",
"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
}

View File

@@ -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
View File

@@ -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
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
LABEL maintainer="Falck <https://gitee.com/starlight-apk>"
LABEL description="FutureOSS — 一切皆为插件的开发者工具运行时框架"
LABEL description="NebulaShell — 一切皆为插件的开发者工具运行时框架"
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">
@@ -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
[![Star on GitHub](https://img.shields.io/github/stars/Starlight-apk/FutureOSS?style=social&logo=github)](https://github.com/Starlight-apk/FutureOSS)
[![Fork on GitHub](https://img.shields.io/github/forks/Starlight-apk/FutureOSS?style=social&logo=github)](https://github.com/Starlight-apk/FutureOSS/fork)
[![Watch on GitHub](https://img.shields.io/github/watchers/Starlight-apk/FutureOSS?style=social&logo=github)](https://github.com/Starlight-apk/FutureOSS/watchers)
[![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/NebulaShell?style=social&logo=github)](https://github.com/Starlight-apk/NebulaShell/fork)
[![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">
<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>

View File

@@ -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 | 安全 · 灵活 · 高效

View File

@@ -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

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
"""FutureOSS 主入口 - 兼容旧版启动方式
"""NebulaShell 主入口 - 兼容旧版启动方式
此文件用于兼容 README 中描述的 `python main.py` 启动方式。
推荐使用 `oss serve` 命令启动。

View File

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

View File

@@ -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}")

View File

@@ -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:

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()
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]]:

View File

@@ -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 注入机制

View File

@@ -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"]
}
}
```

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.
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",
"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",

View File

@@ -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

View File

@@ -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>

View File

@@ -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",

View File

@@ -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

View File

@@ -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")

View File

@@ -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/

View File

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