Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e36c361
feat(web-shell): show channel sessions in sidebar
Aug 3, 2026
b71723b
feat(web-shell): configure channel session scope
Aug 3, 2026
c587b58
fix(web-shell): refresh channel session transcripts
Aug 3, 2026
2ad35da
feat(web-shell): group channel sessions by platform
Aug 3, 2026
2902406
Merge branch 'main' into feat/web-shell-channel-sessions
wenshao Aug 3, 2026
f7085af
fix(channels): address session review feedback
Aug 4, 2026
7b8cb27
test(web-shell): harden channel session coverage
Aug 4, 2026
9a89c60
test: pin remaining channel session review findings
Aug 4, 2026
75131e2
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 4, 2026
b642c44
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 4, 2026
f65f88e
fix: harden channel session sidebar and display projections (#8457)
qwen-code-dev-bot Aug 4, 2026
3548a83
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 4, 2026
455da46
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 5, 2026
cce359a
chore: merge origin/main into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 7, 2026
dcf1443
Merge origin/main into feat/web-shell-channel-sessions
Aug 9, 2026
3ebb5a3
fix(channels): address session review feedback
Aug 9, 2026
06aed4c
Merge remote-tracking branch 'origin/main' into feat/web-shell-channe…
Aug 9, 2026
022a8ee
fix(channels): address channel session review feedback
Aug 10, 2026
9fdfc0e
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 10, 2026
3757f98
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 10, 2026
602f484
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 10, 2026
a749747
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 10, 2026
2a06b7e
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 11, 2026
6fcc12d
Merge remote-tracking branch 'origin/main' into feat/web-shell-channe…
Aug 11, 2026
ad78844
fix(channels): harden channel session review round-7 criticals (#8457)
Aug 11, 2026
146fb6a
Merge remote-tracking branch 'origin/main' into feat/web-shell-channe…
Aug 11, 2026
7745971
fix(web-shell): harden first-visit session section latches (#8457)
Aug 11, 2026
92c02d2
fix(channels): address review round-8 findings (#8457)
Aug 11, 2026
84db931
test(web-shell): pin round-8 sidebar behavior fixes (#8457)
Aug 11, 2026
ad02a53
Merge branch 'main' into feat/web-shell-channel-sessions
qwen-code-dev-bot Aug 12, 2026
13b771d
fix(channels): address review round-9 findings (#8457)
Aug 12, 2026
0aea248
Merge remote-tracking branch 'origin/main' into feat/web-shell-channe…
Aug 12, 2026
06336a2
fix(web-shell): pin Other channels group after platform sections (#8457)
Aug 12, 2026
e961edd
Merge remote-tracking branch 'origin/main' into feat/web-shell-channe…
Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions docs/design/2026-08-03-web-shell-channel-session-scope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Web Shell channel session scope

## Motivation

Channel runtimes already route incoming messages according to `sessionScope`,
but the Web Shell channel editor only renders platform-specific management
fields. Users can therefore configure credentials and access policy, but cannot
choose which conversations share an agent session.

## Design

Add the existing shared `sessionScope` setting to every manageable channel type
in the daemon channel catalog. Preserve a plugin-provided field when one exists;
otherwise advertise an enum with the runtime-supported values and the plugin's
default scope.

Render the field in a dedicated session section of the channel editor. New and
legacy configurations show their effective default, and saving writes the
selected value through the existing channel upsert request.

The available scopes are:

- `user`: one session per sender and chat.
- `thread`: one session per routing thread, falling back to the chat.
- `chat_thread`: one session per chat and nested thread.
- `single`: one session shared by the entire channel instance.

## Compatibility

The runtime router and persisted configuration format are unchanged. Existing
configurations without `sessionScope` retain their current plugin default until
they are edited and saved. Unmanageable channel types do not advertise the
field.

## Verification

- Assert catalog defaults for DingTalk and GitHub.
- Assert the management store accepts every runtime-supported scope.
- Assert new and legacy editor drafts use the effective default.
- Verify the Web Shell can select and persist a non-default scope end to end.
68 changes: 68 additions & 0 deletions docs/design/2026-08-03-web-shell-channel-session-sidebar.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Web Shell channel sessions in the sidebar

## Motivation

Daemon-managed channels create ordinary workspace sessions with
`sourceType: "channel"`, but the Web Shell sidebar intentionally requests only
the `default` session catalog. A session started from DingTalk, Feishu, or
another channel therefore cannot be opened from the sidebar even though it is
stored in the selected workspace.

## Design

Add a two-option source switch above the sidebar's project session list:

- **Tasks** lists `sourceType: "default"` and remains the initial selection.
- **Channels** lists `sourceType: "channel"`.

The switch is shown only when the daemon advertises
`session_source_metadata`. Older daemons keep the current unfiltered request
and do not show a control they cannot support.

The selected source is applied consistently to active, pinned, archived, and
secondary-workspace session requests. Existing session rows, workspace
sections, grouping, search, polling, and open-session actions are reused.
Because channel sessions can be created by external messages without a Web
Shell mutation event, the expanded Channels list uses the active-session poll
interval instead of the 30-second idle interval.

When the selected workspace also advertises `channel_management`, the Channels
catalog joins each session's immutable channel instance name (`sourceId`) to
the current channel configuration and groups sessions by `config.type`. The
type catalog supplies the platform label, so multiple instances of the same
platform share one collapsible section. Sessions whose instance no longer
exists remain visible under Other channels. If the catalog is unavailable, the
list keeps its existing fallback instead of hiding sessions. Channel type grouping
overrides user-defined session groups in the Channels view; Tasks keeps its
existing organization behavior. Secondary workspaces resolve their own
workspace-scoped channel catalog.

Channel adapters still prepend their model-facing instructions and contextual
history. The daemon prompt carries the user-authored text separately as
transcript display metadata, so live and replayed Web Shell messages do not
expose that hidden context and channel session titles derive from the same
visible text.

## Boundaries

- Channel configuration and runtime management are unchanged.
- Session source metadata and daemon list APIs are unchanged.
- Session Overview and Split View keep their existing default-session scope.
- The switch is in-memory UI state and resets to Tasks on page reload.
- Channel type classification reflects the current workspace configuration;
sessions do not persist a historical platform type.

## Verification

- Assert the source switch is gated by `session_source_metadata`.
- Assert Tasks is initially selected and requests `sourceType: "default"`.
- Assert selecting Channels requests `sourceType: "channel"` for primary and
workspace-qualified lists.
- Assert the Channels list polls on the active-session interval.
- Assert multiple instances of one platform share a collapsible type section,
other platform sessions remain separate, pinned sessions stay in their type
section, and unmatched sessions remain under Other channels.
- Assert channel prompts preserve full model context while recording only the
user-authored text for transcript display.
- Run the sidebar and workspace-section unit tests, Web Shell build, and
TypeScript typecheck.
Loading
Loading