pmem-ai 0.6.3 → 0.7.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.
Files changed (67) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +56 -1
  3. package/dist/commands/ask.d.ts.map +1 -1
  4. package/dist/commands/ask.js +5 -1
  5. package/dist/commands/ask.js.map +1 -1
  6. package/dist/commands/distill.d.ts.map +1 -1
  7. package/dist/commands/distill.js +15 -6
  8. package/dist/commands/distill.js.map +1 -1
  9. package/dist/commands/doctor.d.ts.map +1 -1
  10. package/dist/commands/doctor.js +21 -8
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/graph.d.ts.map +1 -1
  13. package/dist/commands/graph.js +7 -2
  14. package/dist/commands/graph.js.map +1 -1
  15. package/dist/commands/init.d.ts +13 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +142 -32
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/integration.d.ts.map +1 -1
  20. package/dist/commands/integration.js +170 -15
  21. package/dist/commands/integration.js.map +1 -1
  22. package/dist/commands/new.d.ts.map +1 -1
  23. package/dist/commands/new.js +15 -14
  24. package/dist/commands/new.js.map +1 -1
  25. package/dist/commands/rebuild.d.ts.map +1 -1
  26. package/dist/commands/rebuild.js +82 -13
  27. package/dist/commands/rebuild.js.map +1 -1
  28. package/dist/commands/recall.d.ts.map +1 -1
  29. package/dist/commands/recall.js +11 -5
  30. package/dist/commands/recall.js.map +1 -1
  31. package/dist/commands/rename.d.ts.map +1 -1
  32. package/dist/commands/rename.js +98 -19
  33. package/dist/commands/rename.js.map +1 -1
  34. package/dist/commands/status.d.ts.map +1 -1
  35. package/dist/commands/status.js +31 -6
  36. package/dist/commands/status.js.map +1 -1
  37. package/dist/commands/verify.d.ts.map +1 -1
  38. package/dist/commands/verify.js +5 -3
  39. package/dist/commands/verify.js.map +1 -1
  40. package/dist/core/discover/index.d.ts.map +1 -1
  41. package/dist/core/discover/index.js +15 -0
  42. package/dist/core/discover/index.js.map +1 -1
  43. package/dist/core/fs.d.ts +7 -0
  44. package/dist/core/fs.d.ts.map +1 -1
  45. package/dist/core/fs.js +57 -1
  46. package/dist/core/fs.js.map +1 -1
  47. package/dist/core/manifest.d.ts +23 -1
  48. package/dist/core/manifest.d.ts.map +1 -1
  49. package/dist/core/manifest.js +72 -0
  50. package/dist/core/manifest.js.map +1 -1
  51. package/dist/index.js +3 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/types.d.ts +32 -1
  54. package/dist/types.d.ts.map +1 -1
  55. package/docs/handover-v0.6.4.md +285 -0
  56. package/docs/project-roadmap.md +129 -4
  57. package/docs/release-checklist-v0.7.0.md +60 -0
  58. package/docs/session-start-create-design-eval.md +203 -0
  59. package/docs/usage.md +38 -0
  60. package/docs/v0.6.4 pre-design.md +526 -0
  61. package/docs/v0.7.0 pre-design.md +405 -0
  62. package/package.json +6 -3
  63. package/skills/pmem/SKILL.md +55 -7
  64. package/skills/pmem/references/first-init.md +21 -0
  65. package/skills/pmem/references/memory-cards.md +44 -1
  66. package/skills/pmem/references/session-workflow.md +3 -3
  67. package/skills/pmem/references/universal-domains.md +66 -0
