LIghtJUNction
1f5accc82a
chore: sync master into dev
2026-07-16 18:18:20 +08:00
LIghtJUNction
5535f0c932
Merge branch 'master' into dev
...
# Conflicts:
# AGENTS.md
# astrbot/__init__.py
# astrbot/cli/utils/__init__.py
# astrbot/core/astr_agent_tool_exec.py
# astrbot/core/computer/booters/local.py
# astrbot/core/cron/manager.py
# astrbot/core/knowledge_base/kb_mgr.py
# astrbot/core/knowledge_base/retrieval/manager.py
# astrbot/core/platform/sources/discord/discord_platform_adapter.py
# astrbot/core/platform/sources/qqofficial/qqofficial_message_event.py
# astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py
# astrbot/core/platform/sources/qqofficial_webhook/qo_webhook_server.py
# astrbot/core/platform/sources/wecom/wecom_adapter.py
# astrbot/core/platform/sources/wecom_ai_bot/wecomai_adapter.py
# astrbot/core/provider/func_tool_manager.py
# astrbot/core/provider/sources/mimo_api_common.py
# astrbot/core/star/star_manager.py
# astrbot/core/tools/computer_tools/fs.py
# astrbot/core/tools/computer_tools/python.py
# astrbot/core/tools/computer_tools/shell.py
# astrbot/core/tools/message_tools.py
# astrbot/core/tools/web_search_tools.py
# astrbot/core/utils/io.py
# astrbot/core/utils/tencent_record_helper.py
# dashboard/package.json
# dashboard/src/assets/mdi-subset/materialdesignicons-subset.css
# dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff
# dashboard/src/assets/mdi-subset/materialdesignicons-webfont-subset.woff2
# dashboard/src/components/ConfirmDialog.vue
# dashboard/src/components/chat/Chat.vue
# dashboard/src/components/chat/ChatInput.vue
# dashboard/src/components/chat/ChatMessageList.vue
# dashboard/src/components/chat/ConfigSelector.vue
# dashboard/src/components/chat/MessageList.vue
# dashboard/src/components/chat/ProjectDialog.vue
# dashboard/src/components/chat/ProjectList.vue
# dashboard/src/components/chat/ProjectView.vue
# dashboard/src/components/chat/ProviderModelMenu.vue
# dashboard/src/components/chat/RegenerateMenu.vue
# dashboard/src/components/chat/StandaloneChat.vue
# dashboard/src/components/chat/ThreadPanel.vue
# dashboard/src/components/chat/ThreadedMarkdownMessagePart.vue
# dashboard/src/components/chat/message_list_comps/MarkdownMessagePart.vue
# dashboard/src/components/chat/message_list_comps/ReasoningTimeline.vue
# dashboard/src/components/chat/message_list_comps/RefsSidebar.vue
# dashboard/src/components/config/UnsavedChangesConfirmDialog.vue
# dashboard/src/components/extension/MarketPluginCard.vue
# dashboard/src/components/extension/McpServersSection.vue
# dashboard/src/components/extension/SkillsSection.vue
# dashboard/src/components/extension/componentPanel/components/DetailsDialog.vue
# dashboard/src/components/extension/componentPanel/components/RenameDialog.vue
# dashboard/src/components/folder/BaseCreateFolderDialog.vue
# dashboard/src/components/folder/BaseFolderItemSelector.vue
# dashboard/src/components/folder/BaseMoveToFolderDialog.vue
# dashboard/src/components/platform/AddNewPlatform.vue
# dashboard/src/components/provider/AddNewProvider.vue
# dashboard/src/components/provider/ProviderModelsPanel.vue
# dashboard/src/components/shared/BackupDialog.vue
# dashboard/src/components/shared/ChangelogDialog.vue
# dashboard/src/components/shared/ExtensionCard.vue
# dashboard/src/components/shared/FileConfigItem.vue
# dashboard/src/components/shared/KnowledgeBaseSelector.vue
# dashboard/src/components/shared/ListConfigItem.vue
# dashboard/src/components/shared/ObjectEditor.vue
# dashboard/src/components/shared/PersonaForm.vue
# dashboard/src/components/shared/PluginSetSelector.vue
# dashboard/src/components/shared/ProviderSelector.vue
# dashboard/src/components/shared/ReadmeDialog.vue
# dashboard/src/components/shared/SidebarCustomizer.vue
# dashboard/src/components/shared/T2ITemplateEditor.vue
# dashboard/src/components/shared/UninstallConfirmDialog.vue
# dashboard/src/components/shared/WaitingForRestart.vue
# dashboard/src/composables/useMessages.ts
# dashboard/src/composables/useProjects.ts
# dashboard/src/composables/useProviderModelConfigDialog.ts
# dashboard/src/composables/useProviderSources.ts
# dashboard/src/i18n/locales/ru-RU/features/config-metadata.json
# dashboard/src/i18n/locales/ru-RU/features/extension.json
# dashboard/src/i18n/locales/ru-RU/features/provider.json
# dashboard/src/layouts/full/vertical-header/VerticalHeader.vue
# dashboard/src/scss/_override.scss
# dashboard/src/stores/common.js
# dashboard/src/stores/customizer.ts
# dashboard/src/views/ConfigPage.vue
# dashboard/src/views/ConversationPage.vue
# dashboard/src/views/PlatformPage.vue
# dashboard/src/views/SessionManagementPage.vue
# dashboard/src/views/WelcomePage.vue
# dashboard/src/views/alkaid/KnowledgeBase.vue
# dashboard/src/views/alkaid/LongTermMemory.vue
# dashboard/src/views/authentication/auth/LoginPage.vue
# dashboard/src/views/extension/InstalledPluginsTab.vue
# dashboard/src/views/extension/useExtensionPage.js
# dashboard/src/views/knowledge-base/DocumentDetail.vue
# dashboard/src/views/knowledge-base/KBList.vue
# dashboard/src/views/knowledge-base/components/DocumentsTab.vue
# dashboard/src/views/knowledge-base/components/SettingsTab.vue
# dashboard/src/views/knowledge-base/components/TavilyKeyDialog.vue
# dashboard/src/views/persona/FolderTree.vue
# dashboard/src/views/persona/MoveToFolderDialog.vue
# dashboard/src/views/persona/PersonaManager.vue
# requirements.txt
# tests/test_local_shell_component.py
# tests/unit/test_func_tool_manager.py
# tests/unit/test_web_search_tools.py
2026-07-16 17:39:40 +08:00
w33d
d0e5e68c55
fix: handle max_tokens for NVIDIA MiniMax M3 ( #9209 )
2026-07-12 16:20:48 +08:00
F. Abyssalis
d4fa9d3d5d
fix: align OpenAI tool message sanitizer ( #8350 )
...
Co-authored-by: Soulter <905617992@qq.com >
2026-06-27 16:27:32 +08:00
LIghtJUNction
5d22db51ad
fix: resolve merge conflicts and complete dashboard API migration
2026-06-26 09:50:15 +08:00
Weilong Liao
dd36979eca
feat: implement request retry mechanism for provider requests ( #8893 )
...
* feat: implement request retry mechanism for provider requests
* feat: add request max retries configuration and implement retry logic for provider requests
* feat: update fake_query function to accept request_max_retries parameter
* feat: remove retry_rate_limits from provider request calls
2026-06-19 17:13:40 +08:00
Weilong Liao
7c366a708b
fix: unify media reference handling ( #8764 )
...
* fix: unify media reference handling
* fix: accept bare base64 record media refs
* chore: update agents.md
* fix: unify file URI handling across media components and utilities
* fix: unify media reference type handling with MediaRefStr alias
* Potential fix for pull request finding 'CodeQL / Incomplete URL substring sanitization'
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
* Update astrbot/core/platform/sources/discord/discord_platform_adapter.py
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
* fix: unify media handling and improve base64 decoding across components
* fix: simplify client_kwargs type definition and enhance media message handling in platform adapter
* fix: unify media utility documentation and enhance function descriptions
* perf: drop "pilk" requirement, improve audio outbound for tencent-related IM apps which using silk
* fix: unify Tencent Silk audio handling and enhance media resolver functionality
---
- Centralize media reference materialization and base64 resolution for local paths, http(s), base64://, data URIs, and legacy bare base64 payloads.
- Normalize incoming Record audio to wav and Image media to temporary jpg during preprocess, with event-scoped cleanup.
- Reuse the shared media resolver across OpenAI, Gemini, Anthropic, MiMo, DeerFlow, STT, and platform media paths while sanitizing logs and cleaning temporary conversion outputs.
- Ensure generated TTS audio is tracked for cleanup after the event finishes.
fix #8676
fix #8543
fix #7588
fix #7580
fix #8030
fix #8034
fix #7461
fix #7565
fix #6509
fix #7144
fix #7795
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-06-14 10:37:16 +08:00
copilot-swe-agent[bot]
480c078c3e
Merge master into dev to resolve conflicts
2026-05-30 15:21:49 +00:00
NayukiChiba
bd597859f3
fix(provider): 修复 base64:// 图片引用的 MIME 类型声明不准确问题 ( #8177 )
...
- 新增 `_detect_image_format` 方法,使用 Pillow verify() 检测图片真实格式,避免完整解码像素带来的额外开销
- 新增 `_base64_image_ref_to_data_url` 方法,将 base64:// 引用转换为携带真实 MIME 类型的 data URL,修复 PNG/GIF/WebP 等图片被错误声明为 image/jpeg 的问题
- 提取 `_IMAGE_FORMAT_MIME_TYPES` 类常量和 `_image_format_to_mime_type` 方法,统一本地文件与 base64:// 引用的格式映射逻辑,新增 TIFF/AVIF 格式支持
- 新增单元测试 `test_resolve_image_part_preserves_base64_png_mime_type`,覆盖 PNG 图片 MIME 类型正确声明的场景
Closes #8174
2026-05-30 17:26:36 +08:00
LIghtJUNction
d373a24320
merge: sync origin/master into dev
...
Resolved 76 file conflicts across backend, frontend, and tests:
- Core backend: agent, platform, provider, star, tools, cron, KB, utils
- Dashboard backend: auth, config, plugin routes, server, runtime bootstrap
- Frontend components: shared, extension, provider components
- Frontend views: console, trace, cron, extension, platform, provider, etc.
- Frontend infrastructure: layouts, router, stores, main.ts
- Assets: MDI font subset (css, woff, woff2)
- Tests: fixtures, plugin manager, anthropic provider, dashboard tests
Strategy per file:
- Most backend: merged master improvements (metrics, http_client -> default_headers,
download_url params, plugin i18n, runtime guards, auth middleware)
- Frontend views: adopted master dashboard-shell layout (v-container, is-dark theme)
- InstalledPluginsTab: kept dev pinned-plugins feature (drag-sort, pin/unpin)
- Binary assets: resolved via git checkout
- Tests: merged both branches' assertions and mock updates
2026-05-08 11:04:03 +08:00
bugkeep
938c241799
fix: align OpenAI http_client with SDK httpx ( #7773 )
...
* fix: align OpenAI http_client with SDK httpx
* fix: narrow openai httpx import fallback
2026-04-30 10:53:34 +08:00
LIghtJUNction
3d7dff64b2
test: final coverage batch - utils, pipeline, agent, star tests
...
- 22 unit test files added/modified across all core modules
- Fix jsonschema ValidationError import in test_tool
- Coverage increased from 23% to ~35% overall
2026-04-29 08:49:01 +08:00
LIghtJUNction
9f999e401d
test: add test for None think content edge case in openai_source
2026-04-29 07:12:39 +08:00
LIghtJUNction
0208dbb15f
Merge branch 'master' of https://github.com/AstrBotDevs/AstrBot into dev
...
# Conflicts:
# dashboard/vite.config.ts
2026-04-29 02:16:18 +08:00
Yufeng He
55c1558686
fix(openai): apply empty-assistant filter to streaming path ( fixes #7721 ) ( #7758 )
...
PR #7202 added empty-assistant filtering in `_query` so strict
providers (Moonshot, etc.) wouldn't 400 on history with blank
assistant entries. The streaming sibling `_query_stream` was
never updated, so DeepSeek Reasoner — which returns reasoning only
during tool calls, leaving serialized content as `""` — blew up with
`Invalid assistant message: content or tool_calls must be set` on
the next turn.
Hoisted the filter into a `_sanitize_assistant_messages` helper and
called it from both paths. Also widened the empty check to cover
`content == []`, which the original filter missed and which shows up
with providers that emit content as a list of parts.
2026-04-26 13:10:47 +08:00
LIghtJUNction
b802edeeb1
Merge dev and fix conflicts
2026-04-06 16:39:58 +08:00
Soulter
dc9c17c195
feat: support token usage extraction for llama.cpp ( #7358 )
...
* feat: support token usage extraction for llama.cpp
* chore: ruff format
2026-04-04 23:49:18 +08:00
LIghtJUNction
005b836fea
Merge remote-tracking branch 'origin/master' into dev
...
# Conflicts:
# astrbot/core/knowledge_base/kb_helper.py
# astrbot/core/knowledge_base/kb_mgr.py
# dashboard/src/components/extension/PinnedPluginItem.vue
# dashboard/src/components/provider/ProviderModelsPanel.vue
# dashboard/src/components/provider/ProviderSourcesPanel.vue
# dashboard/src/components/shared/ConsoleDisplayer.vue
# dashboard/src/main.ts
# dashboard/src/stores/auth.ts
# dashboard/src/views/ConversationPage.vue
# dashboard/src/views/ProviderPage.vue
# dashboard/src/views/authentication/auth/LoginPage.vue
# dashboard/src/views/knowledge-base/KBList.vue
# requirements.txt
2026-04-02 21:37:21 +08:00
kaixinyujue
0ecddb4c06
修复:过滤空助手消息,以防止在严格API上出现400错误(fix: filter empty assistant messages to prevent 400 error on strict APIs) ( #7202 )
...
* fix: filter empty assistant messages to prevent 400 error on strict APIs
Some OpenAI-compatible APIs (e.g., Moonshot) reject requests with
empty content in assistant messages when no tool_calls are present.
This fix cleans up the messages payload before sending to avoid
'message at position X must not be empty' errors.
Closes related issue with fallback provider behavior.
* test(openai): add tests for empty assistant message filtering
* refactor(openai): simplify empty assistant message filtering logic
* style: format code
---------
Co-authored-by: RC-CHN <1051989940@qq.com >
2026-04-02 09:10:06 +08:00
LIghtJUNction
efa999c221
merge: origin/master into dev
...
Resolve merge conflicts:
- Version logic: keep dev (dynamic version from package metadata)
- Backend: merge EmptyModelOutputError retry logic from master
- Frontend: keep dev design, accept master functional enhancements
- SSL/config: keep dev inline implementation
2026-03-30 17:07:57 +08:00
Soulter
551c956107
feat: implement EmptyModelOutputError for handling empty responses across providers and enhance retry logic in ToolLoopAgentRunner ( #7104 )
...
closes : #7044
2026-03-29 00:03:05 +08:00
LIghtJUNction
bc01532e59
fix(provider): filter abort_signal from payloads to avoid JSON serialize error
...
`abort_signal` (asyncio.Event) is passed via **kwargs into payloads during
tool_call streaming, causing "Object of type Event is not JSON serializable"
when the OpenAI client tries to serialize the request body.
Regression test added: test_prepare_chat_payload_strips_non_json_serializable_kwargs
2026-03-28 01:15:21 +08:00
エイカク
cd4e999526
fix: harden OpenAI attachment recovery ( #7004 )
...
* fix: harden OpenAI attachment recovery
* fix: refine OpenAI image loading
* fix: restore OpenAI image encoding errors
* refactor: streamline OpenAI image helpers
* refactor: simplify OpenAI attachment helpers
* refactor: simplify OpenAI helper flow
* refactor: clarify OpenAI image modes
* refactor: reduce OpenAI materialization copies
2026-03-27 00:49:19 +09:00
Gargantua
dde02815c2
feat: add a toggle to disable thinking mode in Ollama ( #5941 )
...
* feat: add ollama thinking toggle
* fix: simplify hint for ollama_disable_thinking configuration
---------
Co-authored-by: Gargantua <22532097@zju.edu.cn >
Co-authored-by: Soulter <905617992@qq.com >
2026-03-21 00:19:08 +08:00
Stable Genius
64e0183b55
fix: drop Groq reasoning_content from assistant history ( #6065 )
...
Co-authored-by: Stable Genius <259448942+stablegenius49@users.noreply.github.com >
2026-03-15 22:51:52 +08:00
エイカク
4ff07e3c74
fix: 完善转发引用解析与图片回退并支持配置化控制 ( #5054 )
...
* feat: support fallback image parsing for quoted messages
* fix: fallback parse quoted images when reply chain has placeholders
* style: format network utils with ruff
* test: expand quoted parser coverage and improve fallback diagnostics
* fix: fallback to text-only retry when image requests fail
* fix: tighten image fallback and resolve nested quoted forwards
* refactor: simplify quoted message extraction and dedupe images
* fix: harden quoted parsing and openai error candidates
* fix: harden quoted image ref normalization
* refactor: organize quoted parser settings and logging
* fix: cap quoted fallback images and avoid retry loops
* refactor: split quoted message parser into focused modules
* refactor: share onebot segment parsing logic
* refactor: unify quoted message parsing flow
* feat: move quoted parser tuning to provider settings
* fix: add missing i18n metadata for quoted parser settings
* chore: refine forwarded message setting labels
2026-02-12 23:42:29 +09:00