Fixes#9529.
When kb_names contains UUIDs instead of names, get_kb_by_name() would
return None and check_all_kb() would silently skip retrieval with only
a DEBUG-level log.
Modifications:
- get_kb_by_name() now falls back to UUID lookup when name match fails
- check_all_kb() distinguishes None (not found) from empty KBs and logs
a WARNING with the count of missing KBs
- Add regression tests covering UUID lookup, name preference, and logging
Add a dedicated chunked uploader for large local QQ Official media. Keep C2C and group endpoints explicit, support server-provided part index bases, and retry transient upload operations.
Co-authored-by: Fuyan Yuan <33221728+TheRainstorm@users.noreply.github.com>
* feat(config): add Windows PowerShell version option
* feat(computer): honor Windows PowerShell version in local runtime
* fix(computer): correct stale shell comment for configurable PowerShell
* refactor(computer): inline windows shell resolution per AGENTS.md
* test(computer): assert windows_shell in exec_managed call
* test: make shell tests cross-platform
Co-authored-by: Donoym <prober13c14@gmail.com>
* refactor(computer): auto-detect Windows shell instead of config
* fix(computer): drop stale cmd.exe references after shell auto-detect
* style: apply ruff format and import order
* Update astrbot/core/astr_main_agent.py
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
---------
Co-authored-by: Donoym <prober13c14@gmail.com>
Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
* fix: hide skills from disabled plugins
* fix: show disabled plugin skills in personas
* fix: align skill list query types
* fix: show disabled plugin skills in skills page
* style: dim inactive skills
* docs: regenerate public OpenAPI spec
* refactor: always include plugin skills
* fix: warn when an explicitly configured WebUI dist is stale
resolve_dashboard_dist() returns an explicitly configured --webui-dir
immediately, without checking the version it declares. Every other branch in
the same function verifies compatibility and warns on a mismatch, so this is
the one way to end up serving assets that do not match the running core with
no diagnostic at all.
That is the case a packaged distribution hits: when the launcher updates the
backend but keeps its bundled WebUI directory, the dashboard silently stays on
the previous release. Features added by the new core are simply missing from
the UI and nothing explains why.
Behaviour is unchanged -- the directory is still served, since refusing to
serve it would be worse than serving an old one. It is just no longer silent.
* refactor: tidy the explicit WebUI dist resolution
Build the Path once instead of twice, and hold the version read for the
warning in a local so the log call only carries values.
ProviderManager.delete_provider removed the provider from the persisted
config but left self.providers_config pointing at the stale list, so the
dashboard kept showing deleted providers until a reload or restart.
Sync self.providers_config with the just-saved config after deletion so
the API/provider list reflects the removal immediately.
* feat(webchat): expand drag-and-drop upload to the whole chat area
* fix(webchat): restore drag-and-drop upload in project mode
The full-area drop handler was only attached to .conversation-stack (the
non-project branch), and ChatInput's own handlers were removed, so project
mode lost drag-and-drop upload entirely. Hoist dragEvents and the overlay
to .chat-main so all three branches (provider / project / conversation)
are covered; guard the drop and hide the overlay while the provider
workspace is active.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(webchat): clear drag-leave timeout on unmount
Use onScopeDispose so a timeout left pending when the component unmounts
mid-drag can't write to the composable's state afterwards.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add stateless Responses API provider
* 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>
* fix: use versioned DeepSeek Responses API base URL
* style: format Responses API provider
---------
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>