frely-cli 0.9.5 → 0.9.7

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.
Files changed (78) hide show
  1. package/README.md +30 -8
  2. package/README.zh-CN.md +18 -7
  3. package/dist/agent-help.d.ts +110 -14
  4. package/dist/agent-help.js +20 -9
  5. package/dist/agent-help.js.map +1 -1
  6. package/dist/auth.d.ts +14 -1
  7. package/dist/auth.js +14 -22
  8. package/dist/auth.js.map +1 -1
  9. package/dist/cloud.d.ts +11 -1
  10. package/dist/cloud.js +73 -1
  11. package/dist/cloud.js.map +1 -1
  12. package/dist/computer/command.d.ts +6 -0
  13. package/dist/computer/command.js +53 -0
  14. package/dist/computer/command.js.map +1 -0
  15. package/dist/computer/guard.d.ts +18 -0
  16. package/dist/computer/guard.js +82 -0
  17. package/dist/computer/guard.js.map +1 -0
  18. package/dist/computer/image.d.ts +22 -0
  19. package/dist/computer/image.js +183 -0
  20. package/dist/computer/image.js.map +1 -0
  21. package/dist/computer/ocu.d.ts +40 -0
  22. package/dist/computer/ocu.js +59 -0
  23. package/dist/computer/ocu.js.map +1 -0
  24. package/dist/computer/runtime.d.ts +22 -0
  25. package/dist/computer/runtime.js +85 -0
  26. package/dist/computer/runtime.js.map +1 -0
  27. package/dist/computer/server.d.ts +11 -0
  28. package/dist/computer/server.js +31 -0
  29. package/dist/computer/server.js.map +1 -0
  30. package/dist/computer/state.d.ts +11 -0
  31. package/dist/computer/state.js +17 -0
  32. package/dist/computer/state.js.map +1 -0
  33. package/dist/computer/toolset.d.ts +22 -0
  34. package/dist/computer/toolset.js +112 -0
  35. package/dist/computer/toolset.js.map +1 -0
  36. package/dist/device/protocol.d.ts +2 -0
  37. package/dist/device/protocol.js +7 -1
  38. package/dist/device/protocol.js.map +1 -1
  39. package/dist/device/relay-client.d.ts +3 -0
  40. package/dist/device/relay-client.js +7 -1
  41. package/dist/device/relay-client.js.map +1 -1
  42. package/dist/index.js +103 -40
  43. package/dist/index.js.map +1 -1
  44. package/dist/local-mcp-command.d.ts +10 -0
  45. package/dist/local-mcp-command.js +105 -0
  46. package/dist/local-mcp-command.js.map +1 -0
  47. package/dist/mcp-authorization.d.ts +11 -2
  48. package/dist/mcp-authorization.js +21 -6
  49. package/dist/mcp-authorization.js.map +1 -1
  50. package/dist/mcp-command.d.ts +2 -1
  51. package/dist/mcp-command.js +18 -2
  52. package/dist/mcp-command.js.map +1 -1
  53. package/dist/provider/control.d.ts +8 -2
  54. package/dist/provider/control.js.map +1 -1
  55. package/dist/runtime/local-mcp.d.ts +114 -0
  56. package/dist/runtime/local-mcp.js +448 -0
  57. package/dist/runtime/local-mcp.js.map +1 -0
  58. package/dist/runtime/mcp.d.ts +20 -0
  59. package/dist/runtime/mcp.js +29 -0
  60. package/dist/runtime/mcp.js.map +1 -1
  61. package/dist/runtime/relay-mcp.d.ts +3 -1
  62. package/dist/runtime/relay-mcp.js +5 -1
  63. package/dist/runtime/relay-mcp.js.map +1 -1
  64. package/dist/runtime/relay-session.d.ts +2 -2
  65. package/dist/runtime/relay-session.js +1 -1
  66. package/dist/runtime/relay-session.js.map +1 -1
  67. package/dist/runtime/sandbox.js +3 -0
  68. package/dist/runtime/sandbox.js.map +1 -1
  69. package/dist/skill/cloud-item.d.ts +38 -0
  70. package/dist/skill/cloud-item.js +151 -0
  71. package/dist/skill/cloud-item.js.map +1 -0
  72. package/dist/upgrade/maintenance.js +1 -1
  73. package/dist/upgrade/maintenance.js.map +1 -1
  74. package/dist/upgrade/service-refresh.js +1 -1
  75. package/dist/upgrade/service-refresh.js.map +1 -1
  76. package/dist/upgrade/update.js +2 -2
  77. package/dist/upgrade/update.js.map +1 -1
  78. package/package.json +1 -1
