[feat] synchronize client and agent component versions

This commit is contained in:
dijunkun committed 2026-11-12 12:36:53 +08:00
1 parent 2a9faf1eb1
commit b1236534ac
28 files changed
+548 -37

No files matched your search

+2 -2
View File
@@ -6,7 +6,7 @@
## 版本与依赖
MCP 包 `@chunkdash/crossdesk-mcp` 0.1.0 绑定原生 CLI 0.2.0,内置 DSH 插件随 MCP 同包分发。源码版本和本地打包不代表版本已经发布到 npm;内含原生程序的平台安装包可独立分发。
CLI、MCP 包 `@chunkdash/crossdesk-mcp` 和内置 DSH 插件共用版本,当前均为 0.2.0,MCP 原生依赖也固定为 0.2.0。使用[版本脚本](../../docs/VERSIONING.md)修改任一工具版本会同步整个分组。源码版本和本地打包不代表版本已经发布到 npm;内含原生程序的平台安装包可独立分发。
当前提供 31 个模型工具和 11 个 MCP Apps 面板专用接口。本机 MCP 接入使用 stdio,不提供 MCP Streamable HTTP 或通用远程 shell 工具。控制端原生 CLI、被控端和信令服务器需要支持对应自动化协议。
@@ -497,7 +497,7 @@ npm run pack:npm -- --native-package-dir "$native_package_dir/package" --out-dir
rm -rf "$native_package_dir"
```
平台包保留原生包的程序、源码、许可和构建信息,设置对应 OS / CPU / libc 限制,不再下载原生平台依赖;其他 JavaScript 依赖仍由包管理器安装。CLI 构建工作流为每个平台生成 `crossdesk-mcp-<平台>` 产物;平台安装包要求实际传入的原生包与 MCP 的依赖版本一致。通用包和平台包名称、版本相同,应放在不同输出目录,不要将平台包当成通用版本发布到 npm。
平台包保留原生包的程序、源码、许可和构建信息,设置对应 OS / CPU / libc 限制,不再下载原生平台依赖;其他 JavaScript 依赖仍由包管理器安装。CLI 构建工作流为每个平台生成 `crossdesk-mcp-<平台>` 产物,CLI、MCP、DSH 和原生依赖版本不一致时直接停止构建或打包。通用包和平台包名称、版本相同,应放在不同输出目录,不要将平台包当成通用版本发布到 npm。
原生 `doctor` 必须同时声明自动化协议和 `automation_video_protocols: ["h264-annexb/1", "nv12/1"]`、`automation_video_decoders: ["auto", "software"]`,以及 `automation_video_transport: "loopback-websocket/1"`、`automation_terminal_protocol: "ansi/1"`。通用 npm 分发需要先发布对应 0.2.0 平台包,再发布 MCP;内含原生程序的平台包不受此顺序限制。构建通过不等于各宿主和设备上的联调完成。
+6 -6
View File
@@ -31,7 +31,7 @@ DSH 和 Codex 都使用下表中的**平台安装包**,其中已包含所需
1. 登录 GitHub,打开 [CrossDesk 构建页面](https://github.com/kunkundi/crossdesk/actions/workflows/build-cli.yml)。
2. 选择一次成功的运行,在页面的 **Artifacts** 区域下载与你的本机对应的文件。
3. 解压下载的 `.zip`,取出里面的 `.tgz` 安装包,例如 `chunkdash-crossdesk-mcp-0.1.0.tgz`。保留 `.tgz`,安装时直接使用它。
3. 解压下载的 `.zip`,取出里面的 `.tgz` 安装包,例如 `chunkdash-crossdesk-mcp-0.2.0.tgz`。保留 `.tgz`,安装时直接使用它。
GitHub 要求登录后才能下载构建产物,操作说明见 [下载构建产物](https://docs.github.com/en/actions/how-tos/manage-workflow-runs/download-workflow-artifacts)。
@@ -47,7 +47,7 @@ Mac 可在“关于本机”中查看芯片;Windows 可在“设置 → 系统
不同平台解压后的 `.tgz` 文件名相同,请以下载时的产物名称区分。如果某次运行没有表中对应的产物,选择另一次提供该产物的运行;也可以按 [源码构建说明](DEVELOPMENT.md#从源码运行) 自行构建。
下文以 `0.1.0` 为例。**所有 `/absolute/path/...` 都需要换成自己电脑上的完整路径**,版本号也应与实际下载的文件一致。路径中有空格时保留引号。
下文以 `0.2.0` 为例。**所有 `/absolute/path/...` 都需要换成自己电脑上的完整路径**,版本号也应与实际下载的文件一致。路径中有空格时保留引号。
<a id="install-dsh"></a>
@@ -58,7 +58,7 @@ Mac 可在“关于本机”中查看芯片;Windows 可在“设置 → 系统
在 Harness 的插件页面选择本地 `.tgz` 安装包,或在终端执行:
```sh
dsh plugin --profile desktop add "/absolute/path/chunkdash-crossdesk-mcp-0.1.0.tgz"
dsh plugin --profile desktop add "/absolute/path/chunkdash-crossdesk-mcp-0.2.0.tgz"
```
这个插件包会自动提供 MCP 工具和侧栏画面,无需另外安装 Node.js、原生 CLI 或填写 MCP 启动配置。
@@ -66,7 +66,7 @@ dsh plugin --profile desktop add "/absolute/path/chunkdash-crossdesk-mcp-0.1.0.t
如果 macOS 终端提示找不到 `dsh`,可使用应用自带的命令:
```sh
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" plugin --profile desktop add "/absolute/path/chunkdash-crossdesk-mcp-0.1.0.tgz"
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" plugin --profile desktop add "/absolute/path/chunkdash-crossdesk-mcp-0.2.0.tgz"
```
上述命令对应默认安装位置和 `desktop` 配置。使用自定义安装位置或 profile 时替换为自己的值。
@@ -93,7 +93,7 @@ macOS / Linux:
mkdir -p "$HOME/crossdesk-mcp"
cd "$HOME/crossdesk-mcp"
npm init -y
npm install "/absolute/path/chunkdash-crossdesk-mcp-0.1.0.tgz"
npm install "/absolute/path/chunkdash-crossdesk-mcp-0.2.0.tgz"
```
Windows PowerShell:
@@ -102,7 +102,7 @@ Windows PowerShell:
New-Item -ItemType Directory -Force "$env:USERPROFILE/crossdesk-mcp"
Set-Location "$env:USERPROFILE/crossdesk-mcp"
npm init -y
npm install "C:/Downloads/chunkdash-crossdesk-mcp-0.1.0.tgz"
npm install "C:/Downloads/chunkdash-crossdesk-mcp-0.2.0.tgz"
```
安装完成后,在同一目录运行:
@@ -8,7 +8,7 @@
2. 在 Harness 桌面版的插件页面安装该文件,或执行以下命令。将示例中的路径和版本号替换为实际文件:
```sh
dsh plugin --profile desktop add "/absolute/path/chunkdash-crossdesk-mcp-0.1.0.tgz"
dsh plugin --profile desktop add "/absolute/path/chunkdash-crossdesk-mcp-0.2.0.tgz"
```
3. 重启 Harness,确认 CrossDesk 插件已启用。
@@ -1,6 +1,6 @@
{
"name": "@chunkdash/dsh-crossdesk-sidebar",
"version": "0.1.0",
"version": "0.2.0",
"description": "Open CrossDesk remote desktop panels in DeepSeek Harness Desktop's sidebar",
"type": "module",
"main": "dist/host.js",
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "@chunkdash/crossdesk-mcp",
"version": "0.1.0",
"version": "0.2.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@chunkdash/crossdesk-mcp",
"version": "0.1.0",
"version": "0.2.0",
"license": "GPL-3.0-only",
"dependencies": {
"@modelcontextprotocol/client": "2.4.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@chunkdash/crossdesk-mcp",
"version": "0.1.0",
"version": "0.2.0",
"private": true,
"type": "module",
"description": "Local CrossDesk MCP tools and remote desktop panels",
+8 -3
View File
@@ -23,12 +23,17 @@ const { values } = parseArgs({ options: {
const output = resolve(values["out-dir"] ?? join(repository, "build/npm-mcp"));
const project = JSON.parse(await readFile(join(root, "package.json"), "utf8"));
const cli = JSON.parse(await readFile(join(root, "../cli/package.json"), "utf8"));
const harness = JSON.parse(await readFile(join(root, "integrations/deepseek-harness/package.json"), "utf8"));
const platforms = JSON.parse(
await readFile(join(root, "../cli/npm/platforms.json"), "utf8"),
);
const native = await import(new URL("../dist/native.js", import.meta.url));
if (native.NATIVE_VERSION !== cli.version)
throw new Error("MCP and CLI native versions must match.");
const nativeVersion = (await readFile(join(root, "src/native.ts"), "utf8"))
.match(/export const NATIVE_VERSION = "([^"]+)";/)?.[1];
if (project.version !== cli.version || project.version !== harness.version || project.version !== nativeVersion)
throw new Error("CLI, MCP, DSH and NATIVE_VERSION must match. Run python3 scripts/version.py set mcp VERSION from the repository root.");
if (!nativeVersion || native.NATIVE_VERSION !== nativeVersion)
throw new Error("Built MCP native version differs from source. Run npm run build first.");
for (const file of ["main.js", "viewer-browser.html", "viewer-apps.html", "harness.js", "harness-client.js"])
await access(join(root, "dist", file));
const staging = await mkdtemp(join(tmpdir(), "crossdesk-mcp-pack-"));
@@ -72,7 +77,7 @@ try {
"LICENSE",
],
optionalDependencies: Object.fromEntries(
Object.values(platforms).map((p) => [p.packageName, cli.version]),
Object.values(platforms).map((p) => [p.packageName, nativeVersion]),
),
publishConfig: { access: "public" },
};
+2 -1
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env node
import { parseArgs } from "node:util";
import { VERSION } from "./version.js";
import { createInterface } from "node:readline/promises";
import { Writable } from "node:stream";
import {
@@ -149,7 +150,7 @@ async function main() {
},
});
if (values.version) {
process.stdout.write("0.1.0\n");
process.stdout.write(`${VERSION}\n`);
return;
}
if (values.help || !positionals.length) {
+2 -1
View File
@@ -1,4 +1,5 @@
import { readFile } from "node:fs/promises";
import { VERSION } from "./version.js";
import { z } from "zod";
import { McpServer } from "@modelcontextprotocol/server";
import type {
@@ -80,7 +81,7 @@ export function createServer(
terminal: TerminalPanel,
): McpServer {
const server = new McpServer(
{ name: "crossdesk-mcp", version: "0.1.0" },
{ name: "crossdesk-mcp", version: VERSION },
{
capabilities: { tools: {}, resources: {} },
instructions:
+5
View File
@@ -0,0 +1,5 @@
import { readFileSync } from "node:fs";
export const VERSION: string = JSON.parse(
readFileSync(new URL("../package.json", import.meta.url), "utf8"),
).version;