Skip to content

Commit 10cf616

Browse files
committed
Release v0.8.5 standalone quickstart
1 parent 463ef2c commit 10cf616

29 files changed

Lines changed: 1081 additions & 88 deletions

.github/workflows/release-mcp.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,14 @@ jobs:
8686
"README.zh-CN.md",
8787
"docs/GETTING_STARTED.md",
8888
"docs/GETTING_STARTED.zh-CN.md",
89+
"docs/DISTRIBUTION.md",
90+
"docs/DISTRIBUTION.zh-CN.md",
91+
"requirements-standalone.txt",
8992
"scripts/publish_native_backends.py",
9093
"scripts/verify_native_backends.py",
9194
"scripts/package_native_assets.py",
95+
"scripts/build_standalone.py",
96+
"scripts/package_quickstart.py",
9297
}
9398
missing = sorted(required - paths)
9499
if missing:
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
name: Release Standalone Binaries
2+
3+
on:
4+
push:
5+
tags: ["v*"]
6+
7+
env:
8+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
9+
10+
jobs:
11+
standalone:
12+
strategy:
13+
fail-fast: false
14+
matrix:
15+
include:
16+
- os: ubuntu-latest
17+
rid: linux-x64
18+
ext: ""
19+
- os: ubuntu-24.04-arm
20+
rid: linux-arm64
21+
ext: ""
22+
- os: macos-14
23+
rid: osx-arm64
24+
ext: ""
25+
- os: macos-15-intel
26+
rid: osx-x64
27+
ext: ""
28+
- os: windows-2022
29+
rid: win-x64
30+
ext: ".exe"
31+
- os: windows-11-arm
32+
rid: win-arm64
33+
ext: ".exe"
34+
runs-on: ${{ matrix.os }}
35+
permissions:
36+
contents: write
37+
steps:
38+
- uses: actions/checkout@v4
39+
40+
- uses: actions/setup-python@v5
41+
with:
42+
python-version: "3.11"
43+
44+
- uses: actions/setup-dotnet@v4
45+
with:
46+
dotnet-version: "8.0.x"
47+
48+
- name: Install build dependencies
49+
shell: bash
50+
run: |
51+
python -m pip install --upgrade pip
52+
pip install -r requirements.txt
53+
pip install -r requirements-standalone.txt
54+
55+
- name: Build standalone executable
56+
shell: bash
57+
run: |
58+
VERSION="${GITHUB_REF_NAME#v}"
59+
RID="${{ matrix.rid }}"
60+
PYTHONPATH=. python scripts/publish_native_backends.py "$RID" --clean --json
61+
PYTHONPATH=. python scripts/build_standalone.py --version "$VERSION" --rid "$RID" --json
62+
PYTHONPATH=. python scripts/package_quickstart.py --version "$VERSION" --rid "$RID" --json
63+
mkdir -p dist/standalone-assets
64+
cp "dist/standalone/$RID/word-ai${{ matrix.ext }}" "dist/standalone-assets/word-ai-standalone-${VERSION}-${RID}${{ matrix.ext }}"
65+
if command -v shasum >/dev/null 2>&1; then
66+
shasum -a 256 "dist/standalone-assets/word-ai-standalone-${VERSION}-${RID}${{ matrix.ext }}" "dist/quickstart/word-ai-quickstart-${VERSION}-${RID}."* > "dist/standalone-assets/word-ai-standalone-${VERSION}-${RID}-checksums.sha256"
67+
else
68+
sha256sum "dist/standalone-assets/word-ai-standalone-${VERSION}-${RID}${{ matrix.ext }}" "dist/quickstart/word-ai-quickstart-${VERSION}-${RID}."* > "dist/standalone-assets/word-ai-standalone-${VERSION}-${RID}-checksums.sha256"
69+
fi
70+
71+
- name: Smoke standalone executable
72+
shell: bash
73+
run: |
74+
RID="${{ matrix.rid }}"
75+
EXE="dist/standalone/$RID/word-ai${{ matrix.ext }}"
76+
SMOKE_OUT="${RUNNER_TEMP:-/tmp}/word-ai-standalone-smoke.jsonl"
77+
"$EXE" --version
78+
"$EXE" install-skill --dry-run
79+
printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"standalone-smoke","version":"0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}\n' | "$EXE" mcp --root "$PWD" > "$SMOKE_OUT"
80+
export SMOKE_OUT
81+
python - <<'PY'
82+
import json
83+
import os
84+
from pathlib import Path
85+
lines = [json.loads(line) for line in Path(os.environ["SMOKE_OUT"]).read_text().splitlines() if line.strip()]
86+
assert lines[0]["result"]["serverInfo"]["name"] == "word-ai-mcp"
87+
tools = lines[1]["result"]["tools"]
88+
assert len(tools) == 63
89+
print("standalone smoke passed")
90+
PY
91+
92+
- name: Upload standalone release assets
93+
env:
94+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
95+
shell: bash
96+
run: |
97+
for i in $(seq 1 60); do
98+
if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then
99+
break
100+
fi
101+
sleep 5
102+
done
103+
gh release upload "$GITHUB_REF_NAME" dist/standalone-assets/* dist/quickstart/* --clobber

README.md

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ AI systems are good at generating text, but Word documents are structured packag
3030
- **Structure validation** for package parts, content controls, tables, paragraphs, fields, comments, images, revisions, and protected body blocks.
3131
- **Python MCP facade and bridge runtime** for local agent integration, path policy, session queues, and distribution compatibility.
3232
- **.NET 8 Open XML SDK engine** as the authoritative offline DOCX transaction backend, using a packaged native binary or Release DLL when available.
33+
- **Single-file standalone binaries and quickstart bundles** for no-clone, no-venv, no-.NET-SDK offline DOCX editing and one-command Agent Skill installation.
3334
- **Office.js taskpane** for Word-side anchors, PatchSet preview, dry-run, apply, and open-document content-control editing with hash checks.
3435
- **Live Word session tools** (`word_session_*`) so Codex can read, preview, apply, and roll back edits in the currently open Word document through Office.js.
3536
- **Local HTTP bridge** secured by a local token and localhost-only CORS for Office add-in workflows.
@@ -58,17 +59,31 @@ The Office.js taskpane is the Word session layer. It creates and lists content c
5859
Use the most native distribution path your agent host supports:
5960

6061
1. **MCP Registry / MCPB first**: install the MCP server from the official MCP Registry using server name `io.github.flyfish-dev/word-ai`.
61-
2. **Agent Skill next**: install the `word-ai` Skill so Codex, Claude Code, and compatible agents know when to choose offline `docx_*` versus live `word_session_*`.
62-
3. **Local source install for full Word sessions**: use this when you need the Office.js taskpane, localhost bridge, .NET Open XML regression path, or development workflow.
63-
4. **npm as a secondary channel**: use npm only when your MCP host cannot consume MCP Registry/MCPB yet, or when you want a no-clone stdio server command.
62+
2. **Standalone quickstart for the lowest local setup cost**: download the current-platform GitHub Release bundle when you want one executable that can run MCP, install the Skill, and generate Codex config without a source checkout.
63+
3. **Agent Skill next**: install the `word-ai` Skill so Codex, Claude Code, and compatible agents know when to choose offline `docx_*` versus live `word_session_*`.
64+
4. **Local source install for full Word sessions**: use this when you need the Office.js taskpane, localhost bridge, .NET Open XML regression path, or development workflow.
65+
5. **npm as a secondary channel**: use npm only when your MCP host cannot consume MCP Registry/MCPB yet, or when you want a no-clone stdio server command.
6466

6567
MCP Registry details:
6668

6769
- Server name: `io.github.flyfish-dev/word-ai`
6870
- Registry metadata: [server.json](server.json)
69-
- MCPB package: `https://github.com/flyfish-dev/word-ai/releases/download/v0.8.4/word-ai-0.8.4.mcpb`
71+
- MCPB package: `https://github.com/flyfish-dev/word-ai/releases/download/v0.8.5/word-ai-0.8.5.mcpb`
7072
- Registry latest API: `https://registry.modelcontextprotocol.io/v0.1/servers/io.github.flyfish-dev%2Fword-ai/versions/latest`
7173

74+
Fast local setup with the standalone quickstart bundle:
75+
76+
```bash
77+
tar -xzf word-ai-quickstart-0.8.5-osx-arm64.tar.gz
78+
cd word-ai-quickstart-0.8.5-osx-arm64
79+
80+
./word-ai install-skill
81+
./word-ai codex-config --output .wordai/codex-config.toml
82+
./word-ai mcp --root "$PWD" --allow-root "$HOME/Downloads" --allow-root "$HOME/Documents"
83+
```
84+
85+
Choose the artifact matching your platform: `linux-x64`, `linux-arm64`, `osx-arm64`, `osx-x64`, `win-x64`, or `win-arm64`. See [Distribution](docs/DISTRIBUTION.md) for the complete release asset policy.
86+
7287
Install the Skill and full local runtime:
7388

7489
```bash
@@ -134,7 +149,7 @@ Offline file transactions use the .NET Open XML backend by default when it is av
134149
3. Local source project via `dotnet run --project dotnet/WordAi.OpenXml/WordAi.OpenXml.csproj`.
135150
4. Python OOXML fallback only when .NET is unavailable and `WORD_AI_ENGINE=auto`.
136151

137-
MCPB and GitHub Release assets include self-contained native backends for `osx-arm64`, `osx-x64`, `linux-x64`, `linux-arm64`, `linux-musl-x64`, `linux-musl-arm64`, `win-x64`, and `win-arm64`. Word AI detects the current RID, including Linux glibc vs musl, and loads the matching binary automatically. The npm launcher keeps the package small: on first run it downloads only the current-platform native archive from the GitHub Release, verifies the SHA-256 checksum, caches it under the user cache, and sets `WORD_AI_DOTNET_NATIVE_DIR`. Advanced deployments can override detection with `WORD_AI_DOTNET_RID`, `WORD_AI_DOTNET_EXE`, or `WORD_AI_DOTNET_NATIVE_DIR`; set `WORD_AI_SKIP_NATIVE_DOWNLOAD=1` to disable npm native downloads.
152+
MCPB and GitHub Release assets include self-contained native backends for `osx-arm64`, `osx-x64`, `linux-x64`, `linux-arm64`, `linux-musl-x64`, `linux-musl-arm64`, `win-x64`, and `win-arm64`. Standalone quickstart bundles are built for standard hosted platforms: `linux-x64`, `linux-arm64`, `osx-arm64`, `osx-x64`, `win-x64`, and `win-arm64`. Word AI detects the current RID, including Linux glibc vs musl for native backend loading, and loads the matching binary automatically. The npm launcher keeps the package small: on first run it downloads only the current-platform native archive from the GitHub Release, verifies the SHA-256 checksum, caches it under the user cache, and sets `WORD_AI_DOTNET_NATIVE_DIR`. Advanced deployments can override detection with `WORD_AI_DOTNET_RID`, `WORD_AI_DOTNET_EXE`, or `WORD_AI_DOTNET_NATIVE_DIR`; set `WORD_AI_SKIP_NATIVE_DOWNLOAD=1` to disable npm native downloads.
138153

139154
Control it with `WORD_AI_ENGINE=auto|dotnet|python`, or pass `engine` to `docx_assess_patchset`, `docx_dry_run_patchset`, `docx_apply_patchset`, and `docx_validate`. Use `WORD_AI_ENGINE=dotnet` in production to fail fast instead of silently falling back.
140155

@@ -176,9 +191,10 @@ After installation, start a new agent session or restart the client if the skill
176191
Word AI is published for discovery through the official MCP Registry and MCPB distribution. Prefer this channel for MCP host installation because it carries standardized server metadata, versioning, transport details, and provenance:
177192

178193
- MCP server name: `io.github.flyfish-dev/word-ai`
179-
- MCPB package: `https://github.com/flyfish-dev/word-ai/releases/download/v0.8.4/word-ai-0.8.4.mcpb`
194+
- MCPB package: `https://github.com/flyfish-dev/word-ai/releases/download/v0.8.5/word-ai-0.8.5.mcpb`
180195
- Registry metadata: [server.json](server.json)
181196
- Publishing guide: [MCP Registry Publishing](docs/REGISTRY_PUBLISHING.md)
197+
- Standalone and quickstart guide: [Distribution](docs/DISTRIBUTION.md)
182198

183199
Local container smoke test:
184200

@@ -190,7 +206,7 @@ docker run --rm -i \
190206
word-ai:local
191207
```
192208

193-
The MCP Registry release uses a public MCPB artifact for one-click-friendly local server installation. The MCPB package requires Python 3.10+ and bootstraps a local virtual environment on first run. The Dockerfile remains available for local or self-hosted builds. For full Office.js live-session editing, use the local install path because the Word taskpane and localhost bridge must run on the user's machine.
209+
The MCP Registry release uses a public MCPB artifact for one-click-friendly local server installation. The standalone quickstart bundle is the lowest-friction local command path because it embeds the Python facade, dependencies, current-platform .NET Open XML backend, schemas, and Skill template in one executable. The MCPB package requires Python 3.10+ and bootstraps a local virtual environment on first run. The Dockerfile remains available for local or self-hosted builds. For full Office.js live-session editing, use the local source install path because the Word taskpane and localhost bridge must run on the user's machine.
194210

195211
## Secondary npm Channel
196212

@@ -364,13 +380,15 @@ docx_health_check
364380

365381
- [Documentation Index](docs/README.md)
366382
- [Getting Started](docs/GETTING_STARTED.md)
383+
- [Distribution](docs/DISTRIBUTION.md)
367384
- [Word AI Codex Skill](skills/word-ai/SKILL.md)
368385
- [Architecture](docs/ARCHITECTURE.en.md)
369386
- [Tool Contract](docs/TOOL_CONTRACT.md)
370387
- [Security Design](docs/SECURITY.en.md)
371388
- [QA Report](docs/QA_REPORT.md)
372389
- [Validation Matrix](docs/VALIDATION_MATRIX.md)
373390
- [MCP Registry Publishing](docs/REGISTRY_PUBLISHING.md)
391+
- [v0.8.5 Changelog](docs/CHANGELOG_V085.md)
374392
- [v0.8.4 Changelog](docs/CHANGELOG_V084.md)
375393
- [v0.8.3 Changelog](docs/CHANGELOG_V083.md)
376394
- [v0.8.1 Changelog](docs/CHANGELOG_V081.md)

0 commit comments

Comments
 (0)