@tianshu-ai/local-bridge 0.4.1 → 0.6.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/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,87 @@
1
+ // `tsbridge install-app` — build + install the macOS menu-bar app.
2
+ //
3
+ // Compiles a tiny native AppKit menu-bar app (swiftc, no Electron) that
4
+ // wraps this CLI: a menu-bar icon with Start/Stop + Settings (server /
5
+ // token / browser engine / headless). The Swift source ships in the npm
6
+ // package (app/TianshuBridge.swift); we assemble the .app bundle and
7
+ // compile it on the user's machine.
8
+ import { spawnSync } from "node:child_process";
9
+ import fs from "node:fs";
10
+ import os from "node:os";
11
+ import path from "node:path";
12
+ import { fileURLToPath } from "node:url";
13
+ const APP_NAME = "Tianshu Bridge";
14
+ const BUNDLE_ID = "ai.tianshu.local-bridge";
15
+ function findSwiftSource() {
16
+ // dist/install-app.js → ../app/TianshuBridge.swift (shipped in the package)
17
+ const here = path.dirname(fileURLToPath(import.meta.url));
18
+ const candidates = [
19
+ path.join(here, "..", "app", "TianshuBridge.swift"),
20
+ path.join(here, "app", "TianshuBridge.swift"),
21
+ ];
22
+ return candidates.find((p) => fs.existsSync(p)) ?? null;
23
+ }
24
+ export function installApp(opts = {}) {
25
+ if (process.platform !== "darwin") {
26
+ console.error("error: the menu-bar app is macOS-only.");
27
+ return 1;
28
+ }
29
+ const swiftc = spawnSync("swiftc", ["--version"], { stdio: "ignore" });
30
+ if (swiftc.status !== 0) {
31
+ console.error("error: swiftc not found. Install Xcode command line tools:");
32
+ console.error(" xcode-select --install");
33
+ return 1;
34
+ }
35
+ const src = findSwiftSource();
36
+ if (!src) {
37
+ console.error("error: bundled Swift source not found in the package.");
38
+ return 1;
39
+ }
40
+ const dest = opts.dest || path.join(os.homedir(), "Applications");
41
+ const appDir = path.join(dest, `${APP_NAME}.app`);
42
+ const macosDir = path.join(appDir, "Contents", "MacOS");
43
+ const resDir = path.join(appDir, "Contents", "Resources");
44
+ console.log(`→ Building ${APP_NAME}.app …`);
45
+ fs.rmSync(appDir, { recursive: true, force: true });
46
+ fs.mkdirSync(macosDir, { recursive: true });
47
+ fs.mkdirSync(resDir, { recursive: true });
48
+ const plist = `<?xml version="1.0" encoding="UTF-8"?>
49
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
50
+ <plist version="1.0">
51
+ <dict>
52
+ <key>CFBundleName</key><string>${APP_NAME}</string>
53
+ <key>CFBundleDisplayName</key><string>${APP_NAME}</string>
54
+ <key>CFBundleIdentifier</key><string>${BUNDLE_ID}</string>
55
+ <key>CFBundleVersion</key><string>1</string>
56
+ <key>CFBundleShortVersionString</key><string>1.0</string>
57
+ <key>CFBundlePackageType</key><string>APPL</string>
58
+ <key>CFBundleExecutable</key><string>TianshuBridge</string>
59
+ <key>LSMinimumSystemVersion</key><string>13.0</string>
60
+ <key>LSUIElement</key><true/>
61
+ </dict>
62
+ </plist>
63
+ `;
64
+ fs.writeFileSync(path.join(appDir, "Contents", "Info.plist"), plist);
65
+ console.log("→ Compiling Swift (menu-bar app) …");
66
+ const build = spawnSync("swiftc", ["-O", "-o", path.join(macosDir, "TianshuBridge"), src, "-framework", "AppKit", "-framework", "Foundation"], { stdio: "inherit" });
67
+ if (build.status !== 0) {
68
+ console.error("error: swiftc build failed.");
69
+ return 1;
70
+ }
71
+ // Clear any quarantine attribute so `open` / Gatekeeper doesn't
72
+ // silently refuse to launch the freshly-written bundle.
73
+ spawnSync("xattr", ["-dr", "com.apple.quarantine", appDir], { stdio: "ignore" });
74
+ // Ad-hoc sign so Gatekeeper allows a locally-built app.
75
+ spawnSync("codesign", ["--force", "--deep", "--sign", "-", appDir], { stdio: "ignore" });
76
+ console.log(`✓ Installed: ${appDir}`);
77
+ console.log("");
78
+ console.log(`It lives in the menu bar (bolt icon). Click it → Settings to set your`);
79
+ console.log(`server URL + token, then Start. First launch: right-click the app → Open`);
80
+ console.log(`to bypass Gatekeeper (unsigned local build).`);
81
+ if (opts.run) {
82
+ console.log("→ Launching …");
83
+ spawnSync("open", [appDir], { stdio: "ignore" });
84
+ }
85
+ return 0;
86
+ }
87
+ //# sourceMappingURL=install-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-app.js","sourceRoot":"","sources":["../src/install-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,402 @@
1
+ // Native local tools exposed by the bridge — shell exec + file sync.
2
+ //
3
+ // These run DIRECTLY on the user's machine (unlike the browser tools,
4
+ // which proxy a child MCP server). They mirror the tool surface of
5
+ // tianshu's server-side `openshell` plugin (tool names, params, and
6
+ // result shapes) so an agent written against openshell's exec /
7
+ // sync_up / sync_down "just works" when the sandbox backend is a
8
+ // local-bridge device instead of a server sandbox.
9
+ //
10
+ // Semantics differ because the bridge is a CLIENT on the user's own
11
+ // box, with no tenant/project/task context and no server-side
12
+ // filesystem. ALL activity is jailed to a single fixed root directory
13
+ // (~/.tianshu_shell by default): exec's cwd + workdir, sync_up's read
14
+ // base, and sync_down's write dest all resolve within it, and any path
15
+ // that escapes the root is rejected.
16
+ // - exec : `bash -c <command>` on THIS machine, cwd inside root.
17
+ // - sync_up : read files under root → return their bytes (base64)
18
+ // to the agent. "up" = from your machine up to the agent.
19
+ // - sync_down : receive bytes (base64) from the agent → write them
20
+ // under root. "down" = from the agent down onto your box.
21
+ //
22
+ // Transport is base64-in-args/result over the existing reverse-MCP
23
+ // `tools/call` channel — no protocol changes, no server changes. Keep
24
+ // payloads modest; there's a hard per-file cap below.
25
+ import { spawn } from "node:child_process";
26
+ import fs from "node:fs";
27
+ import fsp from "node:fs/promises";
28
+ import os from "node:os";
29
+ import path from "node:path";
30
+ // ─── tunables (mirroring openshell where it makes sense) ─────────────
31
+ const DEFAULT_EXEC_TIMEOUT_MS = 5 * 60_000;
32
+ const MAX_EXEC_TIMEOUT_MS = 30 * 60_000;
33
+ const STDOUT_LINE_CAP = 200;
34
+ const STDOUT_BYTE_CAP = 8_000;
35
+ // Base64 in a JSON-RPC frame is memory-bound; cap per-file bytes so a
36
+ // stray `sync_up({paths:['huge.iso']})` can't OOM the bridge or blow
37
+ // the WS frame. 8 MiB raw ≈ 11 MiB base64.
38
+ const MAX_FILE_BYTES = 8 * 1024 * 1024;
39
+ // Guard directory walks so a recursive sync_up of `~` can't fan out
40
+ // unbounded.
41
+ const MAX_SYNC_FILES = 500;
42
+ // ─── shared helpers ──────────────────────────────────────────────────
43
+ function clampTimeout(raw) {
44
+ if (typeof raw !== "number" || !Number.isFinite(raw) || raw <= 0) {
45
+ return DEFAULT_EXEC_TIMEOUT_MS;
46
+ }
47
+ return Math.min(Math.max(Math.trunc(raw), 1), MAX_EXEC_TIMEOUT_MS);
48
+ }
49
+ function truncate(text) {
50
+ const lines = text.split("\n");
51
+ if (lines.length > STDOUT_LINE_CAP) {
52
+ const head = lines.slice(0, STDOUT_LINE_CAP).join("\n");
53
+ return {
54
+ value: `${head}\n... (${lines.length - STDOUT_LINE_CAP} more lines truncated)`,
55
+ truncated: true,
56
+ };
57
+ }
58
+ if (text.length > STDOUT_BYTE_CAP) {
59
+ return {
60
+ value: `${text.slice(0, STDOUT_BYTE_CAP)}\n... (${text.length - STDOUT_BYTE_CAP} more bytes truncated)`,
61
+ truncated: true,
62
+ };
63
+ }
64
+ return { value: text, truncated: false };
65
+ }
66
+ /** Wrap a JSON object as the single text content block the reverse-MCP
67
+ * contract expects. Mirrors openshell tools returning a plain object;
68
+ * here we JSON-encode it into a text block. */
69
+ function jsonResult(obj, isError = false) {
70
+ return { content: [{ type: "text", text: JSON.stringify(obj, null, 2) }], isError };
71
+ }
72
+ /** Resolve an agent-supplied path against a fixed base, refusing any
73
+ * result that escapes the base (path traversal / absolute paths that
74
+ * point elsewhere). Returns null if the path escapes. */
75
+ function resolveWithin(base, rel) {
76
+ const resolvedBase = path.resolve(base);
77
+ // Treat the input as relative to base even if it's absolute-looking;
78
+ // strip leading slashes so 'sync_down' can't be told to write /etc.
79
+ const cleaned = rel.replace(/^[/\\]+/, "");
80
+ const full = path.resolve(resolvedBase, cleaned);
81
+ const withSep = resolvedBase.endsWith(path.sep) ? resolvedBase : resolvedBase + path.sep;
82
+ if (full !== resolvedBase && !full.startsWith(withSep))
83
+ return null;
84
+ return full;
85
+ }
86
+ // ─── exec ────────────────────────────────────────────────────────────
87
+ export function ExecTool(opts) {
88
+ return {
89
+ descriptor: {
90
+ name: "exec",
91
+ description: `Run a shell command on THIS machine (the local-bridge device), via \`bash -c <command>\`.
92
+
93
+ All shell activity is confined to a fixed root directory: ${opts.root}. The command runs
94
+ there by default; a \`workdir\` must stay inside that root (paths escaping it are rejected).
95
+
96
+ Default timeout: ${DEFAULT_EXEC_TIMEOUT_MS / 1000}s. Raise \`timeout_ms\` for long tasks; cap ${MAX_EXEC_TIMEOUT_MS / 1000}s.
97
+ Outputs are truncated at ${STDOUT_LINE_CAP} lines / ${STDOUT_BYTE_CAP} bytes per stream — pipe to a file and read it back if you need the full output.
98
+ Runs with the bridge user's own permissions on their real machine — but is jailed to the root dir above.`,
99
+ inputSchema: {
100
+ type: "object",
101
+ properties: {
102
+ command: {
103
+ type: "string",
104
+ description: "Shell command. Equivalent to `bash -c <command>` on the bridge host, inside the shell root.",
105
+ },
106
+ workdir: {
107
+ type: "string",
108
+ description: `Working dir, relative to the shell root (${opts.root}). Defaults to the root itself. Must stay within it.`,
109
+ },
110
+ timeout_ms: {
111
+ type: "integer",
112
+ minimum: 1,
113
+ maximum: MAX_EXEC_TIMEOUT_MS,
114
+ description: `Override per-call timeout. Hard cap ${MAX_EXEC_TIMEOUT_MS}ms.`,
115
+ },
116
+ },
117
+ required: ["command"],
118
+ },
119
+ },
120
+ async run(args) {
121
+ const command = String(args.command ?? "");
122
+ if (!command) {
123
+ return jsonResult({ ok: false, exit_code: -1, stdout: "", stderr: "command is required", truncated: false, duration_ms: 0, timed_out: false }, true);
124
+ }
125
+ // Resolve the working dir inside the jail root. An escaping
126
+ // workdir is a hard error (don't silently fall back — the agent
127
+ // asked to run somewhere it isn't allowed).
128
+ const workdirArg = typeof args.workdir === "string" && args.workdir ? args.workdir : ".";
129
+ const workdir = resolveWithin(opts.root, workdirArg);
130
+ if (!workdir) {
131
+ return jsonResult({ ok: false, exit_code: -1, stdout: "", stderr: `workdir escapes shell root ${opts.root}`, truncated: false, duration_ms: 0, timed_out: false }, true);
132
+ }
133
+ const timeoutMs = clampTimeout(args.timeout_ms);
134
+ const started = Date.now();
135
+ // Ensure the root exists so the very first exec doesn't fail on a
136
+ // missing cwd.
137
+ try {
138
+ fs.mkdirSync(opts.root, { recursive: true });
139
+ }
140
+ catch {
141
+ /* best-effort; spawn will surface a real error */
142
+ }
143
+ return await new Promise((resolve) => {
144
+ let stdout = "";
145
+ let stderr = "";
146
+ let timedOut = false;
147
+ let settled = false;
148
+ const child = spawn("bash", ["-c", command], {
149
+ cwd: fs.existsSync(workdir) ? workdir : opts.root,
150
+ env: process.env,
151
+ });
152
+ const timer = setTimeout(() => {
153
+ timedOut = true;
154
+ child.kill("SIGKILL");
155
+ }, timeoutMs);
156
+ child.stdout?.on("data", (d) => {
157
+ stdout += d.toString();
158
+ });
159
+ child.stderr?.on("data", (d) => {
160
+ stderr += d.toString();
161
+ });
162
+ const finish = (exitCode) => {
163
+ if (settled)
164
+ return;
165
+ settled = true;
166
+ clearTimeout(timer);
167
+ const so = truncate(stdout);
168
+ const se = truncate(stderr);
169
+ resolve(jsonResult({
170
+ ok: exitCode === 0 && !timedOut,
171
+ exit_code: exitCode,
172
+ stdout: so.value,
173
+ stderr: timedOut ? `${se.value}${se.value ? "\n" : ""}[local-bridge] killed after ${timeoutMs}ms timeout` : se.value,
174
+ truncated: so.truncated || se.truncated,
175
+ duration_ms: Date.now() - started,
176
+ timed_out: timedOut,
177
+ }));
178
+ };
179
+ child.on("error", (err) => {
180
+ if (settled)
181
+ return;
182
+ settled = true;
183
+ clearTimeout(timer);
184
+ resolve(jsonResult({ ok: false, exit_code: -1, stdout: truncate(stdout).value, stderr: `spawn failed: ${err.message}`, truncated: false, duration_ms: Date.now() - started, timed_out: false }, true));
185
+ });
186
+ child.on("close", (code) => finish(code ?? -1));
187
+ });
188
+ },
189
+ };
190
+ }
191
+ // ─── sync_up (local machine → agent) ─────────────────────────────────
192
+ /** Recursively collect files under a resolved path (or the single file
193
+ * itself). Returns [relPathFromBase, absPath] pairs. */
194
+ async function collectFiles(base, absStart, relStart) {
195
+ const out = [];
196
+ const stat = await fsp.stat(absStart);
197
+ if (stat.isFile()) {
198
+ out.push({ rel: relStart, abs: absStart });
199
+ return out;
200
+ }
201
+ if (!stat.isDirectory())
202
+ return out;
203
+ const walk = async (dirAbs, dirRel) => {
204
+ const entries = await fsp.readdir(dirAbs, { withFileTypes: true });
205
+ for (const e of entries) {
206
+ if (out.length >= MAX_SYNC_FILES)
207
+ return;
208
+ const childAbs = path.join(dirAbs, e.name);
209
+ const childRel = path.posix.join(dirRel, e.name);
210
+ if (e.isDirectory()) {
211
+ await walk(childAbs, childRel);
212
+ }
213
+ else if (e.isFile()) {
214
+ out.push({ rel: childRel, abs: childAbs });
215
+ }
216
+ }
217
+ };
218
+ await walk(absStart, relStart);
219
+ return out;
220
+ }
221
+ export function SyncUpTool(opts) {
222
+ return {
223
+ descriptor: {
224
+ name: "sync_up",
225
+ description: `Upload files / directories FROM this machine UP to the agent (the "up" direction: your box → tianshu).
226
+
227
+ Reads the given paths inside the shell root and returns their contents (base64) so the agent
228
+ can write them into its own workspace / sandbox. Directories are read recursively.
229
+
230
+ Paths are resolved relative to the shell root (${opts.root}); paths that escape it are rejected.
231
+ Per-file cap ${Math.round(MAX_FILE_BYTES / 1024 / 1024)}MiB; at most ${MAX_SYNC_FILES} files per call.
232
+
233
+ Use this to hand local files to the agent instead of pasting their contents into a command.`,
234
+ inputSchema: {
235
+ type: "object",
236
+ properties: {
237
+ paths: {
238
+ type: "array",
239
+ items: { type: "string" },
240
+ minItems: 1,
241
+ description: `Files and/or directories to read, relative to the shell root (${opts.root}).`,
242
+ },
243
+ },
244
+ required: ["paths"],
245
+ },
246
+ },
247
+ async run(args) {
248
+ const raw = args.paths;
249
+ if (!Array.isArray(raw) || raw.length === 0) {
250
+ return jsonResult({ ok: false, error: "paths must be a non-empty string array" }, true);
251
+ }
252
+ const files = [];
253
+ const skipped = [];
254
+ for (const p of raw) {
255
+ const rel = String(p);
256
+ const abs = resolveWithin(opts.root, rel);
257
+ if (!abs) {
258
+ skipped.push({ path: rel, reason: `path escapes shell root ${opts.root}` });
259
+ continue;
260
+ }
261
+ let collected;
262
+ try {
263
+ collected = await collectFiles(opts.root, abs, rel.replace(/^[/\\]+/, ""));
264
+ }
265
+ catch (err) {
266
+ skipped.push({ path: rel, reason: err instanceof Error ? err.message : String(err) });
267
+ continue;
268
+ }
269
+ for (const f of collected) {
270
+ if (files.length >= MAX_SYNC_FILES) {
271
+ skipped.push({ path: f.rel, reason: `exceeded ${MAX_SYNC_FILES}-file limit` });
272
+ continue;
273
+ }
274
+ try {
275
+ const st = await fsp.stat(f.abs);
276
+ if (st.size > MAX_FILE_BYTES) {
277
+ skipped.push({ path: f.rel, reason: `file ${st.size}B exceeds ${MAX_FILE_BYTES}B cap` });
278
+ continue;
279
+ }
280
+ const buf = await fsp.readFile(f.abs);
281
+ files.push({ path: f.rel, base64: buf.toString("base64"), bytes: st.size });
282
+ }
283
+ catch (err) {
284
+ skipped.push({ path: f.rel, reason: err instanceof Error ? err.message : String(err) });
285
+ }
286
+ }
287
+ }
288
+ return jsonResult({
289
+ ok: skipped.length === 0,
290
+ base: opts.root,
291
+ encoding: "base64",
292
+ files,
293
+ skipped,
294
+ notice: "Each file's `base64` is its raw content. Decode and write it into your workspace at the same relative `path`.",
295
+ });
296
+ },
297
+ };
298
+ }
299
+ // ─── sync_down (agent → local machine) ───────────────────────────────
300
+ export function SyncDownTool(opts) {
301
+ return {
302
+ descriptor: {
303
+ name: "sync_down",
304
+ description: `Download files FROM the agent DOWN onto this machine (the "down" direction: tianshu → your box).
305
+
306
+ Writes the given files into the shell root (${opts.root}). Each file is
307
+ { path: <relative path>, base64: <content> }. Existing files are overwritten. Parent dirs
308
+ are created. Paths that escape the root are rejected.
309
+
310
+ Per-file cap ${Math.round(MAX_FILE_BYTES / 1024 / 1024)}MiB; at most ${MAX_SYNC_FILES} files per call.
311
+
312
+ Use this AFTER the agent produces artefacts you want on your local machine.`,
313
+ inputSchema: {
314
+ type: "object",
315
+ properties: {
316
+ files: {
317
+ type: "array",
318
+ items: {
319
+ type: "object",
320
+ properties: {
321
+ path: { type: "string", description: "Relative destination path within the sync dir." },
322
+ base64: { type: "string", description: "File content, base64-encoded." },
323
+ },
324
+ required: ["path", "base64"],
325
+ },
326
+ minItems: 1,
327
+ description: "Files to write onto the bridge host.",
328
+ },
329
+ },
330
+ required: ["files"],
331
+ },
332
+ },
333
+ async run(args) {
334
+ const raw = args.files;
335
+ if (!Array.isArray(raw) || raw.length === 0) {
336
+ return jsonResult({ ok: false, error: "files must be a non-empty array of {path, base64}" }, true);
337
+ }
338
+ if (raw.length > MAX_SYNC_FILES) {
339
+ return jsonResult({ ok: false, error: `too many files (${raw.length} > ${MAX_SYNC_FILES})` }, true);
340
+ }
341
+ try {
342
+ await fsp.mkdir(opts.root, { recursive: true });
343
+ }
344
+ catch (err) {
345
+ return jsonResult({ ok: false, error: `cannot create shell root: ${err instanceof Error ? err.message : String(err)}` }, true);
346
+ }
347
+ const written = [];
348
+ const skipped = [];
349
+ for (const entry of raw) {
350
+ const rel = String(entry.path ?? "");
351
+ const b64 = String(entry.base64 ?? "");
352
+ if (!rel) {
353
+ skipped.push({ path: "(missing)", reason: "path is required" });
354
+ continue;
355
+ }
356
+ const abs = resolveWithin(opts.root, rel);
357
+ if (!abs) {
358
+ skipped.push({ path: rel, reason: `path escapes shell root ${opts.root}` });
359
+ continue;
360
+ }
361
+ let buf;
362
+ try {
363
+ buf = Buffer.from(b64, "base64");
364
+ }
365
+ catch {
366
+ skipped.push({ path: rel, reason: "invalid base64" });
367
+ continue;
368
+ }
369
+ if (buf.length > MAX_FILE_BYTES) {
370
+ skipped.push({ path: rel, reason: `file ${buf.length}B exceeds ${MAX_FILE_BYTES}B cap` });
371
+ continue;
372
+ }
373
+ try {
374
+ await fsp.mkdir(path.dirname(abs), { recursive: true });
375
+ await fsp.writeFile(abs, buf);
376
+ written.push({ path: rel, bytes: buf.length });
377
+ }
378
+ catch (err) {
379
+ skipped.push({ path: rel, reason: err instanceof Error ? err.message : String(err) });
380
+ }
381
+ }
382
+ return jsonResult({
383
+ ok: skipped.length === 0,
384
+ dest: opts.root,
385
+ written,
386
+ skipped,
387
+ notice: `Wrote ${written.length} file(s) under ${opts.root} on the bridge host.`,
388
+ });
389
+ },
390
+ };
391
+ }
392
+ // ─── factory ─────────────────────────────────────────────────────────
393
+ /** The fixed default shell root: ~/.tianshu_shell. All exec + sync
394
+ * activity is jailed here. Override with --shell-root. */
395
+ export function defaultShellRoot() {
396
+ return path.join(os.homedir(), ".tianshu_shell");
397
+ }
398
+ /** Build the native local tool set (shell + sync), jailed to opts.root. */
399
+ export function localTools(opts) {
400
+ return [ExecTool(opts), SyncUpTool(opts), SyncDownTool(opts)];
401
+ }
402
+ //# sourceMappingURL=local-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-tools.js","sourceRoot":"","sources":["../src/local-tools.ts"],"names":[],"mappings":"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"}
package/dist/mcp-child.js CHANGED
@@ -3,17 +3,43 @@
3
3
  // client, and wrap each of its tools as a LocalTool that proxies
