From d1ed2094d83d8c6fe09c85189e7c811d228b7032 Mon Sep 17 00:00:00 2001 From: Windsander Date: Sun, 25 Oct 2026 20:12:09 +0800 Subject: [PATCH] release: v0.1.1 - bump five lockstep packages and @mebular/dsh-plugin to 0.1.1 - fill CHANGELOG with DSH attach bridge fix and unsigned desktop notes - refresh install docs and release references for v0.1.1 --- .github/workflows/publish.yml | 2 +- CHANGELOG.md | 74 +++++++++++++++++++++-- README.md | 10 +-- README_CN.md | 10 +-- RELEASE.md | 6 +- apps/desktop/README.md | 8 +-- 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 +- docs/architecture/ARCHITECT.md | 4 +- 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 | 11 ++-- docs/operations/DESKTOP_RELEASE.md | 42 ++++++------- docs/operations/RELEASE.md | 38 ++++++------ package-lock.json | 14 ++--- package.json | 2 +- packages/dsh-plugin/README.md | 14 ++--- packages/dsh-plugin/package.json | 2 +- packages/fleet/package.json | 2 +- packages/mcp/package.json | 2 +- packages/mcp/scripts/publish-manifest.mjs | 4 +- packages/mcp/src/client.mjs | 2 +- packages/mcp/src/serve.mjs | 2 +- packages/mcp/src/server.mjs | 2 +- packages/service/package.json | 2 +- packages/skill/package.json | 2 +- scripts/verify-dsh-plugin.mjs | 4 +- scripts/verify-mcp-publish.mjs | 16 ++--- tests/dsh/manifest.test.mjs | 2 +- tests/mcp/console-embed.test.mjs | 2 +- 37 files changed, 189 insertions(+), 128 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d9a94bd9..f0e49b51 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -263,7 +263,7 @@ jobs: permissions: contents: read env: - # v0.1.0 明确 unsigned:即使 runner 钥匙串里有证书也不自动发现。 + # v0.1.1 明确 unsigned:即使 runner 钥匙串里有证书也不自动发现。 CSC_IDENTITY_AUTO_DISCOVERY: 'false' steps: - name: Checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index 05b41140..6ea3ec52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,22 +1,83 @@ # Changelog All notable changes to Mebular are documented here. -All published packages share a single lockstep version. +The five lockstep packages always share one version; `@mebular/dsh-plugin` keeps its own +version line. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -> Version headings carry the `v` prefix (`## [v0.1.0]`) because it is the release SSOT: -> the branch name (`release/v0.1.0`), the five `package.json` versions and the Git tag must -> all agree with this section. +> Version headings carry the `v` prefix (`## [v0.1.1]`) because it is the release SSOT: +> the branch name (`release/v0.1.1`), the five lockstep `package.json` versions and the Git +> tag must all agree with this section. `@mebular/dsh-plugin` keeps its own version line but +> ships `0.1.1` with this release. -The GitHub Release body is extracted from this file: everything between `## [v0.1.0]` and the +The GitHub Release body is extracted from this file: everything between `## [v0.1.1]` and the next `## [` heading. Keep that section self-contained. ## [Unreleased] Nothing yet. +## [v0.1.1] - 2026-10-25 + +v0.1.1 is a maintenance release for the v0.1.0 line. It fixes the DSH attach MCP bridge +lifecycle, aligns the six published npm packages at `0.1.1`, and refreshes the install +documentation. The desktop installers are rebuilt and remain **unsigned**; code signing, +notarization and auto-update are not part of this release. + +### Fixed + +- **DSH attach MCP bridge** — the bridge now mounts only while the daemon health is `up`. + When the daemon is down, no `mcp__mebular__*` tools are registered, so calls no longer + wait silently or fail after a 60-second timeout. A daemon disconnect disposes the client + fiber and unregisters its tools; when the daemon recovers, the bridge remounts + automatically without restarting DSH. `managed` mode does not mount while the child is + `starting`, and does not mount after `managed_start_failed` / `managed_cli_missing`. + The panel and logs now state that MCP tools are temporarily unavailable and why. +- **CI `verify:daemon`** — removed a `JOIN_READY` race in the daemon verification, so the + gate is deterministic. This is an internal test fix, not a user-facing feature. + +### Changed + +- **Six npm packages at `0.1.1`** — `@mebular/core`, `@mebular/service`, `@mebular/fleet`, + `@mebular/mcp`, `@mebular/skill`, and `@mebular/dsh-plugin`. The five lockstep packages + remain lockstep; the DSH plugin keeps its own version line and is aligned at `0.1.1` for + this release. +- **Install documentation** — README, quickstart, DSH integration guide, desktop release + guide and release SOP now point at `0.1.1` and the v0.1.1 installers. + +### Desktop installers (unsigned) + +- Rebuilt installers for macOS (Universal DMG), Windows (NSIS x64) and Linux (AppImage + deb + x64). `SHA256SUMS.txt` is published with them; verify it before installing. +- v0.1.1 is **unsigned and not notarized**. On macOS, right-click the app and choose + **Open** (or **System Settings → Privacy & Security → Open Anyway**). On Windows, choose + **More info → Run anyway**. +- **No auto-update** in this release. Signing, notarization and auto-update remain follow-up + work. + +### Install + +- Desktop: download from [GitHub Releases v0.1.1](https://github.com/Windsander/Mebular/releases/tag/v0.1.1). +- CLI and server: `npm install -g @mebular/core@0.1.1`. +- DSH plugin: `dsh plugin --profile web add @mebular/dsh-plugin@0.1.1` (keep the Mebular app + or `mebular serve` running; the plugin uses HTTP MCP). + +### 中文摘要 + +- **DSH attach MCP bridge 修复** —— 仅在 daemon 健康状态为 `up` 时挂载;daemon down 时不注册 + 任何 `mcp__mebular__*` 工具,不会静默等待或 60s 超时。掉线时 dispose 并注销工具,daemon + 恢复后自动重挂,无需重启 DSH。`managed` 在 `starting`、`managed_start_failed`、 + `managed_cli_missing` 时不提前挂载;面板和日志会明确说明 MCP 工具暂不可用及原因。 +- **六个 npm 包统一 `0.1.1`** —— 五个 lockstep 包加 `@mebular/dsh-plugin`;插件仍保留独立 + 版本线。 +- **安装文档已更新** —— README、快速上手、DSH 集成说明、桌面发布指南与发布 SOP 均指向 + `0.1.1`。 +- **CI `verify:daemon`** —— 修复 `JOIN_READY` 竞态,仅为内部测试稳定性,不是用户功能。 +- **桌面安装包** —— 三平台 unsigned 安装包重建,附 `SHA256SUMS.txt`;未签名、未公证,也不 + 包含自动更新。 + ## [v0.1.0] - 2026-10-24 Initial release. Five lockstep packages at `0.1.0`: `@mebular/core`, `@mebular/service`, @@ -98,5 +159,6 @@ installers. 仓库源码;五个 `@mebular/*` 包来自与 npm 发布相同的已验证 tarball。 - **范围** —— v0.1.0 不做签名、公证与自动更新,留到后续版本。 -[Unreleased]: https://github.com/Windsander/Mebular/compare/v0.1.0...HEAD +[Unreleased]: https://github.com/Windsander/Mebular/compare/v0.1.1...HEAD +[v0.1.1]: https://github.com/Windsander/Mebular/releases/tag/v0.1.1 [v0.1.0]: https://github.com/Windsander/Mebular/releases/tag/v0.1.0 diff --git a/README.md b/README.md index 1049ec59..e272c8b5 100644 --- a/README.md +++ b/README.md @@ -61,14 +61,14 @@ Memory and tasks stay on your devices; devices sync directly. - + - - + +
Desktop app · v0.1.0Desktop app · v0.1.1 Download & first launch
Unsigned first 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.
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.
@@ -135,7 +135,7 @@ mebular print-config --client opencode # MCP config

Use with DSH
Keep the Mebular app running, then install the plugin from npm into DSH's web profile:
-dsh plugin --profile web add @mebular/dsh-plugin@0.1.0
+dsh plugin --profile web add @mebular/dsh-plugin@0.1.1
A Mebular sidebar panel embeds the same Console through ?embed=dsh (loopback only), and the official MCP client reaches the same graph. The plugin discovers the daemon by daemonUrl > MEBULAR_HTTP_PORT > runtime.json > 7331, so custom ports follow automatically. It has its own version line and is not part of the five-package lockstep. 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.1.0 · early · MIT +v0.1.1 · early · MIT
diff --git a/README_CN.md b/README_CN.md index 09d1db5a..e52260f6 100644 --- a/README_CN.md +++ b/README_CN.md @@ -61,14 +61,14 @@ - + - - + +
桌面 App · v0.1.0桌面 App · v0.1.1 下载与首次打开
首发版 · 未签名
macOS Universal · Windows x64 · Linux x64
从 GitHub Releases 下载
用 SHA256SUMS.txt 校验。macOS:右键 →「打开」;Windows:「更多信息 → 仍要运行」。自带 Electron 与 runtime。
未签名发布
macOS Universal · Windows x64 · Linux x64
从 GitHub Releases 下载
用 SHA256SUMS.txt 校验。macOS:右键 →「打开」;Windows:「更多信息 → 仍要运行」。自带 Electron 与 runtime。
@@ -135,7 +135,7 @@ mebular print-config --client opencode # MCP 配置

与 DSH 一起使用
保持 Mebular App 运行,然后从 npm 把插件装入 DSH 的 web profile:
-dsh plugin --profile web add @mebular/dsh-plugin@0.1.0
+dsh plugin --profile web add @mebular/dsh-plugin@0.1.1
侧边栏 Mebular 面板通过 ?embed=dsh(仅 loopback)嵌入同一套 Console,官方 MCP client 连接同一张图。插件按 daemonUrl > MEBULAR_HTTP_PORT > runtime.json > 7331 发现 daemon,自定义端口会自动跟随。插件有独立版本线,不进入五包 lockstep;开发时仍可从 packages/dsh-plugin 本地安装。
已收录于 awesome-dsh-plugin 的 memory 分类。
DSH 插件指南 → · 集成说明 →

@@ -172,6 +172,6 @@ await mebular.initialize();
-v0.1.0 · early · MIT +v0.1.1 · early · MIT
diff --git a/RELEASE.md b/RELEASE.md index 9821bdd3..0bc1e662 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -9,6 +9,6 @@ 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.1.0**: five lockstep npm packages plus the independently -versioned `@mebular/dsh-plugin@0.1.0`, and unsigned desktop installers for macOS, Windows -and Linux. +The current release line is **v0.1.1**: five lockstep npm packages plus the independently +versioned `@mebular/dsh-plugin@0.1.1`, and unsigned desktop installers for macOS, Windows +and Linux. Signing, notarization, and auto-update are not part of this release. diff --git a/apps/desktop/README.md b/apps/desktop/README.md index 560f64e1..6e7ebd3c 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -1,6 +1,6 @@ # Mebular 桌面 App(apps/desktop) -> v0.1.0:**壳 + 守护托管 + 内嵌控制台 + 发布 tarball 运行时 + 三平台 unsigned 安装包**。 +> v0.1.1:**壳 + 守护托管 + 内嵌控制台 + 发布 tarball 运行时 + 三平台 unsigned 安装包**。 > 安装包 runtime 来自与 npm 发布同一批 verify tarball;签名、公证与自动更新留到后续版本。 > 发布操作见 [`docs/operations/DESKTOP_RELEASE.md`](../../docs/operations/DESKTOP_RELEASE.md)。 @@ -13,7 +13,7 @@ Electron 薄壳:把**既有控制台**(`127.0.0.1:/console`)装进 ``` apps/desktop/ -├── package.json # private + 0.1.0(与 npm 五个 lockstep 包同版本) +├── package.json # private + 0.1.1(与 npm 五个 lockstep 包同版本) ├── electron-builder.yml # 安装包配置(runtime/node_modules → resources/node_modules) ├── runtime/ # 发布 tarball 安装出的运行时(不入库) ├── src/main/ # Electron 主进程:daemon.mjs(托管逻辑,纯可测)/ index.mjs(壳)/ ipc.mjs / tray-icons.mjs @@ -32,7 +32,7 @@ npm run dev -- --home ~/.mebular --port 7331 # 透传参数(可选) npm run smoke # 无 GUI 有界冒烟(CI 用) ``` -## 安装包(v0.1.0,unsigned) +## 安装包(v0.1.1,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.1.0 产物**未签名、未公证**:macOS Gatekeeper 要求右键 → 打开(或系统设置 → 隐私与 +> v0.1.1 产物**未签名、未公证**: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 e80b04f6..6d83e859 100644 --- a/apps/desktop/package-lock.json +++ b/apps/desktop/package-lock.json @@ -1,12 +1,12 @@ { "name": "@mebular/desktop", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@mebular/desktop", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "devDependencies": { "electron": "42.11.18", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 316a60ab..b18b4928 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -2,7 +2,7 @@ "name": "@mebular/desktop", "productName": "Mebular", "desktopName": "mebular", - "version": "0.1.0", + "version": "0.1.1", "private": true, "description": "Mebular 桌面应用(Electron 壳 + 内嵌控制台 + 守护托管)", "license": "MIT", diff --git a/apps/desktop/src/main/daemon.mjs b/apps/desktop/src/main/daemon.mjs index 510f441f..5590d47e 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 } from 'node:url'; -export const APP_VERSION = '0.1.0'; +export const APP_VERSION = '0.1.1'; export const SERVICE_KIND = 'mebular-serve'; /** 仓库根(apps/desktop/src/main → 上溯 4 层);打包态由 resources 决定。 */ diff --git a/assets/desktop-steps-cn-light.svg b/assets/desktop-steps-cn-light.svg index da494cf8..1b56d33c 100644 --- a/assets/desktop-steps-cn-light.svg +++ b/assets/desktop-steps-cn-light.svg @@ -7,5 +7,5 @@ - 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.1.0 · macOS Universal、Windows x64、Linux x64首发未签名;签名与公证留待后续版本。 + 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.1.1 · 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 3895dcf3..31c51790 100644 --- a/assets/desktop-steps-cn.svg +++ b/assets/desktop-steps-cn.svg @@ -7,5 +7,5 @@ - 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.1.0 · macOS Universal、Windows x64、Linux x64首发未签名;签名与公证留待后续版本。 + 桌面 App从安装到锁定、可用的控制台。1开始部署启动本机服务,接入这台机器上已装好的助手。2新建或加入忆云第一台设备填忆云名;后续设备粘贴一次性令牌。3邀请下一台设备在顶栏点「邀请设备」,把令牌交给下一台机器。v0.1.1 · 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 6e039914..9e55390a 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.1.0 · macOS Universal, Windows x64, Linux x64Unsigned first 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.1.1 · 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 2a9879a4..a3f45828 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.1.0 · macOS Universal, Windows x64, Linux x64Unsigned first 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.1.1 · macOS Universal, Windows x64, Linux x64Unsigned release; signing and notarization follow. \ No newline at end of file diff --git a/docs/architecture/ARCHITECT.md b/docs/architecture/ARCHITECT.md index c57ecd58..1d6654b2 100644 --- a/docs/architecture/ARCHITECT.md +++ b/docs/architecture/ARCHITECT.md @@ -93,9 +93,9 @@ UNINITIALIZED ── create/join ──▶ INITIALIZING ──▶ READY - 5 个 lockstep npm 包:`@mebular/core`、`@mebular/service`、`@mebular/fleet`、`@mebular/mcp`、 `@mebular/skill`;根包提供 `mebular` + `fleet` 双 bin。 -- `@mebular/dsh-plugin` 独立版本线,与 v0.1.0 同批发布,但不进入五包 lockstep。 +- `@mebular/dsh-plugin` 独立版本线,与 v0.1.1 同批发布,但不进入五包 lockstep。 - `packages/console` 与 `apps/desktop` 为 private 工作包,不单独发布;控制台随根包/守护分发。 -- Electron 桌面壳包含窗口、托盘、守护托管和云切换;v0.1.0 已纳入三平台 **unsigned** 安装包 +- Electron 桌面壳包含窗口、托盘、守护托管和云切换;v0.1.1 已纳入三平台 **unsigned** 安装包 (macOS Universal DMG、Windows NSIS x64、Linux AppImage/deb x64)。安装包 runtime 来自与 npm 发布同一批 verify tarball,并自带 Electron。签名、公证、自动更新在后续版本处理。 diff --git a/docs/dsh/awesome-dsh-plugin-entry.yml b/docs/dsh/awesome-dsh-plugin-entry.yml index 7bbaf37a..2d28bbaa 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.1.0 +# 安装: dsh plugin --profile web add @mebular/dsh-plugin@0.1.1 # 兼容: 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 f9ef38f6..0c15ff55 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.1.0) and open it. +1. Download the app from [GitHub Releases](https://github.com/Windsander/Mebular/releases/tag/v0.1.1) 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.1.0 installers are unsigned. Verify `SHA256SUMS.txt` first, then use right-click → **Open** +> The v0.1.1 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 6ad8cbd1..67770c83 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.1.0) 下载 App 并打开。 +1. 从 [GitHub Releases](https://github.com/Windsander/Mebular/releases/tag/v0.1.1) 下载 App 并打开。 2. 点「开始部署」。它会启动本机服务、自动接入本机已装的 AI 助手,然后进入**锁定主控制台**。 3. 第一台设备点「新建忆云」,后续设备点「加入忆云」。 -> v0.1.0 安装包未签名。请先用 `SHA256SUMS.txt` 校验,再在 macOS 上右键 →「打开」, +> v0.1.1 安装包未签名。请先用 `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 b1c93b67..34a908f6 100644 --- a/docs/integrations/DSH.md +++ b/docs/integrations/DSH.md @@ -37,10 +37,10 @@ surface: `/healthz`, `/app/embed/info`, `/mcp` and `/console/?embed=dsh`. ## Install -From v0.1.0, install the plugin from npm into DSH's web profile: +Install the plugin from npm into DSH's web profile: ```bash -dsh plugin --profile web add @mebular/dsh-plugin@0.1.0 +dsh plugin --profile web add @mebular/dsh-plugin@0.1.1 ``` For plugin development, install from the repository checkout instead: @@ -49,7 +49,7 @@ For plugin development, install from the repository checkout instead: dsh plugin --profile web add ./packages/dsh-plugin ``` -`@mebular/dsh-plugin` has its own version line: it ships with the Mebular v0.1.0 release +`@mebular/dsh-plugin` has its own version line: it ships with the Mebular v0.1.1 release train, but its version comes only from `packages/dsh-plugin/package.json` and it is not part of the five-package lockstep. The plugin is listed in [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) under **memory** @@ -168,9 +168,9 @@ whole, not a separate package repo, so discovery points back here. See the ## Release and versioning -- The plugin has its own version, `0.1.0`, and its own npm lifecycle. -- It ships on the **same release train** as Mebular v0.1.0, so the first public plugin and - the first public Mebular release land together. +- The plugin has its own version, `0.1.1`, and its own npm lifecycle. +- It ships on the **same release train** as Mebular v0.1.1; both packages are at `0.1.1` + in this release. - It is **not** part of the five-package lockstep (`core`, `service`, `skill`, `mcp`, `fleet`). Those five always share one version; the plugin can move independently. - Publish is idempotent: the `publish-dsh` workflow job reads the version from diff --git a/docs/integrations/DSH_CN.md b/docs/integrations/DSH_CN.md index 562bfeec..53b7bc18 100644 --- a/docs/integrations/DSH_CN.md +++ b/docs/integrations/DSH_CN.md @@ -35,10 +35,10 @@ ## 安装 -v0.1.0 起从 npm 安装到 DSH 的 Web profile: +从 npm 安装到 DSH 的 Web profile: ```bash -dsh plugin --profile web add @mebular/dsh-plugin@0.1.0 +dsh plugin --profile web add @mebular/dsh-plugin@0.1.1 ``` 插件开发时仍可从仓库工作树安装: @@ -47,7 +47,7 @@ dsh plugin --profile web add @mebular/dsh-plugin@0.1.0 dsh plugin --profile web add ./packages/dsh-plugin ``` -`@mebular/dsh-plugin` 是独立版本线:随 Mebular v0.1.0 release train 发布,但版本号只取自 +`@mebular/dsh-plugin` 是独立版本线:随 Mebular v0.1.1 release train 发布,但版本号只取自 `packages/dsh-plugin/package.json`,不进入五包 lockstep。插件已收录于 [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) 的 **memory** 分类(PR [#9167](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9167))。 @@ -155,9 +155,8 @@ Mebular 仓库,而不是一个独立包仓库,所以搜索会回到这里。 ## 发布与版本 -- 插件独立版本 `0.1.0`,有独立的 npm 生命周期。 -- 它和 Mebular v0.1.0 走**同一条 release train**,首个公开插件与首个公开 Mebular 版本一起 - 落地。 +- 插件独立版本 `0.1.1`,有独立的 npm 生命周期。 +- 它和 Mebular v0.1.1 走**同一条 release train**;本版两者都是 `0.1.1`。 - 它**不进入**五包 lockstep(`core`、`service`、`skill`、`mcp`、`fleet`):那五个包永远同 版本,插件可以单独前进。 - 发布是幂等的:`publish-dsh` job 从 `packages/dsh-plugin/package.json` 读取版本, diff --git a/docs/operations/DESKTOP_RELEASE.md b/docs/operations/DESKTOP_RELEASE.md index f914f95f..06c60dd4 100644 --- a/docs/operations/DESKTOP_RELEASE.md +++ b/docs/operations/DESKTOP_RELEASE.md @@ -1,18 +1,18 @@ # 桌面安装包发布 -面向 Mebular v0.1.0 的桌面安装包构建、验收与后续签名计划。发布流程总览见 +面向 Mebular v0.1.1 的桌面安装包构建、验收与后续签名计划。发布流程总览见 [`RELEASE.md`](RELEASE.md)。 -## 0. v0.1.0 范围 +## 0. v0.1.1 范围 | 平台 | 目标 | 架构 | 产物 | | --- | --- | --- | --- | -| macOS | DMG | Universal(arm64 + x64) | `Mebular-0.1.0-universal.dmg` | -| Windows | NSIS | x64 | `Mebular-Setup-0.1.0.exe` | -| Linux | AppImage | x64 | `Mebular-0.1.0-x86_64.AppImage` | -| Linux | deb | x64 | `Mebular-0.1.0-amd64.deb` | +| macOS | DMG | Universal(arm64 + x64) | `Mebular-0.1.1-universal.dmg` | +| Windows | NSIS | x64 | `Mebular-Setup-0.1.1.exe` | +| Linux | AppImage | x64 | `Mebular-0.1.1-x86_64.AppImage` | +| Linux | deb | x64 | `Mebular-0.1.1-amd64.deb` | -- 全部为 **unsigned** 首发;不做代码签名、公证或自动更新。 +- 全部为 **unsigned** 发布;不做代码签名、公证或自动更新。 - 每个安装包都自带 Electron 和一份完整的 Mebular runtime,**不需要本机 Node.js**,也不依赖 仓库源码目录。 - GitHub Release 同时提供 `SHA256SUMS.txt`,覆盖上面 4 个安装包。 @@ -157,26 +157,26 @@ electron-builder 的 `artifactName` 固定为: | 平台 | 配置 | 最终文件名 | | --- | --- | --- | -| macOS | `Mebular-${version}-${arch}.${ext}` + `--universal` | `Mebular-0.1.0-universal.dmg` | -| Windows | `Mebular-Setup-${version}.${ext}` | `Mebular-Setup-0.1.0.exe` | -| Linux AppImage | `Mebular-${version}-${arch}.${ext}` + x64 | `Mebular-0.1.0-x86_64.AppImage` | -| Linux deb | 同上;deb 的 arch 宏为 `amd64` | `Mebular-0.1.0-amd64.deb` | +| macOS | `Mebular-${version}-${arch}.${ext}` + `--universal` | `Mebular-0.1.1-universal.dmg` | +| Windows | `Mebular-Setup-${version}.${ext}` | `Mebular-Setup-0.1.1.exe` | +| Linux AppImage | `Mebular-${version}-${arch}.${ext}` + x64 | `Mebular-0.1.1-x86_64.AppImage` | +| Linux deb | 同上;deb 的 arch 宏为 `amd64` | `Mebular-0.1.1-amd64.deb` | `SHA256SUMS.txt` 由 release job 在 Linux 上生成,只包含安装包,按文件名 `LC_ALL=C sort` 排序,例如: ```text - Mebular-0.1.0-amd64.deb - Mebular-0.1.0-universal.dmg - Mebular-0.1.0-x86_64.AppImage - Mebular-Setup-0.1.0.exe + Mebular-0.1.1-amd64.deb + Mebular-0.1.1-universal.dmg + Mebular-0.1.1-x86_64.AppImage + Mebular-Setup-0.1.1.exe ``` dry-run 不会生成这个文件;它只在正式 `release` job 创建 GitHub Release 时产生。 ## 4. unsigned 安装体验 -v0.1.0 没有 Apple Developer ID、公证或 Windows 代码签名证书。用户会看到系统安全提示, +v0.1.1 没有 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.1.0.exe`。 +1. 运行 `Mebular-Setup-0.1.1.exe`。 2. 出现「Windows 已保护你的电脑」时点「更多信息」,再点「仍要运行」。 ### 4.4 Linux ```bash -chmod +x Mebular-0.1.0-x86_64.AppImage -./Mebular-0.1.0-x86_64.AppImage +chmod +x Mebular-0.1.1-x86_64.AppImage +./Mebular-0.1.1-x86_64.AppImage # Debian / Ubuntu -sudo apt install ./Mebular-0.1.0-amd64.deb +sudo apt install ./Mebular-0.1.1-amd64.deb ``` AppImage 需要 FUSE;没有 FUSE 时可使用 `--appimage-extract-and-run`。deb 安装后从应用菜单 @@ -257,7 +257,7 @@ node apps/desktop/scripts/smoke-runtime.mjs --runtime apps/desktop/dist/linux-un ## 6. 签名、公证与自动更新(后续) -v0.1.0 明确不签名。后续版本的建议顺序: +v0.1.1 明确不签名。后续版本的建议顺序: 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 e4d08eda..f9ed1bc6 100644 --- a/docs/operations/RELEASE.md +++ b/docs/operations/RELEASE.md @@ -3,7 +3,7 @@ 面向 `@mebular/*` npm 包与三平台桌面安装包的发布操作手册。核心约束:**分支名即版本号 (SSOT)**、**先构建安装包再发 npm**、**幂等发布**、**按 ref 串行**。 -v0.1.0 一次交付: +当前 v0.1.1 交付: - 5 个 lockstep npm 包 + 1 个独立版本插件; - macOS Universal DMG、Windows NSIS x64、Linux AppImage + deb x64(unsigned); @@ -21,9 +21,9 @@ v0.1.0 一次交付: | `@mebular/dsh-plugin` | `packages/dsh-plugin` | DeepSeek Harness 插件;**独立版本线**,不参与 lockstep | - **版本策略**:5 个 lockstep 包(`core` / `service` / `skill` / `mcp` / `fleet`)永远同版本号。 -- **独立版本包**:`@mebular/dsh-plugin` 与 v0.1.0 同一 release train 首发(自身版本 `0.1.0`), - 但版本号只取自 `packages/dsh-plugin/package.json`;`bump_version.sh` 不改它,verify 的 - lockstep 校验也不包含它。 +- **独立版本包**:`@mebular/dsh-plugin` 在 v0.1.1 与五包同版本发布(自身版本 `0.1.1`), + 但仍保留独立版本线;版本号只取自 `packages/dsh-plugin/package.json`;`bump_version.sh` + 不改它,verify 的 lockstep 校验也不包含它。 - **安装入口**:`npm install -g @mebular/core` 是根包,同时提供 `mebular` + `fleet` 两个 bin; `@mebular/mcp` 单独安装只有 `mebular`,**不能**当作双 bin 安装入口。 - **桌面版本**:`apps/desktop/package.json`、`apps/desktop/package-lock.json` 与 @@ -73,7 +73,7 @@ v0.1.0 一次交付: 超时或被依赖一律 400。按包执行,lockstep 需 5 个包各跑一次,插件单独一次: ```bash npm unpublish @mebular/core@0.2.0 # 重复 core → service → skill → mcp → fleet - npm unpublish @mebular/dsh-plugin@0.1.0 + npm unpublish @mebular/dsh-plugin@0.2.0 ``` 同一版本被删除后**不可再以相同版本号重新发布**,后续必须升号。 - **npm deprecate(常规手段)**:标记问题版本,安装时会打印警告但不阻断: @@ -152,7 +152,7 @@ bash scripts/bump_version.sh v0.2.0 # 同步 5 包 + 桌面版本 + CH `bump_version.sh` 只处理 lockstep 包与桌面版本;`@mebular/dsh-plugin` 的版本单独在 `packages/dsh-plugin/package.json` 维护。 -v0.1.0 的版本号已就位、CHANGELOG 章节已存在,**不需要**再跑 `bump_version.sh`。 +v0.1.1 的版本号已就位、CHANGELOG 章节已存在,**不需要**再跑 `bump_version.sh`。 ### 3.2 本地预检(推荐) @@ -230,8 +230,8 @@ sha256sum release-assets/* # Linux ```bash git add -A -git commit -m "release: v0.1.0" -git push -u origin release/v0.1.0 +git commit -m "release: v0.1.1" +git push -u origin release/v0.1.1 ``` push 后自动执行第 2 节的完整流水线。任一 job 失败即停;安装包未全绿时不会发 npm。 @@ -239,7 +239,7 @@ push 后自动执行第 2 节的完整流水线。任一 job 失败即停;安 ### 5.2 观察 ```bash -gh run list --workflow=publish.yml --branch release/v0.1.0 --limit 5 +gh run list --workflow=publish.yml --branch release/v0.1.1 --limit 5 gh run watch gh run view --log-failed # 失败时 ``` @@ -248,26 +248,26 @@ gh run view --log-failed # 失败时 ```bash # npm 六包 -for p in core service skill mcp fleet; do npm view "@mebular/$p@0.1.0" version; done -npm view @mebular/dsh-plugin@0.1.0 version +for p in core service skill mcp fleet; do npm view "@mebular/$p@0.1.1" version; done +npm view @mebular/dsh-plugin@0.1.1 version # GitHub Release -gh release view v0.1.0 -gh release view v0.1.0 --json assets --jq '.assets[] | "\(.name) \(.size) bytes"' +gh release view v0.1.1 +gh release view v0.1.1 --json assets --jq '.assets[] | "\(.name) \(.size) bytes"' # 根包双 bin -npm install -g @mebular/core@0.1.0 +npm install -g @mebular/core@0.1.1 command -v mebular && command -v fleet mebular tools >/dev/null && fleet --version ``` -> 不要用 `npm install -g @mebular/mcp@0.1.0` 冒充双 bin 安装:`@mebular/mcp` 只提供 +> 不要用 `npm install -g @mebular/mcp@0.1.1` 冒充双 bin 安装:`@mebular/mcp` 只提供 > `mebular`,`fleet` 必须来自根包(或单独安装 `@mebular/fleet`)。 插件独立验证(先让 App / 守护运行): ```bash -dsh plugin --profile web add @mebular/dsh-plugin@0.1.0 +dsh plugin --profile web add @mebular/dsh-plugin@0.1.1 dsh --profile web --dump-config | grep -A3 mebular # host row;transport 由官方 MCP client 挂载 # DSH 会话中确认 mcp__mebular__* 可调用;侧边栏面板加载 /console/?embed=dsh ``` @@ -289,7 +289,7 @@ MEBULAR_HOME="$(mktemp -d)" mebular serve --port 7399 从 Release 下载并校验: ```bash -gh release download v0.1.0 -D release-assets +gh release download v0.1.1 -D release-assets cd release-assets # Linux @@ -312,8 +312,8 @@ Get-Content SHA256SUMS.txt | ForEach-Object { - 文件名与第 0.1 节一致;没有额外平台包或调试产物; - macOS 打开 DMG 后能启动;Windows NSIS 能安装并启动;Linux AppImage 可执行,deb 可安装; - 首次启动能进入锁定控制台,`/healthz` 正常; -- 全部为 **unsigned** 首发:macOS Gatekeeper 与 Windows SmartScreen 会拦截,按 Release - notes 的绕过步骤操作。签名、公证与自动更新不在 v0.1.0 范围。 +- 全部为 **unsigned** 发布:macOS Gatekeeper 与 Windows SmartScreen 会拦截,按 Release + notes 的绕过步骤操作。签名、公证与自动更新不在 v0.1.1 范围。 安装包内的 runtime 结构、本地打包与签名后续见 [`DESKTOP_RELEASE.md`](DESKTOP_RELEASE.md)。 diff --git a/package-lock.json b/package-lock.json index 25fffb47..ba6f60e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@mebular/core", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@mebular/core", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "workspaces": [ "packages/*" @@ -9103,7 +9103,7 @@ }, "packages/dsh-plugin": { "name": "@mebular/dsh-plugin", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "engines": { "dsh": ">=0.2.1-rc.2 <0.3.0", @@ -9115,7 +9115,7 @@ }, "packages/fleet": { "name": "@mebular/fleet", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "dependencies": { "@mebular/core": "file:../..", @@ -9131,7 +9131,7 @@ }, "packages/mcp": { "name": "@mebular/mcp", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "dependencies": { "@mebular/core": "file:../..", @@ -9148,7 +9148,7 @@ }, "packages/service": { "name": "@mebular/service", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "engines": { "node": ">=20" @@ -9156,7 +9156,7 @@ }, "packages/skill": { "name": "@mebular/skill", - "version": "0.1.0", + "version": "0.1.1", "license": "MIT", "engines": { "node": ">=20" diff --git a/package.json b/package.json index b3f607cf..a43e7675 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mebular/core", - "version": "0.1.0", + "version": "0.1.1", "description": "本地优先的图式记忆系统:为 Hermes 等 Agent 提供跨设备、可离线、可验证的记忆共享层", "license": "MIT", "author": "Windsander", diff --git a/packages/dsh-plugin/README.md b/packages/dsh-plugin/README.md index 3f00d3b5..4cb756ce 100644 --- a/packages/dsh-plugin/README.md +++ b/packages/dsh-plugin/README.md @@ -32,10 +32,10 @@ curl -sS http://127.0.0.1:7331/healthz ## 安装 -v0.1.0 起从 npm 安装到 DSH 的 Web profile: +从 npm 安装到 DSH 的 Web profile: ```bash -dsh plugin --profile web add @mebular/dsh-plugin@0.1.0 +dsh plugin --profile web add @mebular/dsh-plugin@0.1.1 ``` 插件开发时仍可从仓库工作树安装: @@ -47,7 +47,7 @@ dsh plugin --profile web add ./packages/dsh-plugin 安装后 `$DSH_HOME/profiles/web/package.json` 的 `dsh.profile.bundles` 会包含 `@mebular/dsh-plugin`。重启 DSH Web 后,侧边栏出现 Mebular 图标;点击后进入全局面板。 -> `@mebular/dsh-plugin` 是**独立版本线**:v0.1.0 与 Mebular v0.1.0 同一 release train, +> `@mebular/dsh-plugin` 是**独立版本线**:v0.1.1 与 Mebular v0.1.1 同一 release train, > 但版本号只由 `packages/dsh-plugin/package.json` 决定,不进入五包 lockstep。已收录于 > [awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) 的 `memory` > 分类(PR [#9167](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9167))。 @@ -203,7 +203,7 @@ curl -sS http://127.0.0.1:/mebular/embed-info "mode": "attach", "managed": false, "panel": true, - "version": "0.1.0", + "version": "0.1.1", "embedProtocol": 1, "consoleUrl": "http://127.0.0.1:7331/console", "embedUrl": "http://127.0.0.1:7331/console/?embed=dsh", @@ -334,10 +334,10 @@ npm run verify:dsh-plugin ## 发布状态 -- 版本:`0.1.0` -- npm:`@mebular/dsh-plugin@0.1.0`(随 Mebular v0.1.0 release train,独立版本线) +- 版本:`0.1.1` +- npm:`@mebular/dsh-plugin@0.1.1`(随 Mebular v0.1.1 release train,独立版本线) - 官方插件列表:已收录([awesome-dsh-plugin](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) 的 `memory` 分类,PR [#9167](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin/pull/9167)) -- 正式安装:`dsh plugin --profile web add @mebular/dsh-plugin@0.1.0` +- 正式安装:`dsh plugin --profile web add @mebular/dsh-plugin@0.1.1` - 开发安装:`dsh plugin --profile web add ./packages/dsh-plugin` - 版本线:不进入 `core` / `service` / `skill` / `mcp` / `fleet` 五包 lockstep diff --git a/packages/dsh-plugin/package.json b/packages/dsh-plugin/package.json index 19de477b..9a6ff07e 100644 --- a/packages/dsh-plugin/package.json +++ b/packages/dsh-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@mebular/dsh-plugin", - "version": "0.1.0", + "version": "0.1.1", "description": "Mebular memory, task graph, and shared Console for DeepSeek Harness", "license": "MIT", "author": "Windsander", diff --git a/packages/fleet/package.json b/packages/fleet/package.json index 680f7b52..db86345b 100644 --- a/packages/fleet/package.json +++ b/packages/fleet/package.json @@ -1,6 +1,6 @@ { "name": "@mebular/fleet", - "version": "0.1.0", + "version": "0.1.1", "description": "Mebular 跨设备多 Agent 协作(任务=记忆):task-as-memory 的派发与回收,无中心协调", "license": "MIT", "private": false, diff --git a/packages/mcp/package.json b/packages/mcp/package.json index e27b23d6..c62743d2 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@mebular/mcp", - "version": "0.1.0", + "version": "0.1.1", "description": "Mebular MCP server(stdio + Streamable HTTP):把 Mebular 记忆能力暴露给任意 MCP client", "license": "MIT", "private": false, diff --git a/packages/mcp/scripts/publish-manifest.mjs b/packages/mcp/scripts/publish-manifest.mjs index bd2c9db0..2a8db415 100644 --- a/packages/mcp/scripts/publish-manifest.mjs +++ b/packages/mcp/scripts/publish-manifest.mjs @@ -2,7 +2,7 @@ // G6.5 / D41:發布期改寫 @mebular/core 依賴。 // // 開發期以 `file:../..` 本地連結(根包非 workspace 成員、本環境 npm 不支援 `workspace:`); -// `npm pack`/`npm publish` 的 prepack 階段改為 `^0.1.0`,postpack 還原。 +// `npm pack`/`npm publish` 的 prepack 階段改為 `^0.1.1`,postpack 還原。 // // 用法:node scripts/publish-manifest.mjs set|restore @@ -14,7 +14,7 @@ import { fileURLToPath } from 'node:url'; const pkgDir = join(dirname(fileURLToPath(import.meta.url)), '..'); const pkgFile = join(pkgDir, 'package.json'); const backupFile = `${pkgFile}.packbak`; -const PUBLISH_RANGE = '^0.1.0'; +const PUBLISH_RANGE = '^0.1.1'; const action = process.argv[2]; diff --git a/packages/mcp/src/client.mjs b/packages/mcp/src/client.mjs index 998871dd..10341194 100644 --- a/packages/mcp/src/client.mjs +++ b/packages/mcp/src/client.mjs @@ -39,7 +39,7 @@ export async function callToolViaHttp({ endpoint, token, name, args, timeoutMs = jsonrpc: '2.0', id: 1, method: 'initialize', - params: { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'mebular-cli', version: '0.1.0' } }, + params: { protocolVersion: '2024-11-05', capabilities: {}, clientInfo: { name: 'mebular-cli', version: '0.1.1' } }, }, null, timeoutMs); const sessionId = init.sessionId; await rpc(url, token, { jsonrpc: '2.0', method: 'notifications/initialized' }, sessionId, timeoutMs); diff --git a/packages/mcp/src/serve.mjs b/packages/mcp/src/serve.mjs index 8d34ea54..5c6531de 100644 --- a/packages/mcp/src/serve.mjs +++ b/packages/mcp/src/serve.mjs @@ -221,7 +221,7 @@ function settleWithin(promise, ms) { // /healthz、/app/embed/info 与 /runtime.json 共用的对外版本号与 embed 协议版本。 // 单一真源:不要在 buildEmbedInfo / runtime 写入处再写字面量。 -export const APP_VERSION = '0.1.0'; +export const APP_VERSION = '0.1.1'; export const EMBED_PROTOCOL = 1; // ---------- 控制台静态托管(D1) ---------- diff --git a/packages/mcp/src/server.mjs b/packages/mcp/src/server.mjs index e33596f8..914199c3 100644 --- a/packages/mcp/src/server.mjs +++ b/packages/mcp/src/server.mjs @@ -26,7 +26,7 @@ const MEMORY_POLICY = `# Mebular 记忆使用规约(memory_policy) 6. 无结果别编:召回为空就如实说明,不要臆造记忆。`; export function buildServer(service, options = {}) { - const server = new McpServer({ name: 'mebular', version: '0.1.0' }); + const server = new McpServer({ name: 'mebular', version: '0.1.1' }); registerTools(server, service, options); server.registerPrompt( 'memory_policy', diff --git a/packages/service/package.json b/packages/service/package.json index 8e68465e..5d1fd7e0 100644 --- a/packages/service/package.json +++ b/packages/service/package.json @@ -1,6 +1,6 @@ { "name": "@mebular/service", - "version": "0.1.0", + "version": "0.1.1", "description": "Mebular 常驻组件服务化:平台单元生成(launchd/systemd/Task Scheduler)+ install/uninstall/status/logs + 进程心跳", "license": "MIT", "private": false, diff --git a/packages/skill/package.json b/packages/skill/package.json index 7b5bc4e9..e7c61e16 100644 --- a/packages/skill/package.json +++ b/packages/skill/package.json @@ -1,6 +1,6 @@ { "name": "@mebular/skill", - "version": "0.1.0", + "version": "0.1.1", "description": "Mebular 行为层:可移植的 SKILL.md + MEMORY_POLICY.md 与各 MCP client 接入片段", "license": "MIT", "private": false, diff --git a/scripts/verify-dsh-plugin.mjs b/scripts/verify-dsh-plugin.mjs index 614df6c7..18615c37 100644 --- a/scripts/verify-dsh-plugin.mjs +++ b/scripts/verify-dsh-plugin.mjs @@ -67,7 +67,7 @@ if (existsSync(pkgJsonPath)) { } check('name is @mebular/dsh-plugin', pkg.name === '@mebular/dsh-plugin', String(pkg.name)); -check('version is 0.1.0', pkg.version === '0.1.0', String(pkg.version)); +check('version is 0.1.1', pkg.version === '0.1.1', String(pkg.version)); check( 'description is present', typeof pkg.description === 'string' && pkg.description.length > 0, @@ -299,7 +299,7 @@ check( check('README documents the npm name', readme.includes('@mebular/dsh-plugin')); check( 'README documents npm install', - readme.includes('dsh plugin --profile web add @mebular/dsh-plugin@0.1.0'), + readme.includes('dsh plugin --profile web add @mebular/dsh-plugin@0.1.1'), ); check( 'README does not claim the npm package is unpublished', diff --git a/scripts/verify-mcp-publish.mjs b/scripts/verify-mcp-publish.mjs index 0f557389..f34b5afe 100644 --- a/scripts/verify-mcp-publish.mjs +++ b/scripts/verify-mcp-publish.mjs @@ -3,7 +3,7 @@ // // 1) 對五個可發布套件(@mebular/core / service / fleet / mcp / skill)npm pack; // 檢驗 tarball 內容,且 mcp/fleet 內的 `@mebular/*` 已於 prepack 由 `file:` 改寫為 -// `^0.1.0`,pack 後本地依賴已還原、備份已清除。 +// `^0.1.1`,pack 後本地依賴已還原、備份已清除。 // 2) 用產出的 tarball 在乾淨目錄安裝;以安裝後的 `mebular status`、`mebular mcp` // (真实 MCP client)、`fleet --version` 與 `@mebular/skill/scripts/install.mjs` 做冒煙。 // `qrcode-generator@2.0.4` 是 fleet/core 的普通 npm 依賴,安裝時由 registry 解析。 @@ -76,10 +76,10 @@ try { const mcpManifest = manifestOf(mcp.file); const fleetManifest = manifestOf(fleet.file); const coreManifestForDeps = manifestOf(core.file); - check('mcp tarball 依賴 @mebular/core=^0.1.0', mcpManifest.dependencies?.['@mebular/core'] === '^0.1.0', mcpManifest.dependencies?.['@mebular/core']); - check('mcp tarball 依賴 @mebular/fleet=^0.1.0', mcpManifest.dependencies?.['@mebular/fleet'] === '^0.1.0', mcpManifest.dependencies?.['@mebular/fleet']); - check('fleet tarball 依賴 @mebular/core=^0.1.0', fleetManifest.dependencies?.['@mebular/core'] === '^0.1.0', fleetManifest.dependencies?.['@mebular/core']); - check('fleet tarball 依賴 @mebular/service=^0.1.0', fleetManifest.dependencies?.['@mebular/service'] === '^0.1.0', fleetManifest.dependencies?.['@mebular/service']); + check('mcp tarball 依賴 @mebular/core=^0.1.1', mcpManifest.dependencies?.['@mebular/core'] === '^0.1.1', mcpManifest.dependencies?.['@mebular/core']); + check('mcp tarball 依賴 @mebular/fleet=^0.1.1', mcpManifest.dependencies?.['@mebular/fleet'] === '^0.1.1', mcpManifest.dependencies?.['@mebular/fleet']); + check('fleet tarball 依賴 @mebular/core=^0.1.1', fleetManifest.dependencies?.['@mebular/core'] === '^0.1.1', fleetManifest.dependencies?.['@mebular/core']); + check('fleet tarball 依賴 @mebular/service=^0.1.1', fleetManifest.dependencies?.['@mebular/service'] === '^0.1.1', fleetManifest.dependencies?.['@mebular/service']); check('fleet tarball 依賴 qrcode-generator=2.0.4', fleetManifest.dependencies?.['qrcode-generator'] === '2.0.4', fleetManifest.dependencies?.['qrcode-generator']); check('core tarball 依賴 qrcode-generator=2.0.4', coreManifestForDeps.dependencies?.['qrcode-generator'] === '2.0.4', coreManifestForDeps.dependencies?.['qrcode-generator']); const leaks = [ @@ -138,7 +138,7 @@ try { { cwd: work, stdio: ['ignore', 'ignore', 'inherit'], env: process.env }, ); const installedCore = JSON.parse(await readFile(join(work, 'node_modules', '@mebular', 'core', 'package.json'), 'utf-8')); - check('tarball 安裝:@mebular/core@0.1.0', installedCore.version === '0.1.0', installedCore.version); + check('tarball 安裝:@mebular/core@0.1.1', installedCore.version === '0.1.1', installedCore.version); check( 'tarball 安裝:五包齊備', ['core', 'service', 'fleet', 'mcp', 'skill'].every((name) => existsSync(join(work, 'node_modules', '@mebular', name))), @@ -156,7 +156,7 @@ try { check('安裝後 mebular status', /^[0-9a-f]{64}$/.test(statusOut.stateHash ?? ''), `deviceId=${statusOut.deviceId}`); // 安裝後的 stdio MCP 冒煙(真实 MCP client) - client = new Client({ name: 'mebular-publish-smoke', version: '0.1.0' }); + client = new Client({ name: 'mebular-publish-smoke', version: '0.1.1' }); const transport = new StdioClientTransport({ command: process.execPath, args: [bin, 'mcp'], env, stderr: 'pipe' }); await client.connect(transport); const { tools } = await client.listTools(); @@ -183,7 +183,7 @@ try { // 安裝後的 fleet CLI(來自 fleet tarball) const fleetBin = join(work, 'node_modules', '.bin', 'fleet'); const fleetOut = execFileSync(process.execPath, [fleetBin, '--version'], { cwd: work, encoding: 'utf-8', env }); - check('安裝後 fleet --version', /0\.1\.0/.test(fleetOut), fleetOut.trim().split('\n').pop()); + check('安裝後 fleet --version', /0\.1\.1/.test(fleetOut), fleetOut.trim().split('\n').pop()); // ---------- F-INST-1:根包自足(`npm i -g github:…#` 一條命令裝出可用 CLI) ---------- const coreManifest = manifestOf(core.file); diff --git a/tests/dsh/manifest.test.mjs b/tests/dsh/manifest.test.mjs index f7285baf..8394cf09 100644 --- a/tests/dsh/manifest.test.mjs +++ b/tests/dsh/manifest.test.mjs @@ -19,7 +19,7 @@ const client = read('client.js'); describe('P2 @mebular/dsh-plugin manifest:DSH bundle 形状', () => { it('package.json 标识、入口与 exports 完整', () => { expect(pkg.name).toBe('@mebular/dsh-plugin'); - expect(pkg.version).toBe('0.1.0'); + expect(pkg.version).toBe('0.1.1'); expect(pkg.license).toBe('MIT'); expect(pkg.type).toBe('module'); expect(pkg.main).toBe('index.js'); diff --git a/tests/mcp/console-embed.test.mjs b/tests/mcp/console-embed.test.mjs index 6848f75b..73f0d477 100644 --- a/tests/mcp/console-embed.test.mjs +++ b/tests/mcp/console-embed.test.mjs @@ -115,7 +115,7 @@ describe('P1 console embed:真实 HTTP server', () => { loopback: true, capabilities: { embedConsole: true }, }); - expect(APP_VERSION).toBe('0.1.0'); + expect(APP_VERSION).toBe('0.1.1'); const serialized = JSON.stringify(info).toLowerCase(); for (const word of ['token', 'secret', 'key', 'config', 'home']) { expect(serialized).not.toContain(word);