From 235cbb17bc8d5ddbadd1bcf574a4c788d76d3d56 Mon Sep 17 00:00:00 2001 From: Windsander Date: Thu, 29 Oct 2026 11:40:53 +0800 Subject: [PATCH 1/4] chore(release): v0.2.4 --- CHANGELOG.md | 28 +++++++++++ README.md | 8 ++-- README_CN.md | 8 ++-- RELEASE.md | 4 +- apps/desktop/README.md | 6 +-- apps/desktop/package-lock.json | 4 +- apps/desktop/package.json | 2 +- apps/desktop/src/main/daemon.mjs | 2 +- assets/desktop-steps-cn-light.svg | 2 +- assets/desktop-steps-cn.svg | 2 +- assets/desktop-steps-en-light.svg | 2 +- assets/desktop-steps-en.svg | 2 +- assets/dsh-quickstart-cn.svg | 4 +- assets/dsh-quickstart-en.svg | 4 +- docs/architecture/RUNTIME-COEXISTENCE.md | 2 +- docs/architecture/SURFACES.md | 8 ++-- docs/dsh/awesome-dsh-plugin-entry.yml | 2 +- docs/getting-started/QUICKSTART.md | 4 +- docs/getting-started/QUICKSTART_CN.md | 4 +- docs/integrations/DSH.md | 12 ++--- docs/integrations/DSH_CN.md | 12 ++--- docs/operations/DESKTOP_RELEASE.md | 40 ++++++++-------- docs/operations/RELEASE.md | 60 ++++++++++++------------ docs/operations/SHARED_RUNTIME.md | 10 ++-- package-lock.json | 14 +++--- package.json | 2 +- packages/dsh-plugin/README.md | 4 +- packages/dsh-plugin/README_EN.md | 4 +- packages/dsh-plugin/package.json | 2 +- packages/fleet/package.json | 2 +- packages/mcp/package.json | 2 +- packages/mcp/src/version.mjs | 2 +- packages/service/package.json | 2 +- packages/skill/package.json | 2 +- 34 files changed, 148 insertions(+), 120 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 649c32cc..cf2d8a70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,34 @@ 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. +- **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. +- Local gates: full Jest (excluding the known local 0.2.2 App port conflict), `verify:console`, `verify:mcp:skill`, `verify:onboarding`, `verify:daemon`, `check:i18n`, and `check:surface-parity`. + ## [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.3Desktop 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/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..6e25b64e 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 同路径): @@ -266,7 +266,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 +297,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 +308,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 +321,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 +346,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 +374,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 +398,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 +485,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": { From 4da5ea68164ef1de700ede26b088b0d73e5737f4 Mon Sep 17 00:00:00 2001 From: Windsander Date: Thu, 29 Oct 2026 11:53:14 +0800 Subject: [PATCH 2/4] docs(release): record v0.2.4 dry-run and packaged smoke --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf2d8a70..8b571029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,8 @@ ship as `0.2.4`; no runtime protocol or data-format changes are included. - 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. - Local gates: full Jest (excluding the known local 0.2.2 App port conflict), `verify:console`, `verify:mcp:skill`, `verify:onboarding`, `verify:daemon`, `check:i18n`, and `check:surface-parity`. +- Packaging dry-run [run 40813530946](https://github.com/Windsander/Mebular/actions/runs/40813530946) passed: verify + 6 tarballs, macOS/Windows/Linux installers, and real DSH E2E minimum/latest/Node 22 minimum. +- Packaged 0.2.4 runtime smoke in a temporary HOME installed `mebular-memory` and `mebular-tasks` successfully; the real user HOME was not modified. ## [v0.2.3] - 2026-10-28 From 14dd022cf3caaf25c158215e183d72f8247e87bf Mon Sep 17 00:00:00 2001 From: Windsander Date: Thu, 29 Oct 2026 14:32:47 +0800 Subject: [PATCH 3/4] docs(release): add v0.2.4 agent adoption E2E gate --- CHANGELOG.md | 6 +-- docs/operations/AGENT_ADOPTION_E2E.md | 72 +++++++++++++++++++++++++++ docs/operations/RELEASE.md | 14 ++++++ 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 docs/operations/AGENT_ADOPTION_E2E.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b571029..b146ea88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ ship as `0.2.4`; no runtime protocol or data-format changes are included. - **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. @@ -41,9 +42,8 @@ ship as `0.2.4`; no runtime protocol or data-format changes are included. ### 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. -- Local gates: full Jest (excluding the known local 0.2.2 App port conflict), `verify:console`, `verify:mcp:skill`, `verify:onboarding`, `verify:daemon`, `check:i18n`, and `check:surface-parity`. -- Packaging dry-run [run 40813530946](https://github.com/Windsander/Mebular/actions/runs/40813530946) passed: verify + 6 tarballs, macOS/Windows/Linux installers, and real DSH E2E minimum/latest/Node 22 minimum. -- Packaged 0.2.4 runtime smoke in a temporary HOME installed `mebular-memory` and `mebular-tasks` successfully; the real user HOME was not modified. +- 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. ## [v0.2.3] - 2026-10-28 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/RELEASE.md b/docs/operations/RELEASE.md index 6e25b64e..49220949 100644 --- a/docs/operations/RELEASE.md +++ b/docs/operations/RELEASE.md @@ -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;**不**运行 From eadadebaaf6116aa85724cc369ea3ba392ba235c Mon Sep 17 00:00:00 2001 From: Windsander Date: Thu, 29 Oct 2026 14:44:54 +0800 Subject: [PATCH 4/4] docs(release): record v0.2.4 agent E2E and dry-run --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b146ea88..dc4e0fd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,9 @@ ship as `0.2.4`; no runtime protocol or data-format changes are included. - 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