openmemory-plus 1.2.0 → 1.3.0
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 +524 -163
- package/package.json +1 -1
- package/templates/shared/_omp/commands/memory.md +6 -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/_omp/workflows/memory/steps/clean.md +92 -0
- package/templates/shared/_omp/workflows/memory/steps/decay.md +82 -0
- package/templates/shared/_omp/workflows/memory/steps/graph.md +88 -0
- package/templates/shared/_omp/workflows/memory/steps/search.md +68 -0
- package/templates/shared/_omp/workflows/memory/steps/status.md +63 -0
- package/templates/shared/_omp/workflows/memory/steps/store.md +81 -0
- package/templates/shared/_omp/workflows/memory/steps/sync.md +76 -0
- package/templates/shared/_omp/workflows/memory/workflow.md +147 -0
- package/templates/augment/AGENTS.md +0 -78
- package/templates/claude/CLAUDE.md +0 -52
- package/templates/common/AGENTS.md +0 -51
- package/templates/cursor/.cursorrules +0 -57
- package/templates/gemini/gemini.md +0 -77
- package/templates/shared/commands/memory.md +0 -86
- package/templates/shared/memory/activeContext.md +0 -34
- package/templates/shared/memory/productContext.md +0 -30
- package/templates/shared/memory/progress.md +0 -41
- package/templates/shared/memory/projectbrief.md +0 -36
- package/templates/shared/memory/systemPatterns.md +0 -39
- package/templates/shared/memory/techContext.md +0 -51
- package/templates/shared/memory-actions/clean.md +0 -54
- package/templates/shared/memory-actions/decay.md +0 -64
- package/templates/shared/memory-actions/graph.md +0 -75
- package/templates/shared/memory-actions/search.md +0 -38
- package/templates/shared/memory-actions/status.md +0 -35
- package/templates/shared/memory-actions/store.md +0 -45
- package/templates/shared/memory-actions/sync.md +0 -50
- package/templates/shared/rules/classification.md +0 -108
package/package.json
CHANGED
|
@@ -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
|
+
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: clean
|
|
3
|
+
description: 清理过期、冗余或琐碎的记忆 (ROT)
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Step: 清理记忆
|
|
7
|
+
|
|
8
|
+
## EXECUTION RULES
|
|
9
|
+
|
|
10
|
+
- ✅ Analyze all memories for ROT
|
|
11
|
+
- ✅ Show candidates before deletion
|
|
12
|
+
- ✅ Require user confirmation
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## EXECUTION
|
|
17
|
+
|
|
18
|
+
### 1. Get All Memories
|
|
19
|
+
|
|
20
|
+
Call `list_memories_openmemory` to get all user memories.
|
|
21
|
+
|
|
22
|
+
### 2. Analyze ROT
|
|
23
|
+
|
|
24
|
+
Identify cleanup candidates:
|
|
25
|
+
|
|
26
|
+
| Type | Definition | Detection |
|
|
27
|
+
|------|------------|-----------|
|
|
28
|
+
| **Redundant** (冗余) | 重复或相似 | 语义相似度 > 0.9 |
|
|
29
|
+
| **Outdated** (过时) | 超过 90 天 | 创建时间 > 90 days |
|
|
30
|
+
| **Trivial** (琐碎) | 无实际价值 | 内容 < 10 chars or too generic |
|
|
31
|
+
|
|
32
|
+
### 3. Display Candidates
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
🧹 清理候选记忆
|
|
36
|
+
|
|
37
|
+
以下记忆可能需要清理:
|
|
38
|
+
|
|
39
|
+
⚠️ Outdated (过时):
|
|
40
|
+
{foreach outdated}
|
|
41
|
+
{n}. "{content}"
|
|
42
|
+
创建: {days_ago} 天前
|
|
43
|
+
{/foreach}
|
|
44
|
+
|
|
45
|
+
⚠️ Redundant (冗余):
|
|
46
|
+
{foreach redundant}
|
|
47
|
+
{n}. "{content}" (与 "{similar_to}" 相似)
|
|
48
|
+
{/foreach}
|
|
49
|
+
|
|
50
|
+
⚠️ Trivial (琐碎):
|
|
51
|
+
{foreach trivial}
|
|
52
|
+
{n}. "{content}"
|
|
53
|
+
{/foreach}
|
|
54
|
+
|
|
55
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
56
|
+
|
|
57
|
+
操作选项:
|
|
58
|
+
- "全部删除" - 删除所有候选
|
|
59
|
+
- "删除 1,2,3" - 删除指定项
|
|
60
|
+
- "取消" - 不删除
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 4. Execute Deletion
|
|
64
|
+
|
|
65
|
+
Based on user selection:
|
|
66
|
+
- Get memory IDs to delete
|
|
67
|
+
- Call `delete_memories_openmemory` with IDs
|
|
68
|
+
- Display deletion result
|
|
69
|
+
|
|
70
|
+
### 5. Display Result
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
🗑️ 清理完成
|
|
74
|
+
|
|
75
|
+
已删除 {n} 条记忆
|
|
76
|
+
释放空间: {estimated_size}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## SAFETY
|
|
82
|
+
|
|
83
|
+
- ⚠️ NEVER delete without user confirmation
|
|
84
|
+
- ⚠️ Show content preview before deletion
|
|
85
|
+
- ⚠️ Support selective deletion
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## RETURN TO MENU
|
|
90
|
+
|
|
91
|
+
完成后提示:
|
|
92
|
+
> "还需要其他操作吗?输入 **M** 返回菜单,或直接输入下一个操作"
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: decay
|
|
3
|
+
description: 分析记忆的时间衰减状态
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Step: 衰减分析
|
|
7
|
+
|
|
8
|
+
## EXECUTION RULES
|
|
9
|
+
|
|
10
|
+
- ✅ Calculate decay scores for all memories
|
|
11
|
+
- ✅ Group by decay status
|
|
12
|
+
- ✅ Provide actionable recommendations
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## EXECUTION
|
|
17
|
+
|
|
18
|
+
### 1. Get All Memories
|
|
19
|
+
|
|
20
|
+
Call `list_memories_openmemory` to get all user memories with timestamps.
|
|
21
|
+
|
|
22
|
+
### 2. Calculate Decay Scores
|
|
23
|
+
|
|
24
|
+
For each memory, calculate decay score based on:
|
|
25
|
+
- Days since creation
|
|
26
|
+
- Content importance (keywords)
|
|
27
|
+
|
|
28
|
+
**Simplified formula:**
|
|
29
|
+
```
|
|
30
|
+
score = max(0, 1 - (daysSinceCreation / 180))
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 3. Classify by Status
|
|
34
|
+
|
|
35
|
+
| Status | Score Range | Meaning |
|
|
36
|
+
|--------|-------------|---------|
|
|
37
|
+
| 🟢 Active | 0.7 - 1.0 | 活跃,近期创建 |
|
|
38
|
+
| 🟡 Aging | 0.3 - 0.7 | 老化,需要关注 |
|
|
39
|
+
| 🔴 Stale | 0.1 - 0.3 | 陈旧,考虑清理 |
|
|
40
|
+
| ⚫ Cleanup | 0 - 0.1 | 待清理 |
|
|
41
|
+
|
|
42
|
+
### 4. Display Analysis
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
⏰ 记忆衰减分析
|
|
46
|
+
|
|
47
|
+
📊 总览: {total} 条记忆
|
|
48
|
+
|
|
49
|
+
🟢 Active ({n}条) {progress_bar} {percent}%
|
|
50
|
+
{foreach top_3}
|
|
51
|
+
├── {content} [{score}]
|
|
52
|
+
{/foreach}
|
|
53
|
+
└── ... (输入 "展开 active" 查看全部)
|
|
54
|
+
|
|
55
|
+
🟡 Aging ({n}条) {progress_bar} {percent}%
|
|
56
|
+
{foreach all}
|
|
57
|
+
├── {content} [{score}]
|
|
58
|
+
{/foreach}
|
|
59
|
+
|
|
60
|
+
🔴 Stale ({n}条) {progress_bar} {percent}%
|
|
61
|
+
{foreach all}
|
|
62
|
+
└── {content} [{score}]
|
|
63
|
+
{/foreach}
|
|
64
|
+
|
|
65
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
66
|
+
|
|
67
|
+
💡 建议:
|
|
68
|
+
{recommendations}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 5. Follow-up Actions
|
|
72
|
+
|
|
73
|
+
- `"清理 stale"` → Delete all Stale memories
|
|
74
|
+
- `"刷新 N"` → Update memory (re-add to refresh)
|
|
75
|
+
- `"展开 {status}"` → Show all in category
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## RETURN TO MENU
|
|
80
|
+
|
|
81
|
+
完成后提示:
|
|
82
|
+
> "还需要其他操作吗?输入 **M** 返回菜单,或直接输入下一个操作"
|