diff --git a/README.md b/README.md
index b66f7d0..aa63024 100644
--- a/README.md
+++ b/README.md
@@ -188,7 +188,7 @@ flowchart TD
│ └── ai/ # LLM / RAG / MCP related logic
├── web/ # unified Next.js frontend
│ ├── app/dashboard/ # admin dashboard
-│ ├── app/kefu/ # customer service entry and chat pages
+│ ├── app/support/ # customer service entry and chat pages
│ ├── components/ # React components
│ ├── lib/ # API client, SDK source and utilities
│ ├── public/sdk/ # built embeddable SDK assets
@@ -255,8 +255,8 @@ make web-dev
- 管理后台:`http://localhost:3000/dashboard`
- 客服工作台:`http://localhost:3000/dashboard/conversations`
-- 客户侧 Web 接入示例:`http://localhost:3000/kefu`
-- 客户侧聊天页:`http://localhost:3000/kefu/chat`
+- 客户侧 Web 接入示例:`http://localhost:3000/support/demo`
+- 客户侧聊天页:`http://localhost:3000/support/chat`
生产构建时,前端统一由 `web` 工程构建,静态产物输出到 `web/out`,后端会从 `web/out` 提供静态资源。
@@ -308,7 +308,7 @@ docker run --rm -p 8083:8083 \
- 管理后台:负责 AI Agent、知识库、客服组、工单与运营配置
- 客服工作台:负责接管会话、处理消息与人工服务
-- 客户侧 Web 接入:通过 `/kefu`、`/kefu/chat` 和 `web/public/sdk` 中的嵌入式脚本承接用户咨询入口
+- 客户侧 Web 接入:通过 `/support/demo`、`/support/chat` 和 `web/public/sdk` 中的嵌入式脚本承接用户咨询入口
这使得`贝壳AI客服`可以同时覆盖:
diff --git a/config/config.example.yaml b/config/config.example.yaml
index 352d540..494c4e7 100644
--- a/config/config.example.yaml
+++ b/config/config.example.yaml
@@ -1,7 +1,7 @@
server:
port: 8083
cors:
- # 浏览器跨域白名单。生产环境必须改为实际前端/嵌入站点域名,例如 https://kefu.example.com。
+ # 浏览器跨域白名单。生产环境必须改为实际前端/嵌入站点域名,例如 https://support.example.com。
# 留空表示不允许跨域请求,只支持同源或非浏览器调用。
allowedOrigins:
- http://127.0.0.1:8083
diff --git a/docs b/docs
index e0dc728..a86a0d2 160000
--- a/docs
+++ b/docs
@@ -1 +1 @@
-Subproject commit e0dc72852cc50e5b885f2bf702c607b512bb91ab
+Subproject commit a86a0d2c03bf5f53bba44b26f4dfbff61c6e694b
diff --git a/web/app/dashboard/channels/_components/edit.tsx b/web/app/dashboard/channels/_components/edit.tsx
index 40c9278..79005eb 100644
--- a/web/app/dashboard/channels/_components/edit.tsx
+++ b/web/app/dashboard/channels/_components/edit.tsx
@@ -7,7 +7,7 @@ import { z } from "zod/v4"
import { CopyIcon, ExternalLinkIcon } from "lucide-react"
import { toast } from "sonner"
-import { getWidgetDemoPath } from "@/components/kefu/demo-navigation"
+import { getWidgetDemoPath } from "@/components/support-chat/demo-navigation"
import { OptionCombobox } from "@/components/option-combobox"
import { ProjectDialog } from "@/components/project-dialog"
import { Button } from "@/components/ui/button"
diff --git a/web/app/support/chat/closed/page.tsx b/web/app/support/chat/closed/page.tsx
index aa7d166..da1a0ab 100644
--- a/web/app/support/chat/closed/page.tsx
+++ b/web/app/support/chat/closed/page.tsx
@@ -14,9 +14,9 @@ export default function Page() {
- {t("kefu.closedDescription")} + {t("supportChat.closedDescription")}
${escapeHTML(t("kefu.imageSummary"))}
` + return `${escapeHTML(t("supportChat.imageSummary"))}
` } if (message.messageType === "attachment") { if (asset?.url) { - const title = escapeHTML(asset.filename || message.content || t("kefu.attachmentSummary")) + const title = escapeHTML(asset.filename || message.content || t("supportChat.attachmentSummary")) const meta = formatFileSize(asset.fileSize ?? 0) const metaHTML = meta ? `` : "" return `` } - return `${escapeHTML(message.content || t("kefu.attachmentSummary"))}
` + return `${escapeHTML(message.content || t("supportChat.attachmentSummary"))}
` } return renderTextMessageHTML(message.content || "") @@ -77,13 +77,13 @@ export function summarizeIMMessage(message: { payload?: string }) { if (message.messageType === "image") { - return t("kefu.imageSummary") + return t("supportChat.imageSummary") } if (message.messageType === "attachment") { const asset = parseMessageAssetPayload(message.payload) return asset?.filename?.trim() - ? `${t("kefu.attachmentSummary")} ${asset.filename.trim()}` - : t("kefu.attachmentSummary") + ? `${t("supportChat.attachmentSummary")} ${asset.filename.trim()}` + : t("supportChat.attachmentSummary") } if (message.messageType === "html") { const text = extractTextFromHTML(message.content) @@ -91,11 +91,11 @@ export function summarizeIMMessage(message: { return text.substring(0, 100) } if (message.content.includes("