Commit Graph
65 Commits
Author SHA1 Message Date
Rogeeandrogee acf53be827 fix(HH-552): hide bot fallback from widget replies (#131)
Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-23 20:59:10 +08:00
Rogeeandrogee e11f478c1a fix(HH-550): scope assignment upgrade prompts to cloud (#129)
Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-23 20:38:01 +08:00
Rogeeandrogee eb83d241fe HH-547: allow cross-origin widget requests (#126)
* HH-547: allow cross-origin widget requests

* fix(HH-547): align production preflight with wildcard CORS

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-23 20:11:04 +08:00
Rogeeandrogee 867092fd99 HH-530: replace user-facing Chatwoot branding with GoChat (#117)
* fix(HH-530): replace user-facing Chatwoot branding

* fix(HH-530): close branding review blockers

* test(HH-530): cover update banner binding

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-23 18:14:02 +08:00
Rogeeandrogee f719529d66 fix(security): harden auth and secret handling (HH-444) (#101)
* fix(security): harden auth and credential handling (HH-444)

* fix(security): address HH-444 review blockers

* fix(security): close remaining HH-444 review blockers

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-22 15:45:06 +08:00
Rogeeandrogee 02a188dc29 HH-443: establish production CI and supply-chain evidence (#93)
* ci: enforce production release gates

* ci: close release gate review blockers

* ci: preserve verified digests during promotion

* ci: serialize and verify release cleanup

* ci: build govulncheck with Shangwutong toolchain

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-22 03:26:38 +08:00
Rogeeandrogee 038f185b57 H-392: surface Captain playground failures (#66)
Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-21 13:01:13 +08:00
Rogeeandrogee b31b1b9562 H-337: restore Web widget reply visibility (#64)
* H-337: restore widget reply delivery

* H-337: harden widget conversation ownership

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-20 22:22:27 +08:00
Rogeeandrogee abb1bed424 H-337: add local Captain acceptance fixture (#63)
* H-337: add local Captain acceptance fixture

* fix(H-337): close acceptance fixture review gaps

* fix(H-337): reject non-string skill metadata

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-20 20:05:40 +08:00
Rogeeandrogee 6c78820a1f H-338: close H-335 release blockers (#59)
* H-16: align takeover with channel AI workflow (#2)

* feat(conversations): complete manual AI takeover

* fix(conversations): align AI takeover flow with channel AI

* fix(conversations): close takeover review gaps

---------

Co-authored-by: Rogee <rogee@ipao.vip>

* feat(shangwutong): sync customer names back to channel (#3)

Co-authored-by: Rogee <rogee@ipao.vip>

* fix(shangwutong): close contact sync review gaps (#4)

Co-authored-by: Rogee <rogee@ipao.vip>

* H-28: harden Shangwutong CID sync (#5)

* fix(shangwutong): close contact sync review gaps

* fix(shangwutong): harden CID sync boundaries

---------

Co-authored-by: Rogee <rogee@ipao.vip>

* fix(conversations): sync AI takeover exit in realtime (#6)

Co-authored-by: Rogee <rogee@ipao.vip>

* test(shangwutong): cover CID rename reliability (#7)

Co-authored-by: Rogee <rogee@ipao.vip>

* H-43: fix WEB Captain takeover E2E flow (#8)

* test(shangwutong): cover CID rename reliability

* H-43: fix WEB Captain takeover flow

* H-48: preserve compatible provider model

* H-49: make Captain takeover atomic

* H-50: prevent duplicate widget initialization

---------

Co-authored-by: Rogee <rogee@ipao.vip>

* H-55: make Captain bindings atomic (#9)

Co-authored-by: Rogee <rogee@ipao.vip>

* H-60: harden Captain migration rollback and concurrency

* chore(agent): baseline — uncommitted work from the local directory

* H-335: add safe Captain skills and user deactivation

* H-338: close auth and Captain review blockers

* H-338: close assignment and session races

* H-338: close assignment and websocket invalidation gaps

* H-338: enforce assignment write invariants

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-20 10:21:19 +08:00
Rogeeandrogee 6e582c767c H-296: cover stale Captain Skills list errors (#52)
* test: cover stale captain skill list errors

* test: flush stale skill request rejection

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-19 20:24:10 +08:00
Rogeeandrogee f50eacdc92 H-289: add Captain Skill management UI (#47)
* H-289: add Captain Skill management UI

* H-289: guard Captain Skill assistant switches

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-18 15:34:26 +08:00
Rogeeandrogee 21a9a6793d H-162: serve built frontend from Go image (#34)
Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-15 20:49:26 +08:00
Rogeeandrogee 74eb006985 H-43: fix WEB Captain takeover E2E flow (#8)
* test(shangwutong): cover CID rename reliability

* H-43: fix WEB Captain takeover flow

* H-48: preserve compatible provider model

* H-49: make Captain takeover atomic

* H-50: prevent duplicate widget initialization

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-13 14:49:04 +08:00
Rogeeandrogee 0555b296cc fix(conversations): sync AI takeover exit in realtime (#6)
Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-13 01:28:31 +08:00
Rogeeandrogee 83a8ab315a H-16: align takeover with channel AI workflow (#2)
* feat(conversations): complete manual AI takeover

* fix(conversations): align AI takeover flow with channel AI

* fix(conversations): close takeover review gaps

---------

Co-authored-by: Rogee <rogee@ipao.vip>
2026-08-12 22:57:06 +08:00
rogee 4bf6ba6b20 feat(conversations): complete manual AI takeover 2026-08-12 21:16:49 +08:00
Rogee 4be52e05c7 fix: 收紧客服功能访问权限 2026-08-08 20:28:18 +08:00
Rogee dcfd4b4b9d fix: 修复系统消息长链接溢出 2026-08-08 19:54:06 +08:00
Rogee 518f9c5d6b fix: 修复客服权限与收件箱配置问题 2026-08-08 19:52:18 +08:00
Rogee 5c47d1d5fe fix(shangwutong): 完善访客资料同步 2026-08-06 15:14:32 +08:00
Rogee 3bceb2d0b2 fix(conversations): 优化列表时间显示 2026-08-06 11:31:14 +08:00
Rogee 8d002d1dbe fix(conversations): 修复会话标识与解决后跳转 2026-08-06 11:19:39 +08:00
Rogee b78f963472 chore: 提交剩余开发改动
包含商务通消息映射、会话时间与未读状态、前端消息展示、数据库修复迁移、测试覆盖备份及 Captain 设计文档。
2026-08-06 10:10:25 +08:00
Rogee 8f2cc12628 fix(conversations): 修复状态切换与历史会话路由
- 处理历史主键与 display_id 冲突,确保消息和状态操作命中同一会话
- 允许已软删除收件箱中的历史会话切换状态
- 解决会话后自动打开列表中的相邻会话
2026-08-06 10:08:05 +08:00
Rogee 3d7ff5a6b1 chore: complete Shangwutong connector integration 2026-08-04 18:00:10 +08:00
rogee 897b4e018f feat(channels): add Shangwutong connector 2026-08-03 10:13:40 +08:00
Rogee 3a62f01942 fix(ui): 自定义工具表单 overflow-y-scroll→auto + 认证方式NONE翻译改为'无' + Captain文档爬虫/同步后端 2026-08-01 21:25:55 +08:00
Rogee 1446cfe701 feat(channels): 社交渠道 OAuth 改进 + 集成应用重命名 + AI 流程文档
- Facebook/Instagram/TikTok 渠道 OAuth 授权流程改进
- 新增 oauth/credentialstore 包
- 集成应用 OpenAI 重命名为 OpenAI 兼容 (migration 061)
- 消息生命周期与 AI 流程架构文档
- inbox 管理界面 i18n 更新
2026-08-01 19:38:27 +08:00
Rogee 63df5b8b91 fix(captain): 试验场不查 FAQ 知识库 + 添加常见问题报 400
三个问题修复:

1. 添加常见问题报 400 (assistant_id 类型不匹配)
   - CreateResponseDialog.vue: route.params.assistantId 是字符串,
     传给后端 uint 字段导致 JSON 反序列化失败
   - 修复: Number(route.params.assistantId) 转为数字
   - 同时修复 POST /assistant_responses 无尾部斜杠 307 重定向问题

2. 试验场 playground 不做 RAG 检索
   - generatePlaygroundLLMResponse 只构建 system prompt + 对话历史,
     从不查 FAQ 知识库
   - 新增 retrieveFAQContext(): embed 用户问题 → pgvector 搜索 approved
     FAQ → 注入 system prompt
   - 受 feature_faq 配置开关控制

3. FAQ embedding 无法写入 (pgvector 序列化 + 维度问题)
   - pgvector stub 无 driver.Valuer, GORM Save() 报 SQLSTATE 42804
   - 新增 UpdateEmbedding() 用 ?::vector 原始 SQL 绕过
   - SimilaritySearch 排除 embedding 列 + 手动格式化向量字面量
   - embedding 列从 vector(1536) 改为 vector (跟随模型维度)
   - FAQ 创建/更新时自动索引 embedding (SetRAGService 注入)
2026-08-01 19:37:19 +08:00
Rogee bb4c4bb807 fix(captain): 护栏/回复指南编辑按钮不生效
根因:
1. guardrails/guidelines 页面直接导航时 store 无助手记录,getRecord
   返回空对象导致列表为空、编辑无数据
2. storeFactoryHelper updateRecord 用 EDIT mutation(仅更新已有记录),
   store 为空时 API 返回数据被丢弃

修复:
- storeFactoryHelper: updateRecord 改用 UPSERT,确保 API 返回记录始终写入 store
- guardrails/Index.vue & guidelines/Index.vue: onMounted 时若 store 无记录
  则 dispatch captainAssistants/show 拉取单条助手数据
2026-08-01 16:24:09 +08:00
Rogee cd82d079e3 fix(ws): 发送 WebSocket 协议级 Ping 控制帧防止 60s 后连接断开
writePump 只发 ActionCable 文本 JSON ping,从不发 websocket.PingMessage,
导致 readPump 的 PongHandler 永远不触发,ReadDeadline(60s) 到期后连接
被强制关闭。前端每 60 秒弹出"离线""重连"通知。

修复:在 ticker 中先发 PingMessage 控制帧(浏览器自动回 Pong 重置
ReadDeadline),再发 ActionCable 文本 ping(保活 ConnectionMonitor)。

同时包含此前会话中的其他变更:
- 移除安全设置(SAML)页面及路由
- 新增超级管理员控制台前端页面
- platform agent_bots 路由使用 Platform* handler
- 超级管理员入口改为 SPA 内路由跳转
2026-07-30 16:55:44 +08:00
Rogee 57c56c849d fix: 帮助中心设置页报 No valid base URL found in configuration
根因:portalHelper.js getDefaultBaseURL() 在 hostURL 和 helpCenterURL
均为空时直接抛错,但 index.html 中两者默认都是空字符串(表示同源)。
当配置为空时应 fallback 到 window.location.origin 而非抛错。

修复:将空字符串 fallback 改为 window.location.origin,移除 throw。
2026-07-30 11:29:43 +08:00
Rogee 73065d6888 i18n: 翻译会话/帮助中心/集成模块剩余英文文案
- conversation.json: 会话标签计数、语音通话、引用回复、文件类型、
  原生应用提示、邮件转录、Shopify 订单/支付/履行状态等 35 条
- helpCenter.json: 批量翻译/操作、草稿/发布语言、分类排序、
  门户设置(自定义域名/DNS/CNAME)、PDF 上传、内容生成等 46 条
- integrations.json (INTEGRATION_SETTINGS): Shopify 连接/删除、
  Webhook 密钥/搜索、OpenAI 语气/回复选项、Linear/Notion 集成等 40 条
2026-07-30 11:26:06 +08:00
Rogee 6001231cac i18n: 批量翻译公司菜单及全局未翻译英文文案
覆盖 37 个 zh_CN locale JSON 文件,主要模块:
- companies: 公司 CRUD、详情页、联系人关联、属性、头像、删除等 50+ 条
- settings: 个人设置(消息签名/安全/MFA/SLA通知)、账单积分购买、
  APP_GLOBAL/CREATE_ACCOUNT/SIDEBAR 等全局文案
- agentBots/agentMgmt/attributesMgmt: 搜索、机器人配置、属性类型
- automation: 创建/搜索/事件/动作/消息类型
- bulkActions: 批量分配/解决确认文案
- campaign: WhatsApp 营销活动全流程
- contact: 联系人批量操作、备注、新建会话搜索
- report: CSAT/团队/收件箱报告描述、审核备注、评分分布
- signup/resetPassword/login: 注册流程、密码重置、邮箱验证
- snooze: 自然语言时间解析器(分钟/小时/天/月/序数等)
- whatsappTemplates: 模板选择器、参数解析、OTP/优惠券
- yearInReview: 年度回顾全部文案
- onboarding/macros/labelsMgmt/cannedMgmt/teamsSettings 等

保留未翻译:品牌名(Captain/Copilot/WhatsApp 等)、
技术术语(API/URL/SLA/CSAT/SDK 等)、SAML SSO(已移除方向)
2026-07-30 11:23:08 +08:00
Rogee 6e4d6bc137 i18n: 翻译 Captain 文档/工具/助手护栏/回复指南模块中文文案
- zh_CN/integrations.json DOCUMENTS: 批量删除/同步、筛选器、同步状态、
  同步错误、表单类型、操作选项、空状态等 30+ 条翻译
- zh_CN/integrations.json CUSTOM_TOOLS: 创建/编辑/删除、表单字段、认证配置、
  参数、测试、空状态等 40+ 条翻译
- zh_CN/integrations.json ASSISTANTS.GUARDRAILS: 标题、描述、批量操作、
  示例/新增/空状态/API 消息等 20+ 条翻译
- zh_CN/integrations.json ASSISTANTS.RESPONSE_GUIDELINES: 同上 20+ 条翻译
- zh_CN/integrations.json ASSISTANTS.SETTINGS: 基础/系统设置描述、
  控制项标题/描述/护栏/回复指南翻译
- zh_CN/integrations.json RESPONSES: 待审核标题、横幅、空状态翻译
- guardrails/Index.vue: 硬编码示例护栏数据翻译
- guidelines/Index.vue: 硬编码示例回复指南数据翻译
2026-07-30 10:57:57 +08:00
Rogee 95b85b6da9 i18n: 翻译 Captain > Scenarios 模块中文文案
- zh_CN/integrations.json: SCENARIOS 块全部 30+ 条 i18n key 翻译为中文
  (标题、描述、批量操作、表单标签/占位符/校验、空状态、API 消息等)
- zh_CN/settings.json: 侧边栏 CAPTAIN_SCENARIOS 标签 Scenarios → 场景
- scenarios/Index.vue: 硬编码示例场景数据(标题/描述/指令)翻译为中文
2026-07-30 10:50:04 +08:00
Rogee 92c625ea4a fix: 修复登录后白屏 + label标签闪屏
白屏: security.routes.js 缺少 security_settings_index 命名路由,
SidebarGroup 的 router.resolve 抛错导致所有 sidebar 组件渲染失败.
修复: 添加命名子路由指向空占位组件.

闪屏: 后端 FilterParams.Labels 用 form:"labels" 绑定,
无法解析 Chatwoot 前端的 labels[] 数组参数, label 过滤从未生效.
IntersectionObserver 检测到"还有更多数据"不断触发 loadMore,
8秒内发出 1000+ 次重复请求形成无限循环.
修复: 新增 LabelsArr []string 字段绑定 form:"labels[]",
在 handler 中合并到 Labels 字段.
2026-07-30 10:37:38 +08:00
Rogee 04b999e377 refactor: 移除 FakeMessagePlatform channel 全部逻辑、展示、配置
- 删除 channels/fake/ 整个 Node.js FakeMessagePlatform (8文件)
- 删除后端 FakeProvider (fake.go + fake_test.go) + FakeWebhookHandler (fake_webhook.go)
- bootstrap.go: 移除 FakeProvider 接线 + isFakeChannelEnabled()
- router.go: 移除 FakeWebhook 字段 + /webhooks/fake/:identifier 路由
- provider.go: 移除 ChannelFake 常量
- inbox_service.go: 移除 fake channel 类型验证 + isFakeChannelAllowed()
- 前端: 移除 Fake.vue + ChannelFactory/ChannelList/ChannelItem 引用 + i18n (en/zh_CN)
- package.json: 移除 fake:start/dev/test/dev:all 脚本
- pnpm-workspace.yaml: 移除 channels/fake
- .env/.env.example/quickstart: 移除 GOCHAT_ALLOW_FAKE_CHANNEL
- 测试: bridge_listener_test 改用 web_widget, router_test 移除 fake 路由断言
- 保留 fake:ai LLM Provider (backend/internal/llm/fake_provider.go) — 与 channel 无关
2026-07-30 09:09:17 +08:00
Rogee 851ca7e372 refactor: 移除 SAML/LDAP/MFA 登录方式,仅保留本地账号密码和 OIDC
后端移除:
- SAML: auth/saml.go, handler/saml_handler.go, account_saml_settings_handler.go,
  model/account_saml_settings.go, model/saml_idp_config.go, repo/*.go
- LDAP: auth/ldap.go, handler/ldap_handler.go, model/account_ldap_settings.go,
  repo/account_ldap_settings_repo.go
- MFA: auth/mfa.go, handler/mfa_handler.go
- auth_service: 移除 mfaService 依赖、MFARequired 字段、LoginWithMFA 方法
- auth_handler: 移除 LoginMFA handler、MFA 分支逻辑
- bootstrap: 移除 SAML/LDAP/MFA service 初始化和 handler 注册
- sso_middleware: 精简为仅支持 OIDC provider
- router: 移除 SAML/LDAP/MFA 路由注册
- config: 移除 SAMLConfig/LDAPConfig struct 和 defaults

前端移除:
- v3/login: 移除 MFA 验证流程和 SAML 登录入口
- v3/api/auth: 移除 MFA 响应处理
- v3/routes: 移除 SSO login 路由
- dashboard: 移除 MFA 设置页面、SAML 安全设置页面
- i18n: 移除 mfa.json
- featureFlags: 移除 SAML feature flag

.env.example / .env: 移除 SAML/LDAP 配置段
2026-07-29 19:03:04 +08:00
Rogee 7ed53bec47 chore: 修复登录页与前端开发服务器配置
- vite dev server 端口改为 5000 并启用 strictPort,端口冲突时拒绝启动
- AGENTS.md 更新前端目录结构说明(移除已删除的 ERB/enterprise 目录)及端口文档
- v3 登录页精简:移除 useBranding/globalConfig 依赖,去掉忘记密码链接
- 中文登录表单翻译优化(Email → 电子邮件)
2026-07-29 14:49:20 +08:00
Rogee 83386dff75 fix: 修复4个已知BUG — P1 ChatList/P2 错误密码/P3 Copilot崩溃/P3超管entrypoint
P1: ChatList.vue — 添加 conversationStats watch fallback,检测 stats>0
   但 chatList 为空时自动触发 fetchConversations
P2: api.js parseAPIErrorResponse — 处理 error 字段为对象时提取 .message
P3: CopilotContainer.vue — activeAssistant 判空保护
P3: 新建 super_admin.html + vite.config.ts rewrite 规则
    (注:entrypoint 仅含样式,Vue应用代码待补)
防御: NotificationTable.vue — 可选链保护 primary_actor.meta 路径
2026-07-29 09:55:24 +08:00
rogee d16bb55d91 feat(realtime): complete fake channel reply flow 2026-07-13 14:57:28 +08:00
rogee a712b91982 fix(copilot): harden provider configuration flow 2026-07-13 14:57:28 +08:00
rogee 19cee9af11 fix(copilot): align runtime configuration contracts 2026-07-13 14:57:28 +08:00
rogee 8b9eedc0e2 feat(copilot): finish configuration center 2026-07-13 14:57:28 +08:00
rogee df23caf7d9 feat(copilot): move provider configuration to settings 2026-07-12 22:27:29 +08:00
rogee f39943629f fix: remove enterprise mode gating 2026-07-12 22:19:51 +08:00
rogee 813faa4cd7 fix(messages): normalize webhook reply references 2026-07-12 22:17:04 +08:00
rogee b0bb7f0702 fix(frontend): stop offline conversation request loop 2026-07-12 22:16:16 +08:00