relmio 0.2.13 → 0.2.15
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 +38 -0
- package/README.md +23 -8
- package/docs/troubleshooting.md +20 -5
- package/package.json +5 -2
- package/src/cli.js +90 -29
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,44 @@ checks the registry separately after publication.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## [0.2.15] - 2026-08-05
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Exit cleanly when WinGet or another non-interactive validator probes the
|
|
15
|
+
portable command without arguments, while keeping the browser wizard for
|
|
16
|
+
interactive Command Prompt and PowerShell sessions.
|
|
17
|
+
- Add a redirected-stdio portable smoke test so future WinGet candidates cannot
|
|
18
|
+
regress into a never-ending default launch.
|
|
19
|
+
- Exclude local npm cache directories from portable release archives.
|
|
20
|
+
|
|
21
|
+
## [0.2.14] - 2026-08-04
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- Add staged Homebrew formula and WinGet portable-package generation with
|
|
26
|
+
x64/ARM64 manifests, installed-command smoke tests, and review-only CI
|
|
27
|
+
artifacts for package-manager publication.
|
|
28
|
+
- Add `relmio --version` and `relmio -v` for noninteractive installer and
|
|
29
|
+
package-manager verification.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- Report Homebrew and WinGet publication status in the hosted install page and
|
|
34
|
+
documentation, while keeping unapproved commands out of the primary picker.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- Replace the hosted Command Prompt installer route's PowerShell launch with a
|
|
39
|
+
PowerShell-free, non-admin native batch bootstrap that reuses Node.js 22+
|
|
40
|
+
when available or verifies a pinned official Windows runtime before use.
|
|
41
|
+
- Keep downloaded checksum-manifest text out of CMD evaluation and use reviewed
|
|
42
|
+
Node.js 22.23.2 x64/ARM64 digests embedded in the release.
|
|
43
|
+
- Download the CMD bootstrap to a collision-resistant temporary name without
|
|
44
|
+
overwriting an existing `install.cmd`, then clean it after execution.
|
|
45
|
+
- Show deterministic download, checksum-verification, and extraction stages in
|
|
46
|
+
every bootstrap so temporary Node.js runtime setup does not appear stalled.
|
|
47
|
+
|
|
10
48
|
## [0.2.13] - 2026-08-04
|
|
11
49
|
|
|
12
50
|
### Changed
|
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ installing the private n8n sidecar.
|
|
|
72
72
|
</figure>
|
|
73
73
|
|
|
74
74
|
Use the site's [Install wizard](https://relmio.vercel.app/install) page for a
|
|
75
|
-
clickable macOS/Linux, PowerShell, Command Prompt, and NPX command switcher
|
|
75
|
+
clickable macOS/Linux, Homebrew, PowerShell, Command Prompt, and NPX command switcher
|
|
76
76
|
tailored to the current self-hosted n8n and Hostinger VPS setup path.
|
|
77
77
|
|
|
78
78
|
### Browser interface and theme modes
|
|
@@ -96,6 +96,12 @@ the VPS.
|
|
|
96
96
|
curl -fsSL https://relmio.vercel.app/install.sh | sh
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
+
### Homebrew (macOS or Linux)
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
brew tap Demonbane18/relmio && brew install relmio
|
|
103
|
+
```
|
|
104
|
+
|
|
99
105
|
### Windows PowerShell
|
|
100
106
|
|
|
101
107
|
```powershell
|
|
@@ -105,16 +111,24 @@ irm https://relmio.vercel.app/install.ps1 | iex
|
|
|
105
111
|
### Windows Command Prompt
|
|
106
112
|
|
|
107
113
|
```bat
|
|
108
|
-
"%
|
|
114
|
+
for /f "delims=" %F in ("%TEMP%\relmio-install-%RANDOM%-%RANDOM%-%RANDOM%.cmd") do @if exist "%~F" (exit /b 80) else curl -fsSL --remove-on-error https://relmio.vercel.app/install.cmd -o "%~F" && set "RELMIO_SELF_DELETE=%~F" && call "%~F"
|
|
109
115
|
```
|
|
110
116
|
|
|
111
117
|
No Node.js or Git Bash installation is required first. The
|
|
112
118
|
[POSIX](https://github.com/Demonbane18/relmio/blob/main/web/public/install.sh)
|
|
113
119
|
and [Windows PowerShell](https://github.com/Demonbane18/relmio/blob/main/web/public/install.ps1)
|
|
114
|
-
bootstraps
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
120
|
+
bootstraps, plus the PowerShell-free [Command Prompt](https://github.com/Demonbane18/relmio/blob/main/web/public/install.cmd)
|
|
121
|
+
bootstrap, reuse Node.js 22 or newer when available. Otherwise they show
|
|
122
|
+
staged **Please wait** messages while they download the matching current
|
|
123
|
+
official Node.js 22 runtime to a private temporary directory, verify its
|
|
124
|
+
SHA-256 checksum, run Relmio with npm lifecycle scripts disabled, and remove
|
|
125
|
+
the temporary runtime when the wizard closes. The Command Prompt path runs as
|
|
126
|
+
the current user and does not request administrator access or change Windows
|
|
127
|
+
security policy.
|
|
128
|
+
|
|
129
|
+
Homebrew is available from the public `Demonbane18/relmio` tap. The WinGet
|
|
130
|
+
command stays hidden until Microsoft accepts its catalog pull request and the
|
|
131
|
+
catalog updates. Until then, use Homebrew or a direct installer above.
|
|
118
132
|
|
|
119
133
|
Users who already have Node.js 22 or newer can run the npm package directly:
|
|
120
134
|
|
|
@@ -137,8 +151,9 @@ a browser.
|
|
|
137
151
|
|
|
138
152
|
- On macOS/Linux/WSL/Git Bash: `curl`, `awk`, `tar`, and either `sha256sum` or
|
|
139
153
|
`shasum`; Git Bash also needs `unzip`
|
|
140
|
-
- On native Windows:
|
|
141
|
-
|
|
154
|
+
- On native Windows: Command Prompt uses its built-in `curl`, `certutil`, and
|
|
155
|
+
`tar` tools; Windows PowerShell 5.1 or PowerShell 7 remains an alternative
|
|
156
|
+
bootstrap
|
|
142
157
|
- A browser and an eligible ChatGPT/Codex account
|
|
143
158
|
- A self-hosted n8n Docker deployment on a VPS
|
|
144
159
|
- Docker Compose v2, SSH access, and a Docker network shared with n8n
|
package/docs/troubleshooting.md
CHANGED
|
@@ -40,6 +40,12 @@ macOS, Linux, WSL, or Git Bash:
|
|
|
40
40
|
curl -fsSL https://relmio.vercel.app/install.sh | sh
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
Homebrew (macOS or Linux):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
brew tap Demonbane18/relmio && brew install relmio
|
|
47
|
+
```
|
|
48
|
+
|
|
43
49
|
Windows PowerShell:
|
|
44
50
|
|
|
45
51
|
```powershell
|
|
@@ -49,13 +55,20 @@ irm https://relmio.vercel.app/install.ps1 | iex
|
|
|
49
55
|
Windows Command Prompt:
|
|
50
56
|
|
|
51
57
|
```bat
|
|
52
|
-
"%
|
|
58
|
+
for /f "delims=" %F in ("%TEMP%\relmio-install-%RANDOM%-%RANDOM%-%RANDOM%.cmd") do @if exist "%~F" (exit /b 80) else curl -fsSL --remove-on-error https://relmio.vercel.app/install.cmd -o "%~F" && set "RELMIO_SELF_DELETE=%~F" && call "%~F"
|
|
53
59
|
```
|
|
54
60
|
|
|
55
61
|
These commands do not require Node.js to be installed. The Windows options do
|
|
56
62
|
not require Git Bash. Each bootstrap reuses Node.js 22 or newer when available,
|
|
57
|
-
or
|
|
58
|
-
before execution.
|
|
63
|
+
or shows staged **Please wait** messages while it downloads an official
|
|
64
|
+
temporary runtime and verifies its SHA-256 checksum before execution. The
|
|
65
|
+
Command Prompt route is PowerShell-free, non-admin, and does not change Windows
|
|
66
|
+
security policy.
|
|
67
|
+
|
|
68
|
+
Homebrew is available from the public `Demonbane18/relmio` tap. The WinGet
|
|
69
|
+
command stays hidden until Microsoft accepts its catalog pull request and the
|
|
70
|
+
catalog updates. Until then, use Homebrew or one of the direct bootstrap
|
|
71
|
+
commands on this page.
|
|
59
72
|
|
|
60
73
|
If you choose the existing-Node fallback, confirm Node is version 22 or newer
|
|
61
74
|
and check the published package version first:
|
|
@@ -117,8 +130,10 @@ bypassed.
|
|
|
117
130
|
| Symptom | Meaning | Fix |
|
|
118
131
|
|---|---|---|
|
|
119
132
|
| `node: command not found`, `node is not recognized`, or Node is older than 22 | The NPX fallback cannot use the local runtime. | Use the macOS/Linux curl command or the native Windows PowerShell/Command Prompt command above. Either can run with a verified temporary runtime. Do not install Node.js on the VPS for the wizard. |
|
|
120
|
-
| `curl` or `sh` is not recognized on Windows | The macOS/Linux command was pasted into a native Windows terminal. | Use the PowerShell command in PowerShell
|
|
121
|
-
|
|
|
133
|
+
| `curl` or `sh` is not recognized on Windows | The macOS/Linux command was pasted into a native Windows terminal. | Use the PowerShell command in PowerShell or the collision-safe temporary-file command shown above in Command Prompt. Git Bash is not required. If Command Prompt does not have `curl`, update Windows or use the PowerShell route. |
|
|
134
|
+
| Command Prompt says it cannot create `powershell.exe` | A Windows policy denied PowerShell before the old CMD route could start its installer. | Use the current PowerShell-free Command Prompt command above. It downloads `install.cmd`, runs as your current user, and does not request elevation or change execution policy. |
|
|
135
|
+
| The bootstrap stays on a `Please wait` stage | Node.js is missing or older than 22, so the bootstrap is downloading, checking, or extracting a temporary Node.js 22 runtime. | Keep the terminal open while the deterministic stage messages advance. The runtime is verified before it runs, is removed after the wizard exits, and is not installed system-wide. |
|
|
136
|
+
| A bootstrap reports a checksum mismatch | The Node.js download did not match its reviewed official SHA-256 checksum, so it was not executed. | Retry on a trusted connection. Do not bypass the check. If it repeats, use an existing Node.js 22+ installation and report the sanitized error. |
|
|
122
137
|
| Windows PowerShell shows `[eval]:1` before the wizard starts | An older bootstrap passed a JavaScript expression through `node -p`; PowerShell native-argument handling can alter that expression. | Update to the latest `relmio@latest` and rerun the same PowerShell or Command Prompt command. The current bootstrap parses the literal `node --version` output and reuses Node.js 22 or newer. |
|
|
123
138
|
| Windows reports `spawn EINVAL` when starting ChatGPT sign-in | An older wizard tried to execute `npx.cmd` directly; Windows requires the current Node runtime to launch npm's JavaScript CLI. | Update to the latest `relmio@latest` release and restart the setup command. The current wizard keeps the macOS/Linux/WSL/Git Bash `npx` path unchanged. |
|
|
124
139
|
| The browser did not open | The automatic browser launch failed, but the local server may still be running. | Keep the newest terminal open and press Enter to ask an interactive wizard terminal to open it again. If the terminal is noninteractive or the launcher still fails, copy its newest `127.0.0.1` setup URL into the browser. Do not reuse a URL from a closed terminal. |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "relmio",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.15",
|
|
4
4
|
"description": "Turn a supported ChatGPT/Codex OAuth sign-in into a private OpenAI-compatible endpoint, starting with self-hosted n8n.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"relmio",
|
|
@@ -37,7 +37,10 @@
|
|
|
37
37
|
},
|
|
38
38
|
"files": [
|
|
39
39
|
"src",
|
|
40
|
-
"scripts",
|
|
40
|
+
"scripts/build-npm-package.js",
|
|
41
|
+
"scripts/check-release-metadata.js",
|
|
42
|
+
"scripts/check-syntax.js",
|
|
43
|
+
"scripts/preview.js",
|
|
41
44
|
"docs",
|
|
42
45
|
"README.md",
|
|
43
46
|
"SPEC.md",
|
package/src/cli.js
CHANGED
|
@@ -1,40 +1,101 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { randomBytes } from "node:crypto";
|
|
4
|
+
import { realpathSync } from "node:fs";
|
|
5
|
+
import { readFile } from "node:fs/promises";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
4
7
|
|
|
5
8
|
import { attachBrowserReopenOnEnter, openBrowser } from "./browser.js";
|
|
6
9
|
import { startWizardServer } from "./web/server.js";
|
|
7
10
|
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
const cliPath = fileURLToPath(import.meta.url);
|
|
12
|
+
const packageJsonUrl = new URL("../package.json", import.meta.url);
|
|
13
|
+
|
|
14
|
+
export function isCliEntryPath(entryPath, realpath = realpathSync) {
|
|
15
|
+
if (typeof entryPath !== "string" || entryPath === "") {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return realpath(entryPath) === realpath(cliPath);
|
|
20
|
+
} catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function cliMode(argumentsList) {
|
|
26
|
+
return argumentsList.length === 1 &&
|
|
27
|
+
(argumentsList[0] === "--version" || argumentsList[0] === "-v")
|
|
28
|
+
? "version"
|
|
29
|
+
: "wizard";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function hasInteractiveTerminal({
|
|
33
|
+
input = process.stdin,
|
|
34
|
+
output = process.stdout,
|
|
35
|
+
} = {}) {
|
|
36
|
+
return Boolean(input?.isTTY && output?.isTTY);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function runCli({
|
|
40
|
+
argumentsList = process.argv.slice(2),
|
|
41
|
+
log = console.log,
|
|
42
|
+
readPackage = () => readFile(packageJsonUrl, "utf8"),
|
|
43
|
+
isInteractive = hasInteractiveTerminal,
|
|
44
|
+
} = {}) {
|
|
45
|
+
if (cliMode(argumentsList) === "version") {
|
|
46
|
+
const packageJson = JSON.parse(await readPackage());
|
|
47
|
+
if (typeof packageJson.version !== "string" || packageJson.version === "") {
|
|
48
|
+
throw new Error("Relmio package metadata does not contain a version.");
|
|
49
|
+
}
|
|
50
|
+
log(packageJson.version);
|
|
28
51
|
return;
|
|
29
52
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
53
|
+
|
|
54
|
+
if (!isInteractive()) {
|
|
55
|
+
log(
|
|
56
|
+
"Relmio needs an interactive terminal to open the local wizard. Run relmio from Command Prompt, PowerShell, or another terminal.",
|
|
57
|
+
);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const sessionToken = randomBytes(32).toString("base64url");
|
|
62
|
+
const wizard = await startWizardServer({ sessionToken });
|
|
63
|
+
const url = `${wizard.origin}/?session=${sessionToken}`;
|
|
64
|
+
|
|
65
|
+
log("");
|
|
66
|
+
log("Relmio");
|
|
67
|
+
log("---------");
|
|
68
|
+
log(`Local wizard: ${url}`);
|
|
69
|
+
log("");
|
|
70
|
+
log("This creates a separate sidecar and never restarts n8n.");
|
|
71
|
+
log("Keep this Terminal window open while using the wizard.");
|
|
72
|
+
log("Press Control+C to stop.");
|
|
73
|
+
log("");
|
|
74
|
+
|
|
75
|
+
openBrowser(url);
|
|
76
|
+
const detachBrowserReopen = attachBrowserReopenOnEnter({ url });
|
|
77
|
+
|
|
78
|
+
let closing = false;
|
|
79
|
+
async function close() {
|
|
80
|
+
if (closing) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
closing = true;
|
|
84
|
+
detachBrowserReopen();
|
|
85
|
+
await wizard.close();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
process.once("SIGINT", async () => {
|
|
89
|
+
await close();
|
|
90
|
+
});
|
|
91
|
+
process.once("SIGTERM", async () => {
|
|
92
|
+
await close();
|
|
93
|
+
});
|
|
33
94
|
}
|
|
34
95
|
|
|
35
|
-
process.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
process.
|
|
39
|
-
|
|
40
|
-
}
|
|
96
|
+
if (isCliEntryPath(process.argv[1])) {
|
|
97
|
+
runCli().catch((error) => {
|
|
98
|
+
console.error(error.message);
|
|
99
|
+
process.exitCode = 1;
|
|
100
|
+
});
|
|
101
|
+
}
|