Skip to content

chore(sync): absorb upstream through 385e4b6bf - #7

Open
BegoniaHe wants to merge 12 commits into
masterfrom
sync/upstream-385e4b6bf
Open

chore(sync): absorb upstream through 385e4b6bf#7
BegoniaHe wants to merge 12 commits into
masterfrom
sync/upstream-385e4b6bf

Conversation

@BegoniaHe

Copy link
Copy Markdown
Collaborator

Summary

Absorb upstream 34743f4adfe666e52422426e792b8ff7c88b92ec..385e4b6bfb87952d78d56ce21fc1caff1e68a85e (4 commits) into this fork. Cursor is now 385e4b6bfb87952d78d56ce21fc1caff1e68a85e.

Adapted AstrBotDevs#9887, AstrBotDevs#9885, AstrBotDevs#9851, and AstrBotDevs#9653. No cherry-picks and no skips. Version is 4.27.6; user-visible notes are in changelogs/v4.27.6.md.

This branch also has three later fork commits: WebChat coalesce/regenerate fixes that overlap #6, and a PluginPageHost Vitest timeout fix.

Related issue

None. Upstream synchronization.

Surfaces

  • upstream-sync.yaml, upstream-decisions.jsonl
  • pyproject.toml, astrbot/__init__.py, uv.lock, CHANGELOG.md, changelogs/v4.27.6.md
  • .github/workflows/codeql.yml
  • platform adapters/events, plugin service, Respond stage
  • bilingual Lark and get_group docs
  • Dashboard pluginPageHost.vitest.ts

Implementation notes

Validation

Focused checks recorded on the integration commits:

uv run pytest tests/unit/test_plugin_service.py tests/unit/dashboard/test_fastapi_v1_plugins.py -q
uv run pytest tests/unit/test_plugin_service.py::test_serialize_plugin_base_uses_online_version_without_install_source -q
uv run pytest tests/unit/platform/test_dingtalk_adapter.py tests/unit/platform/test_discord_adapter.py tests/unit/platform/kook tests/unit/platform/test_line_adapter.py tests/unit/platform/test_line_event.py tests/unit/platform/test_qqofficial_group_message_create.py tests/unit/platform/test_telegram_adapter.py tests/unit/test_aiocqhttp_group_info.py tests/unit/platform/test_lark_group_info.py tests/unit/platform/test_slack_group_info.py tests/unit/test_satori_group_info.py tests/unit/test_misskey_group_info.py tests/unit/platform/test_napcat_outbound.py tests/unit/platform/test_mattermost_adapter.py tests/unit/test_delivery_receipt.py tests/unit/test_astr_message_event.py tests/unit/test_astrbot_message.py -q
uv run pytest tests/unit/test_aiocqhttp_group_info.py tests/unit/platform/test_lark_group_info.py tests/unit/platform/test_lark_sender_name.py tests/unit/platform/test_slack_group_info.py tests/unit/test_satori_group_info.py tests/unit/test_misskey_group_info.py tests/unit/platform/test_wecomai_group_info.py tests/unit/test_astr_message_event.py::TestGetGroup tests/unit/test_astrbot_message.py::TestGroup tests/unit/platform/test_mattermost_adapter.py tests/unit/platform/test_slack_event.py tests/unit/platform/test_dingtalk_adapter.py::test_dingtalk_group_message_includes_available_group_details tests/unit/platform/test_napcat_outbound.py::test_napcat_get_group_returns_group_details -q
uv run pytest tests/unit/test_delivery_receipt.py tests/unit/test_message_tools.py::test_respond_stage_skips_same_text_after_send_message_to_user tests/unit/test_message_tools.py::test_respond_stage_sends_different_text_after_send_message_to_user tests/unit/test_message_tools.py::test_respond_stage_stops_typing_before_streaming_send -q
uv run pytest tests/unit/platform/test_wecomai_group_info.py -q
make check-yaml
pnpm exec vitest run --config vitest.config.ts tests/pluginPageHost.vitest.ts

Did not re-run make check or the full pytest suite for this PR.

Compatibility and risk

No fork-owned publish/docs URLs restored. Residual risk: adapter group-metadata pagination caps, Slack deferred conversations_info, and merge overlap with #6 on the two shared WebChat commits.

