openmemory-plus 1.1.0 → 1.2.3
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/index.js +58 -38
- package/package.json +1 -1
- package/templates/augment/AGENTS.md +42 -22
- package/templates/claude/CLAUDE.md +31 -10
- package/templates/common/AGENTS.md +16 -8
- package/templates/cursor/.cursorrules +57 -33
- package/templates/gemini/gemini.md +42 -23
- package/templates/shared/_omp/commands/memory-actions/clean.md +54 -0
- package/templates/shared/_omp/commands/memory-actions/decay.md +64 -0
- package/templates/shared/_omp/commands/memory-actions/graph.md +75 -0
- package/templates/shared/_omp/commands/memory-actions/search.md +38 -0
- package/templates/shared/_omp/commands/memory-actions/status.md +35 -0
- package/templates/shared/_omp/commands/memory-actions/store.md +45 -0
- package/templates/shared/_omp/commands/memory-actions/sync.md +50 -0
- package/templates/shared/_omp/commands/memory.md +86 -0
- package/templates/shared/{skills → _omp/skills}/memory-extraction/SKILL.md +92 -51
- package/templates/shared/_omp/skills/memory-extraction/scripts/validate.sh +94 -0
- package/templates/shared/_omp/skills/memory-extraction/templates/decision.yaml.tmpl +32 -0
- package/templates/shared/_omp/skills/memory-extraction/templates/session.yaml.tmpl +35 -0
- package/templates/shared/commands/mem-clean.md +0 -117
- package/templates/shared/commands/mem-decay.md +0 -81
- package/templates/shared/commands/mem-extract.md +0 -84
- package/templates/shared/commands/mem-graph.md +0 -112
- package/templates/shared/commands/mem-search.md +0 -104
- package/templates/shared/commands/mem-status.md +0 -76
- package/templates/shared/commands/mem-sync.md +0 -106
- package/templates/shared/commands/memory.md +0 -89
- package/templates/shared/rules/classification.md +0 -108
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memory-extraction
|
|
3
|
-
description: Agent-only workflow for extracting key information from conversations, code changes, and deployments into structured memory files. Automatically updates
|
|
3
|
+
description: Agent-only workflow for extracting key information from conversations, code changes, and deployments into structured memory files. Automatically updates `_omp/.memory/` directory and notifies other agents. Triggered automatically at conversation end or when valuable information is detected.
|
|
4
4
|
metadata:
|
|
5
5
|
author: Wendy (Workflow Builder)
|
|
6
|
-
version: "2.
|
|
6
|
+
version: "2.1"
|
|
7
7
|
language: zh-CN
|
|
8
8
|
audience: agent-only
|
|
9
9
|
---
|
|
@@ -13,41 +13,81 @@ metadata:
|
|
|
13
13
|
## 目的
|
|
14
14
|
|
|
15
15
|
**自动提取对话中的关键信息**,智能路由到正确的存储系统:
|
|
16
|
-
- **项目级信息** →
|
|
16
|
+
- **项目级信息** → `_omp/.memory/` 目录 (Git 版本控制)
|
|
17
17
|
- **用户级信息** → `openmemory` MCP (跨项目共享)
|
|
18
18
|
|
|
19
19
|
> **Agent-Only 原则**:
|
|
20
20
|
> - **自动触发**:对话结束时或检测到有价值信息时自动运行
|
|
21
21
|
> - **智能分类**:根据信息类型自动选择存储位置
|
|
22
22
|
> - **零人工干预**:无需用户确认,静默执行
|
|
23
|
-
> - **双系统同步**:同时管理
|
|
23
|
+
> - **双系统同步**:同时管理 `_omp/.memory/` 和 `openmemory`
|
|
24
24
|
|
|
25
|
-
##
|
|
25
|
+
## 核心目录结构
|
|
26
26
|
|
|
27
27
|
```
|
|
28
|
-
|
|
29
|
-
├──
|
|
30
|
-
│ ├──
|
|
31
|
-
│
|
|
32
|
-
|
|
33
|
-
└──
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
_omp/ # OpenMemory Plus 核心目录
|
|
29
|
+
├── commands/
|
|
30
|
+
│ ├── memory.md # 主命令入口
|
|
31
|
+
│ └── memory-actions/ # 7 个子动作
|
|
32
|
+
├── skills/
|
|
33
|
+
│ └── memory-extraction/ # 本 Skill
|
|
34
|
+
│ ├── SKILL.md
|
|
35
|
+
│ ├── scripts/validate.sh
|
|
36
|
+
│ └── templates/*.tmpl
|
|
37
|
+
└── .memory/ # 项目级记忆
|
|
38
|
+
├── project.yaml # 项目配置 (SSOT)
|
|
39
|
+
├── decisions.yaml # 技术决策记录
|
|
40
|
+
├── changelog.yaml # 变更历史
|
|
41
|
+
└── sessions/ # 会话记录
|
|
37
42
|
```
|
|
38
43
|
|
|
44
|
+
## 双层记忆架构
|
|
45
|
+
|
|
46
|
+
| 系统 | 存储位置 | 用途 |
|
|
47
|
+
|------|----------|------|
|
|
48
|
+
| 项目级 | `_omp/.memory/` | 项目配置、技术决策、变更记录 |
|
|
49
|
+
| 用户级 | `openmemory` MCP | 用户偏好、技能、跨项目上下文 |
|
|
50
|
+
|
|
39
51
|
## 分类规则
|
|
40
52
|
|
|
41
|
-
|
|
53
|
+
### 存储位置决策表
|
|
54
|
+
|
|
55
|
+
| 信息类型 | 存储位置 | 识别关键词 |
|
|
56
|
+
|----------|----------|------------|
|
|
57
|
+
| 项目配置 | `_omp/.memory/project.yaml` | url, domain, deploy, vercel, config, path |
|
|
58
|
+
| 技术决策 | `_omp/.memory/decisions.yaml` | 决定, 选择, 采用, 架构, decision, choose |
|
|
59
|
+
| 变更记录 | `_omp/.memory/changelog.yaml` | 更新, 修改, 发布, update, change, release |
|
|
60
|
+
| 用户偏好 | `openmemory` | 偏好, 喜欢, 习惯, prefer, style, always |
|
|
61
|
+
| 用户技能 | `openmemory` | 会, 熟悉, 经验, skill, experience, know |
|
|
62
|
+
| 对话上下文 | `openmemory` | 之前, 上次, 记得, remember, last time |
|
|
63
|
+
|
|
64
|
+
### 分类优先级
|
|
65
|
+
|
|
66
|
+
1. **项目相关** → `_omp/.memory/` (Git 版本控制)
|
|
67
|
+
2. **用户相关** → `openmemory` (跨项目共享)
|
|
68
|
+
3. **混合信息** → 拆分存储到两个系统
|
|
42
69
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
|
48
|
-
|
|
49
|
-
|
|
|
50
|
-
|
|
|
70
|
+
### 敏感信息过滤
|
|
71
|
+
|
|
72
|
+
**禁止存储**(检测后阻止):
|
|
73
|
+
|
|
74
|
+
| 类型 | 检测模式 |
|
|
75
|
+
|------|----------|
|
|
76
|
+
| API Key | `sk-`, `api_key`, `token=`, `bearer` |
|
|
77
|
+
| 密码 | `password`, `secret`, `credential` |
|
|
78
|
+
| 私钥 | `-----BEGIN`, `PRIVATE KEY` |
|
|
79
|
+
| 个人信息 | 身份证号, 银行卡号, 手机号 |
|
|
80
|
+
|
|
81
|
+
### ROT 过滤规则
|
|
82
|
+
|
|
83
|
+
**不存储的信息**:
|
|
84
|
+
|
|
85
|
+
| 类型 | 示例 |
|
|
86
|
+
|------|------|
|
|
87
|
+
| 琐碎确认 | "好的", "OK", "明白了" |
|
|
88
|
+
| 临时状态 | "正在处理...", "稍等" |
|
|
89
|
+
| 重复信息 | 已存在的相同内容 |
|
|
90
|
+
| 过期信息 | 被明确否定或更新的旧信息 |
|
|
51
91
|
|
|
52
92
|
## 触发条件
|
|
53
93
|
|
|
@@ -83,20 +123,20 @@ Agent 记忆系统
|
|
|
83
123
|
| P0 | 服务配置 | `config`, `secret`, `token`, API 密钥 | 更新 VERCEL_TOKEN |
|
|
84
124
|
| P1 | 技术决策 | `决定`, `选择`, `采用`, 架构变更 | 选择 YAML 格式 |
|
|
85
125
|
| P1 | 项目里程碑 | `完成`, `上线`, `发布`, 版本号 | v1.0 发布 |
|
|
86
|
-
| P2 | 路径变更 | 目录创建/移动, 文件重组 | 创建
|
|
126
|
+
| P2 | 路径变更 | 目录创建/移动, 文件重组 | 创建 _omp/.memory/ |
|
|
87
127
|
| P2 | 工具配置 | CLI 安装, 依赖更新 | 安装 resumes-cli |
|
|
88
128
|
|
|
89
129
|
### Phase 2: 信息分类与路由
|
|
90
130
|
|
|
91
131
|
根据检测结果,**智能路由**到正确的存储系统:
|
|
92
132
|
|
|
93
|
-
#### 项目级 →
|
|
133
|
+
#### 项目级 → `_omp/.memory/`
|
|
94
134
|
|
|
95
135
|
| 分类 | 目标文件 | 内容类型 |
|
|
96
136
|
|------|----------|----------|
|
|
97
|
-
| `project` |
|
|
98
|
-
| `decisions` |
|
|
99
|
-
| `changelog` |
|
|
137
|
+
| `project` | `_omp/.memory/project.yaml` | 项目常量、部署信息、路径 |
|
|
138
|
+
| `decisions` | `_omp/.memory/decisions.yaml` | 重要技术决策记录 |
|
|
139
|
+
| `changelog` | `_omp/.memory/changelog.yaml` | 变更历史 |
|
|
100
140
|
|
|
101
141
|
#### 用户级 → `openmemory`
|
|
102
142
|
|
|
@@ -158,7 +198,7 @@ paths:
|
|
|
158
198
|
|
|
159
199
|
**示例写入**:
|
|
160
200
|
```yaml
|
|
161
|
-
#
|
|
201
|
+
# _omp/.memory/project.yaml
|
|
162
202
|
deployment:
|
|
163
203
|
vercel:
|
|
164
204
|
url: https://web-zeta-six-79.vercel.app
|
|
@@ -171,7 +211,7 @@ deployment:
|
|
|
171
211
|
更新完成后,在以下位置添加通知标记:
|
|
172
212
|
|
|
173
213
|
```yaml
|
|
174
|
-
#
|
|
214
|
+
# _omp/.memory/project.yaml (底部)
|
|
175
215
|
_meta:
|
|
176
216
|
last_updated: 2026-02-02T10:30:00Z
|
|
177
217
|
updated_by: memory-extraction-skill
|
|
@@ -183,10 +223,10 @@ _meta:
|
|
|
183
223
|
|
|
184
224
|
## 输出格式
|
|
185
225
|
|
|
186
|
-
###
|
|
226
|
+
### `_omp/.memory/project.yaml` (主配置)
|
|
187
227
|
见现有文件结构,本 Skill 负责自动更新。
|
|
188
228
|
|
|
189
|
-
###
|
|
229
|
+
### `_omp/.memory/sessions/{date}.yaml` (会话记录)
|
|
190
230
|
```yaml
|
|
191
231
|
date: 2026-02-02
|
|
192
232
|
sessions:
|
|
@@ -196,12 +236,12 @@ sessions:
|
|
|
196
236
|
summary: "部署 Vercel 并配置 Cloudflare Worker"
|
|
197
237
|
key_actions:
|
|
198
238
|
- "更新 VERCEL_TOKEN GitHub Secret"
|
|
199
|
-
- "创建
|
|
239
|
+
- "创建 _omp/.memory/ 目录结构"
|
|
200
240
|
decisions:
|
|
201
241
|
- "采用 YAML 格式作为 memory 存储格式"
|
|
202
242
|
```
|
|
203
243
|
|
|
204
|
-
###
|
|
244
|
+
### `_omp/.memory/decisions.yaml` (决策记录)
|
|
205
245
|
```yaml
|
|
206
246
|
decisions:
|
|
207
247
|
- id: dec-2026-02-02-001
|
|
@@ -219,16 +259,16 @@ decisions:
|
|
|
219
259
|
|
|
220
260
|
### 读取方(其他 Agent)
|
|
221
261
|
|
|
222
|
-
其他 Agent 应在启动时读取
|
|
262
|
+
其他 Agent 应在启动时读取 `_omp/.memory/project.yaml`:
|
|
223
263
|
|
|
224
264
|
```markdown
|
|
225
265
|
<!-- 在 CLAUDE.md 或 Agent 配置中 -->
|
|
226
|
-
> 📌 **配置中心**: 项目常量统一存储在
|
|
266
|
+
> 📌 **配置中心**: 项目常量统一存储在 `_omp/.memory/project.yaml`
|
|
227
267
|
```
|
|
228
268
|
|
|
229
269
|
### 写入方(本 Skill)
|
|
230
270
|
|
|
231
|
-
本 Skill 是
|
|
271
|
+
本 Skill 是 `_omp/.memory/` 的唯一写入者,确保:
|
|
232
272
|
- 格式一致性
|
|
233
273
|
- 无冲突写入
|
|
234
274
|
- 变更可追溯
|
|
@@ -248,15 +288,15 @@ decisions:
|
|
|
248
288
|
|
|
249
289
|
### 回退机制
|
|
250
290
|
|
|
251
|
-
1. **写入前备份**: 修改前复制到
|
|
291
|
+
1. **写入前备份**: 修改前复制到 `_omp/.memory/.backup/`
|
|
252
292
|
2. **原子写入**: 写入临时文件,验证后重命名
|
|
253
|
-
3. **错误日志**: 记录到
|
|
293
|
+
3. **错误日志**: 记录到 `_omp/.memory/sessions/{date}.yaml` 的 `errors` 字段
|
|
254
294
|
|
|
255
295
|
### 验证脚本
|
|
256
296
|
|
|
257
297
|
```bash
|
|
258
298
|
# 验证所有 YAML 文件
|
|
259
|
-
|
|
299
|
+
_omp/skills/memory-extraction/scripts/validate.sh
|
|
260
300
|
```
|
|
261
301
|
|
|
262
302
|
---
|
|
@@ -270,7 +310,7 @@ decisions:
|
|
|
270
310
|
| 用户结束对话 | 用户说 "bye", "结束", "exit", "谢谢" | `用户: 好的,先这样` |
|
|
271
311
|
| 部署完成 | 检测到 deploy/vercel/wrangler 输出 | `vercel --prod` 成功 |
|
|
272
312
|
| 配置变更 | 修改了 env/secret/config 文件 | 更新 `.env` |
|
|
273
|
-
| 创建新目录 | 创建了项目级目录 | `mkdir
|
|
313
|
+
| 创建新目录 | 创建了项目级目录 | `mkdir _omp/.memory/` |
|
|
274
314
|
| 重要决策 | 对话中明确了技术选型 | `决定使用 YAML 格式` |
|
|
275
315
|
|
|
276
316
|
### 不触发的场景
|
|
@@ -290,9 +330,9 @@ decisions:
|
|
|
290
330
|
|
|
291
331
|
### Schema 验证
|
|
292
332
|
|
|
293
|
-
-
|
|
294
|
-
-
|
|
295
|
-
-
|
|
333
|
+
- `_omp/.memory/schema/project.schema.json`
|
|
334
|
+
- `_omp/.memory/schema/decisions.schema.json`
|
|
335
|
+
- `_omp/.memory/schema/session.schema.json`
|
|
296
336
|
|
|
297
337
|
---
|
|
298
338
|
|
|
@@ -327,7 +367,7 @@ Agent 在查询记忆时应检测两系统数据一致性:
|
|
|
327
367
|
↓
|
|
328
368
|
提取关键实体 (URL, 配置值, 技术选型)
|
|
329
369
|
↓
|
|
330
|
-
比对
|
|
370
|
+
比对 _omp/.memory/ vs openmemory
|
|
331
371
|
↓
|
|
332
372
|
发现差异 → 提示用户确认
|
|
333
373
|
↓
|
|
@@ -338,7 +378,7 @@ Agent 在查询记忆时应检测两系统数据一致性:
|
|
|
338
378
|
|
|
339
379
|
| 场景 | 处理方式 |
|
|
340
380
|
|------|----------|
|
|
341
|
-
| URL 不一致 | 提示用户,优先
|
|
381
|
+
| URL 不一致 | 提示用户,优先 `_omp/.memory/` |
|
|
342
382
|
| 技术选型冲突 | 展示两边,请求决策 |
|
|
343
383
|
| 时间戳可判断 | 自动保留较新版本 |
|
|
344
384
|
|
|
@@ -352,7 +392,7 @@ Agent 在对话开始时应**并行查询**两个系统:
|
|
|
352
392
|
对话开始
|
|
353
393
|
↓
|
|
354
394
|
┌─────────────────┐ ┌─────────────────┐
|
|
355
|
-
│
|
|
395
|
+
│ _omp/.memory/ │ │ openmemory │
|
|
356
396
|
│ (读取 YAML) │ │ (search_memory) │
|
|
357
397
|
└────────┬────────┘ └────────┬────────┘
|
|
358
398
|
│ │
|
|
@@ -362,7 +402,7 @@ Agent 在对话开始时应**并行查询**两个系统:
|
|
|
362
402
|
```
|
|
363
403
|
|
|
364
404
|
**加载步骤**:
|
|
365
|
-
1. 读取
|
|
405
|
+
1. 读取 `_omp/.memory/project.yaml` 获取项目配置
|
|
366
406
|
2. 调用 `search_memory_openmemory` 查询相关用户记忆
|
|
367
407
|
3. 融合两边信息作为对话上下文
|
|
368
408
|
|
|
@@ -371,12 +411,12 @@ Agent 在对话开始时应**并行查询**两个系统:
|
|
|
371
411
|
**当 openmemory MCP 不可用时**:
|
|
372
412
|
|
|
373
413
|
1. 检测 MCP 连接状态(调用失败或超时)
|
|
374
|
-
2. 降级到仅
|
|
375
|
-
3. 用户级信息临时存入
|
|
414
|
+
2. 降级到仅 `_omp/.memory/` 存储
|
|
415
|
+
3. 用户级信息临时存入 `_omp/.memory/user-context.yaml`
|
|
376
416
|
4. 服务恢复后提示用户同步
|
|
377
417
|
|
|
378
418
|
```yaml
|
|
379
|
-
#
|
|
419
|
+
# _omp/.memory/user-context.yaml (降级时使用)
|
|
380
420
|
_degraded: true
|
|
381
421
|
_reason: "openmemory MCP unavailable"
|
|
382
422
|
pending_memories:
|
|
@@ -388,6 +428,7 @@ pending_memories:
|
|
|
388
428
|
|
|
389
429
|
| 版本 | 变更 |
|
|
390
430
|
|------|------|
|
|
431
|
+
| v2.1 | 目录重构:_omp/ 统一目录,移除 rules/,分类规则内嵌 |
|
|
391
432
|
| v2.0 | 双层记忆架构:整合 openmemory MCP,智能分类路由 |
|
|
392
433
|
| v1.1 | 添加错误处理、Schema 验证、模板文件、触发条件详解 |
|
|
393
434
|
| v1.0 | 初始版本:自动提取、YAML 存储、多 Agent 通知 |
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Memory YAML Validation Script
|
|
4
|
+
# Usage: ./validate.sh [file|all]
|
|
5
|
+
# Validates _omp/.memory/*.yaml files against JSON Schema
|
|
6
|
+
#
|
|
7
|
+
# Dependencies (optional, for full schema validation):
|
|
8
|
+
# npm install -g ajv-cli
|
|
9
|
+
#
|
|
10
|
+
# Without ajv-cli, only YAML syntax is validated.
|
|
11
|
+
|
|
12
|
+
set -e
|
|
13
|
+
|
|
14
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
15
|
+
# Navigate up to project root: scripts -> memory-extraction -> skills -> _omp -> project_root
|
|
16
|
+
PROJECT_ROOT="${SCRIPT_DIR}/../../../../"
|
|
17
|
+
MEMORY_DIR="${PROJECT_ROOT}/_omp/.memory"
|
|
18
|
+
SCHEMA_DIR="${MEMORY_DIR}/schema"
|
|
19
|
+
|
|
20
|
+
# Colors
|
|
21
|
+
RED='\033[0;31m'
|
|
22
|
+
GREEN='\033[0;32m'
|
|
23
|
+
YELLOW='\033[1;33m'
|
|
24
|
+
NC='\033[0m'
|
|
25
|
+
|
|
26
|
+
validate_yaml() {
|
|
27
|
+
local file="$1"
|
|
28
|
+
local schema="$2"
|
|
29
|
+
|
|
30
|
+
echo -n " Validating $(basename "$file")... "
|
|
31
|
+
|
|
32
|
+
# Check if file exists
|
|
33
|
+
if [ ! -f "$file" ]; then
|
|
34
|
+
echo -e "${RED}NOT FOUND${NC}"
|
|
35
|
+
return 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Check YAML syntax using ruby (built-in on macOS)
|
|
39
|
+
if command -v ruby &> /dev/null; then
|
|
40
|
+
if ! ruby -e "require 'yaml'; YAML.load_file('$file')" 2>/dev/null; then
|
|
41
|
+
echo -e "${RED}YAML SYNTAX ERROR${NC}"
|
|
42
|
+
return 1
|
|
43
|
+
fi
|
|
44
|
+
# Fallback: basic structure check
|
|
45
|
+
elif ! grep -q "^[a-z_]*:" "$file" 2>/dev/null; then
|
|
46
|
+
echo -e "${YELLOW}COULD NOT VALIDATE${NC}"
|
|
47
|
+
return 0
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
# Validate against schema (if ajv or similar is available)
|
|
51
|
+
if command -v ajv &> /dev/null && [ -f "$schema" ]; then
|
|
52
|
+
if ajv validate -s "$schema" -d "$file" --spec=draft7 2>/dev/null; then
|
|
53
|
+
echo -e "${GREEN}VALID${NC}"
|
|
54
|
+
return 0
|
|
55
|
+
else
|
|
56
|
+
echo -e "${YELLOW}SCHEMA MISMATCH${NC}"
|
|
57
|
+
return 1
|
|
58
|
+
fi
|
|
59
|
+
else
|
|
60
|
+
echo -e "${GREEN}YAML OK${NC} (schema validation skipped)"
|
|
61
|
+
return 0
|
|
62
|
+
fi
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
echo "🔍 Memory YAML Validation"
|
|
66
|
+
echo "========================="
|
|
67
|
+
echo ""
|
|
68
|
+
|
|
69
|
+
ERRORS=0
|
|
70
|
+
|
|
71
|
+
# Validate project.yaml
|
|
72
|
+
echo "📁 _omp/.memory/"
|
|
73
|
+
validate_yaml "${MEMORY_DIR}/project.yaml" "${SCHEMA_DIR}/project.schema.json" || ERRORS=$((ERRORS + 1))
|
|
74
|
+
validate_yaml "${MEMORY_DIR}/decisions.yaml" "${SCHEMA_DIR}/decisions.schema.json" || ERRORS=$((ERRORS + 1))
|
|
75
|
+
validate_yaml "${MEMORY_DIR}/changelog.yaml" "" || ERRORS=$((ERRORS + 1))
|
|
76
|
+
|
|
77
|
+
# Validate session files
|
|
78
|
+
echo ""
|
|
79
|
+
echo "📁 _omp/.memory/sessions/"
|
|
80
|
+
for session_file in "${MEMORY_DIR}"/sessions/*.yaml; do
|
|
81
|
+
if [ -f "$session_file" ]; then
|
|
82
|
+
validate_yaml "$session_file" "${SCHEMA_DIR}/session.schema.json" || ERRORS=$((ERRORS + 1))
|
|
83
|
+
fi
|
|
84
|
+
done
|
|
85
|
+
|
|
86
|
+
echo ""
|
|
87
|
+
if [ $ERRORS -eq 0 ]; then
|
|
88
|
+
echo -e "${GREEN}✅ All validations passed!${NC}"
|
|
89
|
+
exit 0
|
|
90
|
+
else
|
|
91
|
+
echo -e "${RED}❌ $ERRORS validation error(s) found${NC}"
|
|
92
|
+
exit 1
|
|
93
|
+
fi
|
|
94
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Decision Template
|
|
2
|
+
# 追加到 .memory/decisions.yaml 的 decisions 数组中
|
|
3
|
+
#
|
|
4
|
+
# ============================================
|
|
5
|
+
# 使用说明 (Agent 参考)
|
|
6
|
+
# ============================================
|
|
7
|
+
# 变量占位符:
|
|
8
|
+
# {{date}} - 日期 (YYYY-MM-DD)
|
|
9
|
+
# {{seq}} - 当日序号 (001, 002, 003...)
|
|
10
|
+
# {{title}} - 决策标题
|
|
11
|
+
# {{context}} - 决策背景/问题描述
|
|
12
|
+
# {{choice}} - 最终选择
|
|
13
|
+
# {{alt_1}} - 备选方案 (可多个: alt_2, alt_3...)
|
|
14
|
+
# {{rationale}} - 选择理由
|
|
15
|
+
# {{impact_1}} - 影响范围 (可多个: impact_2, impact_3...)
|
|
16
|
+
# ============================================
|
|
17
|
+
|
|
18
|
+
- id: dec-{{date}}-{{seq}}
|
|
19
|
+
date: {{date}}
|
|
20
|
+
title: "{{title}}"
|
|
21
|
+
context: |
|
|
22
|
+
{{context}}
|
|
23
|
+
choice: "{{choice}}"
|
|
24
|
+
alternatives:
|
|
25
|
+
- "{{alt_1}}"
|
|
26
|
+
- "{{alt_2}}"
|
|
27
|
+
rationale: |
|
|
28
|
+
{{rationale}}
|
|
29
|
+
impact:
|
|
30
|
+
- "{{impact_1}}"
|
|
31
|
+
status: active
|
|
32
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# .memory/sessions/{{date}}.yaml - 会话记录
|
|
2
|
+
# 由 memory-extraction skill 自动维护
|
|
3
|
+
#
|
|
4
|
+
# ============================================
|
|
5
|
+
# 使用说明 (Agent 参考)
|
|
6
|
+
# ============================================
|
|
7
|
+
# 变量占位符:
|
|
8
|
+
# {{date}} - 日期 (YYYY-MM-DD)
|
|
9
|
+
# {{timestamp}} - ISO 8601 时间戳 (2026-02-02T14:30:00+08:00)
|
|
10
|
+
# {{summary}} - 会话摘要
|
|
11
|
+
# {{action_1}} - 关键操作 (可多个: action_2, action_3...)
|
|
12
|
+
# {{decision_id}} - 决策 ID (dec-YYYY-MM-DD-NNN)
|
|
13
|
+
# {{decision_title}} - 决策标题
|
|
14
|
+
# {{outcome_1}} - 成果 (可多个: outcome_2, outcome_3...)
|
|
15
|
+
# ============================================
|
|
16
|
+
|
|
17
|
+
date: {{date}}
|
|
18
|
+
|
|
19
|
+
sessions:
|
|
20
|
+
- id: session-001
|
|
21
|
+
summary: "{{summary}}"
|
|
22
|
+
key_actions:
|
|
23
|
+
- "{{action_1}}"
|
|
24
|
+
decisions:
|
|
25
|
+
- id: "{{decision_id}}"
|
|
26
|
+
title: "{{decision_title}}"
|
|
27
|
+
outcomes:
|
|
28
|
+
- "{{outcome_1}}"
|
|
29
|
+
|
|
30
|
+
# 元数据
|
|
31
|
+
_meta:
|
|
32
|
+
last_updated: {{timestamp}}
|
|
33
|
+
updated_by: memory-extraction-skill
|
|
34
|
+
total_sessions: 1
|
|
35
|
+
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: '清理 ROT (冗余/过时/琐碎) 记忆'
|
|
3
|
-
argument-hint: '[--dry-run] [--force] [--type=all|redundant|outdated|trivial]'
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /mem clean
|
|
7
|
-
|
|
8
|
-
清理 ROT (Redundant, Outdated, Trivial) 记忆。
|
|
9
|
-
|
|
10
|
-
> 💡 返回入口: `/memory`
|
|
11
|
-
|
|
12
|
-
## 触发
|
|
13
|
-
|
|
14
|
-
- `/mem clean`
|
|
15
|
-
- `/memory clean`
|
|
16
|
-
- `清理记忆`
|
|
17
|
-
|
|
18
|
-
## 执行流程
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
/mem clean
|
|
22
|
-
↓
|
|
23
|
-
1. 列出所有 openmemory 记忆
|
|
24
|
-
↓
|
|
25
|
-
2. 分析识别 ROT
|
|
26
|
-
↓
|
|
27
|
-
3. 生成清理报告
|
|
28
|
-
↓
|
|
29
|
-
4. 用户确认
|
|
30
|
-
↓
|
|
31
|
-
5. 批量删除
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## ROT 识别规则
|
|
35
|
-
|
|
36
|
-
### Redundant (冗余)
|
|
37
|
-
|
|
38
|
-
| 规则 | 说明 |
|
|
39
|
-
|------|------|
|
|
40
|
-
| 语义相似度 >90% | 两条记忆表达相同意思 |
|
|
41
|
-
| 完全重复 | 文本完全相同 |
|
|
42
|
-
| 子集包含 | 一条记忆是另一条的子集 |
|
|
43
|
-
|
|
44
|
-
### Outdated (过时)
|
|
45
|
-
|
|
46
|
-
| 规则 | 说明 |
|
|
47
|
-
|------|------|
|
|
48
|
-
| 被明确否定 | "不再使用 X" 后 X 相关记忆 |
|
|
49
|
-
| 版本过时 | 旧版本配置信息 |
|
|
50
|
-
| 时间过期 | 临时性信息超过有效期 |
|
|
51
|
-
|
|
52
|
-
### Trivial (琐碎)
|
|
53
|
-
|
|
54
|
-
| 规则 | 说明 |
|
|
55
|
-
|------|------|
|
|
56
|
-
| 长度 <10 字符 | 过短无意义 |
|
|
57
|
-
| 纯确认语 | "好的", "OK", "明白" |
|
|
58
|
-
| 无实质内容 | 无法提取有价值信息 |
|
|
59
|
-
|
|
60
|
-
## 输出格式
|
|
61
|
-
|
|
62
|
-
```
|
|
63
|
-
🧹 记忆清理分析
|
|
64
|
-
|
|
65
|
-
扫描完成: 共 47 条记忆
|
|
66
|
-
|
|
67
|
-
📊 ROT 分析结果:
|
|
68
|
-
|
|
69
|
-
🔴 Redundant (冗余): 3 条
|
|
70
|
-
├── [ID: abc123] "用户偏好中文"
|
|
71
|
-
│ └── 与 [ID: def456] 重复
|
|
72
|
-
|
|
73
|
-
🟡 Outdated (过时): 2 条
|
|
74
|
-
├── [ID: mno345] "部署地址是 old-url"
|
|
75
|
-
│ └── 已被新地址替代
|
|
76
|
-
|
|
77
|
-
⚪ Trivial (琐碎): 5 条
|
|
78
|
-
├── [ID: pqr678] "好的"
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
建议清理: 10 条 | 保留: 37 条
|
|
82
|
-
|
|
83
|
-
确认清理? [y/N]:
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## 安全机制
|
|
87
|
-
|
|
88
|
-
1. **预览模式**: 默认只显示,不删除
|
|
89
|
-
2. **确认机制**: 必须用户确认才执行
|
|
90
|
-
3. **批量限制**: 单次最多删除 20 条
|
|
91
|
-
4. **保护规则**: 最近 7 天的记忆不自动标记
|
|
92
|
-
|
|
93
|
-
## 参数
|
|
94
|
-
|
|
95
|
-
| 参数 | 说明 | 默认值 |
|
|
96
|
-
|------|------|--------|
|
|
97
|
-
| --dry-run | 仅预览,不删除 | true |
|
|
98
|
-
| --force | 跳过确认 | false |
|
|
99
|
-
| --type | 仅清理指定类型 | all |
|
|
100
|
-
|
|
101
|
-
## 示例
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
# 预览清理
|
|
105
|
-
/mem clean
|
|
106
|
-
|
|
107
|
-
# 仅清理冗余
|
|
108
|
-
/mem clean --type=redundant
|
|
109
|
-
|
|
110
|
-
# 强制清理 (跳过确认)
|
|
111
|
-
/mem clean --force
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
**版本**: v1.1
|
|
117
|
-
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# /mem decay - 记忆衰减状态
|
|
2
|
-
|
|
3
|
-
显示记忆的时间衰减状态,帮助识别需要清理或刷新的记忆。
|
|
4
|
-
|
|
5
|
-
## 使用方法
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
/mem decay [--cleanup] [--refresh <id>]
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## 参数
|
|
12
|
-
|
|
13
|
-
| 参数 | 说明 |
|
|
14
|
-
|------|------|
|
|
15
|
-
| `--cleanup` | 显示建议清理的记忆列表 |
|
|
16
|
-
| `--refresh <id>` | 刷新指定记忆的访问时间 |
|
|
17
|
-
|
|
18
|
-
## 衰减状态说明
|
|
19
|
-
|
|
20
|
-
| 状态 | 说明 | 衰减分数 |
|
|
21
|
-
|------|------|----------|
|
|
22
|
-
| 🟢 Active | 活跃记忆,近期访问或高频使用 | 0.8 - 1.0 |
|
|
23
|
-
| 🟡 Aging | 老化中,一段时间未访问 | 0.5 - 0.8 |
|
|
24
|
-
| 🟠 Stale | 陈旧,长时间未访问 | 0.2 - 0.5 |
|
|
25
|
-
| 🔴 Cleanup | 建议清理 | < 0.2 |
|
|
26
|
-
|
|
27
|
-
## 衰减规则
|
|
28
|
-
|
|
29
|
-
1. **宽限期**: 7 天内访问的记忆不衰减
|
|
30
|
-
2. **核心记忆**: 访问次数 ≥ 5 的记忆永不衰减
|
|
31
|
-
3. **衰减速率**: 宽限期后每天衰减 1%
|
|
32
|
-
4. **清理阈值**: 90 天未访问且分数 < 0.2
|
|
33
|
-
|
|
34
|
-
## 执行流程
|
|
35
|
-
|
|
36
|
-
```yaml
|
|
37
|
-
workflow:
|
|
38
|
-
- step: 加载记忆
|
|
39
|
-
action: 从 openmemory 获取所有记忆
|
|
40
|
-
|
|
41
|
-
- step: 计算衰减
|
|
42
|
-
action: 对每条记忆计算衰减分数
|
|
43
|
-
|
|
44
|
-
- step: 分组显示
|
|
45
|
-
action: 按状态分组展示
|
|
46
|
-
output: |
|
|
47
|
-
## 📊 记忆衰减状态
|
|
48
|
-
|
|
49
|
-
### 🟢 Active (12 条)
|
|
50
|
-
- [ID: xxx] 用户偏好: 深色主题 (访问: 8次, 分数: 1.0)
|
|
51
|
-
- ...
|
|
52
|
-
|
|
53
|
-
### 🟡 Aging (5 条)
|
|
54
|
-
- [ID: yyy] 项目配置: API 端口 (访问: 2次, 分数: 0.65)
|
|
55
|
-
- ...
|
|
56
|
-
|
|
57
|
-
### 🔴 Cleanup (3 条)
|
|
58
|
-
- [ID: zzz] 临时笔记 (访问: 0次, 分数: 0.1)
|
|
59
|
-
|
|
60
|
-
💡 运行 `/mem clean` 清理建议删除的记忆
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## 刷新记忆
|
|
64
|
-
|
|
65
|
-
当某条记忆仍然重要但长时间未访问时,可以手动刷新:
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
/mem decay --refresh abc123
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
这会更新记忆的 `lastAccessedAt` 时间,重置衰减计时。
|
|
72
|
-
|
|
73
|
-
## 相关命令
|
|
74
|
-
|
|
75
|
-
- `/mem clean` - 执行 ROT 清理
|
|
76
|
-
- `/mem status` - 查看记忆状态
|
|
77
|
-
- `/mem search` - 搜索记忆
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
*OpenMemory Plus v2.0 - Memory Decay System*
|
|
81
|
-
|