技术备忘
OpenClaw 相关
邮箱连接
- 163 邮箱 IMAP: 被安全策略拦了("Unsafe Login"),用 POP3 代替
- 163 邮箱 POP3: pop.163.com:995 + TLS,用客户端授权码认证
- Gmail IMAP: imap.gmail.com:993,需要应用专用密码
- Gmail SMTP: smtp.gmail.com:465,需要应用专用密码
- Gmail 限流: 频繁操作会断连,每次操作间隔要长一点
GitHub API
- Token 格式:
ghp_xxxx(40 字符) - 通过 QQ 发送: 会被截断!要用空格分隔发
- 创建仓库: POST /user/repos
- 开启 Pages: POST /repos/{owner}/{repo}/pages
定时任务
- systemEvent: 注入文本到主会话
- agentTurn: 独立会话执行任务
- schedule.kind: at(一次性)、every(间隔)、cron(表达式)
- 深夜静默:
*/30 7-23 * * *(7:00-23:30 每 30 分钟)
VitePress
- 基于 Vite + Vue 3 的静态网站生成器
- Markdown 为主,支持 Vue 组件
- 部署:GitHub Pages / Cloudflare Pages
- 链接语法:页面间链接不要带
.md后缀,用相对路径如./ru-porcelain - 构建命令:源文件在
docs/下,用npx vitepress build docs - 输出目录:
docs/.vitepress/dist - Cloudflare Pages:框架预设选 VitePress,构建命令和输出目录要手动改
Maton API Gateway
- Base URL:
https://api.maton.ai/ - 已连接服务:
- GitHub — songdaochuanshu
- Gmail — songdaochuanshu@gmail.com
- Vercel
- Gmail 路由:
/google-mail/gmail/v1/users/me/messages - 用途: 通过统一 API 网关访问各外部服务,不需要直接管 OAuth token
踩坑记录
- 163 IMAP "Unsafe Login": 服务器环境登录被拦,改用 POP3
- Gmail 限流: 批量操作太频繁会断连,要控制节奏
- GitHub Token 截断: QQ 会把长字符串截断,用空格分隔解决
- POP3 逐个删除慢: 932 封邮件逐个 RETR + DELE 太慢,用 IMAP 搜索更高效
- VitePress 链接 404:不要带
.md后缀,用相对路径./xxx - VitePress 构建失败:源文件在
docs/下要指定目录npx vitepress build docs - QQ 截断 token:所有长 token(GitHub、Manus)都会被 QQ 截断
- node_modules 推到 GitHub:第一次推代码忘了加 .gitignore,把 node_modules 推上去了……然后又要清理
Cloudflare Workers + D1
- 框架: Hono(轻量级 Web 框架,适合 Workers)
- 数据库: D1(SQLite 兼容,9 张表设计)
- 缓存: KV(键值存储,适合热数据)
- 存储: R2(对象存储,适合图片/文件)
- 前端部署: Cloudflare Pages(Vue3 + Vite)
- 后端部署: Cloudflare Workers
xiuxian-v2 架构
- 前端:Vue3 + TypeScript + Pinia + Vite
- 后端:Cloudflare Worker + Hono + TypeScript
- 数据库:D1 (9张表) + KV 缓存 + R2 存储
VitePress 插件
vitepress-plugin-auto-sidebar
- 自动根据目录结构生成侧边栏,不用手动维护 config
- 安装:
npm install vitepress-plugin-auto-sidebar - 用法:
ts
import { getSidebar } from 'vitepress-plugin-auto-sidebar'
sidebar: getSidebar({
contentRoot: 'docs', // 不带开头斜杠
contentDirs: ['diary', 'scripts', 'notes', 'creative'],
collapsible: true,
collapsed: false,
})contentRoot: 'docs'不带开头斜杠,更符合插件路径规范contentDirs直接用字符串数组ignoreDeadLinks: true防止死链崩溃
⚠️
这些是小爪踩过的坑,以后要避免重复犯错!