open-memex 0.3.0-alpha.3 → 0.4.0-alpha.1

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/AGENTS.md CHANGED
@@ -12,7 +12,7 @@ via `prepublishOnly` — Node refuses `--experimental-strip-types` for files und
12
12
 
13
13
  - **opencode host** loads `src/index.ts` under embedded **Bun**. SQLite here is `bun:sqlite` (built-in).
14
14
  - **CLI** (`src/cli.ts`) and smoke tests run under **Node 22+** with `--experimental-strip-types`. SQLite here is `better-sqlite3` (native module).
15
- - **MCP server** (`src/mcp.ts`, stdio) runs under **Node 22+** with `--experimental-strip-types`. It exposes the same five memory tools to any MCP client (VS Code Copilot, Cursor, Claude Code). **stdout is the protocol channel — never log to stdout in `mcp.ts`; diagnostics go to stderr.**
15
+ - **MCP server** (`src/mcp.ts`, stdio) runs under **Node 22+** with `--experimental-strip-types`. It exposes the same ten memory tools to any MCP client (VS Code Copilot, Cursor, Claude Code). **stdout is the protocol channel — never log to stdout in `mcp.ts`; diagnostics go to stderr.**
16
16
 
17
17
  `src/store/db.ts` picks the backend at runtime by sniffing `globalThis.Bun`. Both backends share the same surface (`new Database(path)`, `.exec`, `.prepare().run/all/get`, `.close`). Any DB code you write must stay on that common subset — do not import `better-sqlite3` or `bun:sqlite` directly outside `db.ts`.
18
18
 
@@ -29,12 +29,18 @@ Consequences:
29
29
  npm install # once
30
30
  npm run typecheck # tsc --noEmit — the only lint/type gate
31
31
  npm run cli -- where | list | search "q" | add ... | forget <id> | reindex
32
+ npm run cli -- sync-status # last sync time/kind + outbox drafts + repo review states + uncommitted files
33
+ npm run cli -- submit <id...> [--onto <branch>] [--base <branch>] # drafts → .ai/open-memex/ (local branch+commit)
34
+ npm run cli -- propose <id...> --to project [--local-approve] # copy personal → project outbox (batch OK)
35
+ npm run cli -- promote <id> [--reject] [--resubmit] [--note "..."] # proposed → approved → published (audit trail appended)
36
+ npm run cli -- pr-status [--apply] # map branch PR's GitHub state onto review_state (report; apply = local only)
37
+ npm run cli -- resolve [id-or-path] # list / 3-way-merge conflicted memories
32
38
  npm run mcp # start the stdio MCP server
33
39
  node --experimental-strip-types scripts\smoke-pure.ts # runs pure-logic checks (no sqlite)
34
40
  node --experimental-strip-types scripts\smoke-mcp.ts # MCP handshake + tool round-trip (temp dirs, no real data)
35
41
  ```
36
42
 
37
- After `npm i -g open-memex@alpha` (or `npm link` from source), the `open-memex` bin is on
43
+ After `npm i -g open-memex` (or `npm link` from source), the `open-memex` bin is on
38
44
  PATH: `open-memex mcp` starts the MCP server, `open-memex mcp --print-config <client>`
39
45
  prints a client config snippet (client: vscode|cursor|claude|opencode|visualstudio),
40
46
  `open-memex init [--client vscode|cursor|opencode|visualstudio] [--instructions personal|project] [--force] [--yes]`
@@ -129,3 +135,7 @@ hold `V2` and `V2/…` simultaneously. Full rules: `CONTRIBUTING.md`.
129
135
  and the frozen `docs/V2-DESIGN.md` (append a `D<n>` decision entry, never rewrite history);
130
136
  new commands → README CLI sections + this file's Commands. A change without its docs
131
137
  is not done.
138
+ - **Version bumps ship with features.** `package.json` + `package-lock.json` carry the
139
+ in-development version. New features on a dev branch bump the minor on the alpha
140
+ line (`0.3.0` → `0.4.0-alpha.1`); fixes bump the patch (`-alpha.1` → `-alpha.2`).
141
+ The bump goes in the same commit as the feature, never as an afterthought.
package/README.md CHANGED
@@ -21,16 +21,15 @@ plus a generic MCP server (VS Code Copilot, Cursor, Claude Code, Visual Studio,
21
21
  **npm (recommended):**
22
22
 
23
23
  ```sh
