linkshell-cli 0.5.2 → 0.5.4

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.
@@ -2,6 +2,7 @@ import type { AgentFraming, AgentProtocol } from "./provider-resolver.js";
2
2
  type AgentPermissionMode = "read_only" | "workspace_write" | "full_access";
3
3
  export declare class ClaudeStreamJsonClient {
4
4
  private readonly input;
5
+ private static warnedBypass;
5
6
  private child;
6
7
  private claudeSessionId;
7
8
  private pendingCancel;
@@ -85,6 +85,7 @@ function splitImageDataUrl(value, fallbackMimeType = "image/png") {
85
85
  }
86
86
  export class ClaudeStreamJsonClient {
87
87
  input;
88
+ static warnedBypass = false;
88
89
  child;
89
90
  claudeSessionId;
90
91
  pendingCancel = false;
@@ -119,6 +120,23 @@ export class ClaudeStreamJsonClient {
119
120
  this.stop();
120
121
  }
121
122
  this.pendingCancel = false;
123
+ // SECURITY: the headless stream-json fallback can only run with
124
+ // --permission-mode bypassPermissions (there is no TTY to prompt on), so
125
+ // remotely-submitted prompts execute tools — including shell — without
126
+ // confirmation. The SDK path (preferred when @anthropic-ai/claude-agent-sdk
127
+ // is installed) routes tool approvals to the mobile UI instead.
128
+ if (/^(1|true|yes)$/i.test(process.env.LINKSHELL_REQUIRE_AGENT_PERMISSIONS ?? "")) {
129
+ throw new Error("Agent permission enforcement is required (LINKSHELL_REQUIRE_AGENT_PERMISSIONS) " +
130
+ "but the Claude stream-json fallback can only run with bypassPermissions. " +
131
+ "Install @anthropic-ai/claude-agent-sdk to enable permission-gated tool approvals.");
132
+ }
133
+ if (!ClaudeStreamJsonClient.warnedBypass) {
134
+ ClaudeStreamJsonClient.warnedBypass = true;
135
+ process.stderr.write("[bridge] WARNING: Claude stream-json fallback runs with bypassPermissions — " +
136
+ "remotely submitted prompts can execute tools (including shell) without confirmation. " +
137
+ "Install @anthropic-ai/claude-agent-sdk for permission-gated control, or set " +
138
+ "LINKSHELL_REQUIRE_AGENT_PERMISSIONS=true to refuse the unsafe fallback.\n");
139
+ }
122
140
  // Build Claude args
123
141
  const args = [
124
142
  "--print",
@@ -1 +1 @@
1
- {"version":3,"file":"claude-stream-json-client.js","sourceRoot":"","sources":["../../../../../src/runtime/acp/claude-stream-json-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-stream-json-client.js","sourceRoot":"","sources":["../../../../../src/runtime/acp/claude-stream-json-client.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,17 @@ export interface BridgeSessionOptions {
17
17
  agentUi?: boolean;
18
18
  agentProvider?: AgentProvider;
19
19
  agentCommand?: string;
20
+ /**
21
+ * Confinement root for client-driven filesystem operations
22
+ * (terminal.browse / terminal.file.read / terminal.mkdir).
23
+ * Defaults to the bridge's cwd. Paths resolving outside this root are rejected.
24
+ */
25
+ fileRoot?: string;
26
+ /**
27
+ * Ports the tunnel proxy is allowed to connect to on 127.0.0.1.
28
+ * Defaults to DEFAULT_TUNNEL_PORTS when omitted.
29
+ */
30
+ allowedTunnelPorts?: number[];
20
31
  }
21
32
  export declare function resolvePairingGateway(gatewayHttpUrl: string, pairingGateway?: string): string | undefined;
22
33
  export declare function resolveAgentWorkspaceProviders(options: {
@@ -32,6 +43,7 @@ export declare class BridgeSession {
32
43
  private reconnectAttempts;
33
44
  private reconnecting;
34
45
  private sessionId;
46
+ private hostToken;
35
47
  private exited;
36
48
  private stopped;
37
49
  private permissionStacks;
@@ -44,7 +56,18 @@ export declare class BridgeSession {
44
56
  private agentSession;
45
57
  private agentWorkspace;
46
58
  private machineIdentity;
59
+ private readonly fileRoot;
60
+ private readonly allowedTunnelPorts;
61
+ private exitedTerminalTimers;
62
+ private onAllTerminalsExited;
47
63
  constructor(options: BridgeSessionOptions);
64
+ /** Register a callback invoked once all terminals exit naturally (process self-cleanup). */
65
+ setOnAllTerminalsExited(handler: () => void | Promise<void>): void;
66
+ /**
67
+ * Resolve a client-supplied path inside the confinement root.
68
+ * Returns the absolute resolved path, or null if it escapes the root.
69
+ */
70
+ private resolveConfinedPath;
48
71
  private log;
49
72
  private terminalHookMarker;
50
73
  start(): Promise<void>;
@@ -85,6 +108,15 @@ export declare class BridgeSession {
85
108
  private cleanupHookServer;
86
109
  /** Remove hook entries containing our marker from a JSON config file */
87
110
  private removeHookEntries;
111
+ /**
112
+ * Remove ALL LinkShell hook entries (any marker) from a JSON config file.
113
+ * Used on startup to sweep stale entries left behind by a crashed instance,
114
+ * whose curl ports are now dead. Matches via isLinkShellHookEntry rather than
115
+ * a single marker so entries from previous runs are also cleaned.
116
+ */
117
+ private sweepLinkShellHookEntries;
118
+ /** Sweep stale LinkShell hook entries from known shared config files on startup. */
119
+ private sweepStaleHookConfigs;
88
120
  private send;
89
121
  private startHeartbeat;
90
122
  private stopHeartbeat;
@@ -4,7 +4,7 @@ import WebSocket from "ws";
4
4
  import { hostname, platform, homedir } from "node:os";
5
5
  import { writeFileSync, readFileSync, readdirSync, statSync, unlinkSync, mkdirSync, existsSync, openSync, readSync, closeSync } from "node:fs";
6
6
  import { tmpdir } from "node:os";
7
- import { join, basename, resolve } from "node:path";
7
+ import { join, basename, resolve, relative, isAbsolute } from "node:path";
8
8
  import { agentV2MessageRoute, createEnvelope, parseEnvelope, parseTypedPayload, serializeEnvelope, PROTOCOL_VERSION, } from "@linkshell/protocol";
9
9
  import { ScrollbackBuffer } from "./scrollback.js";
10
10
  import { ScreenFallback } from "./screen-fallback.js";
@@ -22,6 +22,16 @@ const RECONNECT_MAX_DELAY = 30_000;
22
22
  const RECONNECT_MAX_ATTEMPTS = 20;
23
23
  const DEFAULT_TERMINAL_ID = "default";
24
24
  const HOOK_BODY_LIMIT = 256 * 1024;
25
+ const SCROLLBACK_LINES = 500;
26
+ // Upper bound on concurrent live terminals — forceNew removed the cwd-dedup
27
+ // ceiling, so bound growth to avoid PTY/fd exhaustion from a runaway client.
28
+ const MAX_TERMINALS = 12;
29
+ // How long to keep an exited terminal (with its scrollback) in memory so the
30
+ // client can replay its final output before it is reaped.
31
+ const EXITED_TERMINAL_GRACE_MS = 30_000;
32
+ // Default ports the bridge will proxy tunnel requests to when no explicit
33
+ // allowlist is configured. Covers the common dev servers the app tunnels to.
34
+ const DEFAULT_TUNNEL_PORTS = [3000, 3001, 4321, 5173, 5174, 8080, 8000, 8081];
25
35
  const PERMISSION_REQUEST_TIMEOUT_MS = Number(process.env.LINKSHELL_PERMISSION_TIMEOUT_MS ?? 5 * 60_000);
26
36
  const LINKSHELL_PERMISSION_GUARD_MARKER = "LINKSHELL_PERMISSION_GUARD";
27
37
  function isLinkShellHookEntry(entry, marker) {
@@ -235,6 +245,7 @@ export class BridgeSession {
235
245
  reconnectAttempts = 0;
236
246
  reconnecting = false;
237
247
  sessionId = "";
248
+ hostToken;
238
249
  exited = false;
239
250
  stopped = false;
240
251
  permissionStacks = new Map();
@@ -248,9 +259,48 @@ export class BridgeSession {
248
259
  agentSession;
249
260
  agentWorkspace;
250
261
  machineIdentity;
262
+ // Confinement root for client-driven filesystem ops; resolved once at construction.
263
+ fileRoot;
264
+ // Ports the tunnel proxy may connect to on 127.0.0.1.
265
+ allowedTunnelPorts;
266
+ // Pending deletions of exited terminals (terminalId → timer) so we can clear on stop().
267
+ exitedTerminalTimers = new Map();
268
+ // Invoked when all terminals have exited naturally — closes embedded gateway,
269
+ // removes daemon PID file, etc. Set by the CLI entry point.
270
+ onAllTerminalsExited;
251
271
  constructor(options) {
252
272
  this.options = options;
253
273
  this.sessionId = options.sessionId ?? "";
274
+ // Confine client-driven file ops to the user's home by default (single-user
275
+ // self-hosted model: the owner browses their own projects under ~). This
276
+ // still blocks /etc, /usr, other users' dirs. Override via --file-root.
277
+ this.fileRoot = resolve(options.fileRoot ?? homedir());
278
+ this.allowedTunnelPorts = new Set(options.allowedTunnelPorts && options.allowedTunnelPorts.length > 0
279
+ ? options.allowedTunnelPorts
280
+ : DEFAULT_TUNNEL_PORTS);
281
+ }
282
+ /** Register a callback invoked once all terminals exit naturally (process self-cleanup). */
283
+ setOnAllTerminalsExited(handler) {
284
+ this.onAllTerminalsExited = handler;
285
+ }
286
+ /**
287
+ * Resolve a client-supplied path inside the confinement root.
288
+ * Returns the absolute resolved path, or null if it escapes the root.
289
+ */
290
+ resolveConfinedPath(clientPath) {
291
+ const expanded = clientPath.startsWith("~")
292
+ ? clientPath.replace(/^~/, homedir())
293
+ : clientPath;
294
+ // Resolve relative paths against the confinement root, not process.cwd().
295
+ const target = isAbsolute(expanded)
296
+ ? resolve(expanded)
297
+ : resolve(this.fileRoot, expanded);
298
+ const rel = relative(this.fileRoot, target);
299
+ if (rel === "")
300
+ return target; // the root itself
301
+ if (rel.startsWith("..") || isAbsolute(rel))
302
+ return null;
303
+ return target;
254
304
  }
255
305
  log(msg) {
256
306
  if (this.options.verbose) {
@@ -264,6 +314,9 @@ export class BridgeSession {
264
314
  async start() {
265
315
  this.log(`starting session (gateway=${this.options.gatewayUrl}, provider=${this.options.providerConfig.provider})`);
266
316
  this.machineIdentity = loadOrCreateMachineIdentity();
317
+ // Sweep stale LinkShell hook entries (dead curl ports) left by a prior crash
318
+ // before we write fresh ones for this session.
319
+ this.sweepStaleHookConfigs();
267
320
  if (!this.sessionId) {
268
321
  await this.createPairing();
269
322
  }
@@ -311,6 +364,10 @@ export class BridgeSession {
311
364
  }
312
365
  const body = (await res.json());
313
366
  this.sessionId = body.sessionId;
367
+ // Secret token proving we are the legitimate host for this session; sent on
368
+ // every host WS connect so a third party who learns the sessionId can't
369
+ // hijack the host role.
370
+ this.hostToken = body.hostToken;
314
371
  const pairingGateway = resolvePairingGateway(this.options.gatewayHttpUrl, this.options.pairingGateway);
315
372
  const deepLink = pairingGateway
316
373
  ? `linkshell://pair?code=${body.pairingCode}&gateway=${encodeURIComponent(pairingGateway)}`
@@ -369,10 +426,23 @@ export class BridgeSession {
369
426
  url.searchParams.set("sessionId", this.sessionId);
370
427
  url.searchParams.set("role", "host");
371
428
  const authToken = await this.resolveAuthToken();
429
+ const wsOptions = {};
430
+ const headers = {};
372
431
  if (authToken) {
432
+ // Prefer the Authorization header so the token doesn't leak into URLs/logs.
433
+ headers["Authorization"] = `Bearer ${authToken}`;
434
+ // TODO: remove the query param once all gateways read the Authorization
435
+ // header. Kept for backward compatibility with older gateways that only
436
+ // read the `auth_token` query parameter.
373
437
  url.searchParams.set("auth_token", authToken);
374
438
  }
375
- this.socket = new WebSocket(url);
439
+ if (this.hostToken) {
440
+ headers["x-linkshell-host-token"] = this.hostToken;
441
+ }
442
+ if (Object.keys(headers).length > 0) {
443
+ wsOptions.headers = headers;
444
+ }
445
+ this.socket = new WebSocket(url, wsOptions);
376
446
  this.socket.on("open", () => {
377
447
  process.stderr.write(this.reconnectAttempts > 0
378
448
  ? "[bridge] gateway reconnected\n"
@@ -486,8 +556,22 @@ export class BridgeSession {
486
556
  case "terminal.spawn": {
487
557
  const p = parseTypedPayload("terminal.spawn", envelope.payload);
488
558
  const normalizedCwd = resolve(p.cwd);
489
- // Dedup: if a running terminal already exists for this cwd, return it
490
- const existing = [...this.terminals.values()].find((t) => t.status === "running" && resolve(t.cwd) === normalizedCwd);
559
+ // Cap concurrent terminals — forceNew removed the cwd-dedup ceiling, so
560
+ // bound growth explicitly to avoid PTY/fd exhaustion from a runaway client.
561
+ const liveCount = [...this.terminals.values()].filter((t) => t.status === "running").length;
562
+ if (liveCount >= MAX_TERMINALS) {
563
+ this.send(createEnvelope({
564
+ type: "session.error",
565
+ sessionId: this.sessionId,
566
+ payload: { code: "too_many_terminals", message: `最多同时打开 ${MAX_TERMINALS} 个终端` },
567
+ }));
568
+ break;
569
+ }
570
+ // Dedup by cwd UNLESS the client explicitly asks for a fresh terminal
571
+ // (forceNew lets web open multiple tabs in the same directory).
572
+ const existing = p.forceNew
573
+ ? undefined
574
+ : [...this.terminals.values()].find((t) => t.status === "running" && resolve(t.cwd) === normalizedCwd);
491
575
  if (existing) {
492
576
  this.send(createEnvelope({
493
577
  type: "terminal.spawned",
@@ -530,9 +614,15 @@ export class BridgeSession {
530
614
  }
531
615
  case "terminal.browse": {
532
616
  const p = parseTypedPayload("terminal.browse", envelope.payload);
533
- // Expand ~ to home directory
534
- const rawPath = p.path.startsWith("~") ? p.path.replace(/^~/, homedir()) : p.path;
535
- const browsePath = resolve(rawPath);
617
+ const browsePath = this.resolveConfinedPath(p.path);
618
+ if (browsePath === null) {
619
+ this.send(createEnvelope({
620
+ type: "terminal.browse.result",
621
+ sessionId: this.sessionId,
622
+ payload: { path: p.path, entries: [], error: "Path is outside the allowed root", requestId: p.requestId },
623
+ }));
624
+ break;
625
+ }
536
626
  try {
537
627
  const entries = readdirSync(browsePath, { withFileTypes: true })
538
628
  .filter((d) => !d.name.startsWith(".") && (d.isDirectory() || (p.includeFiles && d.isFile())))
@@ -569,8 +659,22 @@ export class BridgeSession {
569
659
  }
570
660
  case "terminal.file.read": {
571
661
  const p = parseTypedPayload("terminal.file.read", envelope.payload);
572
- const rawPath = p.path.startsWith("~") ? p.path.replace(/^~/, homedir()) : p.path;
573
- const filePath = resolve(rawPath);
662
+ const filePath = this.resolveConfinedPath(p.path);
663
+ if (filePath === null) {
664
+ this.send(createEnvelope({
665
+ type: "terminal.file.read.result",
666
+ sessionId: this.sessionId,
667
+ payload: {
668
+ path: p.path,
669
+ content: "",
670
+ encoding: "utf8",
671
+ truncated: false,
672
+ error: "Path is outside the allowed root",
673
+ requestId: p.requestId,
674
+ },
675
+ }));
676
+ break;
677
+ }
574
678
  try {
575
679
  const stats = statSync(filePath);
576
680
  if (!stats.isFile()) {
@@ -620,8 +724,15 @@ export class BridgeSession {
620
724
  }
621
725
  case "terminal.mkdir": {
622
726
  const p = parseTypedPayload("terminal.mkdir", envelope.payload);
623
- const rawPath = p.path.startsWith("~") ? p.path.replace(/^~/, homedir()) : p.path;
624
- const dirPath = resolve(rawPath);
727
+ const dirPath = this.resolveConfinedPath(p.path);
728
+ if (dirPath === null) {
729
+ this.send(createEnvelope({
730
+ type: "terminal.browse.result",
731
+ sessionId: this.sessionId,
732
+ payload: { path: p.path, entries: [], error: "Path is outside the allowed root" },
733
+ }));
734
+ break;
735
+ }
625
736
  try {
626
737
  mkdirSync(dirPath, { recursive: true });
627
738
  // Browse the parent to refresh the listing
@@ -856,6 +967,21 @@ export class BridgeSession {
856
967
  // ── Tunnel handlers ────────────────────────────────────────────────
857
968
  handleTunnelRequest(payload) {
858
969
  const { requestId, method, url: reqUrl, headers, body, port } = payload;
970
+ // SSRF guard: only proxy to ports in the allowlist (pinned to 127.0.0.1).
971
+ if (!this.allowedTunnelPorts.has(port)) {
972
+ this.log(`rejecting tunnel request to disallowed port ${port}`);
973
+ if (headers.upgrade === "websocket") {
974
+ this.send(createEnvelope({
975
+ type: "tunnel.ws.close",
976
+ sessionId: this.sessionId,
977
+ payload: { requestId, code: 1008, reason: `Port ${port} is not allowed` },
978
+ }));
979
+ }
980
+ else {
981
+ this.sendTunnelError(requestId, 403, `Port ${port} is not allowed`);
982
+ }
983
+ return;
984
+ }
859
985
  // WebSocket upgrade request
860
986
  if (headers.upgrade === "websocket") {
861
987
  this.handleTunnelWsUpgrade(requestId, port, reqUrl);
@@ -1067,7 +1193,7 @@ export class BridgeSession {
1067
1193
  cwd,
1068
1194
  projectName: basename(cwd),
1069
1195
  provider,
1070
- scrollback: new ScrollbackBuffer(1000),
1196
+ scrollback: new ScrollbackBuffer(SCROLLBACK_LINES),
1071
1197
  outputSeq: 0,
1072
1198
  statusSeq: 0,
1073
1199
  status: "running",
@@ -1104,6 +1230,20 @@ export class BridgeSession {
1104
1230
  payload: { exitCode, signal },
1105
1231
  }));
1106
1232
  this.sendTerminalList();
1233
+ // Reap the exited terminal (and its scrollback) after a grace period so
1234
+ // clients can replay final output, then free the memory. Tracked so the
1235
+ // timer can be cleared on stop().
1236
+ const reapTimer = setTimeout(() => {
1237
+ this.exitedTerminalTimers.delete(terminalId);
1238
+ const t = this.terminals.get(terminalId);
1239
+ if (t && t.status === "exited") {
1240
+ this.terminals.delete(terminalId);
1241
+ this.log(`reaped exited terminal ${terminalId}`);
1242
+ }
1243
+ }, EXITED_TERMINAL_GRACE_MS);
1244
+ if (typeof reapTimer.unref === "function")
1245
+ reapTimer.unref();
1246
+ this.exitedTerminalTimers.set(terminalId, reapTimer);
1107
1247
  // If all terminals exited, close the session
1108
1248
  const allExited = [...this.terminals.values()].every((t) => t.status === "exited");
1109
1249
  if (allExited) {
@@ -1111,6 +1251,9 @@ export class BridgeSession {
1111
1251
  setTimeout(() => {
1112
1252
  this.stopHeartbeat();
1113
1253
  this.socket?.close();
1254
+ // Self-clean process-level resources (embedded gateway + PID file)
1255
+ // since the PTYs exited naturally rather than via a signal handler.
1256
+ void this.onAllTerminalsExited?.();
1114
1257
  }, 500);
1115
1258
  process.exitCode = exitCode ?? 0;
1116
1259
  }
@@ -1798,6 +1941,60 @@ export class BridgeSession {
1798
1941
  }
1799
1942
  catch { /* ignore parse errors */ }
1800
1943
  }
1944
+ /**
1945
+ * Remove ALL LinkShell hook entries (any marker) from a JSON config file.
1946
+ * Used on startup to sweep stale entries left behind by a crashed instance,
1947
+ * whose curl ports are now dead. Matches via isLinkShellHookEntry rather than
1948
+ * a single marker so entries from previous runs are also cleaned.
1949
+ */
1950
+ sweepLinkShellHookEntries(configPath) {
1951
+ if (!existsSync(configPath))
1952
+ return;
1953
+ try {
1954
+ // Re-read immediately before write to minimize the window for a
1955
+ // concurrent writer to clobber our changes.
1956
+ const raw = JSON.parse(readFileSync(configPath, "utf8"));
1957
+ const hooks = raw.hooks;
1958
+ if (!hooks)
1959
+ return;
1960
+ let changed = false;
1961
+ for (const [eventName, entries] of Object.entries(hooks)) {
1962
+ if (!Array.isArray(entries))
1963
+ continue;
1964
+ const filtered = entries.filter((entry) => !isLinkShellHookEntry(entry));
1965
+ if (filtered.length !== entries.length) {
1966
+ changed = true;
1967
+ if (filtered.length === 0) {
1968
+ delete hooks[eventName];
1969
+ }
1970
+ else {
1971
+ hooks[eventName] = filtered;
1972
+ }
1973
+ }
1974
+ }
1975
+ if (changed) {
1976
+ if (Object.keys(hooks).length === 0) {
1977
+ delete raw.hooks;
1978
+ }
1979
+ writeFileSync(configPath, JSON.stringify(raw, null, 2));
1980
+ this.log(`swept stale LinkShell hook entries from ${configPath}`);
1981
+ }
1982
+ }
1983
+ catch { /* ignore parse errors */ }
1984
+ }
1985
+ /** Sweep stale LinkShell hook entries from known shared config files on startup. */
1986
+ sweepStaleHookConfigs() {
1987
+ const home = homedir();
1988
+ const candidates = [
1989
+ join(home, ".claude", "settings.json"),
1990
+ join(home, ".codex", "hooks.json"),
1991
+ join(home, ".gemini", "settings.json"),
1992
+ join(process.cwd(), "hooks.json"), // copilot (per-cwd)
1993
+ ];
1994
+ for (const path of candidates) {
1995
+ this.sweepLinkShellHookEntries(path);
1996
+ }
1997
+ }
1801
1998
  send(message) {
1802
1999
  if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {
1803
2000
  return;
@@ -1937,6 +2134,11 @@ export class BridgeSession {
1937
2134
  ws.close(1001, "Session stopped");
1938
2135
  }
1939
2136
  this.tunnelSockets.clear();
2137
+ // Clear pending exited-terminal reap timers.
2138
+ for (const timer of this.exitedTerminalTimers.values()) {
2139
+ clearTimeout(timer);
2140
+ }
2141
+ this.exitedTerminalTimers.clear();
1940
2142
  for (const term of this.terminals.values()) {
1941
2143
  this.cleanupHookServer(term);
1942
2144
  if (term.status === "running")