@aliyunrds/ctxdb 0.0.7 → 0.0.8-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-Q2EEP4CE.js → chunk-52IAVJRK.js} +1 -1
- package/dist/{chunk-LIC44DR6.js → chunk-73OY44GY.js} +34 -3
- package/dist/{chunk-S45GOYUU.js → chunk-BWPFGTF7.js} +25 -8
- package/dist/cli/main.js +41 -22
- package/dist/hooks/session-start.js +64 -32
- package/dist/hooks/stop.js +167 -23
- package/dist/hooks/user-prompt-submit.js +41 -45
- package/dist/setup/skills/contextdb-knowledge/SKILL.md +135 -105
- package/dist/setup/skills/contextdb-memory/SKILL.md +137 -95
- package/package.json +2 -3
|
@@ -1,142 +1,184 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: contextdb-memory
|
|
3
|
-
description:
|
|
3
|
+
description: contextdb 长期记忆高频操作(主动记忆 / 搜索过往 / 列出审计 / 改删某条)和命令速查。当用户提到"记住 / 记一下 / 记一笔 / 写进记忆 / 查记忆 / 找记忆 / 列记忆 / 删记忆 / 改记忆 / 之前说过 / 上次提到"等场景时使用。配套 contextdb-knowledge 处理知识库。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# contextdb Memory
|
|
6
|
+
# contextdb Memory 操作
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## 1. 什么时候用这个 skill
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
- 配置命令:`ctxdb setup --api-key=<key> --base-url=<url> [--user-id=<id>]`
|
|
12
|
-
- 带 `--agent <name>` 时写入指定 agent 的配置段并安装 hooks + skill
|
|
13
|
-
- 不带 `--agent` 时写入 `agents.default` 配置段(仅 CLI 使用)
|
|
14
|
-
- 连接检查:`ctxdb ping`,状态查看:`ctxdb status`
|
|
10
|
+
用户在做"写/找/改/删长期记忆"的任何动作时进这个 skill。触发关键词:**记住 / 记一下 / 记一笔 / 写进记忆 / 查记忆 / 找记忆 / 列记忆 / 删记忆 / 改记忆 / 之前说过 / 上次提到**。
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
- 用户说"记住 X"、"帮我记一下" → §2 recipe 1
|
|
13
|
+
- 用户问"之前我们聊过 Y 吗"、"上次怎么说的" → §2 recipe 2
|
|
14
|
+
- 用户想**审计/排查**记忆是否写进去 → §2 recipe 3
|
|
15
|
+
- 用户要**改某条 / 删某条** → §2 recipe 4
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
配套 skill:**contextdb-knowledge**(知识库操作)。两者用同一份 `~/.ctxdb/ctxdb.json` 配置和同一个 `--agent` 路由。
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
ctxdb memory add "<text>" [--no-infer] [--user-id=<id>] [--metadata=K1=V1,K2=V2] [--agent=<name>]
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
| 参数 | 说明 |
|
|
25
|
-
|------|------|
|
|
26
|
-
| `<text>` | 要记忆的文本内容(必填) |
|
|
27
|
-
| `--no-infer` | 跳过 LLM fact-extraction,原文直存 |
|
|
28
|
-
| `--user-id` | 覆盖配置中的 user_id |
|
|
29
|
-
| `--metadata` | 附加键值对元数据,逗号分隔 |
|
|
30
|
-
| `--agent` | 指定操作哪个 agent 的记忆桶(默认使用 agents.default 配置) |
|
|
31
|
-
|
|
32
|
-
服务端默认走同步模式(`async_mode: false`),等待 LLM fact-extraction 完成后返回结果。`--no-infer` 跳过提炼,适用于需要原文保留的场景(如项目代号、精确数值)。
|
|
33
|
-
|
|
34
|
-
**输出 JSON 结构**(同步模式):
|
|
35
|
-
|
|
36
|
-
```json
|
|
37
|
-
{
|
|
38
|
-
"results": [
|
|
39
|
-
{
|
|
40
|
-
"id": "mem-uuid",
|
|
41
|
-
"memory": "提炼后的事实文本",
|
|
42
|
-
"event": "ADD"
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
```
|
|
19
|
+
## 2. 高频 recipes
|
|
47
20
|
|
|
48
|
-
`
|
|
21
|
+
> 命令里的 `--agent={{agent}}` 是当前 skill 安装目标。不要把示例改成 `qoder`;如果读到未替换的双花括号 agent 模板,先按 §6 判定真实 agent,再替换成 `qoder` / `qoderwork` / `codex` / `claude` / `default`。
|
|
49
22
|
|
|
50
|
-
|
|
23
|
+
### Recipe 1:主动记忆("记住 X")
|
|
51
24
|
|
|
52
|
-
|
|
25
|
+
**场景**:用户明确说"记住"、"帮我记一下"、"把这条写进记忆"。
|
|
53
26
|
|
|
54
27
|
```sh
|
|
55
|
-
ctxdb memory
|
|
28
|
+
ctxdb memory add "<text>" --agent={{agent}}
|
|
56
29
|
```
|
|
57
30
|
|
|
58
|
-
|
|
59
|
-
|------|------|--------|
|
|
60
|
-
| `<query>` | 搜索文本(必填) | |
|
|
61
|
-
| `--top-k` | 返回条数上限 | 5 |
|
|
62
|
-
| `--threshold` | 相关度阈值 | 0.4 |
|
|
63
|
-
| `--knowledge` | 同时搜索知识库 chunks | false |
|
|
64
|
-
| `--verbose` | 增加 doc_name/kb_id 等字段(knowledge 模式) | false |
|
|
65
|
-
| `--raw` | 服务端原始响应 | false |
|
|
66
|
-
| `--agent` | 指定操作哪个 agent 的记忆桶 | agents.default |
|
|
67
|
-
|
|
68
|
-
**输出 JSON 结构**:
|
|
69
|
-
|
|
70
|
-
```json
|
|
71
|
-
{
|
|
72
|
-
"results": [
|
|
73
|
-
{
|
|
74
|
-
"id": "mem-uuid",
|
|
75
|
-
"memory": "事实文本",
|
|
76
|
-
"score": 0.85
|
|
77
|
-
}
|
|
78
|
-
]
|
|
79
|
-
}
|
|
80
|
-
```
|
|
31
|
+
默认走 LLM fact-extraction(同步等结果)。想原文存(项目代号 / 精确数值)加 `--no-infer`(见 §6)。
|
|
81
32
|
|
|
82
|
-
|
|
33
|
+
**何时不适用**:用户没明示要记 → 不要主动调;autoCapture 已在每轮 Stop hook 自动跑(见 §4)。
|
|
83
34
|
|
|
84
|
-
|
|
35
|
+
**`event: NONE` 情况**:返回 `results: []` 时表示 LLM 觉得没新事实可提,是**正常返回不是错误**(见 §5 注意事项 1)。
|
|
85
36
|
|
|
86
|
-
|
|
37
|
+
### Recipe 2:找过去说过的(搜记忆)
|
|
87
38
|
|
|
88
|
-
|
|
39
|
+
**场景**:用户问"之前我们讨论过 X 吗"、"上次怎么说的"、"我之前提过 Y 没"。
|
|
89
40
|
|
|
90
41
|
```sh
|
|
91
|
-
ctxdb memory
|
|
42
|
+
ctxdb memory search "<query>" --agent={{agent}}
|
|
92
43
|
```
|
|
93
44
|
|
|
94
|
-
|
|
95
|
-
|------|------|--------|
|
|
96
|
-
| `--page-size` | 每页条数 | 100 |
|
|
97
|
-
| `--category` | 按分类过滤 | |
|
|
45
|
+
返回 `results` 数组,每项含 `id` / `memory` / `score`,按 score 倒序。top-5 默认。想同时搜知识库 chunks 加 `--knowledge`(见 §6)。
|
|
98
46
|
|
|
99
|
-
|
|
47
|
+
**何时不适用**:用户想看的是当前会话的原对话(不是提炼后的事实) → 走 transcript / 聊天记录而非这个命令;记忆桶里只有提炼版(见 §5 注意事项 2)。
|
|
100
48
|
|
|
101
|
-
|
|
49
|
+
### Recipe 3:浏览/审计记忆
|
|
50
|
+
|
|
51
|
+
**场景**:排查"刚才那条记进去没"、用户想看"系统记了我什么"。
|
|
102
52
|
|
|
103
53
|
```sh
|
|
104
|
-
ctxdb memory
|
|
54
|
+
ctxdb memory list --page-size=20 --agent={{agent}}
|
|
105
55
|
```
|
|
106
56
|
|
|
107
|
-
|
|
57
|
+
返回 `results` 数组(含 `total` 计数)。按 category 过滤加 `--category=<cat>`(见 §6)。
|
|
58
|
+
|
|
59
|
+
**何时不适用**:明确知道要找某关键词 → 用 recipe 2 更精准。
|
|
60
|
+
|
|
61
|
+
### Recipe 4:改/删某条记忆
|
|
108
62
|
|
|
109
|
-
|
|
63
|
+
**场景**:用户说"把那条改成 X"、"删掉之前关于 Y 的记忆"。
|
|
110
64
|
|
|
111
65
|
```sh
|
|
112
|
-
|
|
66
|
+
# 改
|
|
67
|
+
ctxdb memory update <memory-id> --text="<new-text>" --agent={{agent}}
|
|
68
|
+
|
|
69
|
+
# 删单条
|
|
70
|
+
ctxdb memory delete <memory-id> --agent={{agent}}
|
|
113
71
|
```
|
|
114
72
|
|
|
115
|
-
|
|
73
|
+
`<memory-id>` 必须先用 recipe 2 或 recipe 3 拿到。
|
|
116
74
|
|
|
117
|
-
|
|
75
|
+
**何时不适用**:用户说"清空所有记忆" → 走 `ctxdb memory delete --all`,**必须先跟用户二次确认**(见 §5 注意事项 3,不可逆操作)。
|
|
118
76
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
77
|
+
## 3. 命令速查
|
|
78
|
+
|
|
79
|
+
`--agent=<name>` 必填;详细解析链见 §6。其他 advanced flag 见 §6。
|
|
80
|
+
|
|
81
|
+
| 子命令 | minimal signature |
|
|
82
|
+
|---|---|
|
|
83
|
+
| `memory add` | `ctxdb memory add "<text>" --agent=<name>` |
|
|
84
|
+
| `memory search` | `ctxdb memory search "<query>" --agent=<name>` |
|
|
85
|
+
| `memory list` | `ctxdb memory list --agent=<name>` |
|
|
86
|
+
| `memory get` | `ctxdb memory get <memory-id> --agent=<name>` |
|
|
87
|
+
| `memory update` | `ctxdb memory update <memory-id> --text="<new-text>" --agent=<name>` |
|
|
88
|
+
| `memory delete` | `ctxdb memory delete <memory-id> --agent=<name>` <br> `ctxdb memory delete --all --agent=<name>` |
|
|
89
|
+
|
|
90
|
+
所有命令 JSON 写 stdout、错误写 stderr 非零退出码。
|
|
91
|
+
|
|
92
|
+
## 4. Hooks 感知
|
|
93
|
+
|
|
94
|
+
**`<recalled-memories>` 块**:UserPromptSubmit hook 在每个 user prompt 提交时自动用 prompt 作 query 跑 `memory search`,把命中的 top-K 记忆塞进 system context。存在 → 当前在 hook 环境(recall 自动)。
|
|
95
|
+
|
|
96
|
+
**autoCapture(Stop hook)**:每轮对话结束后服务端异步提炼事实写记忆,**不用 agent 主动调** `memory add`。`memory add` 用于用户**明确强调**的内容(强加重要性)。
|
|
123
97
|
|
|
124
|
-
|
|
98
|
+
**B-3c 守卫**:含 `kb upload-text` / `kb upload-file` 的轮次,**autoCapture 跳过**这一轮(防文档原文进记忆桶)。
|
|
125
99
|
|
|
126
|
-
|
|
100
|
+
**纯 CLI 模式**:对话里没 `<recalled-memories>` 块 → 不在 hook 环境(裸 CLI),所有 recall / capture 只能主动 `ctxdb memory search` / `ctxdb memory add`。
|
|
127
101
|
|
|
128
|
-
|
|
102
|
+
## 5. 注意事项
|
|
129
103
|
|
|
130
|
-
|
|
104
|
+
### 注意事项 1:`memory add` 返回 `event: NONE` 是正常的
|
|
131
105
|
|
|
132
|
-
|
|
106
|
+
- **现象**:调 `memory add "<text>"` 后 `results` 为空数组、`event: NONE`
|
|
107
|
+
- **根因**:服务端默认走 LLM fact-extraction,LLM 判断这段话**没新事实可提**(已存在 / 太啰嗦 / 不构成事实)
|
|
108
|
+
- **正确做法**:想强制原文存加 `--no-infer`;如果用户输入的就是"已知事实重复",告诉用户"系统认为这条不构成新事实"而不是判定写失败
|
|
133
109
|
|
|
134
|
-
|
|
110
|
+
### 注意事项 2:`memory search` 拿到的是**提炼后事实**,不是原对话
|
|
135
111
|
|
|
136
|
-
|
|
112
|
+
- **现象**:用户问"上次我说过 X 吗",`memory search "X"` 返回的是 LLM 提炼出的事实,跟用户原话措辞不同;用户会觉得"这不是我说的"
|
|
113
|
+
- **根因**:autoCapture / `memory add` 默认走 fact-extraction,存的是提炼版
|
|
114
|
+
- **正确做法**:要拿用户原话 → 看 transcript / 聊天记录文件;记忆桶只能告诉你"用户曾说过类似 X 这个事实"
|
|
137
115
|
|
|
138
|
-
|
|
116
|
+
### 注意事项 3:`memory delete --all` 不可逆,**必须二次确认**
|
|
139
117
|
|
|
140
|
-
|
|
118
|
+
- **现象**:用户说"清空记忆",agent 直接跑 `memory delete --all`
|
|
119
|
+
- **根因**:这条命令清掉当前 `--agent` 桶下绑定 user_id 的**所有**记忆;服务端不存软删,事后无法恢复
|
|
120
|
+
- **正确做法**:跑之前必须跟用户确认"将清空 agent=<name> 桶下所有记忆,不可恢复,确认吗?";用户回 yes 才执行
|
|
141
121
|
|
|
142
|
-
|
|
122
|
+
### 注意事项 4:`--user-id` 覆盖配置桶,**别随手传**
|
|
123
|
+
|
|
124
|
+
- **现象**:调 `memory add "..." --user-id=foo` 后 `memory search` 找不到(搜默认桶);或反过来 search 用了 `--user-id` add 没用 → 写一个桶搜另一个桶
|
|
125
|
+
- **根因**:`--user-id` 直接覆盖配置文件里 `agents.<name>.user_id`,桶就切了
|
|
126
|
+
- **正确做法**:除非你明确知道"现在要操作另一个 user 的记忆",**否则不要传 `--user-id`**。让默认配置 user_id 兜底,写读自动一致
|
|
127
|
+
|
|
128
|
+
## 6. 高级参数
|
|
129
|
+
|
|
130
|
+
### `memory add` 全部 flag
|
|
131
|
+
|
|
132
|
+
| 参数 | 说明 |
|
|
133
|
+
|------|------|
|
|
134
|
+
| `--no-infer` | 跳过 LLM fact-extraction,原文直存(项目代号 / 精确数值用)|
|
|
135
|
+
| `--metadata=K1=V1,K2=V2` | 附加键值对元数据,逗号分隔 |
|
|
136
|
+
| `--user-id=<id>` | 覆盖配置 user_id(**慎用**,见 §5 注意事项 4)|
|
|
137
|
+
|
|
138
|
+
服务端默认同步模式(`async_mode: false`),等 LLM 完成才返回。`event` 字段可能:`ADD` / `UPDATE` / `NONE`。
|
|
139
|
+
|
|
140
|
+
### `memory search` 全部 flag
|
|
141
|
+
|
|
142
|
+
| 参数 | 说明 | 默认值 |
|
|
143
|
+
|------|------|--------|
|
|
144
|
+
| `--top-k=N` | 返回条数上限 | 5 |
|
|
145
|
+
| `--threshold=F` | 相关度阈值 | 0.4 |
|
|
146
|
+
| `--knowledge` | 同时搜知识库 chunks | false |
|
|
147
|
+
| `--verbose` | knowledge 模式下加 `doc_name` / `kb_id` / `doc_id` / `tags` | false |
|
|
148
|
+
| `--raw` | 服务端原始响应 | false |
|
|
149
|
+
| `--user-id=<id>` | 覆盖配置 user_id(**慎用**)| |
|
|
150
|
+
|
|
151
|
+
带 `--knowledge` 时输出额外 `knowledge` 数组(结构同 contextdb-knowledge 的 `chunks`)。
|
|
152
|
+
|
|
153
|
+
### `memory list` 全部 flag
|
|
154
|
+
|
|
155
|
+
| 参数 | 说明 | 默认值 |
|
|
156
|
+
|------|------|--------|
|
|
157
|
+
| `--page-size=N` | 每页条数 | 100 |
|
|
158
|
+
| `--category=<cat>` | 按分类过滤 | |
|
|
159
|
+
|
|
160
|
+
### `memory get` / `memory update` / `memory delete`
|
|
161
|
+
|
|
162
|
+
无额外 flag(除通用参数)。`delete --all` 见 §5 注意事项 3。
|
|
163
|
+
|
|
164
|
+
### 通用参数
|
|
165
|
+
|
|
166
|
+
| 参数 | 说明 |
|
|
167
|
+
|------|------|
|
|
168
|
+
| `--agent=<name>` | **必填**。指定操作哪个 agent 的配置桶(`qoder` / `qoderwork` / `codex` / `claude` / `default`) |
|
|
169
|
+
|
|
170
|
+
`--agent` 解析顺序:
|
|
171
|
+
1. 命令行显式 `--agent=<name>` → 用它
|
|
172
|
+
2. 缺省 → 读 `CTXDB_AGENT` 环境变量
|
|
173
|
+
3. env 也没有 → 落到 `"default"` 桶
|
|
174
|
+
4. 新版本 `ctxdb setup --agent <qoder|qoderwork|codex|claude>` 会在 `agents.default` 缺失时复制当前 agent 配置作为兜底
|
|
175
|
+
5. 若 `"default"` 桶仍不存在或未配置完整 → exit 2 "config incomplete for agent default"
|
|
176
|
+
|
|
177
|
+
## 7. 配置
|
|
178
|
+
|
|
179
|
+
- 配置文件:`~/.ctxdb/ctxdb.json`,分 `agents.<name>` 段(`qoder` / `qoderwork` / `codex` / `claude` / `default`),互不复用
|
|
180
|
+
- 配置命令:`ctxdb setup --agent <name> --api-key=<key> --base-url=<url> [--user-id=<id>]`
|
|
181
|
+
- 带 `--agent` 时还会装 hooks + skill;若 `agents.default` 缺失,会复制当前 agent 配置作为 CLI 兜底
|
|
182
|
+
- `--agent default` 只写 `agents.default` 段(仅 CLI 用,不装 hooks / skill)
|
|
183
|
+
- 连接检查:`ctxdb ping --agent=<name>`
|
|
184
|
+
- 状态查看:`ctxdb status --agent=<name>`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aliyunrds/ctxdb",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Unified access layer for RDS ContextDatabase: `ctxdb` CLI (memory + KB ops), one-shot `setup --agent <qoder|codex|claude>` installer, per-agent config, hooks, and SKILL.md.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
],
|
|
26
26
|
"author": "kuahai",
|
|
27
27
|
"engines": {
|
|
28
|
-
"node": ">=
|
|
28
|
+
"node": ">=20"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@aliyunrds/ctxdb-shared": "~0.0.3"
|
|
@@ -39,7 +39,6 @@
|
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsup && mkdir -p dist/setup && cp -r src/setup/skills dist/setup/ && chmod +x dist/hooks/*.js dist/cli/main.js",
|
|
42
|
-
"postinstall": "chmod +x dist/hooks/*.js dist/cli/main.js 2>/dev/null || true",
|
|
43
42
|
"test": "vitest run"
|
|
44
43
|
}
|
|
45
44
|
}
|