24
- npm install -g open-memex@alpha
24
+ npm install -g open-memex
25
25
  ```
26
26
 
27
- This installs the `0.3.0-alpha` prerelease channel. (`latest` still points at the older
28
- `0.1.0` stable.)
27
+ This installs the `0.3.0` stable release.
29
28
 
30
29
  **No install — run via npx:**
31
30
 
32
31
  ```sh
33
- npx -y open-memex@alpha <command> # e.g. npx -y open-memex@alpha init --client vscode
32
+ npx -y open-memex <command> # e.g. npx -y open-memex init --client vscode
34
33
  ```
35
34
 
36
35
  **From source** (bleeding edge, `V2-dev-p2` branch):
@@ -42,9 +41,6 @@ npm install
42
41
  node --experimental-strip-types src/cli.ts <command>
43
42
  ```
44
43
 
45
- > The `0.3.0-alpha` npm publish is cut from this branch — if `npx` still resolves an
46
- > older alpha, install from source until the publish lands.
47
-
48
44
  #### "`open-memex` is not recognized" — PATH setup
49
45
 
50
46
  A global `npm install -g` puts the `open-memex` launcher in npm's global bin folder.
@@ -65,6 +61,15 @@ If your terminal can't find it, that folder isn't on your `PATH`:
65
61
  3. No admin rights / don't want to touch `PATH`? Use the npx form above — npx
66
62
  resolves the package itself and needs no `PATH` changes.
67
63
 
64
+ #### "`EBUSY` / `EPERM` on `better_sqlite3.node`" — Windows reinstall
65
+
66
+ On Windows a loaded DLL is locked: if the open-memex MCP server is running
67
+ (VS Code MCP panel, Cursor, etc.), `npm install -g open-memex` cannot
68
+ replace `better_sqlite3.node` and fails with `EBUSY` / `EPERM`. Stop the MCP
69
+ server first (or quit the editor), then re-run the install. If it still fails,
70
+ delete `node_modules/open-memex` and any `node_modules/.open-memex-*` temp
71
+ folders under your global npm root and install again.
72
+
68
73
  ### Step 2 — One-command setup for your editor
69
74
 
70
75
  Run from your **project root** (so the project scope resolves to this repo):
@@ -74,7 +79,7 @@ Run from your **project root** (so the project scope resolves to this repo):
74
79
  ```sh
75
80
  open-memex init --client vscode
76
81
  # …or without a global install:
77
- npx -y open-memex@alpha init --client vscode
82
+ npx -y open-memex init --client vscode
78
83
  ```
79
84
 
80
85
  Writes `.vscode/mcp.json` and user-level Copilot instructions, then reload the
@@ -136,8 +141,8 @@ above works too.
136
141
  - Existing config files are **merged, never clobbered** — re-running is safe.
137
142
  `--force` overwrites.
138
143
  - With no durable `open-memex` on `PATH` (e.g. one-shot npx), `init` writes an
139
- `npx -y open-memex@alpha mcp` server command into the config so the setup keeps
140
- working. `npm i -g open-memex@alpha` + `open-memex init --force` switches to the
144
+ `npx -y open-memex mcp` server command into the config so the setup keeps
145
+ working. `npm i -g open-memex` + `open-memex init --force` switches to the
141
146
  faster direct command later.
142
147
 
143
148
  ### Step 3 — Verify it works
@@ -148,7 +153,7 @@ open-memex doctor
148
153
 
149
154
  Checks: Node version, config source, scope resolution for the current directory,
