frely-cli 0.23.18 → 0.23.20

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 (91) hide show
  1. package/README.md +19 -17
  2. package/README.zh-CN.md +19 -16
  3. package/dist/agent/local/command.js +3 -1
  4. package/dist/agent/local/command.js.map +1 -1
  5. package/dist/agent/local/confine.js +2 -1
  6. package/dist/agent/local/confine.js.map +1 -1
  7. package/dist/agent/local/store.d.ts +4 -0
  8. package/dist/agent/local/store.js +8 -0
  9. package/dist/agent/local/store.js.map +1 -1
  10. package/dist/agent/local/supervisor.js +2 -1
  11. package/dist/agent/local/supervisor.js.map +1 -1
  12. package/dist/agent-help.d.ts +34 -94
  13. package/dist/agent-help.js +24 -31
  14. package/dist/agent-help.js.map +1 -1
  15. package/dist/auth.d.ts +9 -10
  16. package/dist/auth.js +7 -4
  17. package/dist/auth.js.map +1 -1
  18. package/dist/computer/builtin.d.ts +1 -1
  19. package/dist/computer/builtin.js +2 -2
  20. package/dist/computer/builtin.js.map +1 -1
  21. package/dist/computer/command.d.ts +2 -2
  22. package/dist/computer/command.js +8 -8
  23. package/dist/computer/command.js.map +1 -1
  24. package/dist/computer/server.d.ts +1 -1
  25. package/dist/computer/server.js +1 -1
  26. package/dist/computer/server.js.map +1 -1
  27. package/dist/computer/toolset.d.ts +1 -1
  28. package/dist/computer/toolset.js +1 -1
  29. package/dist/computer/toolset.js.map +1 -1
  30. package/dist/device/relay-client.js +8 -5
  31. package/dist/device/relay-client.js.map +1 -1
  32. package/dist/diagnostics.d.ts +1 -2
  33. package/dist/diagnostics.js +2 -2
  34. package/dist/diagnostics.js.map +1 -1
  35. package/dist/index.js +115 -137
  36. package/dist/index.js.map +1 -1
  37. package/dist/key-budget.js +1 -1
  38. package/dist/key-budget.js.map +1 -1
  39. package/dist/link-claim.d.ts +9 -3
  40. package/dist/link-claim.js +17 -3
  41. package/dist/link-claim.js.map +1 -1
  42. package/dist/mcp-authorization.d.ts +7 -1
  43. package/dist/mcp-authorization.js +9 -11
  44. package/dist/mcp-authorization.js.map +1 -1
  45. package/dist/mcp-command.d.ts +3 -4
  46. package/dist/mcp-command.js +7 -12
  47. package/dist/mcp-command.js.map +1 -1
  48. package/dist/remote-lock.d.ts +8 -0
  49. package/dist/remote-lock.js +22 -1
  50. package/dist/remote-lock.js.map +1 -1
  51. package/dist/runtime/mcp.js +3 -0
  52. package/dist/runtime/mcp.js.map +1 -1
  53. package/dist/runtime/sandbox-proxy.d.ts +5 -2
  54. package/dist/runtime/sandbox-proxy.js +9 -5
  55. package/dist/runtime/sandbox-proxy.js.map +1 -1
  56. package/dist/skill/access.d.ts +1 -1
  57. package/dist/skill/access.js +2 -2
  58. package/dist/skill/access.js.map +1 -1
  59. package/dist/skill/entry.d.ts +1 -1
  60. package/dist/skill/entry.js +3 -3
  61. package/dist/skill/gift.d.ts +7 -0
  62. package/dist/skill/gift.js +22 -0
  63. package/dist/skill/gift.js.map +1 -0
  64. package/dist/skill/remote-mcp.d.ts +1 -1
  65. package/dist/skill/remote-mcp.js +3 -3
  66. package/dist/skill/remote-mcp.js.map +1 -1
  67. package/dist/trust/jcs.d.ts +2 -0
  68. package/dist/trust/jcs.js +22 -0
  69. package/dist/trust/jcs.js.map +1 -0
  70. package/dist/trust/observe.d.ts +23 -0
  71. package/dist/trust/observe.js +45 -0
  72. package/dist/trust/observe.js.map +1 -0
  73. package/dist/trust/record.d.ts +78 -0
  74. package/dist/trust/record.js +93 -0
  75. package/dist/trust/record.js.map +1 -0
  76. package/dist/trust/webauthn.d.ts +33 -0
  77. package/dist/trust/webauthn.js +62 -0
  78. package/dist/trust/webauthn.js.map +1 -0
  79. package/dist/update/auto-update.d.ts +5 -3
  80. package/dist/update/auto-update.js +7 -10
  81. package/dist/update/auto-update.js.map +1 -1
  82. package/dist/update/installation.js +1 -1
  83. package/dist/update/installation.js.map +1 -1
  84. package/dist/update/release-signature.d.ts +23 -0
  85. package/dist/update/release-signature.js +44 -0
  86. package/dist/update/release-signature.js.map +1 -0
  87. package/dist/update/update.d.ts +4 -1
  88. package/dist/update/update.js +9 -2
  89. package/dist/update/update.js.map +1 -1
  90. package/package.json +1 -1
  91. package/skills/frely-cli/SKILL.md +5 -5