4
4
  // tools/call. This turns local-bridge into a general "expose a local
5
5
  // MCP server to tianshu" bridge — browser (stealth) is the first user.
6
+ import os from "node:os";
7
+ import fs from "node:fs";
8
+ import path from "node:path";
6
9
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
7
10
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
8
11
  import { textResult } from "./protocol.js";
9
12
  /** Start the child MCP server, list its tools, and return them wrapped
10
13
  * as LocalTools. The Client stays connected for the process lifetime;
11
14
  * tools/call is proxied straight through. */
15
+ /** Our own working dir for the browser MCP children. Fixed + explicit
16
+ * so output never lands in a surprise cwd. The crash we hit
17
+ * (mkdir '/.playwright-mcp') was cloakbrowser/@playwright-mcp
18
+ * resolving `.playwright-mcp` against cwd, which is `/` when launched
19
+ * from a GUI app. Pin it under ~/.tianshu-bridge instead. */
20
+ export function bridgeOutputDir() {
21
+ const dir = path.join(os.homedir(), ".tianshu-bridge", "playwright-mcp");
22
+ try {
23
+ fs.mkdirSync(dir, { recursive: true });
24
+ }
25
+ catch {
26
+ /* best-effort */
27
+ }
28
+ return dir;
29
+ }
12
30
  export async function connectMcpChild(opts) {
31
+ const baseEnv = { ...process.env };
32
+ if (!baseEnv.HOME)
33
+ baseEnv.HOME = os.homedir();
34
+ // Pin the output dir explicitly (both cloakbrowser-mcp via env and
35
+ // @playwright/mcp via --output-dir honor this), so it never resolves
36
+ // to a bad cwd like '/'.
37
+ const outDir = bridgeOutputDir();
38
+ baseEnv.PLAYWRIGHT_MCP_OUTPUT_DIR = outDir;
13
39
  const transport = new StdioClientTransport({
14
40
  command: opts.command,
15
41
  args: opts.args,
16
- env: { ...process.env, ...(opts.env ?? {}) },
42
+ env: { ...baseEnv, ...(opts.env ?? {}) },
17
43
  stderr: "inherit",
18
44
  });
19
45
  const client = new Client({ name: opts.clientName ?? "tianshu-local-bridge", version: "0.1.0" });
@@ -1 +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"}
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,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,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;;;;8DAI8D;AAC9D,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAqB;IACzD,MAAM,OAAO,GAA2B,EAAE,GAAI,OAAO,CAAC,GAA8B,EAAE,CAAC;IACvF,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC/C,mEAAmE;IACnE,qEAAqE;IACrE,yBAAyB;IACzB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,CAAC,yBAAyB,GAAG,MAAM,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,oBAAoB,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,EAA4B;QAClE,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"}