150
155
  storage writability, then boots a real MCP server and runs `initialize` +
151
- `tools/list` against it — all five tools must show up.
156
+ `tools/list` against it — all eleven tools must show up.
152
157
 
153
158
  ## Tools the agent gets
154
159
 
@@ -159,6 +164,12 @@ storage writability, then boots a real MCP server and runs `initialize` +
159
164
  | `memory_list` | List memories in a scope, newest first |
160
165
  | `memory_supersede` | Replace a memory with a newer version (keeps a supersede chain) |
161
166
  | `memory_forget` | Delete a memory by id |
167
+ | `memory_status` | Show the sync queue: outbox drafts, repo review states, uncommitted files |
168
+ | `memory_submit` | Move named drafts into the repo memory dir (local branch + commit) |
169
+ | `memory_propose` | Copy personal memories into the project scope as review candidates |
170
+ | `memory_promote` | Advance `proposed → approved → published` (or reject / resubmit) |
171
+ | `memory_resolve` | List conflicted memory files / 3-way-merge one of them |
172
+ | `memory_pr_status` | Map the branch PR's GitHub state onto each memory's review state |
162
173
 
163
174
  ## Capture
164
175
 
@@ -217,10 +228,17 @@ Defaults:
217
228
  "maxProfileItems": 5, // top-N personal items injected on first turn
218
229
  "injectOnFirstTurn": true, // [OPEN-MEMEX] system-prompt block
219
230
  "keywordCaptureEnabled": true,
220
- "logLevel": "info" // info | debug
231
+ "logLevel": "info", // info | debug
232
+ "memoryDir": ".ai/open-memex" // in-repo project-memory dir, relative to repo root
221
233
  }
222
234
  ```
223
235
 
236
+ Project-scope memories are stored as one Markdown file each under
237
+ `<repo>/<memoryDir>/` (default `.ai/open-memex/`) so they can be shared via git;
238
+ personal memories stay in local appdata and never leave the machine. Existing
239
+ project files from appdata are moved into the repo dir automatically on first
240
+ write/sync.
241
+
224
242
  `open-memex config` prints the effective config (defaults + file).
225
243
  Change a setting after install:
226
244
 
@@ -230,7 +248,7 @@ open-memex config set maxProjectMemories 12
230
248
  ```
231
249
 
232
250
  Settable keys: `maxProjectMemories`, `maxProfileItems`, `injectOnFirstTurn`,
233
- `keywordCaptureEnabled`, `logLevel`. Full design: [docs/V2-DESIGN.md](./docs/V2-DESIGN.md).
251
+ `keywordCaptureEnabled`, `logLevel`, `memoryDir`. Full design: [docs/V2-DESIGN.md](./docs/V2-DESIGN.md).
234
252
 
235
253
  ## CLI reference
236
254
 
@@ -258,6 +276,52 @@ open-memex status <id> deprecated
258
276
  open-memex forget <id>
