Add smart ACK provider for WeChat MP replies
Replace fixed ackText with a rule-based AckProvider that picks response templates by message type and intent (translate, summary, rewrite, poster, ppt, mindmap, code, search, schedule). Pure sync, zero I/O, auto-falls back to config.ackText on any error. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
> **生产环境警示:当前目录 `/Users/john/Project/Memind` 为生产目录与生产环境,禁止重启服务,所有操作必须谨慎并优先避免影响在线流量。**
|
||||
> **隔离说明:这份文档只讲生产 / 测试 / 预览边界和事故恢复,不是本地联调手册。要做本机开发,请看 [docs/local-dev.md](./local-dev.md)。**
|
||||
|
||||
# 生产 / 测试 / 预览隔离规程
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
| 环境 | 目录 | 用途 | 端口 |
|
||||
|------|------|------|------|
|
||||
| 生产 | `/Users/john/Project/Memind` | `g2.tkmind.cn` 当前在线服务(阿里云解析 → 105 → 本地 Mac 1.6) | `8081` |
|
||||
| 生产 Plaza | `/Users/john/Project/Memind` + Plaza | `plaza.tkmind.cn` 当前在线服务(105 反代到 Studio) | `3001` |
|
||||
| 生产 | `/Users/john/Project/Memind` | `g2.tkmind.cn` 当前在线服务(阿里云解析 → 105 → 本机 Mac) | `8081` |
|
||||
| 生产 Plaza | `/Users/john/Project/Memind` + Plaza | `plaza.tkmind.cn` 当前在线服务 | `3001` |
|
||||
| 生产入口 | `/Users/john/Project/Memind/scripts/g2-lb.Caddyfile` | 105 转发入口 / 反代配置 | `8090` |
|
||||
| 测试 Portal | `/Users/john/Project/test/Memind` | 开发预览 API / Portal | `18081` |
|
||||
| 测试 Vite | `/Users/john/Project/test/Memind` | 开发预览前端 | `15173` |
|
||||
| 测试 Admin | `/Users/john/Project/test/Memind` | 开发预览后台 | `18082` |
|
||||
| 测试 Plaza | `/Users/john/Project/test/Memind` | 开发预览 Plaza | `13001` |
|
||||
| 测试 Ops | `/Users/john/Project/test/Memind` | 开发预览 Ops | `13002` |
|
||||
| 测试 Portal | `/Users/john/PycharmProjects/test/test-memind` | 开发预览 API / Portal | `18081` |
|
||||
| 测试 Vite | `/Users/john/PycharmProjects/test/test-memind` | 开发预览前端 | `15173` |
|
||||
| 测试 Admin | `/Users/john/PycharmProjects/test/test-memind` | 开发预览后台 | `18082` |
|
||||
| 测试 Plaza | `/Users/john/PycharmProjects/test/test-memind` | 开发预览 Plaza | `13001` |
|
||||
| 测试 Ops | `/Users/john/PycharmProjects/test/test-memind` | 开发预览 Ops | `13002` |
|
||||
|
||||
硬规则:
|
||||
|
||||
@@ -63,8 +63,8 @@ g2.tkmind.cn 生产请求
|
||||
| 项目目录 | 记忆含义 |
|
||||
|----------|----------|
|
||||
| `/Users/john/Project/Memind` | 生产项目的开发记忆 |
|
||||
| `/Users/john/Project/test/Memind` | 测试项目的开发记忆 |
|
||||
| `/Users/john/Project/test/test_tkmind_go` | 测试 Goose 的开发记忆 |
|
||||
| `/Users/john/PycharmProjects/test/test-memind` | 测试项目的开发记忆 |
|
||||
| 测试 Goose 项目目录(按本机实际路径填写) | 测试 Goose 的开发记忆 |
|
||||
|
||||
硬规则:
|
||||
|
||||
@@ -109,7 +109,7 @@ scripts/install-prod-services.sh
|
||||
优先在测试目录进行:
|
||||
|
||||
```bash
|
||||
cd /Users/john/Project/test/Memind
|
||||
cd /Users/john/PycharmProjects/test/test-memind
|
||||
```
|
||||
|
||||
启动前先确认生产还在:
|
||||
@@ -145,7 +145,7 @@ pnpm dev
|
||||
如果只改前端样式,优先只启动 Vite:
|
||||
|
||||
```bash
|
||||
cd /Users/john/Project/test/Memind
|
||||
cd /Users/john/PycharmProjects/test/test-memind
|
||||
VITE_PORT=15173 \
|
||||
H5_PUBLIC_BASE_URL=http://127.0.0.1:15173 \
|
||||
VITE_MINDSPACE_BASE=http://127.0.0.1:15173 \
|
||||
@@ -171,6 +171,68 @@ pnpm dev:vite -- --host 127.0.0.1 --port 15173
|
||||
|
||||
测试 H5 如果要连测试 Goose,必须在测试目录 `.env` 中显式设置对应地址,不能指向生产 Goose。
|
||||
|
||||
## goosed extension 堆积与文件句柄告警
|
||||
|
||||
如果 H5 / MindSpace 侧出现下面这类错误:
|
||||
|
||||
```text
|
||||
会话策略同步失败:{"message":"Failed to add extension: IO error: Too many open files (os error 24)"}
|
||||
```
|
||||
|
||||
先不要直接重启生产服务。这个报错在本机更常见的含义是:
|
||||
|
||||
- `goosed agent` 下面堆积了过多旧的 extension 子进程。
|
||||
- macOS `launchctl limit maxfiles` 软上限偏低时,`/agent/add_extension` 会先撞到文件句柄上限。
|
||||
- 如果恢复会话时无条件重启 agent,会把旧子进程堆得更快。
|
||||
|
||||
先做只读确认:
|
||||
|
||||
```bash
|
||||
launchctl limit maxfiles
|
||||
lsof -nP -iTCP -sTCP:LISTEN | rg '18006|18007|8081|3001|8090'
|
||||
for pid in 51613 51657; do
|
||||
echo "PID $pid $(ps -p $pid -o command=)"
|
||||
lsof -n -p $pid 2>/dev/null | wc -l
|
||||
done
|
||||
ps -axo pid,ppid,etime,command | rg 'mindspace-sandbox-mcp|mcp-server-fetch|goosed agent'
|
||||
```
|
||||
|
||||
判断口径:
|
||||
|
||||
- `8081`、`3001`、`8090` 正常监听,说明主站未必有故障。
|
||||
- 如果某个 `goosed agent` 的 FD 数已经逼近或超过 `256`,优先怀疑 extension 子进程堆积。
|
||||
- 如果同一个 `MindSpace/<id>` 在同一个 `goosed` 父进程下出现多个 `mindspace-sandbox-mcp.mjs`,通常只应保留最新一个。
|
||||
|
||||
安全处理顺序:
|
||||
|
||||
1. 先确认主站端口 `8081`、`3001`、`8090` 正常,不要把 route 问题误判成全站宕机。
|
||||
2. 不先杀 `goosed agent` 主进程,也不要碰 `8081` 上的 `server.mjs`。
|
||||
3. 优先只清理同父进程、同 `MindSpace/<id>` 下重复堆积的旧 `mindspace-sandbox-mcp.mjs` 子进程,以及重复的旧 `mcp-server-fetch` 子进程。
|
||||
4. 清理后立刻复查 `18006` / `18007` 的 `/status` 和 `goosed` FD 数,确认 agent 仍存活。
|
||||
|
||||
这次线上排查的经验值:
|
||||
|
||||
- 两个 `goosed agent` 的 FD 数曾达到 `263` / `209`,而 `launchctl limit maxfiles` 软上限是 `256`。
|
||||
- 仅清理重复 extension 子进程后,FD 数降到 `96` / `77`,`18006` 和 `18007` 的 `/status` 仍为 `ok`。
|
||||
- 代码层已改为仅在会话策略真正变化时才触发 agent 重启,减少恢复会话时继续堆积 extension 子进程的概率。
|
||||
|
||||
自动巡检:
|
||||
|
||||
- `scripts/monitor-goosed-fds.mjs` 每次检查 `goosed agent` FD 数和 `mindspace-sandbox-mcp.mjs` 子进程数。
|
||||
- `scripts/install-goosed-monitor.sh` 会安装 `~/Library/LaunchAgents/cn.tkmind.goosed-monitor.plist`,默认每 60 秒运行一次。
|
||||
- 默认策略只清理:
|
||||
- orphan 的 sandbox MCP 子进程;
|
||||
- 同一父进程、同一 `MindSpace/<id>` 下超过 2 个的重复 sandbox MCP;
|
||||
- 总 sandbox MCP 数超过 80 时最旧的一批。
|
||||
- 默认不按存活时间清理单个老进程,避免误伤长会话。
|
||||
- goosed FD 超过 `GOOSED_FD_WARN=180` 只记录 warning;超过 `GOOSED_FD_RESTART=3200` 才滚动重启对应 goosed。
|
||||
|
||||
硬规则:
|
||||
|
||||
- 不要因为 `Too many open files` 先去重启 `8081` 生产 Portal。
|
||||
- 不要在未确认影响窗口前直接重启 `goosed agent` 主进程。
|
||||
- 优先清理“明显重复”的 extension 子进程,而不是清空所有 agent 子进程。
|
||||
|
||||
## 数据库口径
|
||||
|
||||
短期如果沿用同一个 RDS 库,只允许做 UI 和非破坏性流程预览。
|
||||
@@ -190,7 +252,7 @@ pnpm dev:vite -- --host 127.0.0.1 --port 15173
|
||||
|
||||
最小检查:
|
||||
|
||||
1. 在测试端口(如 `18081`)完成开发与预览,不要在生产目录跑 `pnpm dev`。
|
||||
1. 在测试端口(如 `18081`)完成开发与预览;本机联调目录请看 [docs/local-dev.md](./local-dev.md),不要把这份规程当成开发启动手册。
|
||||
2. `pnpm run build` + `pnpm test`。
|
||||
3. `curl -s http://127.0.0.1:8081/api/status` 确认生产仍在线。
|
||||
4. `./rsync_to_server.sh --dry-run` 预览 diff,确认后再执行正式发布。
|
||||
@@ -220,10 +282,3 @@ curl -s http://127.0.0.1:8081/api/status
|
||||
```bash
|
||||
curl -s http://127.0.0.1:8090/api/status
|
||||
```
|
||||
|
||||
如果要同时确认 Plaza 和 `gadm`,直接检查:
|
||||
|
||||
```bash
|
||||
curl -s https://plaza.tkmind.cn/plaza
|
||||
curl -s https://gadm.tkmind.cn/healthz
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user