@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.
@@ -1,142 +1,184 @@
1
1
  ---
2
2
  name: contextdb-memory
3
- description: RDS contextdb 记忆操作全量参考。覆盖 memory add / search / list / get / update / delete 的完整参数、JSON 输出结构和 hooks 感知机制。当用户提到"记住"、"记一下"、"查记忆"、"删记忆"、"改记忆"、"之前说过"等场景时使用。
3
+ description: contextdb 长期记忆高频操作(主动记忆 / 搜索过往 / 列出审计 / 改删某条)和命令速查。当用户提到"记住 / 记一下 / 记一笔 / 写进记忆 / 查记忆 / 找记忆 / 列记忆 / 删记忆 / 改记忆 / 之前说过 / 上次提到"等场景时使用。配套 contextdb-knowledge 处理知识库。
4
4
  ---
5
5
 
6
- # contextdb Memory 操作参考
6
+ # contextdb Memory 操作
7
7
 
8
- ## 配置
8
+ ## 1. 什么时候用这个 skill
9
9
 
10
- - 配置文件:`~/.ctxdb/ctxdb.json`
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
- ## memory add
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
- ```sh
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
- `event` 可能的值:`ADD`(新增)、`UPDATE`(更新已有记忆)、`NONE`(无新事实提取)。`results` 为空数组表示服务端未从输入中提取出新事实。
21
+ > 命令里的 `--agent={{agent}}` 是当前 skill 安装目标。不要把示例改成 `qoder`;如果读到未替换的双花括号 agent 模板,先按 §6 判定真实 agent,再替换成 `qoder` / `qoderwork` / `codex` / `claude` / `default`。
49
22
 
50
- ## memory search
23
+ ### Recipe 1:主动记忆("记住 X")
51
24
 
52
- 搜索长期记忆。
25
+ **场景**:用户明确说"记住"、"帮我记一下"、"把这条写进记忆"。
53
26
 
54
27
  ```sh
55
- ctxdb memory search "<query>" [--top-k=N] [--threshold=F] [--knowledge] [--verbose] [--raw] [--agent=<name>]
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
- `results` 为空数组表示未找到匹配记忆。
33
+ **何时不适用**:用户没明示要记 → 不要主动调;autoCapture 已在每轮 Stop hook 自动跑(见 §4)。
83
34
 
84
- `--knowledge` 时额外返回 `knowledge` 数组(每项含 `content` / `score`,`--verbose` 增加 `doc_name` / `kb_id` / `doc_id` / `tags`)。
35
+ **`event: NONE` 情况**:返回 `results: []` 时表示 LLM 觉得没新事实可提,是**正常返回不是错误**(见 §5 注意事项 1)。
85
36
 
86
- ## memory list
37
+ ### Recipe 2:找过去说过的(搜记忆)
87
38
 
88
- 列出记忆。
39
+ **场景**:用户问"之前我们讨论过 X 吗"、"上次怎么说的"、"我之前提过 Y 没"。
89
40
 
90
41
  ```sh
91
- ctxdb memory list [--page-size=N] [--category=<cat>] [--agent=<name>]
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
- ## memory get
47
+ **何时不适用**:用户想看的是当前会话的原对话(不是提炼后的事实) 走 transcript / 聊天记录而非这个命令;记忆桶里只有提炼版(见 §5 注意事项 2)。
100
48
 
101
- 查看单条记忆。
49
+ ### Recipe 3:浏览/审计记忆
50
+
51
+ **场景**:排查"刚才那条记进去没"、用户想看"系统记了我什么"。
102
52
 
103
53
  ```sh
