Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f492336
feat(web-shell): present structured shell execution results
Sep 20, 2026
a10f2c6
Merge branch 'main' into codex/web-shell-command-card
ytahdn Sep 20, 2026
c34536c
fix(shell): preserve cleanup notices and clarify result fallbacks
Sep 20, 2026
6c2ee93
fix(test): sync shell result source mappings
Sep 20, 2026
ac01af9
chore: merge origin/main into codex/web-shell-command-card
qwen-code-dev-bot Sep 20, 2026
69a6f7c
fix(web-shell): address shell command card review findings (#12311)
Sep 20, 2026
af4e121
test(core): isolate gitPush tests from host git config (#12311)
Sep 20, 2026
d23096e
fix(core): stage browser-use runtime on demand in core prebuild (#12311)
Sep 20, 2026
22f6db3
fix(web-shell): treat empty string shell display as authoritative (#1…
Sep 21, 2026
9b470cc
Merge branch 'main' into codex/web-shell-command-card
ytahdn Sep 21, 2026
aacd8e5
fix(core): preserve shell display and recording diagnostics
Sep 21, 2026
1c5a526
Merge commit 'refs/pull/12311/head' of github.com:QwenLM/qwen-code in…
Sep 21, 2026
eae2ca8
feat(web-shell): add session tool calls panel with prompt selection
Sep 22, 2026
d10c768
Merge remote-tracking branch 'origin/main' into feat/web-shell-turn-c…
Sep 22, 2026
0ad9565
fix(web-shell): address tool calls review findings
Sep 23, 2026
6f68391
fix(web-shell): keep prompt text out of persisted dock state
Sep 23, 2026
5aad27e
fix(web-shell): restore sender tool call identity and review fixes
Sep 23, 2026
88b9e25
docs(web-shell): record real daemon sender verification
Sep 23, 2026
8fce4a3
Merge origin/main into feat/web-shell-turn-calls-panel
Sep 23, 2026
20a5809
Merge origin/main trajectory overview updates
Sep 23, 2026
2e424ef
Merge origin/main conversation search updates
Sep 24, 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
Prev Previous commit
Merge origin/main conversation search updates
  • Loading branch information
钉萁
钉萁 committed Sep 24, 2026
commit 2e424efa8ee875995edf0c363db85a262c0f3e76
3 changes: 3 additions & 0 deletions packages/web-shell/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,9 @@ daemon 参数的完整含义和配置方式见
| `onAssistantTurnSettled` | `(event: WebShellAssistantTurnSettledEvent) => void` | daemon 权威终态提交后触发;多个 provider 可能重复上报,宿主按 `(sessionId, promptId)` 去重 |
| `settings` | `WebShellSettingsOptions` | 可选。控制原生 `/settings` 页面的呈现;见 [原生设置呈现](#原生设置呈现)。 |
| `showToolCalls` | `boolean` | 是否展示用户消息旁的工具调用入口;默认 `false`,独立页面设置为 `true`。 |
| `modelManagement` | `WebShellModelManagementOptions` | 可选。控制 WebShell 内模型新增/删除交互,默认均允许;见 [模型增删交互](#模型增删交互)。 |

移动访问二维码入口由 `header.showMobileAccess?: boolean` 控制,默认隐藏,适用于主聊天和分屏页头。独立入口 `main.tsx` 显式设为 `true`,保留本地 Qwen Code 用户的入口。

宿主可以通过 `onContextUsageOpen?: (sessionId: string) => void` 接管上下文
详情的打开操作:
Expand Down
60 changes: 60 additions & 0 deletions packages/web-shell/client/components/TranscriptViewport.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,66 @@ describe('TranscriptViewport', () => {
'old',
);
});
it('keeps an open search and its query when the navigation host changes', async () => {
const { store, props, ref } = await setup(true, false, 4);
const renderSearch = (hidden = false, sessionKey = 'session') =>
act(async () =>
root!.render(
<ConversationSearch
key={sessionKey}
threshold={0}
messageListRef={ref}
>
{(trigger) => (
<TranscriptViewport
{...props}
ref={ref}
hideSessionTimeline={hidden}
timelineAction={trigger}
/>
)}
</ConversationSearch>,
),
);
await renderSearch();
const trigger = container!.querySelector<HTMLButtonElement>(
'button[aria-label="chat.searchConversation"]',
)!;
expect(trigger).not.toBeNull();
await act(async () => trigger.click());
const input = document.querySelector<HTMLInputElement>(
'input[type="search"]',
)!;
await act(async () => {
input.focus();
Object.getOwnPropertyDescriptor(
HTMLInputElement.prototype,
'value',
)!.set!.call(input, 'typed query');
input.dispatchEvent(new Event('input', { bubbles: true }));
});
expect(input.value).toBe('typed query');
await act(async () =>
store.configure({ sessionId: 'session', supported: false }),
);
expect(document.querySelector('[role="dialog"]')).not.toBeNull();
expect(
document.querySelector<HTMLInputElement>('input[type="search"]')?.value,
).toBe('typed query');
expect(document.activeElement).not.toBe(document.body);
await renderSearch(true);
expect(
container!.querySelector('button[aria-label="chat.searchConversation"]'),
).toBeNull();
expect(document.querySelector('[role="dialog"]')).not.toBeNull();
expect(
document.querySelector<HTMLInputElement>('input[type="search"]')?.value,
).toBe('typed query');
expect(document.activeElement).not.toBe(document.body);
await renderSearch(false, 'other-session');
expect(document.querySelector('[role="dialog"]')).toBeNull();
});

it.each([0, 3, 4])(
'requires at least four indexed turns (count=%i)',
async (count) => {
Expand Down
3 changes: 3 additions & 0 deletions packages/web-shell/client/components/TranscriptViewport.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -526,6 +526,9 @@ export const TranscriptViewport = forwardRef<
key={viewport.viewKey}
ref={list}
messages={viewport.messages}
timelineAction={
globalNavigation ? undefined : props.timelineAction
}
hideSessionTimeline={
historical || globalNavigation || props.hideSessionTimeline
}
Expand Down
Loading
You are viewing a condensed version of this merge commit. You can view the full changes here.