259
277
  ```
260
278
 
279
+ Team review workflow (Phase 2B — two homes, one per stage):
280
+
281
+ Project drafts live in the **appdata outbox** (git-invisible, branch-independent);
282
+ only user-approved drafts move into `<repo>/.ai/open-memex/`, where they follow
283
+ branches and PRs. Nothing moves without you naming it.
284
+
285
+ ```sh
286
+ open-memex sync-status
287
+ # show when the index was last synced (and what triggered it), the outbox
288
+ # (pending sync), the repo review states
289
+ # (draft / proposed / approved / published / rejected),
290
+ # and any uncommitted repo memory files.
291
+
292
+ open-memex submit <id...> [--onto <branch>] [--base <branch>]
293
+ # move your named drafts into .ai/open-memex/ as "proposed":
294
+ # creates mem/sync-<timestamp> (or stays on --onto for a code+memory PR),
295
+ # copies, flips review_state, local git commit. All-or-nothing; conflicts
296
+ # (same id, different content) abort cleanly. Prints the push + gh pr
297
+ # commands; an agent holding your Yes carries through push/PR itself.
298
+ # Default PR base is the current branch; --base redirects to main or your
299
+ # integration branch.
300
+
301
+ open-memex pr-status [--apply]
302
+ # read the branch's GitHub PR and map its state onto each in-repo memory:
303
+ # merged PR → published, PR approval → approved (approved_by = reviewer),
304
+ # changes-requested → suggestion only. Report by default; --apply performs
305
+ # the mapped transitions locally (no push).
306
+
307
+ open-memex propose <id...> --to project [--local-approve]
308
+ # propose one or several personal memories at once (one branch, one PR);
309
+ # each is copied with its own new id. All-or-nothing: a bad id aborts the
310
+ # whole batch, never a half-proposed one.
311
+ # copy a personal memory into the project scope as a review candidate
312
+ # (never moves — the personal original stays). Result lands in the outbox;
313
+ # run sync-status / submit when you're ready to put it in the repo.
314
+ open-memex promote <id> [--reject] [--resubmit] [--note "..."] [--by NAME]
315
+ # advance one step: proposed → approved → published (or reject with a note).
316
+ # Every transition is appended to the memory's review_history (who/when/why).
317
+ # A rejection never deletes the file — your call: accept it (close the PR,
318
+ # delete the branch), revise + --resubmit for another round, or keep it as
319
+ # a [rejected] record.
320
+ open-memex resolve [id-or-path]
321
+ # list conflicted memory files, or field-level 3-way merge one of them.
322
+ # Semantic conflicts are reported, never auto-resolved.
323
+ ```
324
+
261
325
  Maintenance:
262
326
 
263
327
  ```sh
@@ -275,12 +339,12 @@ simple cases — npm swallows unknown `--flag` args, so prefer direct `node`).
275
339
 
276
340
  ## MCP server
277
341
 
278
- The same five memory tools over the Model Context Protocol via a stdio server —
342
+ The same eleven memory tools over the Model Context Protocol via a stdio server —
279
343
  no host-specific plugin needed. Any MCP client can use open-memex.
280
344
 
281
345
  ```sh
282
346
  open-memex mcp # after a global install
283
- npx -y open-memex@alpha mcp # no install needed
347
+ npx -y open-memex mcp # no install needed
284
348
  ```
285
349
 
286
350
  The project scope is resolved from the process working directory, so configure the
@@ -293,12 +357,14 @@ server with cwd set to your project root (`init` handles this for you).
293
357
 
294
358
  ## Roadmap
295
359
 
296
- **`0.3.0-alpha` (this release):** generic MCP server, `open-memex` bin/CLI, one-command
360
+ **`0.3.0` (this release):** generic MCP server, `open-memex` bin/CLI, one-command
297
361
  `init` setup, Chinese keyword capture with personal/project routing, `config` /
298
362
  `capture --dry-run` / `doctor` helpers, Visual Studio support.
299
363
 
300
- **Coming — `0.3.0-beta`:** team sync — shared memory via git (`propose` / `promote` /
301
- `resolve` workflow, in-repo memory dir), 1–2 colleague pilot.
364
+ **In progress — `0.4.0`:** team sync — shared memory via git: appdata draft
365
+ outbox → `sync-status` → `submit` (local branch+commit, push/PR on your Yes)
366
+ → `promote` / `resolve` review workflow, in-repo `.ai/open-memex/` dir, 1–2
367
+ colleague pilot.
302
368
 
303
369
  **Coming — `0.3.0` (stable):** org layer — org memory repo, curator convention,
304
370
  distill-to-AGENTS.md assist.
package/README.zh-CN.md CHANGED
@@ -21,15 +21,15 @@
21
21
  **npm(推荐):**
22
22
 
23
23
  ```sh
24
- npm install -g open-memex@alpha
24
+ npm install -g open-memex
25
25
  ```
26
26
 
