makefx 2.0.0 → 2.0.1

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/CHANGELOG.md CHANGED
@@ -3,6 +3,10 @@
3
3
  The 1.x packages were built from the first version of makefx.app and do not
4
4
  work with the current service.
5
5
 
6
+ ## 2.0.1 — 2026-09-24
7
+
8
+ - Always print the login authorization URL, callback port, and an SSH tunnel command with the detected hostname so remote login can be completed from a local browser.
9
+
6
10
  ## 2.0.0 — 2026-09-24
7
11
 
8
12
  ### One canvas for you and your agent
package/README.md CHANGED
@@ -16,6 +16,19 @@ npm install -g makefx
16
16
  makefx login
17
17
  ```
18
18
 
19
+ Login always prints the authorization URL and callback address
20
+ (`http://127.0.0.1:8765/callback`), then tries to open a browser. If the CLI is
21
+ running on a remote host, keep login running and open a separate terminal on
22
+ the computer with your browser. Start the printed SSH tunnel before opening
23
+ the authorization URL:
24
+
25
+ ```bash
26
+ ssh -N -L 8765:127.0.0.1:8765 user@remote-host
27
+ ```
28
+
29
+ The CLI suggests the detected hostname; replace it with your usual SSH
30
+ destination or alias if needed. Keep the tunnel open until login finishes.
31
+
19
32
  Use `--env production|stage|local` to keep separate credentials and select the
20
33
  endpoint. Production is the default. `makefx logout` revokes the grant when the
21
34
  service is reachable and always removes the stored credentials; a grant can
package/dist/makefx.js CHANGED
@@ -13,7 +13,7 @@ var ENVIRONMENT_ORIGINS = {
13
13
  };
14
14
 
15
15
  // src/lib/version.ts
16
- var CLI_VERSION = true ? "2.0.0" : "0.0.0-dev";
16
+ var CLI_VERSION = true ? "2.0.1" : "0.0.0-dev";
17
17
 
18
18
  // src/commands/convenience.ts
19
19
  import { randomUUID } from "node:crypto";
@@ -1398,6 +1398,7 @@ async function handleCreate(parsed, dependencies = defaults2) {
1398
1398
 
1399
1399
  // src/commands/login.ts
1400
1400
  import process2 from "node:process";
1401
+ import { hostname } from "node:os";
1401
1402
  async function handleLogin(parsed) {
1402
1403
  const isLocal = parsed.options.local === "true";
1403
1404
  const env = isLocal ? "local" : parsed.options.env ?? DEFAULT_ENVIRONMENT;
@@ -1424,12 +1425,22 @@ async function handleLogin(parsed) {
1424
1425
  authUrl.searchParams.set("code_challenge_method", "S256");
1425
1426
  authUrl.searchParams.set("state", state);
1426
1427
  authUrl.searchParams.set("resource", mcpResourceFor(baseUrl));
1428
+ console.log(`
1429
+ Open this URL in your browser to authenticate:
1430
+
1431
+ ${authUrl.toString()}
1432
+ `);
1433
+ console.log(`The OAuth callback uses ${redirectUri} (port ${redirectPort}).`);
1434
+ const detectedHost = hostname();
1435
+ const sshHost = /^[a-zA-Z0-9][a-zA-Z0-9.-]*$/.test(detectedHost) ? detectedHost : "YOUR_SSH_HOST";
1436
+ console.log("If this CLI is on a remote host, run this in a separate terminal on the computer with your browser before opening the URL:");
1437
+ console.log(` ssh -N -L ${redirectPort}:127.0.0.1:${redirectPort} ${sshHost}`);
1438
+ console.log("Use your usual SSH destination (user@host or SSH alias) if the detected hostname is not reachable. Keep the tunnel open until login finishes.\n");
1427
1439
  console.log("Opening browser for Google authentication...");
1428
1440
  try {
1429
1441
  await openBrowser(authUrl.toString());
1430
1442
  } catch {
1431
- console.warn("Unable to open browser automatically. Please copy the URL below into your browser:");
1432
- console.log(authUrl.toString());
1443
+ console.warn("Unable to open browser automatically. Please open the URL above in your browser.");
1433
1444
  }
1434
1445
  const { code } = await waitForAuthorizationCode(redirectPort, state);
1435
1446
  console.log("Received authorization code. Exchanging for access token...");
@@ -2958,7 +2969,7 @@ Run makefx <command> --help, makefx space help, makefx asset help, makefx audio
2958
2969
  }
2959
2970
  function helpForCommand(command) {
2960
2971
  const staticUsage = {
2961
- login: "Usage: makefx login [--env production|stage|local] [--local]",
2972
+ login: "Usage: makefx login [--env production|stage|local] [--local]\n\nPrints the browser authorization URL and loopback callback port (8765).\nFor remote hosts, also prints an SSH tunnel command to run on your browser computer.",
2962
2973
  logout: "Usage: makefx logout [--env production|stage|local] [--local]",
2963
2974
  mcp: "Usage: makefx mcp [--env production|stage|local] [--local]",
2964
2975
  create: "Usage: makefx create --space ACCOUNT/SPACE --kind image|video|audio --model MODEL [--prompt TEXT] [--ref ASSET:SLOT]... [--param NAME=VALUE]... [--count 1..8] [--name TEXT] [--seed INTEGER] [--position JSON] [--tags JSON] [--note TEXT] [--from-asset ASSET] [--recipe-mode current|exact] [--request-id ID] [--wait] [--json]\nRepeated --ref values preserve left-to-right order as reference order 0, 1, and so on. Reads the live catalog for the paying Space before calling create_asset.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makefx",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Make images, video, and audio on makefx.app from your terminal or coding agent.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",