5408 Commits
Author SHA1 Message Date
tjc66666666andgemini-code-assist[bot] 077d54baaf Fix path separator for remote_zip in computer_client.py (#8182)
* Fix path separator for remote_zip in computer_client.py

Ensure remote_zip uses forward slashes for compatibility.

* Update astrbot/core/computer/computer_client.py

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

* Update computer_client.py

* Update computer_client.py

* Update computer_client.py

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-09-03 14:34:49 +08:00
liwei zheng db0affc982 fix(i18n): Relocate the zh-CN syncProvider subtree up to the namespace root (#9932)
* fix(i18n): 将 zh-CN 的 syncProvider 子树移至命名空间根级

* fix(i18n): 补全 ru-RU 缺失的翻译键(chat 8 / extension 5 / config-metadata 50)
2026-09-03 14:33:21 +08:00
AtQiYu 9115cc2945 Fix/expand chatui code highlighting 扩展 chatui 代码高亮 (#9892)
* fix: expand common language syntax highlighting

* fix: wire limited Shiki languages into ChatUI

* fix: register bundled aliases for chat code blocks

* fix: include Go grammar in T2I Shiki runtime
2026-09-02 22:32:47 +08:00
liwei zheng 6ee1ddd4fd fix(i18n): add missing en-US dashboard translations (#9896)
* fix(i18n): add missing en-US dashboard translations

Fill 26 keys present in zh-CN but missing from en-US locale files:
- tool-use: the whole dialogs.syncProvider subtree (MCP server sync
  dialog showed untranslated keys in English UI)
- config-metadata: section hints for knowledgebase and websearch
- provider: vllm_rerank description
- subagent: personaPreview label

Verified all en-US locale files now have full key parity with zh-CN.

* fix(i18n): move syncProvider keys to the tooluse namespace root

McpServersSection.vue resolves features.tooluse.syncProvider.* (the
subtree must sit at the file root); the previous commit had mirrored
zh-CN's placement under dialogs, which the namespace lookup never
reaches. Also drop form.personaPreview: the component consumes
cards.personaPreview (already present); form.personaPreview is an
unused key.
2026-09-02 09:50:10 +08:00
Soulterandsourcery-ai[bot] 41cd5d122d chore: bump version to 4.28.0-beta.1 (#9911)
* chore: bump version to 4.28.0-beta.1

* Update changelogs/v4.28.0-beta.1.md

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

---------

Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
v4.28.0-beta.1
2026-09-02 01:11:58 +08:00
Soulter c904fc5e23 chore: add a new sponsor 2026-09-02 01:09:34 +08:00
Soulter 7423420ccb chore: add a new sponsor 2026-09-02 00:58:38 +08:00
枭钰钰 5ad953611f fix(provider): exclude cached tokens from Gemini input usage accounting (#9880)
* fix(provider): exclude cached tokens from Gemini input usage accounting

Gemini's prompt_token_count already includes tokens served from cache.
_extract_usage was passing it straight to TokenUsage.input_other while also
setting input_cached to cached_content_token_count, so usage.input double
counted cached tokens and inflated context-occupancy stats. Subtract cached
tokens from input_other, matching the OpenAI provider's accounting.

* docs(provider): clarify _extract_usage reads response usage metadata

Address Sourcery review: the method receives GenerateContentResponseUsageMetadata,
not a candidate, so correct the docstring's opening line.
2026-09-01 23:48:12 +08:00
枭钰钰 9adf05abaf fix(provider): count Anthropic cache_creation tokens in input usage (#9881)
Anthropic's input_tokens only covers tokens after the last cache breakpoint;
cache_creation_input_tokens (tokens written into a new cache entry) were
dropped entirely from TokenUsage, so usage.input/total undercounted requests
that create a fresh cache entry. Fold cache_creation_input_tokens into
input_other in both _extract_usage and the streaming _update_usage, matching
the OpenAI provider's accounting where input_other holds all non-cache-read
input (including cache writes).

Official formula: total_input = cache_read + cache_creation + input_tokens.
2026-09-01 23:44:58 +08:00
26e215bcd6 feat(dashboard): add batch deletion for skills (#9906)
* feat: implement batch deletion functionality for skills with confirmation dialog

* fix(dashboard): refine skill batch deletion feedback

* fix(dashboard): preserve batch deletion feedback

* fix(dashboard): improve skill selection icon

* Delete dashboard/tests/skillsBatchDelete.test.mjs

---------

Co-authored-by: Soulter <905617992@qq.com>
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
2026-09-01 23:37:46 +08:00
Soulter f996f3f122 feat: automatically record UMO names (#9909)
* feat: automatically record UMO names

* refactor: record UMO names only after wake

* refactor: record UMO names during wake checks

* refactor: extract UMO auto-name recorder
2026-09-01 23:29:38 +08:00
時壹andSoulter 385e4b6bfb fix: skip the respond stage on an empty message chain (#9653)
* fix: skip the respond stage on an empty message chain

* Delete tests/test_respond_stage.py

---------

Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
2026-09-01 11:23:11 +08:00
Soulter bff37193ad feat(platform): enrich group metadata across adapters (#9851)
* feat(platform): enrich group metadata across adapters

* perf(platform): make group member lookup opt-in

* Revert "perf(platform): make group member lookup opt-in"

This reverts commit 896b4b895b.
2026-09-01 11:19:30 +08:00
dependabot[bot] b096f75d8c chore(deps): bump github/codeql-action in the github-actions group (#9885)
Bumps the github-actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).


Updates `github/codeql-action` from 4.37.8 to 4.37.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.37.8...v4.37.9)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.37.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  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-09-01 09:43:18 +08:00
枭钰钰 bc3b1c67aa fix(plugin): detect updates for plugins without persisted install sources (#9887)
Legacy plugins installed before install-source persistence (PR #9037) have
no plugin_install_sources record, so the backend falls back to an implicit
source record. The frontend update check skipped implicit sources entirely,
so these plugins never showed available updates until the user manually
re-bound or reinstalled the plugin.

Include implicit sources in the update check: they resolve to the default
registry, so match them against the default market by repo/name. Only
matched plugins surface an update; unmatched ones stay silent, so this
cannot introduce false positives. Also fix the misspelled online_vesion
field name so the backend payload matches what the frontend reads.
2026-09-01 09:42:51 +08:00
Soulter 34743f4adf refactor(dashboard): productize profile configuration (#9883)
* refactor(dashboard): productize AI configuration

* refactor(dashboard): hide safety mode strategy

* refactor(dashboard): clarify built-in AI heading

* refactor(dashboard): simplify AI enable control

* refactor(dashboard): simplify voice setting labels

* refactor(dashboard): clarify tool call output labels

* refactor(dashboard): streamline configuration toolbar

* style(dashboard): tighten configuration toolbar spacing

* style(dashboard): compact configuration toolbar

* style(dashboard): refine configuration workspace layout

* style(dashboard): refine built-in AI heading

* refactor(dashboard): refine AI configuration copy

* refactor(dashboard): remove redundant voice hints

* refactor(dashboard): refine multimedia setting guidance

* style(dashboard): align collapsed configuration controls

* refactor(dashboard): simplify wake prefix label

* refactor(dashboard): reuse provider selection menu

* style(dashboard): align configuration search control

* refactor(dashboard): clarify AI configuration labels

* refactor(dashboard): modernize profile plugin selection

* style(dashboard): refine provider menu elevation

* fix(dashboard): confirm execution mode changes

* style(dashboard): unify menu panel elevation

* fix(dashboard): enforce unified menu elevation
2026-09-01 00:13:45 +08:00
Soulter 2ea3bd7ec5 fix: defer dashboard setup until startup (#9879)
* fix: defer dashboard setup until startup

* refactor(migration): remove logging statements from webchat session migration
2026-08-31 10:35:33 +08:00
枭钰钰 0da69dd3f6 fix: ensure config directory exists before mkstemp in _write_config_snapshot (#9856)
AstrBotConfig._write_config_snapshot calls tempfile.mkstemp(dir=directory)
without verifying the directory exists. When a config profile is created
for the first time (e.g. create_conf instantiates AstrBotConfig with a
brand-new path), __init__ calls save_config before the directory is
guaranteed to exist, and mkstemp raises FileNotFoundError.

Add os.makedirs(directory, exist_ok=True) before mkstemp. This is the
standard defensive pattern for atomic-write helpers.

Fixes three intermittently-failing dashboard tests:
- test_t2i_set_active_template_syncs_all_configs
- test_t2i_reset_default_template_syncs_all_configs
- test_t2i_update_active_template_reloads_all_schedulers

Closes #9855.
2026-08-31 09:33:15 +08:00
WangPan59and王磐 f845a8d654 feat(websearch): add AnySearch as a web search provider (#9767)
Co-authored-by: 王磐 <wangpan.com>
2026-08-31 09:30:46 +08:00
AnegasakiNene 5aca0c9847 fix: resolve Gemini history image references (#9874) 2026-08-31 09:19:31 +08:00
Ruihan Liandliruihan e17f5688f4 fix: preserve text in Lark mixed messages (#9841)
Copy non-empty buffered text elements before clearing them when an image is inserted, and avoid emitting empty blocks for image-first messages.

Co-authored-by: liruihan <liruihan@example.com>
2026-08-31 09:16:49 +08:00
Ars1027andSoulter b0f2f90a83 fix(lark): recognize commands after leading bot mention (#9872)
* fix(lark): recognize commands after leading bot mention

* Delete tests/test_lark_adapter.py

---------

Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
2026-08-31 09:03:21 +08:00
一张白纸 0298ddd627 fix(dashboard): make skill editor dialog responsive on small screens (#9873)
* fix(dashboard): make skill editor dialog responsive on small screens

- Enable fullscreen mode for skill editor dialog on mdAndDown breakpoints
- Switch skill-editor grid to single-column stacked layout on mobile
- Constrain files panel height and enforce monaco editor min-height

* fix(dashboard): override skill editor dialog max-height on small screens

Address Sourcery-ai broader_impact finding on PR #9873: the base
`.skill-editor-dialog { max-height: min(88vh, 980px); overflow: hidden; }`
remains active in fullscreen mode on short mobile viewports (e.g.
landscape phones), where the stacked 20vh file tree + 40vh editor plus
title and action bar can exceed 88vh. Combined with `overflow: hidden`,
content gets clipped and the save/cancel buttons become unreachable.

Override `.skill-editor-dialog` within the existing
`@media (max-width: 860px)` block to lift the 88vh cap and allow
vertical scrolling when content overflows the viewport.

This is a minimal fix for the temporary solution; the 860-960px gap
between the media query and Vuetify's `mdAndDown` (960px) breakpoint is
accepted as a known limitation.
2026-08-31 08:48:52 +08:00
Soulter fe3d77568b refactor: embed agent runner configuration in profiles (#9821)
* refactor: embed agent runner configuration in profiles

* fix: limit personas to local agent runner

* style(dashboard): refine unsaved config notice

* refactor: refine embedded local runner configuration

* refactor: centralize agent runner migrations
2026-08-29 22:40:46 +08:00
Soulter d2d7e5aefd feat: add conversation shortcuts to statistics (#9847) 2026-08-27 19:04:56 +08:00
Soulter 69030851d4 feat: consolidate data dashboard and redesign conversations (#9846)
* feat: consolidate data dashboard

* feat: redesign conversation workspace

* docs: sync conversation OpenAPI artifacts

* docs: update data workspace navigation

* feat: group conversations by session

* fix: optimize mobile conversation workspace

* feat: refine log workspace

* fix: honor console auto-scroll setting

* feat: refine trace workspace
2026-08-27 18:53:02 +08:00
AnegasakiNene 8ea8ce613a fix(provider): preserve current user turn in Gemini history (#9738)
* fix: preserve current user turn in Gemini history

* test(provider): cover Gemini assistant-ending history
2026-08-27 00:57:35 +08:00
49caa6cb77 fix: preserve QQ Official group routing in unique sessions (#9833)
* fix: preserve QQ Official group routing in unique sessions

* Delete tests/test_qqofficial_unique_session.py

---------

Co-authored-by: liruihan <liruihan@example.com>
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
2026-08-27 00:42:40 +08:00
Ruihan Liandliruihan c61fa088b7 fix: keep proactive agent history in contexts (#9818)
Preserve structured conversation history for cron and background-task wakeups so normal context truncation can process it.

Refs #9763

Co-authored-by: liruihan <liruihan@example.com>
2026-08-27 00:40:33 +08:00
Soulter 87a1917e80 refactor(dashboard): redesign bot management workspace (#9825)
* refactor(dashboard): redesign bot management workspace

* feat(dashboard): show workspace list loading progress
2026-08-26 16:38:33 +00:00
Soulter 5152c09a78 fix(dashboard): reset persona folder after deletion (#9832) 2026-08-26 22:43:09 +08:00
Soulter 1e88fbb3a3 feat(dashboard): improve authentication controls (#9830)
* feat(dashboard): improve authentication controls

* fix(dashboard): align logout menu icon
2026-08-26 21:34:43 +08:00
mrlonely a436456d42 fix: stop empty LLM requests before provider dispatch (#9815) 2026-08-26 20:50:07 +08:00
Soulter 4f5941eb05 fix: hide internal personal WeChat settings (#9827) 2026-08-26 20:49:52 +08:00
Ruihan Liandliruihan 690abefa5e fix: isolate rate limits by unified message origin (#9814)
* fix: isolate rate limits by unified message origin

* refactor: clarify rate-limit UMO key

---------

Co-authored-by: liruihan <liruihan@example.com>
2026-08-26 20:43:08 +08:00
Soulter e183dd285f feat(dashboard): support masked secret config fields (#9824)
* feat(dashboard): support masked secret config fields

* docs: document secret plugin configuration fields
2026-08-26 20:41:29 +08:00
Soulter 7c3fedc8ba refactor(dashboard): unify provider management workspace (#9820) 2026-08-26 19:12:17 +08:00
Caleb 2ffdb9a1fa fix: adapt provider icons to dark mode (#9647)
* fix: improve provider icons in dark mode

* fix: address provider icon review feedback
2026-08-26 14:54:54 +08:00
一张白纸 d5766d046a fix(dashboard): show create folder button on mobile in persona manager (#9812)
On small screens, the sidebar is hidden (d-none d-md-flex), so the
"create folder" entry in the toolbar dropdown is the only way for
mobile users to create folders. The current v-if="!hasFolders"
condition prevents it from showing when folders already exist.
2026-08-26 11:35:26 +08:00
Yoshy 09a56127ad fix: apply max_agent_step config to cron and background task agents (#9801)
* fix: apply max_agent_step config to cron and background task agents

The cron (scheduled task) and background task wake-up paths hardcoded
step_until_done(30) since the "extract main agent" refactor (0c5308a),
ignoring provider_settings.max_agent_step.

Read the value via coerce_int_config so invalid values fall back to the
default with a warning instead of crashing or silently degrading.

Fixes #9800

* test: cover max_agent_step propagation in cron and background wake-ups

Add parametrized tests asserting step_until_done receives the configured
max_agent_step on both the cron and background task agent paths, with
fallback coverage for missing, boolean-polluted, and numeric-string
config values.

* fix: clamp max_agent_step to a minimum of 1 in cron and background wake-ups

Non-positive provider_settings.max_agent_step values previously reached
step_until_done as-is: the local runner skipped all steps and forced a
final response, while the DeerFlow runner raised ValueError. Pass
min_value=1 to coerce_int_config so zero/negative values are clamped to
a usable minimum, and cover the zero case in both unit test suites.
2026-08-26 10:11:00 +08:00
Soulter 07013445f9 feat: improve default and local t2i rendering (#9803)
* feat: redesign default t2i template

* feat: improve local t2i rendering and migrate defaults

* fix: install CJK fonts in Docker image

* fix: preserve soft breaks and fit display math
2026-08-26 10:06:50 +08:00
Soulter 4d877c9919 fix: handle DingTalk app creation status (#9808) 2026-08-26 00:53:48 +08:00
大饼鸡蛋 59a964880c fix(logging): make console and root logger follow configured log level (#9805)
* fix(logging): make console and root logger follow configured log level

The console loguru sink and root logger were hardcoded to DEBUG, so the log_level config had no effect on terminal output. Sync them to the configured level during configure_logger().

* fix(logging): create console sink before removing old one

Create the replacement loguru console sink first and only remove the old sink after success, so terminal logging is never left without a sink if sink creation fails. Also apply ruff formatting.
2026-08-25 21:57:36 +08:00
LIghtJUNctionandSoulter d547fc491d fix: keep WeCom callback receive loop responsive (#9759)
* fix: keep WeCom callback receive loop responsive

* fix: support Anthropic httpx2 clients

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-08-25 17:34:40 +08:00
牧濑红莉栖(BOT) 9200e40d68 fix: stabilize OpenAI tool schema order (#9798) 2026-08-25 16:30:05 +08:00
楚风礼赞andSoulter 68d0a99db4 fix: gray out commands of disabled plugins in behavior manager (#9664)
* fix: gray out commands of disabled plugins in behavior manager

Show inactive-plugin commands as 未启用, dim the whole row with
theme on-surface colors, and disable row actions.

Fixes #9562

* fix: address review comments on disabled-plugin commands

Keep the stored command enabled flag unchanged and expose plugin
activation separately. Allow viewing details, keep hover tooltips,
and cover serialized plugin_activated in unit tests.

* fix: preserve tooltips for disabled command actions

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-08-25 16:19:57 +08:00
Soulter 828412d537 fix: align Anthropic API base URL logic with OpenAI API (#9802) 2026-08-25 16:05:53 +08:00
落秋枫叶and落秋枫叶 4f5a6b1db5 perf: move COPY after dependency installation (#9787)
Optimize Dockerfile build order to leverage layer caching

Reorder instructions:
- Move COPY . /AstrBot/ from before the first RUN to after it
- Keep apt dependencies, NodeSource setup, Node.js installation,
  and Python dependency installation steps unchanged

Reason:
- Application code changes more frequently than system dependencies
- Previously, COPY before dependency installation caused all
  subsequent layers to invalidate on every code change
- After reordering, system dependency and Node.js layers can be
  reused from cache; only later layers rebuild on code or
  Python dependency changes

Impact:
- Build output remains unchanged
- No difference on first build; subsequent builds significantly
  reduce redundant download and installation time

优化 Dockerfile 构建顺序以利用 Docker 层缓存

调整指令顺序:
- 将 COPY . /AstrBot/ 从第一个 RUN 之前移至其后
- 保持 apt 依赖安装、NodeSource 配置、Node.js 安装、
  Python 依赖安装等步骤不变

原因:
- 应用代码变更频率高于系统依赖
- 原先 COPY 在依赖安装之前,会导致代码变更时后续所有层缓存失效
- 调整后,系统依赖和 Node.js 安装层可被缓存复用,
  仅在代码或 Python 依赖变更时重新构建后续层

影响:
- 构建结果不变
- 首次构建无差异,后续构建显著减少重复下载和安装耗时

Co-authored-by: 落秋枫叶 <gitea-lqfy@lqfy.top>
2026-08-25 15:45:02 +08:00
一张白纸 98f11589f2 fix: add touch device detection for menu interaction (#9782)
* fix: remove open-on-hover attribute from menu components

Removed the open-on-hover of the Chat UI part of the AstrBot Web UI, and fixed the issue that the mobile end could not open the secondary menu of Transport Mode and Language.

* fix: add touch device detection for menu interaction

* fix: simplify touch device detection logic

* fix: update touch device detection for menu interaction

* fix: improve touch device detection with media query listener
2026-08-25 15:06:33 +08:00
dependabot[bot] c45f76b73b chore(deps): bump the github-actions group with 2 updates (#9799)
Bumps the github-actions group with 2 updates: [github/codeql-action](https://github.com/github/codeql-action) and [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action).


Updates `github/codeql-action` from 4.37.7 to 4.37.8
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v4.37.7...v4.37.8)

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

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.37.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: docker/setup-buildx-action
  dependency-version: 4.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-08-25 15:03:54 +08:00