diff --git a/CHANGELOG.md b/CHANGELOG.md
index 649c32cc..dc4e0fd6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,39 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
The GitHub Release body is extracted from this file: everything between the release's
`## [vX.Y.Z]` heading and the next `## [` heading. Keep that section self-contained.
+## [v0.2.4] - 2026-10-29
+
+Agent adoption and Skill deployment release. All six npm packages and the desktop app
+ship as `0.2.4`; no runtime protocol or data-format changes are included.
+
+### Added
+
+- **Skill as a deployment artifact** — `connectClient`, App initialization, daemon startup, `mebular init`, and the `fleet --daemon` service path now ensure `mebular-memory` and `mebular-tasks` for detected clients. Installs include the `mcp/` fragments and a managed manifest.
+- **Settings · Common “Auto repair”** — one-click, confirmed repair of detected assistant MCP entries and Skills. Failures are reported per client with redacted, expandable details.
+- **All folder-based Agent targets** — OpenChamber/OpenCode, Hermes, Claude Code, Cursor and DeepSeek Harness each get their own detected global Skill directory; Claude Desktop remains a zip/UI upload flow.
+- **Agent routing hints** — all 29 MCP tools now start their descriptions with “何时用”, and the MCP server publishes global `instructions` for routing and memory/task discipline.
+- **SETUP runtime detection** — the agent playbook recognizes `runtime.json` + `/healthz` first, so an App runtime without a PATH CLI is not treated as uninstalled.
+
+### Changed
+
+- User-modified or unmarked Skills are preserved by default; only an explicit “Auto repair” force-overwrites the managed client assets.
+- The locked settings page no longer duplicates “New cloud / Join cloud”; those actions stay in the top bar, while the settings page keeps diagnostics and guidance.
+- Dependency maintenance: electron-builder and `@modelcontextprotocol/server` bumps.
+
+### Fixed
+
+- Managed-Skill cleanup now rejects absolute paths, drive letters, backslashes, empty segments, and `.`/`..` segments, preventing force repair from deleting files outside the Skill directory.
+- `repair-api` Windows CI uses a real `.cmd` test double; `runtime.json` parsing no longer depends on Node being on PATH.
+
+### Verified
+
+- PR #288 required checks: 8/8 passed, including Windows, build/test/lint, desktop smoke, WAN NAT, semantic recall, and real DSH E2E minimum/latest/Node 22.
+- PR #290 required checks: 8/8 passed; target matrix covers OpenChamber/OpenCode, Hermes, Claude Code, Cursor and DSH.
+- Local gates for the target matrix: `verify:mcp:skill`, `check:docs`, `check:i18n`, and the target-matrix Jest suites.
+- Packaging dry-run [run 40829880252](https://github.com/Windsander/Mebular/actions/runs/40829880252) passed: verify + 6 tarballs, macOS/Windows/Linux installers, and real DSH E2E minimum/latest/Node 22.
+- Real Agent E2E: OpenCode 2.0.29 with DeepSeek Flash loaded `mebular-memory`, called `memory_write` and stored a preference; a new session then called `memory_query`/`memory_profile` and recalled it. Temporary HOME only; real user data untouched.
+- App 0.2.4 packaged runtime boots and reports `0.2.4`; auto-install requires an initialized cloud and was validated through the packaged runtime + OpenCode path.
+
## [v0.2.3] - 2026-10-28
Identity-focused maintenance release. All six npm packages and the desktop app
diff --git a/README.md b/README.md
index 6425506c..251e0c42 100644
--- a/README.md
+++ b/README.md
@@ -61,14 +61,14 @@ Memory and tasks stay on your devices; devices sync directly.
- | Desktop app · v0.2.3 |
+ Desktop app · v0.2.4 |
Download & first launch |
Unsigned release macOS Universal · Windows x64 · Linux x64 |
- Download from GitHub Releases Verify with SHA256SUMS.txt. macOS: right-click → Open. Windows: More info → Run anyway. Bundles Electron and its runtime. |
+ Download from GitHub Releases Verify with SHA256SUMS.txt. macOS: right-click → Open. Windows: More info → Run anyway. Bundles Electron and its runtime. |
@@ -135,7 +135,7 @@ mebular print-config --client opencode # MCP config
Use with DSH
Install the plugin from npm into DSH's web profile:
-dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
The App and the DSH Plugin are two equal entries to one local Mebular runtime: the plugin defaults to attach and connects to an existing App/CLI/service without starting or downloading anything. If no runtime exists, the panel explicitly offers a pinned shared-runtime install. The sidebar panel embeds the same Console through ?embed=dsh (loopback only), and the official MCP client reaches the same graph. The plugin is an independent adapter with its code isolated in packages/dsh-plugin; it is published by its own npm job, while its version follows the unified release train. For plugin development, install from packages/dsh-plugin instead.
Listed on awesome-dsh-plugin under memory.
DSH plugin guide → · Integration notes →
@@ -172,6 +172,6 @@ Runnable examples: [`examples/quickstart`](examples/quickstart/index.mjs) writes
-v0.2.3 · early · MIT · © 2026 Sobert Li
+v0.2.4 · early · MIT · © 2026 Sobert Li
diff --git a/README_CN.md b/README_CN.md
index a552f2e7..5da5c8a0 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -61,14 +61,14 @@
- | 桌面 App · v0.2.3 |
+ 桌面 App · v0.2.4 |
下载与首次打开 |
未签名发布 macOS Universal · Windows x64 · Linux x64 |
- 从 GitHub Releases 下载 用 SHA256SUMS.txt 校验。macOS:右键 →「打开」;Windows:「更多信息 → 仍要运行」。自带 Electron 与 runtime。 |
+ 从 GitHub Releases 下载 用 SHA256SUMS.txt 校验。macOS:右键 →「打开」;Windows:「更多信息 → 仍要运行」。自带 Electron 与 runtime。 |
@@ -135,7 +135,7 @@ mebular print-config --client opencode # MCP 配置
与 DSH 一起使用
从 npm 把插件装入 DSH 的 web profile:
-dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
App 与 DSH Plugin 是同一套本机 Mebular runtime 的两个等权入口:插件默认 attach,已有 App/CLI/service 时直接连接,不会启动或下载任何东西。完全没有 runtime 时,面板会先询问,再按需安装固定版本共享 runtime。侧边栏面板通过 ?embed=dsh(仅 loopback)嵌入同一套 Console,官方 MCP client 连接同一张图。插件是独立适配器,代码隔离在 packages/dsh-plugin;它由独立 npm job 发布,版本随统一 release train;开发时仍可从 packages/dsh-plugin 本地安装。
已收录于 awesome-dsh-plugin 的 memory 分类。
DSH 插件指南 → · 集成说明 →
@@ -172,6 +172,6 @@ await mebular.initialize();
-v0.2.3 · early · MIT · © 2026 Sobert Li
+v0.2.4 · early · MIT · © 2026 Sobert Li
diff --git a/RELEASE.md b/RELEASE.md
index 00b0df1e..8cdbd180 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -10,8 +10,8 @@ The release operations for this repository live under `docs/operations/`:
- [Changelog](CHANGELOG.md) — release notes; the `## [vX.Y.Z]` section is the source of the
GitHub Release body.
-The current release line is **v0.2.3**: a single-version umbrella with six npm packages at
-`0.2.3` (`core`, `service`, `skill`, `mcp`, `fleet`, `dsh-plugin`), and unsigned desktop
+The current release line is **v0.2.4**: a single-version umbrella with six npm packages at
+`0.2.4` (`core`, `service`, `skill`, `mcp`, `fleet`, `dsh-plugin`), and unsigned desktop
installers for macOS, Windows and Linux. The DSH plugin is an isolated adapter published by
its own npm job, but it follows the unified release train; no release ships the DSH plugin
alone. `bump_version.sh` updates all six packages, and `verify:release-version` / the publish
diff --git a/apps/desktop/README.md b/apps/desktop/README.md
index d00cce27..4280241c 100644
--- a/apps/desktop/README.md
+++ b/apps/desktop/README.md
@@ -1,6 +1,6 @@
# Mebular 桌面 App(apps/desktop)
-> v0.2.3:**壳 + 守护托管 + 内嵌控制台 + 发布 tarball 运行时 + 三平台 unsigned 安装包**。
+> v0.2.4:**壳 + 守护托管 + 内嵌控制台 + 发布 tarball 运行时 + 三平台 unsigned 安装包**。
> 安装包 runtime 来自与 npm 发布同一批 verify tarball;签名、公证与自动更新留到后续版本。
> 发布操作见 [`docs/operations/DESKTOP_RELEASE.md`](../../docs/operations/DESKTOP_RELEASE.md)。
@@ -32,7 +32,7 @@ npm run dev -- --home ~/.mebular --port 7331 # 透传参数(可选)
npm run smoke # 无 GUI 有界冒烟(CI 用)
```
-## 安装包(v0.2.3,unsigned)
+## 安装包(v0.2.4,unsigned)
安装包里的 Mebular 运行时**不来自仓库源码目录**,而是先用 `npm pack` 产出五个发布
tarball,再由 `prepare-runtime` 一次性 `npm install --omit=dev --ignore-scripts` 到
@@ -75,7 +75,7 @@ node apps/desktop/scripts/smoke-runtime.mjs --runtime apps/desktop/dist/win-unpa
node apps/desktop/scripts/smoke-runtime.mjs --runtime apps/desktop/dist/linux-unpacked/resources
```
-> v0.2.3 产物**未签名、未公证**:macOS Gatekeeper 要求右键 → 打开(或系统设置 → 隐私与
+> v0.2.4 产物**未签名、未公证**:macOS Gatekeeper 要求右键 → 打开(或系统设置 → 隐私与
> 安全性 → 仍要打开),Windows SmartScreen 要求「更多信息 → 仍要运行」。发布前先用
> Release 的 `SHA256SUMS.txt` 校验。签名、公证与自动更新留到后续版本;完整说明见
> [`docs/operations/DESKTOP_RELEASE.md`](../../docs/operations/DESKTOP_RELEASE.md)。
diff --git a/apps/desktop/package-lock.json b/apps/desktop/package-lock.json
index 2c82fcd0..bbe12341 100644
--- a/apps/desktop/package-lock.json
+++ b/apps/desktop/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@mebular/desktop",
- "version": "0.2.3",
+ "version": "0.2.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@mebular/desktop",
- "version": "0.2.3",
+ "version": "0.2.4",
"license": "MIT",
"devDependencies": {
"electron": "42.11.18",
diff --git a/apps/desktop/package.json b/apps/desktop/package.json
index a80f8fcd..7421e862 100644
--- a/apps/desktop/package.json
+++ b/apps/desktop/package.json
@@ -2,7 +2,7 @@
"name": "@mebular/desktop",
"productName": "Mebular",
"desktopName": "mebular",
- "version": "0.2.3",
+ "version": "0.2.4",
"private": true,
"description": "Mebular 桌面应用(Electron 壳 + 内嵌控制台 + 守护托管)",
"license": "MIT",
diff --git a/apps/desktop/src/main/daemon.mjs b/apps/desktop/src/main/daemon.mjs
index 70a659e8..89f1320f 100644
--- a/apps/desktop/src/main/daemon.mjs
+++ b/apps/desktop/src/main/daemon.mjs
@@ -12,7 +12,7 @@ import { homedir } from 'node:os';
import { dirname, join, resolve } from 'node:path';
import { fileURLToPath, pathToFileURL } from 'node:url';
-export const APP_VERSION = '0.2.3';
+export const APP_VERSION = '0.2.4';
export const SERVICE_KIND = 'mebular-serve';
/** App 注册到 /runtime-providers.json 的能力(只写发现信息,不写 token/身份)。 */
export const APP_RUNTIME_PROVIDER_CAPABILITIES = Object.freeze(['serve']);
diff --git a/assets/desktop-steps-cn-light.svg b/assets/desktop-steps-cn-light.svg
index 43eee6e2..c3592d68 100644
--- a/assets/desktop-steps-cn-light.svg
+++ b/assets/desktop-steps-cn-light.svg
@@ -7,5 +7,5 @@
- 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.2.3 · macOS Universal、Windows x64、Linux x64未签名发布;签名与公证留待后续版本。
+ 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.2.4 · macOS Universal、Windows x64、Linux x64未签名发布;签名与公证留待后续版本。
\ No newline at end of file
diff --git a/assets/desktop-steps-cn.svg b/assets/desktop-steps-cn.svg
index bac73105..10692de9 100644
--- a/assets/desktop-steps-cn.svg
+++ b/assets/desktop-steps-cn.svg
@@ -7,5 +7,5 @@
- 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.2.3 · macOS Universal、Windows x64、Linux x64未签名发布;签名与公证留待后续版本。
+ 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.2.4 · macOS Universal、Windows x64、Linux x64未签名发布;签名与公证留待后续版本。
\ No newline at end of file
diff --git a/assets/desktop-steps-en-light.svg b/assets/desktop-steps-en-light.svg
index 40115dd3..011f36e2 100644
--- a/assets/desktop-steps-en-light.svg
+++ b/assets/desktop-steps-en-light.svg
@@ -7,5 +7,5 @@
- DESKTOP APPFrom install to a locked, ready console.1Start deploymentStarts the local serviceand connects yourinstalled assistants.2Create or join a CloudName it on the first device.Paste a one-time tokenon later ones.3Invite the next deviceOpen Invite device in thetop bar and hand thetoken to the next machine.v0.2.3 · macOS Universal, Windows x64, Linux x64Unsigned release; signing and notarization follow.
+ DESKTOP APPFrom install to a locked, ready console.1Start deploymentStarts the local serviceand connects yourinstalled assistants.2Create or join a CloudName it on the first device.Paste a one-time tokenon later ones.3Invite the next deviceOpen Invite device in thetop bar and hand thetoken to the next machine.v0.2.4 · macOS Universal, Windows x64, Linux x64Unsigned release; signing and notarization follow.
\ No newline at end of file
diff --git a/assets/desktop-steps-en.svg b/assets/desktop-steps-en.svg
index 21a486bd..badc3572 100644
--- a/assets/desktop-steps-en.svg
+++ b/assets/desktop-steps-en.svg
@@ -7,5 +7,5 @@
- DESKTOP APPFrom install to a locked, ready console.1Start deploymentStarts the local serviceand connects yourinstalled assistants.2Create or join a CloudName it on the first device.Paste a one-time tokenon later ones.3Invite the next deviceOpen Invite device in thetop bar and hand thetoken to the next machine.v0.2.3 · macOS Universal, Windows x64, Linux x64Unsigned release; signing and notarization follow.
+ DESKTOP APPFrom install to a locked, ready console.1Start deploymentStarts the local serviceand connects yourinstalled assistants.2Create or join a CloudName it on the first device.Paste a one-time tokenon later ones.3Invite the next deviceOpen Invite device in thetop bar and hand thetoken to the next machine.v0.2.4 · macOS Universal, Windows x64, Linux x64Unsigned release; signing and notarization follow.
\ No newline at end of file
diff --git a/assets/dsh-quickstart-cn.svg b/assets/dsh-quickstart-cn.svg
index 98ba2ca1..69395eee 100644
--- a/assets/dsh-quickstart-cn.svg
+++ b/assets/dsh-quickstart-cn.svg
@@ -26,7 +26,7 @@
1
安装插件
dsh plugin --profile web add
- @mebular/dsh-plugin@0.2.3
+ @mebular/dsh-plugin@0.2.4
@@ -61,7 +61,7 @@
1
安装插件
dsh plugin --profile web add
- @mebular/dsh-plugin@0.2.3
+ @mebular/dsh-plugin@0.2.4
diff --git a/assets/dsh-quickstart-en.svg b/assets/dsh-quickstart-en.svg
index 1519b7ba..ecd1be58 100644
--- a/assets/dsh-quickstart-en.svg
+++ b/assets/dsh-quickstart-en.svg
@@ -26,7 +26,7 @@
1
Install plugin
dsh plugin --profile web add
- @mebular/dsh-plugin@0.2.3
+ @mebular/dsh-plugin@0.2.4
@@ -61,7 +61,7 @@
1
Install plugin
dsh plugin --profile web add
- @mebular/dsh-plugin@0.2.3
+ @mebular/dsh-plugin@0.2.4
diff --git a/docs/architecture/RUNTIME-COEXISTENCE.md b/docs/architecture/RUNTIME-COEXISTENCE.md
index 3223ca18..141fb130 100644
--- a/docs/architecture/RUNTIME-COEXISTENCE.md
+++ b/docs/architecture/RUNTIME-COEXISTENCE.md
@@ -123,7 +123,7 @@ PATH、当前 CLI 自身。`runtime/current.json` 可用时作为 `kind: shared,
"id": "sha256(kind+path) 前 12 hex",
"kind": "app | cli | shared",
"path": "/absolute/path/to/runtime-entry",
- "version": "0.2.3",
+ "version": "0.2.4",
"capabilities": ["serve"],
"registeredAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
diff --git a/docs/architecture/SURFACES.md b/docs/architecture/SURFACES.md
index 6fba4b2f..f75f29c6 100644
--- a/docs/architecture/SURFACES.md
+++ b/docs/architecture/SURFACES.md
@@ -107,7 +107,7 @@ DSH 客户端把 `connected` / `starting` / `unavailable` / `offline` / `checkin
{
"status": "ok",
"name": "mebular",
- "version": "0.2.3",
+ "version": "0.2.4",
"auth": "none",
"tls": false,
"instance": ""
@@ -120,7 +120,7 @@ DSH 客户端把 `connected` / `starting` / `unavailable` / `offline` / `checkin
{
"ok": true,
"name": "mebular",
- "version": "0.2.3",
+ "version": "0.2.4",
"embedProtocol": 1,
"consoleUrl": "http://127.0.0.1:7331/console",
"embedUrl": "http://127.0.0.1:7331/console/?embed=dsh",
@@ -139,11 +139,11 @@ DSH 客户端把 `connected` / `starting` / `unavailable` / `offline` / `checkin
"mode": "attach",
"managed": false,
"panel": true,
- "version": "0.2.3",
+ "version": "0.2.4",
"state": "up",
"runtimeMode": "reused",
"profile": { "id": "default", "name": "我的忆云" },
- "provider": { "kind": "app", "source": "registry", "version": "0.2.3" },
+ "provider": { "kind": "app", "source": "registry", "version": "0.2.4" },
"service": { "registered": false, "running": false, "foreign": false },
"downloadRequired": false,
"install": { "state": "idle", "allowed": true },
diff --git a/docs/dsh/awesome-dsh-plugin-entry.yml b/docs/dsh/awesome-dsh-plugin-entry.yml
index c70a03b5..9742a179 100644
--- a/docs/dsh/awesome-dsh-plugin-entry.yml
+++ b/docs/dsh/awesome-dsh-plugin-entry.yml
@@ -6,7 +6,7 @@
# 说明: 这是 monorepo 子包条目,url 指向 packages/dsh-plugin;name 使用
# owner/repo#subname。以下字段与目标仓库当前条目保持一致。
#
-# 安装: dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+# 安装: dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
# 兼容: DSH >=0.2.1-rc.2 <0.3.0, Node.js >=22.19
url: https://github.com/Windsander/Mebular/tree/main/packages/dsh-plugin
diff --git a/docs/getting-started/QUICKSTART.md b/docs/getting-started/QUICKSTART.md
index ce58555d..73125325 100644
--- a/docs/getting-started/QUICKSTART.md
+++ b/docs/getting-started/QUICKSTART.md
@@ -10,12 +10,12 @@ source paths need Node.js >= 20; check with `node -v`.
## 1. Desktop app (recommended)
-1. Download the app from [GitHub Releases](https://github.com/Windsander/Mebular/releases/tag/v0.2.3) and open it.
+1. Download the app from [GitHub Releases](https://github.com/Windsander/Mebular/releases/tag/v0.2.4) and open it.
2. Click **Start deployment**. It starts the local service on this machine, connects the AI assistants already
installed here, and opens the **locked main console**.
3. Choose **Create new Cloud** on your first device, or **Join existing Cloud** on a later one.
-> The v0.2.3 installers are unsigned. Verify `SHA256SUMS.txt` first, then use right-click → **Open**
+> The v0.2.4 installers are unsigned. Verify `SHA256SUMS.txt` first, then use right-click → **Open**
> on macOS or **More info → Run anyway** on Windows. The package bundles Electron and its runtime;
> no local Node.js is needed. Details: [desktop release](../operations/DESKTOP_RELEASE.md).
diff --git a/docs/getting-started/QUICKSTART_CN.md b/docs/getting-started/QUICKSTART_CN.md
index 31891d91..dd22a55f 100644
--- a/docs/getting-started/QUICKSTART_CN.md
+++ b/docs/getting-started/QUICKSTART_CN.md
@@ -10,11 +10,11 @@ Mebular 是给 AI 助手用的本地优先记忆层:一台机器跑一个节
## 1. 桌面 App(推荐)
-1. 从 [GitHub Releases](https://github.com/Windsander/Mebular/releases/tag/v0.2.3) 下载 App 并打开。
+1. 从 [GitHub Releases](https://github.com/Windsander/Mebular/releases/tag/v0.2.4) 下载 App 并打开。
2. 点「开始部署」。它会启动本机服务、自动接入本机已装的 AI 助手,然后进入**锁定主控制台**。
3. 第一台设备点「新建忆云」,后续设备点「加入忆云」。
-> v0.2.3 安装包未签名。请先用 `SHA256SUMS.txt` 校验,再在 macOS 上右键 →「打开」,
+> v0.2.4 安装包未签名。请先用 `SHA256SUMS.txt` 校验,再在 macOS 上右键 →「打开」,
> 或在 Windows 上选「更多信息 → 仍要运行」。安装包自带 Electron 与 runtime,不需要本机
> Node.js。详见[桌面安装包发布](../operations/DESKTOP_RELEASE.md)。
diff --git a/docs/integrations/DSH.md b/docs/integrations/DSH.md
index 1cf35199..fe929b1d 100644
--- a/docs/integrations/DSH.md
+++ b/docs/integrations/DSH.md
@@ -29,7 +29,7 @@ resolve`/`supervise`) and daemon HTTP endpoints.
Install from npm into the DSH web profile:
```bash
-dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
```
For development:
@@ -149,9 +149,9 @@ iframe share this state.
"runtimeMode": "reused",
"managed": false,
"panel": true,
- "version": "0.2.3",
+ "version": "0.2.4",
"profile": { "id": "default", "name": "My Cloud" },
- "provider": { "kind": "app", "source": "registry", "version": "0.2.3" },
+ "provider": { "kind": "app", "source": "registry", "version": "0.2.4" },
"service": { "registered": false, "running": false, "foreign": false },
"downloadRequired": false,
"install": { "state": "idle", "allowed": true },
@@ -260,13 +260,13 @@ single daemon, service, update locks and upgrade rollback are covered by CI and
## Release and version
-- Version: `0.2.3`, on the unified Mebular v0.2.3 release train (all six npm
+- Version: `0.2.4`, on the unified Mebular v0.2.4 release train (all six npm
packages share the same version).
-- npm: `@mebular/dsh-plugin@0.2.3`.
+- npm: `@mebular/dsh-plugin@0.2.4`.
- The Plugin is an isolated adapter in `packages/dsh-plugin`, published by its
own npm job. It reads the pinned runtime version from its own `package.json`,
so a release bump needs no Plugin source edit.
-- Publish `@mebular/core@0.2.3` before `@mebular/dsh-plugin@0.2.3`; see
+- Publish `@mebular/core@0.2.4` before `@mebular/dsh-plugin@0.2.4`; see
[Release SOP](../operations/RELEASE.md).
- Listed in the `memory` category of
[awesome-dsh-plugin](https://awesome-dsh-plugin.com/p/Windsander/Mebular--packages-dsh-plugin/).
diff --git a/docs/integrations/DSH_CN.md b/docs/integrations/DSH_CN.md
index 64679bfc..df124f7b 100644
--- a/docs/integrations/DSH_CN.md
+++ b/docs/integrations/DSH_CN.md
@@ -26,7 +26,7 @@ supervisor 的 `runtime resolve`/`supervise` 和 daemon HTTP 端点工作。
从 npm 安装到 DSH 的 Web profile:
```bash
-dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
```
开发时从工作树安装:
@@ -134,9 +134,9 @@ daemon child。service/外部 daemon 不会被插件停止。
"runtimeMode": "reused",
"managed": false,
"panel": true,
- "version": "0.2.3",
+ "version": "0.2.4",
"profile": { "id": "default", "name": "我的忆云" },
- "provider": { "kind": "app", "source": "registry", "version": "0.2.3" },
+ "provider": { "kind": "app", "source": "registry", "version": "0.2.4" },
"service": { "registered": false, "running": false, "foreign": false },
"downloadRequired": false,
"install": { "state": "idle", "allowed": true },
@@ -232,11 +232,11 @@ npm run verify:runtime:coexistence
## 发布与版本
-- 版本:`0.2.3`,随统一 Mebular v0.2.3 release train(六个 npm 包同版本)
-- npm:`@mebular/dsh-plugin@0.2.3`
+- 版本:`0.2.4`,随统一 Mebular v0.2.4 release train(六个 npm 包同版本)
+- npm:`@mebular/dsh-plugin@0.2.4`
- 插件是独立适配器:代码隔离在 `packages/dsh-plugin`,由独立 npm job 发布;插件运行时从
自己的 `package.json` 读取 pinned runtime 版本,发布 bump 不需要改插件源码。
-- 发布先 `@mebular/core@0.2.3`,再 `@mebular/dsh-plugin@0.2.3`;详见
+- 发布先 `@mebular/core@0.2.4`,再 `@mebular/dsh-plugin@0.2.4`;详见
[发布 SOP](../operations/RELEASE.md)。
- 插件已收录于
[awesome-dsh-plugin](https://awesome-dsh-plugin.com/zh/p/Windsander/Mebular--packages-dsh-plugin/)
diff --git a/docs/operations/AGENT_ADOPTION_E2E.md b/docs/operations/AGENT_ADOPTION_E2E.md
new file mode 100644
index 00000000..4e41de72
--- /dev/null
+++ b/docs/operations/AGENT_ADOPTION_E2E.md
@@ -0,0 +1,72 @@
+# Agent Adoption E2E Gate
+
+> 发布前门禁:验证 Agent **真的发现并使用了 Mebular**,而不是只验证 Skill 文件存在或 MCP 接口可调用。
+> 本 gate 是发布前的**真实客户端 smoke**,不放进普通单元 CI;CI 继续负责目标目录矩阵与 MCP 契约测试。
+
+## 1. 覆盖矩阵
+
+| Agent | 自动安装目录 | 完整链路 gate |
+|---|---|---|
+| OpenChamber / OpenCode | `~/.config/opencode/skills` | **必跑**:实际 Agent 会话 |
+| DeepSeek Harness (DSH) | `~/.agents/skills` | **必跑**:现有真实 DSH E2E + Skill 文件/目录检查 |
+| Hermes | `~/.hermes/skills` | 有本机 CLI 时跑;否则记录 skipped |
+| Claude Code | `~/.claude/skills` | 有本机 CLI 时跑;否则记录 skipped |
+| Cursor | `~/.cursor/skills` | GUI smoke / 人工记录 |
+| Claude Desktop | 无文件夹式目录(zip/UI) | 人工上传 smoke;不声称自动安装 |
+| Generic | 无 | 只验证手动片段 |
+
+OpenChamber 与 OpenCode 共用 OpenCode 的全局 Skill 目录;两者只算一个真实使用目标。
+
+## 2. 必跑 gate:OpenChamber / OpenCode
+
+在一台**已有 App runtime、未安装 Skill** 的干净机器(或临时 HOME)上:
+
+1. 安装/启动包含本次变更的 0.2.4 App。
+2. 确认 App/守护运行;打开 OpenChamber/OpenCode 的新会话。
+3. 检查 Skill 目录存在:
+ ```bash
+ test -f ~/.config/opencode/skills/mebular-memory/SKILL.md
+ test -f ~/.config/opencode/skills/mebular-tasks/SKILL.md
+ ```
+4. 在新会话输入:
+ > 请用 Mebular 记住:我的界面偏好是深色模式。只记录这一条稳定偏好。
+5. 证据必须是**工具调用**:`memory_write` 成功,且写入内容是 preference(不是普通回答)。
+6. 再开一个新会话输入:
+ > 我喜欢什么界面主题?请从跨会话记忆回答。
+7. 证据必须是 `memory_query` 调用并返回刚才的偏好;不是模型猜测。
+8. 修改 `~/.config/opencode/skills/mebular-memory/SKILL.md` 的可见标记,重启后确认默认保留。
+9. 设置 → 常用 → 自动修复,确认后:
+ - Skill 恢复标准版本;
+ - MCP 仍可调用;
+ - 记忆数量与身份不变;
+ - 新会话仍能召回第 4 步写入的偏好。
+
+通过标准:第 5、7、9 步的工具调用/数据结果都成立;只看到文件存在或自然语言回答不算通过。
+
+## 3. DSH gate
+
+在现有真实 DSH E2E 基础上:
+
+1. 确认 `~/.agents/skills/mebular-memory/SKILL.md` 与 `mebular-tasks/SKILL.md` 存在。
+2. 用 DSH 的真实 Agent 会话执行上面的写入/召回问答。
+3. 断言实际 `memory_write` / `memory_query` 调用,或 DSH probe 记录的 MCP 工具调用。
+4. 至少跑 `npm run verify:dsh:e2e:min` 和 `verify:dsh:e2e:latest`。
+
+## 4. 其他客户端
+
+- Hermes:`hermes --version` 可用时,临时 HOME 起 Hermes,重复第 4–7 步。
+- Claude Code:`claude --version` 可用时,临时 HOME/项目重复第 4–7 步。
+- Cursor:新窗口打开临时项目,确认 `~/.cursor/skills` 被识别并实际调用记忆工具;GUI 证据用截图/日志记录。
+- Claude Desktop:按 zip/UI 上传流程验证;不要求文件夹自动安装。
+- Generic:只验证 `print-config` 片段和手动粘贴,不算自动采用。
+
+## 5. 证据与记录
+
+发布记录至少包含:
+
+- 日期、App 版本、客户端版本、OS
+- 每个 gate 的实际工具调用/数据证据(日志或截图路径)
+- 未跑客户端及原因(例如本机未安装)
+- 失败项;失败不得用“模型没按预期回答”掩盖工具调用缺失
+
+> 真实 LLM 输出可能波动;本 gate 以工具调用和存储结果为准,不以自然语言措辞为准。
diff --git a/docs/operations/DESKTOP_RELEASE.md b/docs/operations/DESKTOP_RELEASE.md
index 057bb572..a77b8007 100644
--- a/docs/operations/DESKTOP_RELEASE.md
+++ b/docs/operations/DESKTOP_RELEASE.md
@@ -1,16 +1,16 @@
# 桌面安装包发布
-面向 Mebular v0.2.3 的桌面安装包构建、验收与后续签名计划。发布流程总览见
+面向 Mebular v0.2.4 的桌面安装包构建、验收与后续签名计划。发布流程总览见
[`RELEASE.md`](RELEASE.md)。
-## 0. v0.2.3 范围
+## 0. v0.2.4 范围
| 平台 | 目标 | 架构 | 产物 |
| --- | --- | --- | --- |
-| macOS | DMG | Universal(arm64 + x64) | `Mebular-0.2.3-universal.dmg` |
-| Windows | NSIS | x64 | `Mebular-Setup-0.2.3.exe` |
-| Linux | AppImage | x64 | `Mebular-0.2.3-x86_64.AppImage` |
-| Linux | deb | x64 | `Mebular-0.2.3-amd64.deb` |
+| macOS | DMG | Universal(arm64 + x64) | `Mebular-0.2.4-universal.dmg` |
+| Windows | NSIS | x64 | `Mebular-Setup-0.2.4.exe` |
+| Linux | AppImage | x64 | `Mebular-0.2.4-x86_64.AppImage` |
+| Linux | deb | x64 | `Mebular-0.2.4-amd64.deb` |
- 全部为 **unsigned** 发布;不做代码签名、公证或自动更新。
- 每个安装包都自带 Electron 和一份完整的 Mebular runtime,**不需要本机 Node.js**,也不依赖
@@ -157,26 +157,26 @@ electron-builder 的 `artifactName` 固定为:
| 平台 | 配置 | 最终文件名 |
| --- | --- | --- |
-| macOS | `Mebular-${version}-${arch}.${ext}` + `--universal` | `Mebular-0.2.3-universal.dmg` |
-| Windows | `Mebular-Setup-${version}.${ext}` | `Mebular-Setup-0.2.3.exe` |
-| Linux AppImage | `Mebular-${version}-${arch}.${ext}` + x64 | `Mebular-0.2.3-x86_64.AppImage` |
-| Linux deb | 同上;deb 的 arch 宏为 `amd64` | `Mebular-0.2.3-amd64.deb` |
+| macOS | `Mebular-${version}-${arch}.${ext}` + `--universal` | `Mebular-0.2.4-universal.dmg` |
+| Windows | `Mebular-Setup-${version}.${ext}` | `Mebular-Setup-0.2.4.exe` |
+| Linux AppImage | `Mebular-${version}-${arch}.${ext}` + x64 | `Mebular-0.2.4-x86_64.AppImage` |
+| Linux deb | 同上;deb 的 arch 宏为 `amd64` | `Mebular-0.2.4-amd64.deb` |
`SHA256SUMS.txt` 由 release job 在 Linux 上生成,只包含安装包,按文件名 `LC_ALL=C sort`
排序,例如:
```text
- Mebular-0.2.3-amd64.deb
- Mebular-0.2.3-universal.dmg
- Mebular-0.2.3-x86_64.AppImage
- Mebular-Setup-0.2.3.exe
+ Mebular-0.2.4-amd64.deb
+ Mebular-0.2.4-universal.dmg
+ Mebular-0.2.4-x86_64.AppImage
+ Mebular-Setup-0.2.4.exe
```
dry-run 不会生成这个文件;它只在正式 `release` job 创建 GitHub Release 时产生。
## 4. unsigned 安装体验
-v0.2.3 没有 Apple Developer ID、公证或 Windows 代码签名证书。用户会看到系统安全提示,
+v0.2.4 没有 Apple Developer ID、公证或 Windows 代码签名证书。用户会看到系统安全提示,
这是预期行为,不是安装包损坏。
### 4.1 先校验
@@ -202,17 +202,17 @@ Windows 可用 PowerShell 的 `Get-FileHash -Algorithm SHA256` 对照 `SHA256SUM
### 4.3 Windows SmartScreen
-1. 运行 `Mebular-Setup-0.2.3.exe`。
+1. 运行 `Mebular-Setup-0.2.4.exe`。
2. 出现「Windows 已保护你的电脑」时点「更多信息」,再点「仍要运行」。
### 4.4 Linux
```bash
-chmod +x Mebular-0.2.3-x86_64.AppImage
-./Mebular-0.2.3-x86_64.AppImage
+chmod +x Mebular-0.2.4-x86_64.AppImage
+./Mebular-0.2.4-x86_64.AppImage
# Debian / Ubuntu
-sudo apt install ./Mebular-0.2.3-amd64.deb
+sudo apt install ./Mebular-0.2.4-amd64.deb
```
AppImage 需要 FUSE;没有 FUSE 时可使用 `--appimage-extract-and-run`。deb 安装后从应用菜单
@@ -259,7 +259,7 @@ node apps/desktop/scripts/smoke-runtime.mjs --runtime apps/desktop/dist/linux-un
## 6. 签名、公证与自动更新(后续)
-v0.2.3 明确不签名。后续版本的建议顺序:
+v0.2.4 明确不签名。后续版本的建议顺序:
1. **macOS**:申请 Developer ID Application 证书;在 CI 注入 `CSC_LINK` /
`CSC_KEY_PASSWORD`,移除 `electron-builder.yml` 的 `identity: null`;用
diff --git a/docs/operations/RELEASE.md b/docs/operations/RELEASE.md
index e3ee19fc..49220949 100644
--- a/docs/operations/RELEASE.md
+++ b/docs/operations/RELEASE.md
@@ -3,9 +3,9 @@
面向 `@mebular/*` npm 包与三平台桌面安装包的发布操作手册。核心约束:**分支名即版本号
(SSOT)**、**先构建安装包再发 npm**、**幂等发布**、**按 ref 串行**。
-当前发布线 v0.2.3:
+当前发布线 v0.2.4:
-- 6 个 npm 包统一为 `0.2.3`(单版本 umbrella:`core` / `service` / `skill` / `mcp` / `fleet` / `dsh-plugin`);
+- 6 个 npm 包统一为 `0.2.4`(单版本 umbrella:`core` / `service` / `skill` / `mcp` / `fleet` / `dsh-plugin`);
- macOS Universal DMG、Windows NSIS x64、Linux AppImage + deb x64(unsigned);
- `SHA256SUMS.txt`(仅 GitHub Release 资产生成)。
@@ -35,7 +35,7 @@
`@mebular/mcp` 单独安装只有 `mebular`,**不能**当作双 bin 安装入口。
- **桌面版本**:`apps/desktop/package.json`、`apps/desktop/package-lock.json` 与
`apps/desktop/src/main/daemon.mjs` 的 `APP_VERSION` 必须等于发布版本。
-- **触发方式**:push 到 `release/v*` 分支(例如 `release/v0.2.3`),**不使用 tag 触发**。
+- **触发方式**:push 到 `release/v*` 分支(例如 `release/v0.2.4`),**不使用 tag 触发**。
手动 `workflow_dispatch` 是 packaging dry-run。
- **发布分支即真相**:`release/vX.Y.Z` 的 `X.Y.Z` 必须等于 6 个 `package.json` 的版本、
根 `package-lock.json` 的 workspace 条目、桌面三处版本、MCP 版本源,以及
@@ -80,24 +80,24 @@
- **npm unpublish(72 小时窗口)**:仅能删除**发布后 72 小时内**、且**无人依赖**的版本;
超时或被依赖一律 400。六个包各执行一次(同一版本):
```bash
- npm unpublish @mebular/core@0.2.3 # 重复 core → service → skill → mcp → fleet → dsh-plugin
+ npm unpublish @mebular/core@0.2.4 # 重复 core → service → skill → mcp → fleet → dsh-plugin
```
同一版本被删除后**不可再以相同版本号重新发布**,后续必须升号。
- **npm deprecate(常规手段)**:标记问题版本,安装时会打印警告但不阻断:
```bash
- npm deprecate @mebular/mcp@0.2.3 "broken: upgrade to a newer version"
+ npm deprecate @mebular/mcp@0.2.4 "broken: upgrade to a newer version"
```
建议六个包用同一条消息一并废弃,再发布更高修复版本。
- **回退 GitHub Release**:
```bash
- gh release delete v0.2.3 --yes # 仅删 Release
- git push origin :refs/tags/v0.2.3 # 删除 tag(仅在确认无人依赖时)
+ gh release delete v0.2.4 --yes # 仅删 Release
+ git push origin :refs/tags/v0.2.4 # 删除 tag(仅在确认无人依赖时)
```
或网页端 Releases → 该版本 → Delete release;若只想隐藏,标为 **pre-release**。
注意:删除 Release 不会撤销 npm 发布,npm 仍需按上面的步骤处理。
- **只换安装包**:npm 不受影响。重新构建后对同一 tag 重传资产即可:
```bash
- gh release upload v0.2.3 release-assets/* --clobber
+ gh release upload v0.2.4 release-assets/* --clobber
```
下载页会立即使用新文件;`SHA256SUMS.txt` 必须与安装包一起重传。
@@ -186,21 +186,21 @@ origin/main
```bash
git fetch origin
-git switch -c release-prep/v0.2.3 origin/main # 先 prep,dry-run 后再建 release 分支
-bash scripts/bump_version.sh v0.2.3 # 同步 6 包 + 版本源 + CHANGELOG 章节
+git switch -c release-prep/v0.2.4 origin/main # 先 prep,dry-run 后再建 release 分支
+bash scripts/bump_version.sh v0.2.4 # 同步 6 包 + 版本源 + CHANGELOG 章节
npm run verify:release-version # 只读校验;也可带 --version/--tag
```
`bump_version.sh` 会:
-1. 将 6 个 `package.json`(core / fleet / mcp / service / skill / dsh-plugin)改为 `0.2.3`;
+1. 将 6 个 `package.json`(core / fleet / mcp / service / skill / dsh-plugin)改为 `0.2.4`;
2. 同步根 `package-lock.json` 的根版本与 6 个 workspace 条目;
3. 同步桌面 `package.json` / `package-lock.json` / `APP_VERSION`;
-4. 同步任何「已是版本号区间」的内部 `@mebular/*` 依赖为 `^0.2.3`;
+4. 同步任何「已是版本号区间」的内部 `@mebular/*` 依赖为 `^0.2.4`;
5. 改写 `packages/mcp/src/version.mjs` 的 `APP_VERSION`(MCP 唯一版本源);
-6. 在 `CHANGELOG.md` 顶部插入 `## [v0.2.3] - ` 章节(已存在则跳过,幂等)。
+6. 在 `CHANGELOG.md` 顶部插入 `## [v0.2.4] - ` 章节(已存在则跳过,幂等)。
-> 若版本号与 CHANGELOG 章节已存在(例如当前 `release-prep/v0.2.3`),**不需要**再跑
+> 若版本号与 CHANGELOG 章节已存在(例如当前 `release-prep/v0.2.4`),**不需要**再跑
> `bump_version.sh`;只有从新版本开始时才执行上面的 bump。
### 3.2 本地预检(推荐)
@@ -226,7 +226,7 @@ npm run check:deps
发布后可见性 gate 也可以独立预演(对已发布版本只读):
```bash
-npm run verify:release-visibility -- --version 0.2.3 --timeout-seconds 60 --interval-seconds 5
+npm run verify:release-visibility -- --version 0.2.4 --timeout-seconds 60 --interval-seconds 5
```
桌面链路(与 CI 同路径):
@@ -252,6 +252,20 @@ node apps/desktop/scripts/smoke-runtime.mjs --runtime "apps/desktop/dist/ 本机只能可靠构建当前平台。macOS Universal 必须在 macOS 上构建;Windows NSIS 在
> Windows 上构建;Linux AppImage/deb 在 Linux 上构建。三平台由 CI matrix 负责。
+### 3.3 Agent adoption E2E gate
+
+发布前必须在真实客户端上验证 Agent **发现并使用** Mebular,而不仅是 Skill 文件存在。
+完整步骤、客户端矩阵和证据要求见 [`AGENT_ADOPTION_E2E.md`](AGENT_ADOPTION_E2E.md)。
+
+最低门禁:
+
+- [ ] OpenChamber/OpenCode:自动安装 Skill → 新会话实际调用 `memory_write` → 新会话
+ `memory_query` 召回 → 自动修复后仍可召回。
+- [ ] DSH:真实 DSH E2E 通过,并确认 `~/.agents/skills` 下的两个 Skill 可被加载/调用。
+- [ ] Hermes / Claude Code / Cursor / Claude Desktop:按本机可用客户端记录 smoke;
+ Claude Desktop 走 zip/UI,不声称文件夹自动安装。
+- [ ] 未跑客户端明确记录为 skipped,不能用“模型回答看起来正确”替代工具调用证据。
+
## 4. Packaging dry-run
`workflow_dispatch` 跑 `verify` + `dsh-e2e` + 三平台 desktop matrix,上传 artifacts;**不**运行
@@ -266,7 +280,7 @@ DSH 破坏”。
```bash
# 在 release-prep 分支上触发(workflow 已在 main 注册)
-gh workflow run publish.yml --ref release-prep/v0.2.3
+gh workflow run publish.yml --ref release-prep/v0.2.4
# 观察
gh run list --workflow=publish.yml --limit 5
@@ -297,9 +311,9 @@ sha256sum release-assets/* # Linux
dry-run 通过后,从 prep 分支创建正式发布分支并 push:
```bash
-git switch release-prep/v0.2.3
-git switch -c release/v0.2.3
-git push -u origin release/v0.2.3
+git switch release-prep/v0.2.4
+git switch -c release/v0.2.4
+git push -u origin release/v0.2.4
```
push 后自动执行第 2 节的完整流水线。任一 job 失败即停;安装包未全绿时不会发 npm;
@@ -308,7 +322,7 @@ push 后自动执行第 2 节的完整流水线。任一 job 失败即停;安
### 5.2 观察
```bash
-gh run list --workflow=publish.yml --branch release/v0.2.3 --limit 5
+gh run list --workflow=publish.yml --branch release/v0.2.4 --limit 5
gh run watch
gh run view --log-failed # 失败时
@@ -321,19 +335,19 @@ gh run view --json jobs --jq '.jobs[] | select(.name | contains("visibi
```bash
# npm 六包:version 与 latest 都必须指向本次版本
for p in core service skill mcp fleet dsh-plugin; do
- npm view "@mebular/$p@0.2.3" version
+ npm view "@mebular/$p@0.2.4" version
npm view "@mebular/$p" dist-tags.latest
done
# 或复用流水线同一个 gate(只读轮询;已可见时立即通过)
-npm run verify:release-visibility -- --version 0.2.3 --dsh-version 0.2.3
+npm run verify:release-visibility -- --version 0.2.4 --dsh-version 0.2.4
# GitHub Release
-gh release view v0.2.3
-gh release view v0.2.3 --json assets --jq '.assets[] | "\(.name) \(.size) bytes"'
+gh release view v0.2.4
+gh release view v0.2.4 --json assets --jq '.assets[] | "\(.name) \(.size) bytes"'
# 根包双 bin
-npm install -g @mebular/core@0.2.3
+npm install -g @mebular/core@0.2.4
command -v mebular && command -v fleet
mebular tools >/dev/null && fleet --version
```
@@ -346,13 +360,13 @@ mebular tools >/dev/null && fleet --version
- [ ] 下载资产后按第 6 节校验 checksum;`SHA256SUMS.txt` 恰好 4 行;
- [ ] `release/vX.Y.Z` 已通过 PR 回合并 `main`,随后删除 release / prep 分支。
-> 不要用 `npm install -g @mebular/mcp@0.2.3` 冒充双 bin 安装:`@mebular/mcp` 只提供
+> 不要用 `npm install -g @mebular/mcp@0.2.4` 冒充双 bin 安装:`@mebular/mcp` 只提供
> `mebular`,`fleet` 必须来自根包(或单独安装 `@mebular/fleet`)。
插件独立验证(先让 App / 守护运行):
```bash
-dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
dsh --profile web --dump-config | grep -A3 mebular # host row;transport 由官方 MCP client 挂载
# DSH 会话中确认 mcp__mebular__* 可调用;侧边栏面板加载 /console/?embed=dsh
```
@@ -374,7 +388,7 @@ MEBULAR_HOME="$(mktemp -d)" mebular serve --port 7399
从 Release 下载并校验:
```bash
-gh release download v0.2.3 -D release-assets
+gh release download v0.2.4 -D release-assets
cd release-assets
# Linux
@@ -398,7 +412,7 @@ Get-Content SHA256SUMS.txt | ForEach-Object {
- macOS 打开 DMG 后能启动;Windows NSIS 能安装并启动;Linux AppImage 可执行,deb 可安装;
- 首次启动能进入锁定控制台,`/healthz` 正常;
- 全部为 **unsigned** 发布:macOS Gatekeeper 与 Windows SmartScreen 会拦截,按 Release
- notes 的绕过步骤操作。签名、公证与自动更新不在 v0.2.3 范围。
+ notes 的绕过步骤操作。签名、公证与自动更新不在 v0.2.4 范围。
安装包内的 runtime 结构、本地打包与签名后续见
[`DESKTOP_RELEASE.md`](DESKTOP_RELEASE.md)。
@@ -485,7 +499,7 @@ node scripts/prune-merged-branches.mjs --apply --yes # 确认后删除
发布分支本身在回合并 main 后,再用同一脚本或显式命令删除:
```bash
-git push origin --delete release/v0.2.3 release-prep/v0.2.3
+git push origin --delete release/v0.2.4 release-prep/v0.2.4
```
> 不要未经确认批量删除;不要删除 `site-*`(Pages 部署源)或仍有 open PR 的分支。
diff --git a/docs/operations/SHARED_RUNTIME.md b/docs/operations/SHARED_RUNTIME.md
index 814d1850..88ae4278 100644
--- a/docs/operations/SHARED_RUNTIME.md
+++ b/docs/operations/SHARED_RUNTIME.md
@@ -63,10 +63,10 @@ Plugin 的可选配置(`cordis.patch.yml`):
```bash
# 固定版本(CLI/App 默认取 core APP_VERSION;Plugin 面板取插件 package version)
-mebular runtime install --version 0.2.3 --json
+mebular runtime install --version 0.2.4 --json
# 同版本损坏/需要覆盖时
-mebular runtime reinstall --version 0.2.3 --json
+mebular runtime reinstall --version 0.2.4 --json
```
Plugin 面板触发的安装使用**插件自身 `package.json` 的 `version`**(运行时读取,发布 bump 无需改
@@ -135,9 +135,9 @@ manifest 位于用户 home 的 `.mebular/services/mebular-serve.json`,记录
```bash
mebular runtime current set \
- --version 0.2.3 \
- --runtime-path ~/.mebular/runtime/0.2.3 \
- --cli ~/.mebular/runtime/0.2.3/node_modules/@mebular/core/packages/mcp/bin/mebular.mjs \
+ --version 0.2.4 \
+ --runtime-path ~/.mebular/runtime/0.2.4 \
+ --cli ~/.mebular/runtime/0.2.4/node_modules/@mebular/core/packages/mcp/bin/mebular.mjs \
--provider shared --owner shared --json
```
diff --git a/package-lock.json b/package-lock.json
index 83a894cd..aeb1dadf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@mebular/core",
- "version": "0.2.3",
+ "version": "0.2.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@mebular/core",
- "version": "0.2.3",
+ "version": "0.2.4",
"license": "MIT",
"workspaces": [
"packages/*"
@@ -9090,7 +9090,7 @@
},
"packages/dsh-plugin": {
"name": "@mebular/dsh-plugin",
- "version": "0.2.3",
+ "version": "0.2.4",
"license": "MIT",
"engines": {
"dsh": ">=0.2.1-rc.2 <0.3.0",
@@ -9102,7 +9102,7 @@
},
"packages/fleet": {
"name": "@mebular/fleet",
- "version": "0.2.3",
+ "version": "0.2.4",
"license": "MIT",
"dependencies": {
"@mebular/core": "file:../..",
@@ -9118,7 +9118,7 @@
},
"packages/mcp": {
"name": "@mebular/mcp",
- "version": "0.2.3",
+ "version": "0.2.4",
"license": "MIT",
"dependencies": {
"@mebular/core": "file:../..",
@@ -9135,7 +9135,7 @@
},
"packages/service": {
"name": "@mebular/service",
- "version": "0.2.3",
+ "version": "0.2.4",
"license": "MIT",
"engines": {
"node": ">=20"
@@ -9143,7 +9143,7 @@
},
"packages/skill": {
"name": "@mebular/skill",
- "version": "0.2.3",
+ "version": "0.2.4",
"license": "MIT",
"engines": {
"node": ">=20"
diff --git a/package.json b/package.json
index 20e0679d..ec25e809 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@mebular/core",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "本地优先的图式记忆系统:为 Hermes 等 Agent 提供跨设备、可离线、可验证的记忆共享层",
"license": "MIT",
"author": {
diff --git a/packages/dsh-plugin/README.md b/packages/dsh-plugin/README.md
index c709c398..e993a390 100644
--- a/packages/dsh-plugin/README.md
+++ b/packages/dsh-plugin/README.md
@@ -66,7 +66,7 @@ App 与 DSH Plugin 是同一套本机 Mebular runtime 的两个入口。插件
```bash
# 安装插件(不会静默启动或下载 Mebular)
-dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
# 开发安装
dsh plugin --profile web add ./packages/dsh-plugin
@@ -114,6 +114,6 @@ DSH 通过官方 MCP client 连接同一个 daemon 的 `/mcp`;工具在 DSH
-v0.2.3 · early · MIT · © 2026 Sobert Li
+v0.2.4 · early · MIT · © 2026 Sobert Li
diff --git a/packages/dsh-plugin/README_EN.md b/packages/dsh-plugin/README_EN.md
index 4e9bc9e0..259fe007 100644
--- a/packages/dsh-plugin/README_EN.md
+++ b/packages/dsh-plugin/README_EN.md
@@ -67,7 +67,7 @@ An existing Mebular app or CLI attaches automatically; when no runtime exists, o
```bash
# Install the plugin (it never starts or downloads Mebular silently)
-dsh plugin --profile web add @mebular/dsh-plugin@0.2.3
+dsh plugin --profile web add @mebular/dsh-plugin@0.2.4
# Development install
dsh plugin --profile web add ./packages/dsh-plugin
@@ -115,6 +115,6 @@ DSH reaches the same daemon at `/mcp` through the official MCP client; tools app
-v0.2.3 · early · MIT · © 2026 Sobert Li
+v0.2.4 · early · MIT · © 2026 Sobert Li
diff --git a/packages/dsh-plugin/package.json b/packages/dsh-plugin/package.json
index 79610484..b343283b 100644
--- a/packages/dsh-plugin/package.json
+++ b/packages/dsh-plugin/package.json
@@ -1,6 +1,6 @@
{
"name": "@mebular/dsh-plugin",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "Mebular memory, task graph, and shared Console for DeepSeek Harness",
"license": "MIT",
"author": {
diff --git a/packages/fleet/package.json b/packages/fleet/package.json
index 0399a8cc..c6a87aa6 100644
--- a/packages/fleet/package.json
+++ b/packages/fleet/package.json
@@ -1,6 +1,6 @@
{
"name": "@mebular/fleet",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "Mebular 跨设备多 Agent 协作(任务=记忆):task-as-memory 的派发与回收,无中心协调",
"license": "MIT",
"author": {
diff --git a/packages/mcp/package.json b/packages/mcp/package.json
index 4b6af9eb..0ed1eaae 100644
--- a/packages/mcp/package.json
+++ b/packages/mcp/package.json
@@ -1,6 +1,6 @@
{
"name": "@mebular/mcp",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "Mebular MCP server(stdio + Streamable HTTP):把 Mebular 记忆能力暴露给任意 MCP client",
"license": "MIT",
"author": {
diff --git a/packages/mcp/src/version.mjs b/packages/mcp/src/version.mjs
index 868bbaa2..24bf2c70 100644
--- a/packages/mcp/src/version.mjs
+++ b/packages/mcp/src/version.mjs
@@ -5,4 +5,4 @@
// scripts/bump-version.mjs 只改这一处,scripts/verify-release-version.mjs
// 校验它等于发布版本;不要在其它文件再写版本字面量。
-export const APP_VERSION = '0.2.3';
+export const APP_VERSION = '0.2.4';
diff --git a/packages/service/package.json b/packages/service/package.json
index 8209acb4..69089453 100644
--- a/packages/service/package.json
+++ b/packages/service/package.json
@@ -1,6 +1,6 @@
{
"name": "@mebular/service",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "Mebular 常驻组件服务化:平台单元生成(launchd/systemd/Task Scheduler)+ install/uninstall/status/logs + 进程心跳",
"license": "MIT",
"author": {
diff --git a/packages/skill/package.json b/packages/skill/package.json
index 49862cf5..ff47d1d8 100644
--- a/packages/skill/package.json
+++ b/packages/skill/package.json
@@ -1,6 +1,6 @@
{
"name": "@mebular/skill",
- "version": "0.2.3",
+ "version": "0.2.4",
"description": "Mebular 行为层:可移植的 SKILL.md + MEMORY_POLICY.md 与各 MCP client 接入片段",
"license": "MIT",
"author": {