rogee
ca2a3c2dee
fix: localize API error messages
Build and publish Docker images / Build and publish images (push) Successful in 2m35s
2026-09-14 14:40:49 +08:00
rogee
4ad56ee9f8
Publish current project state
2026-09-14 10:47:21 +08:00
rogee
0dd188c46f
feat: complete current GoChat updates
2026-09-13 00:13:55 +08:00
rogee
c415d6d13f
feat: improve inbox management and conversation list
2026-09-12 14:42:57 +08:00
rogee
ca63efaa79
feat(frontend): add Shangwutong inbox presence actions
2026-09-12 10:41:55 +08:00
rogee
31f157a4f5
feat(shangwutong): sync classifications and update conversations
2026-09-11 17:08:18 +08:00
rogee
6eee55860f
fix(agent): allow super admins to manage agents
2026-09-11 11:38:15 +08:00
rogee
f29a94339b
fix(frontend): localize agent creation errors
2026-09-11 11:28:46 +08:00
Rogee and rogee
cb0b554e94
HH-555: remove advanced assignment commercial gate ( #138 )
...
* fix(HH-555): remove advanced assignment paywall
* fix(HH-555): gate assignment entries with assignment v2
---------
Co-authored-by: Rogee <rogee@ipao.vip >
2026-08-23 23:19:51 +08:00
Rogee and rogee
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
Rogee and rogee
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
Rogee and rogee
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
Rogee and rogee
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
Rogee and rogee
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
Rogee and rogee
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
Rogee and rogee
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
518f9c5d6b
fix: 修复客服权限与收件箱配置问题
2026-08-08 19:52:18 +08:00
Rogee
5c47d1d5fe
fix(shangwutong): 完善访客资料同步
2026-08-06 15:14:32 +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
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
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
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
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
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
f923791d39
update
2026-07-12 12:20:23 +08:00
rogee
7f2d5579ff
fix: stabilize development config and account settings
2026-07-11 17:15:38 +08:00
rogee
690796a7de
fix: resolve 4 bugs from QA round 6 (BUG-F/G/H/I)
...
BUG-F (P1): Fake webhook lookupInbox used JSONB @> operator on a TEXT
column, causing all fake webhooks to return "ignored". Cast
channel_config::jsonb before the @> operator.
BUG-G (P3): Vue Router history.state warning on Activity page. Four
call sites replaced history.state with null/{}, destroying Vue Router's
internal navigation state. Now all replaceState calls preserve
window.history.state.
BUG-H (P3): Inbox list showed stale data because cache_keys endpoint
returned hardcoded "0000000000" for inbox/label/team, so the frontend
IndexedDB cache never invalidated. Cache keys are now derived from
actual DB state (row count + MAX(updated_at)), with defensive fallback
for missing tables.
BUG-I (P3): All worker goroutines shared the same Redis consumer name,
so XINFO CONSUMERS showed 1 consumer instead of N. Each goroutine now
generates a unique consumer ID (workerID-index).
2026-07-10 16:59:26 +08:00
rogee
05af5ebcbc
fix: harden fake channel — production guard, token validation, typing events, URL validation, capability narrowing
...
- Guard fake channel with GOCHAT_ENV check: skip init() registration,
bootstrap wiring, and inbox creation in production
- Reject empty-token webhooks in production (was silently skipped)
- Use PostgreSQL jsonb @> query for inbox lookup, keep SQLite fallback
- Replace isValidURL string-prefix hack with net/url.Parse
- Handle typing.start/typing.stop by returning nil (no garbage messages)
- Narrow Capabilities to only implemented features (Attachments, Replies)
- Hide fake channel from frontend channel list in production builds
2026-07-10 10:55:54 +08:00
rogee
9c852cd99b
add fake channel
2026-07-09 18:14:45 +08:00
rogee
be38051ac5
Fix Reports 500, Settings white screen, SidebarGroup exceptions
...
ISS-01: Fix reporting_events_rollups table schema mismatch
- The init migration (000001) created columns (dimension, dimension_value,
metric_name, value, value_in_business_hours, period) that do not match
the GORM model which expects (date, dimension_type, dimension_id, metric,
count, sum_value, sum_value_business_hours)
- Add migration 000048 to drop and recreate the table with correct schema
matching the GORM model and all Go code that references it
- Fixes: GET /api/v2/accounts/:id/reports returning HTTP 500 with
'column date does not exist (SQLSTATE 42703)'
ISS-02: Fix Settings > General page white screen
- AccountId.vue: add null-safe access for currentAccount.value.id before
calling toString() — currentAccount can be {} when account data not yet
loaded in store
- BuildInfo.vue: add null-safe access for globalConfig.value.gitSha and
globalConfig.value.appVersion; guard copyGitSha with existence check;
add v-if guard on gitSha span in template
ISS-04: Fix SidebarGroup mounted hook exceptions
- SidebarGroup.vue: Object.keys(child.to.params) throws TypeError when
child.to.params is undefined; add null-safe fallback Object.keys(child.to?.params ?? {})
- This was the source of the 29 recurring JS exceptions on every Settings
page navigation
ISS-05: Fix Vue Router root path warning
- Add root route { path: '/', redirect: '/app/login' } to silence
'No match found for location with path /' warning
2026-07-08 10:02:29 +08:00
rogee
8aeee9ebc7
Fix frontend login flow: merge v3 auth routes, fix vite proxy, SPA redirect
2026-07-07 18:57:11 +08:00
rogee
321c61aaae
Vendor Chatwoot Vue 3 frontend into frontend/
...
Copy the Chatwoot (v4.14.0) frontend runnable subset into frontend/ for
customization:
- app/javascript/ (Vue SPA: dashboard, widget, sdk, portal, superadmin)
- app/views/ (ERB templates for vite-plugin-ruby entrypoint resolution)
- app/helpers/, app/assets/ (Rails view helpers, static assets)
- enterprise/ (Enterprise edition frontend overlay)
- config/vite.json, vite.config.ts, bin/vite (Vite-Rails toolchain)
- package.json, pnpm-lock.yaml, tailwind/postcss/eslint configs
- Gemfile, Gemfile.lock (vite_rails gem for bin/vite binstub)
Excluded Rails backend: controllers, models, services, jobs, mailers,
policies, db, lib, spec, public, node_modules.
Update references to the new frontend location:
- .gitignore: exclude frontend build artifacts (node_modules, tmp, packs),
keep frontend/bin/ and frontend/vendor/ via negation
- backend/scripts/parity_frontend_smoke.sh: CHATWOOT_DIR default
reference/chatwoot -> ../frontend
- backend/scripts/parity_frontend_browser_smoke.mjs: same default update
- AGENTS.md: add frontend section with Rails/Vite coupling notes
- README: architecture tree includes frontend/
2026-07-07 14:56:01 +08:00