@@ -0,0 +1,112 @@
1
+ import { assertAppAllowed, ComputerBlockedError, normalizeApp, redactBlockedAppLines } from "./guard.js";
2
+ import { downscalePng, pngSize } from "./image.js";
3
+ import { appendComputerAudit } from "./state.js";
4
+ /** Only these open-computer-use tools are ever exposed; a future upstream tool stays hidden until reviewed. */
5
+ const ALLOWED_TOOLS = new Set(["list_apps", "get_app_state", "click", "perform_secondary_action", "scroll", "drag", "type_text", "press_key", "set_value"]);
6
+ const COORDINATE_ARGS = { click: ["x", "y"], drag: ["from_x", "from_y", "to_x", "to_y"] };
7
+ /** A relay frame is capped at 8 MiB including JSON and base64 overhead; stay well under it. */
8
+ const MAX_RESULT_BYTES = 6 * 1024 * 1024;
9
+ export class ComputerToolset {
10
+ backend;
11
+ isLocallyEnabled;
12
+ audit;
13
+ /** original / sent size per app, from its latest screenshot, to map model coordinates back to device pixels. */
14
+ scales = new Map();
15
+ constructor(options) {
16
+ this.backend = options.backend;
17
+ this.isLocallyEnabled = options.isLocallyEnabled;
18
+ this.audit = options.audit ?? appendComputerAudit;
19
+ }
20
+ async available() {
21
+ return this.isLocallyEnabled().catch(() => false);
22
+ }
23
+ async listTools() {
24
+ if (!(await this.available()))
25
+ return [];
26
+ const tools = await this.backend.listTools();
27
+ return tools.filter((tool) => ALLOWED_TOOLS.has(tool.name)).map((tool) => ({
28
+ ...tool,
29
+ description: `${(tool.description ?? "").replace(/\s*This tool is part of plugin `Computer Use`\./u, "")} Controls the user's real desktop on this device.`.trim(),
30
+ }));
31
+ }
32
+ async call(name, args, signal) {
33
+ const started = performance.now();
34
+ const tool = name;
35
+ const app = typeof args.app === "string" ? args.app : undefined;
36
+ const finish = (result, reason) => {
37
+ void this.audit({ ts: new Date().toISOString(), tool, ...(app ? { app } : {}), ok: !result.isError, ms: Math.round(performance.now() - started), ...(reason ? { reason } : {}) });
38
+ return result;
39
+ };
40
+ const fail = (message, reason) => finish({ isError: true, content: [{ type: "text", text: message }] }, reason);
41
+ if (!ALLOWED_TOOLS.has(tool))
42
+ return fail(`Unknown tool: ${name}`, "unknown_tool");
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");
45
+ try {
46
+ if (tool !== "list_apps") {
47
+ try {
48
+ assertAppAllowed(args.app);
49
+ }
50
+ catch (error) {
51
+ if (error instanceof ComputerBlockedError)
52
+ throw error;
53
+ return fail(error instanceof Error ? error.message : "Invalid app.", "invalid_app");
54
+ }
55
+ }
56
+ const sent = this.scaleCoordinates(tool, args);
57
+ const result = await this.backend.callTool(tool, sent, signal);
58
+ const shaped = tool === "list_apps" ? redactList(result) : this.shapeScreenshots(result, app);
59
+ return finish(shaped);
60
+ }
61
+ catch (error) {
62
+ if (error instanceof ComputerBlockedError)
63
+ return fail(error.message, "blocked");
64
+ return fail(error instanceof Error ? error.message : "Computer use failed.", "backend_error");
65
+ }
66
+ }
67
+ async close() {
68
+ await this.backend.close();
69
+ }
70
+ scaleCoordinates(tool, args) {
71
+ const keys = COORDINATE_ARGS[tool];
72
+ const scale = typeof args.app === "string" ? this.scales.get(normalizeApp(args.app)) : undefined;
73
+ if (!keys || !scale || scale === 1)
74
+ return args;
75
+ const out = { ...args };
76
+ for (const key of keys)
77
+ if (typeof out[key] === "number")
78
+ out[key] = Math.round(out[key] * scale);
79
+ return out;
80
+ }
81
+ shapeScreenshots(result, app) {
82
+ let total = 0;
83
+ const content = result.content.map((item) => {
84
+ if (item.type !== "image" || typeof item.data !== "string")
85
+ return item;
86
+ const original = Buffer.from(item.data, "base64");
87
+ const scaled = downscalePng(original);
88
+ if (scaled) {
89
+ if (app)
90
+ this.scales.set(normalizeApp(app), scaled.scale);
91
+ return { ...item, data: scaled.data.toString("base64"), mimeType: "image/png" };
92
+ }
93
+ // Not a plain PNG we can decode: keep it only if it is already small and not oversized in pixels.
94
+ const size = pngSize(original);
95
+ if (app)
96
+ this.scales.set(normalizeApp(app), 1);
97
+ if (original.length > 1.5 * 1024 * 1024 || (size && Math.max(size.width, size.height) > 2560)) {
98
+ return { type: "text", text: "Screenshot omitted: it is too large and could not be resized." };
99
+ }
100
+ return item;
101
+ });
102
+ for (const item of content)
103
+ total += (item.data?.length ?? 0) + (item.text?.length ?? 0);
104
+ if (total > MAX_RESULT_BYTES)
105
+ return { isError: true, content: [{ type: "text", text: "The result was too large to send. Try a smaller window or lower max_tree_nodes." }] };
106
+ return { ...result, content };
107
+ }
108
+ }
109
+ function redactList(result) {
110
+ return { ...result, content: result.content.map((item) => item.type === "text" && typeof item.text === "string" ? { ...item, text: redactBlockedAppLines(item.text) } : item) };
111
+ }
112
+ //# sourceMappingURL=toolset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/computer/toolset.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export type DeviceRelayRequest = {
9
9
  authorizationId?: string;
