@tianshu-ai/local-bridge 0.2.1 → 0.4.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 +22 -3
- package/dist/index.js +19 -4
- package/dist/index.js.map +1 -1
- package/dist/update.js +105 -0
- package/dist/update.js.map +1 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -22,17 +22,36 @@ your machine tianshu server
|
|
|
22
22
|
|
|
23
23
|
## Install & run
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
44
|
+
tsbridge --server ws://localhost:3110/ws
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
> The `tsbridge` and `tianshu-local-bridge` commands are equivalent.
|
|
48
|
+
|
|
49
|
+
### Keeping it updated
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
tsbridge update # check npm for a newer version
|
|
53
|
+
tsbridge update --yes # check and self-update (npm i -g …@latest)
|
|
54
|
+
tsbridge version # print the installed version
|
|
36
55
|
```
|
|
37
56
|
|
|
38
57
|
### Flags
|
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
|
-
//
|
|
6
|
-
//
|
|
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:
|
|
@@ -27,6 +29,7 @@ import os from "node:os";
|
|
|
27
29
|
import { BridgeConnection } from "./connection.js";
|
|
28
30
|
import { makeBrowserTools } from "./browser.js";
|
|
29
31
|
import { connectMcpChild } from "./mcp-child.js";
|
|
32
|
+
import { runUpdate, installedVersion } from "./update.js";
|
|
30
33
|
import { textResult } from "./protocol.js";
|
|
31
34
|
function parseArgs(argv) {
|
|
32
35
|
const out = {};
|
|
@@ -47,11 +50,23 @@ function parseArgs(argv) {
|
|
|
47
50
|
return out;
|
|
48
51
|
}
|
|
49
52
|
async function main() {
|
|
50
|
-
|
|
53
|
+
// First positional (not starting with --) selects a subcommand.
|
|
54
|
+
const argv = process.argv.slice(2);
|
|
55
|
+
const sub = argv.find((a) => !a.startsWith("--"));
|
|
56
|
+
const args = parseArgs(argv);
|
|
57
|
+
if (sub === "update") {
|
|
58
|
+
process.exit(await runUpdate(args.yes === true || args.y === true));
|
|
59
|
+
}
|
|
60
|
+
if (sub === "version" || args.version === true || args.v === true) {
|
|
61
|
+
process.stdout.write(`@tianshu-ai/local-bridge v${installedVersion()}\n`);
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
51
64
|
const server = typeof args.server === "string" ? args.server : "";
|
|
52
65
|
if (!server) {
|
|
53
66
|
console.error("error: --server <wss://host/ws> is required");
|
|
54
|
-
console.error("example:
|
|
67
|
+
console.error("example: tsbridge --server wss://tianshu.example.com/ws --token ***");
|
|
68
|
+
console.error("install: npm i -g @tianshu-ai/local-bridge (then run `tsbridge`)");
|
|
69
|
+
console.error("commands: tsbridge update [--yes] | tsbridge version");
|
|
55
70
|
process.exit(2);
|
|
56
71
|
}
|
|
57
72
|
const token = typeof args.token === "string" ? args.token : undefined;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,yEAAyE;AACzE,mDAAmD;AACnD,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/update.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// `tsbridge update` — check npm for a newer @tianshu-ai/local-bridge and
|
|
2
|
+
// optionally self-update the global install.
|
|
3
|
+
//
|
|
4
|
+
// Check-only by default; pass --yes to actually run the install. Uses
|
|
5
|
+
// the npm registry JSON API (no auth) for the check, and `npm i -g` for
|
|
6
|
+
// the apply so it works regardless of how the CLI was installed.
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
import { spawn } from "node:child_process";
|
|
9
|
+
const PKG = "@tianshu-ai/local-bridge";
|
|
10
|
+
const REGISTRY = "https://registry.npmjs.org";
|
|
11
|
+
/** Installed version, read from this package's own package.json. */
|
|
12
|
+
export function installedVersion() {
|
|
13
|
+
try {
|
|
14
|
+
const require = createRequire(import.meta.url);
|
|
15
|
+
// dist/update.js → ../package.json
|
|
16
|
+
const pkg = require("../package.json");
|
|
17
|
+
return pkg.version ?? "0.0.0";
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return "0.0.0";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Fetch the latest published version + dist-tags from npm. */
|
|
24
|
+
async function fetchLatest() {
|
|
25
|
+
try {
|
|
26
|
+
const res = await fetch(`${REGISTRY}/${encodeURIComponent(PKG).replace("%40", "@")}/latest`, {
|
|
27
|
+
headers: { accept: "application/json" },
|
|
28
|
+
signal: AbortSignal.timeout(10_000),
|
|
29
|
+
});
|
|
30
|
+
if (!res.ok)
|
|
31
|
+
return null;
|
|
32
|
+
const json = (await res.json());
|
|
33
|
+
return json.version ?? null;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Semver-ish compare: returns true if `remote` is strictly newer than
|
|
40
|
+
* `local`. Handles plain x.y.z; prerelease tags compare lexically as a
|
|
41
|
+
* best-effort tiebreak. */
|
|
42
|
+
function isNewer(remote, local) {
|
|
43
|
+
const parse = (v) => {
|
|
44
|
+
const [core, pre] = v.split("-", 2);
|
|
45
|
+
const nums = core.split(".").map((n) => parseInt(n, 10) || 0);
|
|
46
|
+
return { nums, pre: pre ?? "" };
|
|
47
|
+
};
|
|
48
|
+
const a = parse(remote);
|
|
49
|
+
const b = parse(local);
|
|
50
|
+
for (let i = 0; i < 3; i++) {
|
|
51
|
+
const x = a.nums[i] ?? 0;
|
|
52
|
+
const y = b.nums[i] ?? 0;
|
|
53
|
+
if (x !== y)
|
|
54
|
+
return x > y;
|
|
55
|
+
}
|
|
56
|
+
// equal core: a release (no pre) beats a prerelease; else lexical
|
|
57
|
+
if (a.pre === b.pre)
|
|
58
|
+
return false;
|
|
59
|
+
if (!a.pre)
|
|
60
|
+
return true;
|
|
61
|
+
if (!b.pre)
|
|
62
|
+
return false;
|
|
63
|
+
return a.pre > b.pre;
|
|
64
|
+
}
|
|
65
|
+
function runNpmInstall() {
|
|
66
|
+
return new Promise((resolve) => {
|
|
67
|
+
const child = spawn("npm", ["install", "-g", `${PKG}@latest`], {
|
|
68
|
+
stdio: "inherit",
|
|
69
|
+
shell: process.platform === "win32",
|
|
70
|
+
});
|
|
71
|
+
child.on("close", (code) => resolve(code ?? 1));
|
|
72
|
+
child.on("error", () => resolve(1));
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/** Run the update subcommand. `apply` = actually install the new version. */
|
|
76
|
+
export async function runUpdate(apply) {
|
|
77
|
+
const local = installedVersion();
|
|
78
|
+
process.stdout.write(`[tsbridge] installed: v${local}\n`);
|
|
79
|
+
process.stdout.write(`[tsbridge] checking ${REGISTRY} for a newer ${PKG}…\n`);
|
|
80
|
+
const latest = await fetchLatest();
|
|
81
|
+
if (!latest) {
|
|
82
|
+
process.stderr.write("[tsbridge] could not reach the npm registry.\n");
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
if (!isNewer(latest, local)) {
|
|
86
|
+
process.stdout.write(`[tsbridge] up to date (latest is v${latest}).\n`);
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
process.stdout.write(`[tsbridge] a newer version is available: v${latest}\n`);
|
|
90
|
+
if (!apply) {
|
|
91
|
+
process.stdout.write(`[tsbridge] to update, run:\n npm i -g ${PKG}@latest\n or:\n tsbridge update --yes\n`);
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
process.stdout.write(`[tsbridge] updating v${local} → v${latest}…\n`);
|
|
95
|
+
const code = await runNpmInstall();
|
|
96
|
+
if (code === 0) {
|
|
97
|
+
process.stdout.write(`[tsbridge] updated to v${latest}. Restart any running bridge.\n`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
process.stderr.write(`[tsbridge] update failed (npm exit ${code}). Try manually: npm i -g ${PKG}@latest\n` +
|
|
101
|
+
` (a permission error usually means you need sudo, or a Node version manager's global dir.)\n`);
|
|
102
|
+
}
|
|
103
|
+
return code;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tianshu-ai/local-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.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
6
|
"repository": {
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"type": "module",
|
|
15
15
|
"bin": {
|
|
16
|
+
"tsbridge": "dist/index.js",
|
|
16
17
|
"tianshu-local-bridge": "dist/index.js"
|
|
17
18
|
},
|
|
18
19
|
"files": [
|