docs(folder-memory): add prerequisites section and enhance release workflow with README links
- Add 'Prerequisites' section to folder-memory README files clarifying that conversations must occur inside a folder - Update docs/plugins/filters/folder-memory.md and folder-memory.zh.md with same prerequisites - Enhance extract_plugin_versions.py to auto-generate GitHub README URLs in release notes - Update plugin-development workflow to document README link requirements for publishing
This commit is contained in:
@@ -90,6 +90,9 @@ Reference: `.github/workflows/release.yml`
|
|||||||
- Action: Automatically updates the plugin code and metadata on OpenWebUI.com using `scripts/publish_plugin.py`.
|
- Action: Automatically updates the plugin code and metadata on OpenWebUI.com using `scripts/publish_plugin.py`.
|
||||||
- **Auto-Sync**: If a local plugin has no ID but matches an existing published plugin by **Title**, the script will automatically fetch the ID, update the local file, and proceed with the update.
|
- **Auto-Sync**: If a local plugin has no ID but matches an existing published plugin by **Title**, the script will automatically fetch the ID, update the local file, and proceed with the update.
|
||||||
- Requirement: `OPENWEBUI_API_KEY` secret must be set.
|
- Requirement: `OPENWEBUI_API_KEY` secret must be set.
|
||||||
|
- **README Link**: When announcing a release, always include the GitHub README URL for the plugin:
|
||||||
|
- Format: `https://github.com/Fu-Jie/awesome-openwebui/blob/main/plugins/{type}/{name}/README.md`
|
||||||
|
- Example: `https://github.com/Fu-Jie/awesome-openwebui/blob/main/plugins/filters/folder-memory/README.md`
|
||||||
|
|
||||||
### Pull Request Check
|
### Pull Request Check
|
||||||
- Workflow: `.github/workflows/plugin-version-check.yml`
|
- Workflow: `.github/workflows/plugin-version-check.yml`
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ This ensures that all future conversations within that folder share the same evo
|
|||||||
- **Async Processing**: Runs in the background without blocking the user's chat experience.
|
- **Async Processing**: Runs in the background without blocking the user's chat experience.
|
||||||
- **ORM Integration**: Directly updates folder data using OpenWebUI's internal models for reliability.
|
- **ORM Integration**: Directly updates folder data using OpenWebUI's internal models for reliability.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- **Conversations must occur inside a folder.** This plugin only triggers when a chat belongs to a folder (i.e., you need to create a folder in OpenWebUI and start a conversation within it).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
1. Copy `folder_memory.py` to your OpenWebUI `plugins/filters/` directory (or upload via Admin UI).
|
1. Copy `folder_memory.py` to your OpenWebUI `plugins/filters/` directory (or upload via Admin UI).
|
||||||
|
|||||||
@@ -22,6 +22,10 @@
|
|||||||
- **异步处理**:在后台运行,不阻塞用户的聊天体验。
|
- **异步处理**:在后台运行,不阻塞用户的聊天体验。
|
||||||
- **ORM 集成**:直接使用 OpenWebUI 的内部模型更新文件夹数据,确保可靠性。
|
- **ORM 集成**:直接使用 OpenWebUI 的内部模型更新文件夹数据,确保可靠性。
|
||||||
|
|
||||||
|
## 前置条件
|
||||||
|
|
||||||
|
- **对话必须在文件夹内进行。** 此插件仅在聊天属于某个文件夹时触发(即您需要先在 OpenWebUI 中创建一个文件夹,并在其内部开始对话)。
|
||||||
|
|
||||||
## 安装指南
|
## 安装指南
|
||||||
|
|
||||||
1. 将 `folder_memory.py` (或中文版 `folder_memory_cn.py`) 复制到 OpenWebUI 的 `plugins/filters/` 目录(或通过管理员 UI 上传)。
|
1. 将 `folder_memory.py` (或中文版 `folder_memory_cn.py`) 复制到 OpenWebUI 的 `plugins/filters/` 目录(或通过管理员 UI 上传)。
|
||||||
|
|||||||
@@ -20,6 +20,10 @@
|
|||||||
- **Async Processing**: Runs in the background without blocking the user's chat experience.
|
- **Async Processing**: Runs in the background without blocking the user's chat experience.
|
||||||
- **ORM Integration**: Directly updates folder data using OpenWebUI's internal models for reliability.
|
- **ORM Integration**: Directly updates folder data using OpenWebUI's internal models for reliability.
|
||||||
|
|
||||||
|
## ⚠️ Prerequisites
|
||||||
|
|
||||||
|
- **Conversations must occur inside a folder.** This plugin only triggers when a chat belongs to a folder (i.e., you need to create a folder in OpenWebUI and start a conversation within it).
|
||||||
|
|
||||||
## 📦 Installation
|
## 📦 Installation
|
||||||
|
|
||||||
1. Copy `folder_memory.py` to your OpenWebUI `plugins/filters/` directory (or upload via Admin UI).
|
1. Copy `folder_memory.py` to your OpenWebUI `plugins/filters/` directory (or upload via Admin UI).
|
||||||
|
|||||||
@@ -22,6 +22,10 @@
|
|||||||
- **异步处理**:在后台运行,不阻塞用户的聊天体验。
|
- **异步处理**:在后台运行,不阻塞用户的聊天体验。
|
||||||
- **ORM 集成**:直接使用 OpenWebUI 的内部模型更新文件夹数据,确保可靠性。
|
- **ORM 集成**:直接使用 OpenWebUI 的内部模型更新文件夹数据,确保可靠性。
|
||||||
|
|
||||||
|
## ⚠️ 前置条件
|
||||||
|
|
||||||
|
- **对话必须在文件夹内进行。** 此插件仅在聊天属于某个文件夹时触发(即您需要先在 OpenWebUI 中创建一个文件夹,并在其内部开始对话)。
|
||||||
|
|
||||||
## 📦 安装指南
|
## 📦 安装指南
|
||||||
|
|
||||||
1. 将 `folder_memory.py` (或中文版 `folder_memory_cn.py`) 复制到 OpenWebUI 的 `plugins/filters/` 目录(或通过管理员 UI 上传)。
|
1. 将 `folder_memory.py` (或中文版 `folder_memory_cn.py`) 复制到 OpenWebUI 的 `plugins/filters/` 目录(或通过管理员 UI 上传)。
|
||||||
|
|||||||
@@ -217,6 +217,23 @@ def format_markdown_table(plugins: list[dict]) -> str:
|
|||||||
return "\n".join(lines)
|
return "\n".join(lines)
|
||||||
|
|
||||||
|
|
||||||
|
def _get_readme_url(file_path: str) -> str:
|
||||||
|
"""
|
||||||
|
Generate GitHub README URL from plugin file path.
|
||||||
|
从插件文件路径生成 GitHub README 链接。
|
||||||
|
"""
|
||||||
|
if not file_path:
|
||||||
|
return ""
|
||||||
|
# Extract plugin directory (e.g., plugins/filters/folder-memory/folder_memory.py -> plugins/filters/folder-memory)
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
plugin_dir = Path(file_path).parent
|
||||||
|
# Convert to GitHub URL
|
||||||
|
return (
|
||||||
|
f"https://github.com/Fu-Jie/awesome-openwebui/blob/main/{plugin_dir}/README.md"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def format_release_notes(
|
def format_release_notes(
|
||||||
comparison: dict[str, list], ignore_removed: bool = False
|
comparison: dict[str, list], ignore_removed: bool = False
|
||||||
) -> str:
|
) -> str:
|
||||||
@@ -229,9 +246,12 @@ def format_release_notes(
|
|||||||
if comparison["added"]:
|
if comparison["added"]:
|
||||||
lines.append("### 新增插件 / New Plugins")
|
lines.append("### 新增插件 / New Plugins")
|
||||||
for plugin in comparison["added"]:
|
for plugin in comparison["added"]:
|
||||||
|
readme_url = _get_readme_url(plugin.get("file_path", ""))
|
||||||
lines.append(f"- **{plugin['title']}** v{plugin['version']}")
|
lines.append(f"- **{plugin['title']}** v{plugin['version']}")
|
||||||
if plugin.get("description"):
|
if plugin.get("description"):
|
||||||
lines.append(f" - {plugin['description']}")
|
lines.append(f" - {plugin['description']}")
|
||||||
|
if readme_url:
|
||||||
|
lines.append(f" - 📖 [README / 文档]({readme_url})")
|
||||||
lines.append("")
|
lines.append("")
|
||||||
|
|
||||||
if comparison["updated"]:
|
if comparison["updated"]:
|
||||||
@@ -258,7 +278,10 @@ def format_release_notes(
|
|||||||
)
|
)
|
||||||
prev_ver = prev_manifest.get("version") or prev.get("version")
|
prev_ver = prev_manifest.get("version") or prev.get("version")
|
||||||
|
|
||||||
|
readme_url = _get_readme_url(curr.get("file_path", ""))
|
||||||
lines.append(f"- **{curr_title}**: v{prev_ver} → v{curr_ver}")
|
lines.append(f"- **{curr_title}**: v{prev_ver} → v{curr_ver}")
|
||||||
|
if readme_url:
|
||||||
|
lines.append(f" - 📖 [README / 文档]({readme_url})")
|
||||||
lines.append("")
|
lines.append("")
|
||||||
|
|
||||||
if comparison["removed"] and not ignore_removed:
|
if comparison["removed"] and not ignore_removed:
|
||||||
|
|||||||
Reference in New Issue
Block a user