Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
afd1077
feat: add minimal ACP chat delivery
lulusir Jun 29, 2026
2940da3
fix: localize preference enum descriptions
lulusir Jun 29, 2026
2c0ca7a
feat: add ACP queued messages
lulusir Jul 2, 2026
0edf1eb
feat: improve ACP agentic chat experience
lulusir Jul 3, 2026
8aa109d
feat(ai-native): show permission count in tab title
lulusir Jul 3, 2026
a754e13
fix(ai-native): refresh ACP session commands
lulusir Jul 3, 2026
808bead
feat: support panel layout aware menu bar
lulusir Jul 3, 2026
a9c763d
fix(ai-native): show safe progress in ACP minimal mode
lulusir Jul 3, 2026
1475c7c
feat: add ACP agent configuration selector
lulusir Jul 6, 2026
2f484cc
feat(ai-native): configure ACP agents from header
lulusir Jul 6, 2026
bdff386
test(ai-native): cover agentic editor target reveal
lulusir Jul 6, 2026
049b58d
fix(ai-native): prevent mention select dropdown clipping
lulusir Jul 6, 2026
fe36d50
feat(ai-native): improve agentic chat experience
lulusir Jul 7, 2026
cd35958
fix(ai-native): restore inline new chat action
lulusir Jul 7, 2026
a20c96d
test(playwright): stabilize e2e smoke coverage
lulusir Jul 7, 2026
2f277e8
docs: remove obsolete context glossary
lulusir Jul 7, 2026
b2248fc
test: split extension smoke playwright config
lulusir Jul 7, 2026
8513f16
test: adjust agentic history e2e coverage
lulusir Jul 8, 2026
6a40767
fix(ai-native): keep agentic new chat in draft
lulusir Jul 8, 2026
058ef3d
fix(playwright): harden flaky e2e helpers
lulusir Jul 8, 2026
58a3159
fix(playwright): stabilize remaining e2e flakes
lulusir Jul 8, 2026
43cd64a
test: stabilize scm playwright view opening
lulusir Jul 9, 2026
820f816
test: stabilize extension host restart e2e
lulusir Jul 9, 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
2 changes: 1 addition & 1 deletion .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
run: |
yarn run download-extension
yarn run rebuild:node
SUPPORT_LOAD_WORKSPACE_BY_HASH=true yarn start:e2e &
SUPPORT_LOAD_WORKSPACE_BY_HASH=true OPENSUMI_E2E_COMMANDS=true yarn start:e2e &
bash tools/playwright/scripts/wait.sh && cd tools/playwright && yarn run ui-tests-ci

- name: Upload test results
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
.DS_Store

.package-temp-dir
.tmp/

# Logs
logs
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"test:module": "cross-env NODE_OPTIONS=--max-old-space-size=5120 tsx ./scripts/module-jest",
"test:ui": "tsx ./scripts/run-ui-tests",
"test:ui-ci": "tsx ./scripts/run-ui-tests --ci=true",
"test:ui-concurrent-smoke": "tsx ./scripts/run-ui-tests --concurrentSmoke=true",
"test:ui-headful": "tsx ./scripts/run-ui-tests --headful=true",
"test:ui-report": "tsx ./scripts/run-ui-tests --report=true",
"update-disttag": "tsx ./scripts/dist-tag",
Expand Down
35 changes: 18 additions & 17 deletions packages/ai-native/__test__/browser/acp-chat-history.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,17 @@ jest.mock('@opensumi/ide-components', () => {
},
}),
Loading: () => React.createElement('span', { 'data-testid': 'acp-chat-history-loading' }),
Popover: ({ children, content, title }: any) =>
Popover: ({ children, content, id, position, title }: any) =>
React.createElement(
'div',
{ 'data-testid': 'mock-popover', title },
{ 'data-testid': 'mock-popover', 'data-popover-id': id, 'data-position': position, title },
children,
React.createElement('div', { 'data-testid': 'mock-popover-content' }, content),
),
PopoverPosition: {
bottomRight: 'bottomRight',
top: 'top',
topLeft: 'topLeft',
},
PopoverTriggerType: {
click: 'click',
Expand Down Expand Up @@ -225,24 +226,19 @@ describe('AcpChatHistory BDD', () => {
expect(getRenderedItemIds()).toEqual(['acp:current', 'acp:middle', 'acp:oldest']);
});

it('Given inline variant, when the header renders, then the title is replaced by the new-chat action', () => {
it('Given inline variant, when the header renders, then the title is replaced by inline actions without new chat', () => {
const onNewChat = jest.fn();
renderHistory({ variant: 'inline', title: 'AI Assistant', onNewChat });

const title = container.querySelector('.chat_history_header_title') as HTMLElement;
const newChatAction = title.querySelector('.chat_history_header_actions_new') as HTMLElement;

expect(title.textContent).not.toContain('AI Assistant');
expect(newChatAction).not.toBeNull();

act(() => {
newChatAction.dispatchEvent(new MouseEvent('click', { bubbles: true }));
});

expect(onNewChat).toHaveBeenCalledTimes(1);
expect(newChatAction).toBeNull();
expect(onNewChat).not.toHaveBeenCalled();
});

it('Given inline variant has an MCP config action, when the header renders, then it appears after the new-chat action and opens MCP config', () => {
it('Given inline variant has an MCP config action, when the header renders, then it appears after collapse and opens MCP config', () => {
const onOpenMCPConfig = jest.fn();
renderHistory({ variant: 'inline', onOpenMCPConfig, onToggleHistoryCollapsed: jest.fn() });

Expand All @@ -254,11 +250,7 @@ describe('AcpChatHistory BDD', () => {
).map((action) => action.className);
const mcpAction = inlineActions.querySelector('.chat_history_header_actions_mcp') as HTMLElement;

expect(actionClasses).toEqual([
'chat_history_header_actions_collapse',
'chat_history_header_actions_new',
'chat_history_header_actions_mcp',
]);
expect(actionClasses).toEqual(['chat_history_header_actions_collapse', 'chat_history_header_actions_mcp']);
expect(mcpAction).not.toBeNull();

act(() => {
Expand Down Expand Up @@ -294,11 +286,20 @@ describe('AcpChatHistory BDD', () => {
expect(onToggleHistoryCollapsed).toHaveBeenCalledTimes(1);
});

it('Given inline variant supports collapse, when the collapse action renders at the left edge, then its tooltip opens toward the right', () => {
renderHistory({ variant: 'inline', onToggleHistoryCollapsed: jest.fn() });

const collapsePopover = container.querySelector('[data-popover-id="ai-chat-header-collapse-history"]');

expect(collapsePopover).not.toBeNull();
expect(collapsePopover?.getAttribute('data-position')).toBe('topLeft');
});

it('Given inline history is collapsed, when it renders, then it keeps header actions and hides the history list', () => {
renderHistory({ variant: 'inline', historyCollapsed: true, onToggleHistoryCollapsed: jest.fn() });

expect(container.querySelector('.chat_history_header_actions_new')).not.toBeNull();
expect(container.querySelector('.chat_history_header_actions_collapse')).not.toBeNull();
expect(container.querySelector('.chat_history_header_actions_new')).toBeNull();
expect(container.querySelector('[data-testid="acp-chat-history-collapsed"]')).not.toBeNull();
expect(container.querySelector('[data-testid="acp-chat-history-inline"]')).toBeNull();
});
Expand Down
Loading
Loading