27
- 安装的是 `0.3.0-alpha` 预览通道。(`latest` 仍指向旧的 `0.1.0` 稳定版。)
27
+ 安装的是 `0.3.0` 正式版。
28
28
 
29
29
  **免安装——用 npx 直接跑:**
30
30
 
31
31
  ```sh
32
- npx -y open-memex@alpha <命令> # 例如 npx -y open-memex@alpha init --client vscode
32
+ npx -y open-memex <命令> # 例如 npx -y open-memex init --client vscode
33
33
  ```
34
34
 
35
35
  **从源码安装**(最新开发版,`V2-dev-p2` 分支):
@@ -41,9 +41,6 @@ npm install
41
41
  node --experimental-strip-types src/cli.ts <命令>
42
42
  ```
43
43
 
44
- > `0.3.0-alpha` 的 npm 发布从该分支切出——如果 npx 还解析到旧的 alpha 版,
45
- > 请先用源码安装,等发布落地。
46
-
47
44
  #### 提示 "'open-memex' 不是内部命令"?——PATH 设置
48
45
 
49
46
  `npm install -g` 会把 `open-memex` 启动器放到 npm 的全局 bin 目录。
@@ -63,6 +60,14 @@ node --experimental-strip-types src/cli.ts <命令>
63
60
  3. 没有管理员权限 / 不想动 `PATH`?用上面的 npx 形式——npx 自己解析包,
64
61
  不需要改 `PATH`。
65
62
 
63
+ #### Windows 重装报 "`EBUSY` / `EPERM`(`better_sqlite3.node`)"
64
+
65
+ Windows 下被进程加载的 DLL 是锁死的:如果 open-memex MCP server 正在运行
66
+ (VS Code MCP 面板、Cursor 等),`npm install -g open-memex` 替换不了
67
+ `better_sqlite3.node`,就会报 `EBUSY` / `EPERM`。先停掉 MCP server
68
+ (或退出编辑器),再重跑安装。还不行的话,手动删掉全局 npm 目录下的
69
+ `node_modules/open-memex` 和 `node_modules/.open-memex-*` 临时目录,再装。
70
+
66
71
  ### 第二步——给你的编辑器一键配置
67
72
 
68
73
  在**项目根目录**下运行(这样 project scope 会解析到这个仓库):
@@ -72,7 +77,7 @@ node --experimental-strip-types src/cli.ts <命令>
72
77
  ```sh
73
78
  open-memex init --client vscode
74
79
  # ……没装全局包的话:
