mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-11-13 20:25:53 +08:00
[feat] synchronize client and agent component versions
This commit is contained in:
1 parent
2a9faf1eb1
commit
b1236534ac
28 files changed
+548
-37
No files matched your search
@@ -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
@@ -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",
|
||||
|
||||
Generated
+2
-2
@@ -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,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",
|
||||
|
||||
@@ -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" },
|
||||
};
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
Reference in new issue
Block a user