frely-cli 0.23.9 → 0.23.11

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 (92) hide show
  1. package/README.md +49 -20
  2. package/README.zh-CN.md +47 -19
  3. package/dist/agent/local/approvals.d.ts +24 -0
  4. package/dist/agent/local/approvals.js +79 -0
  5. package/dist/agent/local/approvals.js.map +1 -0
  6. package/dist/agent/local/command.d.ts +10 -0
  7. package/dist/agent/local/command.js +292 -0
  8. package/dist/agent/local/command.js.map +1 -0
  9. package/dist/agent/local/confine.d.ts +20 -0
  10. package/dist/agent/local/confine.js +52 -0
  11. package/dist/agent/local/confine.js.map +1 -0
  12. package/dist/agent/local/manifest.d.ts +17 -0
  13. package/dist/agent/local/manifest.js +55 -0
  14. package/dist/agent/local/manifest.js.map +1 -0
  15. package/dist/agent/local/model-proxy.d.ts +18 -0
  16. package/dist/agent/local/model-proxy.js +111 -0
  17. package/dist/agent/local/model-proxy.js.map +1 -0
  18. package/dist/agent/local/source.d.ts +28 -0
  19. package/dist/agent/local/source.js +64 -0
  20. package/dist/agent/local/source.js.map +1 -0
  21. package/dist/agent/local/store.d.ts +45 -0
  22. package/dist/agent/local/store.js +78 -0
  23. package/dist/agent/local/store.js.map +1 -0
  24. package/dist/agent/local/supervisor.d.ts +9 -0
  25. package/dist/agent/local/supervisor.js +62 -0
  26. package/dist/agent/local/supervisor.js.map +1 -0
  27. package/dist/agent/run-store.d.ts +80 -0
  28. package/dist/agent/run-store.js +154 -0
  29. package/dist/agent/run-store.js.map +1 -0
  30. package/dist/agent/run.d.ts +41 -0
  31. package/dist/agent/run.js +233 -0
  32. package/dist/agent/run.js.map +1 -0
  33. package/dist/agent/workspace-read.d.ts +78 -0
  34. package/dist/agent/workspace-read.js +292 -0
  35. package/dist/agent/workspace-read.js.map +1 -0
  36. package/dist/agent-help.d.ts +158 -14
  37. package/dist/agent-help.js +33 -8
  38. package/dist/agent-help.js.map +1 -1
  39. package/dist/cloud.d.ts +2 -42
  40. package/dist/cloud.js +8 -260
  41. package/dist/cloud.js.map +1 -1
  42. package/dist/controller/client.d.ts +6 -3
  43. package/dist/controller/client.js +7 -8
  44. package/dist/controller/client.js.map +1 -1
  45. package/dist/controller/session.d.ts +7 -2
  46. package/dist/controller/session.js +79 -22
  47. package/dist/controller/session.js.map +1 -1
  48. package/dist/index.js +114 -9
  49. package/dist/index.js.map +1 -1
  50. package/dist/provider/control.d.ts +10 -0
  51. package/dist/provider/control.js +19 -0
  52. package/dist/provider/control.js.map +1 -1
  53. package/dist/provider/share.js +4 -1
  54. package/dist/provider/share.js.map +1 -1
  55. package/dist/runtime/sandbox.d.ts +20 -0
  56. package/dist/runtime/sandbox.js +39 -1
  57. package/dist/runtime/sandbox.js.map +1 -1
  58. package/dist/share/allowance.d.ts +8 -0
  59. package/dist/share/allowance.js +22 -0
  60. package/dist/share/allowance.js.map +1 -0
  61. package/dist/share/control.d.ts +2 -0
  62. package/dist/share/control.js +14 -10
  63. package/dist/share/control.js.map +1 -1
  64. package/dist/share/service-config.d.ts +39 -0
  65. package/dist/share/service-config.js +85 -0
  66. package/dist/share/service-config.js.map +1 -0
  67. package/dist/share/service-control.d.ts +15 -0
  68. package/dist/share/service-control.js +31 -0
  69. package/dist/share/service-control.js.map +1 -0
  70. package/dist/share/service-run.d.ts +55 -0
  71. package/dist/share/service-run.js +285 -0
  72. package/dist/share/service-run.js.map +1 -0
  73. package/dist/share/service-state.d.ts +16 -0
  74. package/dist/share/service-state.js +66 -0
  75. package/dist/share/service-state.js.map +1 -0
  76. package/dist/skill/access.d.ts +25 -6
  77. package/dist/skill/access.js +59 -9
  78. package/dist/skill/access.js.map +1 -1
  79. package/dist/skill/cloud-item.d.ts +2 -2
  80. package/dist/skill/cloud-item.js.map +1 -1
  81. package/dist/skill/entry.d.ts +1 -1
  82. package/dist/skill/entry.js +1 -1
  83. package/dist/skill/remote-mcp.d.ts +3 -0
  84. package/dist/skill/remote-mcp.js +7 -1
  85. package/dist/skill/remote-mcp.js.map +1 -1
  86. package/dist/skill/router.d.ts +57 -2
  87. package/dist/skill/router.js +76 -40
  88. package/dist/skill/router.js.map +1 -1
  89. package/dist/uninstall.d.ts +4 -0
  90. package/dist/uninstall.js +14 -0
  91. package/dist/uninstall.js.map +1 -1
  92. package/package.json +3 -2