75
- npx -y open-memex@alpha init --client vscode
80
+ npx -y open-memex init --client vscode
76
81
  ```
77
82
 
78
83
  自动写 `.vscode/mcp.json` 和用户级 Copilot instructions,然后重新加载窗口,
@@ -132,8 +137,8 @@ Visual Studio 也会自动发现 `.vscode/mcp.json` 和 `.cursor/mcp.json`,
132
137
  - 已有配置文件会被**合并,不会被覆盖**——重复运行是安全的。
133
138
  `--force` 强制覆盖。
134
139
  - 如果 `PATH` 上没有可用的 `open-memex`(比如一次性 npx),`init` 会把
135
- `npx -y open-memex@alpha mcp` 写进配置,配置照样能用。
136
- 以后 `npm i -g open-memex@alpha` + `open-memex init --force` 可切换到更快
140
+ `npx -y open-memex mcp` 写进配置,配置照样能用。
141
+ 以后 `npm i -g open-memex` + `open-memex init --force` 可切换到更快
137
142
  的直接调用。
138
143
 
139
144
  ### 第三步——验证
@@ -144,7 +149,7 @@ open-memex doctor
144
149
 
145
150
  检查:Node 版本、配置来源、当前目录的 scope 解析、存储可写性,
146
151
  然后启动一个真实的 MCP server 做 `initialize` + `tools/list`——
147
- 五个 tools 都必须出现。
152
+ 十一个 tools 都必须出现。
148
153
 
149
154
  ## Agent 可用的 tools
150
155
 
@@ -155,6 +160,12 @@ open-memex doctor
155
160
  | `memory_list` | 按 scope 列出记忆,最新的在前 |
156
161
  | `memory_supersede` | 用新版本替换一条记忆(保留替换链) |
157
162
  | `memory_forget` | 按 id 删除一条记忆 |
163
+ | `memory_status` | 显示同步队列:outbox 草稿、repo 评审状态、未提交文件 |
164
+ | `memory_submit` | 把点名的草稿移入 repo memory 目录(建本地分支 + commit) |
165
+ | `memory_propose` | 把 personal 记忆复制到 project scope 作为评审候选 |
166
+ | `memory_promote` | 推进 `proposed → approved → published`(或 reject / resubmit) |
167
+ | `memory_resolve` | 列出冲突的记忆文件 / 对单个做三路合并 |
168
+ | `memory_pr_status` | 把分支 PR 的 GitHub 状态映射到每条记忆的评审状态 |
158
169
 
159
170
  ## 捕获(Capture)
160
171
 
@@ -215,10 +226,16 @@ Markdown 是 source of truth,SQLite 索引是派生的、可重建的
215
226
  "maxProfileItems": 5, // 首轮注入的个人偏好条数
216
227
  "injectOnFirstTurn": true, // [OPEN-MEMEX] system-prompt 块
217
228
  "keywordCaptureEnabled": true,
218
- "logLevel": "info" // info | debug
229
+ "logLevel": "info", // info | debug
230
+ "memoryDir": ".ai/open-memex" // 仓库内项目记忆目录,相对于仓库根目录
219
231
  }
220
232
  ```
221
233
 
234
+ project scope 的记忆以"一个记忆一个 Markdown 文件"的形式存放在
235
+ `<仓库>/<memoryDir>/`(默认 `.ai/open-memex/`)下,可经 git 共享;
236
+ personal 记忆只存本地 appdata,永不离开本机。已有的 appdata 项目文件会在
237
+ 首次写入/同步时自动搬进仓库目录。
238
+
222
239
  `open-memex config` 打印生效配置(默认值 + 文件)。
223
240
  安装后改设置:
224
241
 
@@ -228,7 +245,7 @@ open-memex config set maxProjectMemories 12
228
245
  ```
229
246
 
230
247
  可设置的 key:`maxProjectMemories`、`maxProfileItems`、`injectOnFirstTurn`、
231
- `keywordCaptureEnabled`、`logLevel`。完整设计见
248
+ `keywordCaptureEnabled`、`logLevel`、`memoryDir`。完整设计见
232
249
  [docs/V2-DESIGN.md](./docs/V2-DESIGN.md)。
233
250
 
234
251
  ## CLI 参考
@@ -257,6 +274,45 @@ open-memex status <id> deprecated
257
274
  open-memex forget <id>
258
275
  ```
259
276
 
