chrome-devtools-axi 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -80,6 +80,7 @@ Execute `npm i -g chrome-devtools-axi` and run `chrome-devtools-axi` for browser
80
80
  | `back` | Navigate back |
81
81
  | `wait <ms\|text>` | Wait for time or text to appear |
82
82
  | `eval <js>` | Evaluate JavaScript in page context |
83
+ | `run` | Execute a multi-step script from stdin |
83
84
 
84
85
  ### Interaction
85
86
 
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env tsx
2
+ import { getErrorMessage, runBridge } from "../src/bridge.js";
3
+ runBridge().catch((error) => {
4
+ process.stderr.write(`[chrome-devtools-axi] Fatal: ${getErrorMessage(error)}\n`);
5
+ process.exit(1);
6
+ });
7
+ //# sourceMappingURL=chrome-devtools-axi-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome-devtools-axi-bridge.js","sourceRoot":"","sources":["../../bin/chrome-devtools-axi-bridge.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env tsx
2
1
  /**
3
2
  * Persistent MCP bridge server for chrome-devtools-axi.
4
3
  *
@@ -10,4 +9,35 @@
10
9
  *
11
10
  * Writes a PID file to ~/.chrome-devtools-axi/bridge.pid on startup.
12
11
  */
12
+ import { type IncomingMessage, type Server, type ServerResponse } from "node:http";
13
+ export interface BridgeContentBlock {
14
+ type: string;
15
+ text?: string;
16
+ }
17
+ export interface BridgeCallPayload {
18
+ name: string;
19
+ args: Record<string, unknown>;
20
+ }
21
+ interface BridgeToolDescription {
22
+ name: string;
23
+ description?: string;
24
+ }
25
+ export interface BridgeClient {
26
+ listTools(): Promise<{
27
+ tools: BridgeToolDescription[];
28
+ }>;
29
+ callTool(request: {
30
+ name: string;
31
+ arguments: Record<string, unknown>;
32
+ }): Promise<unknown>;
33
+ close(): Promise<void>;
34
+ }
35
+ export declare function isBridgeClientConnected(client: BridgeClient): Promise<boolean>;
36
+ export declare function getErrorMessage(error: unknown): string;
37
+ export declare function extractToolText(content: BridgeContentBlock[]): string;
38
+ export declare function parseBridgeCallPayload(body: string): BridgeCallPayload;
39
+ export declare function resolveBridgeScript(importMetaDir: string): string;
40
+ export declare function handleBridgeRequest(client: BridgeClient, req: IncomingMessage, res: ServerResponse): Promise<void>;
41
+ export declare function createBridgeServer(client: BridgeClient): Server;
42
+ export declare function runBridge(port?: number): Promise<void>;
13
43
  export {};
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env tsx
2
1
  /**
3
2
  * Persistent MCP bridge server for chrome-devtools-axi.
4
3
  *
@@ -13,12 +12,21 @@
13
12
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
14
13
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
15
14
  import { createServer } from "node:http";
16
- import { mkdirSync, writeFileSync, unlinkSync } from "node:fs";
17
- import { join } from "node:path";
15
+ import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
16
+ import { join, resolve } from "node:path";
18
17
  import { homedir } from "node:os";
19
- const PORT = parseInt(process.env.CHROME_DEVTOOLS_AXI_PORT ?? "9224", 10);
18
+ const DEFAULT_PORT = Number.parseInt(process.env.CHROME_DEVTOOLS_AXI_PORT ?? "9224", 10);
20
19
  const STATE_DIR = join(homedir(), ".chrome-devtools-axi");
21
20
  const PID_FILE = join(STATE_DIR, "bridge.pid");
21
+ export async function isBridgeClientConnected(client) {
22
+ try {
23
+ await client.listTools();
24
+ return true;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ }
22
30
  function writePidFile(port) {
23
31
  mkdirSync(STATE_DIR, { recursive: true });
24
32
  writeFileSync(PID_FILE, JSON.stringify({ pid: process.pid, port }));
@@ -31,79 +39,151 @@ function removePidFile() {
31
39
  // Already gone — fine
32
40
  }
33
41
  }
34
- async function main() {
35
- // Connect to chrome-devtools-mcp via stdio
36
- const transport = new StdioClientTransport({
37
- command: "npx",
38
- args: ["-y", "chrome-devtools-mcp@latest", "--headless", "--isolated"],
39
- });
40
- const client = new Client({ name: "chrome-devtools-axi-bridge", version: "1.0.0" });
41
- await client.connect(transport);
42
- console.error(`[chrome-devtools-axi] Connected to chrome-devtools-mcp`);
43
- const server = createServer(async (req, res) => {
44
- res.setHeader("Content-Type", "application/json");
45
- if (req.method === "GET" && req.url === "/health") {
46
- res.end(JSON.stringify({ status: "ok" }));
47
- return;
42
+ export function getErrorMessage(error) {
43
+ return error instanceof Error ? error.message : String(error);
44
+ }
45
+ export function extractToolText(content) {
46
+ return content
47
+ .filter((block) => block.type === "text" && typeof block.text === "string")
48
+ .map((block) => block.text)
49
+ .join("\n");
50
+ }
51
+ function getToolContent(result) {
52
+ if (!result || typeof result !== "object" || !("content" in result) || !Array.isArray(result.content)) {
53
+ return [];
54
+ }
55
+ return result.content;
56
+ }
57
+ export function parseBridgeCallPayload(body) {
58
+ let payload;
59
+ try {
60
+ payload = JSON.parse(body);
61
+ }
62
+ catch {
63
+ throw new Error("Invalid bridge request payload");
64
+ }
65
+ if (typeof payload.name !== "string" || payload.name.length === 0) {
66
+ throw new Error("Invalid bridge request payload");
67
+ }
68
+ if (payload.args === undefined) {
69
+ return { name: payload.name, args: {} };
70
+ }
71
+ if (payload.args === null || typeof payload.args !== "object" || Array.isArray(payload.args)) {
72
+ throw new Error("Invalid bridge request payload");
73
+ }
74
+ return { name: payload.name, args: payload.args };
75
+ }
76
+ export function resolveBridgeScript(importMetaDir) {
77
+ const builtScript = resolve(importMetaDir, "../bin/chrome-devtools-axi-bridge.js");
78
+ const sourceScript = builtScript.replace(/\.js$/, ".ts");
79
+ return existsSync(sourceScript) ? sourceScript : builtScript;
80
+ }
81
+ async function readRequestBody(req) {
82
+ let body = "";
83
+ for await (const chunk of req) {
84
+ body += typeof chunk === "string" ? chunk : chunk.toString("utf-8");
85
+ }
86
+ return body;
87
+ }
88
+ function writeJson(res, statusCode, payload) {
89
+ res.statusCode = statusCode;
90
+ res.end(JSON.stringify(payload));
91
+ }
92
+ async function handleToolsRequest(client, res) {
93
+ const result = await client.listTools();
94
+ writeJson(res, 200, result.tools.map((tool) => ({
95
+ name: tool.name,
96
+ description: tool.description,
97
+ })));
98
+ }
99
+ async function handleCallRequest(client, req, res) {
100
+ const body = await readRequestBody(req);
101
+ const payload = parseBridgeCallPayload(body);
102
+ const result = await client.callTool({ name: payload.name, arguments: payload.args });
103
+ writeJson(res, 200, { result: extractToolText(getToolContent(result)) });
104
+ }
105
+ export async function handleBridgeRequest(client, req, res) {
106
+ res.setHeader("Content-Type", "application/json");
107
+ if (req.method === "GET" && req.url === "/health") {
108
+ if (await isBridgeClientConnected(client)) {
109
+ writeJson(res, 200, { status: "ok" });
110
+ }
111
+ else {
112
+ writeJson(res, 503, { error: "Not connected" });
48
113
  }
114
+ return;
115
+ }
116
+ try {
49
117
  if (req.method === "GET" && req.url === "/tools") {
50
- try {
51
- const result = await client.listTools();
52
- const tools = result.tools.map((t) => ({
53
- name: t.name,
54
- description: t.description,
55
- }));
56
- res.end(JSON.stringify(tools));
57
- }
58
- catch (err) {
59
- res.statusCode = 500;
60
- res.end(JSON.stringify({ error: err.message }));
61
- }
118
+ await handleToolsRequest(client, res);
62
119
  return;
63
120
  }
64
121
  if (req.method === "POST" && req.url === "/call") {
65
- let body = "";
66
- for await (const chunk of req)
67
- body += chunk;
68
- try {
69
- const { name, args } = JSON.parse(body);
70
- const result = await client.callTool({ name, arguments: args ?? {} });
71
- const parts = [];
72
- for (const block of result.content) {
73
- if (block.type === "text" && block.text)
74
- parts.push(block.text);
75
- }
76
- res.end(JSON.stringify({ result: parts.join("\n") }));
77
- }
78
- catch (err) {
79
- res.statusCode = 500;
80
- res.end(JSON.stringify({ error: err.message }));
81
- }
122
+ await handleCallRequest(client, req, res);
82
123
  return;
83
124
  }
84
- res.statusCode = 404;
85
- res.end(JSON.stringify({ error: "not found" }));
125
+ }
126
+ catch (error) {
127
+ writeJson(res, 500, { error: getErrorMessage(error) });
128
+ return;
129
+ }
130
+ writeJson(res, 404, { error: "not found" });
131
+ }
132
+ export function createBridgeServer(client) {
133
+ return createServer((req, res) => {
134
+ void handleBridgeRequest(client, req, res);
86
135
  });
87
- server.listen(PORT, "127.0.0.1", () => {
88
- writePidFile(PORT);
89
- console.error(`[chrome-devtools-axi] Listening on http://127.0.0.1:${PORT}`);
90
- // Signal readiness to parent
91
- console.log("READY");
136
+ }
137
+ function logBridgeMessage(message) {
138
+ process.stderr.write(`[chrome-devtools-axi] ${message}\n`);
139
+ }
140
+ function writeReadySignal() {
141
+ process.stdout.write("READY\n");
142
+ }
143
+ function createTransport() {
144
+ return new StdioClientTransport({
145
+ command: "npx",
146
+ args: ["-y", "chrome-devtools-mcp@latest", "--headless", "--isolated"],
147
+ });
148
+ }
149
+ function createBridgeClient() {
150
+ return new Client({ name: "chrome-devtools-axi-bridge", version: "1.0.0" });
151
+ }
152
+ async function closeServer(server) {
153
+ await new Promise((resolve, reject) => {
154
+ server.close((error) => {
155
+ if (error) {
156
+ reject(error);
157
+ }
158
+ else {
159
+ resolve();
160
+ }
161
+ });
162
+ });
163
+ }
164
+ export async function runBridge(port = DEFAULT_PORT) {
165
+ const transport = createTransport();
166
+ const client = createBridgeClient();
167
+ await client.connect(transport);
168
+ logBridgeMessage("Connected to chrome-devtools-mcp");
169
+ const server = createBridgeServer(client);
170
+ server.listen(port, "127.0.0.1", () => {
171
+ writePidFile(port);
172
+ logBridgeMessage(`Listening on http://127.0.0.1:${port}`);
173
+ writeReadySignal();
92
174
  });
93
- // Graceful shutdown
94
175
  const shutdown = async () => {
95
176
  removePidFile();
96
- server.close();
177
+ await closeServer(server);
97
178
  await client.close();
98
179
  await transport.close();
99
180
  process.exit(0);
100
181
  };
101
- process.on("SIGTERM", shutdown);
102
- process.on("SIGINT", shutdown);
103
- }
104
- main().catch((err) => {
105
- console.error(`[chrome-devtools-axi] Fatal: ${err}`);
106
- removePidFile();
107
- process.exit(1);
108
- });
182
+ process.on("SIGTERM", () => {
183
+ void shutdown();
184
+ });
185
+ process.on("SIGINT", () => {
186
+ void shutdown();
187
+ });
188
+ }
109
189
  //# sourceMappingURL=bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"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"}
package/dist/src/cli.d.ts CHANGED
@@ -21,7 +21,7 @@ export declare function parseFillFormArgs(args: string[]): {
21
21
  value: string;
22
22
  }[];
23
23
  };
24
- export interface EmulateArgs {
24
+ export interface EmulateArgs extends Record<string, unknown> {
25
25
  viewport?: string;
26
26
  colorScheme?: string;
27
27
  networkConditions?: string;