























@@ -1,91 +1,4 @@
1-import fs from "node:fs/promises";
2-import http from "node:http";
3-import { createRequire } from "node:module";
4-import os from "node:os";
5-import path from "node:path";
6-import {
7-writeBundleProbeMcpServer,
8-writeClaudeBundle,
9-writeExecutable,
10-} from "./bundle-mcp-shared.test-harness.js";
11-12-const require = createRequire(import.meta.url);
13-const SDK_SERVER_MCP_PATH = require.resolve("@modelcontextprotocol/sdk/server/mcp.js");
14-const SDK_SERVER_SSE_PATH = require.resolve("@modelcontextprotocol/sdk/server/sse.js");
15-16-const tempDirs: string[] = [];
17-181export async function cleanupBundleMcpHarness(): Promise<void> {
192const { __testing } = await import("./pi-bundle-mcp-tools.js");
203await __testing.resetSessionMcpRuntimeManager();
21-await Promise.all(tempDirs.splice(0).map((dir) => fs.rm(dir, { recursive: true, force: true })));
22-}
23-24-export async function makeTempDir(prefix: string): Promise<string> {
25-const dir = await fs.mkdtemp(path.join(os.tmpdir(), prefix));
26-tempDirs.push(dir);
27-return dir;
28-}
29-30-export { writeBundleProbeMcpServer, writeClaudeBundle, writeExecutable };
31-32-export async function waitForFileText(filePath: string, timeoutMs = 5_000): Promise<string> {
33-const start = Date.now();
34-while (Date.now() - start < timeoutMs) {
35-const content = await fs.readFile(filePath, "utf8").catch(() => undefined);
36-if (content != null) {
37-return content;
38-}
39-await new Promise((resolve) => setTimeout(resolve, 5));
40-}
41-throw new Error(`Timed out waiting for ${filePath}`);
42-}
43-44-export async function startSseProbeServer(
45-probeText = "FROM-SSE",
46-): Promise<{ port: number; close: () => Promise<void> }> {
47-const { McpServer } = await import(SDK_SERVER_MCP_PATH);
48-const { SSEServerTransport } = await import(SDK_SERVER_SSE_PATH);
49-50-const mcpServer = new McpServer({ name: "sse-probe", version: "1.0.0" });
51-mcpServer.tool("sse_probe", "SSE MCP probe", async () => {
52-return {
53-content: [{ type: "text", text: probeText }],
54-};
55-});
56-57-let sseTransport:
58-| {
59-handlePostMessage: (req: http.IncomingMessage, res: http.ServerResponse) => Promise<void>;
60-}
61-| undefined;
62-const httpServer = http.createServer(async (req, res) => {
63-if (req.url === "/sse") {
64-sseTransport = new SSEServerTransport("/messages", res);
65-await mcpServer.connect(sseTransport);
66-} else if (req.url?.startsWith("/messages") && req.method === "POST") {
67-if (sseTransport) {
68-await sseTransport.handlePostMessage(req, res);
69-} else {
70-res.writeHead(400).end("No SSE session");
71-}
72-} else {
73-res.writeHead(404).end();
74-}
75-});
76-77-await new Promise<void>((resolve) => {
78-httpServer.listen(0, "127.0.0.1", resolve);
79-});
80-const address = httpServer.address();
81-const port = typeof address === "object" && address ? address.port : 0;
82-83-return {
84- port,
85-close: async () => {
86-await new Promise<void>((resolve, reject) =>
87-httpServer.close((error) => (error ? reject(error) : resolve())),
88-);
89-},
90-};
914}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。