pmem-ai 0.5.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/CHANGELOG.md +57 -0
- package/LICENSE +21 -0
- package/README.md +349 -0
- package/dist/commands/ask.d.ts +3 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +303 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/distill.d.ts +6 -0
- package/dist/commands/distill.d.ts.map +1 -0
- package/dist/commands/distill.js +425 -0
- package/dist/commands/distill.js.map +1 -0
- package/dist/commands/graph.d.ts +6 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +216 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +566 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/integration.d.ts +2 -0
- package/dist/commands/integration.d.ts.map +1 -0
- package/dist/commands/integration.js +216 -0
- package/dist/commands/integration.js.map +1 -0
- package/dist/commands/migrate.d.ts +6 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +379 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rebuild.d.ts +8 -0
- package/dist/commands/rebuild.d.ts.map +1 -0
- package/dist/commands/rebuild.js +299 -0
- package/dist/commands/rebuild.js.map +1 -0
- package/dist/commands/recall.d.ts +3 -0
- package/dist/commands/recall.d.ts.map +1 -0
- package/dist/commands/recall.js +140 -0
- package/dist/commands/recall.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +147 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +275 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +14 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +536 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +4 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +296 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/db.d.ts +47 -0
- package/dist/core/db.d.ts.map +1 -0
- package/dist/core/db.js +326 -0
- package/dist/core/db.js.map +1 -0
- package/dist/core/format.d.ts +3 -0
- package/dist/core/format.d.ts.map +1 -0
- package/dist/core/format.js +221 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/fs.d.ts +16 -0
- package/dist/core/fs.d.ts.map +1 -0
- package/dist/core/fs.js +175 -0
- package/dist/core/fs.js.map +1 -0
- package/dist/core/git.d.ts +6 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +20 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/hash.d.ts +10 -0
- package/dist/core/hash.d.ts.map +1 -0
- package/dist/core/hash.js +25 -0
- package/dist/core/hash.js.map +1 -0
- package/dist/core/manifest.d.ts +6 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +207 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/yaml.d.ts +11 -0
- package/dist/core/yaml.d.ts.map +1 -0
- package/dist/core/yaml.js +94 -0
- package/dist/core/yaml.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +351 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/docs/Voorlopige projekidee.md +695 -0
- package/docs/handover-v0.3.md +355 -0
- package/docs/handover-v0.4.md +367 -0
- package/docs/prd.md +318 -0
- package/docs/project-roadmap.md +279 -0
- package/docs/release-checklist-v0.5.md +109 -0
- package/docs/v0.2 pre-design.md +182 -0
- package/docs/v0.2 pre-roadmap.md +270 -0
- package/docs/v0.3 pre-design.md +686 -0
- package/docs/v0.4 pre-design.md +417 -0
- package/docs/v0.5 pre-design.md +481 -0
- package/package.json +67 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
# pmem v0.4 交接文档
|
|
2
|
+
|
|
3
|
+
## 一、项目概况
|
|
4
|
+
|
|
5
|
+
**pmem**(Project Memory for Agents)是一个面向 AI coding agent 的图结构项目记忆 CLI 运行时。它让 Agent 以极少 token 恢复项目上下文、查找相关记忆、溯源决策,并通过感知代码变更自动建议记忆更新。
|
|
6
|
+
|
|
7
|
+
- **仓库:** [github.com/KkSss999/pmem](https://github.com/KkSss999/pmem)(Private)
|
|
8
|
+
- **当前版本:** v0.4.0(main 分支)
|
|
9
|
+
- **技术栈:** TypeScript (strict, CommonJS, ES2022) + Commander + js-yaml + better-sqlite3
|
|
10
|
+
- **运行时:** Node.js ≥18
|
|
11
|
+
- **测试框架:** Node.js 原生 `node:test`(88 测试,~760ms)
|
|
12
|
+
- **测试隔离区:** `temp/`(gitignored)
|
|
13
|
+
|
|
14
|
+
### 一句话状态
|
|
15
|
+
|
|
16
|
+
> v0.1 + v0.2 + v0.3 + v0.4 全部完成。15 个命令、零 TypeScript 错误、88 测试全通过。Agent workflow 闭环已打通:代码变更感知 → dirty 标记 → 建议生成 → 确认写入 → 蒸馏 → 验证。
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 二、版本演进概览
|
|
21
|
+
|
|
22
|
+
| 版本 | 主题 | 关键交付 |
|
|
23
|
+
|------|------|---------|
|
|
24
|
+
| v0.1 | 核心闭环 | 10 命令,Markdown 主数据 + JSON indexes |
|
|
25
|
+
| v0.2 | 工程底座 | +migrate, +distill, atomicWrite, file lock, card_policy |
|
|
26
|
+
| v0.3 | SQLite Runtime | 7 P0 表, content-hash 增量 rebuild, FTS5, 四格式输出 |
|
|
27
|
+
| v0.4 | **Agent Workflow Automation** | status, mark-dirty --auto, update --suggest, 退出码协议, integration templates |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 三、v0.4 完成清单
|
|
32
|
+
|
|
33
|
+
### P0 — 8/8
|
|
34
|
+
|
|
35
|
+
| # | 功能 | 文件 | 说明 |
|
|
36
|
+
|---|------|------|------|
|
|
37
|
+
| 1 | `pmem status` | [src/commands/status.ts](src/commands/status.ts) **新建** | git status + paths 表反查,三级匹配(exact/directory/graph_neighbor),`--format compact/json`,退出码 0/1/2 |
|
|
38
|
+
| 2 | `mark-dirty --auto` | [src/commands/update.ts](src/commands/update.ts) | git status → paths 反查 → 自动 insertDirtyFlag |
|
|
39
|
+
| 3 | `update --suggest` | [src/commands/update.ts](src/commands/update.ts) | dirty_flags + state 时效 → 结构化建议,`--format json` 输出 |
|
|
40
|
+
| 4 | `update --apply-suggestion` | [src/commands/update.ts](src/commands/update.ts) | 自动执行建议(update_card/create_trace/update_state) |
|
|
41
|
+
| 5 | `distill --suggest` | [src/commands/distill.ts](src/commands/distill.ts) | SQLite edges 推断分组,退出码 0/1 |
|
|
42
|
+
| 6 | `distill --apply-suggestion` | [src/commands/distill.ts](src/commands/distill.ts) | 非交互式应用蒸馏到指定 card |
|
|
43
|
+
| 7 | session start/end | [src/commands/session.ts](src/commands/session.ts) | 已在 v0.3 P1 完成,v0.4 增强 update_log 汇总 |
|
|
44
|
+
| 8 | CLI hooks-friendly output | update/distill/verify/status | 统一退出码(0=正常, 1=建议/警告, 2=错误),所有 suggest 命令 `--format json` |
|
|
45
|
+
| 9 | Integration templates | `.pmem/integrations/` + [src/commands/init.ts](src/commands/init.ts) | Claude Code / Cursor / Codex 模板,嵌入 v0.4 workflow 指令 |
|
|
46
|
+
| 10 | verify stale memory | [src/commands/verify.ts](src/commands/verify.ts) | paths 表 source_files 的 mtime 对比 card updated_at |
|
|
47
|
+
|
|
48
|
+
### P1 — 3/3
|
|
49
|
+
|
|
50
|
+
| # | 功能 | 文件 |
|
|
51
|
+
|---|------|------|
|
|
52
|
+
| 1 | status 三级匹配 | [src/commands/status.ts](src/commands/status.ts) — exact → directory → graph_neighbor |
|
|
53
|
+
| 2 | session update_log 汇总 | [src/commands/session.ts](src/commands/session.ts) — end 时聚合 actions + affected_cards + unresolved dirty_flags |
|
|
54
|
+
| 3 | AGENTS.md 模板优化 | [src/commands/init.ts](src/commands/init.ts) — 内联模板已更新,写入 v0.4 完整内容 |
|
|
55
|
+
|
|
56
|
+
### v0.4 排除项(明确不做)
|
|
57
|
+
|
|
58
|
+
| 排除 | 原因 |
|
|
59
|
+
|------|------|
|
|
60
|
+
| embedding 真接入 | 仅保留 Provider Interface + manifest 配置 |
|
|
61
|
+
| pmem serve (MCP/REST) | 完全搁置 |
|
|
62
|
+
| Graph UI | v0.5+ |
|
|
63
|
+
| 多用户远程服务 | v0.5+ |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 四、代码库地图
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
pmem/
|
|
71
|
+
├── CLAUDE.md # Agent 入口指令
|
|
72
|
+
├── package.json # v0.4.0,依赖:commander, js-yaml, better-sqlite3
|
|
73
|
+
├── tsconfig.json # strict, ES2022, CommonJS
|
|
74
|
+
├── .gitignore # node_modules, dist, temp, .pmem, .DS_Store, .claude
|
|
75
|
+
├── temp/ # gitignored 测试隔离区
|
|
76
|
+
│
|
|
77
|
+
├── docs/ # 设计文档(按顺序读)
|
|
78
|
+
│ ├── Voorlopige projekidee.md # 长期架构总纲
|
|
79
|
+
│ ├── prd.md # 产品需求文档
|
|
80
|
+
│ ├── project-roadmap.md # v0.1 → v0.5 路线图
|
|
81
|
+
│ ├── v0.2 pre-design.md # v0.2 前置设计
|
|
82
|
+
│ ├── v0.2 pre-roadmap.md # v0.2 路线图
|
|
83
|
+
│ ├── v0.3 pre-design.md # ⭐ v0.3 圣经 — 14 章技术决策
|
|
84
|
+
│ ├── v0.4 pre-design.md # ⭐ v0.4 圣经 — Agent Workflow Automation
|
|
85
|
+
│ ├── handover-v0.3.md # v0.3 交接文档
|
|
86
|
+
│ └── handover-v0.4.md # 本文档
|
|
87
|
+
│
|
|
88
|
+
├── src/
|
|
89
|
+
│ ├── index.ts # CLI 入口(Commander),15 命令,版本 0.4.0
|
|
90
|
+
│ ├── types.ts # 全部 TS 类型,Manifest = ManifestV02 | ManifestV03
|
|
91
|
+
│ │
|
|
92
|
+
│ ├── core/ # 共享基础设施
|
|
93
|
+
│ │ ├── fs.ts # 文件工具:atomicWrite, acquireLock, readFile, listFiles...
|
|
94
|
+
│ │ ├── manifest.ts # Manifest 加载/保存(js-yaml),getDefaultManifest()→ManifestV03
|
|
95
|
+
│ │ ├── db.ts # ⭐ SQLite 核心:schema 创建(10 表)、CRUD、dirty/session/update_log
|
|
96
|
+
│ │ ├── hash.ts # SHA-256 内容 hash(file/frontmatter/body)
|
|
97
|
+
│ │ ├── yaml.ts # 共享 YAML frontmatter 解析器
|
|
98
|
+
│ │ ├── format.ts # CLI 输出格式化(compact/json/paths/pack)
|
|
99
|
+
│ │ ├── *.test.ts # 4 个测试文件(88 用例)
|
|
100
|
+
│ │
|
|
101
|
+
│ └── commands/ # 15 个命令文件
|
|
102
|
+
│ ├── init.ts # pmem init [--guided] — 已更新 v0.4 integration 模板
|
|
103
|
+
│ ├── rebuild.ts # pmem rebuild --changed/--full/--card — SQLite 写入
|
|
104
|
+
│ ├── recall.ts # pmem recall --budget N --format compact/json/paths/pack
|
|
105
|
+
│ ├── ask.ts # pmem ask <query> — 6 步召回(exact→alias→tag→graph→FTS→rerank)
|
|
106
|
+
│ ├── graph.ts # pmem related --depth N --type X / pmem trace
|
|
107
|
+
│ ├── verify.ts # pmem verify --fix — hash 对比 + orphan + stale + exit codes
|
|
108
|
+
│ ├── update.ts # ⭐ pmem update --suggest/--apply-suggestion/--confirm
|
|
109
|
+
│ │ # pmem mark-dirty --auto
|
|
110
|
+
│ ├── migrate.ts # pmem migrate --to 0.3 --dry-run
|
|
111
|
+
│ ├── distill.ts # ⭐ pmem distill --suggest/--apply-suggestion/--confirm
|
|
112
|
+
│ ├── session.ts # pmem session start/end(+ update_log 汇总)
|
|
113
|
+
│ ├── status.ts # ⭐ pmem status — git status + paths 三级匹配
|
|
114
|
+
│ └── integration.ts # pmem integration list/install/verify
|
|
115
|
+
└── dist/ # tsc 编译输出(gitignored)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 五、关键技术决策
|
|
121
|
+
|
|
122
|
+
### 1. 架构原则
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
Markdown cards (.pmem/**/*.md) ← 唯一主数据
|
|
126
|
+
SQLite (.pmem/pmem.db) ← 索引、缓存、运行时状态
|
|
127
|
+
JSON indexes (.pmem/indexes/) ← legacy 保留
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
- **永远不**在 SQLite 中创建"数据库独有"的卡片
|
|
131
|
+
- **永远不**删除旧 JSON indexes
|
|
132
|
+
- **永远不**直接修改 SQLite(修改必须通过 Markdown → rebuild)
|
|
133
|
+
|
|
134
|
+
### 2. Content Hash 增量
|
|
135
|
+
|
|
136
|
+
三 hash 体系:
|
|
137
|
+
- `file_hash` — 整个 .md 文件(变化 = 重解析全部)
|
|
138
|
+
- `frontmatter_hash` — YAML 部分(变化 = 更新元数据+关系)
|
|
139
|
+
- `body_hash` — 正文部分(变化 = 更新 FTS/summary/token_count)
|
|
140
|
+
|
|
141
|
+
`--changed` 模式下对比 hash,全部匹配则跳过。
|
|
142
|
+
|
|
143
|
+
### 3. 退出码协议
|
|
144
|
+
|
|
145
|
+
| 命令 | 0 | 1 | 2 |
|
|
146
|
+
|------|---|---|---|
|
|
147
|
+
| `pmem status` | 有变更 | 无变更 | 错误 |
|
|
148
|
+
| `pmem update --suggest` | 无建议 | 有建议 | 错误 |
|
|
149
|
+
| `pmem distill --suggest` | 无需蒸馏 | 建议蒸馏 | 错误 |
|
|
150
|
+
| `pmem verify` | 通过 | 有 warning | 有 error |
|
|
151
|
+
|
|
152
|
+
### 4. Status 三级匹配
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
Pass 1: exact — changed file path LIKE paths.path
|
|
156
|
+
Pass 2: directory — changed file directory LIKE paths.path
|
|
157
|
+
Pass 3: graph_neighbor — edges 表 1-hop 扩展
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
优先级:exact > directory > graph_neighbor(高优先级覆盖低优先级)。
|
|
161
|
+
|
|
162
|
+
### 5. update --suggest 建议引擎
|
|
163
|
+
|
|
164
|
+
基于三个数据源生成建议:
|
|
165
|
+
1. `getUnresolvedDirtyFlags(db)` — 未解决的脏标记
|
|
166
|
+
2. `state.md` mtime — 超过 24h = stale
|
|
167
|
+
3. `next.md` 内容长度 — < 50 chars = minimal
|
|
168
|
+
|
|
169
|
+
建议类型:`update_card`, `create_trace`, `update_state`, `update_next`。
|
|
170
|
+
|
|
171
|
+
### 6. Manifest 类型系统
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
type ManifestSchemaVersion = '0.2' | '0.3';
|
|
175
|
+
type Manifest = ManifestV02 | ManifestV03; // discriminated union on pmem.schema_version
|
|
176
|
+
|
|
177
|
+
interface ManifestBase { /* 共享字段 */ }
|
|
178
|
+
interface ManifestV02 extends ManifestBase { pmem: { schema_version: '0.2' }; indexes: ManifestIndexes; }
|
|
179
|
+
interface ManifestV03 extends ManifestBase { pmem: { schema_version: '0.3' }; runtime; rebuild; cli; embedding; serve; }
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
严禁 `as any` 绕过类型检查。迁移函数返回 `ManifestV03`。
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 六、命令行完整参考(15 命令)
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# 初始化
|
|
190
|
+
pmem init [project-name] [--guided]
|
|
191
|
+
|
|
192
|
+
# 内存查询
|
|
193
|
+
pmem recall [--budget N] [--format compact|json|paths|pack]
|
|
194
|
+
pmem ask <query> [--format compact|json|paths|pack]
|
|
195
|
+
pmem related <id> [--depth N] [--type depends_on|related_to|...]
|
|
196
|
+
pmem trace <id>
|
|
197
|
+
|
|
198
|
+
# 变更感知(v0.4 新增)
|
|
199
|
+
pmem status [--since <timestamp>] [--format compact|json]
|
|
200
|
+
|
|
201
|
+
# 工作流(v0.4 增强)
|
|
202
|
+
pmem mark-dirty [-r <reason>] [--auto]
|
|
203
|
+
pmem update [--auto|--suggest|--apply-suggestion <id>|--confirm|--force] [-s <summary>] [-n <next>] [--format compact|json]
|
|
204
|
+
|
|
205
|
+
# 蒸馏(v0.4 增强)
|
|
206
|
+
pmem distill [--suggest|--apply-suggestion <id>|--confirm|--suggest-splits]
|
|
207
|
+
|
|
208
|
+
# 维护
|
|
209
|
+
pmem rebuild [--changed|--full|--card <id>]
|
|
210
|
+
pmem verify [--fix]
|
|
211
|
+
pmem migrate --to 0.3 [--dry-run] [--backup]
|
|
212
|
+
|
|
213
|
+
# 会话(v0.3 P1 完成,v0.4 增强汇总)
|
|
214
|
+
pmem session start [-a <agent-name>]
|
|
215
|
+
pmem session end [-s <summary>]
|
|
216
|
+
|
|
217
|
+
# 框架集成
|
|
218
|
+
pmem integration list|install <framework>|verify
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 七、测试基础设施
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
npm test # node --require ts-node/register --test src/core/*.test.ts
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
| 文件 | 用例数 | 覆盖 |
|
|
230
|
+
|------|--------|------|
|
|
231
|
+
| [src/core/yaml.test.ts](src/core/yaml.test.ts) | 21 | parseYamlValue/parseSimpleYaml/parseFrontmatter |
|
|
232
|
+
| [src/core/manifest.test.ts](src/core/manifest.test.ts) | 21 | getDefaultManifest/getDefaultManifestV03 全字段 |
|
|
233
|
+
| [src/core/db.test.ts](src/core/db.test.ts) | 22 | 10 表 schema + CRUD + dirty/session/update_log |
|
|
234
|
+
| [src/core/hash.test.ts](src/core/hash.test.ts) | 16 | computeHash/computeCardHashes/tokenCount/sectionCount |
|
|
235
|
+
| **合计** | **88** | **0 失败** |
|
|
236
|
+
|
|
237
|
+
### E2E 测试流程
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
cd temp && rm -rf v04-test && mkdir v04-test && cd v04-test
|
|
241
|
+
|
|
242
|
+
# 初始化 + 创建卡片
|
|
243
|
+
npx ts-node ../../src/index.ts init v04-test
|
|
244
|
+
mkdir -p .pmem/modules .pmem/decisions .pmem/traces
|
|
245
|
+
# ... 写入测试卡片(含 YAML frontmatter)...
|
|
246
|
+
|
|
247
|
+
# 核心链路
|
|
248
|
+
npx ts-node ../../src/index.ts rebuild
|
|
249
|
+
npx ts-node ../../src/index.ts recall --format compact --budget 2000
|
|
250
|
+
npx ts-node ../../src/index.ts ask "关键词" --format json
|
|
251
|
+
npx ts-node ../../src/index.ts related <card_id> --depth 2
|
|
252
|
+
npx ts-node ../../src/index.ts trace <card_id>
|
|
253
|
+
|
|
254
|
+
# Workflow 闭环
|
|
255
|
+
npx ts-node ../../src/index.ts session start -a "test"
|
|
256
|
+
npx ts-node ../../src/index.ts status --format json
|
|
257
|
+
npx ts-node ../../src/index.ts mark-dirty -r "test" --auto
|
|
258
|
+
npx ts-node ../../src/index.ts update --suggest --format json
|
|
259
|
+
npx ts-node ../../src/index.ts update --confirm -s "summary" -n "next"
|
|
260
|
+
npx ts-node ../../src/index.ts distill --suggest
|
|
261
|
+
npx ts-node ../../src/index.ts session end -s "test complete"
|
|
262
|
+
npx ts-node ../../src/index.ts verify
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 八、v0.5 路线图(接班人方向)
|
|
268
|
+
|
|
269
|
+
### v0.5 目标:上线可用 Beta
|
|
270
|
+
|
|
271
|
+
v0.4 完成了 Agent workflow 闭环。v0.5 应聚焦"真实可用性":
|
|
272
|
+
|
|
273
|
+
**建议优先级:**
|
|
274
|
+
|
|
275
|
+
| 优先级 | 方向 | 说明 |
|
|
276
|
+
|--------|------|------|
|
|
277
|
+
| P0 | 实战打磨 | 在真实项目中使用 pmem,收集 ask/recall 不准、status 误报、建议噪音等案例 |
|
|
278
|
+
| P0 | 性能优化 | 大项目(100+ cards)的 rebuild 和 ask 性能 |
|
|
279
|
+
| P0 | 错误处理 | 完善 corner case 处理(DB 损坏、并发的 pmem 实例、空项目) |
|
|
280
|
+
| P1 | embedding ? | 基于收集的召回不准案例判断是否接入 embedding,以及 provider 选型 |
|
|
281
|
+
| P1 | `pmem serve` ? | 如果 Agent 不能运行 shell 的需求明确,再考虑 |
|
|
282
|
+
| P2 | npm 发布 | `npm publish` 为可全局安装的 CLI |
|
|
283
|
+
|
|
284
|
+
### v0.4 明确推迟到 v0.5+ 的
|
|
285
|
+
|
|
286
|
+
- embedding 真接入(API 或 local)
|
|
287
|
+
- pmem serve(MCP/REST/daemon)
|
|
288
|
+
- Graph UI
|
|
289
|
+
- 多用户远程服务
|
|
290
|
+
- npm 包发布
|
|
291
|
+
|
|
292
|
+
### 开工建议
|
|
293
|
+
|
|
294
|
+
1. 先读 `docs/v0.4 pre-design.md` — 了解 v0.4 设计意图
|
|
295
|
+
2. 在真实项目中使用 pmem — 积累 1-2 周的使用反馈
|
|
296
|
+
3. 基于反馈写 `docs/v0.5 pre-design.md`
|
|
297
|
+
4. 不急于堆功能,先打磨可用性
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 九、常见陷阱
|
|
302
|
+
|
|
303
|
+
### 1. Markdown 是唯一主数据
|
|
304
|
+
SQLite 中 `is_deleted` / `is_candidate` 只是标记。所有卡片必须对应 .md 文件。不要创建"数据库独有"的卡片。
|
|
305
|
+
|
|
306
|
+
### 2. 不要修改 SQLite 直接
|
|
307
|
+
修改记忆流程:编辑 .md 文件 → `pmem rebuild --changed`。不要写代码直接 UPDATE SQLite。
|
|
308
|
+
|
|
309
|
+
### 3. Hash 不是 timestamp
|
|
310
|
+
增量 rebuild 用 content hash(SHA-256),不用 mtime。git checkout 会改变 mtime 但不改变内容。
|
|
311
|
+
|
|
312
|
+
### 4. FTS5 可能不可用
|
|
313
|
+
`hasFTS5(db)` 检查后降级到 `LIKE` 查询。不要假设 FTS5 一定存在。
|
|
314
|
+
|
|
315
|
+
### 5. Manifest 是 discriminated union
|
|
316
|
+
`Manifest = ManifestV02 | ManifestV03`。访问版本特有字段前必须 narrow:`if (manifest.pmem.schema_version === '0.3')`。
|
|
317
|
+
|
|
318
|
+
### 6. 退出码不要吞掉
|
|
319
|
+
`pmem update --suggest` 和 `pmem distill --suggest` 的退出码是 Agent 决策依据。`process.exit(1)` = 有建议待处理,不是错误。
|
|
320
|
+
|
|
321
|
+
### 7. status 依赖 git
|
|
322
|
+
`pmem status` 优先用 `git status --porcelain`。非 git 项目自动降级到 mtime。测试时注意:temp/ 子目录不是 git repo,会 fallback 到 mtime。
|
|
323
|
+
|
|
324
|
+
### 8. DB 不存在时 graceful fallback
|
|
325
|
+
所有需要 SQLite 的命令必须检查 `.pmem/pmem.db` 是否存在。不存在时打印提示(不要 crash),降级到文件操作。
|
|
326
|
+
|
|
327
|
+
### 9. 事务边界
|
|
328
|
+
先 atomicWrite Markdown → 再 SQLite transaction。不要反过来。Markdown 写入无法回滚,SQLite 可以。
|
|
329
|
+
|
|
330
|
+
### 10. 不要引入 as any
|
|
331
|
+
manifest 类型系统已建立 discriminated union。新增 manifest 版本时扩展 union,不要绕过。
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## 十、依赖清单
|
|
336
|
+
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"dependencies": {
|
|
340
|
+
"better-sqlite3": "^12.10.0",
|
|
341
|
+
"commander": "^14.0.3",
|
|
342
|
+
"js-yaml": "^4.1.1"
|
|
343
|
+
},
|
|
344
|
+
"devDependencies": {
|
|
345
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
346
|
+
"@types/js-yaml": "^4.0.9",
|
|
347
|
+
"@types/node": "^25.9.1",
|
|
348
|
+
"ts-node": "^10.9.2",
|
|
349
|
+
"typescript": "^6.0.3"
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## 十一、接班人阅读顺序
|
|
357
|
+
|
|
358
|
+
1. **CLAUDE.md** — 5 分钟了解项目
|
|
359
|
+
2. **docs/v0.3 pre-design.md** — v0.3 SQLite 架构决策(14 章)
|
|
360
|
+
3. **docs/v0.4 pre-design.md** — v0.4 workflow 决策(12 章)
|
|
361
|
+
4. **docs/handover-v0.4.md** — 本文档
|
|
362
|
+
5. **src/types.ts** — 类型系统(特别注意 Manifest discriminated union)
|
|
363
|
+
6. **src/core/db.ts** — SQLite schema 和 CRUD 辅助函数
|
|
364
|
+
7. **src/commands/update.ts** — v0.4 最复杂的命令(suggest 引擎)
|
|
365
|
+
8. **src/commands/status.ts** — v0.4 新增命令(三级匹配)
|
|
366
|
+
|
|
367
|
+
然后在 `temp/` 中跑一次完整 E2E 测试,建立肌肉记忆。
|
package/docs/prd.md
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
# pmem — Product Requirements Document
|
|
2
|
+
|
|
3
|
+
## 一、产品概述
|
|
4
|
+
|
|
5
|
+
### 1.1 产品名称
|
|
6
|
+
|
|
7
|
+
**pmem**(Project Memory for Agents)
|
|
8
|
+
|
|
9
|
+
备选:GraphMemo / PGM / Agent Project Memory
|
|
10
|
+
|
|
11
|
+
### 1.2 一句话描述
|
|
12
|
+
|
|
13
|
+
面向 AI 编码 Agent 的低 token、可溯源、图结构项目记忆协议与 CLI 运行时。
|
|
14
|
+
|
|
15
|
+
### 1.3 产品定位
|
|
16
|
+
|
|
17
|
+
pmem 不是知识库,不是文档系统,不是代码扫描器。它是一个**项目记忆运行时**:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
传统:Agent → 读代码/文档 → 自己总结 → 高 token、不稳定
|
|
21
|
+
pmem:Agent → 读 .pmem/index.md → 按需查图谱 → 回写记忆 → 低 token、可溯源
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 1.4 核心价值主张
|
|
25
|
+
|
|
26
|
+
让任何 AI coding agent 进入项目时,以最少 token 获得三件事:
|
|
27
|
+
1. **我在哪个项目里?**(项目名、阶段、当前关注点)
|
|
28
|
+
2. **当前项目状态是什么?**(模块状态、活跃任务、最近决策)
|
|
29
|
+
3. **下一步最应该做什么?为什么?证据在哪?**(next step + 溯源链)
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 二、目标用户
|
|
34
|
+
|
|
35
|
+
### 2.1 主要用户
|
|
36
|
+
|
|
37
|
+
| 用户 | 场景 | 核心需求 |
|
|
38
|
+
|------|------|---------|
|
|
39
|
+
| AI Coding Agent(Claude Code、Cursor、Codex 等) | 进入项目开始工作 | 快速恢复上下文,找到相关记忆,知道下一步做什么 |
|
|
40
|
+
| 个人开发者 | 自己用 AI 辅助开发 | 让 Agent 记住项目演进过程,避免反复解释 |
|
|
41
|
+
| 小型开发团队 | 多人 + 多 Agent 协作 | 共享项目记忆,决策可溯源 |
|
|
42
|
+
|
|
43
|
+
### 2.2 用户痛点
|
|
44
|
+
|
|
45
|
+
| 痛点 | pmem 解法 |
|
|
46
|
+
|------|----------|
|
|
47
|
+
| Agent 每次都要重新理解项目 → token 浪费 | `pmem recall --budget 2000` |
|
|
48
|
+
| Agent 容易推翻之前决策 | `decisions/` + `pmem trace` |
|
|
49
|
+
| Agent 不知道下一步做什么 | `pmem next` |
|
|
50
|
+
| 项目长期演进后记忆丢失 | `.pmem/traces/` + `pmem distill` |
|
|
51
|
+
| 不同 Agent 框架接入方式不统一 | `integrations/` + `AGENTS.md` |
|
|
52
|
+
| 记忆过时无人发现 | `pmem verify` + freshness detection |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 三、核心协议
|
|
57
|
+
|
|
58
|
+
### 3.1 记忆存储层级
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Hot Memory(每次必读):
|
|
62
|
+
.pmem/index.md + state.md + next.md
|
|
63
|
+
~1000–2000 tokens
|
|
64
|
+
|
|
65
|
+
Warm Memory(按需读取):
|
|
66
|
+
.pmem/modules/ + decisions/ + tasks/
|
|
67
|
+
按任务类型召回
|
|
68
|
+
|
|
69
|
+
Cold Memory(溯源用):
|
|
70
|
+
.pmem/traces/ + summaries/
|
|
71
|
+
不默认读取
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 3.2 数据模型
|
|
75
|
+
|
|
76
|
+
**节点类型:** project | module | feature | task | decision | risk | assumption | constraint | trace
|
|
77
|
+
|
|
78
|
+
**边类型:** depends_on | blocks | implements | constrains | decided_by | derived_from | related_to | supersedes | conflicts_with | next_step_of
|
|
79
|
+
|
|
80
|
+
**核心原则:** Markdown 记忆卡片是单一真相来源,JSON/SQLite 索引是派生缓存。
|
|
81
|
+
|
|
82
|
+
### 3.3 记忆卡片格式
|
|
83
|
+
|
|
84
|
+
每张卡片 = YAML frontmatter(机器可读 metadata)+ Markdown 正文(人类和 Agent 可读)
|
|
85
|
+
|
|
86
|
+
```md
|
|
87
|
+
---
|
|
88
|
+
id: module.backtest_sandbox
|
|
89
|
+
type: module
|
|
90
|
+
schema_version: "0.2"
|
|
91
|
+
status: designing
|
|
92
|
+
tags: [backtest, agent]
|
|
93
|
+
aliases: [回测沙盒]
|
|
94
|
+
depends_on: [module.market_data]
|
|
95
|
+
related: [decision.agent_tool_boundary]
|
|
96
|
+
updated: 2026-05-20
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
# Backtest Sandbox
|
|
100
|
+
|
|
101
|
+
## One-liner
|
|
102
|
+
...
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 四、功能需求
|
|
108
|
+
|
|
109
|
+
### 4.1 v0.1 — 核心闭环 ✅
|
|
110
|
+
|
|
111
|
+
| 需求 | 优先级 | 状态 |
|
|
112
|
+
|------|--------|------|
|
|
113
|
+
| 项目初始化(`pmem init`) | P0 | ✅ |
|
|
114
|
+
| 图索引构建(`pmem rebuild`) | P0 | ✅ |
|
|
115
|
+
| 项目回忆(`pmem recall --budget N`) | P0 | ✅ |
|
|
116
|
+
| 图引导召回(`pmem ask`) | P0 | ✅ |
|
|
117
|
+
| 图谱查询(`pmem related`) | P0 | ✅ |
|
|
118
|
+
| 溯源追踪(`pmem trace`) | P0 | ✅ |
|
|
119
|
+
| 一致性检查(`pmem verify`) | P0 | ✅ |
|
|
120
|
+
| 记忆更新(`pmem update` 四级) | P0 | ✅ |
|
|
121
|
+
| 脏标记(`pmem mark-dirty`) | P0 | ✅ |
|
|
122
|
+
| 框架适配(`pmem integration`) | P1 | ✅ |
|
|
123
|
+
|
|
124
|
+
### 4.2 v0.2 — 文件模式可信
|
|
125
|
+
|
|
126
|
+
| 需求 | 优先级 | 说明 |
|
|
127
|
+
|------|--------|------|
|
|
128
|
+
| 交互式冷启动(`pmem init --guided`) | P0 | 问 3 个必填字段,生成可用初始记忆 |
|
|
129
|
+
| 保守项目扫描 + candidates | P0 | 扫描不自动确认,候选进入 `candidates/` |
|
|
130
|
+
| `memory_incomplete` 降级模式 | P0 | 空 pmem 时明确告知 Agent 记忆不完整 |
|
|
131
|
+
| schema 版本管理 | P0 | manifest + 每张卡片带 `schema_version` |
|
|
132
|
+
| 迁移命令(`pmem migrate`) | P0 | dry-run + 执行 + 自动备份 |
|
|
133
|
+
| 版本兼容检查(`pmem verify` 增强) | P0 | CLI vs 项目 schema 版本对比 |
|
|
134
|
+
| atomic write | P0 | .tmp → fsync → rename,防止半写损坏 |
|
|
135
|
+
| 简单 file lock | P0 | `.pmem/.lock`,超时 3s,默认 abort |
|
|
136
|
+
| `memory_status` 追踪 | P1 | completeness + initialized_mode 字段 |
|
|
137
|
+
| card_policy 校验 | P1 | ID 命名规范 + 大小阈值 + verify 警告 |
|
|
138
|
+
| trace → card 蒸馏(`pmem distill` 初版) | P1 | 建议模式,需确认,不自动写 |
|
|
139
|
+
| 卡片拆分建议(`pmem distill --suggest-splits`) | P1 | 检测过大卡片,建议拆分 |
|
|
140
|
+
| 声明式初始化(`pmem init --from`) | P2 | 可延后 |
|
|
141
|
+
| section-level merge(`pmem update --merge`) | P2 | 可延后 |
|
|
142
|
+
| 完整乐观锁 + card_hashes.json | 不做 | 留给 v0.3 SQLite |
|
|
143
|
+
|
|
144
|
+
### 4.3 v0.3 — SQLite 运行时
|
|
145
|
+
|
|
146
|
+
| 需求 | 优先级 | 说明 |
|
|
147
|
+
|------|--------|------|
|
|
148
|
+
| SQLite 数据库(`.pmem/pmem.db`) | P0 | 存 cards、edges、aliases、tags、tasks、traces、sessions、dirty_flags、update_log |
|
|
149
|
+
| SQL-backed recall / ask / related | P0 | 替代 JSON 遍历 |
|
|
150
|
+
| transaction-based update | P0 | 原子写入卡片 + 索引 |
|
|
151
|
+
| 乐观锁(SQLite 层) | P0 | 替代 card_hashes.json |
|
|
152
|
+
| incremental rebuild | P1 | 只重建变更部分 |
|
|
153
|
+
| `pmem serve` 原型 | P1 | HTTP API |
|
|
154
|
+
| semantic search / embeddings | P2 | 可选 |
|
|
155
|
+
|
|
156
|
+
### 4.4 v0.4 — Agent 集成 & 自动化
|
|
157
|
+
|
|
158
|
+
| 需求 | 优先级 | 说明 |
|
|
159
|
+
|------|--------|------|
|
|
160
|
+
| Claude Code hooks 模板 | P0 | PostToolUse / Stop hooks |
|
|
161
|
+
| Cursor rules 完整版 | P0 | `.cursor/rules/pmem.mdc` |
|
|
162
|
+
| Codex / OpenClaw 适配 | P1 | AGENTS.md / skill 模板 |
|
|
163
|
+
| `pmem update --auto --mode=suggest` 增强 | P0 | 智能变更检测 |
|
|
164
|
+
| session tracking | P1 | Agent 会话起止 + 操作摘要 |
|
|
165
|
+
| distill 工作流优化 | P1 | 定期自动建议蒸馏 |
|
|
166
|
+
| stale memory detection | P1 | 基于 source_files 变更 |
|
|
167
|
+
|
|
168
|
+
### 4.5 v0.5 — 可上线 Beta
|
|
169
|
+
|
|
170
|
+
| 需求 | 优先级 | 说明 |
|
|
171
|
+
|------|--------|------|
|
|
172
|
+
| `npm install -g pmem` 一键安装 | P0 | |
|
|
173
|
+
| SQLite 默认开启 | P0 | 新项目默认 SQLite,文件模式兼容 |
|
|
174
|
+
| 完整体验的 `pmem init --guided` | P0 | 引导 → 首个项目跑通 |
|
|
175
|
+
| 完整使用文档 | P0 | 使用指南 + CLI 参考 + 集成教程 |
|
|
176
|
+
| demo 项目 | P0 | 开箱即用示例 |
|
|
177
|
+
| `pmem backup` / `pmem restore` | P1 | |
|
|
178
|
+
| 可选遥测 | P2 | opt-in |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 五、技术架构
|
|
183
|
+
|
|
184
|
+
### 5.1 技术栈
|
|
185
|
+
|
|
186
|
+
| 层次 | v0.1–v0.2 | v0.3+ |
|
|
187
|
+
|------|-----------|-------|
|
|
188
|
+
| 语言 | TypeScript (strict) | TypeScript (strict) |
|
|
189
|
+
| CLI 框架 | Commander | Commander |
|
|
190
|
+
| 主数据存储 | Markdown + YAML frontmatter(文件系统) | 同左 |
|
|
191
|
+
| 索引存储 | JSON files | SQLite |
|
|
192
|
+
| 运行环境 | Node.js ≥18 | Node.js ≥18 |
|
|
193
|
+
|
|
194
|
+
### 5.2 项目记忆目录结构
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
.pmem/
|
|
198
|
+
manifest.yml # 配置中心
|
|
199
|
+
index.md / state.md / next.md # Hot Memory
|
|
200
|
+
modules/ / features/ / decisions/ / tasks/ / traces/ / risks/ # 记忆卡片
|
|
201
|
+
candidates/ # 冷启动扫描候选(v0.2+)
|
|
202
|
+
indexes/ # 派生索引(v0.2 JSON → v0.3 SQLite)
|
|
203
|
+
skills/ # Agent 操作手册
|
|
204
|
+
integrations/ # 框架适配模板
|
|
205
|
+
backups/ / migrations/ # 迁移基础设施(v0.2+)
|
|
206
|
+
pmem.db # SQLite 数据库(v0.3+)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 5.3 CLI 命令全集
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
pmem init [--guided] [--from <file>]
|
|
213
|
+
pmem recall [--budget <tokens>]
|
|
214
|
+
pmem next
|
|
215
|
+
pmem ask <query>
|
|
216
|
+
pmem related <id>
|
|
217
|
+
pmem trace <id>
|
|
218
|
+
pmem update [--auto|--confirm|--force]
|
|
219
|
+
pmem mark-dirty [--reason <reason>]
|
|
220
|
+
pmem rebuild
|
|
221
|
+
pmem verify [--fix] [--report]
|
|
222
|
+
pmem distill [--suggest-splits]
|
|
223
|
+
pmem migrate [--dry-run] [--to <version>] [--backup]
|
|
224
|
+
pmem integration [list|install|verify] [<framework>]
|
|
225
|
+
pmem lock status
|
|
226
|
+
pmem backup
|
|
227
|
+
pmem restore
|
|
228
|
+
pmem serve # v0.3+
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 六、关键设计原则
|
|
234
|
+
|
|
235
|
+
1. **Markdown 是主数据,索引是缓存。** 索引随时可重建。
|
|
236
|
+
2. **召回必须可解释。** `pmem ask` 输出必须标注匹配路径(exact / alias / graph / fallback)。
|
|
237
|
+
3. **更新分级,不无脑写。** mark-dirty → auto → confirm → force。
|
|
238
|
+
4. **版本可迁移。** schema_version 从 v0.2 开始强制执行。
|
|
239
|
+
5. **文件不写坏。** atomic write 从 v0.2 开始强制执行。
|
|
240
|
+
6. **AGENTS.md 是入口,skills/ 是流程,integrations/ 是适配器。**
|
|
241
|
+
7. **模块粒度以概念/责任边界为主,代码目录为辅。**
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 七、成功指标
|
|
246
|
+
|
|
247
|
+
### v0.2 完成标准
|
|
248
|
+
|
|
249
|
+
- [ ] `pmem init --guided` 能在 3 个问答内让 Agent 获得可用的初始上下文
|
|
250
|
+
- [ ] v0.1 项目能通过 `pmem migrate --to 0.2` 完成迁移
|
|
251
|
+
- [ ] `pmem verify` 能检测 schema_version 不匹配和 card_policy 违规
|
|
252
|
+
- [ ] 并发写入时不会损坏文件(lock abort + atomic write)
|
|
253
|
+
- [ ] distill 能正确建议将 trace 蒸馏到已有 card
|
|
254
|
+
|
|
255
|
+
### v0.5 完成标准
|
|
256
|
+
|
|
257
|
+
- [ ] 新用户能在 2 分钟内完成 `npm install -g pmem` + `pmem init --guided`
|
|
258
|
+
- [ ] 已有 v0.1/v0.2 项目能平滑迁移至 v0.5
|
|
259
|
+
- [ ] Claude Code / Cursor 用户能通过 integration 模板一键接入
|
|
260
|
+
- [ ] Agent 首次进入项目时 token 消耗 ≤ 2000(recall --budget 2000)
|
|
261
|
+
- [ ] `pmem ask` 召回命中率 ≥ 70%(在 50+ 张卡片的项目中)
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## 八、竞争与差异化
|
|
266
|
+
|
|
267
|
+
| 方案 | 问题 |
|
|
268
|
+
|------|------|
|
|
269
|
+
| 让 Agent 读 README / docs | token 大、不稳定 |
|
|
270
|
+
| 让 Agent 读代码 | 无上下文,容易误解 |
|
|
271
|
+
| 通用知识库 | 不是为 Agent 设计的,token 不可控 |
|
|
272
|
+
| Cursor Rules / CLAUDE.md | 只有静态指令,无图记忆、无溯源、不更新 |
|
|
273
|
+
| **pmem** | **图记忆 + token 预算 + 溯源 + 可更新 + 跨 Agent** |
|
|
274
|
+
|
|
275
|
+
核心差异:pmem 不是"更好的文档",而是"Agent 的项目记忆运行时"。
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 九、风险与缓解
|
|
280
|
+
|
|
281
|
+
| 风险 | 影响 | 缓解措施 |
|
|
282
|
+
|------|------|---------|
|
|
283
|
+
| 记忆过时 | Agent 基于旧事实做错决策 | freshness TTL + source_files 变更检测 + verify |
|
|
284
|
+
| 记忆噪音 | traces 过多,淹没信号 | trace 写入门槛 + distill 压缩 |
|
|
285
|
+
| 维护成本高 | 用户不更新记忆卡 | guided init + distill 建议 + mark-dirty 提醒 |
|
|
286
|
+
| Agent 不主动用 pmem | 工具被闲置 | AGENTS.md + hooks + integration 模板降低接入成本 |
|
|
287
|
+
| 跨版本迁移出错 | 用户项目记忆损坏 | dry-run + 自动备份 + 官方迁移规则内置 |
|
|
288
|
+
| SQLite 锁定用户 | 无法再编辑 .md 文件 | Markdown 永久保留为 canonical 主数据 |
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 十、未决事项
|
|
293
|
+
|
|
294
|
+
以下问题待后续版本讨论和决策:
|
|
295
|
+
|
|
296
|
+
### 技术
|
|
297
|
+
|
|
298
|
+
- [ ] v0.3 SQLite schema 详细设计(表结构、索引策略、迁移脚本)
|
|
299
|
+
- [ ] `pmem serve` 选择 MCP Server 还是 REST API,还是两者都做?
|
|
300
|
+
- [ ] embeddings 选型(本地模型 vs API?哪种最适合代码项目语义?)
|
|
301
|
+
- [ ] graph 分片策略——按模块?按类型?混合?
|
|
302
|
+
- [ ] incremental rebuild 的实现策略
|
|
303
|
+
|
|
304
|
+
### 产品
|
|
305
|
+
|
|
306
|
+
- [ ] 多项目 / monorepo / workspace 支持方案
|
|
307
|
+
- [ ] 记忆共享与多人协作机制
|
|
308
|
+
- [ ] 记忆权限模型(谁能读/写哪些卡片)
|
|
309
|
+
- [ ] npm 包发布策略(何时第一次 publish?scope?)
|
|
310
|
+
- [ ] 是否需要 VS Code / JetBrains 插件?
|
|
311
|
+
- [ ] telemetry 的范围、隐私策略、opt-in 机制
|
|
312
|
+
|
|
313
|
+
### 业务
|
|
314
|
+
|
|
315
|
+
- [ ] 开源协议(MIT?Apache 2.0?)
|
|
316
|
+
- [ ] 社区治理模型
|
|
317
|
+
- [ ] 文档站点与教程
|
|
318
|
+
- [ ] 是否需要一个"pmem registry"让团队共享记忆模板?
|