@tianshu-ai/local-bridge 0.1.0 → 0.3.0

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
@@ -22,19 +22,30 @@ your machine tianshu server
22
22
 
23
23
  ## Install & run
24
24
 
25
- Open the **Local Bridge** panel in tianshu, copy the command it shows,
26
- and run it on your machine:
25
+ Install globally, then use the short `tsbridge` command:
26
+
27
+ ```bash
28
+ npm i -g @tianshu-ai/local-bridge
29
+ tsbridge --server wss://your-tianshu.example.com/ws --token ***
30
+ ```
31
+
32
+ Or run one-off with `npx` (no install):
27
33
 
28
34
  ```bash
29
35
  npx @tianshu-ai/local-bridge --server wss://your-tianshu.example.com/ws --token ***
30
36
  ```
31
37
 
38
+ The **Local Bridge** panel in tianshu shows a ready-to-copy command with
39
+ your server URL + token filled in.
40
+
32
41
  For a local dev server with auth off, the token is optional:
33
42
 
34
43
  ```bash
35
- npx @tianshu-ai/local-bridge --server ws://localhost:3110/ws
44
+ tsbridge --server ws://localhost:3110/ws
36
45
  ```
37
46
 
47
+ > The `tsbridge` and `tianshu-local-bridge` commands are equivalent.
48
+
38
49
  ### Flags
39
50
 
40
51
  | flag | meaning |