@@ -96,6 +96,7 @@ async function writeSession(session, store = sessionStore()) {
96
96
  }
97
97
  export async function deleteSession(store = sessionStore()) {
98
98
  const { relayUrl, userId } = await ownerOf();
99
+ await store.deletePassword(PENDING_SERVICE, accountOf(relayUrl, userId)).catch(() => false);
99
100
  return store.deletePassword(SERVICE, accountOf(relayUrl, userId));
100
101
  }
101
102
  const formHeaders = (relayUrl, dpop) => ({ "content-type": "application/x-www-form-urlencoded", origin: relayUrl, accept: "application/json", dpop });
@@ -117,14 +118,29 @@ function tokenFailure(response, payload) {
117
118
  return new ControllerError(detail, EXIT.auth);
118
119
  }
119
120
  const delay = (ms) => new Promise((done) => setTimeout(done, ms));
120
- /**
121
- * Signs this computer in as a controller: a device-code authorization the owner approves in a browser (with a passkey or authenticator code),
122
- * which issues tokens bound to a new key kept here. Before the code is shown the CLI tells the server which computer is asking, and the
123
- * approval page repeats that beside the address the request came from.
124
- */
125
- export async function controllerLogin(options = {}) {
126
- const notify = options.notify ?? ((text) => { process.stderr.write(text); });
127
- const { relayUrl } = await ownerOf();
121
+ const PENDING_SERVICE = "frely-cli-controller-pending-v1";
122
+ async function readPending(relayUrl, store = sessionStore()) {
123
+ const { userId } = await ownerOf();
124
+ const raw = await store.getPassword(PENDING_SERVICE, accountOf(relayUrl, userId)).catch(() => null);
125
+ if (!raw)
126
+ return null;
127
+ try {
128
+ const value = JSON.parse(raw);
129
+ return value.version === 1 && value.relayUrl === relayUrl && value.expiresAt - 5_000 > Date.now() ? value : null;
130
+ }
131
+ catch {
132
+ return null;
133
+ }
134
+ }
135
+ async function writePending(pending, relayUrl, store = sessionStore()) {
136
+ const { userId } = await ownerOf();
137
+ if (pending)
138
+ await store.setPassword(PENDING_SERVICE, accountOf(relayUrl, userId), JSON.stringify(pending));
139
+ else
140
+ await store.deletePassword(PENDING_SERVICE, accountOf(relayUrl, userId)).catch(() => false);
141
+ }
142
+ /** Asks Frely for a device code, tells it which computer is asking (the approval page repeats that beside the address the request came from) and keeps the request. */
143
+ async function startLogin(relayUrl) {
128
144
  const device = await ensureDevice();
129
145
  const mcpUrl = controllerMcpUrl(relayUrl);
130
146
  const key = generateDpopKey();
@@ -145,36 +161,77 @@ export async function controllerLogin(options = {}) {
145
161
  const link = new URL(code.verification_uri_complete);
146
162
  if (link.origin !== relayUrl)
147
163
  throw new ControllerError("Frely returned an unexpected approval link.", EXIT.auth);
148
- notify(`Approve this computer to control your Frely devices.\nCode: ${code.user_code}\nOpen: ${link.toString()}\n(You will be asked to type the code and confirm with a passkey or authenticator code.)\n`);
149
- if (options.openBrowser !== false && process.env.FRELY_NO_BROWSER !== "1")
150
- openVerificationUrl(link.toString());
151
- const deadline = Date.now() + (typeof code.expires_in === "number" ? code.expires_in : 900) * 1000;
152
- let interval = (typeof code.interval === "number" ? code.interval : 5) * 1000;
153
- while (Date.now() < deadline) {
154
- await delay(interval);
155
- const response = await tokenRequest(relayUrl, key, new URLSearchParams({
156
- grant_type: "urn:ietf:params:oauth:grant-type:device_code", device_code: code.device_code, client_id: CONTROLLER_CLIENT_ID, resource: mcpUrl, controller_device_id: device.deviceId,
164
+ const pending = {
165
+ version: 1, relayUrl, mcpUrl, deviceId: device.deviceId, privateKeyPem: key.privateKeyPem, deviceCode: code.device_code, userCode: code.user_code, link: link.toString(),
166
+ expiresAt: Date.now() + (typeof code.expires_in === "number" ? code.expires_in : 900) * 1000, intervalMs: (typeof code.interval === "number" ? code.interval : 5) * 1000,
167
+ };
168
+ await writePending(pending, relayUrl);
169
+ return pending;
170
+ }
171
+ const approvalNotice = (pending) => `Approve this computer to control your Frely devices.\nCode: ${pending.userCode}\nOpen: ${pending.link}\n(You will be asked to type the code and confirm with a passkey or authenticator code.)\n`;
172
+ /**
173
+ * Trades the approved device code for tokens, once or until the code expires. Returns null when `wait` is false and the owner has not
174
+ * decided yet; an expired or denied request is forgotten and throws.
175
+ */
176
+ async function pollLogin(pending, wait) {
177
+ const key = dpopKeyFromPem(pending.privateKeyPem);
178
+ let interval = pending.intervalMs;
179
+ while (Date.now() < pending.expiresAt) {
180
+ if (wait)
181
+ await delay(interval);
182
+ const response = await tokenRequest(pending.relayUrl, key, new URLSearchParams({
183
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code", device_code: pending.deviceCode, client_id: CONTROLLER_CLIENT_ID, resource: pending.mcpUrl, controller_device_id: pending.deviceId,
157
184
  }));
158
185
  const payload = await response.json().catch(() => ({}));
159
186
  if (response.ok) {
160
- const session = { version: 1, relayUrl, mcpUrl, deviceId: device.deviceId, privateKeyPem: key.privateKeyPem, ...parseTokens(payload) };
187
+ const session = { version: 1, relayUrl: pending.relayUrl, mcpUrl: pending.mcpUrl, deviceId: pending.deviceId, privateKeyPem: pending.privateKeyPem, ...parseTokens(payload) };
161
188
  await writeSession(session);
189
+ await writePending(null, pending.relayUrl);
162
190
  return session;
163
191
  }
164
- if (payload.error === "authorization_pending")
165
- continue;
166
- if (payload.error === "slow_down") {
167
- interval += 5000;
192
+ if (payload.error === "authorization_pending" || payload.error === "slow_down") {
193
+ if (payload.error === "slow_down")
194
+ interval += 5000;
195
+ if (!wait)
196
+ return null;
168
197
  continue;
169
198
  }
199
+ await writePending(null, pending.relayUrl);
170
200
  if (payload.error === "expired_token")
171
201
  throw new ControllerError("The approval request expired. Run the command again.", EXIT.auth);
172
202
  if (payload.error === "access_denied" && response.status !== 403)
173
203
  throw new ControllerError("The request was denied.", EXIT.auth);
174
204
  throw tokenFailure(response, payload);
175
205
  }
206
+ await writePending(null, pending.relayUrl);
176
207
  throw new ControllerError("The approval request expired. Run the command again.", EXIT.auth);
177
208
  }
209
+ /**
210
+ * Signs this computer in as a controller: a device-code authorization the owner approves in a browser (with a passkey or authenticator code),
211
+ * which issues tokens bound to a new key kept here. Waits for the approval and takes it by itself; a request an earlier command left
212
+ * unapproved is continued instead of asking for a new code.
213
+ */
214
+ export async function controllerLogin(options = {}) {
215
+ const notify = options.notify ?? ((text) => { process.stderr.write(text); });
216
+ const { relayUrl } = await ownerOf();
217
+ const pending = await readPending(relayUrl) ?? await startLogin(relayUrl);
218
+ notify(approvalNotice(pending));
219
+ if (options.openBrowser !== false && process.env.FRELY_NO_BROWSER !== "1")
220
+ openVerificationUrl(pending.link);
221
+ return (await pollLogin(pending, true));
222
+ }
223
+ /**
224
+ * The sign-in for a command nobody can type into (a script, an AI tool): never waits. It picks up an approval the owner has given since the last
225
+ * run; otherwise it shows the approval link and ends with the "approval needed" exit code, and the same command run again continues from the same request.
226
+ */
227
+ export async function requestControllerLogin() {
228
+ const { relayUrl } = await ownerOf();
229
+ const pending = await readPending(relayUrl) ?? await startLogin(relayUrl);
230
+ const session = await pollLogin(pending, false);
231
+ if (session)
232
+ return session;
233
+ throw new ControllerError(`${approvalNotice(pending)}After approving, run the same command again. To wait for the approval instead: frely controller login\n`, EXIT.approval);
234
+ }
178
235
  /** Exchanges the refresh token; a session that another process already renewed is taken from the store instead of spent twice. */
179
236
  export async function refreshSession(session) {
180
237
  const key = dpopKeyFromPem(session.privateKeyPem);
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/controller/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/controller/session.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,11 +20,19 @@ import { startStdioMcp } from "./runtime/mcp.js";
20
20
  import { installDeviceRelayService, serviceStatus, trimServiceLog, startMcpService, stopMcpService, uninstallMcpService } from "./service.js";
21
21
  import { createLocalModelsHub } from "./provider/local-models.js";
22
22
  import { shareLocalProvider } from "./provider/share.js";
23
- import { runShareCommand, shareUsage } from "./share/run.js";
23
+ import { probeLoopback, runShareCommand, shareUsage, spawnFrpcProcess } from "./share/run.js";
24
+ import { runServiceCommand, superviseServices } from "./share/service-run.js";
25
+ import { accountServiceControl } from "./share/service-control.js";
26
+ import { ensureFrpc } from "./share/frpc.js";
27
+ import { listLocalServices } from "./share/service-state.js";
24
28
  import { listLocalProviders } from "./provider/state.js";
25
29
  import { API_USAGE, logoutCloud, runApi } from "./cloud.js";
26
30
  import { CONTROLLER_COMMANDS, runControllerCommand } from "./controller/commands.js";
27
31
  import { controllerLogout, ControllerError } from "./controller/session.js";
32
+ import { runAgentLocal } from "./agent/local/command.js";
33
+ import { cancelRun, listRunSummaries, resumeRun, runOutcome, runSummary, startRun, waitForRun, workerMain } from "./agent/run.js";
34
+ import { effectiveStatus, isRunId, readRun, resolveRun } from "./agent/run-store.js";
35
+ import { DEFAULT_READ_LIMITS, defaultReadRoot } from "./agent/workspace-read.js";
28
36
  import { PiNodeSupervisor } from "./agent/pi-node-supervisor.js";
29
37
  import { readAppInstall } from "./agent/app-install.js";
30
38
  import { appInstallStatus, installApp, openApp, uninstallApp, updateApp } from "./app-manager.js";
@@ -38,7 +46,7 @@ import { getKeyBudget, KeyBudgetError, publicKeyBudgetError } from "./key-budget
38
46
  import { runNetwork, publicNetworkError } from "./network.js";
39
47
  import { runComputerCommand } from "./computer/command.js";
40
48
  import { runComputerMcpServer } from "./computer/server.js";
41
- import { agentManifestUrl, installSkillAdapter, invokeInstalledAgent, publicSkillAccessError, removeSkillAdapter, resolveAgentTarget, SkillAccessError, skillAdapterStatus } from "./skill/access.js";
49
+ import { agentManifestUrl, installSkillAdapter, publicSkillAccessError, removeSkillAdapter, resolveAgentTarget, SkillAccessError, skillAdapterStatus } from "./skill/access.js";
42
50
  import { CloudToolError, installCloudItem, parseItemRef, trustCloudItem } from "./skill/cloud-item.js";
43
51
  import { checkItemUpdates, updateCloudItem } from "./skill/item-update.js";
44
52
  import { runSealedScript } from "./skill/sealed-run.js";
@@ -141,7 +149,7 @@ async function main() {
141
149
  if (!ref || ref.startsWith("-"))
142
150
  throw new Error(`Usage: frely remote ${action} <username/name>${action === "call" ? " <tool> [--json '<object>' | --input <file>]" : ""}`);
143
151
  parseMcpName(ref);
144
- const deps = { call: callCloudTool };
152
+ const deps = { call: callCloudTool, replace: args.includes("--replace") };
145
153
  try {
146
154
  if (action === "tools") {
147
155
  const tools = await listRemoteTools(ref, deps);
@@ -205,6 +213,10 @@ async function main() {
205
213
  stdout.write(subcommandUsage("agent"));
206
214
  return;
207
215
  }
216
+ if (action === "local") {
217
+ 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) });
218
+ return;
219
+ }
208
220
  if (action === "install") {
209
221
  const target = args[2];
210
222
  if (!target || target.startsWith("-"))
@@ -215,16 +227,69 @@ async function main() {
215
227
  if (action === "run") {
216
228
  const target = args[2];
217
229
  if (!target || target.startsWith("-"))
218
- throw new Error("Usage: frely agent run <username/name> (--input <text>|--input-stdin) [--json]");
230
+ throw new Error(RUN_USAGE);
219
231
  const distributionId = await resolveAgentTarget(target, normalizeRelayUrl((await inspectAuth().catch(() => null))?.relayUrl));
220
232
  const task = args.includes("--input-stdin") ? await readStdinText(128 * 1024) : option(args, "--input");
221
233
  if (!task)
222
234
  throw new Error("Agent input is required. Use --input or --input-stdin.");
223
- const value = await invokeInstalledAgent({ distributionId, task });
235
+ const read = await readOptions(args);
236
+ // The call runs in a detached worker so a cut-off command does not lose it; this process only waits and prints.
237
+ const onInterrupt = () => { process.stderr.write("Interrupted. The run keeps going; fetch it with `frely agent result --last --wait`.\n"); process.exit(130); };
238
+ process.once("SIGINT", onInterrupt);
239
+ const finished = await startRun({ distributionId, task, ...(read === undefined ? {} : { read }) });
240
+ process.off("SIGINT", onInterrupt);
241
+ const value = runOutcome(finished);
224
242
  if (args.includes("--json"))
225
243
  stdout.write(`${JSON.stringify(value)}\n`);
226
- else
244
+ else {
227
245
  stdout.write(`${value.text}\n`);
246
+ if (read !== undefined)
247
+ process.stderr.write(`Read ${(finished.filesRead).length} file(s), ${finished.rounds.length} round(s), ${finished.usage.total_tokens} tokens. Run ${finished.runId}.\n`);
248
+ }
249
+ return;
250
+ }
251
+ if (action === "result" || action === "cancel") {
252
+ const json = args.includes("--json");
253
+ const runArg = args.slice(2).find((arg) => !arg.startsWith("--"));
254
+ const last = args.includes("--last");
255
+ if (runArg === undefined && !last)
256
+ throw new Error(`Usage: frely agent ${action} (<runId>|--last)${action === "result" ? " [--wait] [--resume] [--json]" : " [--json]"}`);
257
+ let record = action === "cancel" ? await cancelRun(runArg) : await resolveRun(runArg);
258
+ if (action === "result") {
259
+ if (args.includes("--resume")) {
260
+ const status = effectiveStatus(record);
261
+ if (status !== "running") {
262
+ await resumeRun(record.runId);
263
+ record = (await readRun(record.runId));
264
+ }
265
+ }
266
+ if (args.includes("--wait"))
267
+ record = await waitForRun(record.runId);
268
+ else if (args.includes("--resume"))
269
+ record = (await readRun(record.runId)) ?? record;
270
+ }
271
+ const summary = runSummary(record);
272
+ if (json)
273
+ stdout.write(`${JSON.stringify(summary)}\n`);
274
+ else
275
+ stdout.write(summary.status === "completed" ? `${summary.text}\n` : `${JSON.stringify(summary, null, 2)}\n`);
276
+ if (action === "result" && summary.ok === false)
277
+ process.exitCode = 1;
278
+ return;
279
+ }
280
+ if (action === "runs") {
281
+ const runs = await listRunSummaries();
282
+ if (args.includes("--json"))
283
+ stdout.write(`${JSON.stringify({ ok: true, runs })}\n`);
284
+ else
285
+ stdout.write(runs.length === 0 ? "No agent runs on this computer.\n" : runs.map((run) => `${run.runId} ${run.status} ${run.distributionId} ${run.createdAt}\n`).join(""));
286
+ return;
287
+ }
288
+ if (action === "__worker") {
289
+ const runId = args[2];
290
+ if (!runId || !isRunId(runId))
291
+ throw new Error("Internal command.");
292
+ await workerMain(runId);
228
293
  return;
229
294
  }
230
295
  if (action === "status") {
@@ -360,7 +425,7 @@ async function main() {
360
425
  // A name that is not a Skill may be a remote MCP: install the Skill that uses it through `frely remote`.
361
426
  if (!isNotASkill(error) || itemRef.includes("@") || !/^[^/@]+\/[^/@]+$/u.test(itemRef))
362
427
  throw error;
363
- return installRemoteMcpSkill({ ref: itemRef, call: callCloudTool, host, scope, ...(dir ? { dir } : {}) }).catch((mcpError) => { throw isNotASkill(mcpError) || (mcpError instanceof CloudToolError && mcpError.code === "remote_mcp_not_found") ? error : mcpError; });
428
+ 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; });
364
429
  });
365
430
  if ("tools" in value) {
366
431
  if (args.includes("--json")) {
@@ -551,6 +616,23 @@ async function main() {
551
616
  process.exitCode = await runShareCommand(args.slice(1), { write: (text) => { stdout.write(text); }, interactive, ...(prompt ? { prompt } : {}) });
552
617
  return;
553
618
  }
619
+ if (command === "service") {
620
+ const controller = new AbortController();
621
+ const onSignal = () => controller.abort();
622
+ process.once("SIGINT", onSignal);
623
+ process.once("SIGTERM", onSignal);
624
+ try {
625
+ process.exitCode = await runServiceCommand(args.slice(1), { write: (text) => { stdout.write(text); } }, {
626
+ control: accountServiceControl, probe: probeLoopback, ensureFrpc: () => ensureFrpc({ log: (text) => { stdout.write(text); } }), spawnFrpc: spawnFrpcProcess, signal: controller.signal,
627
+ installDaemon: async () => { await installDeviceRelayService(); },
628
+ });
629
+ }
630
+ finally {
631
+ process.off("SIGINT", onSignal);
632
+ process.off("SIGTERM", onSignal);
633
+ }
634
+ return;
635
+ }
554
636
  if (command === "doctor") {
555
637
  const value = await doctor({ verbose: args.includes("-v") || args.includes("--verbose"), mcp: args.includes("--mcp") });
556
638
  if (args.includes("--json"))
@@ -671,6 +753,8 @@ async function main() {
671
753
  }
672
754
  localMcp?.start();
673
755
  piNode?.start();
756
+ // Services saved with `frely service share --background` stay connected for as long as the daemon runs.
757
+ const services = superviseServices({ signal: controller.signal, log: nodeLog }).catch((error) => nodeLog(`Services stopped: ${error instanceof Error ? error.message : String(error)}`));
674
758
  try {
675
759
  const capabilities = async () => {
676
760
  const install = await readAppInstall().then((value) => value, () => null);
@@ -689,6 +773,8 @@ async function main() {
689
773
  finally {
690
774
  process.off("SIGINT", stop);
691
775
  process.off("SIGTERM", stop);
776
+ controller.abort();
777
+ await services;
692
778
  await piNode?.stop(); // the node keeps running; a restarted service adopts it
693
779
  await localMcp?.close();
694
780
  }
@@ -771,9 +857,9 @@ async function main() {
771
857
  }
772
858
  if (command === "mcp" && args[1] === "remove") {
773
859
  await revokeMcpAuthorization((message) => { process.stderr.write(message); });
774
- if ((await listLocalProviders()).length > 0) {
860
+ if ((await listLocalProviders()).length > 0 || (await listLocalServices().catch(() => [])).some((service) => service.background)) {
775
861
  await installDeviceRelayService();
776
- stdout.write("Device MCP removed. The background service keeps running for local Providers.\n");
862
+ stdout.write("Device MCP removed. The background service keeps running for local Providers and services.\n");
777
863
  }
778
864
  else {
779
865
  await uninstallMcpService();
@@ -796,6 +882,25 @@ async function main() {
796
882
  usage();
797
883
  process.exitCode = 2;
798
884
  }
885
+ const RUN_USAGE = "Usage: frely agent run <username/name> (--input <text>|--input-stdin) [--read [<dir>] [--read-max-bytes <n>] [--read-max-rounds <n>]] [--json]";
886
+ /** `--read [<dir>]`: let the Agent read files of a directory (default: the git root of the current directory) through read-only tools that run here. */
887
+ async function readOptions(args) {
888
+ const index = args.indexOf("--read");
889
+ if (index < 0)
890
+ return undefined;
891
+ const next = args[index + 1];
892
+ const dir = next !== undefined && !next.startsWith("-") ? resolve(next) : await defaultReadRoot(process.cwd());
893
+ const limit = (name, max) => {
894
+ const raw = option(args, name);
895
+ if (raw === undefined)
896
+ return max;
897
+ const value = Number(raw);
898
+ if (!Number.isSafeInteger(value) || value < 1 || value > max)
899
+ throw new Error(`${name} must be an integer from 1 to ${max}.`);
900
+ return value;
901
+ };
902
+ return { root: dir, limits: { totalBytes: limit("--read-max-bytes", DEFAULT_READ_LIMITS.totalBytes), maxRounds: limit("--read-max-rounds", DEFAULT_READ_LIMITS.maxRounds) } };
903
+ }
799
904
  function option(args, name) {
800
905
  const index = args.indexOf(name);
801
906
  if (index < 0)