@@ -0,0 +1,285 @@
1
+ # v0.6.4 Handover
2
+
3
+ This handover focuses on **polish 5 — session 状态丢失根因排查** (v0.6.4 pre-design §4.1).
4
+ Other v0.6.4 polish items (1, 2, 3, 4, 6, 7, 8) are tracked in their own commits
5
+ and are not in scope of this document.
6
+
7
+ ---
8
+
9
+ ## Session 状态丢失根因排查
10
+
11
+ ### 排查方法
12
+
13
+ **目标症状:** `pmem session end` 在已经 `pmem session start` 后偶发输出
14
+ `No active pmem session found.`(来源:`src/commands/session.ts:78-83`)。
15
+ v0.6.2 pre-design §5.6 列出三个候选根因:
16
+
17
+ 1. WAL 模式写入可见性
18
+ 2. `closeDatabase()` 时机错误
19
+ 3. 多次 `start` 隐式行为
20
+
21
+ **核心 CRUD 流程(已审阅,行号锚点):**
22
+
23
+ - `src/commands/session.ts:23-51` — `sessionStartCommand`:
24
+ - L23 `openDatabase(pmemPath)`
25
+ - L24 `createSchema(db)`
26
+ - L27 `getActiveSession(db)` 防多次 start
27
+ - L38 生成 `session-YYYYMMDD-HHmmss` ID
28
+ - L41 `startSession(db, sessionId, agentName)`
29
+ - L51 `closeDatabase()`
30
+ - `src/commands/session.ts:70-129` — `sessionEndCommand`:
31
+ - L74 `getActiveSession(db)`
32
+ - L77-83 **报错路径**("No active pmem session found")
33
+ - L86 `endSession(db, active.id, ...)`
34
+ - `src/core/db.ts:115-124` — `sessions` 表 schema:
35
+ - PK 是 `id`(即 `session-YYYYMMDD-HHmmss`)
36
+ - 关键字段:`ended_at`、`status`
37
+ - `src/core/db.ts:295-312` — session CRUD:
38
+ - L295-299 `startSession`:`INSERT OR REPLACE INTO sessions (id, agent_name, started_at, status, dirty) VALUES (?, ?, ?, 'active', 0)`
39
+ - L301-305 `endSession`:`UPDATE sessions SET ended_at, status, task_summary WHERE id = ?`
40
+ - L307-312 `getActiveSession`:`SELECT ... WHERE ended_at IS NULL ORDER BY started_at DESC LIMIT 1`
41
+ - `src/core/db.ts:8-26` — `openDatabase`:
42
+ - L14 `pragma('journal_mode = WAL')`
43
+ - L15 `pragma('foreign_keys = ON')`
44
+ - `src/core/db.ts:28-33` — `closeDatabase`:
45
+ - 直接 `_db.close()`,better-sqlite3 会自动 checkpoint WAL
46
+ - `src/core/db.ts:233-244` — **关键嫌疑点** `clearAllTables`:
47
+ - L242 `DELETE FROM sessions;` ← 任何调用方都会清空 sessions 表
48
+ - `src/commands/rebuild.ts:46`(修改前) — `clearAllTables` **唯一调用方**就是 `rebuild --full`
49
+
50
+ **锁流程审阅结论:** `session.ts` 不使用 `acquireLock`/`releaseLock`
51
+ (grep `src/commands/session.ts` 无任何 lock 调用)。锁竞争与 session 状态丢失**无关**。
52
+
53
+ ### 复现结果
54
+
55
+ **Scenario A — plain start/end 循环 20 次:**
56
+
57
+ ```bash
58
+ cd /Users/kerye/Codings/pmem/temp/polish-5-test
59
+ rm -rf .pmem
60
+ npx ts-node ../../src/index.ts init polish-5-test
61
+ npx ts-node ../../src/index.ts rebuild
62
+ N_CYCLES=20 /Users/kerye/Codings/pmem/scripts/repro-session-loss.sh
63
+ ```
64
+
65
+ 输出(已剪裁):
66
+
67
+ ```
68
+ Scenario A: 20 plain start/end cycles...
69
+ A start fails : 0
70
+ A end losses: 0
71
+ RESULT: not reproduced (0 failures across all scenarios)
72
+ ```
73
+
74
+ → **WAL 候选根因 1 排除。** better-sqlite3 在 `close()` 时自动
75
+ checkpoint WAL,跨进程读取没有可见性问题。在 20 次循环后查看磁盘也没有
76
+ 残留的 `.pmem/pmem.db-wal` / `.pmem/pmem.db-shm` 文件。
77
+
78
+ **候选根因 2(`closeDatabase()` 时机)排除:** better-sqlite3 是同步的,
79
+ `prepare().run()` 返回时已写入 WAL;`closeDatabase()` 永远在 `startSession()` /
80
+ `endSession()` 之后调用(`session.ts:41, 51` 与 `session.ts:86, 129`)。
81
+
82
+ **候选根因 3(多次 start)排除:** `session.ts:27-32` 已有 idempotent guard:
83
+ 第二次 start 会检测到 active session 并提示 "Active session already exists",
84
+ 不会覆盖。两并发 `session start` 进程的实测也只有一个能写入,另一个被 guard
85
+ 拦截。
86
+
87
+ **Scenario B — start → `rebuild --full` → end(v0.6.4 新发现路径):**
88
+
89
+ ```bash
90
+ npx ts-node ../../src/index.ts session start -a "PreRebuild"
91
+ # sessions 表里有 active session
92
+ npx ts-node ../../src/index.ts rebuild --full
93
+ # clearAllTables 触发 DELETE FROM sessions
94
+ npx ts-node ../../src/index.ts session end -s "post-rebuild"
95
+ ```
96
+
97
+ 实测输出(修复前):
98
+
99
+ ```
100
+ === Start ===
101
+ Session started: session-20260601-173815
102
+ === sessions after start ===
103
+ session-20260601-173815|
104
+
105
+ === rebuild --full ===
106
+ Full rebuild: cleared all tables.
107
+
108
+ === sessions after rebuild --full ===
109
+ (empty)
110
+
111
+ === end ===
112
+ No active pmem session found.
113
+ Next: run `pmem session start -a "<agent-name>"` to begin a session.
114
+ ```
115
+
116
+ → **稳定 100% 复现。**
117
+
118
+ ### 根因定位
119
+
120
+ **根因:`pmem rebuild --full` 调用的 `clearAllTables()` 会执行
121
+ `DELETE FROM sessions`,把进行中的 active session 一并清空。**
122
+
123
+ - 代码定位:`src/core/db.ts:233-244` `clearAllTables()`,第 242 行
124
+ `DELETE FROM sessions;`。
125
+ - 调用点:`src/commands/rebuild.ts:46`(修改前),是 `clearAllTables` 的
126
+ **唯一**调用方。
127
+ - 触发路径:用户/agent 在 session 进行中接到诊断建议(
128
+ `src/core/db.ts:20` SQLITE_NOTADB、`src/commands/verify.ts:56`、
129
+ `src/commands/doctor.ts:90`、`src/commands/ask.ts:54` 都建议
130
+ `pmem rebuild --full`),运行后 session 立即丢失。
131
+
132
+ **为什么之前 v0.6.2 候选根因没指向这里:** v0.6.2 排查聚焦在
133
+ session 命令本身的并发/WAL 问题,未把 `rebuild --full` 纳入"间接路径"。
134
+ 实际上 session 状态是**运行时状态**而非从 Markdown 卡片派生的索引,
135
+ 理应在 "rebuild from cards" 流程中被保留。`clearAllTables` 同时清掉
136
+ `sessions` 是 v0.3 早期 schema 引入时的遗留行为。
137
+
138
+ ### 修复方案
139
+
140
+ **已修复。** 改动 1 个文件 1 段(5-29 行净增),不动 `session.ts` 和
141
+ `db.ts`,把 `clearAllTables` 的语义包在 rebuild 命令层:rebuild 前快照
142
+ active sessions,clear 后再原样写回。
143
+
144
+ **修复 diff 摘要(`src/commands/rebuild.ts:45-72`):**
145
+
146
+ ```typescript
147
+ if (isFull) {
148
+ // v0.6.4 polish 5: preserve active sessions across `rebuild --full`.
149
+ // ... (rationale comment)
150
+ type ActiveSessionRow = {
151
+ id: string;
152
+ agent_name: string | null;
153
+ started_at: string;
154
+ ended_at: string | null;
155
+ task_summary: string | null;
156
+ base_index_hash: string | null;
157
+ status: string | null;
158
+ dirty: number;
159
+ };
160
+ const activeSessions = db
161
+ .prepare("SELECT id, agent_name, started_at, ended_at, task_summary, base_index_hash, status, dirty FROM sessions WHERE ended_at IS NULL")
162
+ .all() as ActiveSessionRow[];
163
+
164
+ clearAllTables(db);
165
+
166
+ if (activeSessions.length > 0) {
167
+ const restore = db.prepare(
168
+ "INSERT INTO sessions (id, agent_name, started_at, ended_at, task_summary, base_index_hash, status, dirty) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
169
+ );
170
+ for (const s of activeSessions) {
171
+ restore.run(s.id, s.agent_name, s.started_at, s.ended_at, s.task_summary, s.base_index_hash, s.status, s.dirty);
172
+ }
173
+ console.log(`Full rebuild: cleared all tables (preserved ${activeSessions.length} active session(s)).`);
174
+ } else {
175
+ console.log('Full rebuild: cleared all tables.');
176
+ }
177
+ }
178
+ ```
179
+
180
+ **为什么改 `rebuild.ts` 而不是 `db.ts`:**
181
+
182
+ 1. 不改 `clearAllTables` 的字面语义(仍然清空所有表),降低对其它潜在
183
+ 调用方的语义冲击。
184
+ 2. 修复就近 root cause site(`rebuild --full` 是唯一现实触发路径),
185
+ 不修改 session.ts 也不修改 db.ts,避免引入大改。
186
+ 3. 仍然清空 `update_log`、`dirty_flags`:那些是日志/标记,rebuild 后
187
+ 失去关联也不直接破坏 session 生命周期;本次只修复"session end 找不到
188
+ active session"这条直接 user-facing 报错。
189
+
190
+ **未在 v0.6.4 修复的次级影响(推迟到 v0.7+):**
191
+
192
+ - `update_log` 的 `session_id` 在 rebuild --full 后会指向被清空的旧
193
+ log 行。`pmem session end` 输出"Actions: 0 update(s), 0 trace(s)"
194
+ 会偏低。属于"已知非阻塞",不阻塞核心 session 关闭流程。
195
+ - `dirty_flags` 的 `session_id` 同理。
196
+
197
+ ### E2E 验证
198
+
199
+ **修复后 Scenario B 实测:**
200
+
201
+ ```
202
+ === Start ===
203
+ Session started: session-20260601-174108
204
+ === sessions before rebuild --full ===
205
+ session-20260601-174108||active
206
+ === rebuild --full (should preserve) ===
207
+ Full rebuild: cleared all tables (preserved 1 active session(s)).
208
+ Full rebuild: 0 cards processed, 0 skipped (hash match), 0 updated
209
+ === sessions after rebuild --full ===
210
+ session-20260601-174108||active
211
+ === end ===
212
+ Session ended: session-20260601-174108
213
+ Summary: fix-verify
214
+ Actions: 0 update(s), 0 trace(s) created
215
+ ```
216
+
217
+ → 复现路径修复,session end 正常关闭。
218
+
219
+ **修复后无 active session 时回归:**
220
+
221
+ ```
222
+ === rebuild --full with no active session ===
223
+ Full rebuild: cleared all tables.
224
+ ```
225
+
226
+ → 输出与修复前一致,零回归。
227
+
228
+ **修复后 Scenario A(plain cycles)回归:**
229
+
230
+ ```
231
+ A start fails : 0
232
+ A end losses: 0
233
+ B end loss : 0
234
+ RESULT: not reproduced (0 failures across all scenarios)
235
+ ```
236
+
237
+ **单元测试:** `npm test` 137/137 通过,0 失败。
238
+
239
+ **`npx tsc --noEmit`:** 0 error。
240
+
241
+ ### 复现脚本
242
+
243
+ `/Users/kerye/Codings/pmem/scripts/repro-session-loss.sh`
244
+ (v0.6.4 polish 5 新增,包含 Scenario A + Scenario B)。
245
+
246
+ 用法:
247
+
248
+ ```bash
249
+ N_CYCLES=20 ./scripts/repro-session-loss.sh
250
+ PROJECT_DIR=/tmp/foo ./scripts/repro-session-loss.sh
251
+ ```
252
+
253
+ 退出码 0 = 跑完(不区分是否复现),需读末尾 `RESULT:` 行判断。
254
+
255
+ ### 决策
256
+
257
+ - **根因:** `clearAllTables` 一并清空 `sessions` 表 + `rebuild --full`
258
+ 在诊断流程中被频繁建议。
259
+ - **修复:** v0.6.4 polish 5 内修复完成,仅改 `src/commands/rebuild.ts`
260
+ 一处,不改 `session.ts` 也不改 `db.ts`。
261
+ - **范围纪律:** 没有触碰 `clearAllTables` 字面语义,没有引入
262
+ `--create-if-missing`,没有改 session lifecycle。
263
+ - **推迟到 v0.7+:** `update_log` / `dirty_flags` 中指向被清空 session 的
264
+ 孤立行,留作 v0.7 通用化阶段连带处理。
265
+
266
+ ---
267
+
268
+ ## 文件清单(polish 5 范围)
269
+
270
+ | 文件 | 改动 |
271
+ |------|------|
272
+ | `src/commands/rebuild.ts` | 在 `--full` 分支前后快照/恢复 active sessions(行 45-72) |
273
+ | `scripts/repro-session-loss.sh` | 新增复现脚本(Scenario A + Scenario B) |
274
+ | `docs/handover-v0.6.4.md` | 本文件 |
275
+
276
+ 未触碰:`src/commands/session.ts`、`src/core/db.ts`、`src/core/fs.ts`。
277
+
278
+ ---
279
+
280
+ ## 审批记录
281
+
282
+ | 角色 | 决定 | 日期 |
283
+ |------|------|------|
284
+ | 执行人 | 完成 polish 5 根因 + 修复 | 2026-06-02 |
285
+ | CTO | 待审批 | 2026-06-02 |
@@ -22,6 +22,7 @@ CLI:`pmem`
22
22
  | v0.5 | Productization Beta | README、npm package、E2E、错误 UX、发布清单,上线 npm Beta |
