chat.send created the abort controller but never registered the run
in chatRunState.registry. Lifecycle phase=error events then hit the
skipChatErrorFinal = isChatSendRunActive(runId) && !chatLink guard in
server-chat.ts and were dropped, so TUI/Web UI hung in 'waiting' on any
agent failure (401 auth, billing, timeout). /abort reported
'no active run' because no chat event ever reached the client.
Register the chat run right after the abort controller is created so
finalizeLifecycleEvent can resolve chatLink and emit chat.state='error'
as expected. Cleanup is already handled by finalizeLifecycleEvent's
registry.shift and abortChatRun's removeChatRun.
Also patch createChatContext() in chat.directive-tags.test.ts: the
harness was missing addChatRun even though SharedChatContext requires
it, which broke 37 chat.send tests after the fix.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(qqbot): enable qqbot plugin by default so runtime deps install before QR-code setup
The qqbot plugin manifest was missing the enabledByDefault: true flag.
Without it, ensureBundledPluginRuntimeDeps treats qqbot as bundled-but-
disabled-by-default (isBundledPluginConfiguredForRuntimeDeps returns
false when no qqbot channel/account is configured yet), so
@tencent-connect/qqbot-connector is never installed into
dist/extensions/qqbot/node_modules on first launch.
This creates a chicken-and-egg failure for the QR-code binding flow:
finalize.ts dynamically imports @tencent-connect/qqbot-connector to run
qrConnect(), but the package isn't present yet because no account is
configured — binding is exactly the step that configures the first
account. Users hit:
QQ Bot 绑定失败: Error [ERR_MODULE_NOT_FOUND]: Cannot find package
'@tencent-connect/qqbot-connector' imported from
.../dist/extensions/qqbot/channel-*.js
Adding enabledByDefault: true makes the host install qqbot's runtime
deps eagerly on first launch, mirroring the pattern already used by
mistral / groq / deepgram / amazon-bedrock-mantle and other bundled
plugins whose providers must be available before any channel config
exists. No code changes required; the existing runtime-deps install
pipeline handles everything once the gate is opened.
* fix(qqbot): changelog for enable-by-default fix (#71051) (thanks @cxyhhhhh)
---------
Co-authored-by: sliverp <870080352@qq.com>