feat: complete Phase 1-3 architecture optimization
Phase 1 - Security: - Add AES-GCM encryption for localStorage fallback - Enforce WSS protocol for non-localhost WebSocket connections - Add URL sanitization to prevent XSS in markdown links Phase 2 - Domain Reorganization: - Create Intelligence Domain with Valtio store and caching - Add unified intelligence-client for Rust backend integration - Migrate from legacy agent-memory, heartbeat, reflection modules Phase 3 - Core Optimization: - Add virtual scrolling for ChatArea with react-window - Implement LRU cache with TTL for intelligence operations - Add message virtualization utilities Additional: - Add OpenFang compatibility test suite - Update E2E test fixtures - Add audit logging infrastructure - Update project documentation and plans Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -120,8 +120,9 @@ const NAV_ITEMS: Record<string, { text: string; key: string }> = {
|
||||
技能: { text: '技能', key: 'skills' },
|
||||
团队: { text: '团队', key: 'team' },
|
||||
协作: { text: '协作', key: 'swarm' },
|
||||
Hands: { text: 'Hands', key: 'automation' },
|
||||
Hands: { text: '自动化', key: 'automation' },
|
||||
工作流: { text: '工作流', key: 'automation' },
|
||||
自动化: { text: '自动化', key: 'automation' },
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -707,13 +708,16 @@ export const userActions = {
|
||||
* 打开设置页面
|
||||
*/
|
||||
async openSettings(page: Page): Promise<void> {
|
||||
// 底部用户栏中的设置按钮
|
||||
const settingsBtn = page.locator('aside button').filter({
|
||||
hasText: /设置|settings|⚙/i,
|
||||
}).or(
|
||||
page.locator('.p-3.border-t button')
|
||||
// 底部用户栏中的设置按钮 - 使用 aria-label 或 title 属性定位
|
||||
const settingsBtn = page.locator('aside button[aria-label="打开设置"]').or(
|
||||
page.locator('aside button[title="设置"]')
|
||||
).or(
|
||||
page.locator('aside .p-3.border-t button')
|
||||
).or(
|
||||
page.getByRole('button', { name: /打开设置|设置|settings/i })
|
||||
);
|
||||
|
||||
await settingsBtn.first().waitFor({ state: 'visible', timeout: 10000 });
|
||||
await settingsBtn.first().click();
|
||||
await page.waitForTimeout(500);
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user