104
- ctxdb memory get <memory-id> [--agent=<name>]
54
+ ctxdb memory list --page-size=20 --agent={{agent}}
105
55
  ```
106
56
 
107
- ## memory update
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
- ctxdb memory update <memory-id> --text="<new-text>" [--agent=<name>]
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
- ## memory delete
73
+ `<memory-id>` 必须先用 recipe 2 或 recipe 3 拿到。
116
74
 
117
- 删除记忆。
75
+ **何时不适用**:用户说"清空所有记忆" → 走 `ctxdb memory delete --all`,**必须先跟用户二次确认**(见 §5 注意事项 3,不可逆操作)。
118
76
 
119
- ```sh
120
- ctxdb memory delete <memory-id> [--agent=<name>]
121
- ctxdb memory delete --all [--agent=<name>]
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
- `--all` 删除当前 user_id 下的所有记忆。
98
+ **B-3c 守卫**:含 `kb upload-text` / `kb upload-file` 的轮次,**autoCapture 跳过**这一轮(防文档原文进记忆桶)。
125
99
 
126
- ## --agent 参数
100
+ **纯 CLI 模式**:对话里没 `<recalled-memories>` 块 → 不在 hook 环境(裸 CLI),所有 recall / capture 只能主动 `ctxdb memory search` / `ctxdb memory add`。
127
101
 
128
- 所有 memory 命令支持 `--agent <name>` 指定操作目标。不同 agent 的记忆存储在各自的配置桶中(由 `~/.ctxdb/ctxdb.json` 的 `agents.<name>.user_id` 决定)。
102
+ ## 5. 注意事项
129
103
 
130
- 不带 `--agent` 时的解析顺序:`CTXDB_AGENT` 环境变量 `agents.default` 配置段。
104
+ ### 注意事项 1:`memory add` 返回 `event: NONE` 是正常的
131
105
 
132
- ## Hooks 感知
106
+ - **现象**:调 `memory add "<text>"` 后 `results` 为空数组、`event: NONE`
107
+ - **根因**:服务端默认走 LLM fact-extraction,LLM 判断这段话**没新事实可提**(已存在 / 太啰嗦 / 不构成事实)
108
+ - **正确做法**:想强制原文存加 `--no-infer`;如果用户输入的就是"已知事实重复",告诉用户"系统认为这条不构成新事实"而不是判定写失败
133
109
 
134
- **autoCapture**:如果对话中出现 `<recalled-memories>` 块,表示 Stop hook 在每轮对话结束后自动提取事实写入记忆。`memory add` 在此基础上用于用户主动强调的内容(加强记忆)。
110
+ ### 注意事项 2:`memory search` 拿到的是**提炼后事实**,不是原对话
135
111
 
136
- **autoRecall**:`<recalled-memories>` 块内容是 UserPromptSubmit hook 自动搜索当前 prompt 相关记忆的结果。
112
+ - **现象**:用户问"上次我说过 X 吗",`memory search "X"` 返回的是 LLM 提炼出的事实,跟用户原话措辞不同;用户会觉得"这不是我说的"
113
+ - **根因**:autoCapture / `memory add` 默认走 fact-extraction,存的是提炼版
114
+ - **正确做法**:要拿用户原话 → 看 transcript / 聊天记录文件;记忆桶只能告诉你"用户曾说过类似 X 这个事实"
137
115
 
138
- **B-3c 守卫**:包含 `kb upload-text` `kb upload-file` 操作的对话轮次,其内容不会被 autoCapture 写入记忆(防止文档原文混入记忆)。
116
+ ### 注意事项 3:`memory delete --all` 不可逆,**必须二次确认**
139
117
 
140
- 如果对话中没有 `<recalled-memories>`,表示当前为纯 CLI 模式,所有操作需主动调用。
118
+ - **现象**:用户说"清空记忆",agent 直接跑 `memory delete --all`
119
+ - **根因**:这条命令清掉当前 `--agent` 桶下绑定 user_id 的**所有**记忆;服务端不存软删,事后无法恢复
120
+ - **正确做法**:跑之前必须跟用户确认"将清空 agent=<name> 桶下所有记忆,不可恢复,确认吗?";用户回 yes 才执行
141
121
 
142
- 所有命令输出 JSON stdout,错误输出到 stderr 并返回非零退出码。
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.7",
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": ">=22"
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
  }