feat(batch-install-plugins): initial release v1.0.0

Add Batch Install Plugins from GitHub tool with:
- One-click installation of plugins from GitHub repositories
- Smart plugin discovery with metadata extraction and validation
- Confirmation dialog with plugin list preview
- Selective installation with keyword-based filtering
- Smart fallback: auto-retry with localhost:8080 on connection failure
- Enhanced debugging with frontend and backend logging
- 120-second confirmation timeout for user convenience
- Async httpx client for non-blocking I/O
- Complete i18n support across 11 languages
- Event emitter handling with fallback support
- Timeout guards on frontend JavaScript execution
- Filtered list consistency for confirmation and installation
- Auto-exclusion of tool itself from batch operations
- 6 regression tests with 100% pass rate

Documentation includes:
- English and Chinese READMEs with flow diagrams
- Popular repository examples (iChristGit, Haervwe, Classic298, suurt8ll)
- Mirrored docs for official documentation site
- Plugin index entries in both languages
- Comprehensive release notes (v1.0.0.md and v1.0.0_CN.md)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
fujie
2026-03-15 17:45:42 +08:00
parent 8f8147828b
commit cea31fed38
10 changed files with 2252 additions and 0 deletions

View File

@@ -0,0 +1,137 @@
# Batch Install Plugins from GitHub
**Author:** [Fu-Jie](https://github.com/Fu-Jie) | **Version:** 1.0.0 | **Project:** [OpenWebUI Extensions](https://github.com/Fu-Jie/openwebui-extensions)
One-click batch install plugins from GitHub repositories to your OpenWebUI instance.
## Key Features
- **One-Click Install**: Install all plugins with a single command
- **Auto-Update**: Automatically updates previously installed plugins
- **GitHub Support**: Install plugins from any GitHub repository
- **Multi-Type Support**: Supports Pipe, Action, Filter, and Tool plugins
- **Confirmation**: Shows plugin list before installing, allows selective installation
- **i18n**: Supports 11 languages
## Flow
```
User Input
┌─────────────────────────────────────┐
│ Discover Plugins from GitHub │
│ (fetch file tree + parse .py) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Filter by Type & Keywords │
│ (tool/filter/pipe/action) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ Show Confirmation Dialog │
│ (list plugins + exclude hint) │
└─────────────────────────────────────┘
├── [Cancel] → End
┌─────────────────────────────────────┐
│ Install to OpenWebUI │
│ (update or create each plugin) │
└─────────────────────────────────────┘
Done
```
## How to Use
1. Open OpenWebUI and go to **Workspace > Tools**
2. Install **Batch Install Plugins from GitHub** from the official marketplace
3. Enable this tool for your model/chat
4. Ask the model to install plugins
## Usage Examples
```
"Install all plugins"
"Install all plugins from github.com/username/repo"
"Install only pipe plugins"
"Install action and filter plugins"
"Install all plugins, exclude_keywords=copilot"
```
## Popular Plugin Repositories
Here are some popular repositories with many plugins you can install:
### Community Collections
```
# Install all plugins from iChristGit's collection
"Install all plugins from iChristGit/OpenWebui-Tools"
# Install all tools from Haervwe's tools collection
"Install all plugins from Haervwe/open-webui-tools"
# Install all plugins from Classic298's repository
"Install all plugins from Classic298/open-webui-plugins"
# Install all functions from suurt8ll's collection
"Install all plugins from suurt8ll/open_webui_functions"
# Install only specific types (e.g., only tools)
"Install only tool plugins from iChristGit/OpenWebui-Tools"
# Exclude certain keywords while installing
"Install all plugins from Haervwe/open-webui-tools, exclude_keywords=test,deprecated"
```
### Supported Repositories
- `Fu-Jie/openwebui-extensions` - Default, official plugin collection
- `iChristGit/OpenWebui-Tools` - Comprehensive tool and plugin collection
- `Haervwe/open-webui-tools` - Specialized tools and utilities
- `Classic298/open-webui-plugins` - Various plugin implementations
- `suurt8ll/open_webui_functions` - Function-based plugins
## Default Repository
When no repository is specified, defaults to `Fu-Jie/openwebui-extensions`.
## Plugin Detection Rules
### Fu-Jie/openwebui-extensions (Strict)
For the default repository, plugins must have:
1. A `.py` file containing `class Tools:`, `class Filter:`, `class Pipe:`, or `class Action:`
2. A docstring with `title:`, `description:`, and **`openwebui_id:`** fields
3. Filename must not end with `_cn`
### Other GitHub Repositories
For other repositories:
1. A `.py` file containing `class Tools:`, `class Filter:`, `class Pipe:`, or `class Action:`
2. A docstring with `title:` and `description:` fields
## Configuration (Valves)
| Parameter | Default | Description |
| --- | --- | --- |
| `SKIP_KEYWORDS` | `test,verify,example,template,mock` | Comma-separated keywords to skip |
| `TIMEOUT` | `20` | Request timeout in seconds |
## Confirmation Timeout
User confirmation dialogs have a default timeout of **2 minutes (120 seconds)**, allowing sufficient time for users to:
- Read and review the plugin list
- Make installation decisions
- Handle network delays
## Support
If this plugin has been useful, a star on [OpenWebUI Extensions](https://github.com/Fu-Jie/openwebui-extensions) is a big motivation for me. Thank you for the support.

View File

@@ -0,0 +1,137 @@
# Batch Install Plugins from GitHub
**作者:** [Fu-Jie](https://github.com/Fu-Jie) | **版本:** 1.0.0 | **项目:** [OpenWebUI Extensions](https://github.com/Fu-Jie/openwebui-extensions)
一键将 GitHub 仓库中的插件批量安装到你的 OpenWebUI 实例。
## 主要功能
- 一键安装:单个命令安装所有插件
- 自动更新:自动更新之前安装过的插件
- GitHub 支持:从任意 GitHub 仓库安装插件
- 多类型支持:支持 Pipe、Action、Filter 和 Tool 插件
- 安装确认:安装前显示插件列表,支持选择性安装
- 国际化:支持 11 种语言
## 流程
```
用户输入
┌─────────────────────────────────────┐
│ 从 GitHub 发现插件 │
│ (获取文件树 + 解析 .py 文件) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 按类型和关键词过滤 │
│ (tool/filter/pipe/action) │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│ 显示确认对话框 │
│ (插件列表 + 排除提示) │
└─────────────────────────────────────┘
├── [取消] → 结束
┌─────────────────────────────────────┐
│ 安装到 OpenWebUI │
│ (更新或创建每个插件) │
└─────────────────────────────────────┘
完成
```
## 使用方法
1. 打开 OpenWebUI进入 **Workspace > Tools**
2. 从官方市场安装 **Batch Install Plugins from GitHub**
3. 为你的模型/对话启用此工具
4. 让模型调用工具方法
## 使用示例
```
"安装所有插件"
"从 github.com/username/repo 安装所有插件"
"只安装 pipe 插件"
"安装 action 和 filter 插件"
"安装所有插件, exclude_keywords=copilot"
```
## 热门插件仓库
这些是包含大量插件的热门仓库,你可以从中安装插件:
### 社区合集
```
# 从 iChristGit 的集合安装所有插件
"从 iChristGit/OpenWebui-Tools 安装所有插件"
# 从 Haervwe 的工具集合只安装工具
"从 Haervwe/open-webui-tools 安装所有插件"
# 从 Classic298 的仓库安装所有插件
"从 Classic298/open-webui-plugins 安装所有插件"
# 从 suurt8ll 的集合安装所有函数
"从 suurt8ll/open_webui_functions 安装所有插件"
# 只安装特定类型的插件(比如只安装工具)
"从 iChristGit/OpenWebui-Tools 只安装 tool 插件"
# 安装时排除特定关键词
"从 Haervwe/open-webui-tools 安装所有插件, exclude_keywords=test,deprecated"
```
### 支持的仓库
- `Fu-Jie/openwebui-extensions` - 默认的官方插件集合
- `iChristGit/OpenWebui-Tools` - 全面的工具和插件集合
- `Haervwe/open-webui-tools` - 专业的工具和实用程序
- `Classic298/open-webui-plugins` - 各种插件实现
- `suurt8ll/open_webui_functions` - 基于函数的插件
## 默认仓库
未指定仓库时,默认为 `Fu-Jie/openwebui-extensions`
## 插件检测规则
### Fu-Jie/openwebui-extensions严格模式
默认仓库的插件必须满足:
1. 包含 `class Tools:``class Filter:``class Pipe:``class Action:``.py` 文件
2. Docstring 中包含 `title:``description:`**`openwebui_id:`** 字段
3. 文件名不能以 `_cn` 结尾
### 其他 GitHub 仓库
其他仓库的插件必须满足:
1. 包含 `class Tools:``class Filter:``class Pipe:``class Action:``.py` 文件
2. Docstring 中包含 `title:``description:` 字段
## 配置Valves
| 参数 | 默认值 | 描述 |
| --- | --- | --- |
| `SKIP_KEYWORDS` | `test,verify,example,template,mock` | 逗号分隔的跳过关键词 |
| `TIMEOUT` | `20` | 请求超时时间(秒)|
## 确认超时时间
用户确认对话框的默认超时时间为 **2 分钟120 秒)**,为用户提供充足的时间来:
- 阅读和查看插件列表
- 做出安装决定
- 处理网络延迟
## 支持
如果这个插件对你有帮助,欢迎到 [OpenWebUI Extensions](https://github.com/Fu-Jie/openwebui-extensions) 点个 Star这将是我持续改进的动力感谢支持。

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,67 @@
[![](https://img.shields.io/badge/OpenWebUI%20Community-Get%20Plugin-blue?style=for-the-badge)](https://openwebui.com/t/fujie/batch_install_plugins)
## Overview
Batch Install Plugins from GitHub is a new tool for OpenWebUI that enables one-click installation of multiple plugins directly from GitHub repositories. This initial release includes comprehensive features for discovering, filtering, and installing plugins with user confirmation, extensive multi-language support, and robust debugging capabilities for container deployments.
**[📖 README](https://github.com/Fu-Jie/openwebui-extensions/blob/main/plugins/tools/batch-install-plugins/README.md)**
## Features
- **One-Click Installation**: Install all plugins from a repository with a single command
- **Smart Plugin Discovery**: Parse Python files to extract metadata and validate plugins automatically
- **Multi-Type Support**: Support Pipe, Action, Filter, and Tool plugins in a single operation
- **Confirmation Dialog**: Display plugin list before installation for user review and approval
- **Selective Installation**: Exclude specific plugins using keyword-based filtering
- **Smart Fallback**: Container deployments auto-retry with localhost:8080 if primary connection fails
- **Enhanced Debugging**: Rich frontend JavaScript and backend Python logs for troubleshooting
- **Extended Timeout**: 120-second confirmation window for thoughtful decision-making
- **Async Architecture**: Non-blocking I/O operations for better performance
- **Full Internationalization**: Complete support for 11 languages with proper fallback maps
- **Auto-Update**: Automatically updates previously installed plugins
- **Self-Exclusion**: Automatically excludes the tool itself from batch operations
## Technical Highlights
- **httpx Integration**: Modern async HTTP client for reliable, non-blocking requests
- **Event Emitter Support**: Proper handling of OpenWebUI event injection with fallbacks
- **Timeout Protection**: Wrapped frontend execution with timeout guards to prevent hanging
- **Filtered List Consistency**: Uses single source of truth for confirmation and installation
- **Error Localization**: All error messages are user-facing and properly localized across languages
- **Deployment Resilience**: Intelligent base URL resolution handles domain, localhost, and containerized environments
## Supported Repositories
- **Default**: Fu-Jie/openwebui-extensions (strict validation)
- **Custom**: Any GitHub repository with Python plugin files
## Testing
Comprehensive regression tests included:
- Filtered installation list consistency
- Missing event emitter handling
- Confirmation timeout verification
- Full failure scenarios
- Localization completeness
- Connection error debug logging and smart fallback
All 6 tests pass successfully.
## Documentation
- English README with flow diagrams and usage examples
- Chinese README (README_CN.md) with complete translations
- Mirrored documentation for official docs site
- Plugin index entries in both English and Chinese
## Compatibility
- OpenWebUI: 0.2.x - 0.8.x
- Python: 3.9+
- Dependencies: httpx (async HTTP client), pydantic (type validation)
## Release Notes
- This initial v1.0.0 release includes complete plugin infrastructure with smart deployment handling.
- The plugin is designed to handle diverse deployment scenarios (domain, localhost, containerized) with minimal configuration.

View File

@@ -0,0 +1,67 @@
[![](https://img.shields.io/badge/OpenWebUI%20Community-Get%20Plugin-blue?style=for-the-badge)](https://openwebui.com/t/fujie/batch_install_plugins)
## 概述
从 GitHub 批量安装插件是一款全新的 OpenWebUI 工具,支持直接从 GitHub 仓库一键安装多个插件。此首个发布版本包含了全面的插件发现、过滤和安装功能,支持用户确认流程、广泛的多语言支持,以及针对容器部署的健壮调试能力。
**[📖 README](https://github.com/Fu-Jie/openwebui-extensions/blob/main/plugins/tools/batch-install-plugins/README_CN.md)**
## 主要功能
- **一键安装**:通过单个命令安装仓库中的所有插件
- **智能插件发现**:解析 Python 文件提取元数据并自动验证插件
- **多类型支持**:在单个操作中支持 Pipe、Action、Filter 和 Tool 插件
- **确认对话框**:安装前显示插件列表供用户审查和批准
- **选择性安装**:通过基于关键词的过滤排除特定插件
- **智能降级**:容器环境中主 URL 连接失败时自动重试 localhost:8080
- **增强调试**:前端 JavaScript 和后端 Python 富日志输出,便于排查问题
- **延长超时**120 秒确认窗口,给用户充分的思考时间
- **异步架构**:非阻塞 I/O 操作,性能更优
- **完整国际化**:支持 11 种语言,包含适当的回退机制
- **自动更新**:自动更新之前安装过的插件
- **自排除机制**:自动排除工具自身,避免在批量操作中重复安装
## 技术亮点
- **httpx 集成**:现代化的异步 HTTP 客户端,请求更可靠且非阻塞
- **事件注入支持**:正确处理 OpenWebUI 事件注入,提供回退支持
- **超时保护**:前端执行周围包装了超时保护,防止进程挂起
- **过滤列表一致性**:确认和安装使用同一份过滤列表
- **错误本地化**:所有错误消息都是面向用户的,已正确本地化到各语言
- **部署弹性**:智能 Base URL 解析处理域名、localhost 和容器化环境
## 支持的仓库
- **默认**Fu-Jie/openwebui-extensions严格验证
- **自定义**:任意 GitHub 仓库中的 Python 插件文件
## 测试覆盖
包含全面的回归测试:
- 过滤安装列表一致性
- 缺少事件注入器时的处理
- 确认超时验证
- 完全失败场景
- 本地化完整性
- 连接错误调试日志和智能降级
所有 6 个测试均通过。
## 文档
- 英文 README包含流程图和使用示例
- 中文 README (README_CN.md),完整翻译
- 官方文档站点的镜像文档
- 英文和中文的插件索引条目
## 兼容性
- OpenWebUI0.2.x - 0.8.x
- Python3.9+
- 依赖httpx异步 HTTP 客户端、pydantic类型验证
## 发布说明
- 本首发 v1.0.0 版本包含完整的插件基础设施和智能部署处理能力。
- 该插件设计用于处理多种部署场景域名、localhost、容器化配置最少。