1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
实现源码:[mod.rs](mod.rs)
与 [OpenClaw Memory 概念](https://github.com/openclaw/openclaw/blob/main/docs/concepts/memory.md) 一致的理念:**工作区内纯 Markdown**、按日流水 + 长期总结。路径约定在本库中默认为:
OpenClaw 上游常用的是根下 `memory/YYYY-MM-DD.md` 与根目录 `MEMORY.md`;这里把二者收拢在 **`.agent/memory/`** 下,并按 **年/月/日** 分子目录。可通过 [`MemoryContext::with_memory_dir_relative`](mod.rs) 改掉整个记忆根目录。
每条记录为一个 `### key` 小节,正文为 `content`,块末带有本库写入的 `<!-- agentool-memory: at=… tags=a|b -->` 元数据。
`memory_write` 会在**整个记忆目录**下扫描已有块:**任意 `.md` 中已存在相同 `### key` 则返回 `MEMORY_KEY_EXISTS`**,不会追加。此时应先用 `memory_read` 查看当前正文(含 `kind` / `file`),再用 `memory_update` 替换「规范块」(见下)。
- -
**新建**一条记忆(`key` 全局不得重复)。
**返回**:`key`、`target`、`path`(相对记忆根目录)。
用新正文**替换**当前「规范块」(解析规则与 `memory_read` 相同):在**原文件**中删除该块的字节区间,并在**该文件末尾**追加新块(新 `at`、可更新 `tags`)。
**返回**:`key`、`path`、`kind`(`summary` / `daily`,表示被替换块原先所在类型)。
若 `key` 不存在: `MEMORY_KEY_NOT_FOUND`。
见上文「总结优先」。返回字段:`key`、`content`、`tags`、`file`、`kind`、`created_at`、`updated_at`(当前块元数据中的 `at`;追加型更新后二者一致)。
不区分大小写的子串匹配(`key` 与 `content`)。结果含 **`kind`**,**summary 排在 daily 之前**。
解析器以 `### ` 行作为块起点。手写块若无 `<!-- agentool-memory: ... -->`,`at` 为空,在排序中视为最旧;`memory_read` 在「多候选」时可能不如带时间戳的块优先。