frely-cli 0.20.1 → 0.20.5

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.
@@ -195,19 +195,19 @@ export declare const COMMANDS: readonly [{
195
195
  readonly usage: "frely computer enable";
196
196
  readonly auth: "local";
197
197
  readonly effect: "local-write";
198
- readonly purpose: "Register computer use (desktop control by a remote MCP client) as the local MCP \"computer\" on this device. Run it only on a device you are sitting at. It still has to be turned on for remote clients on the Frely connections page; registering alone never exposes it.";
198
+ readonly purpose: "Lift the local block set by `frely computer disable` and pre-install the computer-use runtime. Computer use (desktop control by a remote MCP client) is built in and stays off until the owner turns it on for the device on the Frely connections page (passkey or authenticator code required). On macOS the first use asks that Mac for Accessibility and Screen Recording permission.";
199
199
  }, {
200
200
  readonly id: "computer.disable";
201
201
  readonly usage: "frely computer disable";
202
202
  readonly auth: "local";
203
203
  readonly effect: "local-write";
204
- readonly purpose: "Remove the local MCP \"computer\" so computer use stops working on this device at once, whatever the web page says.";
204
+ readonly purpose: "Block computer use on this device at once, whatever the web page says. The web page cannot lift this; only `frely computer enable` does.";
205
205
  }, {
206
206
  readonly id: "computer.status";
207
207
  readonly usage: "frely computer status [--json]";
208
208
  readonly auth: "local";
209
209
  readonly effect: "read";
210
- readonly purpose: "Show whether computer use is registered locally, the runtime version it needs and whether it is installed.";
210
+ readonly purpose: "Show whether computer use is blocked locally, the runtime version it needs and whether it is installed yet (it installs on first use).";
211
211
  }, {
212
212
  readonly id: "computer.mcp";
213
213
  readonly usage: "frely computer mcp";
@@ -424,19 +424,19 @@ export declare function agentHelp(): {
424
424
  readonly usage: "frely computer enable";
425
425
  readonly auth: "local";
426
426
  readonly effect: "local-write";
427
- readonly purpose: "Register computer use (desktop control by a remote MCP client) as the local MCP \"computer\" on this device. Run it only on a device you are sitting at. It still has to be turned on for remote clients on the Frely connections page; registering alone never exposes it.";
427
+ readonly purpose: "Lift the local block set by `frely computer disable` and pre-install the computer-use runtime. Computer use (desktop control by a remote MCP client) is built in and stays off until the owner turns it on for the device on the Frely connections page (passkey or authenticator code required). On macOS the first use asks that Mac for Accessibility and Screen Recording permission.";
428
428
  }, {
429
429
  readonly id: "computer.disable";
430
430
  readonly usage: "frely computer disable";
431
431
  readonly auth: "local";
432
432
  readonly effect: "local-write";
433
- readonly purpose: "Remove the local MCP \"computer\" so computer use stops working on this device at once, whatever the web page says.";
433
+ readonly purpose: "Block computer use on this device at once, whatever the web page says. The web page cannot lift this; only `frely computer enable` does.";
434
434
  }, {
435
435
  readonly id: "computer.status";
436
436
  readonly usage: "frely computer status [--json]";
437
437
  readonly auth: "local";
438
438
  readonly effect: "read";
439
- readonly purpose: "Show whether computer use is registered locally, the runtime version it needs and whether it is installed.";
439
+ readonly purpose: "Show whether computer use is blocked locally, the runtime version it needs and whether it is installed yet (it installs on first use).";
440
440
  }, {
441
441
  readonly id: "computer.mcp";
442
442
  readonly usage: "frely computer mcp";
@@ -32,9 +32,9 @@ export const COMMANDS = [
32
32
  { id: "app.status", usage: "frely app status [--json]", auth: "local", effect: "read", purpose: "Show whether the Frely App is installed, its version, install path, running state and how it is managed." },
33
33
  { id: "app.update", usage: "frely app update [--json]", auth: "local", effect: "local-write", purpose: "Update the Frely App through Homebrew or by re-downloading the latest release." },
34
34
  { id: "app.uninstall", usage: "frely app uninstall", auth: "local", effect: "local-write", purpose: "Uninstall the Frely App. Credentials stay with frely-cli." },
35
- { id: "computer.enable", usage: "frely computer enable", auth: "local", effect: "local-write", purpose: "Register computer use (desktop control by a remote MCP client) as the local MCP \"computer\" on this device. Run it only on a device you are sitting at. It still has to be turned on for remote clients on the Frely connections page; registering alone never exposes it." },
36
- { id: "computer.disable", usage: "frely computer disable", auth: "local", effect: "local-write", purpose: "Remove the local MCP \"computer\" so computer use stops working on this device at once, whatever the web page says." },
37
- { id: "computer.status", usage: "frely computer status [--json]", auth: "local", effect: "read", purpose: "Show whether computer use is registered locally, the runtime version it needs and whether it is installed." },
35
+ { id: "computer.enable", usage: "frely computer enable", auth: "local", effect: "local-write", purpose: "Lift the local block set by `frely computer disable` and pre-install the computer-use runtime. Computer use (desktop control by a remote MCP client) is built in and stays off until the owner turns it on for the device on the Frely connections page (passkey or authenticator code required). On macOS the first use asks that Mac for Accessibility and Screen Recording permission." },
36
+ { id: "computer.disable", usage: "frely computer disable", auth: "local", effect: "local-write", purpose: "Block computer use on this device at once, whatever the web page says. The web page cannot lift this; only `frely computer enable` does." },
37
+ { id: "computer.status", usage: "frely computer status [--json]", auth: "local", effect: "read", purpose: "Show whether computer use is blocked locally, the runtime version it needs and whether it is installed yet (it installs on first use)." },
38
38
  { id: "computer.mcp", usage: "frely computer mcp", auth: "local", effect: "local-execution", purpose: "Stdio MCP server for computer use; local MCP forwarding starts it. Not needed for normal use." },
39
39
  { id: "network", usage: "frely network setup|status|find|use|logout [--json]", auth: "network", effect: "subcommand-dependent", purpose: "Access Frely Network (preview) using its separate setup and credentials." },
40
40
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-help.js","sourceRoot":"","sources":["../src/agent-help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-help.js","sourceRoot":"","sources":["../src/agent-help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { LocalMcpEntry } from "../runtime/local-mcp.js";
2
+ /** Name of the built-in local MCP for computer use; the web connections page turns it on by this name. */
3
+ export declare const COMPUTER_MCP_NAME = "computer";
4
+ /** The local veto: while this marker exists, computer use is off on this device whatever the web page says. */
5
+ export declare const computerOptOutPath: () => string;
6
+ export declare function computerLocallyVetoed(): Promise<boolean>;
7
+ export declare function setComputerLocalVeto(vetoed: boolean): Promise<void>;
8
+ /**
9
+ * Computer use is built in: every device offers the local MCP `computer` without local registration, and the web switch is the
10
+ * only key to turn it on. `frely computer disable` is the one thing the web cannot override, so the entry disappears while vetoed.
11
+ */
12
+ export declare function builtinLocalMcps(entryPoint?: string): Promise<LocalMcpEntry[]>;
@@ -0,0 +1,31 @@
1
+ import { access, mkdir, rm, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { cliLaunchArguments } from "../cli-launch.js";
4
+ import { computerDir } from "./state.js";
5
+ /** Name of the built-in local MCP for computer use; the web connections page turns it on by this name. */
6
+ export const COMPUTER_MCP_NAME = "computer";
7
+ /** The local veto: while this marker exists, computer use is off on this device whatever the web page says. */
8
+ export const computerOptOutPath = () => join(computerDir(), "local-opt-out");
9
+ export async function computerLocallyVetoed() {
10
+ return access(computerOptOutPath()).then(() => true, () => false);
11
+ }
12
+ export async function setComputerLocalVeto(vetoed) {
13
+ const path = computerOptOutPath();
14
+ if (!vetoed) {
15
+ await rm(path, { force: true });
16
+ return;
17
+ }
18
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
19
+ await writeFile(path, "computer use is turned off on this device (frely computer disable)\n", { mode: 0o600 });
20
+ }
21
+ /**
22
+ * Computer use is built in: every device offers the local MCP `computer` without local registration, and the web switch is the
23
+ * only key to turn it on. `frely computer disable` is the one thing the web cannot override, so the entry disappears while vetoed.
24
+ */
25
+ export async function builtinLocalMcps(entryPoint = process.argv[1] ?? "") {
26
+ if (await computerLocallyVetoed())
27
+ return [];
28
+ const [command, ...args] = cliLaunchArguments(entryPoint, ["computer", "mcp"]);
29
+ return [{ name: COMPUTER_MCP_NAME, source: "manual", transport: "stdio", command: command, args, path: process.env.PATH ?? "" }];
30
+ }
31
+ //# sourceMappingURL=builtin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../src/computer/builtin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,0GAA0G;AAC1G,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,+GAA+G;AAC/G,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,CAAC;AAErF,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,OAAO,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAe;IACxD,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACzD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,IAAI,EAAE,sEAAsE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,aAAqB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;IAC/E,IAAI,MAAM,qBAAqB,EAAE;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;AACpI,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * `frely computer enable|disable|status`. Computer use is an official local MCP named `computer`:
3
- * enabling registers `frely computer mcp` in the local MCP list (the local key of the two-key rule),
4
- * and the web connections page turns that name on for remote clients (the web key).
2
+ * `frely computer enable|disable|status`. Computer use is a built-in local MCP named `computer`: every device offers it, and the
3
+ * switch on the Frely connections page (which asks for a passkey or authenticator code) is what turns it on for remote clients.
4
+ * The runtime is installed on first use. `disable` is a local veto the web cannot override; `enable` lifts it.
5
5
  */
6
6
  export declare function runComputerCommand(args: string[]): Promise<string>;
@@ -1,14 +1,20 @@
1
1
  import { access } from "node:fs/promises";
2
2
  import { subcommandUsage } from "../agent-help.js";
3
- import { cliLaunchArguments } from "../cli-launch.js";
4
- import { addManualEntry, loadManualEntries, removeManualEntry } from "../runtime/local-mcp.js";
3
+ import { loadManualEntries, removeManualEntry } from "../runtime/local-mcp.js";
4
+ import { COMPUTER_MCP_NAME, computerLocallyVetoed, setComputerLocalVeto } from "./builtin.js";
5
5
  import { OCU_VERSION, ocuBinaryPath } from "./ocu.js";
6
6
  import { installOcuRuntime } from "./runtime.js";
7
- import { COMPUTER_MCP_NAME, computerEntryRegistered } from "./server.js";
7
+ /** An entry named `computer` that an earlier `frely computer enable` registered by hand; the built-in entry replaces it. */
8
+ async function removeLegacyEntry() {
9
+ if (!(await loadManualEntries().catch(() => [])).some((entry) => entry.name === COMPUTER_MCP_NAME))
10
+ return false;
11
+ await removeManualEntry(COMPUTER_MCP_NAME);
12
+ return true;
13
+ }
8
14
  /**
9
- * `frely computer enable|disable|status`. Computer use is an official local MCP named `computer`:
10
- * enabling registers `frely computer mcp` in the local MCP list (the local key of the two-key rule),
11
- * and the web connections page turns that name on for remote clients (the web key).
15
+ * `frely computer enable|disable|status`. Computer use is a built-in local MCP named `computer`: every device offers it, and the
16
+ * switch on the Frely connections page (which asks for a passkey or authenticator code) is what turns it on for remote clients.
17
+ * The runtime is installed on first use. `disable` is a local veto the web cannot override; `enable` lifts it.
12
18
  */
13
19
  export async function runComputerCommand(args) {
14
20
  const action = args[0];
@@ -16,37 +22,34 @@ export async function runComputerCommand(args) {
16
22
  return subcommandUsage("computer");
17
23
  if (action === "enable") {
18
24
  const present = () => access(ocuBinaryPath()).then(() => true, () => false);
19
- // First enable downloads the pinned runtime and verifies its checksum; nothing is registered if that fails.
25
+ // Lifting the veto is all that is needed; downloading the pinned runtime (checksum verified) now only saves the wait on first use.
20
26
  const downloaded = !(await present());
21
27
  if (downloaded)
22
28
  await installOcuRuntime();
23
- const [command, ...commandArgs] = cliLaunchArguments(process.argv[1] ?? "", ["computer", "mcp"]);
24
- if ((await loadManualEntries()).some((entry) => entry.name === COMPUTER_MCP_NAME))
25
- await removeManualEntry(COMPUTER_MCP_NAME);
26
- await addManualEntry({ name: COMPUTER_MCP_NAME, transport: "stdio", command: command, args: commandArgs, path: process.env.PATH ?? "" });
29
+ await setComputerLocalVeto(false);
30
+ await removeLegacyEntry();
27
31
  return [
28
- "Computer use is registered as the local MCP \"computer\" on this device.",
29
- "Turn it on for remote clients on the Frely connections page; until then no remote client can use it.",
32
+ "Computer use is allowed on this device. It stays off until you turn it on for this device on the Frely connections page.",
30
33
  "While it is on, a connected client can see this screen and operate apps as you, except terminals, password managers, OS security prompts, system settings and Frely itself.",
31
34
  downloaded ? `Installed the computer-use runtime (open-computer-use ${OCU_VERSION}, checksum verified).` : "",
32
- process.platform === "darwin" ? "macOS: grant Accessibility and Screen Recording to \"Open Computer Use\" in System Settings when prompted." : "",
33
- "Turn it off at any time with `frely computer disable`.",
35
+ process.platform === "darwin" ? "macOS: the first use asks this Mac for Accessibility and Screen Recording permission for \"Open Computer Use\"; grant both in System Settings." : "",
36
+ "Block it on this device at any time with `frely computer disable`; the web page cannot override that.",
34
37
  ].filter(Boolean).join("\n") + "\n";
35
38
  }
36
39
  if (action === "disable") {
37
- const registered = await computerEntryRegistered();
38
- if (registered)
39
- await removeManualEntry(COMPUTER_MCP_NAME);
40
- return registered ? "Computer use is turned off.\n" : "Computer use was already off.\n";
40
+ const vetoed = await computerLocallyVetoed();
41
+ await setComputerLocalVeto(true);
42
+ await removeLegacyEntry();
43
+ return vetoed ? "Computer use was already blocked on this device.\n" : "Computer use is blocked on this device. The Frely connections page cannot turn it on until you run `frely computer enable`.\n";
41
44
  }
42
45
  if (action === "status") {
43
- const enabled = await computerEntryRegistered();
46
+ const enabled = !(await computerLocallyVetoed());
44
47
  const binary = ocuBinaryPath();
45
48
  const installed = await access(binary).then(() => true, () => false);
46
49
  const value = { enabled, runtimeVersion: OCU_VERSION, runtimeInstalled: installed };
47
50
  if (args.includes("--json"))
48
51
  return `${JSON.stringify(value)}\n`;
49
- return `Computer use: ${enabled ? "on locally (turn it on for remote clients on the Frely connections page)" : "off"}\nRuntime: open-computer-use ${OCU_VERSION}, ${installed ? "installed" : `not installed (${binary})`}\n`;
52
+ return `Computer use: ${enabled ? "allowed here (turn it on for this device on the Frely connections page)" : "blocked on this device (run `frely computer enable` to allow it)"}\nRuntime: open-computer-use ${OCU_VERSION}, ${installed ? "installed" : `not installed yet (${binary}); it installs on first use`}\n`;
50
53
  }
51
54
  throw new Error(`Unknown computer command.\n${subcommandUsage("computer")}`);
52
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/computer/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/computer/command.ts"],"names":[],"mappings":"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"}
@@ -30,9 +30,13 @@ export declare class OcuNotInstalledError extends Error {
30
30
  /** Lazily started stdio client for the open-computer-use binary; restarts on the next call after it dies. */
31
31
  export declare class StdioOcuBackend implements OcuBackend {
32
32
  private readonly binary;
33
+ private readonly install?;
33
34
  private client;
34
35
  private starting;
35
- constructor(binary?: string);
36
+ private installing;
37
+ /** `install` fetches the pinned runtime when the binary is missing; one install serves every call waiting on it. */
38
+ constructor(binary?: string, install?: (() => Promise<unknown>) | undefined);
39
+ private ensureInstalled;
36
40
  private connect;
37
41
  listTools(): Promise<OcuTool[]>;
38
42
  callTool(name: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<OcuResult>;
@@ -15,23 +15,41 @@ export function ocuBinaryPath() {
15
15
  }
16
16
  export class OcuNotInstalledError extends Error {
17
17
  constructor(path) {
18
- super(`The computer-use runtime is not installed (expected ${path}). Run \`frely computer enable\` on this device to install it.`);
18
+ super(`The computer-use runtime is not installed (expected ${path}) and could not be installed automatically.`);
19
19
  this.name = "OcuNotInstalledError";
20
20
  }
21
21
  }
22
22
  /** Lazily started stdio client for the open-computer-use binary; restarts on the next call after it dies. */
23
23
  export class StdioOcuBackend {
24
24
  binary;
25
+ install;
25
26
  client;
26
27
  starting;
27
- constructor(binary = ocuBinaryPath()) {
28
+ installing;
29
+ /** `install` fetches the pinned runtime when the binary is missing; one install serves every call waiting on it. */
30
+ constructor(binary = ocuBinaryPath(), install) {
28
31
  this.binary = binary;
32
+ this.install = install;
33
+ }
34
+ async ensureInstalled() {
35
+ if (await access(this.binary).then(() => true, () => false))
36
+ return;
37
+ if (!this.install)
38
+ throw new OcuNotInstalledError(this.binary);
39
+ this.installing ??= this.install().finally(() => { this.installing = undefined; });
40
+ try {
41
+ await this.installing;
42
+ }
43
+ catch (error) {
44
+ throw new Error(`Could not install the computer-use runtime: ${error instanceof Error ? error.message : "install failed"}`);
45
+ }
46
+ await access(this.binary).catch(() => { throw new OcuNotInstalledError(this.binary); });
29
47
  }
30
48
  async connect() {
31
49
  if (this.client)
32
50
  return this.client;
33
51
  this.starting ??= (async () => {
34
- await access(this.binary).catch(() => { throw new OcuNotInstalledError(this.binary); });
52
+ await this.ensureInstalled();
35
53
  const transport = new StdioClientTransport({ command: this.binary, args: ["mcp"], stderr: "ignore" });
36
54
  const client = new Client({ name: "frely-cli-computer", version: "1" });
37
55
  client.onclose = () => { if (this.client === client)
@@ -1 +1 @@
1
- {"version":3,"file":"ocu.js","sourceRoot":"","sources":["../../src/computer/ocu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ocu.js","sourceRoot":"","sources":["../../src/computer/ocu.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
3
+ import { COMPUTER_MCP_NAME } from "./builtin.js";
3
4
  import { ComputerToolset } from "./toolset.js";
4
- /** Name `frely computer enable` registers in the local MCP list; the web page turns it on by this name. */
5
- export declare const COMPUTER_MCP_NAME = "computer";
6
- /** The local key of the two-key rule: computer use works only while its entry is in the local MCP list. */
7
- export declare function computerEntryRegistered(): Promise<boolean>;
5
+ export { COMPUTER_MCP_NAME };
6
+ /** The local key of the two-key rule: computer use is on unless `frely computer disable` vetoed it; checked on every list and call. */
7
+ export declare function computerLocallyEnabled(): Promise<boolean>;
8
+ /** The runtime is installed on first use (pinned download, checksum verified), so turning computer use on from the web is enough. */
8
9
  export declare function createComputerToolset(): ComputerToolset;
9
10
  /** MCP server over the guarded toolset. Local MCP forwarding starts it as a stdio server (`frely computer mcp`). */
10
11
  export declare function createComputerMcpServer(toolset: ComputerToolset): Server;
@@ -2,17 +2,18 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
3
  import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
4
4
  import { VERSION } from "../version.js";
5
- import { loadManualEntries } from "../runtime/local-mcp.js";
6
- import { StdioOcuBackend } from "./ocu.js";
5
+ import { COMPUTER_MCP_NAME, computerLocallyVetoed } from "./builtin.js";
6
+ import { ocuBinaryPath, StdioOcuBackend } from "./ocu.js";
7
+ import { installOcuRuntime } from "./runtime.js";
7
8
  import { ComputerToolset } from "./toolset.js";
8
- /** Name `frely computer enable` registers in the local MCP list; the web page turns it on by this name. */
9
- export const COMPUTER_MCP_NAME = "computer";
10
- /** The local key of the two-key rule: computer use works only while its entry is in the local MCP list. */
11
- export async function computerEntryRegistered() {
12
- return (await loadManualEntries().catch(() => [])).some((entry) => entry.name === COMPUTER_MCP_NAME && entry.transport === "stdio");
9
+ export { COMPUTER_MCP_NAME };
10
+ /** The local key of the two-key rule: computer use is on unless `frely computer disable` vetoed it; checked on every list and call. */
11
+ export async function computerLocallyEnabled() {
12
+ return !(await computerLocallyVetoed());
13
13
  }
14
+ /** The runtime is installed on first use (pinned download, checksum verified), so turning computer use on from the web is enough. */
14
15
  export function createComputerToolset() {
15
- return new ComputerToolset({ backend: new StdioOcuBackend(), isLocallyEnabled: computerEntryRegistered });
16
+ return new ComputerToolset({ backend: new StdioOcuBackend(ocuBinaryPath(), installOcuRuntime), isLocallyEnabled: computerLocallyEnabled });
16
17
  }
17
18
  /** MCP server over the guarded toolset. Local MCP forwarding starts it as a stdio server (`frely computer mcp`). */
18
19
  export function createComputerMcpServer(toolset) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/computer/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,2GAA2G;AAC3G,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,2GAA2G;AAC3G,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,OAAO,CAAC,MAAM,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;AACtI,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,eAAe,EAAE,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,uBAAuB,CAAC,OAAwB;IAC9D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzG,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACrG,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAA4B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClI,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAsE,CAAC;IACvJ,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,YAAuB,IAAI,oBAAoB,EAAE,EAAE,UAA2B,qBAAqB,EAAE;IAC9I,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5D,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/computer/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,uIAAuI;AACvI,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,OAAO,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,qIAAqI;AACrI,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,eAAe,CAAC,aAAa,EAAE,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAC7I,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,uBAAuB,CAAC,OAAwB;IAC9D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACzG,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACrG,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAA4B,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClI,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAsE,CAAC;IACvJ,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,YAAuB,IAAI,oBAAoB,EAAE,EAAE,UAA2B,qBAAqB,EAAE;IAC9I,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5D,CAAC"}
@@ -2,7 +2,7 @@ import type { OcuBackend, OcuResult, OcuTool } from "./ocu.js";
2
2
  import { type ComputerAuditEntry } from "./state.js";
3
3
  export interface ComputerToolsetOptions {
4
4
  backend: OcuBackend;
5
- /** Local key of the two-key rule (the registered local MCP entry); checked on every list and call so `frely computer disable` takes effect at once. */
5
+ /** Local key of the two-key rule (false once `frely computer disable` vetoed computer use); checked on every list and call so the veto takes effect at once. */
6
6
  isLocallyEnabled: () => Promise<boolean>;
7
7
  audit?: (entry: ComputerAuditEntry) => Promise<void>;
8
8
  }
@@ -41,7 +41,7 @@ export class ComputerToolset {
41
41
  if (!ALLOWED_TOOLS.has(tool))
42
42
  return fail(`Unknown tool: ${name}`, "unknown_tool");
43
43
  if (!(await this.available()))
44
- return fail("Computer use is turned off on this device. Run `frely computer enable` on it first.", "locally_disabled");
44
+ return fail("Computer use is turned off on this device (`frely computer disable`). Run `frely computer enable` on it to allow it again.", "locally_disabled");
45
45
  try {
46
46
  if (tool !== "list_apps") {
47
47
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/computer/toolset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/computer/toolset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The iroh native module as a single-file build embeds it. Left null in the repository: `build:standalone` writes the
3
+ * target's `.node` import here for the build and restores this file afterwards, so the npm package loads `@number0/iroh`
4
+ * from node_modules instead (see p2p.ts).
5
+ */
6
+ export declare const embeddedIroh: unknown;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The iroh native module as a single-file build embeds it. Left null in the repository: `build:standalone` writes the
3
+ * target's `.node` import here for the build and restores this file afterwards, so the npm package loads `@number0/iroh`
4
+ * from node_modules instead (see p2p.ts).
5
+ */
6
+ export const embeddedIroh = null;
7
+ //# sourceMappingURL=iroh-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iroh-native.js","sourceRoot":"","sources":["../../src/runtime/iroh-native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAY,IAAI,CAAC"}
@@ -68,6 +68,8 @@ export declare function nameDiscovered(hits: Array<ProbeHit & {
68
68
  export interface LocalMcpHubOptions {
69
69
  discovery?: DiscoveryDeps;
70
70
  loadManual?: () => Promise<LocalMcpEntry[]>;
71
+ /** Entries every device offers without local registration (computer use); a manual entry of the same name wins. */
72
+ loadBuiltin?: () => Promise<LocalMcpEntry[]>;
71
73
  idleMs?: number;
72
74
  refreshMs?: number;
73
75
  log?: (message: string) => void;
@@ -7,6 +7,7 @@ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
7
7
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
8
8
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
9
9
  import { ensureCredentialDirectory, readPrivateFile, writePrivateFile } from "../credential-file.js";
10
+ import { builtinLocalMcps } from "../computer/builtin.js";
10
11
  import { VERSION } from "../version.js";
11
12
  import { safeEnv } from "./workspace.js";
12
13
  /**
@@ -271,9 +272,11 @@ export class LocalMcpHub {
271
272
  this.options.log?.(`local MCP list unreadable: ${error instanceof Error ? error.message : String(error)}`);
272
273
  return [];
273
274
  });
275
+ const builtin = await (this.options.loadBuiltin ?? builtinLocalMcps)().catch(() => []);
276
+ const own = [...builtin.filter((entry) => !manual.some((item) => item.name === entry.name)), ...manual];
274
277
  const covered = new Set(manual.flatMap((entry) => entry.transport === "http" ? [Number(new URL(entry.url).port)] : []));
275
278
  const hits = await discoverLoopbackMcps(this.options.discovery, covered);
276
- this.entries = [...manual, ...nameDiscovered(hits, manual.map((entry) => entry.name))];
279
+ this.entries = [...own, ...nameDiscovered(hits, own.map((entry) => entry.name))];
277
280
  this.refreshedAt = Date.now();
278
281
  const live = new Map(this.entries.map((entry) => [entry.name, connectionKey(entry)]));
279
282
  for (const [name, item] of [...this.pool])