10
10
  /** Enabled MCP toolsets on the authorization (relay server -> device). Absent means ["workspace"] (older relays). */
11
11
  toolsets?: string[];
12
+ /** Device-local MCP servers the owner enabled on the authorization (relay server -> device). Absent means none. */
13
+ localMcps?: string[];
12
14
  payload: unknown;
13
15
  };
14
16
  /** Device -> relay capability report rendered by the web console (plan §6.4). */
@@ -37,11 +37,13 @@ export function validateDeviceRelayEnvelope(value) {
37
37
  throw new DeviceRelayProtocolError("frame_invalid");
38
38
  assertRequestId(record.id);
39
39
  if (record.type === "request") {
40
- exactKeys(record, ["protocol", "type", "id", "method", "payload", ...(record.authorizationId !== undefined ? ["authorizationId"] : []), ...(record.toolsets !== undefined ? ["toolsets"] : [])]);
40
+ exactKeys(record, ["protocol", "type", "id", "method", "payload", ...(record.authorizationId !== undefined ? ["authorizationId"] : []), ...(record.toolsets !== undefined ? ["toolsets"] : []), ...(record.localMcps !== undefined ? ["localMcps"] : [])]);
41
41
  if (record.authorizationId !== undefined && (record.method !== "mcp" || typeof record.authorizationId !== "string" || !/^mca_[a-f0-9]{32}$/u.test(record.authorizationId)))
42
42
  throw new DeviceRelayProtocolError("frame_invalid");
43
43
  if (record.toolsets !== undefined && (record.method !== "mcp" || !isToolsetList(record.toolsets)))
44
44
  throw new DeviceRelayProtocolError("frame_invalid");
45
+ if (record.localMcps !== undefined && (record.method !== "mcp" || !isLocalMcpList(record.localMcps)))
46
+ throw new DeviceRelayProtocolError("frame_invalid");
45
47
  if (record.method !== "mcp" && record.method !== "provider" && record.method !== "node" && record.method !== "agent")
46
48
  throw new DeviceRelayProtocolError("frame_invalid");
47
49
  return;
@@ -97,6 +99,10 @@ export function validateDeviceRelayEnvelope(value) {
97
99
  }
98
100
  throw new DeviceRelayProtocolError("frame_invalid");
99
101
  }
102
+ function isLocalMcpList(value) {
103
+ return Array.isArray(value) && value.length >= 1 && value.length <= 32 && new Set(value).size === value.length
104
+ && value.every((item) => typeof item === "string" && /^[a-z0-9][a-z0-9-]{0,31}$/u.test(item));
105
+ }
100
106
  function isToolsetList(value) {
101
107
  if (!Array.isArray(value) || value.length < 1 || value.length > 8)
102
108
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/device/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/device/protocol.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { MaintenanceGate } from "../upgrade/maintenance.js";
2
2
  import { McpLease } from "../runtime/mcp-lease.js";
3
3
  import { type ConnectionEvent } from "./connection-status.js";
4
+ import type { LocalMcpHub } from "../runtime/local-mcp.js";
4
5
  import type { AgentService } from "../agent/agent-service.js";
5
6
  import type { RelaySession } from "../runtime/relay-session.js";
6
7
  export interface RelayServeOptions {
@@ -25,6 +26,8 @@ export interface RelayServeOptions {
25
26
  agent?: AgentService;
26
27
  /** Device capability report sent once per connection for the web console (plan §6.4). */
27
28
  capabilities?: () => Record<string, unknown> | Promise<Record<string, unknown>> | undefined;
29
+ /** Device-local MCP servers; enabled names arrive on each mcp request (plan mcp/本机MCP转发-方案.md). */
30
+ localMcp?: LocalMcpHub;
28
31
  }
29
32
  export declare function serveDeviceRelay(options: RelayServeOptions): Promise<void>;
30
33
  export declare function isTransportFallbackEligible(error: unknown): boolean;
@@ -58,6 +58,7 @@ export async function serveDeviceRelay(options) {
58
58
  session = await RelayMcpSession.create(options.workspace, {
59
59
  assertAuthorized: () => guard.assert(), signal: guard.controller.signal, log, ...(maintenance ? { maintenance } : {}),
60
60
  ...(options.agent ? { callAgent: createAgentCallBridge(options.agent, { workspace: options.workspace }) } : {}),
61
+ ...(options.localMcp ? { localMcp: options.localMcp } : {}),
61
62
  });
62
63
  const activeSession = session;
63
64
  guard.controller.signal.addEventListener("abort", () => { void activeSession.close(); }, { once: true });
@@ -163,12 +164,17 @@ export async function serveConnection(websocketUrl, accessToken, deviceId, sessi
163
164
  };
164
165
  const heartbeat = setInterval(ping, 30_000);
165
166
  heartbeat.unref?.();
167
+ // Device-local MCP servers come and go, so the report is refreshed while connected.
168
+ const capabilityTimer = capabilities ? setInterval(() => { void sendCapabilities(socket, capabilities); }, 60_000) : undefined;
169
+ capabilityTimer?.unref?.();
166
170
  const finish = (error) => {
167
171
  if (finished)
168
172
  return;
169
173
  finished = true;
170
174
  unregisterOutput?.();
171
175
  clearInterval(heartbeat);
176
+ if (capabilityTimer)
177
+ clearInterval(capabilityTimer);
172
178
  for (const [id, item] of inflight) {
173
179
  cancelled.add(id);
174
180
  item.controller.abort();
@@ -284,7 +290,7 @@ async function executeMcpRequest(request, session, lease) {
284
290
  if (!session || !lease || request.authorizationId !== lease.authorizationId)
285
291
  throw new Error("MCP execution authorization is missing or mismatched.");
286
292
  lease.assert();
287
- return session.execute(request.payload, request.id, request.toolsets);
293
+ return session.execute(request.payload, request.id, request.toolsets, request.localMcps);
288
294
  }
289
295
  async function executeNodeRequest(request, session) {
290
296
  if (!session)
@@ -1 +1 @@
1
- {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../../src/device/relay-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-client.js","sourceRoot":"","sources":["../../src/device/relay-client.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { upgrade } from "./upgrade/update.js";
3
- import { requireMcpAuthorization, inspectMcpMetadataOrQuarantine, revokeMcpAuthorization } from "./mcp-authorization.js";
3
+ import { requireMcpAuthorization, inspectMcpMetadataOrQuarantine, revokeMcpAuthorization, generateMcpKey, parseMcpDays, MCP_DEFAULT_DAYS } from "./mcp-authorization.js";
4
+ import { realpath } from "node:fs/promises";
5
+ import { runLocalMcpCommand } from "./local-mcp-command.js";
4
6
  import { runWorkspaceCommand } from "./workspace-command.js";
5
7
  import { McpLease } from "./runtime/mcp-lease.js";
6
8
  import { join, resolve } from "node:path";
7
9
  import { stdin, stdout } from "node:process";
8
- import { inspectAuth, loginDevice, logout, normalizeRelayUrl, requireLogin, initEmailDeviceLogin, completeEmailDeviceLogin, savePendingEmailChallenge, readPendingEmailChallenge, deletePendingEmailChallenge, localDeviceId, pollDeviceToken, SERVICE, accountKey, writeConfig, readConfig, CONFIG_VERSION } from "./auth.js";
9
- import { basicCredentialStore as credentialStore } from "./credential-basic.js";
10
+ import { inspectAuth, loginDevice, logout, normalizeRelayUrl, requireLogin, initEmailDeviceLogin, completeEmailDeviceLogin, savePendingEmailChallenge, readPendingEmailChallenge, deletePendingEmailChallenge, localDeviceId, finishDeviceLogin, readConfig } from "./auth.js";
10
11
  import { doctor, formatDoctor } from "./diagnostics.js";
11
12
  import { ensureDevice } from "./device/control.js";
12
13
  import { createLocalProviderToken, loadOrCreateDeviceIdentity } from "./device/identity.js";
@@ -22,6 +23,7 @@ import { loadAgentConfig, saveAgentConfig } from "./agent/agent-service.js";
22
23
  import { readAppInstall } from "./agent/app-install.js";
23
24
  import { appInstallStatus, installApp, openApp, uninstallApp, updateApp } from "./app-manager.js";
24
25
  import { detectSandboxBackend } from "./runtime/sandbox.js";
26
+ import { LocalMcpHub } from "./runtime/local-mcp.js";
25
27
  import { provisionAgentKey } from "./agent/app-key.js";
26
28
  import { startAgentOpsServer } from "./agent/ops-server.js";
27
29
  import { runAgentOpsStdioBridge } from "./agent/ops-stdio.js";
@@ -33,13 +35,18 @@ import { agentHelp, cliUsage, mcpUsage, subcommandUsage } from "./agent-help.js"
33
35
  import { ensureMcpAuthorization, normalizeMcpArgs } from "./mcp-command.js";
34
36
  import { getKeyBudget, KeyBudgetError, publicKeyBudgetError } from "./key-budget.js";
35
37
  import { runNetwork, publicNetworkError } from "./network.js";
38
+ import { runComputerCommand } from "./computer/command.js";
39
+ import { runComputerMcpServer } from "./computer/server.js";
36
40
  import { agentManifestUrl, installSkillAdapter, invokeInstalledAgent, publicSkillAccessError, removeSkillAdapter, skillAdapterStatus } from "./skill/access.js";
41
+ import { installCloudItem } from "./skill/cloud-item.js";
42
+ import { callCloudTool } from "./cloud.js";
43
+ const DEFAULT_EMAIL_LOGIN_MCP_DAYS = MCP_DEFAULT_DAYS;
37
44
  async function main() {
38
45
  const args = normalizeMcpArgs(process.argv.slice(2));
39
46
  const command = args[0];
40
- if (command === "upgrade") {
47
+ if (command === "update") {
41
48
  if (args.length !== 1)
42
- throw new Error("Usage: frely upgrade. Version checks are available in frely doctor.");
49
+ throw new Error("Usage: frely update. Version checks are available in frely doctor.");
43
50
  const result = await upgrade((message) => process.stderr.write(message));
44
51
  stdout.write(result.message + "\n");
45
52
  return;
@@ -150,6 +157,33 @@ async function main() {
150
157
  }
151
158
  throw new Error(`Unknown agent command.\n${subcommandUsage("agent")}`);
152
159
  }
160
+ if (command === "item") {
161
+ if (args[1] !== "install") {
162
+ stdout.write(subcommandUsage("item"));
163
+ return;
164
+ }
165
+ const skillId = args[2];
166
+ if (!skillId || skillId.startsWith("-"))
167
+ throw new Error("Usage: frely item install <item-id> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--dir <path>] [--json]");
168
+ const host = skillHost(option(args, "--host") ?? "generic");
169
+ const scope = skillScope(option(args, "--scope") ?? "global");
170
+ const dir = option(args, "--dir");
171
+ const value = await installCloudItem({ skillId, call: callCloudTool, host, scope, ...(dir ? { dir } : {}) });
172
+ if (args.includes("--json")) {
173
+ stdout.write(`${JSON.stringify(value)}\n`);
174
+ return;
175
+ }
176
+ stdout.write(`${value.kind === "prompt" ? "Prompt" : "Skill"}: ${value.name} (v${value.version})\nPath: ${value.path}\nFiles: ${value.files}\n`);
177
+ if (value.premium === "installed")
178
+ stdout.write("Paid part: installed\n");
179
+ if (value.premium === "pass_required")
180
+ stdout.write(`Paid part: not installed. Buy a pass in the marketplace or with frely cloud call passes.buy --json '{"productKind":"cloud_skill","productId":"${value.id}","duration":"30d"}', then run this command again.\n`);
181
+ if (value.hasScripts)
182
+ stdout.write("This item contains scripts. Read them before you let an agent run them; they were saved without execute permission.\n");
183
+ if (value.kind === "skill")
184
+ stdout.write("Restart or reload the agent session so it rescans Skills.\n");
185
+ return;
186
+ }
153
187
  if (command === "login") {
154
188
  if (args.includes("--help") || args.includes("-h"))
155
189
  return usage();
@@ -159,42 +193,35 @@ async function main() {
159
193
  const code = option(args, "--code");
160
194
  const invite = option(args, "--invite");
161
195
  const json = args.includes("--json");
162
- // Email-based device login (two-step)
163
- if (email) {
196
+ // Email-based device login (two steps): `--email` sends the code, `--code` finishes.
197
+ if (email || code) {
198
+ const relayUrl = normalizeRelayUrl(relay);
164
199
  if (code) {
165
- // Step 2: Verify code and complete login
166
200
  try {
167
- // Read pending challenge from state
168
- const pendingChallenge = await readPendingEmailChallenge(relay || "https://frely.cloud");
201
+ const pendingChallenge = await readPendingEmailChallenge(relayUrl);
169
202
  if (!pendingChallenge) {
170
203
  stdout.write("No pending email verification. Run `frely login --email <email>` first.\n");
171
204
  process.exitCode = 1;
172
205
  return;
173
206
  }
174
- // Complete email verification
175
- const result = await completeEmailDeviceLogin(relay || "https://frely.cloud", pendingChallenge, code);
176
- const user = result.user;
177
- // Poll for access token
207
+ const result = await completeEmailDeviceLogin(relayUrl, pendingChallenge, code);
178
208
  const deviceId = localDeviceId((await readConfig().catch(() => null))?.deviceId);
179
- const token = await pollDeviceToken(relay || "https://frely.cloud", pendingChallenge, deviceId);
180
- // Store credentials
181
- const relayUrl = normalizeRelayUrl(relay);
182
- const key = accountKey(relayUrl);
183
- await credentialStore.setPassword(SERVICE, key, JSON.stringify({
184
- version: 1,
185
- type: "basic-oauth",
186
- accessToken: token.accessToken,
187
- ...(token.refreshToken ? { refreshToken: token.refreshToken } : {}),
188
- expiresAt: token.expiresAt,
189
- ...(token.sessionBindingId ? { sessionBindingId: token.sessionBindingId } : {}),
190
- }));
191
- await writeConfig({ version: CONFIG_VERSION, relayUrl, user, deviceId });
209
+ const { user } = await finishDeviceLogin(relayUrl, pendingChallenge, deviceId);
192
210
  await deletePendingEmailChallenge(relayUrl);
193
211
  stdout.write(`Logged in as ${user.email}.\n`);
194
- if (token.sessionBindingId) {
195
- stdout.write("Your server supports per-device session management.\n");
212
+ const mcp = pendingChallenge.mcp;
213
+ if (mcp && result.mcpPreapproval) {
214
+ const authorization = await ensureMcpAuthorization({
215
+ workspace: mcp.workspace, days: String(mcp.days),
216
+ notify: (message) => { process.stderr.write(message); },
217
+ preset: { privateKeyPem: mcp.privateKeyPem, preapproval: result.mcpPreapproval },
218
+ });
219
+ stdout.write(`Device MCP enabled for ${authorization.grant.workspace} until ${authorization.grant.expiresAt}. Remove it any time with \`frely mcp remove\`.\n`);
220
+ stdout.write(`MCP address: ${authorization.mcpUrl}\n`);
221
+ }
222
+ else {
223
+ stdout.write("Run `frely mcp url` on the computer you want to control, then connect your MCP client with OAuth.\n");
196
224
  }
197
- stdout.write("Run `frely mcp url --workspace <path>` on the computer you want to control, then connect your MCP client with OAuth.\n");
198
225
  }
199
226
  catch (error) {
200
227
  stdout.write(`Verification failed: ${error instanceof Error ? error.message : String(error)}\n`);
@@ -202,22 +229,30 @@ async function main() {
202
229
  }
203
230
  return;
204
231
  }
205
- // Step 1: Send verification code
206
232
  try {
207
- const challenge = await initEmailDeviceLogin(relay || "https://frely.cloud", email, invite);
208
- // Store challenge for step 2
209
- await savePendingEmailChallenge(normalizeRelayUrl(relay), challenge);
233
+ let mcp;
234
+ if (args.includes("--mcp")) {
235
+ const workspace = await realpath(resolve(option(args, "--workspace") || process.cwd()));
236
+ const days = parseMcpDays(option(args, "--days") ?? DEFAULT_EMAIL_LOGIN_MCP_DAYS);
237
+ mcp = { ...generateMcpKey(), workspace, days };
238
+ }
239
+ const challenge = await initEmailDeviceLogin(relayUrl, email, invite, mcp);
240
+ await savePendingEmailChallenge(relayUrl, challenge);
210
241
  if (json) {
211
242
  stdout.write(JSON.stringify({
212
243
  state: "code_sent",
213
244
  email: challenge.email,
214
245
  expiresIn: challenge.expiresIn,
215
246
  challengeId: challenge.challengeId,
247
+ ...(mcp ? { deviceMcp: { workspace: mcp.workspace, days: mcp.days } } : {}),
216
248
  }, null, 2) + "\n");
217
249
  }
218
250
  else {
219
251
  stdout.write(`Verification code sent to ${challenge.email}\n`);
220
252
  stdout.write(`Expires in: ${challenge.expiresIn} seconds\n`);
253
+ if (mcp) {
254
+ stdout.write(`Entering the code also lets remote agents read and write files and run commands in ${mcp.workspace} for ${mcp.days} days. Remove it later with \`frely mcp remove\`.\n`);
255
+ }
221
256
  stdout.write(`Run: frely login --code <code>\n`);
222
257
  }
223
258
  }
@@ -286,15 +321,21 @@ async function main() {
286
321
  const models = selectedModels?.length ? [...new Set(selectedModels)] : await discoverLocalModels(baseUrl);
287
322
  if (models.length < 1 || models.length > 256 || models.some((model) => !isSupportedLocalModelName(model)))
288
323
  throw new Error("At least one valid model is required; model names cannot contain whitespace or `/`.");
289
- const slots = await listPersonalProviderSlots();
290
324
  const requestedSlot = option(args, "--slot");
325
+ const forceCreator = args.includes("--creator");
326
+ if (forceCreator && requestedSlot)
327
+ throw new Error("Use either --slot or --creator, not both.");
328
+ const slots = forceCreator ? [] : await listPersonalProviderSlots();
291
329
  const slot = requestedSlot ? slots.find((candidate) => candidate.id === requestedSlot) : slots.find((candidate) => candidate.lifecycle === "active" && candidate.provider === null);
292
- if (!slot)
293
- throw new Error(requestedSlot ? "The requested personal Provider slot is unavailable." : "No empty active personal Provider slot is available.");
294
- if (slot.lifecycle !== "active" || slot.provider !== null)
330
+ if (requestedSlot && !slot)
331
+ throw new Error("The requested personal Provider slot is unavailable.");
332
+ if (slot && (slot.lifecycle !== "active" || slot.provider !== null))
295
333
  throw new Error("The selected personal Provider slot is not empty and active.");
296
334
  const name = (option(args, "--name") ?? `${driver === "ollama" ? "Ollama" : "Local"}: ${models[0]}`).slice(0, 128);
297
- const prepared = await prepareLocalProvider({ deviceId: device.deviceId, slotId: slot.id, name, models });
335
+ // Without an empty personal slot the Provider counts against the Creator Plan Provider limit.
336
+ const prepared = await prepareLocalProvider(slot ? { deviceId: device.deviceId, slotId: slot.id, name, models } : { deviceId: device.deviceId, source: "creator", name, models });
337
+ if (!slot)
338
+ stdout.write("Created as a Creator Provider. Pick these models when you create a Frely Agent; buyers call the Agent, and this device must stay online.\n");
298
339
  const provider = { providerId: prepared.providerId, name, driver, baseUrl, providerBaseUrl: prepared.providerBaseUrl, models, createdAt: new Date().toISOString(), pending: true };
299
340
  await saveLocalProvider(provider);
300
341
  await activateLocalProvider(auth, device.deviceId, provider);
@@ -351,6 +392,14 @@ async function main() {
351
392
  stdout.write(`Ops socket: ${socketPath}\nStatus: ${probe.running ? "running" : "stopped (start with frely mcp serve)"}\n`);
352
393
  return;
353
394
  }
395
+ if (command === "computer") {
396
+ if (args[1] === "mcp") {
397
+ await runComputerMcpServer();
398
+ return;
399
+ }
400
+ stdout.write(await runComputerCommand(args.slice(1)));
401
+ return;
402
+ }
354
403
  if (command === "app" && args[1] === "remote") {
355
404
  const action = args[2];
356
405
  if (action === undefined) {
@@ -434,21 +483,26 @@ async function main() {
434
483
  const stop = () => controller.abort();
435
484
  process.once("SIGINT", stop);
436
485
  process.once("SIGTERM", stop);
486
+ // Device-local MCP servers are only served with device MCP, never for a provider-only relay.
487
+ const localMcp = providerOnly ? undefined : new LocalMcpHub({ log: agentLog });
488
+ localMcp?.start();
437
489
  try {
438
490
  const capabilities = async () => {
439
491
  const install = await readAppInstall().then((value) => value, () => null);
440
492
  const config = await loadAgentConfig();
493
+ await localMcp?.ensureFresh(5 * 60_000).catch(() => undefined);
441
494
  return {
442
495
  app: { ...(install ? { installed: true, version: install.appVersion } : { installed: false }) },
443
496
  sandbox: detectSandboxBackend(),
444
497
  agentHost: true,
445
498
  remoteControl: config.remoteControlEnabled,
499
+ ...(localMcp ? { localMcp: localMcp.capabilities() } : {}),
446
500
  };
447
501
  };
448
502
  const ops = await startAgentOpsServer(agent, { workspace: workspace ?? process.cwd(), log: agentLog });
449
503
  process.stderr.write(`Agent ops socket: ${ops.path}\n`);
450
504
  try {
451
- await serveDeviceRelay({ ...(workspace ? { workspace } : {}), agent, capabilities, managedService: Boolean(serviceConfigHome), restartForUpgrade: stop, signal: controller.signal, log: (message) => process.stderr.write(`${message}\n`) });
505
+ await serveDeviceRelay({ ...(workspace ? { workspace } : {}), ...(localMcp ? { localMcp } : {}), agent, capabilities, managedService: Boolean(serviceConfigHome), restartForUpgrade: stop, signal: controller.signal, log: (message) => process.stderr.write(`${message}\n`) });
452
506
  }
453
507
  finally {
454
508
  await ops.close().catch(() => undefined);
@@ -457,7 +511,16 @@ async function main() {
457
511
  finally {
458
512
  process.off("SIGINT", stop);
459
513
  process.off("SIGTERM", stop);
514
+ await localMcp?.close();
515
+ }
516
+ return;
517
+ }
518
+ if (command === "mcp" && args[1] === "local") {
519
+ if (args[2] === undefined) {
520
+ stdout.write(subcommandUsage("mcp.local"));
521
+ return;
460
522
  }
523
+ await runLocalMcpCommand({ args, write: (text) => { stdout.write(text); } });
461
524
  return;
462
525
  }
463
526
  if (command === "mcp" && args[1] === "workspace") {