277
+ 团队评审工作流(Phase 2B —— 两个家,各管一段):
278
+
279
+ project 草稿先住在 **appdata outbox**(git 看不见、跟分支无关);只有你
280
+ 点名批准的草稿,才会被移入 `<repo>/.ai/open-memex/`,之后随分支和 PR 走。
281
+ 没经过你点名,什么都不会动。
282
+
283
+ ```sh
284
+ open-memex sync-status
285
+ # 看索引上次同步的时间和触发方、outbox(待同步)、repo 里的评审状态
286
+ # (draft / proposed / approved / published / rejected),
287
+ # 以及 repo 里还没 commit 的记忆文件。
288
+
289
+ open-memex submit <id...> [--onto <branch>] [--base <branch>]
290
+ # 把你点名的草稿移入 .ai/open-memex/,状态变为 proposed:
291
+ # 建 mem/sync-<timestamp> 分支(或 --onto 当前分支,跟代码走同一个 PR),
292
+ # 复制、改 review_state、本地 git commit。全有或全无;冲突(同 id 不同内容)
293
+ # 干净回滚。打印 push + gh pr 命令;Agent 拿到你的 Yes 后会自己走完 push/PR。
294
+ # PR 默认 base 是当前分支;--base 可改到 main 或集成支。
295
+
296
+ open-memex pr-status [--apply]
297
+ # 读分支的 GitHub PR,把它的状态映射到每条 in-repo 记忆:
298
+ # PR merged → published,PR approved → approved(approved_by = reviewer),
299
+ # changes requested 只给建议。默认只报告;--apply 在本地执行映射的流转(不 push)。
300
+
301
+ open-memex propose <id...> --to project [--local-approve]
302
+ # 一次 propose 一条或多条(一个分支、一个 PR),每条独立新 id。
303
+ # 全有或全无:id 有错整批回滚,不会留半截。
304
+ # 把一条 personal 记忆复制到 project scope 进入评审(复制而非移动,
305
+ # personal 原件保留)。结果落在 outbox;准备好进 repo 时再 sync-status / submit。
306
+ open-memex promote <id> [--reject] [--resubmit] [--note "..."] [--by NAME]
307
+ # 晋升一步:proposed → approved → published(或用 --reject 驳回并附注原因)。
308
+ # 每次流转都追加到记忆的 review_history(谁、何时、为什么)。
309
+ # 驳回不删文件,由你决定:接受(关 PR 删分支)、改完 --resubmit 再审、
310
+ # 或留着当 [rejected] 记录。
311
+ open-memex resolve [id-or-path]
312
+ # 列出冲突中的记忆文件,或对其中一个做字段级 3-way 合并。
313
+ # 语义冲突只报告、不自动解决。
314
+ ```
315
+
260
316
  维护:
261
317
 
262
318
  ```sh
@@ -275,12 +331,12 @@ CLI 跑在 Node 22 下。从源码 checkout 使用时走内置的实验性 TypeS
275
331
 
276
332
  ## MCP server
277
333
 
278
- 同一个五个 memory tools,走 Model Context Protocol 的 stdio server——
334
+ 同一个十一个 memory tools,走 Model Context Protocol 的 stdio server——
279
335
  不需要宿主专属插件,任何 MCP 客户端都能用 open-memex。
280
336
 
281
337
  ```sh
282
338
  open-memex mcp # 全局安装后
283
- npx -y open-memex@alpha mcp # 免安装
339
+ npx -y open-memex mcp # 免安装
284
340
  ```
285
341
 
286
342
  project scope 从进程工作目录解析,所以配置 server 时 cwd 要指向项目根目录
@@ -292,12 +348,13 @@ project scope 从进程工作目录解析,所以配置 server 时 cwd 要指
292
348
 
293
349
  ## 路线图(Roadmap)
294
350
 
295
- **`0.3.0-alpha`(本版):** 通用 MCP server、`open-memex` bin/CLI、
351
+ **`0.3.0`(本版):** 通用 MCP server、`open-memex` bin/CLI、
296
352
  一键 `init` 配置、中文关键词捕获(含 personal/project 路由)、
297
353
  `config` / `capture --dry-run` / `doctor` 助手命令、Visual Studio 支持。
298
354
 
299
- **Coming —— `0.3.0-beta`:** 团队同步——用 git 做共享记忆
300
- (`propose` / `promote` / `resolve` 工作流、仓库内记忆目录),
355
+ **进行中 —— `0.4.0`:** 团队同步——用 git 做共享记忆:appdata 草稿箱 →
356
+ `sync-status` → `submit`(本地分支+commit,push/PR 拿你的 Yes 才做)
357
+ → `promote` / `resolve` 评审工作流、仓库内 `.ai/open-memex/` 目录,
301
358
  找 1–2 个同事做 pilot。
302
359
 
303
360
  **Coming —— `0.3.0`(稳定版):** 组织层——组织记忆仓库、