@tianshu-ai/local-bridge 0.8.0 → 0.9.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.
@@ -0,0 +1,257 @@
1
+ // A native settings window for the tray, per platform, using each OS's
2
+ // own GUI toolkit — no bundled runtime, no extra install (the same
3
+ // philosophy as the macOS Swift menu-bar app).
4
+ //
5
+ // Windows → PowerShell + System.Windows.Forms (ships with Windows)
6
+ // macOS → AppleScript dialogs (osascript, ships with macOS)
7
+ // Linux → fall back to opening the JSON in the default editor
8
+ //
9
+ // The window reads the current config.json, lets the user edit the same
10
+ // fields the Swift app exposes (server / token / browser+engine+headless
11
+ // / shell / device), and writes config.json back on Save. Runs the GUI
12
+ // as a detached child so it doesn't block the tray.
13
+ import { spawn } from "node:child_process";
14
+ import fs from "node:fs";
15
+ import os from "node:os";
16
+ import path from "node:path";
17
+ /**
18
+ * Open a native settings window. Best-effort, non-blocking. On success
19
+ * the GUI writes the edited config to `configPath` itself; the caller
20
+ * can re-read config after the window closes (or just on next Start).
21
+ *
22
+ * Returns true if a native window was launched, false if we fell back
23
+ * to opening the raw file (Linux / unsupported).
24
+ */
25
+ export function openSettingsWindow(configPath, current) {
26
+ if (process.platform === "win32") {
27
+ return openWindowsForm(configPath, current);
28
+ }
29
+ if (process.platform === "darwin") {
30
+ return openMacDialogs(configPath, current);
31
+ }
32
+ return false; // Linux: caller opens the file instead
33
+ }
34
+ // ─── Windows: PowerShell + WinForms ─────────────────────────────────
35
+ function openWindowsForm(configPath, cur) {
36
+ const scriptPath = path.join(os.tmpdir(), `tsbridge-settings-${process.pid}.ps1`);
37
+ const ps = renderWindowsPs1(configPath, cur);
38
+ try {
39
+ fs.writeFileSync(scriptPath, ps, "utf8");
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ try {
45
+ // -STA is required for WinForms; -WindowStyle Hidden hides the PS
46
+ // console so only the form shows.
47
+ const child = spawn("powershell.exe", [
48
+ "-NoProfile",
49
+ "-ExecutionPolicy",
50
+ "Bypass",
51
+ "-STA",
52
+ "-WindowStyle",
53
+ "Hidden",
54
+ "-File",
55
+ scriptPath,
56
+ ], { stdio: "ignore", detached: true, windowsHide: true });
57
+ // Swallow spawn errors (e.g. powershell missing) so they don't crash
58
+ // the tray process; the caller falls back to opening the raw file.
59
+ child.on("error", () => { });
60
+ child.unref();
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ /** PowerShell-single-quote-escape a JS string. */
68
+ function psq(s) {
69
+ return `'${String(s).replace(/'/g, "''")}'`;
70
+ }
71
+ function renderWindowsPs1(configPath, cur) {
72
+ // The script builds a WinForms dialog, prefilled with current values,
73
+ // and on OK writes config.json (merging into whatever is already there
74
+ // so we don't clobber unknown keys).
75
+ const cfgPathLit = psq(configPath);
76
+ return `
77
+ Add-Type -AssemblyName System.Windows.Forms
78
+ Add-Type -AssemblyName System.Drawing
79
+
80
+ $configPath = ${cfgPathLit}
81
+
82
+ $form = New-Object System.Windows.Forms.Form
83
+ $form.Text = 'Tianshu Bridge — Settings'
84
+ $form.Size = New-Object System.Drawing.Size(460, 380)
85
+ $form.StartPosition = 'CenterScreen'
86
+ $form.FormBorderStyle = 'FixedDialog'
87
+ $form.MaximizeBox = $false
88
+ $form.MinimizeBox = $false
89
+
90
+ function New-Label($text, $y) {
91
+ $l = New-Object System.Windows.Forms.Label
92
+ $l.Text = $text
93
+ $l.Location = New-Object System.Drawing.Point(16, $y)
94
+ $l.Size = New-Object System.Drawing.Size(120, 20)
95
+ $form.Controls.Add($l)
96
+ return $l
97
+ }
98
+
99
+ # Server
100
+ New-Label 'Server URL' 20 | Out-Null
101
+ $server = New-Object System.Windows.Forms.TextBox
102
+ $server.Location = New-Object System.Drawing.Point(140, 18)
103
+ $server.Size = New-Object System.Drawing.Size(290, 20)
104
+ $server.Text = ${psq(cur.server)}
105
+ $form.Controls.Add($server)
106
+
107
+ # Token
108
+ New-Label 'Token' 52 | Out-Null
109
+ $token = New-Object System.Windows.Forms.TextBox
110
+ $token.Location = New-Object System.Drawing.Point(140, 50)
111
+ $token.Size = New-Object System.Drawing.Size(290, 20)
112
+ $token.Text = ${psq(cur.token)}
113
+ $form.Controls.Add($token)
114
+
115
+ # Device
116
+ New-Label 'Device (optional)' 84 | Out-Null
117
+ $device = New-Object System.Windows.Forms.TextBox
118
+ $device.Location = New-Object System.Drawing.Point(140, 82)
119
+ $device.Size = New-Object System.Drawing.Size(290, 20)
120
+ $device.Text = ${psq(cur.device)}
121
+ $form.Controls.Add($device)
122
+
123
+ # Browser enabled
124
+ $browser = New-Object System.Windows.Forms.CheckBox
125
+ $browser.Text = 'Expose browser tools'
126
+ $browser.Location = New-Object System.Drawing.Point(140, 116)
127
+ $browser.Size = New-Object System.Drawing.Size(290, 20)
128
+ $browser.Checked = $${cur.browser ? "true" : "false"}
129
+ $form.Controls.Add($browser)
130
+
131
+ # Engine
132
+ New-Label 'Browser engine' 148 | Out-Null
133
+ $engine = New-Object System.Windows.Forms.ComboBox
134
+ $engine.Location = New-Object System.Drawing.Point(140, 146)
135
+ $engine.Size = New-Object System.Drawing.Size(150, 20)
136
+ $engine.DropDownStyle = 'DropDownList'
137
+ [void]$engine.Items.Add('own')
138
+ [void]$engine.Items.Add('stealth')
139
+ $engine.SelectedItem = ${psq(cur.engine)}
140
+ $form.Controls.Add($engine)
141
+
142
+ # Headless
143
+ $headless = New-Object System.Windows.Forms.CheckBox
144
+ $headless.Text = 'Headless (no browser window)'
145
+ $headless.Location = New-Object System.Drawing.Point(140, 178)
146
+ $headless.Size = New-Object System.Drawing.Size(290, 20)
147
+ $headless.Checked = $${cur.headless ? "true" : "false"}
148
+ $form.Controls.Add($headless)
149
+
150
+ # Shell
151
+ $shell = New-Object System.Windows.Forms.CheckBox
152
+ $shell.Text = 'Expose shell (exec + file sync) — runs commands on this machine'
153
+ $shell.Location = New-Object System.Drawing.Point(140, 210)
154
+ $shell.Size = New-Object System.Drawing.Size(300, 34)
155
+ $shell.Checked = $${cur.shell ? "true" : "false"}
156
+ $form.Controls.Add($shell)
157
+
158
+ # Buttons
159
+ $ok = New-Object System.Windows.Forms.Button
160
+ $ok.Text = 'Save'
161
+ $ok.Location = New-Object System.Drawing.Point(250, 300)
162
+ $ok.Size = New-Object System.Drawing.Size(85, 28)
163
+ $ok.DialogResult = [System.Windows.Forms.DialogResult]::OK
164
+ $form.Controls.Add($ok)
165
+ $form.AcceptButton = $ok
166
+
167
+ $cancel = New-Object System.Windows.Forms.Button
168
+ $cancel.Text = 'Cancel'
169
+ $cancel.Location = New-Object System.Drawing.Point(345, 300)
170
+ $cancel.Size = New-Object System.Drawing.Size(85, 28)
171
+ $cancel.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
172
+ $form.Controls.Add($cancel)
173
+ $form.CancelButton = $cancel
174
+
175
+ $result = $form.ShowDialog()
176
+ if ($result -eq [System.Windows.Forms.DialogResult]::OK) {
177
+ # Merge into existing config so unknown keys survive.
178
+ $cfg = @{}
179
+ if (Test-Path $configPath) {
180
+ try { $cfg = Get-Content $configPath -Raw | ConvertFrom-Json -AsHashtable } catch { $cfg = @{} }
181
+ }
182
+ if ($null -eq $cfg) { $cfg = @{} }
183
+ $cfg['server'] = $server.Text
184
+ $cfg['token'] = $token.Text
185
+ $cfg['device'] = $device.Text
186
+ $cfg['browser'] = [bool]$browser.Checked
187
+ $cfg['engine'] = [string]$engine.SelectedItem
188
+ $cfg['headless'] = [bool]$headless.Checked
189
+ $cfg['shell'] = [bool]$shell.Checked
190
+ $dir = Split-Path -Parent $configPath
191
+ if (-not (Test-Path $dir)) { New-Item -ItemType Directory -Path $dir -Force | Out-Null }
192
+ ($cfg | ConvertTo-Json -Depth 10) | Set-Content -Path $configPath -Encoding UTF8
193
+ }
194
+ `;
195
+ }
196
+ // ─── macOS: AppleScript dialogs ─────────────────────────────────────
197
+ //
198
+ // A lightweight multi-field settings flow via osascript. Not as slick as
199
+ // the Swift app's form, but keeps parity if someone runs the CLI tray on
200
+ // macOS instead of the .app. Presents fields sequentially.
201
+ function openMacDialogs(configPath, cur) {
202
+ // Keep it simple + non-blocking: one AppleScript that chains dialogs
203
+ // and writes the JSON via `defaults`-free plain file write in the
204
+ // script tail. We build the whole thing as one osascript -e program.
205
+ const script = renderMacOsa(configPath, cur);
206
+ try {
207
+ const child = spawn("osascript", ["-e", script], {
208
+ stdio: "ignore",
209
+ detached: true,
210
+ });
211
+ child.on("error", () => { });
212
+ child.unref();
213
+ return true;
214
+ }
215
+ catch {
216
+ return false;
217
+ }
218
+ }
219
+ /** AppleScript-double-quote-escape. */
220
+ function asq(s) {
221
+ return `"${String(s).replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
222
+ }
223
+ function renderMacOsa(configPath, cur) {
224
+ // Prompt for server + token + engine + toggles, then shell out to a
225
+ // tiny writer. Fields are gathered with `display dialog`; booleans via
226
+ // `choose from list`. This is intentionally minimal.
227
+ const p = asq(configPath);
228
+ return [
229
+ `set cfgPath to ${p}`,
230
+ `set srv to text returned of (display dialog "Server URL" default answer ${asq(cur.server)})`,
231
+ `set tok to text returned of (display dialog "Token (blank for none)" default answer ${asq(cur.token)})`,
232
+ `set dev to text returned of (display dialog "Device (optional)" default answer ${asq(cur.device)})`,
233
+ `set eng to (choose from list {"own", "stealth"} default items {${asq(cur.engine)}} with prompt "Browser engine")`,
234
+ `if eng is false then return`,
235
+ `set engv to item 1 of eng`,
236
+ `set opts to (choose from list {"browser", "headless", "shell"} default items {${[
237
+ cur.browser ? '"browser"' : "",
238
+ cur.headless ? '"headless"' : "",
239
+ cur.shell ? '"shell"' : "",
240
+ ]
241
+ .filter(Boolean)
242
+ .join(", ")}} with prompt "Enable which options?" with multiple selections allowed)`,
243
+ `if opts is false then set opts to {}`,
244
+ `set br to "false"`,
245
+ `set hl to "false"`,
246
+ `set sh to "false"`,
247
+ `repeat with o in opts`,
248
+ ` if (o as string) is "browser" then set br to "true"`,
249
+ ` if (o as string) is "headless" then set hl to "true"`,
250
+ ` if (o as string) is "shell" then set sh to "true"`,
251
+ `end repeat`,
252
+ `set json to "{\\"server\\":\\"" & srv & "\\",\\"token\\":\\"" & tok & "\\",\\"device\\":\\"" & dev & "\\",\\"browser\\":" & br & ",\\"engine\\":\\"" & engv & "\\",\\"headless\\":" & hl & ",\\"shell\\":" & sh & "}"`,
253
+ `do shell script "mkdir -p " & quoted form of (do shell script "dirname " & quoted form of cfgPath)`,
254
+ `do shell script "cat > " & quoted form of cfgPath & " <<'TSEOF'\n" & json & "\nTSEOF"`,
255
+ ].join("\n");
256
+ }
257
+ //# sourceMappingURL=settings-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-window.js","sourceRoot":"","sources":["../src/settings-window.ts"],"names":[],"mappings":"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"}
package/dist/tray.js CHANGED
@@ -35,8 +35,8 @@ function configPath() {
35
35
  function logPath() {
36
36
  return path.join(configDir(), "bridge.log");
37
37
  }
38
- function loadConfig() {
39
- const defaults = {
38
+ function defaultConfig() {
39
+ return {
40
40
  server: "ws://localhost:3110/ws",
41
41
  token: "",
42
42
  browser: true,
@@ -45,6 +45,9 @@ function loadConfig() {
45
45
  shell: false,
46
46
  device: "",
47
47
  };
48
+ }
49
+ function loadConfig() {
50
+ const defaults = defaultConfig();
48
51
  try {
49
52
  const raw = JSON.parse(fs.readFileSync(configPath(), "utf8"));
50
53
  return { ...defaults, ...raw };
@@ -53,6 +56,21 @@ function loadConfig() {
53
56
  return defaults;
54
57
  }
55
58
  }
59
+ /** Ensure config.json exists on disk so "Edit settings" always has a
60
+ * file to open (first run hasn't Started the bridge yet, so nothing
61
+ * has written it). Returns the path. Best-effort. */
62
+ function ensureConfigFile() {
63
+ const p = configPath();
64
+ try {
65
+ if (!fs.existsSync(p)) {
66
+ fs.writeFileSync(p, JSON.stringify(defaultConfig(), null, 2) + "\n");
67
+ }
68
+ }
69
+ catch {
70
+ /* best-effort */
71
+ }
72
+ return p;
73
+ }
56
74
  // ─── tray icons ─────────────────────────────────────────────────────
57
75
  //
58
76
  // systray2 wants a base64 icon string: .ico on Windows, .png elsewhere.
@@ -211,7 +229,7 @@ export async function runTray() {
211
229
  title: "Edit settings (config.json)…",
212
230
  tooltip: "Open the config file",
213
231
  enabled: true,
214
- click: () => openPath(configPath()),
232
+ click: () => openPath(ensureConfigFile()),
215
233
  };
216
234
  const logItem = {
217
235
  title: "Open log",
@@ -296,13 +314,35 @@ export async function runTray() {
296
314
  });
297
315
  }
298
316
  // ─── util ───────────────────────────────────────────────────────────
299
- /** Open a file/dir with the OS default handler (cross-platform). */
317
+ /** Open a file with the OS default handler (cross-platform).
318
+ * Windows: `cmd /c start "" file` is flaky under a detached spawn and
319
+ * fails if the file type has no association, so open the file's default
320
+ * editor via a small chain — try the shell association, then notepad as
321
+ * a guaranteed fallback for our .json/.log text files. */
300
322
  function openPath(target) {
301
323
  const plat = process.platform;
302
- const cmd = plat === "win32" ? "cmd" : plat === "darwin" ? "open" : "xdg-open";
303
- const args = plat === "win32" ? ["/c", "start", "", target] : [target];
304
324
  try {
305
- spawn(cmd, args, { stdio: "ignore", detached: true, windowsHide: true }).unref();
325
+ if (plat === "win32") {
326
+ // `explorer <file>` opens with the registered handler; if none,
327
+ // fall back to notepad (always present) for our text files.
328
+ const child = spawn("cmd", ["/d", "/s", "/c", "start", "", target], {
329
+ stdio: "ignore",
330
+ detached: true,
331
+ windowsHide: true,
332
+ });
333
+ child.on("error", () => {
334
+ try {
335
+ spawn("notepad", [target], { stdio: "ignore", detached: true }).unref();
336
+ }
337
+ catch {
338
+ /* give up */
339
+ }
340
+ });
341
+ child.unref();
342
+ return;
343
+ }
344
+ const cmd = plat === "darwin" ? "open" : "xdg-open";
345
+ spawn(cmd, [target], { stdio: "ignore", detached: true }).unref();
306
346
  }
307
347
  catch {
308
348
  /* best-effort */
package/dist/tray.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tray.js","sourceRoot":"","sources":["../src/tray.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tray.js","sourceRoot":"","sources":["../src/tray.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.8.0",
3
+ "version": "0.9.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": {