fix(desktop): declare a mode for Bot sessions - #4213
Open
orangeCatDeveloper wants to merge 3 commits into
Open
Conversation
orangeCatDeveloper
force-pushed
the
fix/bot-session-declared-mode
branch
3 times, most recently
from
August 29, 2026 20:07
f013205 to
45a2eba
Compare
Explore is a boundary a product mode confers, not one a caller may request directly, so the Bot adapter's bare `permissionMode: 'explore'` was rejected and no Bot conversation could open a session. Bot is such a mode, and it carries no name of its own so a Session still reads as the platform that opened it. `session.create.mode` accepts a value it did not before, and a Host that predates it answers `Invalid Session start mode`, so the compatibility epoch moves with it. Generated-by: Claude Code
`sessions:create` dropped the requested name whenever a mode was present, which held only while every mode carried a name of its own. The Host already resolves that precedence, so the name goes to it either way. Generated-by: Claude Code
The registry was born with Deep Research as its only member, so it lived in that module. `bot` is a sibling, not a Deep Research detail, and nobody looks for Bot permissions in a file named for Deep Research. Generated-by: Claude Code
orangeCatDeveloper
force-pushed
the
fix/bot-session-declared-mode
branch
from
August 29, 2026 20:11
45a2eba to
a6a5147
Compare
orangeCatDeveloper
marked this pull request as ready for review
August 29, 2026 20:34
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #4193
Every Bot conversation (Feishu, Telegram, WeCom) answers
Maka 暂时无法处理这条消息:机器人对话处理失败and no session is ever created, while the platform connection itself stays healthy.Root cause:
exploreis a boundary a product mode confers, not one a caller may request directly (create-session-input.ts), but the Bot adapter requested it directly —permissionMode: 'explore'with nomode.prepareCreaterejects that, and the rejection matches no category ingeneralizedErrorMessage, so the Bot shows the generic fallback and the failure reads like a platform or credentials problem. Desktop chat is unaffected: it starts atask.A Bot session is exactly such a product intent, so
botjoinsSESSION_START_MODE_SPECSand the adapter names it instead of asking forexplore. Unlike Deep Research it carries no name of its own —prepareCreateresolvesmode?.name ?? input.name, and a fixed spec name would flatten飞书 任务/Telegram 任务into one label — soSessionStartModeSpec.namebecomes optional. Itsmode:botlabel is reserved for free, sinceprepareCreatealready refuses caller-supplied mode labels.The registry itself moves from
deep-research.tstosession-start-mode.ts. It was born there when Deep Research was its only member;botis a sibling, not a Deep Research detail, and nobody looks for Bot permissions in a file named for Deep Research. Pure move — the importers that only wanted the generic symbols follow the new path.A mode without a name of its own also exposed a sibling defect:
sessions:createdropped the requested name whenever a mode was present, which held only while every mode carried one. It now forwards the name either way and leaves the precedence to the Host. The Bot adapter talks to the Host directly and never took that path, so this is a contract repair, not a second user-visible bug.Deliberately not covered:
bot-incoming-main.tsstill swallowsinvalid_requestinto机器人对话处理失败, which is what made this take a packaged-app patch to diagnose.updateSessionConfigurationstill admitsexplorewith no mode — the pathprepareSessionuses to re-arm a bound Bot session.Before / after, session creation with the input the Feishu Bot actually sends:
Both regressions are guarded where they were rejected — at the coordinator and at the IPC handler. The Bot adapter's own test never reached either: its fake client returns a session without entering
prepareCreate, which is why this shipped.Generative tooling: Claude Code (Opus 5) wrote this change; commits carry a
Generated-bytrailer.