@@ -12,8 +12,7 @@ export interface DiagnosticCheck {
12
12
  status: "pass" | "fail" | "info";
13
13
  }
14
14
  export interface DoctorOptions {
15
- verbose?: boolean; /** Compatibility with doctor --mcp. */
16
- mcp?: boolean;
15
+ verbose?: boolean;
17
16
  }
18
17
  declare const defaultDependencies: {
19
18
  inspectAuth: typeof inspectAuth;
@@ -29,7 +29,7 @@ export async function statusSnapshot() {
29
29
  /** Release checks are bounded and informational; verbose also validates account/MCP online. */
30
30
  export async function doctor(options = {}, dependencies = defaultDependencies) {
31
31
  const updatePromise = dependencies.inspectUpdate();
32
- const verbose = options.verbose === true || options.mcp === true;
32
+ const verbose = options.verbose === true;
33
33
  const checks = [];
34
34
  const add = (name, status, detail) => checks.push({ name, status, ok: status !== "fail", detail });
35
35
  add("runtime", Number(process.versions.node.split(".")[0]) >= 22 ? "pass" : "fail", process.version);
@@ -58,7 +58,7 @@ export async function doctor(options = {}, dependencies = defaultDependencies) {
58
58
  || !Number.isFinite(Date.parse(metadata.grant.expiresAt)) || Date.parse(metadata.grant.expiresAt) <= now));
59
59
  const mcpMatches = Boolean(metadata && bindingMatches && metadata.grant.deviceId === binding?.deviceId
60
60
  && metadata.relayUrl === binding?.relayUrl && metadata.userId === binding?.userId);
61
- add("mcp", metadataError || expired || (metadata && !mcpMatches) || (!metadata && options.mcp) ? "fail" : metadata ? "pass" : "info", metadataIssue ?? (!metadata ? "Not enabled (optional)."
61
+ add("mcp", metadataError || expired || (metadata && !mcpMatches) ? "fail" : metadata ? "pass" : "info", metadataIssue ?? (!metadata ? "Not enabled (optional)."
62
62
  : expired ? "Authorization expired or inactive. Run frely link on to renew."
63
63
  : !mcpMatches ? "Authorization does not match this account/device. Run frely link on."
64
64
  : `Configured; expires ${metadata.grant.expiresAt} (local authorization).`));
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,8 +2,8 @@
2
2
  import { formatApprovalCode } from "./approval-code.js";
3
3
  import { applyDataDir, activeDataDir } from "./data-dir.js";
4
4
  import { update } from "./update/update.js";
5
- import { requireMcpAuthorization, inspectMcpMetadata, inspectMcpMetadataOrQuarantine, revokeMcpAuthorization, lockLinkOnServer, generateMcpKey, parseMcpDays, MCP_DEFAULT_DAYS } from "./mcp-authorization.js";
6
- import { chmod, readFile, realpath, stat, writeFile } from "node:fs/promises";
5
+ import { requireMcpAuthorization, inspectMcpMetadata, inspectMcpMetadataOrQuarantine, revokeMcpAuthorization, lockLinkOnServer } from "./mcp-authorization.js";
6
+ import { chmod, readFile, stat, writeFile } from "node:fs/promises";
7
7
  import { sshProxyConnect } from "./runtime/ssh-proxy.js";
8
8
  import { parseTunnelArguments, startTunnel, tunnelUsage } from "./runtime/tunnel.js";
9
9
  import { runSandboxProxyCommand } from "./runtime/sandbox-proxy.js";
@@ -39,11 +39,10 @@ import { appInstallStatus, installApp, openApp, uninstallApp, updateApp } from "
39
39
  import { detectSandboxBackend } from "./runtime/sandbox.js";
40
40
  import { LocalMcpHub, loadManualEntries } from "./runtime/local-mcp.js";
41
41
  import { reportedWorkspaces } from "./runtime/workspace-registry.js";
42
- import { ensureDefaultWorkspace } from "./default-workspace.js";
43
42
  import { VERSION } from "./version.js";
44
43
  import { agentHelpView, cliUsage, linkUsage, subcommandUsage } from "./agent-help.js";
45
- import { ensureMcpAuthorization, grantInactive, mcpStartLogin, normalizeLinkArgs, startMcp, takeInstallToken } from "./mcp-command.js";
46
- import { remoteLocked, remoteState, setRemoteLock } from "./remote-lock.js";
44
+ import { grantInactive, mcpStartLogin, normalizeLinkArgs, startMcp, takeInstallToken } from "./mcp-command.js";
45
+ import { remoteLocked, remoteState, setLinkOnPending, setRemoteLock } from "./remote-lock.js";
47
46
  import { watchLinkClaim } from "./link-claim.js";
48
47
  import { getKeyBudget, KeyBudgetError, publicKeyBudgetError } from "./key-budget.js";
49
48
  import { runNetwork, publicNetworkError } from "./network.js";
@@ -54,11 +53,11 @@ import { CloudToolError, installCloudItem, parseItemRef, trustCloudItem } from "
54
53
  import { checkItemUpdates, updateCloudItem } from "./skill/item-update.js";
55
54
  import { runSealedScript } from "./skill/sealed-run.js";
56
55
  import { installEntrySkill, ensureEntrySkill } from "./skill/entry.js";
56
+ import { redeemGift } from "./skill/gift.js";
57
57
  import { callRemoteTool, connectRemoteMcp, installRemoteMcpSkill, isNotASkill, listRemoteTools, mcpClientConfig, parseMcpName, RemoteMcpError } from "./skill/remote-mcp.js";
58
58
  import { callCloudTool } from "./cloud.js";
59
59
  import { createInterface } from "node:readline/promises";
60
60
  import { runUninstall } from "./uninstall.js";
61
- const DEFAULT_EMAIL_LOGIN_MCP_DAYS = MCP_DEFAULT_DAYS;
62
61
  /** Installs a published Agent as a local trigger Skill, from `username/name[@version]` (or the distribution id older scripts use). */
63
62
  async function installAgent(target, args) {
64
63
  const host = skillHost(option(args, "--host") ?? "generic");
@@ -132,7 +131,15 @@ async function main() {
132
131
  await new Promise(() => undefined);
133
132
  }
134
133
  if (command === "sandbox" && args[1] === "proxy") {
135
- await runSandboxProxyCommand(args.slice(2), (text) => { stdout.write(text); });
134
+ // The sandbox reads the proxy once, when the background service starts: restart a running one so the change applies now.
135
+ if (await runSandboxProxyCommand(args.slice(2), (text) => { stdout.write(text); })) {
136
+ if ((await serviceStatus()).active) {
137
+ await installDeviceRelayService();
138
+ stdout.write("Background service restarted to use it.\n");
139
+ }
140
+ else
141
+ stdout.write("It applies the next time the background service starts.\n");
142
+ }
136
143
  return;
137
144
  }
138
145
  if (command === "--version" || command === "-v" || command === "version") {
@@ -164,66 +171,6 @@ async function main() {
164
171
  process.exitCode = 2;
165
172
  return;
166
173
  }
167
- if (command === "remote") {
168
- const action = args[1];
169
- const ref = args[2];
170
- if (action !== "tools" && action !== "call" && action !== "config") {
171
- stdout.write(subcommandUsage("remote"));
172
- return;
173
- }
174
- if (!ref || ref.startsWith("-"))
175
- throw new Error(`Usage: frely remote ${action} <username/name>${action === "call" ? " <tool> [--json '<object>' | --input <file>]" : ""}`);
176
- parseMcpName(ref);
177
- const deps = { call: callCloudTool, replace: args.includes("--replace") };
178
- try {
179
- if (action === "tools") {
180
- const tools = await listRemoteTools(ref, deps);
181
- if (args.includes("--json"))
182
- stdout.write(`${JSON.stringify(tools, null, 2)}\n`);
183
- else
184
- stdout.write(tools.map((tool) => `${tool.name}${tool.description ? `: ${tool.description.replace(/\s+/gu, " ").slice(0, 200)}` : ""}\n`).join(""));
185
- return;
186
- }
187
- if (action === "config") {
188
- const connection = await connectRemoteMcp(ref, deps);
189
- const config = mcpClientConfig(connection);
190
- const file = option(args, "--write");
191
- if (file === undefined) {
192
- stdout.write(`${JSON.stringify(config, null, 2)}\n`);
193
- return;
194
- }
195
- await mergeMcpServers(file, config.mcpServers);
196
- stdout.write(`Wrote ${Object.keys(config.mcpServers)[0]} to ${file}. The file holds a key that works only for ${connection.name}; keep it private.\n`);
197
- return;
198
- }
199
- const tool = args[3];
200
- if (!tool || tool.startsWith("-"))
201
- throw new Error("Usage: frely remote call <username/name> <tool> [--json '<object>' | --input <file>]");
202
- if (args.includes("--json") && args.includes("--input"))
203
- throw new Error("Use --json or --input.");
204
- const inline = option(args, "--json"), path = option(args, "--input");
205
- const text = path !== undefined ? await readInputFile(path) : inline ?? "{}";
206
- let input;
207
- try {
208
- input = JSON.parse(text);
209
- }
210
- catch {
211
- throw new Error("The tool arguments must be a JSON object.");
212
- }
213
- if (input === null || typeof input !== "object" || Array.isArray(input))
214
- throw new Error("The tool arguments must be a JSON object.");
215
- const result = await callRemoteTool(ref, tool, input, deps);
216
- stdout.write(`${JSON.stringify(result, null, 2)}\n`);
217
- if (result?.isError === true)
218
- process.exitCode = 1;
219
- return;
220
- }
221
- catch (error) {
222
- if (error instanceof RemoteMcpError)
223
- throw new Error(error.message);
224
- throw error;
225
- }
226
- }
227
174
  if (command === "network") {
228
175
  const value = await runNetwork(args);
229
176
  if (args.includes("--json"))
@@ -242,13 +189,6 @@ async function main() {
242
189
  process.exitCode = await runAgentLocal(args.slice(2), { out: (text) => { stdout.write(text); }, err: (text) => { process.stderr.write(text); }, interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY), readSecret: () => readStdinSecret(8192) });
243
190
  return;
244
191
  }
245
- if (action === "install") {
246
- const target = args[2];
247
- if (!target || target.startsWith("-"))
248
- throw new Error("Usage: frely agent install <username/name[@version]> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--dir <project>] [--api-key-stdin] [--json]");
249
- await installAgent(target, args);
250
- return;
251
- }
252
192
  if (action === "run") {
253
193
  const target = args[2];
254
194
  if (!target || target.startsWith("-"))
@@ -426,13 +366,72 @@ async function main() {
426
366
  stdout.write("Restart or reload the agent session so it rescans Skills.\n");
427
367
  return;
428
368
  }
369
+ if (args[1] === "tools" || args[1] === "call" || args[1] === "config") {
370
+ const action = args[1];
371
+ const ref = args[2];
372
+ if (!ref || ref.startsWith("-"))
373
+ throw new Error(`Usage: frely item ${action} <username/name>${action === "call" ? " <tool> [--json '<object>' | --input <file>]" : ""}`);
374
+ parseMcpName(ref);
375
+ const deps = { call: callCloudTool, replace: args.includes("--replace") };
376
+ try {
377
+ if (action === "tools") {
378
+ const tools = await listRemoteTools(ref, deps);
379
+ if (args.includes("--json"))
380
+ stdout.write(`${JSON.stringify(tools, null, 2)}\n`);
381
+ else
382
+ stdout.write(tools.map((tool) => `${tool.name}${tool.description ? `: ${tool.description.replace(/\s+/gu, " ").slice(0, 200)}` : ""}\n`).join(""));
383
+ return;
384
+ }
385
+ if (action === "config") {
386
+ const connection = await connectRemoteMcp(ref, deps);
387
+ const config = mcpClientConfig(connection);
388
+ const file = option(args, "--write");
389
+ if (file === undefined) {
390
+ stdout.write(`${JSON.stringify(config, null, 2)}\n`);
391
+ return;
392
+ }
393
+ await mergeMcpServers(file, config.mcpServers);
394
+ stdout.write(`Wrote ${Object.keys(config.mcpServers)[0]} to ${file}. The file holds a key that works only for ${connection.name}; keep it private.\n`);
395
+ return;
396
+ }
397
+ const tool = args[3];
398
+ if (!tool || tool.startsWith("-"))
399
+ throw new Error("Usage: frely item call <username/name> <tool> [--json '<object>' | --input <file>]");
400
+ if (args.includes("--json") && args.includes("--input"))
401
+ throw new Error("Use --json or --input.");
402
+ const inline = option(args, "--json"), path = option(args, "--input");
403
+ const text = path !== undefined ? await readInputFile(path) : inline ?? "{}";
404
+ let input;
405
+ try {
406
+ input = JSON.parse(text);
407
+ }
408
+ catch {
409
+ throw new Error("The tool arguments must be a JSON object.");
410
+ }
411
+ if (input === null || typeof input !== "object" || Array.isArray(input))
412
+ throw new Error("The tool arguments must be a JSON object.");
413
+ const result = await callRemoteTool(ref, tool, input, deps);
414
+ stdout.write(`${JSON.stringify(result, null, 2)}\n`);
415
+ if (result?.isError === true)
416
+ process.exitCode = 1;
417
+ return;
418
+ }
419
+ catch (error) {
420
+ if (error instanceof RemoteMcpError)
421
+ throw new Error(error.message);
422
+ throw error;
423
+ }
424
+ }
429
425
  if (args[1] !== "install" || args.includes("--help") || args.includes("-h")) {
430
426
  stdout.write(subcommandUsage("item"));
431
427
  return;
432
428
  }
433
429
  const itemRef = args[2];
434
430
  if (!itemRef || itemRef.startsWith("-"))
435
- throw new Error("Usage: frely item install <username/name[@version]> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--dir <path>] [--json]");
431
+ throw new Error("Usage: frely item install <username/name[@version]> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--dir <path>] [--gift <code>] [--api-key-stdin] [--json]");
432
+ const gift = option(args, "--gift");
433
+ if (gift !== undefined)
434
+ await redeemGift(gift, callCloudTool, args.includes("--json") ? process.stderr : stdout);
436
435
  // Skills, Prompts and Agents are named alike. An Agent's manifest is public, so it is asked first; a name no Agent has is a Skill or Prompt.
437
436
  if (/^creator_distribution_/u.test(itemRef) || args.includes("--api-key-stdin")) {
438
437
  await installAgent(itemRef, args);
@@ -448,7 +447,7 @@ async function main() {
448
447
  const scope = skillScope(option(args, "--scope") ?? "global");
449
448
  const dir = option(args, "--dir");
450
449
  const value = await installCloudItem({ ...parseItemRef(itemRef), call: callCloudTool, host, scope, ...(dir ? { dir } : {}) }).catch(async (error) => {
451
- // A name that is not a Skill may be a remote MCP: install the Skill that uses it through `frely remote`.
450
+ // A name that is not a Skill may be a remote MCP: install the Skill that uses it through `frely item tools|call`.
452
451
  if (!isNotASkill(error) || itemRef.includes("@") || !/^[^/@]+\/[^/@]+$/u.test(itemRef))
453
452
  throw error;
454
453
  return installRemoteMcpSkill({ ref: itemRef, call: callCloudTool, host, scope, ...(dir ? { dir } : {}), ...(args.includes("--replace") ? { replace: true } : {}) }).catch((mcpError) => { throw isNotASkill(mcpError) || (mcpError instanceof CloudToolError && mcpError.code === "remote_mcp_not_found") ? error : mcpError; });
@@ -459,7 +458,7 @@ async function main() {
459
458
  stdout.write(`${JSON.stringify({ ...value, ...(entry ? { entrySkill: entry.path } : {}) })}\n`);
460
459
  return;
461
460
  }
462
- stdout.write(`MCP: ${value.name}\nPath: ${value.path}\nTools: ${value.tools}\nThe Skill calls this MCP through frely remote; no MCP client configuration is needed. Restart or reload the agent session so it rescans Skills.\n`);
461
+ stdout.write(`MCP: ${value.name}\nPath: ${value.path}\nTools: ${value.tools}\nThe Skill calls this MCP through frely item tools|call; no MCP client configuration is needed. Restart or reload the agent session so it rescans Skills.\n`);
463
462
  return;
464
463
  }
465
464
  if (args.includes("--json")) {
@@ -516,25 +515,13 @@ async function main() {
516
515
  process.exitCode = 1;
517
516
  return;
518
517
  }
519
- const result = await completeEmailDeviceLogin(relayUrl, pendingChallenge, code);
518
+ await completeEmailDeviceLogin(relayUrl, pendingChallenge, code);
520
519
  const deviceId = localDeviceId((await readConfig().catch(() => null))?.deviceId);
521
520
  const { user } = await finishDeviceLogin(relayUrl, pendingChallenge, deviceId);
522
521
  await deletePendingEmailChallenge(relayUrl);
523
522
  stdout.write(`Logged in as ${user.email}.\n`);
524
523
  await installStandbyService();
525
- const mcp = pendingChallenge.mcp;
526
- if (mcp && result.mcpPreapproval) {
527
- const authorization = await ensureMcpAuthorization({
528
- workspace: mcp.workspace, days: String(mcp.days),
529
- notify: (message) => { process.stderr.write(message); },
530
- preset: { privateKeyPem: mcp.privateKeyPem, preapproval: result.mcpPreapproval },
531
- });
532
- stdout.write(`Device MCP enabled for ${authorization.grant.workspace} until ${authorization.grant.expiresAt}. Remove it any time with \`frely link off\`.\n`);
533
- stdout.write(`MCP address: ${authorization.mcpUrl}\n`);
534
- }
535
- else {
536
- stdout.write("Run `frely link on` on the computer you want to control, then connect your MCP client with OAuth.\n");
537
- }
524
+ stdout.write("Run `frely link on` on the computer you want to control, then connect your MCP client with OAuth.\n");
538
525
  }
539
526
  catch (error) {
540
527
  stdout.write(`Verification failed: ${error instanceof Error ? error.message : String(error)}\n`);
@@ -543,13 +530,7 @@ async function main() {
543
530
  return;
544
531
  }
545
532
  try {
546
- let mcp;
547
- if (args.includes("--mcp")) {
548
- const workspace = option(args, "--workspace") ? await realpath(resolve(option(args, "--workspace"))) : await ensureDefaultWorkspace();
549
- const days = parseMcpDays(option(args, "--days") ?? DEFAULT_EMAIL_LOGIN_MCP_DAYS);
550
- mcp = { ...generateMcpKey(), workspace, days };
551
- }
552
- const challenge = await initEmailDeviceLogin(relayUrl, email, invite, mcp);
533
+ const challenge = await initEmailDeviceLogin(relayUrl, email, invite);
553
534
  await savePendingEmailChallenge(relayUrl, challenge);
554
535
  if (json) {
555
536
  stdout.write(JSON.stringify({
@@ -558,7 +539,6 @@ async function main() {
558
539
  expiresIn: challenge.expiresIn,
559
540
  challengeId: challenge.challengeId,
560
541
  ...(challenge.reference ? { reference: challenge.reference } : {}),
561
- ...(mcp ? { deviceMcp: { workspace: mcp.workspace, days: mcp.days } } : {}),
562
542
  }, null, 2) + "\n");
563
543
  }
564
544
  else {
@@ -566,9 +546,6 @@ async function main() {
566
546
  if (challenge.reference)
567
547
  stdout.write(`Mail reference: ${challenge.reference} (use the newest mail with this reference; enter only the 6 digits)\n`);
568
548
  stdout.write(`Expires in: ${challenge.expiresIn} seconds\n`);
569
- if (mcp) {
570
- 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 link off\`.\n`);
571
- }
572
549
  stdout.write(`Run: frely login --code <code>\n`);
573
550
  }
574
551
  }
@@ -653,7 +630,7 @@ async function main() {
653
630
  return;
654
631
  }
655
632
  if (command === "doctor") {
656
- const value = await doctor({ verbose: args.includes("-v") || args.includes("--verbose"), mcp: args.includes("--mcp") });
633
+ const value = await doctor({ verbose: args.includes("-v") || args.includes("--verbose") });
657
634
  if (args.includes("--json"))
658
635
  stdout.write(`${JSON.stringify(value, null, 2)}\n`);
659
636
  else
@@ -777,8 +754,8 @@ async function main() {
777
754
  }
778
755
  localMcp?.start();
779
756
  piNode?.start();
780
- if (standbyIdle)
781
- void watchLinkClaim({ signal: controller.signal, log: nodeLog, onClaimed: stop });
757
+ // Standby waits for the web to turn remote control on; full mode waits for the web to turn it off. Both restart the service.
758
+ void watchLinkClaim({ signal: controller.signal, log: nodeLog, onClaimed: stop, onLocked: stop });
782
759
  // Services saved with `frely service share --background` stay connected for as long as the daemon runs.
783
760
  const services = superviseServices({ signal: controller.signal, log: nodeLog }).catch((error) => nodeLog(`Services stopped: ${error instanceof Error ? error.message : String(error)}`));
784
761
  try {
@@ -832,40 +809,35 @@ async function main() {
832
809
  }
833
810
  if (command === "link" && args[1] === "on") {
834
811
  // Turning remote control back on is the one way out of `false`: it has to happen here, on this computer.
835
- if (!args.includes("--resume"))
812
+ await setLinkOnPending(true);
813
+ try {
836
814
  await setRemoteLock(false);
837
- else if (await remoteLocked()) {
838
- stdout.write("Remote control is turned off on this computer; run `frely link on` to allow it again.\n");
815
+ // Pre-login install command (start.sh / start.ps1): never inherited by the service, logged or stored.
816
+ const installToken = takeInstallToken();
817
+ let workspace = option(args, "--workspace");
818
+ let days = option(args, "--days");
819
+ // --no-browser applies to both the sign-in and the MCP approval page: only the links are printed.
820
+ if (args.includes("--no-browser") || installToken)
821
+ process.env.FRELY_NO_BROWSER = "1";
822
+ const notify = (message) => { process.stderr.write(message); };
823
+ const login = await mcpStartLogin({ ...(installToken ? { installToken } : {}), ...(workspace ? { workspace } : {}), ...(days ? { days } : {}), notify });
824
+ workspace = login.workspace ?? workspace;
825
+ days = login.days ?? days;
826
+ const authorization = await startMcp({ ...(workspace ? { workspace } : {}), ...(days ? { days } : {}), ...(login.preset ? { preset: login.preset } : {}), notify });
827
+ if (login.preset)
828
+ process.stderr.write("This computer now appears in your FrelyMCP device list (list_devices).\n");
829
+ if (activeDataDir())
830
+ process.stderr.write(`No background service with --data-dir. Keep the device online with: frely --data-dir ${activeDataDir()} mcp serve\n`);
831
+ const value = { deviceId: authorization.grant.deviceId, mcpUrl: authorization.mcpUrl, transport: "http", authentication: "oauth", workspace: authorization.grant.workspace, expiresAt: authorization.grant.expiresAt };
832
+ if (args.includes("--json"))
833
+ stdout.write(`${JSON.stringify(value)}\n`);
834
+ else
835
+ stdout.write(`${authorization.mcpUrl}\n`);
839
836
  return;
840
837
  }
841
- // Internal: update scripts only resume the installed service, never prompt for approval.
842
- if (args.includes("--resume")) {
843
- const service = await startMcpService();
844
- stdout.write(`Frely MCP service ${service.active ? "started" : "not active"}.\n`);
845
- return;
838
+ finally {
839
+ await setLinkOnPending(false);
846
840
  }
847
- // Pre-login install command (start.sh / start.ps1): never inherited by the service, logged or stored.
848
- const installToken = takeInstallToken();
849
- let workspace = option(args, "--workspace");
850
- let days = option(args, "--days");
851
- // --no-browser applies to both the sign-in and the MCP approval page: only the links are printed.
852
- if (args.includes("--no-browser") || installToken)
853
- process.env.FRELY_NO_BROWSER = "1";
854
- const notify = (message) => { process.stderr.write(message); };
855
- const login = await mcpStartLogin({ ...(installToken ? { installToken } : {}), ...(workspace ? { workspace } : {}), ...(days ? { days } : {}), notify });
856
- workspace = login.workspace ?? workspace;
857
- days = login.days ?? days;
858
- const authorization = await startMcp({ ...(workspace ? { workspace } : {}), ...(days ? { days } : {}), ...(login.preset ? { preset: login.preset } : {}), notify });
859
- if (login.preset)
860
- process.stderr.write("This computer now appears in your FrelyMCP device list (list_devices).\n");
861
- if (activeDataDir())
862
- process.stderr.write(`No background service with --data-dir. Keep the device online with: frely --data-dir ${activeDataDir()} mcp serve\n`);
863
- const value = { deviceId: authorization.grant.deviceId, mcpUrl: authorization.mcpUrl, transport: "http", authentication: "oauth", workspace: authorization.grant.workspace, expiresAt: authorization.grant.expiresAt };
864
- if (args.includes("--json"))
865
- stdout.write(`${JSON.stringify(value)}\n`);
866
- else
867
- stdout.write(`${authorization.mcpUrl}\n`);
868
- return;
869
841
  }
870
842
  if (command === "link" && args[1] === "status") {
871
843
  const metadata = await inspectMcpMetadataOrQuarantine((message) => { process.stderr.write(message); });
@@ -887,9 +859,15 @@ async function main() {
887
859
  }
888
860
  return;
889
861
  }
890
- if (command === "link" && args[1] === "stop") {
862
+ // Internal, for update scripts: stop the installed service before an update and start it again after, never prompting for approval.
863
+ if (command === "mcp" && args[1] === "service" && args[2] === "stop") {
891
864
  const service = await stopMcpService();
892
- stdout.write(`Frely MCP service ${service.active ? "still active" : "stopped"}.\n`);
865
+ stdout.write(`Frely background service ${service.active ? "still active" : "stopped"}.\n`);
866
+ return;
867
+ }
868
+ if (command === "mcp" && args[1] === "service" && args[2] === "start") {
869
+ const service = await startMcpService();
870
+ stdout.write(`Frely background service ${service.active ? "started" : "not active"}.\n`);
893
871
  return;
894
872
  }
895
873
  if (command === "link" && args[1] === "off") {