LIghtJUNction
92bae1fdae
docs: replace prints with logger in upload_doc_images_to_r2.py
2026-03-19 23:30:25 +08:00
LIghtJUNction
14ec513b0d
fix: clean lint suppressions and async route errors
2026-03-18 18:06:42 +08:00
LIghtJUNction
26d6d1b36f
fix: resolve ruff check issues
2026-03-18 17:38:27 +08:00
LIghtJUNction
b53f042a6d
fix(core): ensure parent directories exist before saving skill config and cache; fix async file read in star_manager
2026-03-17 22:33:56 +08:00
ChuwuYo
795aec9578
feat(extension): add filtering and sorting for installed plugins in WebUI ( #5923 )
...
* feat(extension): add PluginSortControl reusable component for sorting
* i18n: add i18n keys for plugin sorting and filtering features
* feat(extension): add sorting and status filtering for installed plugins
Backend changes (plugin.py):
- Add _resolve_plugin_dir method to resolve plugin directory path
- Add _get_plugin_installed_at method to get installation time from file mtime
- Add installed_at field to plugin API response
Frontend changes (InstalledPluginsTab.vue):
- Import PluginSortControl component
- Add status filter toggle (all/enabled/disabled) using v-btn-toggle
- Integrate PluginSortControl for sorting options
- Add toolbar layout with actions and controls sections
Frontend changes (MarketPluginsTab.vue):
- Import PluginSortControl component
- Replace v-select + v-btn combination with unified PluginSortControl
Frontend changes (useExtensionPage.js):
- Add installedStatusFilter, installedSortBy, installedSortOrder refs
- Add installedSortItems and installedSortUsesOrder computed properties
- Add sortInstalledPlugins function with multi-criteria support
- Support sorting by install time, name, author, and update status
- Add status filtering in filteredPlugins computed property
- Disable default table sorting by setting sortable: false
* test: add tests for installed_at field in plugin API
- Assert all plugins have installed_at field in get_plugins response
- Assert installed_at is not null after plugin installation
* fix(extension): add explicit fallbacks for installed plugin sort comparisons
* i18n(extension): rename install time label to last modified
* fix(extension): cache installed_at parsing and validate timestamp format in tests
* test(dashboard): strengthen installed_at coverage for plugin API
2026-03-09 17:12:22 +09:00
エイカク
881b409ebc
feat: improve plugin failure handling and extension list UX ( #5535 )
...
* feat: improve plugin failure handling and extension list UX
* fix: address plugin review comments
* fix: clear stale reload feedback on failed plugin reload
* fix: refine extension i18n and uninstall flow
* fix: refresh extension list after install failure
* feat: add random plugin visibility controls in market
* refactor: extract extension helpers and simplify uninstall flow
* refactor: improve failed plugin diagnostics and uninstall flow
* refactor: streamline extension uninstall flow
* fix: harden failed plugin install tracking and cleanup
* refactor: simplify extension flows and remove unused timed message
* fix: improve failed uninstall idempotency and extension error handling
* refactor: unify extension install-uninstall orchestration
2026-02-28 00:06:47 +08:00
鸦羽
4c09ed3c09
fix(plugin): update plugin directory handling for reserved plugins ( #5369 )
...
* fix(plugin): update plugin directory handling for reserved plugins
* fix(plugin): add warning logs for missing plugin name, object, directory, and changelog
2026-02-23 22:04:47 +08:00
Soulter
9a7a594cb5
feat: add support for plugin astrbot-version and platform requirement checks ( #5235 )
...
* feat: add support for plugin astrbot-version and platform requirement checks
* fix: remove unsupported platform and version constraints from metadata.yaml
* fix: remove restriction on 'v' in astrbot_version specification format
* ruff format
2026-02-20 13:35:45 +08:00
エイカク
9c691b2266
chore: remove Electron desktop pipeline and switch to tauri repo ( #5226 )
...
* ci: remove Electron desktop build from release pipeline
* chore: remove electron desktop and switch to tauri release trigger
* ci: remove desktop workflow dispatch trigger
* refactor: migrate data paths to astrbot_path helpers
* fix: point desktop update prompt to AstrBot-desktop releases
2026-02-19 23:04:18 +09:00
sanyekana
c6289d8f75
feat(core): add plugin error hook for custom error routing ( #5192 )
...
* feat(core): add plugin error hook for custom error routing
* fix(core): align plugin error suppression with event stop state
2026-02-18 21:38:27 +08:00
Waterwzy
0faf109c2a
feat: support hot reload after plugin load failure ( #5043 )
...
* add :Support hot reload after plugin load failure
* Apply suggestions from code review
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
* fix:reformat code
* fix:reformat code
---------
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2026-02-13 18:37:20 +08:00
Soulter
9d93bda3fe
feat: temporary file handling and introduce TempDirCleaner ( #5026 )
...
* feat: temporary file handling and introduce TempDirCleaner
- Updated various modules to use `get_astrbot_temp_path()` instead of `get_astrbot_data_path()` for temporary file storage.
- Renamed temporary files for better identification and organization.
- Introduced `TempDirCleaner` to manage the size of the temporary directory, ensuring it does not exceed a specified limit by deleting the oldest files.
- Added configuration option for maximum temporary directory size in the dashboard.
- Implemented tests for `TempDirCleaner` to verify cleanup functionality and size management.
* ruff
2026-02-12 01:04:48 +08:00
Dt8333
7dd95d8a59
chore: auto ann fix by ruff ( #4903 )
...
* chore: auto fix by ruff
* refactor: 统一修正返回类型注解为 None/bool 以匹配实现
* refactor: 将 _get_next_page 改为异步并移除多余的请求错误抛出
* refactor: 将 get_client 的返回类型改为 object
* style: 为 LarkMessageEvent 的相关方法添加返回类型注解 None
---------
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com >
2026-02-09 00:22:24 +08:00
香草味的纳西妲喵
e42c1b6da8
fix: add error handling to avoid ghost plugins ( #4836 )
...
* fix: add error handling to avoid ghost plugins
Add null checks to filter out incomplete plugin metadata objects that would appear as ghost plugins in the API response.
This fix ensures that plugins with all null key fields (name, author, desc, version, display_name) are not included in the plugin list response, preventing ghost plugins from appearing in the UI.
Issue: #4833
* fix: improve ghost plugin detection logic for better accuracy
---------
Co-authored-by: Soulter <905617992@qq.com >
2026-02-03 20:40:47 +08:00
clown145
9322218880
feat: supports to display plugin CHANGELOG.md ( #4337 )
...
* feat: optimize plugin update changelog feature, refactor to reuse ReadmeDialog and support independent view entry
* fix: distinguish error state from empty state in ReadmeDialog
2026-01-06 12:53:14 +08:00
i0cLiceao
6b73b19e54
fix: support using GitHub Raw content as plugin source ( #3975 )
...
* Update plugin.py
* Update plugin.py
* Update plugin.py
* Update plugin.py
2025-12-14 18:23:29 +08:00
Dt8333
f624971613
chore: fix bunches of type checking errors ( #3213 )
...
* chore(core.utils): 🚨 修正错误Lint
* chore(core.provider): 🚨 修复基类错误Lint
* chore(core.utils): 补全session_get()的重载
* chore(core.provider): 🚨 修正实现错误Lint
* chore(core.platform): 🚨 修正platform基类和webchat的错误Lint
* chore(core.platform): 修正错误实现Lint
* fix(core.provider): 修复循环调用和错误assert
* chore(core.platform): 修复部分实现Lint
* chore(core.provider): 补充Dify.text_chat_stream的参数类型
* chore(core.pipeline): 🚨 修复错误Lint
* fix(core.slack): 补充遗漏导入
* chore(core.utils): 修复错误的session_get声明
* chore(core.platform): 移除Lark adapter import中的wildcard
* chore(core.db): 修复声明和部分逻辑
* chore(core.db): 添加typings,使faiss参数能被正确识别。
* chore(core): 修复声明
* chore(core): 修改声明
* chore: 补充faiss声明
* chore(dashboard): 修改实现,减少报错
* chore(package): 修改部分声明与实现,减少报错
* chore(core): 添加Handler的overload,以去除部分assert同时通过类型检查
* chore(core.pipeline): 修改Pipeline Scheduler的execute,将判断属性改为判断类型,通过静态类型检查
* chore(core.config): 添加类型标注,通过类型检查
* chore(core.message): 为File._download_file添加检查,通过类型检查
* fix: 将断言改为条件判断以实现优雅关闭的容错性
* refactor: 移除 discord 客户端中的 assert,改用 if None 判断并抛出异常
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: DiscordPlatformAdapter 对 self.client.user 为 None 做日志并返回,移除断言
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 增强 Lark 相关空值/异常检查并完善日志输出
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 将断言替换为条件检查并加入日志与错误处理
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* chore: 移除LLM生成的无用注释
* refactor: 使用 File.get_file 替换下载逻辑并移除 assert,提供默认 filename
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: Slack Socket 未初始化抛出运行时异常,图片 URL 判空改为非空判断
* refactor: 将 WeChatPadProAdapter 的断言改为空值判断并添加日志
* refactor: 使用 isinstance 替代断言实现类型判断,便于静态检查
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 去除cast,直接使用字段与字典访问,修正端口解析
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 使用 match-case 重构 ProviderManager 加载并通过类型检查抛出 TypeError
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: group_name_display 时若 group 对象为空则记录错误并返回
* fix: 将 _get_current_persona_id 的 assert 替换成 if guard 并返回 None
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 优化插件目录存在性检查及图片URL非空验证,更新JSON排序配置
* fix: 将 datetime_str 的 assert 替换为显式检查并抛出异常
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除 cast,改为运行时检查并在找不到调度器时跳过
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除 cast,改用 isinstance 检查 FaissVecDB 并警告
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 删除 typing.cast 导入,并在获取文件绝对路径前校验 file_
* refactor: 移除 typing.cast,简化内容安全检查调用
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 将 PlatformMetadata.id 设为必填并在注册时传入 id,移除 cast
* refactor: 移除 cast,改用 HasInitialize 与 isinstance 进行初始化
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 为 ProviderManager.initialize 增加ID类型判断,避免 None 导致 get 失败
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 为 OTTSProvider 与 AzureNativeProvider 引入 _client 与 client 属性改进上下文管理
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 为 Whisper 自托管源添加模型未初始化校验并直接调用 transcribe
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 移除未使用的 cast 导入并简化 platform_name 赋值
* refactor: 引入 cast 并对 id 使用 cast(str, ...) 提升类型安全
* fix: 将 _id_to_sid 返回改为 str,空值返回空串;对 id 与 message_id 使用 cast
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 重构 Discord 处理逻辑:强制 类型转换、优先斜杠指令并优化提及判断
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* fix: 统一对 id 获取执行 cast,并在微信消息解析失败时抛错
* Revert "fix: 去除cast,直接使用字段与字典访问,修正端口解析"
This reverts commit 1cbfdf9d1b .
* fix: 百炼 Rerank 会话关闭时返回空结果;初始化 request.prompt 避免空值拼接
* fix: 统一处理搜索结果链接为字符串,新增 _get_url 助手并适配 Bing/Sogo
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
* refactor: 调整 call_handler 泛型、Discord 通道注解及 FishAudioTTS API 请求类型
* refactor: 使用 col(...) 替代列引用并对结果进行 CursorResult 强转
* chore: ruff format
---------
Co-authored-by: aider (openai/gemini-3-pro-high) <aider@aider.chat >
Co-authored-by: Soulter <905617992@qq.com >
2025-12-09 14:13:47 +08:00
Soulter
03bb278f50
chore: ruff check
2025-12-08 11:00:43 +08:00
Soulter
a5e0974da3
chore: ruff format
2025-12-08 00:36:56 +08:00
vmoranv
f0fb447fbc
feat: custom plugin api source manager ( #3956 )
...
* feat: custom plugin api source manager
* fix: rename plugin source file in a safer way
* chore: turned the way of saving plugin source to backend and refacted some components
* style: clean up whitespace and improve logging message formatting
---------
Co-authored-by: Soulter <905617992@qq.com >
2025-12-08 00:32:50 +08:00
ZouYonghe
8d3ff61e0d
Format plugin route with ruff
2025-11-30 11:56:24 +08:00
ZouYonghe
4c03e82570
Fix plugin update JSON parsing and concurrency handling
2025-11-30 11:50:46 +08:00
ZouYonghe
1dd1623e7d
feat: batch update plugins via new api
2025-11-30 11:11:36 +08:00
Misaka Mikoto
a0690a6afc
feat: support options to delete plugins config and data ( #3280 )
...
* - 为插件管理页面中,删除插件提供一致的二次确认(原本只有卡片视图有二次确认)
- 二次确认时可选删除插件配置和持久化数据
- 添加对应的i18n支持
* ruff
* 移除未使用的
const $confirm = inject('$confirm');
2025-11-04 11:48:48 +08:00
LIghtJUNction
0b7fc29ac4
style: add ruff lint module of isort and pyupgrade, and some ruff check fix ( #3214 )
...
Co-authored-by: Dt8333 <25431943+Dt8333@users.noreply.github.com >
Co-authored-by: Soulter <905617992@qq.com >
2025-11-01 13:26:19 +08:00
Soulter
6dd9bbb516
feat: enhance plugin metadata with display name and logo support
2025-10-26 20:30:54 +08:00
Soulter
d2df4d0cce
Feature: 支持在配置文件配置可用的插件组 ( #2505 )
...
* feat: 增加可用插件集合配置项
* remove: 旧版平台可用性配置
已经基于多配置文件实现。
* feat: 应用配置文件插件可用性配置
* perf: hoist if from if
2025-08-20 15:25:41 +08:00
Soulter
369eab18ab
Refactor: 重构配置文件管理,以支持更灵活的、会话粒度的(基于 umo part)配置文件隔离 ( #2328 )
...
* refactor: 重构配置文件管理,以支持更灵活的、基于 umo part 的配置文件隔离
* Refactor: 重构配置前端页面,新增数个配置项 (#2331 )
* refactor: 重构配置前端页面,新增数个配置项
* feat: 完善多配置文件结构
* perf: 系统配置入口
* fix: normal config item list not display
* fix: 修复 axios 请求中的上下文引用问题
2025-08-13 09:18:49 +08:00
Misaka Mikoto
7a8d65d37d
feat: add plugins local cache and remote file MD5 validation ( #2211 )
...
* 修改openai的嵌入模型默认维度为1024
* 为插件市场添加本地缓存
- 优先使用api获取,获取失败时则使用本地缓存
- 每次获取后会更新本地缓存
- 如果获取结果为空,判定为获取失败,使用本地缓存
- 前端页面添加刷新按钮,用于手动刷新本地缓存
* feat: 增强插件市场缓存机制,支持MD5校验以确保数据有效性
---------
Co-authored-by: Soulter <905617992@qq.com >
2025-08-02 14:03:53 +08:00
Raven95676
0321e00b0d
perf: 移除nh3
2025-07-09 20:32:14 +08:00
鸦羽
af98cb11c5
fix: handle missing nh3 library in plugin.py
2025-05-30 10:35:48 +08:00
Raven95676
537d373e10
fix: Fix potential XSS risk in plugin README content
2025-05-29 22:35:24 +08:00
Soulter
ad51381063
perf: 动态路由注册
2025-05-23 15:18:16 +08:00
anka
46d44e3405
fix: 🧩 在前端实现mcp服务器的搜索
2025-04-30 23:52:55 +08:00
zhx
b62b1f3870
feat: 添加插件能针对不同消息平台开启关闭的功能
...
Squashed:
chore: merge master branch
chore: merge from master branch
chore: rename updateAllPlatformCompatibility to update_all_platform_compatibility for consistency
Reviewed by:
@Raven95676 @Soulter
2025-04-09 17:27:44 +08:00
kterna
062d482917
fix
2025-04-09 08:43:16 +08:00
kterna
68885a4bbc
Update astrbot/dashboard/routes/plugin.py
...
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-04-08 16:30:36 +08:00
kterna
59fbd98db3
1
2025-04-08 14:31:35 +08:00
kterna
45ef5811c8
1
2025-04-08 14:02:59 +08:00
zhx
dec91950bc
feat: 安装完插件后自动弹出插件仓库 README 对话框
2025-04-01 10:04:04 +08:00
Soulter
750b16b6ee
✨ feat: add demo mode
2025-03-27 15:54:23 +08:00
pre-commit-ci[bot]
b669b31451
🎈 auto fixes by pre-commit hooks
2025-03-23 15:07:22 +00:00
冰苷晶
1cb2b62f81
fix: fix error
2025-03-23 23:02:34 +08:00
冰苷晶
d10cb84068
fix: fix SSLCertVerificationError
2025-03-23 22:55:07 +08:00
Soulter
a5ffb0f8dc
perf: 安装/更新插件后直接热重载而不重启;更新 plugin 指令
2025-03-08 00:20:48 +08:00
Soulter
49bba9bf98
style: format codes
2025-03-03 13:30:55 +08:00
Soulter
53d1398d30
fix: 修复子指令组不能被调用的问题
2025-02-19 15:53:01 +08:00
Soulter
4678222e9b
👌 refactor: 更换为预编译指令的方式处理指令组指令
2025-02-19 14:55:14 +08:00
Soulter
0481e1d45e
fix(core): github mirror not applied successfully
2025-02-11 01:10:17 +08:00
Soulter
ba45a2d270
feat: 支持设置GitHub反向代理地址
2025-02-09 18:51:53 +08:00