Skip to content

Commit a74b0b3

Browse files
author
chrishuan
committed
feat: release v0.2.2 — TCVDB backend, BM25 hybrid retrieval, pipeline refactor
1 parent 5bf5f89 commit a74b0b3

45 files changed

Lines changed: 8246 additions & 755 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,10 @@ workspace/
1010
# Test caches
1111
__tests__/soak/.model-cache/
1212

13+
# Migration build output
14+
scripts/export-tencent-vdb/dist/
15+
scripts/migrate-sqlite-to-tcvdb/dist/
16+
scripts/read-local-memory/dist/
17+
1318
node_modules/
14-
benchmark-runs/
19+
benchmark-runs/

.npmignore

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# 测试文件
2+
*.test.ts
3+
*.test.js
4+
*.spec.ts
5+
*.spec.js
6+
__tests__/
7+
8+
# 开发文档与辅助
9+
docs/
10+
benchmark-runs/
11+
workspace/
12+
13+
# 环境与配置
14+
.env
15+
.env.*
16+
.gitignore
17+
.codebuddy/
18+
.coding-ci.yaml
19+
20+
# 运行时产物
21+
node_modules/
22+
*.tgz

CHANGELOG.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,101 @@
44

55
---
66

7+
## [0.2.2] - 2026-04-17
8+
9+
### 🐛 修复
10+
11+
- 修复因未声明 `undici` 依赖导致 TCVDB 客户端加载失败的问题(开发环境之前依赖 monorepo 根 `node_modules` 的传递解析)
12+
- 将插件注册阶段的大量 INFO 日志降级为 DEBUG,避免 CLI 模式下输出过多无关日志
13+
14+
## [0.2.1] - 2026-04-16 (deprecated)
15+
16+
> NOTE: 此版本由于存在 undici 依赖导致插件启动失败的问题,已废弃
17+
> 相关问题在 0.2.2 及以后版本中已修复
18+
19+
### 🚀 新功能
20+
21+
- TCVDB 新增 HTTPS 连接支持,可通过插件配置 `caPemPath` 或迁移脚本参数 `--tcvdb-ca-pem` 指定自定义 CA 证书 PEM 文件
22+
- `read-local-memory` 脚本新增 L2 单文件查询,并将 L0 / L1 查询切换为直接从 `vectors.db` 读取,支持 SQL 层过滤、排序与分页
23+
24+
### ✨ 改进
25+
26+
- TCVDB 的 L0 / L1 向量索引默认调整为 `DISK_FLAT`,并在不支持该索引类型的实例上自动回退到 `HNSW`
27+
- 默认服务端 embedding 模型调整为 `bge-large-zh`
28+
- TCVDB 所有读接口统一启用 `readConsistency: "strongConsistency"`,消除 read-after-write 不一致
29+
- 健康检测脚本 VDB 连接支持 HTTPS 自签证书
30+
31+
### 🐛 修复
32+
33+
- 修复 L3 persona sync 因未拉取远端 baseline 导致版本冲突跳过写入的问题
34+
- 修复 `memories_since_last_persona` 被 L0 和 L1 双重计数导致 persona 触发阈值膨胀的问题
35+
- 移除 `CheckpointManager` 中已被 `captureAtomically()` 替代的废弃方法
36+
37+
---
38+
39+
## [0.2.0] - 2026-04-15
40+
41+
### 🚀 新功能
42+
43+
**腾讯云向量数据库(TCVDB)存储后端**
44+
45+
- 新增腾讯云向量数据库存储后端,支持向量 + BM25 混合召回
46+
- 支持 SQLite 与 TCVDB 之间的索引结构同步
47+
- L2 场景 / L3 画像支持在本地缓存与向量数据库之间双向同步
48+
- 插件配置(manifest)暴露 `storeBackend``tcvdb``bm25``embedding.timeoutMs` 等配置项
49+
50+
**本地 BM25 关键字检索**
51+
52+
- 使用本地 tcvdb-text 编码器替代原有的 BM25 HTTP sidecar 服务,消除外部依赖
53+
54+
**Seed 数据导入工具**
55+
56+
- 新增 CLI `seed` 命令,支持从外部数据批量导入记忆
57+
- 提取共享的 pipeline-factory,供 seed 和正常运行时复用
58+
- 支持 ISO 8601 时间戳格式(移除 JSONL 支持)
59+
60+
**数据迁移与运维工具**
61+
62+
- 新增 SQLite → 腾讯云向量数据库迁移脚本,支持 `--help` / `-h` 展示完整参数说明和使用示例
63+
- 新增 VDB 数据导出脚本(含预编译 JS 和 CLI 启动器)
64+
- 新增本地 Memory 数据查询脚本
65+
- 注册全部 CLI bin 入口:`migrate-sqlite-to-tcvdb``export-tencent-vdb``read-local-memory`
66+
67+
**记忆搜索工具调用限制**
68+
69+
- `tdai_memory_search` + `tdai_conversation_search` 增加每轮合计最多 3 次的调用次数限制,通过 tool description 和召回引导提示词约束模型行为,防止陷入无效重复搜索
70+
71+
### 🐛 修复
72+
73+
- 修复 L2 场景合并(MERGE)无法删除旧文件的问题:OpenClaw 4.1+ 的 write 工具拒绝空白内容,改用 `[DELETED]` 标记实现软删除,SceneExtractor cleanup 阶段同步识别并清理
74+
- 修复 L2 抽取产生孤立 BATCH/ARCHIVE 文件的问题,统一 maxScenes 上限为 15
75+
- 修复 L3 启动时重复拉取 profile 的问题
76+
- 过滤 skill wrapper 噪声标记(`¥¥[...]¥¥`
77+
- 处理 `createCollection` 并发竞态(错误码 15202)
78+
79+
### ♻️ 重构
80+
81+
- Pipeline checkpoint 游标语义从 timestamp 改为 update_at
82+
- Runner 改用 `api.runtime.agent.runEmbeddedPiAgent`,避免跨环境导入失败
83+
- 统一脚本构建流程:新增 `build:scripts` 一键编译命令,`prepack` 钩子确保 `npm pack` 前自动编译全部脚本产物
84+
85+
### 📚 文档
86+
87+
- 新增 AI Agent 长期记忆插件设计与实现技术文档
88+
- 新增项目指南、研发系统分层架构文档
89+
- 新增 VDB 存储设计文档及迁移指南
90+
91+
---
92+
93+
<details>
94+
<summary>预发布版本</summary>
95+
96+
## [0.2.0-beta.1] - 2026-04-14
97+
98+
*此版本的内容已合并至 [0.2.0] 正式版。*
99+
100+
</details>
101+
7102
## [0.1.4] - 2026-04-10
8103

9104
### 🚀 Features

SKILL-DIAGNOSTIC-EXPORT.md

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
---
2+
name: openclaw-diagnostic-export
3+
description: 帮助用户导出 OpenClaw + memory-tencentdb(原 memory-tdai)记忆插件的现场诊断数据,用于排查问题。当用户提到"导出诊断数据""export diagnostic""现场数据""排查问题""导出日志""收集现场""打包现场数据"时应触发。
4+
version: 1.0.0
5+
---
6+
7+
## 目的
8+
9+
将 OpenClaw 日志、记忆插件数据(L0~L3)、脱敏后的配置打包为本地压缩包,由用户确认后手动发送给研发团队排查问题。
10+
11+
> **名称说明**:插件已从 `@tdai/memory-tdai` 更名为 `@tencentdb-agent-memory/memory-tencentdb`,但数据目录始终为 `~/.openclaw/memory-tdai/`(代码中硬编码)。本 skill 中所有对 `memory-tdai` 目录的引用均指实际数据目录路径,与插件 ID 无关。
12+
13+
## 导出工作流
14+
15+
### Step 1: 确认环境
16+
17+
在导出前,先确认 OpenClaw 工作目录存在且可访问:
18+
19+
```bash
20+
# 探测工作目录(优先级:环境变量 > ~/.openclaw > ~/.clawdbot)
21+
OPENCLAW_DIR="${OPENCLAW_STATE_DIR:-$HOME/.openclaw}"
22+
[ -d "$OPENCLAW_DIR" ] || OPENCLAW_DIR="$HOME/.clawdbot"
23+
ls -la "$OPENCLAW_DIR/" 2>/dev/null && echo "✅ 找到: $OPENCLAW_DIR" || echo "❌ 未找到 OpenClaw 工作目录"
24+
```
25+
26+
确认 memory-tdai 子目录存在:
27+
28+
```bash
29+
ls -la "$OPENCLAW_DIR/memory-tdai/" 2>/dev/null
30+
```
31+
32+
### Step 2: 执行导出脚本
33+
34+
运行项目 `scripts/` 目录下的导出脚本:
35+
36+
```bash
37+
bash scripts/export-diagnostic.sh
38+
```
39+
40+
> 脚本位于本项目的 `scripts/export-diagnostic.sh`,如果通过 `pnpm` 或其他方式运行,需确保工作目录在项目根目录下。
41+
42+
脚本默认将压缩包输出到 `~/Downloads/openclaw-diagnostic-<timestamp>.tar.gz`
43+
44+
如需指定其他输出目录:
45+
46+
```bash
47+
bash scripts/export-diagnostic.sh /tmp
48+
```
49+
50+
### Step 3: 确认导出结果
51+
52+
脚本执行完成后,检查输出:
53+
54+
1. **确认压缩包已生成** — 脚本末尾会打印压缩包路径和大小
55+
2. **向用户说明包含内容**
56+
57+
| 文件/目录 | 内容 | 隐私风险 |
58+
|-----------|------|---------|
59+
| `env-info.txt` | 系统版本、OpenClaw 版本、目录结构、磁盘占用 ||
60+
| `logs/` | OpenClaw 网关日志 + 滚动日志(最近 3 天,每文件最多 5000 行) ||
61+
| `memory-tdai/` | 记忆插件全量数据:L0 对话、L1 记忆、L2 场景、L3 画像、SQLite 数据库、checkpoint | **** — 包含用户对话原文 |
62+
| `openclaw-config-redacted.json` | 脱敏后的配置(已移除 API Key/Token/Password/Secret,models/channels/env 整体替换) ||
63+
| `plugins-info.txt` | 已安装插件列表和版本 ||
64+
65+
3. **提醒用户**
66+
- 配置文件已自动脱敏,API Key、Token 等敏感信息已被替换为 `***REDACTED***`
67+
- **记忆数据(memory-tdai/)包含用户对话原文**,请确认可以分享后再发送
68+
- 压缩包存放在本地,**不会自动上传**,需要用户手动发送给研发团队
69+
70+
### Step 4: 告知用户后续操作
71+
72+
导出完成后,告知用户:
73+
74+
1. 压缩包已保存在本地(打印具体路径)
75+
2. 请检查内容后,通过企微/邮件等方式手动发送给研发团队
76+
3. 如只需部分数据(如仅日志或仅配置),可解压后选择性发送
77+
78+
## 导出内容详解
79+
80+
### OpenClaw 日志位置
81+
82+
| 日志类型 | 路径 | 说明 |
83+
|---------|------|------|
84+
| 网关 stdout | `~/.openclaw/logs/gateway.log` | 网关守护进程标准输出 |
85+
| 网关 stderr | `~/.openclaw/logs/gateway.err.log` | 网关守护进程错误输出 |
86+
| 滚动日志 | `/tmp/openclaw/openclaw-YYYY-MM-DD.log` | 按日期滚动,JSON Lines 格式,24h 自动清理 |
87+
| 配置审计 | `~/.openclaw/logs/config-audit.jsonl` | 配置写入审计记录 |
88+
| 命令日志 | `~/.openclaw/logs/commands.log` | 命令事件日志(hook 可选) |
89+
90+
### 记忆插件数据结构
91+
92+
```
93+
~/.openclaw/memory-tdai/
94+
├── conversations/ — L0 原始对话(每日 JSONL 分片)
95+
├── records/ — L1 结构化记忆(每日 JSONL 分片)
96+
├── scene_blocks/ — L2 场景 Markdown 文件
97+
├── persona.md — L3 用户画像
98+
├── vectors.db — SQLite 数据库(向量 + 全文索引)
99+
├── .metadata/ — checkpoint、scene_index.json
100+
└── .backup/ — 滚动备份
101+
```
102+
103+
### 配置脱敏规则
104+
105+
导出脚本对 `openclaw.json` 执行以下脱敏:
106+
107+
| 规则 | 处理方式 |
108+
|------|---------|
109+
| 字段名匹配 `apiKey/token/password/secret/credential` 且值为字符串 | 替换为 `***REDACTED(Nchars)***` |
110+
| SecretRef 对象(含 source/provider/id) | id 替换为 `***REDACTED***` |
111+
| 顶层 `models``secrets``channels``env`| 整体替换为 `***REDACTED_SECTION***` |
112+
| `gateway.auth` 下的 token/password | 替换为 `***REDACTED***` |
113+
| 其余字段(含 `plugins` 完整配置) | **保留原样**(插件配置是排查重点) |
114+
115+
## 手动导出(脚本不可用时的备选方案)
116+
117+
如果导出脚本无法执行(如 Node.js 不可用),按以下步骤手动收集:
118+
119+
```bash
120+
# 1. 创建导出目录
121+
EXPORT_DIR=~/Downloads/openclaw-diagnostic-$(date +%Y%m%d-%H%M%S)
122+
mkdir -p "$EXPORT_DIR"
123+
124+
# 2. 复制日志
125+
cp -r ~/.openclaw/logs/ "$EXPORT_DIR/logs/" 2>/dev/null
126+
cp /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log "$EXPORT_DIR/" 2>/dev/null
127+
128+
# 3. 复制记忆插件数据
129+
cp -r ~/.openclaw/memory-tdai/ "$EXPORT_DIR/memory-tdai/" 2>/dev/null
130+
131+
# 4. 手动脱敏配置(⚠️ 必须手动删除敏感字段!)
132+
# 复制配置并用编辑器删除 models/secrets/channels 块和所有 apiKey/token 值
133+
cp ~/.openclaw/openclaw.json "$EXPORT_DIR/openclaw-config-NEEDS-MANUAL-REDACTION.json"
134+
135+
# 5. 打包
136+
cd ~/Downloads && tar -czf "$EXPORT_DIR.tar.gz" "$(basename $EXPORT_DIR)"
137+
138+
echo "⚠️ 请务必在发送前手动检查并删除配置中的敏感信息!"
139+
```
140+
141+
## 常见问题排查线索
142+
143+
导出数据后,研发团队通常关注以下方面:
144+
145+
| 排查方向 | 查看文件 | 关键信息 |
146+
|---------|---------|---------|
147+
| 插件是否加载 | `logs/` 中搜索 `[memory-tdai]` | 插件注册、配置解析日志(注:日志标签仍为 `[memory-tdai]`,与插件 ID 无关) |
148+
| 记忆召回是否工作 | `logs/` 中搜索 `[recall]` | 搜索策略、耗时、命中数 |
149+
| L1 提取是否触发 | `logs/` 中搜索 `[pipeline]` | 调度触发、L1/L2/L3 执行状态 |
150+
| 向量搜索是否可用 | `openclaw-config-redacted.json``plugins.entries` | embedding 配置是否正确 |
151+
| 数据量/磁盘占用 | `env-info.txt` | du 输出、文件数量 |
152+
| checkpoint 状态 | `memory-tdai/.metadata/recall_checkpoint.json` | 进度、游标、计数器 |

0 commit comments

Comments
 (0)