ScuttleBot

Blame History Raw 130 lines
1
"use strict";
2
var __create = Object.create;
3
var __defProp = Object.defineProperty;
4
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
var __getOwnPropNames = Object.getOwnPropertyNames;
6
var __getProtoOf = Object.getPrototypeOf;
7
var __hasOwnProp = Object.prototype.hasOwnProperty;
8
var __export = (target, all) => {
9
for (var name in all)
10
__defProp(target, name, { get: all[name], enumerable: true });
11
};
12
var __copyProps = (to, from, except, desc) => {
13
if (from && typeof from === "object" || typeof from === "function") {
14
for (let key of __getOwnPropNames(from))
15
if (!__hasOwnProp.call(to, key) && key !== except)
16
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
}
18
return to;
19
};
20
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
// If the importer is in node compatibility mode or this is not an ESM
22
// file that has been converted to a CommonJS file using a Babel-
23
// compatible transform (i.e. "__esModule" has not been set), then set
24
// "default" to the CommonJS "module.exports" for node compatibility.
25
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
mod
27
));
28
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
var daemon_exports = {};
30
__export(daemon_exports, {
31
startMcpDaemonServer: () => startMcpDaemonServer
32
});
33
module.exports = __toCommonJS(daemon_exports);
34
var import_promises = __toESM(require("fs/promises"));
35
var import_net = __toESM(require("net"));
36
var import_os = __toESM(require("os"));
37
var import_path = __toESM(require("path"));
38
var import_url = __toESM(require("url"));
39
var import_utilsBundle = require("playwright-core/lib/utilsBundle");
40
var import_socketConnection = require("./socketConnection");
41
var import_commands = require("./commands");
42
var import_command = require("./command");
43
const daemonDebug = (0, import_utilsBundle.debug)("pw:daemon");
44
async function socketExists(socketPath) {
45
try {
46
const stat = await import_promises.default.stat(socketPath);
47
if (stat?.isSocket())
48
return true;
49
} catch (e) {
50
}
51
return false;
52
}
53
async function startMcpDaemonServer(socketPath, serverBackendFactory) {
54
if (import_os.default.platform() !== "win32" && await socketExists(socketPath)) {
55
daemonDebug(`Socket already exists, removing: ${socketPath}`);
56
try {
57
await import_promises.default.unlink(socketPath);
58
} catch (error) {
59
daemonDebug(`Failed to remove existing socket: ${error}`);
60
throw error;
61
}
62
}
63
const backend = serverBackendFactory.create();
64
const cwd = import_url.default.pathToFileURL(process.cwd()).href;
65
await backend.initialize?.({
66
name: "playwright-cli",
67
version: "1.0.0",
68
roots: [{
69
uri: cwd,
70
name: "cwd"
71
}],
72
timestamp: Date.now()
73
});
74
await import_promises.default.mkdir(import_path.default.dirname(socketPath), { recursive: true });
75
const server = import_net.default.createServer((socket) => {
76
daemonDebug("new client connection");
77
const connection = new import_socketConnection.SocketConnection(socket);
78
connection.onclose = () => {
79
daemonDebug("client disconnected");
80
};
81
connection.onmessage = async (message) => {
82
const { id, method, params } = message;
83
try {
84
daemonDebug("received command", method);
85
if (method === "runCliCommand") {
86
const { toolName, toolParams } = parseCliCommand(params.args);
87
const response = await backend.callTool(toolName, toolParams, () => {
88
});
89
await connection.send({ id, result: formatResult(response) });
90
} else {
91
throw new Error(`Unknown method: ${method}`);
92
}
93
} catch (e) {
94
daemonDebug("command failed", e);
95
await connection.send({ id, error: e.message });
96
}
97
};
98
});
99
return new Promise((resolve, reject) => {
100
server.on("error", (error) => {
101
daemonDebug(`server error: ${error.message}`);
102
reject(error);
103
});
104
server.listen(socketPath, () => {
105
daemonDebug(`daemon server listening on ${socketPath}`);
106
resolve(socketPath);
107
});
108
});
109
}
110
function formatResult(result) {
111
const lines = [];
112
for (const content of result.content) {
113
if (content.type === "text")
114
lines.push(content.text);
115
else
116
lines.push(`<${content.type} content>`);
117
}
118
return lines.join("\n");
119
}
120
function parseCliCommand(args) {
121
const command = import_commands.commands[args._[0]];
122
if (!command)
123
throw new Error("Command is required");
124
return (0, import_command.parseCommand)(command, args);
125
}
126
// Annotate the CommonJS export names for ESM import in node:
127
0 && (module.exports = {
128
startMcpDaemonServer
129
});
130

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button