feat: release contextual omnichannel customer platform

Add Telegram, WhatsApp and email account management, realtime messaging, contextual multilingual AI, customer intelligence, knowledge workflows, enterprise controls, a unified design system and complete repository documentation.
This commit is contained in:
wmq
2026-07-30 02:29:53 +08:00
parent 9804341463
commit af49d22ca7
66 changed files with 3181 additions and 554 deletions
+15 -4
View File
@@ -177,6 +177,16 @@ test('登录与核心工作台视觉链路', async ({ page }, testInfo) => {
await page.getByText('薄荷绿', { exact: true }).click()
await expect(page.getByTestId('message-list')).toHaveClass(/chat-wallpaper-mint/)
await expect(page.getByPlaceholder('输入回复内容,Enter 发送,Shift+Enter 换行')).toHaveClass(/min-h-\[86px\]/)
const targetLanguage = page.getByLabel('客户目标语言')
await expect(targetLanguage).toBeVisible()
if (testInfo.project.name !== 'mobile-chromium') {
await targetLanguage.selectOption('es')
await expect(targetLanguage).toHaveValue('es')
await page.reload()
await expect(page.getByLabel('客户目标语言')).toHaveValue('es')
await page.getByLabel('客户目标语言').selectOption('auto')
await expect(page.getByLabel('客户目标语言')).toHaveValue('auto')
}
await page.screenshot({ path: testInfo.outputPath('inbox.png'), fullPage: true })
})
@@ -205,7 +215,8 @@ test('conversation list reorders immediately from WebSocket events', async ({ pa
await page.goto('/inbox')
const items = page.getByTestId('conversation-item')
await expect(items.nth(1)).toBeVisible()
await expect.poll(() => sockets.length).toBeGreaterThanOrEqual(2)
// 页面跳转可能复用现有应用外壳,也可能重新建立连接;只要求当前至少存在一条可用连接。
await expect.poll(() => sockets.length).toBeGreaterThanOrEqual(1)
const target = items.nth(1)
const targetId = await target.getAttribute('data-conversation-id')
@@ -245,10 +256,10 @@ test('知识文件真实上传解析', async ({ page }, testInfo) => {
await page.locator('input[type="file"]').setInputFiles({
name: `visual-e2e-${testInfo.project.name}.txt`,
mimeType: 'text/plain',
buffer: Buffer.from('灵犀跨境视觉 E2E 知识解析测试。'),
buffer: Buffer.from('灵犀跨境视觉 E2E 知识解析测试,覆盖产品资料与售后政策。'),
})
await page.getByRole('button', { name: '上传并解析' }).click()
await expect(page.getByText(/知识文件解析完成/)).toBeVisible()
await page.getByRole('button', { name: /上传.*解析.*索引/ }).click()
await expect(page.getByText(/文件解析并建立检索索引/)).toBeVisible()
await page.screenshot({ path: testInfo.outputPath('knowledge-uploaded.png'), fullPage: true })
})