package/dist/browser.js CHANGED
@@ -144,15 +144,25 @@ export function makeBrowserTools(cfg) {
144
144
  const screenshot = {
145
145
  descriptor: {
146
146
  name: "browser_screenshot",
147
- description: "Capture a screenshot of the current page (saved on the bridge host).",
148
- inputSchema: { type: "object", properties: {} },
147
+ description: "Capture a screenshot of the current page. The image travels back to the server and is saved to your workspace; the tool returns its path (call bridge_view_image to look at it).",
148
+ inputSchema: {
149
+ type: "object",
150
+ properties: { fullPage: { type: "boolean", description: "Capture the full scrollable page (default false)." } },
151
+ },
149
152
  },
150
- async run() {
153
+ async run(args) {
151
154
  if (!state.page || state.page.isClosed())
152
155
  return textResult("no page open — call browser_navigate first", true);
153
- const path = `/tmp/tianshu-local-bridge-shot-${Date.now()}.png`;
154
- await state.page.screenshot({ path, fullPage: false });
155
- return textResult(`screenshot saved on the bridge host at ${path}`);
156
+ const buf = await state.page.screenshot({ fullPage: args.fullPage === true, type: "png" });
157
+ // Return the bytes as an MCP image block so the server can save
158
+ // them under the user's workspace. Bytes do NOT enter the agent
159
+ // context by default — the server stores + surfaces only a path.
160
+ return {
161
+ content: [
162
+ { type: "text", text: `screenshot of ${state.page.url()}` },
163
+ { type: "image", data: buf.toString("base64"), mimeType: "image/png" },
164
+ ],
165
+ };
156
166
  },
157
167
  };
158
168
  return [navigate, getText, click, screenshot];
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,8 +2,10 @@
2
2
  // @tianshu-ai/local-bridge — dial into a tianshu server and expose local
3
3
  // tools (browser, …) to the agent via reverse-MCP.
4
4
  //
5
- // Usage:
6
- // npx @tianshu-ai/local-bridge --server wss://tianshu.example.com/ws --token ***
5
+ // Install globally, then run `tsbridge`:
6
+ // npm i -g @tianshu-ai/local-bridge
7
+ // tsbridge --server wss://tianshu.example.com/ws --token ***
8
+ // Or one-off via npx:
7
9
  // npx @tianshu-ai/local-bridge --server ws://localhost:3110/ws (dev, no auth)
8
10
  //
9
11
  // Flags:
@@ -11,17 +13,22 @@
11
13
  // --token <token> connection token from the Local Bridge panel
12
14
  // --device <id> stable device id (default: hostname)
13
15
  // --label <name> human label shown in the panel (default: device id)
14
- // --no-browser don't expose browser tools (echo only)
15
- // --headless run the browser without a window (default: headful)
16
- // --cdp <url> connect to an already-running Chrome's CDP endpoint
17
- // (default probe: http://127.0.0.1:9222). Set to "off"
18
- // to skip and always launch.
19
- // --chrome-channel which installed browser to launch: chrome (default),
20
- // msedge, chrome-beta, … (never downloads Chromium)
21
- // --user-data-dir reuse a Chrome profile dir so logins carry over
16
+ // --no-browser don't expose browser tools (echo only)
17
+ // --browser-engine own | stealth (default: own)
18
+ // own = your system/running Chrome (no download,
19
+ // real cookies+fingerprint)
20
+ // stealth = cloakbrowser-mcp (CloakBrowser stealth
21
+ // Chromium, full Playwright-MCP toolset,
22
+ // passes bot detection; ~200MB first run)
23
+ // --headless run the browser without a window (own engine)
24
+ // --cdp <url> own: connect to a running Chrome's CDP endpoint
25
+ // (default probe http://127.0.0.1:9222; "off" to skip)
26
+ // --chrome-channel own: which installed browser to launch (chrome, msedge, …)
27
+ // --user-data-dir own: reuse a Chrome profile dir so logins carry over
22
28
  import os from "node:os";
23
29
  import { BridgeConnection } from "./connection.js";
24
30
  import { makeBrowserTools } from "./browser.js";
31
+ import { connectMcpChild } from "./mcp-child.js";
25
32
  import { textResult } from "./protocol.js";
26
33
  function parseArgs(argv) {
27
34
  const out = {};
@@ -41,12 +48,13 @@ function parseArgs(argv) {
41
48
  }
42
49
  return out;
43
50
  }
44
- function main() {
51
+ async function main() {
45
52
  const args = parseArgs(process.argv.slice(2));
46
53
  const server = typeof args.server === "string" ? args.server : "";
47
54
  if (!server) {
48
55
  console.error("error: --server <wss://host/ws> is required");
49
- console.error("example: npx @tianshu-ai/local-bridge --server wss://tianshu.example.com/ws --token ***");
56
+ console.error("example: tsbridge --server wss://tianshu.example.com/ws --token ***");
57
+ console.error("install: npm i -g @tianshu-ai/local-bridge (then run `tsbridge`)");
50
58
  process.exit(2);
51
59
  }
52
60
  const token = typeof args.token === "string" ? args.token : undefined;
@@ -71,15 +79,35 @@ function main() {
71
79
  },
72
80
  };
73
81
  const browserOn = args["no-browser"] !== true;
82
+ const engine = args["browser-engine"] === "stealth" ? "stealth" : "own";
74
83
  const tools = [echo];
75
84
  if (browserOn) {
76
- tools.push(...makeBrowserTools({
77
- cdpUrl,
78
- channel,
79
- userDataDir,
80
- headful,
81
- log: (m) => console.log(`[local-bridge] ${m}`),
82
- }));
85
+ if (engine === "stealth") {
86
+ // Full Playwright-MCP toolset pointed at CloakBrowser stealth
87
+ // Chromium. Spawned as a child MCP server over stdio.
88
+ try {
89
+ const stealthTools = await connectMcpChild({
90
+ command: "npx",
91
+ args: ["-y", "cloakbrowser-mcp@latest"],
92
+ env: headful ? {} : { PWMCP_HEADLESS: "1" },
93
+ log: (m) => console.log(`[local-bridge] ${m}`),
94
+ });
95
+ tools.push(...stealthTools);
96
+ }
97
+ catch (err) {
98
+ console.error(`[local-bridge] failed to start stealth browser (cloakbrowser-mcp): ${err instanceof Error ? err.message : String(err)}`);
99
+ process.exit(1);
100
+ }
101
+ }
102
+ else {
103
+ tools.push(...makeBrowserTools({
104
+ cdpUrl,
105
+ channel,
106
+ userDataDir,
107
+ headful,
108
+ log: (m) => console.log(`[local-bridge] ${m}`),
109
+ }));
110
+ }
83
111
  }
84
112
  const conn = new BridgeConnection({
85
113
  server,
@@ -89,8 +117,14 @@ function main() {
89
117
  tools,
90
118
  log: (m) => console.log(`[local-bridge] ${m}`),
91
119
  });
92
- console.log(`[local-bridge] starting — device="${deviceId}", ${tools.length} tools, ` +
93
- `browser=${browserOn ? (cdpUrl ? `connect(${cdpUrl}) or ${channel}` : channel) : "off"}`);
120
+ const browserDesc = !browserOn
121
+ ? "off"
122
+ : engine === "stealth"
123
+ ? "stealth (cloakbrowser)"
124
+ : cdpUrl
125
+ ? `own: connect(${cdpUrl}) or ${channel}`
126
+ : `own: ${channel}`;
127
+ console.log(`[local-bridge] starting — device="${deviceId}", ${tools.length} tools, browser=${browserDesc}`);
94
128
  conn.start();
95
129
  const shutdown = () => {
96
130
  console.log("\n[local-bridge] shutting down…");
@@ -100,5 +134,8 @@ function main() {
100
134
  process.on("SIGINT", shutdown);
101
135
  process.on("SIGTERM", shutdown);
102
136
  }
103
- main();
137
+ main().catch((err) => {
138
+ console.error(`[local-bridge] fatal: ${err instanceof Error ? err.message : String(err)}`);
139
+ process.exit(1);
140
+ });
104
141
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ // Bridge a downstream local MCP server (e.g. cloakbrowser-mcp) into the
2
+ // reverse-MCP tool set. We spawn the child over stdio, act as its MCP
3
+ // client, and wrap each of its tools as a LocalTool that proxies
4
+ // tools/call. This turns local-bridge into a general "expose a local
5
+ // MCP server to tianshu" bridge — browser (stealth) is the first user.
6
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
7
+ import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
8
+ import { textResult } from "./protocol.js";
9
+ /** Start the child MCP server, list its tools, and return them wrapped
10
+ * as LocalTools. The Client stays connected for the process lifetime;
11
+ * tools/call is proxied straight through. */
12
+ export async function connectMcpChild(opts) {
13
+ const transport = new StdioClientTransport({
14
+ command: opts.command,
15
+ args: opts.args,
16
+ env: { ...process.env, ...(opts.env ?? {}) },
17
+ stderr: "inherit",
18
+ });
19
+ const client = new Client({ name: opts.clientName ?? "tianshu-local-bridge", version: "0.1.0" });
20
+ opts.log(`starting downstream MCP: ${opts.command} ${opts.args.join(" ")}`);
21
+ await client.connect(transport);
22
+ const listed = await client.listTools();
23
+ const tools = [];
24
+ for (const t of listed.tools) {
25
+ const descriptor = {
26
+ name: t.name,
27
+ description: t.description ?? undefined,
28
+ inputSchema: t.inputSchema ?? undefined,
29
+ };
30
+ tools.push({
31
+ descriptor,
32
+ async run(args) {
33
+ try {
34
+ const res = await client.callTool({ name: t.name, arguments: args });
35
+ // The MCP result already has { content, isError }. Pass it
36
+ // through; our protocol.ToolResult shape matches.
37
+ const content = Array.isArray(res.content)
38
+ ? (res.content)
39
+ : [];
40
+ return {
41
+ content: content.length ? content : [{ type: "text", text: "(no content)" }],
42
+ isError: res.isError === true,
43
+ };
44
+ }
45
+ catch (err) {
46
+ return textResult(`downstream MCP call "${t.name}" failed: ${err instanceof Error ? err.message : String(err)}`, true);
47
+ }
48
+ },
49
+ });
50
+ }
51
+ opts.log(`downstream MCP ready: ${tools.length} tools`);
52
+ return tools;
53
+ }
54
+ //# sourceMappingURL=mcp-child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-child.js","sourceRoot":"","sources":["../src/mcp-child.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sEAAsE;AACtE,iEAAiE;AACjE,qEAAqE;AACrE,uEAAuE;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAwD,MAAM,eAAe,CAAC;AAejG;;8CAE8C;AAC9C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAqB;IACzD,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAA4B;QACtE,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACjG,IAAI,CAAC,GAAG,CAAC,4BAA4B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IACxC,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAmB;YACjC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;YACvC,WAAW,EAAG,CAAC,CAAC,WAAmD,IAAI,SAAS;SACjF,CAAC;QACF,KAAK,CAAC,IAAI,CAAC;YACT,UAAU;YACV,KAAK,CAAC,GAAG,CAAC,IAA6B;gBACrC,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrE,2DAA2D;oBAC3D,kDAAkD;oBAClD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAE,GAA6B,CAAC,OAAO,CAAC;wBACnE,CAAC,CAAC,CAAE,GAA0C,CAAC,OAAO,CAAC;wBACvD,CAAC,CAAC,EAAE,CAAC;oBACP,OAAO;wBACL,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;wBAC5E,OAAO,EAAG,GAA6B,CAAC,OAAO,KAAK,IAAI;qBACzD,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,UAAU,CACf,wBAAwB,CAAC,CAAC,IAAI,aAAa,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAC7F,IAAI,CACL,CAAC;gBACJ,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,19 @@
1
1
  {
2
2
  "name": "@tianshu-ai/local-bridge",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Local bridge for tianshu — dial into a tianshu server over WebSocket and expose your machine's tools (browser, files, shell) to the agent via reverse-MCP.",
5
5
  "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/tianshu-ai/local-bridge.git"
9
+ },
10
+ "homepage": "https://github.com/tianshu-ai/local-bridge#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/tianshu-ai/local-bridge/issues"
13
+ },
6
14
  "type": "module",
7
15
  "bin": {
16
+ "tsbridge": "dist/index.js",
8
17
  "tianshu-local-bridge": "dist/index.js"
9
18
  },
10
19
  "files": [
@@ -19,6 +28,7 @@
19
28
  "prepublishOnly": "npm run build"
20
29
  },
21
30
  "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.19.0",
22
32
  "playwright": "^1.56.0",
23
33
  "ws": "^8.18.0"
24
34
  },
@@ -31,6 +41,7 @@
31
41
  "node": ">=20"
32
42
  },
33
43
  "publishConfig": {
34
- "access": "public"
44
+ "access": "public",
45
+ "provenance": true
35
46
  }
36
47
  }