diff --git a/docs/superpowers/specs/2026-10-12-unified-kefu-platform-design.md b/docs/superpowers/specs/2026-10-12-unified-kefu-platform-design.md index 3f01b10..338c7ab 100644 --- a/docs/superpowers/specs/2026-10-12-unified-kefu-platform-design.md +++ b/docs/superpowers/specs/2026-10-12-unified-kefu-platform-design.md @@ -147,7 +147,7 @@ class TenantRegistry: | 文件 | 现状 | 改造后 | |---|---|---| -| config.py | 全局 Settings 读 .env | 拆 ProcessSettings(.env:平台库路径/端口/超管初始密码)+ TenantConfig(platform.db) | +| config.py | 全局 Settings 读 .env | 拆 ProcessSettings(.env:平台库路径/端口/超管初始密码)+ TenantConfig(platform.db);顺带丢弃 Redis 死配置(REDIS_URL/REDIS_PASSWORD) | | ai_service.py | import 时读 4 提示词 | PromptProvider 挂 TenantRuntime;组装 = system.md + company_facts.md + `$DEFLECTION_POOL` 注入 + 当轮 context reminder | | conversation.py(约 1250 行) | 3 组模块级正则 + 逐字话术 | 正则/话术从 config.wall 编译;Manager 每租户实例化;**只做依赖注入,不重写结构** | | boundary_filter.py | 正则话术焊死 | 纯函数化:接收已编译词表,机制与数据分离 | @@ -171,8 +171,8 @@ class TenantRegistry: ### 6.3 前端 -1. widget.js:启动时 `fetch /api/public/brand`(Host 已识别租户,免鉴权返回品牌 JSON)→ 与 data-* 合并(data-* 优先);失败时 data-*/中性默认兜底;no-cache。 -2. 客户端 key 全部租户化:`cc-widget-host-`、`widget_invite_dismissed__`、chat 页 localStorage 会话 key 同理——同页双挂件根治。 +1. widget.js:启动时 `fetch /api/public/brand`(Host 已识别租户,免鉴权返回品牌 JSON,**响应携带 tenant slug**)→ 与 data-* 合并(data-* 优先);失败时 data-*/中性默认兜底;no-cache。 +2. 客户端 key 全部租户化(`` 取 brand 响应里的 tenant slug):`cc-widget-host-`、`widget_invite_dismissed__`、chat 页 localStorage 会话 key 同理——同页双挂件根治。 3. widget.js 与 chat.html 保持零构建原生 JS(嵌入官网资产必须轻量零依赖);主题派生单元机制不变,默认值来自品牌配置。 ### 6.4 目标目录结构 @@ -248,7 +248,7 @@ all-kefu/ ``` chat.agent.hnxinyouhe.com ─┐ chat2.agent.hnxinyouhe.com ─┼→ 1Panel 各站点反代 → 127.0.0.1:8018 → all-kefu 容器 -admin.xxx.com(新) ─┘ +admin.xxx.com(新,具体值部署前由需求方确定)─┘ ``` - 一个容器一个 upstream;compose 固定 `name: all-kefu`(互删根因根治——只剩一个 compose 项目);WS 升级头单套(426 教训);`/static/widget.js` no-cache(缓存教训);`--workers 1`。 @@ -258,7 +258,7 @@ admin.xxx.com(新) ─┘ ## 10. 测试策略 -1. **机制测试全保留**:jc 的 230 项 + 上游独有测试,移植到统一 conftest——租户夹具(临时 platform.db + auto/jc 两个种子租户 + 各自租户库),断言基本不动;LLM 全 mock 原则不变。 +1. **机制测试全保留**:jc 的全部机制测试(约 320 个用例,实测计数;jc 文档旧称 230 项)+ 上游独有测试,移植到统一 conftest——租户夹具(临时 platform.db + auto/jc 两个种子租户 + 各自租户库),断言基本不动;LLM 全 mock 原则不变。 2. **多租户专项(改造的回归安全网)**:Host 路由(A 域名进 A、未知 Host 404);跨租户数据隔离(A 的 admin/API 摸不到 B 数据);配置热切换(保存新提示词→下一条消息生效;改词表→墙行为即时变);前缀唯一约束;快照深合并默认值;试金石判定;widget 客户端 key 租户前缀(静态断言);停用租户行为。 3. **真实 LLM 验收**:真实智谱 Key + scripts/mock_uniservice.py 联调流程照旧(沿用 test-checklist 体系)。