From 8c8c42bc71ed680c0761ce477d53f8471f6cfb79 Mon Sep 17 00:00:00 2001 From: yangxuan Date: Thu, 13 Aug 2026 22:00:04 +0800 Subject: [PATCH] auto backup 2026-08-13 22:00 --- agents/main/agent/models.json | 58 ++++++++--- .../main/agent/plugins/deepseek/catalog.json | 46 --------- ...684ebfd353e0041620fc28215fd7c2a9d.attested | 2 +- workspace-cc/MEMORY.md | 18 ++-- workspace-cc/memory/2026-08-12.md | 97 ++++++++++++------- 5 files changed, 116 insertions(+), 105 deletions(-) delete mode 100644 agents/main/agent/plugins/deepseek/catalog.json diff --git a/agents/main/agent/models.json b/agents/main/agent/models.json index cad45a5..06a9e32 100644 --- a/agents/main/agent/models.json +++ b/agents/main/agent/models.json @@ -271,8 +271,7 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 32768, - "api": "openai-completions" + "maxTokens": 32768 }, { "id": "deepseek-v4-pro", @@ -288,8 +287,7 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 32768, - "api": "openai-completions" + "maxTokens": 32768 }, { "id": "deepseek-v4-flash", @@ -305,8 +303,7 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 8192, - "api": "openai-completions" + "maxTokens": 8192 }, { "id": "glm-5.1", @@ -323,8 +320,7 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 32768, - "api": "openai-completions" + "maxTokens": 32768 }, { "id": "kim-k2.6", @@ -340,8 +336,7 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 32768, - "api": "openai-completions" + "maxTokens": 32768 }, { "id": "qwen3.5-plus", @@ -358,16 +353,53 @@ "cacheWrite": 0 }, "contextWindow": 131072, - "maxTokens": 32768, - "api": "openai-completions" + "maxTokens": 32768 } ] }, "openai": { "baseUrl": "http://192.168.2.74:3000/v1", "apiKey": "sk-vaYyq9RwzyLlvAvHHUXzOTWkbioP76YW58vKuplq2npSkfZr", + "api": "openai-completions" + }, + "deepseek": { + "baseUrl": "https://api.deepseek.com/v1", + "apiKey": "sk-893b90b270ad4697a0b0b24969964d79", "api": "openai-completions", - "models": [] + "models": [ + { + "id": "deepseek-v4-pro", + "name": "DeepSeek V4 Pro", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 1, + "output": 2, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 384000 + }, + { + "id": "deepseek-v4-flash", + "name": "DeepSeek V4 Flash", + "reasoning": false, + "input": [ + "text" + ], + "cost": { + "input": 1, + "output": 2, + "cacheRead": 0, + "cacheWrite": 0 + }, + "contextWindow": 1000000, + "maxTokens": 384000 + } + ] } } } diff --git a/agents/main/agent/plugins/deepseek/catalog.json b/agents/main/agent/plugins/deepseek/catalog.json deleted file mode 100644 index 67c7e30..0000000 --- a/agents/main/agent/plugins/deepseek/catalog.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "generatedBy": "openclaw-plugin-model-catalog-v1", - "providers": { - "deepseek": { - "baseUrl": "https://api.deepseek.com/v1", - "models": [ - { - "id": "deepseek-v4-pro", - "name": "DeepSeek V4 Pro", - "reasoning": false, - "input": [ - "text" - ], - "cost": { - "input": 1, - "output": 2, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 1000000, - "maxTokens": 384000, - "api": "openai-completions" - }, - { - "id": "deepseek-v4-flash", - "name": "DeepSeek V4 Flash", - "reasoning": false, - "input": [ - "text" - ], - "cost": { - "input": 1, - "output": 2, - "cacheRead": 0, - "cacheWrite": 0 - }, - "contextWindow": 1000000, - "maxTokens": 384000, - "api": "openai-completions" - } - ], - "api": "openai-completions", - "apiKey": "sk-893b90b270ad4697a0b0b24969964d79" - } - } -} diff --git a/workspace-attestations/da0118d17fedeff844199c615950eb1684ebfd353e0041620fc28215fd7c2a9d.attested b/workspace-attestations/da0118d17fedeff844199c615950eb1684ebfd353e0041620fc28215fd7c2a9d.attested index 35cdaee..f738999 100644 --- a/workspace-attestations/da0118d17fedeff844199c615950eb1684ebfd353e0041620fc28215fd7c2a9d.attested +++ b/workspace-attestations/da0118d17fedeff844199c615950eb1684ebfd353e0041620fc28215fd7c2a9d.attested @@ -1,2 +1,2 @@ openclaw-workspace-attestation:v1 -2026-08-12T14:58:28.426Z +2026-08-12T15:13:35.208Z diff --git a/workspace-cc/MEMORY.md b/workspace-cc/MEMORY.md index 838bd34..1c6f982 100644 --- a/workspace-cc/MEMORY.md +++ b/workspace-cc/MEMORY.md @@ -9,15 +9,17 @@ - 公网 MySQL:101.34.227.188:3306,readonly,host `%`(可任意来源直连) - 公网 Redis:101.34.227.188:6379(AOF 持久化已支持) -## cc-square Node 轻服务(2026-08 替代 Spring Boot) -- 位置:/home/yangxuan/cc-square/server/ -- 架构:前端 → Node(Express) → MySQL(只读) + Redis(点击计数/排行) -- 关键:MySQL 仅只读,点击次数只存 Redis(ZINCRBY/ZREVRANGE 纯点击倒序) +## cc-square Node 轻服务(2026-08 替代 Spring Boot,已上线) +- 位置:/home/yangxuan/cc-square/server/(VPS 部署:/opt/cc-square,git 项目) +- 架构:前端 → nginx(/api rewrite) → Node(Express,48080) → MySQL(只读) + Redis(点击/排序) +- 关键:MySQL 仅只读,点击次数只存 Redis(ZINCRBY/ZREVRANGE 纯点击倒序),不落库 - 初始化脚本:npm run init-redis(需先注入 MYSQL_PASSWORD/REDIS_PASSWORD 环境变量) -- 文档:DEPLOY.md(部署)/ FRONTEND-CHANGES.md(前端改造) -- 部署状态(2026-08-12):pm2 运行中,端口 48080,内存 ~45MB,内存占用远低于原 Spring Boot -- 前端已改造:env.js(baseUrl=/api,走 nginx 反代) + http.js(去认证) + nav.js(/app-api/tab/ → /tab/) -- 密码:MySQL readonly 密码 135246;Redis 密码 5gynj20J(存放于 server/.env,供 Node 服务启动用) +- 文档:DEPLOY.md(部署/更新流程)/ FRONTEND-CHANGES.md(前端改造) +- 部署(2026-08-12 生产生效):pm2 运行于 VPS,端口 48080,内存 ~45MB +- 前端已改造:baseUrl=/api + http.js(去认证) + nav.js(/tab/) + vite dev 代理=本机48080;鉴权已彻底清理(删 auth/token/login/qs) +- bookmark 已修复:排除 nav-left,返回 website 字段 +- 密码:MySQL readonly 135246;Redis 5gynj20J(放 .env 不入 git) +- git 工作流:改代码→commit→push→VPS git pull→pm2 restart;禁止 scp 直接改 VPS 生产文件 ## 工作日志 - 2026-08-12(去 Spring Boot 化 + Node 服务 VPS 部署):memory/2026-08-12.md diff --git a/workspace-cc/memory/2026-08-12.md b/workspace-cc/memory/2026-08-12.md index 313cdd5..7573d28 100644 --- a/workspace-cc/memory/2026-08-12.md +++ b/workspace-cc/memory/2026-08-12.md @@ -1,6 +1,6 @@ # 工作日志 2026-08-12 -## 主题:cc-square 去 Spring Boot 化 —— Node 轻服务 + Redis 点击计数 +## 主题:cc-square 去 Spring Boot 化 —— Node 轻服务 + Redis 点击计数(已上线) ### 背景 / 起因 - VPS 内存紧张,需放弃部署重型的 Spring Boot 后端(yudao/ruoyi-vue-pro) @@ -13,73 +13,96 @@ 3. 排序规则:**纯点击倒序**(ZREVRANGE) 4. Node 服务部署在 VPS 5. 前端 baseUrl 走 nginx `/api` 反代(rewrite 剥 /api → 48080) +6. 彻底清理前端鉴权(方案 B:删 token/login/userInfo/auth.js/qs) -### 最终架构 +### 最终架构(已上线) ``` -前端(cc-square) → nginx(/api rewrite) → Node(Express, 48080) → MySQL(只读) + Redis(点击/排序) +浏览器 → https://www.climbcube.cn(nginx 托管前端 dist) + └→ /api/tab/* → nginx(rewrite剥/api) → Node(Express, 48080) → MySQL(只读) + Redis(点击/排序) ``` -### 连接凭据确认(已验证) +### 连接凭据(已验证) - 公网 MySQL:`101.34.227.188:3306`,readonly,密码 135246,host `%`(任意来源) - 公网 Redis:`101.34.227.188:6379`,密码 5gynj20J,AOF 持久化 -- 验证结果:MySQL 连接+查询通(cc_website 212行/cc_engine 23行/cc_website_type 11行) - - cc_website 启用 124 条;字段:id/status/type_id/title/click/order/icon/url/description... - - cc_website_type 分类名为 **title** 列(非 name),且有 order - - cc_engine 无 order 列,排序仅按 click +- MySQL 数据:cc_website 212行(启用124)/cc_engine 23行/cc_website_type 11行 +- 字段细节:cc_website_type 分类名是 **title** 列(非 name),有 order;cc_engine 无 order 列,仅按 click 排序 ### 交付物(/home/yangxuan/cc-square/server/) | 文件 | 说明 | |------|------| | server.js | 主程序:静态托管 + /tab/* 接口 + Redis 计数/排序 | -| config.js | 配置(支持环境变量)| +| config.js | 配置(支持环境变量,不入 git)| | scripts/init-redis.js | Redis 历史点击导入(幂等)| | ecosystem.config.js | pm2 配置 | | package.json | 依赖 express/mysql2/redis/axios | -| .env.example | 环境变量模板 | -| DEPLOY.md | 部署文档(含完整 pm2 命令)| +| .env.example / .env | 环境变量模板 / 实际密码(.env 不入 git)| +| DEPLOY.md | 部署文档(含完整 pm2 命令:日志/状态/启停/开机自启)| | FRONTEND-CHANGES.md | 前端改造说明 | | README.md | 服务导航 | -### Node 服务接口(全部实测通过) +### 接口(全部实测 200) | 方法 | 路径 | 数据源 | |------|------|--------| | GET | /tab/engine | MySQL cc_engine | -| GET | /tab/bookmark | MySQL cc_website_type 聚合 | +| GET | /tab/bookmark | MySQL 聚合(排除 nav-left,字段 website)| | GET | /tab/menu | MySQL | | GET | /tab/quick?limit=N | Redis ZREVRANGE 点击排行 | | GET | /tab/list-by-type?typeId=N | MySQL | | GET | /tab/searchBookmark?keyword=x | MySQL | -| GET | /tab/weather/all | 高德API(未配置key时返回空,优雅降级)| +| GET | /tab/weather/all | 高德API(未配 key 返回空降级)| | POST | /tab/quickCount | Redis ZINCRBY(书签)| | POST | /tab/engineCount | Redis ZINCRBY(引擎)| | GET | /health | 健康检查 | -### 前端改造(已完成) -1. `src/config/env.js`:baseUrl 改为 `/api`(nginx 反代) -2. `src/request/http.js`:重写精简版,去掉 token/key 认证 +### 前端改造(已完成并 build) +1. `src/config/env.js`:baseUrl 固定 `/api` +2. `src/request/http.js`:重写精简版(去 token/key 认证,保留 code===0) 3. `src/request/api/nav.js`:`/app-api/tab/` → `/tab/` -- 已 build 成功(1720 模块),响应格式兼容原 yudao `{code:0,data,msg}` +4. `vite.config.js`:dev 代理 `/api` → 本机 48080(rewrite 剥 /api) +5. **方案 B 清理鉴权**:删 auth.js、store 的 token/userInfo/setToken/clearAuth/logout、website.js 的 token/info key、util 的 info 残留、Search.js 登录判断改"添加引擎"提示、package.json 移除 qs +- 构建成功,dist 无鉴权代码,主 JS 变小(index 5.92→5.64kB) -### 部署状态 -- **本机(xuan-main)**:Node 服务 pm2 跑通验证(48080),接口全通 -- **VPS(xuan-vps / 101.34.227.188)**: - - 已备份旧前端 → `/usr/share/nginx/html.bak.20260812` - - apt 装 Node v22.23.1 + pm2 7.0.3(用户手动装) - - server 代码在 `/opt/cc-square-server/`,npm install 完成(104 包) - - `.env` 已建(含密码,600 权限) +### bookmark 字段修复(重要) +- 前端 Bookmark/index.vue 渲染 `item.website`,初版 Node 返回 `list` → 书签不展示 +- 修复:server.js bookmark 接口 `list` → `website` +- 并排除 nav-left(and yudao 原逻辑:title!='nav-left' and status=0),只保留有书签的分类 + +### 部署状态(已完成,生产生效) +- **本机(xuan-main)**:Node pm2 跑通,dev 环境 vite(5173) 代理正常 +- **VPS(xuan-vps / 101.34.227.188,Debian 12)**: + - Node v22.23.1 + pm2 7.0.3(已装) + - 项目 git clone 在 `/opt/cc-square`(gitee: xuan-java/cc-square) + - Node 服务 pm2 运行,脚本 `/opt/cc-square/server/server.js`,端口 48080,内存 ~45MB + - `.env` + `config.js` 在 `/opt/cc-square/server/`(config.js 需手动补,不入 git) + - 旧目录 `/opt/cc-square-server` 已删/不用,统一 `/opt/cc-square` + - 前端 dist 已部署 `/usr/share/nginx/html`(保留 admin/ariang/tools 子目录) + - 备份:`/usr/share/nginx/html.bak.20260812` 和 `htmlbak-cc-20260812.tar.gz` - Redis 已初始化(120 书签 / 3 引擎) - - **Node 服务启动 + 前端 dist 替换由用户手动完成** -- **nginx**:主站 climbcube.conf 已有 `/api` 反代 → `rewrite ^/api(.*)$ $1 break; proxy_pass http://localhost:48080;` - - 前端静态目录:`/usr/share/nginx/html`(index.html 即 cc-square 导航页) +- **nginx**:主站 climbcube.conf `location /api { rewrite ^/api(.*)$ $1 break; proxy_pass http://localhost:48080; }` + - apiadmin→8080, yudaoapi→内网192.168.195.185:48080(旧配置保留) -### 待办 / 遗留 -- [ ] VPS 上启动 Node 服务(用户手动):pm2 start ecosystem.config.js -- [ ] VPS 替换前端 dist 至 /usr/share/nginx/html(用户手动) -- [ ] 前端 baseUrl 需为 /api(本机已改,dist 需重新 build 后上传) -- [ ] 天气接口需高德 key -- [ ] 安全建议:readonly host `%` 建议收窄(需用户确认) +### 验证结果(生产外网) +- `https://www.climbcube.cn/` → 200,前端正常 +- `https://www.climbcube.cn/api/tab/{engine,bookmark,menu,quick}` → 全 200 +- bookmark 返回 8 个真实分类(资源15/AI5/文档20/国家站点5/学习11/工具22/工作台25/办公15),无 nav-left + +### git 工作流约定(避免再冲突) +- 统一走 git:本机 commit→push → VPS `git pull` → pm2 restart +- **禁止直接 scp 覆盖 VPS 生产文件**(会绕过 git 产生冲突) +- 本次冲突解决:git checkout -- server.js(内容与远端一致)+ pull fast-forward + +### 更新生效规则 +- 改 server.js/config.js → `pm2 restart cc-square` +- 改 package.json 依赖 → `npm install` + restart +- 改前端 src/* → `npm run build` + 部署 dist 到 nginx +- 改 .env → `set -a && source .env` + restart + +### 遗留 / 待办 +- [ ] 天气接口需高德 key(amapKey 占位,未启用) +- [ ] 安全建议:readonly host `%` 建议收窄(需用户确认后执行) +- [ ] 前端 dist 已部署,但 git 仓库 /usr/share/nginx/html 与 /opt/cc-square 前端源码的关系需注意(dist 不入 git?待确认) ### 环境备注 -- 本机 shell 是 zsh(注意 pkill/zsh 通配符坑) -- VPS 是 Debian 12,内存 3.7G,磁盘 69G/32G 已用 -- VPS 上多处是 debian 用户属主(/usr/share/nginx/html, /opt/cc-square-server) +- 本机 shell 是 zsh(注意 pkill/zsh 通配符坑;ssh 到 VPS 时 pm2/curl 需绝对路径或 export PATH) +- VPS 内存 3.7G,磁盘 69G/32G 已用 +- VPS 多文件 debian 属主;Node 服务 root 运行(pm2)