Commit Graph

4984 Commits

Author SHA1 Message Date
Fridemn
a5ba828019 style(dashboard): restore sidebar rail design 2026-07-13 12:56:17 +08:00
Fridemn
b5f2a86899 refactor(dashboard): move resources to settings 2026-07-13 12:48:17 +08:00
w33d
d0e5e68c55 fix: handle max_tokens for NVIDIA MiniMax M3 (#9209) 2026-07-12 16:20:48 +08:00
Wei Chengqian
ab4de04648 fix: exempt WebChat from friend wake prefix (#9215) 2026-07-12 16:04:50 +08:00
VectorPeak
a957b2e5dc fix: return HTTP errors for failed skill downloads (#9213)
* fix: return HTTP errors for failed skill downloads

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

* fix: harden skill archive error responses

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

* fix: use structured skill archive status codes

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>

---------

Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
2026-07-12 16:04:12 +08:00
叹号大帝
6641041d1e fix: update i18n callback path to Settings General (#9201) 2026-07-11 23:15:14 +08:00
dependabot[bot]
c72a024eec chore(deps): bump the github-actions group with 4 updates (#9170)
Bumps the github-actions group with 4 updates: [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action), [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action), [docker/login-action](https://github.com/docker/login-action) and [docker/build-push-action](https://github.com/docker/build-push-action).


Updates `docker/setup-qemu-action` from 4.1.0 to 4.2.0
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v4.1.0...v4.2.0)

Updates `docker/setup-buildx-action` from 4.1.0 to 4.2.0
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v4.1.0...v4.2.0)

Updates `docker/login-action` from 4.2.0 to 4.4.0
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v4.2.0...v4.4.0)

Updates `docker/build-push-action` from 7.2.0 to 7.3.0
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v7.2.0...v7.3.0)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-version: 4.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: docker/setup-buildx-action
  dependency-version: 4.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: docker/login-action
  dependency-version: 4.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: docker/build-push-action
  dependency-version: 7.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-11 23:14:42 +08:00
Chiu Chun-Hsien
3bf6d683ae fix: use ephemeral cache control mode in anthropic provider to increase cache hit rate (#9197) 2026-07-11 22:51:58 +08:00
Wei Chengqian
d7bad22bbd fix: make ChatUI model selection theme-aware (#9200) 2026-07-11 22:47:25 +08:00
Fiber
4c6ef8a492 fix: resolve mobile chat input freeze and multiline attachment button alignment (#9202)
* fix: resolve mobile chat input freeze caused by autoResize oscillation

The autoResize() function in ChatInput.vue used minHeight + 8 as the
threshold to decide whether to switch from multi-line (textarea) back
to single-line (input). On mobile viewports (max-width: 768px), the
textarea's 2-line scrollHeight is below minHeight + 8 due to smaller
line-height and padding, causing an infinite oscillation loop between
<input> and <textarea> that freezes the browser.

Fix: compute the actual single-line content height from
getComputedStyle (line-height + vertical padding) and use that as the
wrapping threshold instead of the hardcoded minHeight + 8 offset.
Also temporarily set min-height to 0 during scrollHeight measurement
to avoid the CSS min-height: 52px inflating the value.

* fix: align mobile multiline attachment button to the left

The mobile multiline grid used a 2-column layout (1fr auto) with
'left right' areas, causing the left actions area to span the full
remaining width and centering the + button via justify-content: center.

Switch to the same 3-column layout (auto 1fr auto) with 'left . right'
areas used on desktop, so the + button sits at the left edge.

* fix: use !important to override min-height during scrollHeight measurement

el.style.minHeight = '0' cannot override the CSS min-height: 52px
!important rule, leaving scrollHeight inflated and preventing the
textarea from switching back to single-line for short text.

Use setProperty('min-height', '0', 'important') to force the override,
and removeProperty to restore. Also add a fontSize * 1.2 fallback when
getComputedStyle returns 'normal' for line-height, so the threshold is
always computable.
2026-07-11 22:46:55 +08:00
叹号大帝
7422fb075c fix(platform): correct tutorial links for satori and mattermost (#9205) 2026-07-11 22:46:16 +08:00
Cooper
12f2f5a09c fix: Added Try Except to Filter Handling (#9183)
* Added Try Except to Filter Handling

* Avoid Redundant Error Processing
2026-07-09 15:48:52 +08:00
SpencerFang0617
afb898e61f fix(line): remove unexpected force argument from get_json (#9187) 2026-07-09 15:47:57 +08:00
Soulter
0be821afc6 chore: update readme 2026-07-08 00:39:31 +08:00
VectorPeak
dcc40ede1d fix: validate dashboard account username updates (#9175)
Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
2026-07-08 00:27:52 +08:00
Soulter
adebd2958e chore: refine README
SengokuCola 必定女装
2026-07-07 22:00:19 +08:00
Soulter
331444b41f docs: update v4.26.5 changelog format 2026-07-07 10:12:25 +08:00
Weilong Liao
39090a74ba chore: bump version to 4.26.5 (#9174) v4.26.5 2026-07-07 09:54:43 +08:00
Weilong Liao
bf18fadbe6 style: polish snackbar appearance (#9173) 2026-07-07 09:43:59 +08:00
Soulter
1124dfe295 docs: broaden diagnostics guide 2026-07-07 00:26:03 +08:00
Soulter
510e833695 chore: log event loop watchdog startup at info 2026-07-07 00:21:01 +08:00
Soulter
0a5d6485a1 docs: add diagnostics guide 2026-07-07 00:19:40 +08:00
Weilong Liao
0dee40bd9d feat: add event loop diagnostics (#9168)
* feat: add event loop diagnostics

* fix: write event loop watchdog dumps to rotating log

* chore: use fixed event loop diagnostic defaults

* fix: keep event loop watchdog alive after dump failures
2026-07-07 00:14:03 +08:00
Weilong Liao
2a7c02af8e fix: remove qq official reply id on proactive fallback so oversized passive replies can succeed via proactive sending (#9169) 2026-07-06 23:48:30 +08:00
lingyun14
56f2533951 fix(mcp): attempt to fix epoll busy-wait caused by leaked SSE exit stack (#8307)
* fix(mcp): prevent epoll busy-wait caused by leaked SSE exit stack

* fix(mcp): address review feedback on owner task connection lifecycle

* Update mcp_client.py
2026-07-06 23:06:48 +08:00
killer-qert
afb0079116 fix: exit MCP anyio contexts in the lifecycle task on disable (#9132)
* fix: exit MCP anyio contexts in the lifecycle task on disable

#9070 moved MCP shutdown cleanup into the per-server lifecycle task so
that the anyio cancel scopes entered in connect_to_server() are exited
from the task that entered them. Running the cleanup through
asyncio.shield() defeats that: shield wraps the coroutine in a new
task, so disabling a server still fails with "Attempted to exit cancel
scope in a different task than it was entered in" and leaves the scope
state corrupted -- the failure mode behind the CPU spin reported in
#9068.

Await _terminate_mcp_client() directly instead. The graceful disable
path has no cancellation in flight, and on forced shutdown the
lifecycle task still runs its finally block in-task, so the shield only
served to break task affinity.

Closes #9068

* fix: absorb late cancellations during MCP shutdown cleanup

A cancellation delivered while the lifecycle task is already running its
finally-block cleanup would abort _terminate_mcp_client() halfway,
stranding the runtime entry and the MCP transport. Retry the cleanup in
the same task and uncancel() the absorbed request instead, so a forced
shutdown can no longer skip it.

* fix: guard Task.uncancel() for Python 3.10 runtimes

Task.uncancel() only exists on Python 3.11+. On 3.10 absorbing the
CancelledError is sufficient, so skip the call when unavailable.
2026-07-06 23:04:41 +08:00
Weilong Liao
4166d9ab58 fix: preserve qq official quoted message context (#9164)
* fix: preserve qq official quoted message context

* Update astrbot/core/platform/sources/qqofficial/qqofficial_platform_adapter.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* fix: standardize qq-botpy version specification in dependencies

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-07-06 22:55:21 +08:00
Glmg
ba7f8ebfb1 fix(webui): sync plugin activation status on enable (#9156)
* fix(webui): fix plugin activation status sync issue in turn_on_plugin #9149

* fix(webui): sync plugin activation status after enabling

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-06 21:16:14 +08:00
Weilong Liao
ab2502c174 feat: add chat token usage indicator
Show a neutral token usage ring in ChatUI when the current model has context-window metadata.
2026-07-06 21:14:35 +08:00
Fiber
56326c7551 fix: serialize webchat history timestamps as UTC-aware ISO strings (#9159)
ChatService serialized PlatformMessageHistory records via bare model_dump(),
causing created_at/updated_at to be emitted as naive ISO strings without a
timezone suffix. The frontend new Date() parses such strings as local time
per ES2015+, so UTC values were displayed as-is instead of converted.

Add serialize_history_entry helper and apply it to get_session, get_thread,
and update_message. This matches the SSE real-time path and session list
path, ensuring the frontend consistently receives ISO strings with the
+00:00 suffix across all code paths.
2026-07-06 21:12:29 +08:00
Weilong Liao
18e067fab1 fix: keep model metadata separate from providers (#9161) 2026-07-06 21:10:57 +08:00
Weilong Liao
6627fd53c2 feat: show model metadata in selectors
Surface cached model metadata in model/provider selectors, show neutral capability/context badges, and add provider test actions.
2026-07-06 20:38:30 +08:00
Weilong Liao
25cbd41e08 feat: add sanitation for malformed tool call names in ToolLoopAgentRunner (#9144)
* feat: add sanitation for malformed tool call names in ToolLoopAgentRunner

fixes: #8929
closes: #8911

* Update astrbot/core/agent/runners/tool_loop_agent_runner.py

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>

* fix: update docstring to clarify normalization of malformed tool call names

---------

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2026-07-05 10:53:14 +08:00
sama233
3b8caf37e6 test: cover POSIX file URI root preservation (#8906)
* test: cover POSIX file URI root preservation

* Update tests/test_media_utils.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Co-authored-by: Weilong Liao <37870767+Soulter@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-07-05 10:12:59 +08:00
Soulter
85b653b6f0 feat: add note on cross-platform compatibility and Python version support 2026-07-05 10:06:16 +08:00
tangtaizong666
c9eed7b65e fix: adapt MiMo STT to V2.5 models and reject non-WAV audio payloads (#9118)
* fix: adapt MiMo STT to V2.5 models and reject non-WAV audio

The MiMo-V2 series went offline on 2026-06-30, so the default STT model
mimo-v2-omni fails for every default configuration. Switch the default
to mimo-v2.5-asr, the dedicated speech recognition model whose official
docs use exactly the bare input_audio payload this provider sends.

For non-ASR multimodal models such as mimo-v2.5, the audio understanding
docs require a text instruction alongside the audio, so restore the
system/user transcription prompts for that model family only.

Also validate that the resolved audio payload really is RIFF/WAVE before
calling the API: when a platform voice file (e.g. Tencent SILK from QQ)
slips through the WAV conversion chain unchanged, fail locally with an
actionable error instead of the opaque HTTP 400 from the API.

Fixes #9113

* fix: accept unpadded MiMo wav headers

---------

Co-authored-by: tangtaizong666 <212687958+tangtaizong666@users.noreply.github.com>
2026-07-05 09:59:48 +08:00
shuiping233
cc0b347508 fix: qq_official websocket适配器发送消息收到None时现在会重试了 (#8977) (#8979)
* fix: qq_official websocket适配器发送消息收到None时现在会重试了 (#8977)

* fix: qq_official websocket适配器重试发送消息的时候不会重复打印重试告警了

* fix: qq_official websocket适配器发送媒体/文件消息时遇到api返回None也会重试了
2026-07-05 09:50:42 +08:00
LIghtJUNction
30426c4f67 fix: secure project update temp staging (#9083)
* fix: secure project update temp staging

* Update astrbot/dashboard/services/update_service.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* fix: close update staging temp context

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-07-05 09:49:11 +08:00
VectorPeak
041fba4df4 fix: enforce ownership when reading ChatUI sessions (#9141) 2026-07-05 09:34:38 +08:00
Weilong Liao
b43cc6dee0 feat: improve ChatUI attachment display (#9134) 2026-07-04 17:56:33 +08:00
Soulter
20008f179c fix: preserve absolute custom workspace paths 2026-07-03 22:59:21 +08:00
NayukiChiba
8a31cf01f2 fix(core): improve web search API key failover
Merge PR #8896
2026-07-03 22:53:22 +08:00
Soulter
6d798908ad fix: constrain custom workspace paths 2026-07-03 22:45:35 +08:00
lxfight
ea9e3421d9 fix: align knowledge base CRUD API contract with kb_name, canonical payload fields, and matching OpenAPI types (#9000)
Warning: Potential breaking changes in /kb related openapi.

* fix(kb): align CRUD API contract end-to-end

Unify knowledge base create/update/list with kb_name, canonical_payload,
optional list pagination with total, and matching OpenAPI plus dashboard types.

* fix: restore _model_dict references, add KnowledgeBaseCreateRequest, fix OpenAPI allOf validation

- Replace 3 remaining _model_dict() calls with payload.model_dump(exclude_none=True)
- Add KnowledgeBaseCreateRequest schema with required kb_name + embedding_provider_id
- Remove additionalProperties: false from OpenAPI allOf sub-schema to avoid validation failures
- Use Pydantic Field(alias="name") + populate_by_name=True for legacy name migration
- Delegate _canonical_kb_payload to KnowledgeBaseRequest to eliminate duplicated logic
- Add getattr default None for update_kb to prevent AttributeError
- Add validation error tests: missing kb_name, missing embedding_provider_id

* fix: address knowledge base contract follow-ups

* fix: preserve knowledge base create error shape
2026-07-03 22:18:56 +08:00
lxfight
e2f3b00088 fix(kb): clean up KBMedia records on document delete, fix update_kb_stats (#9120)
* fix(kb): clean up KBMedia records on document delete, fix update_kb_stats

- delete_document_by_id now deletes associated KBMedia records before
  removing the KBDocument row, preventing orphaned media data.
- update_kb_stats now passes kb_id filter to vec_db.count_documents,
  fixing chunk count that previously counted across all KBs.
- add tests for document deletion cleanup and update_kb_stats behavior.

* fix(kb): merge media and document deletion into single transaction
2026-07-03 22:13:23 +08:00
lxfight
468eea99c6 fix(kb): improve retrieval resilience on per-KB failure and rerank selection (#9122)
* fix(kb): improve retrieval resilience on per-KB failure and rerank selection

- Remove RuntimeError on single-KB dense retrieval failure: always skip
  the faulty KB and return partial results instead of crashing.
- Simplify rerank provider selection: remove redundant rerank_pi check
  since the provider is already loaded from that ID.

* fix(kb): simplify rerank selection loop, improve dense retrieval error log
2026-07-03 22:12:24 +08:00
lxfight
aecee6fc9f fix(kb): replace fragile error string matching with pre-check for duplicate kb_name (#9121)
* fix(kb): replace fragile error string matching with pre-check for duplicate kb_name

* fix(kb): handle IntegrityError race condition on duplicate kb_name
2026-07-03 22:12:00 +08:00
Glowing Brick
3ce66576f4 fix: Improve MCP client startup and shutdown handling to prevent idle spinning when a server is disabled and ensure proper cleanup on errors, timeouts, and cancellation (#9070)
* fix: mcp cancel scope cross task spin (#9068)

* fix: mcp cancel scope cross task spin

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* fix: mcp cancel scope cross task spin

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* fix: mcp cancel scope cross task spin

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-07-03 22:10:53 +08:00
Weilong Liao
e7d5be632f feat: add ChatUI project workspaces (#9066)
* feat: add ChatUI project workspaces

* feat: refine chatui layout

* feat: enhance chat input and project view styles for attachment handling

* feat: adjust chat sidebar brand logo positioning

* feat: enhance project dialog with error handling and loading state
2026-07-03 21:54:20 +08:00
VectorPeak
89b80a6ca7 fix: enable only synced ModelScope MCP servers (#9084)
* fix: enable only synced ModelScope MCP servers

* fix: avoid mutating default MCP config
2026-07-03 01:05:25 +08:00