Checklist

  • Conventional Commit type is chore, build, ops, or test (not ci).
  • The change is focused and does not include unrelated product refactors.
  • A toolchain upgrade updates every matching declaration, workflow, image build, and lockfile.
  • Runtime Python deps update pyproject.toml, requirements.txt, and uv.lock together.
  • I ran the relevant formatting, lint, build, and test commands.
  • No secrets committed.
  • I did not restore legacy shims, Python <3.14 fallbacks, or upstream publish/docs URLs as fork artifacts.
  • I will not merge this PR myself. Merge needs a human maintainer review plus a separate AI-assisted review (AI_POLICY.md).
  • AI use follows AI_POLICY.md. Keep exactly one author note below. Do not fabricate the other.

Agent note

Goal: open a PR for sync/upstream-385e4b6bf against master. fix/webchat-turn-handling is already #6.

Paths: platform adapters/events, plugin service, Respond stage, CodeQL workflow, bilingual docs, 4.27.6 changelog, upstream-sync.yaml, upstream-decisions.jsonl, plus later WebChat coalesce/regenerate and PluginPageHost test commits on this branch.

Checks run: focused pytest and make check-yaml recorded on integration commits; PluginPageHost Vitest 5 passed after the static-import change. Residual risk: full make check / make test not re-run here; #6 overlaps two commits on this branch.

Tools: grok-4.6 in opencode.