23
23
  | v0.6 | Agent-native Workflow Polish | 非交互 init、友好错误、空结果引导、Claude Code slash commands |
24
24
  | v0.6.1 | Actionable Update Suggestions | `update --suggest` 去重、分级、compact 摘要、verify 语义对齐 |
25
+ | v0.7.0 | Universal Agent Memory | 将 pmem 扩展为面向任何 domain 的通用 Agent 记忆运行时,支持自定义卡片类型 |
25
26
 
26
27
  ---
27
28
 
@@ -266,6 +267,76 @@ v0.6.1 是 v0.6 后的 patch release,现已完成发布。它不新增大型
266
267
 
267
268
  ---
268
269
 
270
+ ## v0.6.2 — Real-User Friction Fixes ✅ 已发布
271
+
272
+ **主题:** 消除重度用户在真实项目中遭遇的 top-3 摩擦点,让 pmem 不成为工具链的阻塞点。
273
+
274
+ v0.6.2 由首份重度用户反馈(voxo v1.0 项目,25 张卡片 + 27 条 trace + 完整 P0→发布周期)驱动,已完成并上线 npm。不改 memory schema,不做 embedding / MCP / REST / Graph UI / telemetry。
275
+
276
+ | 功能 | 说明 |
277
+ |------|------|
278
+ | 锁竞争修复 | `acquireLock()` 自动清理 stale lock(60s+);新增 `pmem verify --fix-locks`;错误信息增强;`pmem doctor` 锁状态检查 |
279
+ | 卡片大小可配置 | 尊重 manifest `card_policy.max_tokens`;`pmem verify --relaxed` 临时翻倍限制;默认值上调(decision 800→1000、task 600→800) |
280
+ | `pmem rename` | `--find/--replace` 默认 dry-run 预览;`--write` 才写入;`--find ""` 拒绝执行 |
281
+ | `pmem recall --since` | 时间过滤(`--since 7d` / `24h` / `1w`);rebuild 时间契约补全消除 `updated_at` NULL 漏洞 |
282
+ | Exit code 修正 | `update --suggest` / `status` / `distill --suggest` 有结果时 exit 0;exit 1 不再作 workflow signal(**BREAKING**) |
283
+ | `pmem new` 模板生成 | `pmem new <type> "<title>"` 自动生成 YAML frontmatter 骨架;type/title 创建时校验 |
284
+ | `pmem integration install git-hooks` | pre-commit hook 自动跑 `pmem verify --relaxed` |
285
+
286
+ 详细设计:`docs/v0.6.2 pre-design.md`
287
+
288
+ ---
289
+
290
+ ## v0.6.3 — Relationship Auto-Discovery ✅ 已发布
291
+
292
+ **主题:** 在不引入新依赖、不破坏 Markdown 单一真相源的前提下,让 pmem 能从代码侧自动发现项目内的模块 / 文件依赖关系,喂入图索引。
293
+
294
+ v0.6.3 是 v0.6 track 的能力扩展版,已完成并上线 npm。`pmem discover` 扫 6 种语言(Node.js / Python / Rust / Go / C/C++ / Java)的 import 语句和包管理文件,把推断出来的边写入 `edges` 表(`source: inferred`),用户可选择性 promote(`--accept-edges`)或 reject(`--reject-edges`)。BUILTIN_MODULES skip-list + AmbiguousRelation severity 分类降低误报。
295
+
296
+ | 功能 | 说明 |
297
+ |------|------|
298
+ | `pmem discover` | 跨 6 语言双层发现(源码 imports + 包管理 deps) |
299
+ | `pmem discover --dry-run` | 预览不写入 |
300
+ | `pmem discover --lang/--pattern-file/--min-confidence` | 过滤与自定义 pattern |
301
+ | BUILTIN_MODULES 误报防护 | Node.js/Python/Go/Java/Rust/C++ stdlib 静默 drop |
302
+ | `pmem related --format json` | 按 `high_confidence` / `needs_review` 分组;`--source explicit/inferred/all` 过滤 |
303
+ | `pmem update --confirm --accept-edges/--reject-edges` | inferred → explicit 的 promote/demote |
304
+ | manifest `discover.additional_patterns` | 扩展发现 provider |
305
+
306
+ 详细设计:`docs/v0.6.3 pre-design.md`(如有)
307
+
308
+ ---
309
+
310
+ ## v0.6.4 — Polish & Wrap v0.6 Track ✅ 已发布
311
+
312
+ **主题:** 让 v0.6 track 干净收尾。8 项 polish + 2 项文档同步,**不**进入 v0.7.0 通用化(明确边界)。
313
+
314
+ v0.6.4 不扩大能力边界,不改 manifest schema,不做通用化、embedding / MCP / REST / Graph UI / telemetry / 远程服务。它只完成 v0.6 期间累积的低风险 polish,让 v0.6 track 以稳定状态结束,并为 v0.7.0 通用化设计让出干净的工作基底。
315
+
316
+ | 功能 | 说明 |
317
+ |------|------|
318
+ | `pmem rename` 字节级保留 | body 前导空白(紧贴 / 1 空行 / 2 空行 / 标准)逐字节保留;write 用 `content.substring(0, fmEndIndex) + newBody` 重建 |
319
+ | `pmem rename --dry-run` frontmatter 扫描 | 扫 `aliases` / `tags` / `related` / `depends_on` 命中显示 diff 预览;`--write` 仍不动 frontmatter |
320
+ | `pmem integration` version 字段 | install 时把 `pmem_integration_version` 写入实际文件 frontmatter/JSON 顶层;verify 读实际文件而非 manifest |
321
+ | `pmem integration install claude-code` 真写 `.claude/settings.json` | 移除 `.example.json` 命名不一致 |
322
+ | `pmem integration install cursor` | 新增 4 个 `.cursor/commands/pmem-*.md`(Cursor 0.46+ 约定) |
323
+ | `pmem integration install codex` | AGENTS.md 新增 `## Commands` 章节(Codex CLI 不支持 `.codex/commands/`) |
324
+ | `pmem doctor` lock 可读性 | active / stale / no-lock 三态分别输出 owner PID + age + 下一步建议 |
325
+ | `pmem init --guided` 缺字段引导 | 缺 `--description` / `--stage` / `--next` 时输出可补参数提示 + 等价 CLI 命令 |
326
+ | `pmem rebuild --full` session 保护 | snapshot / clearAllTables / restore 移进 doRebuild 事务(**之前在事务外,是 CTO 返工 3 修正的关键 bug**) |
327
+ | `docs/project-roadmap.md` / `CHANGELOG.md` 同步 | 补 v0.6.2 / v0.6.3 / v0.6.4 三条 |
328
+
329
+ 推迟到 v0.7+:
330
+
331
+ - `pmem session start --create-if-missing`(design 评估在 `docs/session-start-create-design-eval.md`)
332
+ - 通用化(v0.7.0 主目标)
333
+ - `pmem dirty list/resolve/prune`、完整 dirty lifecycle
334
+
335
+ 详细设计:`docs/v0.6.4 pre-design.md`
336
+ 根因报告:`docs/handover-v0.6.4.md`(session 状态丢失)
337
+
338
+ ---
339
+
269
340
  ## 版本间迁移路径
