frely-cli 0.23.12 → 0.23.14
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.
- package/README.md +12 -12
- package/README.zh-CN.md +11 -11
- package/dist/agent/local/approvals.js +2 -2
- package/dist/agent/local/approvals.js.map +1 -1
- package/dist/agent/local/command.js +1 -1
- package/dist/agent/local/command.js.map +1 -1
- package/dist/agent-help.d.ts +82 -94
- package/dist/agent-help.js +40 -42
- package/dist/agent-help.js.map +1 -1
- package/dist/auth.d.ts +14 -0
- package/dist/auth.js +60 -14
- package/dist/auth.js.map +1 -1
- package/dist/cloud/direct.d.ts +28 -0
- package/dist/cloud/direct.js +49 -0
- package/dist/cloud/direct.js.map +1 -0
- package/dist/cloud.d.ts +16 -6
- package/dist/cloud.js +82 -23
- package/dist/cloud.js.map +1 -1
- package/dist/controller/args.js +1 -1
- package/dist/controller/args.js.map +1 -1
- package/dist/controller/client.d.ts +30 -15
- package/dist/controller/client.js +42 -26
- package/dist/controller/client.js.map +1 -1
- package/dist/controller/commands.d.ts +1 -1
- package/dist/controller/commands.js +4 -25
- package/dist/controller/commands.js.map +1 -1
- package/dist/credential-file.js +5 -2
- package/dist/credential-file.js.map +1 -1
- package/dist/device/relay-client.js +4 -0
- package/dist/device/relay-client.js.map +1 -1
- package/dist/diagnostics.js +8 -8
- package/dist/diagnostics.js.map +1 -1
- package/dist/index.js +56 -39
- package/dist/index.js.map +1 -1
- package/dist/local-mcp-command.d.ts +1 -1
- package/dist/local-mcp-command.js +6 -6
- package/dist/local-mcp-command.js.map +1 -1
- package/dist/mcp-authorization.d.ts +1 -1
- package/dist/mcp-authorization.js +10 -10
- package/dist/mcp-authorization.js.map +1 -1
- package/dist/mcp-command.d.ts +8 -6
- package/dist/mcp-command.js +53 -43
- package/dist/mcp-command.js.map +1 -1
- package/dist/network-files.js +4 -1
- package/dist/network-files.js.map +1 -1
- package/dist/remote-lock.d.ts +10 -0
- package/dist/remote-lock.js +24 -0
- package/dist/remote-lock.js.map +1 -0
- package/dist/runtime/mcp-lease.js +1 -1
- package/dist/runtime/mcp-lease.js.map +1 -1
- package/dist/runtime/mcp.js +1 -1
- package/dist/runtime/mcp.js.map +1 -1
- package/dist/runtime/sandbox-proxy.js +2 -2
- package/dist/runtime/sandbox-proxy.js.map +1 -1
- package/dist/runtime/workspace-registry.js +1 -1
- package/dist/runtime/workspace-registry.js.map +1 -1
- package/dist/share/control.js +2 -2
- package/dist/share/control.js.map +1 -1
- package/dist/skill/access.js +5 -5
- package/dist/skill/access.js.map +1 -1
- package/dist/skill/cloud-item.js +9 -4
- package/dist/skill/cloud-item.js.map +1 -1
- package/dist/skill/entry.d.ts +12 -1
- package/dist/skill/entry.js +14 -3
- package/dist/skill/entry.js.map +1 -1
- package/dist/skill/managed.d.ts +2 -0
- package/dist/skill/managed.js +8 -1
- package/dist/skill/managed.js.map +1 -1
- package/dist/skill/registry.js +4 -1
- package/dist/skill/registry.js.map +1 -1
- package/dist/skill/remote-mcp.js +3 -3
- package/dist/skill/remote-mcp.js.map +1 -1
- package/dist/update/auto-update.d.ts +1 -1
- package/dist/update/auto-update.js +1 -1
- package/dist/update/auto-update.js.map +1 -1
- package/dist/workspace-command.d.ts +1 -1
- package/dist/workspace-command.js +3 -3
- package/dist/workspace-command.js.map +1 -1
- package/package.json +1 -1
- package/skills/frely-cli/SKILL.md +1 -1
- package/dist/controller/dpop.d.ts +0 -24
- package/dist/controller/dpop.js +0 -26
- package/dist/controller/dpop.js.map +0 -1
- package/dist/controller/session.d.ts +0 -58
- package/dist/controller/session.js +0 -268
- package/dist/controller/session.js.map +0 -1
package/dist/cloud.js
CHANGED
|
@@ -4,6 +4,7 @@ import { inspectAuth, normalizeRelayUrl } from "./auth.js";
|
|
|
4
4
|
import { CloudToolError } from "./skill/cloud-item.js";
|
|
5
5
|
import { openController } from "./controller/client.js";
|
|
6
6
|
import { waitForApproval } from "./controller/approval-wait.js";
|
|
7
|
+
import { openCloudReader } from "./cloud/direct.js";
|
|
7
8
|
const SERVICE = "frely-cli-cloud-v1";
|
|
8
9
|
/** The server's `permission_required` or `confirmation_required` tool failure as a one-line hint, or null for any other result. */
|
|
9
10
|
export function permissionHint(result) {
|
|
@@ -85,7 +86,7 @@ export const API_USAGE = `Frely API — call your Frely account's business opera
|
|
|
85
86
|
frely api call <tool> [--json '<object>' | --input <file>] [--wait]
|
|
86
87
|
|
|
87
88
|
"list" prints the operations grouped by area with a one-line description each; add --json for the full tool list.
|
|
88
|
-
Other results are JSON. The first
|
|
89
|
+
Other results are JSON. The first write call asks you to approve this computer in your browser;
|
|
89
90
|
frely logout also revokes it. Without a terminal it prints the approval link and exits; run it again after approving.
|
|
90
91
|
Calls may create resources or incur usage. Failed writes are never replayed automatically.
|
|
91
92
|
A new device may only read non-sensitive data; for anything else the error links to the web
|
|
@@ -200,11 +201,43 @@ export async function runApi(args) {
|
|
|
200
201
|
throw new Error("Cloud input must be a JSON object.");
|
|
201
202
|
input = value;
|
|
202
203
|
}
|
|
203
|
-
return runApiViaController({ action, name, options, fullJson, wait, input });
|
|
204
|
+
return (await runApiDirect({ action, name, options, fullJson, wait, input })) ?? runApiViaController({ action, name, options, fullJson, wait, input });
|
|
204
205
|
}
|
|
205
|
-
/**
|
|
206
|
+
/**
|
|
207
|
+
* `frely api list/describe` and read-only calls run on the login token alone; a write or paid tool is invisible there, and
|
|
208
|
+
* `--wait` needs the FreyMCP connection to poll the approval, so those return null and the caller falls back to that path.
|
|
209
|
+
*/
|
|
210
|
+
async function runApiDirect(request) {
|
|
211
|
+
const reader = await openCloudReader();
|
|
212
|
+
try {
|
|
213
|
+
if (request.action === "list" || request.action === "describe") {
|
|
214
|
+
const tools = await reader.tools();
|
|
215
|
+
if (request.action === "describe") {
|
|
216
|
+
const tool = tools.find((entry) => entry.name === request.name);
|
|
217
|
+
return tool ? { value: tool } : null;
|
|
218
|
+
}
|
|
219
|
+
const group = request.options.get("--group");
|
|
220
|
+
const visible = group ? tools.filter((tool) => tool.name.startsWith(group + ".")) : tools;
|
|
221
|
+
return request.fullJson ? { value: visible } : { text: formatApiList(visible) };
|
|
222
|
+
}
|
|
223
|
+
let result = await reader.call(request.name, request.input);
|
|
224
|
+
const hint = permissionHint(result);
|
|
225
|
+
if (hint)
|
|
226
|
+
process.stderr.write(hint + "\n");
|
|
227
|
+
if (result.isError === true && request.wait) {
|
|
228
|
+
const error = toolError(result);
|
|
229
|
+
if (error && (error.code === "permission_required" || error.code === "confirmation_required"))
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
return { value: result, failed: result.isError === true };
|
|
233
|
+
}
|
|
234
|
+
finally {
|
|
235
|
+
await reader.close().catch(() => undefined);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/** `frely api` on this machine's FreyMCP connection: the account tools are FrelyMCP's frely_list and frely_call, so the answers and approvals are the same as in an AI client. */
|
|
206
239
|
async function runApiViaController(request) {
|
|
207
|
-
const controller = await openController(
|
|
240
|
+
const controller = await openController();
|
|
208
241
|
try {
|
|
209
242
|
const textOf = (result) => (Array.isArray(result.content) ? result.content.filter(part => part.type === "text" && typeof part.text === "string").map(part => part.text).join("\n") : "");
|
|
210
243
|
if (request.action === "list" || request.action === "describe") {
|
|
@@ -235,27 +268,53 @@ async function runApiViaController(request) {
|
|
|
235
268
|
* server's error code. Writes are never retried.
|
|
236
269
|
*/
|
|
237
270
|
export async function callCloudTool(name, input) {
|
|
238
|
-
|
|
271
|
+
return callCloudToolWith(name, input, { openReader: openCloudReader, openControllerConnection });
|
|
272
|
+
}
|
|
273
|
+
export async function callCloudToolWith(name, input, deps) {
|
|
274
|
+
const reader = await deps.openReader();
|
|
239
275
|
try {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
276
|
+
return cloudToolResult(await reader.call(name, input));
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
// A read-only reader cannot see write or paid tools; those go to the FreyMCP connection and its approval codes.
|
|
280
|
+
if (error instanceof CloudToolError && error.code === "tool_unavailable_or_forbidden")
|
|
281
|
+
return callCloudToolViaController(name, input, deps.openControllerConnection);
|
|
282
|
+
throw error;
|
|
283
|
+
}
|
|
284
|
+
finally {
|
|
285
|
+
await reader.close().catch(() => undefined);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/** One tool result as the calling command needs it: the JSON object on success, CloudToolError(code) on failure. Permission hints go to stderr either way. */
|
|
289
|
+
function cloudToolResult(result) {
|
|
290
|
+
const hint = permissionHint(result);
|
|
291
|
+
if (hint)
|
|
292
|
+
process.stderr.write(hint + "\n");
|
|
293
|
+
const text = Array.isArray(result.content) ? result.content.find(part => part.type === "text")?.text : undefined;
|
|
294
|
+
if (result.isError === true) {
|
|
295
|
+
let code = "operation_failed";
|
|
296
|
+
try {
|
|
297
|
+
const parsed = JSON.parse(String(text)).error?.code;
|
|
298
|
+
if (typeof parsed === "string")
|
|
299
|
+
code = parsed;
|
|
254
300
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
301
|
+
catch { /* Keep the generic code. */ }
|
|
302
|
+
throw new CloudToolError(code);
|
|
303
|
+
}
|
|
304
|
+
const value = result.structuredContent ?? (typeof text === "string" ? JSON.parse(text) : null);
|
|
305
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
306
|
+
throw new CloudToolError("invalid_operation_output");
|
|
307
|
+
return value;
|
|
308
|
+
}
|
|
309
|
+
async function openControllerConnection() {
|
|
310
|
+
const controller = await openController();
|
|
311
|
+
return { call: (name, args) => controller.call(name, args), close: () => controller.close() };
|
|
312
|
+
}
|
|
313
|
+
/** The same call on the FreyMCP connection (frely_call): for write and paid tools, where an approval code guards every write. */
|
|
314
|
+
async function callCloudToolViaController(name, input, open) {
|
|
315
|
+
const controller = await open();
|
|
316
|
+
try {
|
|
317
|
+
return cloudToolResult(await controller.call("frely_call", { tool: name, arguments: input }));
|
|
259
318
|
}
|
|
260
319
|
finally {
|
|
261
320
|
await controller.close().catch(() => undefined);
|
package/dist/cloud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud.js","sourceRoot":"","sources":["../src/cloud.ts"],"names":[],"mappings":"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"}
|
package/dist/controller/args.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ControllerError, EXIT } from "./
|
|
1
|
+
import { ControllerError, EXIT } from "./client.js";
|
|
2
2
|
/**
|
|
3
3
|
* `device:path`, written like scp. A single letter followed by `:\` or `:/` is a Windows drive on this computer, and a path without a colon
|
|
4
4
|
* names no device; the caller decides whether that is allowed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/controller/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/controller/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,40 @@
|
|
|
1
|
-
import { controllerLogin, requestControllerLogin, type ControllerSession } from "./session.js";
|
|
2
1
|
export type ToolResult = {
|
|
3
2
|
isError?: boolean;
|
|
4
3
|
content?: unknown;
|
|
5
4
|
structuredContent?: unknown;
|
|
6
5
|
[key: string]: unknown;
|
|
7
6
|
};
|
|
7
|
+
/** The exit codes of the device commands. */
|
|
8
|
+
export declare const EXIT: {
|
|
9
|
+
readonly ok: 0;
|
|
10
|
+
readonly cli: 1;
|
|
11
|
+
readonly tool: 2;
|
|
12
|
+
readonly approval: 3;
|
|
13
|
+
readonly auth: 4;
|
|
14
|
+
readonly offline: 5;
|
|
15
|
+
readonly limit: 6;
|
|
16
|
+
};
|
|
17
|
+
/** A failure with the exit code the command ends with. */
|
|
18
|
+
export declare class ControllerError extends Error {
|
|
19
|
+
readonly exitCode: number;
|
|
20
|
+
constructor(message: string, exitCode: number);
|
|
21
|
+
}
|
|
22
|
+
/** A FreyMCP connection as the CLI uses it: the login's own token, no separate sign-in. */
|
|
23
|
+
export interface LoginMcpSession {
|
|
24
|
+
mcpUrl: string;
|
|
25
|
+
mcpToken: string;
|
|
26
|
+
}
|
|
8
27
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* refused it before running anything.
|
|
28
|
+
* The login's FreyMCP side of the OAuth credential. The machine's connection needs the token minted beside the login access token;
|
|
29
|
+
* a login stored before the two channels merged has none and is asked to sign in again.
|
|
12
30
|
*/
|
|
13
|
-
export declare function
|
|
14
|
-
|
|
15
|
-
|
|
31
|
+
export declare function loginMcpSession(): Promise<LoginMcpSession>;
|
|
32
|
+
/** `fetch` for the FreyMCP transport: every request carries the login's MCP side token. A refused token is refreshed once and the request sent again. */
|
|
33
|
+
export declare function mcpFetch(initial: LoginMcpSession, options?: {
|
|
34
|
+
refresh?: (session: LoginMcpSession) => Promise<LoginMcpSession>;
|
|
16
35
|
}): {
|
|
17
36
|
fetch: typeof fetch;
|
|
18
|
-
session():
|
|
37
|
+
session(): LoginMcpSession;
|
|
19
38
|
};
|
|
20
39
|
export interface Controller {
|
|
21
40
|
/** The server's own instructions (how to use the tools), printed first by `frely tools`. */
|
|
@@ -32,14 +51,10 @@ export interface Controller {
|
|
|
32
51
|
close(): Promise<void>;
|
|
33
52
|
}
|
|
34
53
|
/**
|
|
35
|
-
* Opens
|
|
36
|
-
*
|
|
54
|
+
* Opens this computer's FreyMCP connection on the login's own credential. There is no separate controller sign-in: the same
|
|
55
|
+
* `frely login` that owns the account also names this machine, and the connection appears in the web console under that machine.
|
|
37
56
|
*/
|
|
38
|
-
export declare function openController(
|
|
39
|
-
interactive: boolean;
|
|
40
|
-
login?: typeof controllerLogin;
|
|
41
|
-
request?: typeof requestControllerLogin;
|
|
42
|
-
}): Promise<Controller>;
|
|
57
|
+
export declare function openController(): Promise<Controller>;
|
|
43
58
|
/** The tool's text parts joined, as a person or model would read them. */
|
|
44
59
|
export declare function resultText(result: ToolResult): string;
|
|
45
60
|
/** The result as one object: its structured content, else its text when that is a JSON object. */
|
|
@@ -1,55 +1,71 @@
|
|
|
1
1
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
2
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
3
3
|
import { VERSION } from "../version.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { frelyMcpUrl, refreshLoginCredential, requireLogin } from "../auth.js";
|
|
5
|
+
/** The exit codes of the device commands. */
|
|
6
|
+
export const EXIT = { ok: 0, cli: 1, tool: 2, approval: 3, auth: 4, offline: 5, limit: 6 };
|
|
7
|
+
/** A failure with the exit code the command ends with. */
|
|
8
|
+
export class ControllerError extends Error {
|
|
9
|
+
exitCode;
|
|
10
|
+
constructor(message, exitCode) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.exitCode = exitCode;
|
|
13
|
+
this.name = "ControllerError";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const MCP_TIMEOUT_MS = 15_000;
|
|
6
17
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* refused it before running anything.
|
|
18
|
+
* The login's FreyMCP side of the OAuth credential. The machine's connection needs the token minted beside the login access token;
|
|
19
|
+
* a login stored before the two channels merged has none and is asked to sign in again.
|
|
10
20
|
*/
|
|
11
|
-
export function
|
|
21
|
+
export async function loginMcpSession() {
|
|
22
|
+
const { config, credential } = await requireLogin();
|
|
23
|
+
if (!credential.mcpToken)
|
|
24
|
+
throw new ControllerError("This computer needs a fresh sign-in to control your Frely devices. Run `frely login` again.", EXIT.auth);
|
|
25
|
+
return { mcpUrl: frelyMcpUrl(config.relayUrl), mcpToken: credential.mcpToken };
|
|
26
|
+
}
|
|
27
|
+
/** A refused FreyMCP token is replaced by refreshing the login, which mints a fresh side token for this machine. */
|
|
28
|
+
async function refreshLoginMcpSession() {
|
|
29
|
+
const { config, credential } = await refreshLoginCredential();
|
|
30
|
+
if (!credential.mcpToken)
|
|
31
|
+
throw new ControllerError("This computer needs a fresh sign-in to control your Frely devices. Run `frely login` again.", EXIT.auth);
|
|
32
|
+
return { mcpUrl: frelyMcpUrl(config.relayUrl), mcpToken: credential.mcpToken };
|
|
33
|
+
}
|
|
34
|
+
/** `fetch` for the FreyMCP transport: every request carries the login's MCP side token. A refused token is refreshed once and the request sent again. */
|
|
35
|
+
export function mcpFetch(initial, options = {}) {
|
|
12
36
|
let session = initial;
|
|
13
|
-
const refresh = options.refresh ??
|
|
14
|
-
const
|
|
15
|
-
const send = (input, init) => {
|
|
16
|
-
const url = input instanceof Request ? input.url : String(input);
|
|
17
|
-
const method = init?.method ?? (input instanceof Request ? input.method : "GET");
|
|
37
|
+
const refresh = options.refresh ?? refreshLoginMcpSession;
|
|
38
|
+
const send = async (input, init) => {
|
|
18
39
|
const headers = new Headers(init?.headers);
|
|
19
|
-
headers.set("authorization", `
|
|
20
|
-
|
|
21
|
-
return fetch(url, { ...init, headers, redirect: "error" });
|
|
40
|
+
headers.set("authorization", `Bearer ${session.mcpToken}`);
|
|
41
|
+
return fetch(input, { ...init, headers, redirect: "error", signal: AbortSignal.timeout(MCP_TIMEOUT_MS) });
|
|
22
42
|
};
|
|
23
43
|
return {
|
|
24
44
|
session: () => session,
|
|
25
45
|
fetch: async (input, init) => {
|
|
26
|
-
if (session.expiresAt - 30_000 <= now())
|
|
27
|
-
session = await refresh(session);
|
|
28
46
|
let response = await send(input, init);
|
|
29
47
|
if (response.status === 401) {
|
|
30
48
|
await response.body?.cancel().catch(() => undefined);
|
|
31
49
|
session = await refresh(session);
|
|
32
50
|
response = await send(input, init);
|
|
33
51
|
if (response.status === 401)
|
|
34
|
-
throw new ControllerError("The server did not accept this computer's
|
|
52
|
+
throw new ControllerError("The server did not accept this computer's device connection. Run `frely login` again.", EXIT.auth);
|
|
35
53
|
}
|
|
36
54
|
return response;
|
|
37
55
|
},
|
|
38
56
|
};
|
|
39
57
|
}
|
|
40
58
|
/**
|
|
41
|
-
* Opens
|
|
42
|
-
*
|
|
59
|
+
* Opens this computer's FreyMCP connection on the login's own credential. There is no separate controller sign-in: the same
|
|
60
|
+
* `frely login` that owns the account also names this machine, and the connection appears in the web console under that machine.
|
|
43
61
|
*/
|
|
44
|
-
export async function openController(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
session = await (options.interactive ? (options.login ?? controllerLogin)() : (options.request ?? requestControllerLogin)());
|
|
48
|
-
const signed = dpopFetch(session);
|
|
62
|
+
export async function openController() {
|
|
63
|
+
const session = await loginMcpSession();
|
|
64
|
+
const signed = mcpFetch(session);
|
|
49
65
|
const transport = new StreamableHTTPClientTransport(new URL(session.mcpUrl), {
|
|
50
66
|
fetch: signed.fetch, reconnectionOptions: { maxRetries: 0, initialReconnectionDelay: 1000, maxReconnectionDelay: 1000, reconnectionDelayGrowFactor: 1 },
|
|
51
67
|
});
|
|
52
|
-
const client = new Client({ name: "frely-cli
|
|
68
|
+
const client = new Client({ name: "frely-cli", version: VERSION });
|
|
53
69
|
try {
|
|
54
70
|
await client.connect(transport);
|
|
55
71
|
}
|
|
@@ -114,7 +130,7 @@ export function outcomeOf(result) {
|
|
|
114
130
|
return { exitCode: EXIT.approval, note: `Approval needed. Approve here: ${error.url}` };
|
|
115
131
|
}
|
|
116
132
|
const text = resultText(result);
|
|
117
|
-
if (/frely
|
|
133
|
+
if (/frely link on|device is offline|Offline:/u.test(text))
|
|
118
134
|
return { exitCode: EXIT.offline };
|
|
119
135
|
if (error && typeof error.code === "string" && /limit|quota|insufficient/u.test(error.code))
|
|
120
136
|
return { exitCode: EXIT.limit };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/controller/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/controller/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export interface Output {
|
|
|
5
5
|
out(text: string): void;
|
|
6
6
|
err(text: string): void;
|
|
7
7
|
}
|
|
8
|
-
export declare const CONTROLLER_USAGE = "Control your Frely devices from this computer.\n frely devices [--add] List devices, whether they are online, and their workspaces\n frely run <device> [--cwd <dir>] [--timeout <s>] [--background] -- <command>\n frely ps <device> Background commands on the device\n frely logs <device> <id> [--follow] Output of a background command\n frely kill <device> <id> Stop a background command\n frely read <device>:<path> [--lines a:b] Print a file\n frely ls [<device>:<path>] List a folder (no argument: the workspace roots)\n frely grep <device>:<path> <text> [--regex] [--case] [--max <n>]\n frely edit <device>:<path> (--from <local file> | --patch <json file>) [--overwrite]\n frely permission request <device> --resource <name> --reason <text> --command <text> [--cwd <dir>] [--mode once|window|authorization]\n frely permission confirm <code> [A|B|C] Finish an approval by authenticator or emailed code\n frely permission wait <short code> [--then '<command>'] [--timeout <s>]\n frely tools [--json] What the server offers, with its own instructions\n frely call <tool> [--json '<object>' | --input <file>] Any tool by name\n
|
|
8
|
+
export declare const CONTROLLER_USAGE = "Control your Frely devices from this computer.\n frely devices [--add] List devices, whether they are online, and their workspaces\n frely run <device> [--cwd <dir>] [--timeout <s>] [--background] -- <command>\n frely ps <device> Background commands on the device\n frely logs <device> <id> [--follow] Output of a background command\n frely kill <device> <id> Stop a background command\n frely read <device>:<path> [--lines a:b] Print a file\n frely ls [<device>:<path>] List a folder (no argument: the workspace roots)\n frely grep <device>:<path> <text> [--regex] [--case] [--max <n>]\n frely edit <device>:<path> (--from <local file> | --patch <json file>) [--overwrite]\n frely permission request <device> --resource <name> --reason <text> --command <text> [--cwd <dir>] [--mode once|window|authorization]\n frely permission confirm <code> [A|B|C] Finish an approval by authenticator or emailed code\n frely permission wait <short code> [--then '<command>'] [--timeout <s>]\n frely tools [--json] What the server offers, with its own instructions\n frely call <tool> [--json '<object>' | --input <file>] Any tool by name\n\nEvery command takes --json (the full result) and --out <file> (write the output there).\nA device is its name or id from \"frely devices\". A path on this computer is not accepted where <device>:<path> is expected.\nExit codes: 0 done, 1 this CLI (usage, local file), 2 the tool or the remote command failed, 3 approval needed (the output has the link\nand the \"frely permission wait\" command), 4 not signed in (run `frely login`), 5 device offline, 6 limit reached.\n";
|
|
9
9
|
/** Tests replace the connection with a fake; returns the function that puts the real one back. */
|
|
10
10
|
export declare function useControllerOpener(replacement: typeof openController): () => void;
|
|
11
11
|
export declare function runControllerCommand(args: readonly string[], io: Output): Promise<number>;
|
|
@@ -2,9 +2,8 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { readFile, stat, writeFile } from "node:fs/promises";
|
|
3
3
|
import { intOption, parseArgs, requireRemote } from "./args.js";
|
|
4
4
|
import { waitForApproval } from "./approval-wait.js";
|
|
5
|
-
import { openController, outcomeOf, resultData, resultText } from "./client.js";
|
|
6
|
-
|
|
7
|
-
export const CONTROLLER_COMMANDS = new Set(["devices", "run", "ps", "logs", "kill", "read", "ls", "grep", "edit", "tools", "call", "permission", "controller"]);
|
|
5
|
+
import { openController, outcomeOf, resultData, resultText, ControllerError, EXIT } from "./client.js";
|
|
6
|
+
export const CONTROLLER_COMMANDS = new Set(["devices", "run", "ps", "logs", "kill", "read", "ls", "grep", "edit", "tools", "call", "permission"]);
|
|
8
7
|
export const CONTROLLER_USAGE = `Control your Frely devices from this computer.
|
|
9
8
|
frely devices [--add] List devices, whether they are online, and their workspaces
|
|
10
9
|
frely run <device> [--cwd <dir>] [--timeout <s>] [--background] -- <command>
|
|
@@ -20,12 +19,11 @@ export const CONTROLLER_USAGE = `Control your Frely devices from this computer.
|
|
|
20
19
|
frely permission wait <short code> [--then '<command>'] [--timeout <s>]
|
|
21
20
|
frely tools [--json] What the server offers, with its own instructions
|
|
22
21
|
frely call <tool> [--json '<object>' | --input <file>] Any tool by name
|
|
23
|
-
frely controller login|logout|status This computer's authorization to control your devices
|
|
24
22
|
|
|
25
23
|
Every command takes --json (the full result) and --out <file> (write the output there).
|
|
26
24
|
A device is its name or id from "frely devices". A path on this computer is not accepted where <device>:<path> is expected.
|
|
27
25
|
Exit codes: 0 done, 1 this CLI (usage, local file), 2 the tool or the remote command failed, 3 approval needed (the output has the link
|
|
28
|
-
and the "frely permission wait" command), 4 not
|
|
26
|
+
and the "frely permission wait" command), 4 not signed in (run \`frely login\`), 5 device offline, 6 limit reached.
|
|
29
27
|
`;
|
|
30
28
|
const MAX_LOCAL_FILE = 1024 * 1024;
|
|
31
29
|
const isInteractive = () => process.stdin.isTTY === true && process.stderr.isTTY === true;
|
|
@@ -70,7 +68,7 @@ export function useControllerOpener(replacement) {
|
|
|
70
68
|
return () => { openIt = previous; };
|
|
71
69
|
}
|
|
72
70
|
async function withController(io, work) {
|
|
73
|
-
const controller = await openIt(
|
|
71
|
+
const controller = await openIt();
|
|
74
72
|
try {
|
|
75
73
|
return await work(controller);
|
|
76
74
|
}
|
|
@@ -96,7 +94,6 @@ export async function runControllerCommand(args, io) {
|
|
|
96
94
|
return EXIT.ok;
|
|
97
95
|
}
|
|
98
96
|
switch (command) {
|
|
99
|
-
case "controller": return await controllerCommand(rest, io);
|
|
100
97
|
case "permission": return await permissionCommand(rest, io);
|
|
101
98
|
case "devices": return await devices(rest, io);
|
|
102
99
|
case "run": return await run(rest, io);
|
|
@@ -120,24 +117,6 @@ export async function runControllerCommand(args, io) {
|
|
|
120
117
|
throw error;
|
|
121
118
|
}
|
|
122
119
|
}
|
|
123
|
-
async function controllerCommand(args, io) {
|
|
124
|
-
const action = args[0];
|
|
125
|
-
if (action === "login") {
|
|
126
|
-
const session = await controllerLogin({ notify: (text) => io.err(text) });
|
|
127
|
-
io.out(`This computer can now control your Frely devices (FrelyMCP ${session.mcpUrl}).\n`);
|
|
128
|
-
return EXIT.ok;
|
|
129
|
-
}
|
|
130
|
-
if (action === "logout") {
|
|
131
|
-
io.out(await controllerLogout() ? "This computer no longer controls your Frely devices.\n" : "This computer was not authorized as a controller.\n");
|
|
132
|
-
return EXIT.ok;
|
|
133
|
-
}
|
|
134
|
-
if (action === "status") {
|
|
135
|
-
const session = await readSession();
|
|
136
|
-
io.out(session ? `Authorized to control your devices: yes\nFrelyMCP: ${session.mcpUrl}\n` : "Authorized to control your devices: no. Run frely controller login.\n");
|
|
137
|
-
return EXIT.ok;
|
|
138
|
-
}
|
|
139
|
-
throw new ControllerError("Usage: frely controller login|logout|status", EXIT.cli);
|
|
140
|
-
}
|
|
141
120
|
async function devices(args, io) {
|
|
142
121
|
const parsed = parseArgs(args, { flags: [...COMMON_FLAGS, "--add"], values: COMMON_VALUES });
|
|
143
122
|
return withController(io, async (controller) => {
|