xiaoyuyu6420 and others added 12 commits September 1, 2026 16:26
…rces (AstrBotDevs#9887)

The Dashboard already matches installed plugins against the default
market by repo/name, so implicit-source skipping is not present. Keep
that matching path and only correct the backend payload field name.

Upstream-Commit: bc3b1c6
Upstream-Author: 枭钰钰 <672178818@qq.com>
Upstream-PR: AstrBotDevs#9887
Sync-Disposition: adapt
Fork-Adaptation: Rename online_vesion on the TypeScript Dashboard path; do not invent implicit install-source records.
Tested: uv run pytest tests/unit/test_plugin_service.py::test_serialize_plugin_base_uses_online_version_without_install_source -q
AI-Generated: true
Generated-At: 2026-09-01T14:25:52Z
…strBotDevs#9885)

Bumps the github-actions group with 1 update: github/codeql-action from 4.37.8 to 4.37.9.

Upstream-Commit: b096f75
Upstream-Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Upstream-PR: AstrBotDevs#9885
Sync-Disposition: adapt
Fork-Adaptation: Translate the v4.37.9 bump to the peeled immutable commit SHA cdf488f595d80d6e07e03d4674febd5ab45fa938.
Tested: make check-yaml
AI-Generated: true
Generated-At: 2026-09-01T14:27:40Z
Port group enrichment onto current adapter boundaries. Keep NapCat in
sync with the OneBot path, preserve fork client attributes, and relocate
tests under tests/unit.

Upstream-Commit: bff3719
Upstream-Author: Soulter <37870767+Soulter@users.noreply.github.com>
Upstream-PR: AstrBotDevs#9851
Sync-Disposition: adapt
Fork-Adaptation: Use core imports and existing _client/_bot/_adapter attributes; enrich NapCat get_group; keep Slack inbound conversion off conversations_info; tests live under tests/unit.
Tested: uv run pytest tests/unit/test_aiocqhttp_group_info.py tests/unit/platform/test_lark_group_info.py tests/unit/platform/test_lark_sender_name.py tests/unit/platform/test_slack_group_info.py tests/unit/test_satori_group_info.py tests/unit/test_misskey_group_info.py tests/unit/platform/test_wecomai_group_info.py tests/unit/test_astr_message_event.py::TestGetGroup tests/unit/test_astrbot_message.py::TestGroup tests/unit/platform/test_mattermost_adapter.py tests/unit/platform/test_slack_event.py tests/unit/platform/test_dingtalk_adapter.py::test_dingtalk_group_message_includes_available_group_details tests/unit/platform/test_napcat_outbound.py::test_napcat_get_group_returns_group_details -q
AI-Generated: true
Generated-At: 2026-09-01T14:54:56Z
Skip empty non-streaming results before logging, receipts, persistence,
or OnAfterMessageSentEvent. Streaming results still go through.

Upstream-Commit: 385e4b6
Upstream-Author: 時壹 <137363396+KBVsent@users.noreply.github.com>
Upstream-PR: AstrBotDevs#9653
Sync-Disposition: adapt
Fork-Adaptation: Insert the empty-chain skip on the current RespondStage process path that owns delivery receipts and after-send hooks.
Tested: uv run pytest tests/unit/test_delivery_receipt.py tests/unit/test_message_tools.py::test_respond_stage_skips_same_text_after_send_message_to_user tests/unit/test_message_tools.py::test_respond_stage_sends_different_text_after_send_message_to_user tests/unit/test_message_tools.py::test_respond_stage_stops_typing_before_streaming_send -q
AI-Generated: true
Generated-At: 2026-09-01T14:56:49Z
Record the 34743f4..385e4b6 interval: four adapted commits, no
cherry-picks, and no skips. Advance the cursor to upstream/master.

AI-Generated: true
Generated-At: 2026-09-01T14:58:20Z
Finish fork adaptation of AstrBotDevs#9851. Copy inbound Group in
get_group, cap Slack/Lark/KOOK/Mattermost member pagination, skip LINE
member enumeration, join Telegram avatars with the file base URL, and
tolerate missing DingTalk conversation_title.

Upstream-PR: AstrBotDevs#9851
Sync-Disposition: adapt
Tested: uv run pytest tests/unit/platform/test_dingtalk_adapter.py tests/unit/platform/test_discord_adapter.py tests/unit/platform/kook tests/unit/platform/test_line_adapter.py tests/unit/platform/test_line_event.py tests/unit/platform/test_qqofficial_group_message_create.py tests/unit/platform/test_telegram_adapter.py tests/unit/test_aiocqhttp_group_info.py tests/unit/platform/test_lark_group_info.py tests/unit/platform/test_slack_group_info.py tests/unit/test_satori_group_info.py tests/unit/test_misskey_group_info.py tests/unit/platform/test_napcat_outbound.py tests/unit/platform/test_mattermost_adapter.py tests/unit/test_delivery_receipt.py tests/unit/test_astr_message_event.py tests/unit/test_astrbot_message.py -q
AI-Generated: true
Generated-At: 2026-09-01T16:04:17Z
Resolve default-market update info by repo then name when no persisted
install-source record exists. Do not persist implicit records. Enable
updates in serialize_plugin_base when a default-market match is possible.

Upstream-PR: AstrBotDevs#9887
Sync-Disposition: adapt
Tested: uv run pytest tests/unit/test_plugin_service.py tests/unit/dashboard/test_fastapi_v1_plugins.py -q
AI-Generated: true
Generated-At: 2026-09-01T16:04:43Z
Move this interval's user-visible notes out of 4.27.5, record the wrap-up
adaptations, and update the upstream ledger note without moving the cursor.

AI-Generated: true
Generated-At: 2026-09-01T16:07:20Z
Base get_group now returns a copy so queries cannot mutate inbound state.

Upstream-PR: AstrBotDevs#9851
Sync-Disposition: adapt
Tested: uv run pytest tests/unit/platform/test_wecomai_group_info.py -q
AI-Generated: true
Generated-At: 2026-09-01T16:11:20Z
Clone the last event on flush so WebChat retains queue-manager state,
and skip empty completion on buffered fragments so WebChat does not
emit end before the flush replies.

AI-Generated: true
Generated-At: 2026-09-01T22:01:31Z
Retry a failed WebChat turn from platform history when the conversation
checkpoint is missing, instead of rejecting the request.

AI-Generated: true
Generated-At: 2026-09-01T22:01:31Z
Load PluginPageHost and PluginDetailPage at file scope so Vue SFC
transform does not count against the default test timeout under
parallel make check.

AI-Generated: true
Generated-At: 2026-09-01T22:12:16Z
@BegoniaHe BegoniaHe self-assigned this Sep 1, 2026
from types import SimpleNamespace
from unittest.mock import AsyncMock, MagicMock, patch

import discord
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants