Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
74 changes: 68 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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`,
Expand Down Expand Up @@ -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
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,14 @@ Memory and tasks stay on your devices; devices sync directly.
<table width="100%">
<thead>
<tr>
<th align="left" width="30%">Desktop app · v0.1.0</th>
<th align="left" width="30%">Desktop app · v0.1.1</th>
<th align="left">Download &amp; first launch</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Unsigned first release</strong><br><sub>macOS Universal · Windows x64 · Linux x64</sub></td>
<td><a href="https://github.com/Windsander/Mebular/releases/tag/v0.1.0">Download from GitHub Releases</a><br><sub>Verify with <code>SHA256SUMS.txt</code>. macOS: right-click → <strong>Open</strong>. Windows: <strong>More info → Run anyway</strong>. Bundles Electron and its runtime.</sub></td>
<td><strong>Unsigned release</strong><br><sub>macOS Universal · Windows x64 · Linux x64</sub></td>
<td><a href="https://github.com/Windsander/Mebular/releases/tag/v0.1.1">Download from GitHub Releases</a><br><sub>Verify with <code>SHA256SUMS.txt</code>. macOS: right-click → <strong>Open</strong>. Windows: <strong>More info → Run anyway</strong>. Bundles Electron and its runtime.</sub></td>
</tr>
</tbody>
</table>
Expand Down Expand Up @@ -135,7 +135,7 @@ mebular print-config --client opencode # MCP config

<p align="center"><strong>Use with DSH</strong><br>
Keep the Mebular app running, then install the plugin from npm into DSH's web profile:<br>
<code>dsh plugin --profile web add @mebular/dsh-plugin@0.1.0</code><br>
<code>dsh plugin --profile web add @mebular/dsh-plugin@0.1.1</code><br>
A Mebular sidebar panel embeds the same Console through <code>?embed=dsh</code> (loopback only), and the official MCP client reaches the same graph. The plugin discovers the daemon by <code>daemonUrl &gt; MEBULAR_HTTP_PORT &gt; runtime.json &gt; 7331</code>, 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 <code>packages/dsh-plugin</code> instead.<br>
Listed on <a href="https://github.com/awesome-dsh-plugin/awesome-dsh-plugin">awesome-dsh-plugin</a> under <code>memory</code>.<br>
<a href="packages/dsh-plugin/README.md">DSH plugin guide →</a> · <a href="docs/integrations/DSH.md">Integration notes →</a></p>
Expand Down Expand Up @@ -172,6 +172,6 @@ Runnable examples: [`examples/quickstart`](examples/quickstart/index.mjs) writes

<div align="center">

v0.1.0 · early · MIT
v0.1.1 · early · MIT

</div>
10 changes: 5 additions & 5 deletions README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,14 @@
<table width="100%">
<thead>
<tr>
<th align="left" width="30%">桌面 App · v0.1.0</th>
<th align="left" width="30%">桌面 App · v0.1.1</th>
<th align="left">下载与首次打开</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>首发版 · 未签名</strong><br><sub>macOS Universal · Windows x64 · Linux x64</sub></td>
<td><a href="https://github.com/Windsander/Mebular/releases/tag/v0.1.0">从 GitHub Releases 下载</a><br><sub>用 <code>SHA256SUMS.txt</code> 校验。macOS:右键 →「打开」;Windows:「更多信息 → 仍要运行」。自带 Electron 与 runtime。</sub></td>
<td><strong>未签名发布</strong><br><sub>macOS Universal · Windows x64 · Linux x64</sub></td>
<td><a href="https://github.com/Windsander/Mebular/releases/tag/v0.1.1">从 GitHub Releases 下载</a><br><sub>用 <code>SHA256SUMS.txt</code> 校验。macOS:右键 →「打开」;Windows:「更多信息 → 仍要运行」。自带 Electron 与 runtime。</sub></td>
</tr>
</tbody>
</table>
Expand Down Expand Up @@ -135,7 +135,7 @@ mebular print-config --client opencode # MCP 配置

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

<div align="center">

v0.1.0 · early · MIT
v0.1.1 · early · MIT

</div>
6 changes: 3 additions & 3 deletions RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
8 changes: 4 additions & 4 deletions apps/desktop/README.md
Original file line number Diff line number Diff line change
@@ -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)。

Expand All @@ -13,7 +13,7 @@ Electron 薄壳:把**既有控制台**(`127.0.0.1:<port>/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
Expand All @@ -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` 到
Expand Down Expand Up @@ -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)。
Expand Down
4 changes: 2 additions & 2 deletions apps/desktop/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion apps/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion apps/desktop/src/main/daemon.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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 决定。 */
Expand Down
Loading
Loading