270
341
 
271
342
  ```
@@ -306,10 +377,10 @@ v0.6 → v0.6.1:
306
377
  ## 总览
307
378
 
308
379
  ```
309
- v0.1 ───→ v0.2 ───→ v0.3 ───→ v0.4 ───→ v0.5 ───→ v0.6 ───→ v0.6.1
310
- 能用 防损坏 强一致 自动化 Beta上线 Agent原生 建议可行动
311
- 10 cmd 14 cmd 16 cmd 18 cmd 产品化 低摩擦 去重分级
312
- 文件模式 文件模式 +SQLite +集成 +体验 +程序化调用 +摘要
380
+ v0.1 ───→ v0.2 ───→ v0.3 ───→ v0.4 ───→ v0.5 ───→ v0.6 ───→ v0.6.1 ───→ v0.6.2 ───→ v0.6.3 ───→ v0.6.4
381
+ 能用 防损坏 强一致 自动化 Beta上线 Agent原生 建议可行动 真实摩擦修复 关系自动发现 收尾
382
+ 10 cmd 14 cmd 16 cmd 18 cmd 产品化 低摩擦 去重分级 +锁/重命名 +6语言扫描 +字节级
383
+ 文件模式 文件模式 +SQLite +集成 +体验 +程序化调用 +摘要 +exit code +误报防护 +事务
313
384
  ```
314
385
 
315
386
  ---
@@ -333,6 +404,60 @@ v0.1 ───→ v0.2 ───→ v0.3 ───→ v0.4 ───→ v0.5 ─
333
404
  - **v0.6.1:** ✅ 已发布(Actionable Update Suggestions)
334
405
  - 设计决策:`docs/v0.6.1 pre-design.md`
335
406
  - 发布状态:`v0.6.1` 已完成 CI 并上线 npm
407
+ - **v0.6.2:** ✅ 已发布(Real-User Friction Fixes)
408
+ - 设计决策:`docs/v0.6.2 pre-design.md`
409
+ - **v0.6.3:** ✅ 已发布(Relationship Auto-Discovery)
410
+ - **v0.6.4:** ✅ 已发布(Polish & Wrap v0.6 Track)
411
+ - 设计决策:`docs/v0.6.4 pre-design.md`
412
+ - 根因报告:`docs/handover-v0.6.4.md`
413
+ - **v0.7.0:** ✅ 已完成(Universal Agent Memory)
414
+ - 设计决策:`docs/v0.7.0 pre-design.md`
415
+
416
+ ---
417
+
418
+ ## v0.7.0 — Universal Agent Memory ✅ 已完成
419
+
420
+ **主题:** 将 pmem 从"软件项目专用"扩展为"任意 agent 项目的本地记忆运行时"。支持自定义卡片类型,内置软件、小说、研究 presets,解决通用 recall/status 摩擦点。
421
+
422
+ | 功能 | 说明 |
423
+ |------|------|
424
+ | Universal Presets | `pmem init --domain software|novel|research` 加载预设卡片类型与目录映射 |
425
+ | Custom card types | 支持 manifest 声明任意卡片类型、目录映射及 token/section 限制,去除 VALID_TYPES 硬编码限制 |
426
+ | Dynamic id_pattern | `{types}` 动态渲染,支持自定义卡片前缀正则校验 |
427
+ | Generic Recall | JSON 增加 `active_foundation` 字段(根据预设 foundational_types 反馈),兼容保留 `active_modules` |
428
+ | Generic Status | 消除对 `src/lib/app/tests` 硬编码扫描;读取 `change_detection.skip_dirs` / `mtime_scan_dirs` 及自定义卡片目录 |
429
+ | Discover Disabled | 针对非软件 presets 默认关闭 `pmem discover`,支持 `discover.enabled: false` 配置与早停 exit 0 |
430
+ | Skills & Ignores | 统一升级 `skills/task.md` 代替 `code-task.md`;去除了 AGENTS / CLAUDE 等模板中的软件术语绑定 |
431
+
432
+ ---
433
+
434
+ ## 当前状态
435
+
436
+ - **v0.1:** ✅ 完成(10 个命令实现并测试)
437
+ - **v0.2:** ✅ 完成(文件模式可信)
438
+ - 设计决策:`docs/v0.2 pre-design.md`
439
+ - 架构规划:`docs/v0.2 pre-roadmap.md`
440
+ - **v0.3:** ✅ 完成(SQLite runtime)
441
+ - 设计决策:`docs/v0.3 pre-design.md`
442
+ - **v0.4:** ✅ 完成(Agent workflow runtime)
443
+ - 设计决策:`docs/v0.4 pre-design.md`
444
+ - handover:`docs/handover-v0.4.md`
445
+ - **v0.5:** ✅ 完成并上线 npm(Productization Beta)
446
+ - 设计决策:`docs/v0.5 pre-design.md`
447
+ - 发布清单:`docs/release-checklist-v0.5.md`
448
+ - **v0.6:** ✅ 完成并上线 npm(Agent-native Workflow Polish)
449
+ - 设计决策:`docs/v0.6 pre-design.md`
450
+ - **v0.6.1:** ✅ 已发布(Actionable Update Suggestions)
451
+ - 设计决策:`docs/v0.6.1 pre-design.md`
452
+ - 发布状态:`v0.6.1` 已完成 CI 并上线 npm
453
+ - **v0.6.2:** ✅ 已发布(Real-User Friction Fixes)
454
+ - 设计决策:`docs/v0.6.2 pre-design.md`
455
+ - **v0.6.3:** ✅ 已发布(Relationship Auto-Discovery)
456
+ - **v0.6.4:** ✅ 已发布(Polish & Wrap v0.6 Track)
457
+ - 设计决策:`docs/v0.6.4 pre-design.md`
458
+ - 根因报告:`docs/handover-v0.6.4.md`
459
+ - **v0.7.0:** ✅ 已完成(Universal Agent Memory)
460
+ - 设计决策:`docs/v0.7.0 pre-design.md`
336
461
 
337
462
  ---
338
463
 
@@ -0,0 +1,60 @@
1
+ # pmem v0.7.0 Release Checklist
2
+
3
+ Use this checklist before tagging or publishing v0.7.0.
4
+
5
+ ## Scope Check
6
+
7
+ - [ ] Universal Agent Memory (presets, custom card types, and domain neutrality) is complete.
8
+ - [ ] No embedding, MCP/REST, Graph UI, telemetry, or remote service was added.
9
+ - [ ] Presets (software, novel, research) loading, custom directories creation, schema validation, domain-neutral recall / status output, generic ignores and skills, and early exit for discover disabled are complete and verified.
10
+
11
+ ## Version Check
12
+
13
+ - [ ] `package.json` version is `0.7.0`.
14
+ - [ ] `CHANGELOG.md` has a `0.7.0` section.
15
+ - [ ] `docs/project-roadmap.md` has updated `v0.7.0` to completed status.
16
+
17
+ ## Test Check
18
+
19
+ Run:
20
+
21
+ ```bash
22
+ npm test
23
+ npm run test:e2e:install
24
+ npm run test:e2e:workflow
25
+ npm run test:e2e:v061-suggest
26
+ npm run test:e2e:v063-discover
27
+ npm run test:e2e:v07-novel
28
+ npm run test:e2e:v07-research
29
+ ```
30
+
31
+ Expected:
32
+
33
+ - [ ] Unit tests pass (160+).
34
+ - [ ] TypeScript build passes.
35
+ - [ ] All E2E scripts pass.
36
+
37
+ ## Package Check
38
+
39
+ Run:
40
+
41
+ ```bash
42
+ npm pack --dry-run
43
+ ```
44
+
45
+ Expected:
46
+
47
+ - [ ] Package name is `pmem-ai`.
48
+ - [ ] Package version is `0.7.0`.
49
+ - [ ] Tarball includes `dist/`.
50
+ - [ ] Tarball includes `skills/pmem/SKILL.md` and `skills/pmem/references/`.
51
+ - [ ] Tarball includes `README.md`, `LICENSE`, `CHANGELOG.md`.
52
+ - [ ] Tarball includes `docs/*.md` including `docs/usage.md`.
53
+ - [ ] Tarball excludes `src/`, `temp/`, `.pmem/`, `node_modules/`.
54
+ - [ ] Tarball excludes compiled test files.
55
+
56
+ ## Publish Decision
57
+
58
+ - [ ] Confirm npm account and publish permission.
59
+ - [ ] Confirm CI/CD publish job will run on push to main or tag push.
60
+ - [ ] Decide whether to backpublish `v0.6.4` or directly release `v0.7.0`.