relmio 0.2.5 → 0.2.6

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
@@ -5,7 +5,28 @@ version across `package.json`, `package-lock.json`, this file, the Git tag,
5
5
  and npm. Local checks validate the repository metadata; the publishing guide
6
6
  checks the registry separately after publication.
7
7
 
8
- ## Unreleased
8
+ ## [0.2.6] - 2026-08-02
9
+
10
+ ### Added
11
+
12
+ - Add a curl-based wizard bootstrap for macOS, Linux, WSL, and Git Bash that
13
+ reuses Node.js 22+ or downloads and checksum-verifies a temporary official
14
+ runtime when Node.js is not installed.
15
+ - Add a native Windows PowerShell bootstrap for PowerShell and Command Prompt
16
+ that works without Git Bash or a preinstalled Node.js runtime and verifies
17
+ the temporary official Windows archive before execution.
18
+ - Expand the hosted installer into an accessible macOS/Linux, PowerShell,
19
+ Command Prompt, and NPX terminal switcher.
20
+
21
+ ### Changed
22
+
23
+ - Revamp the hosted Vercel experience and local browser wizard around the
24
+ Signal Spine composition and Patchbay Ledger design language.
25
+ - Integrate the Astryx component system, neutral theme, CLI, and AI-readable
26
+ setup guidance in the hosted React application while keeping the published
27
+ wizard dependency-light.
28
+ - Add persistent route context, sanitized preview status, responsive layouts,
29
+ reduced-motion behavior, and synchronized GitHub/npm setup documentation.
9
30
 
10
31
  ## [0.2.5] - 2026-07-31
11
32
 
package/README.md CHANGED
@@ -72,20 +72,61 @@ 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
- copyable command tailored to the current self-hosted n8n and Hostinger VPS
76
- setup path.
75
+ clickable macOS/Linux, PowerShell, Command Prompt, and NPX command switcher plus
76
+ a preview of the same five gates used by the local self-hosted n8n and
77
+ Hostinger VPS setup.
77
78
 
78
79
  ## Quick start
79
80
 
80
- Run this on your own macOS, Windows, or Linux computer—not on the VPS:
81
+ Choose the terminal already on your own computer. Do not run these commands on
82
+ the VPS.
83
+
84
+ ### macOS, Linux, WSL, or Git Bash
85
+
86
+ ```bash
87
+ curl -fsSL https://relmio.vercel.app/install.sh | sh
88
+ ```
89
+
90
+ ### Windows PowerShell
91
+
92
+ ```powershell
93
+ irm https://relmio.vercel.app/install.ps1 | iex
94
+ ```
95
+
96
+ ### Windows Command Prompt
97
+
98
+ ```bat
99
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://relmio.vercel.app/install.ps1 | iex"
100
+ ```
101
+
102
+ No Node.js or Git Bash installation is required first. The
103
+ [POSIX](https://github.com/Demonbane18/relmio/blob/main/web/public/install.sh)
104
+ and [Windows PowerShell](https://github.com/Demonbane18/relmio/blob/main/web/public/install.ps1)
105
+ bootstraps reuse Node.js 22 or newer when available. Otherwise they download
106
+ the matching current official Node.js 22 runtime to a private temporary
107
+ directory, verify its SHA-256 checksum, run Relmio with npm lifecycle scripts
108
+ disabled, and remove the temporary runtime when the wizard closes.
109
+
110
+ Users who already have Node.js 22 or newer can run the npm package directly:
111
+
112
+ ### NPX (requires Node.js 22+)
81
113
 
82
114
  ```bash
83
115
  npx --yes --ignore-scripts relmio@latest
84
116
  ```
85
117
 
86
- Requirements:
118
+ Either command opens the redesigned local wizard. Its Signal Spine keeps five
119
+ trust gates visible: local sign-in, host verification, read-only n8n discovery,
120
+ the exact sidecar plan, and the verified private endpoint. On a wide screen the
121
+ route stays beside the current gate; on a small screen it becomes a compact
122
+ progress strip.
123
+
124
+ ### Requirements
87
125
 
88
- - Node.js 22 or newer
126
+ - On macOS/Linux/WSL/Git Bash: `curl`, `awk`, `tar`, and either `sha256sum` or
127
+ `shasum`; Git Bash also needs `unzip`
128
+ - On native Windows: Windows PowerShell 5.1 or PowerShell 7; Command Prompt can
129
+ launch the included PowerShell bootstrap
89
130
  - A browser and an eligible ChatGPT/Codex account
90
131
  - A self-hosted n8n Docker deployment on a VPS
91
132
  - Docker Compose v2, SSH access, and a Docker network shared with n8n
@@ -114,28 +155,30 @@ product name to n8n. SuperGrok/xAI OAuth is a gated feasibility item on the
114
155
  [provider roadmap](https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md);
115
156
  it is not currently advertised as supported.
116
157
 
117
- ## Visual walkthrough
158
+ ## Updated browser wizard walkthrough
118
159
 
119
160
  All images below are sanitized previews with reserved addresses, fake server
120
- data, and no real credential or session information.
161
+ data, and no real credential or session information. Only the current gate is
162
+ actionable, and remote writes remain locked until the review checkbox is
163
+ selected.
121
164
 
122
- ### 1. Confirm the local ChatGPT/Codex sign-in
165
+ ### Gate 1: Confirm the local ChatGPT/Codex sign-in
123
166
 
124
167
  <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/01-local-sign-in-ready.png" alt="Sanitized local sign-in ready screen" width="720">
125
168
 
126
- ### 2. Verify the VPS identity
169
+ ### Gate 2: Verify the VPS identity
127
170
 
128
171
  <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/02-vps-identity-confirmed.png" alt="Sanitized VPS fingerprint confirmation screen" width="720">
129
172
 
130
- ### 3. Choose the detected n8n container and network
173
+ ### Gate 3: Choose the detected n8n container and network
131
174
 
132
175
  <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Sanitized n8n discovery screen" width="720">
133
176
 
134
- ### 4. Review the exact sidecar-only plan
177
+ ### Gate 4: Review the exact sidecar-only plan
135
178
 
136
179
  <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Sanitized installation plan screen" width="720">
137
180
 
138
- ### 5. Copy the verified n8n settings
181
+ ### Gate 5: Copy the verified n8n settings
139
182
 
140
183
  <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Sanitized verified bridge screen" width="720">
141
184
 
@@ -5,7 +5,19 @@ Every command on this page targets the separate
5
5
 
6
6
  ## Refresh an expired ChatGPT login
7
7
 
8
- The easiest method:
8
+ The easiest method is to open the
9
+ [hosted install page](https://relmio.vercel.app/install) and choose the local
10
+ terminal you already have. For macOS, Linux, WSL, or Git Bash:
11
+
12
+ ```bash
13
+ curl -fsSL https://relmio.vercel.app/install.sh | sh
14
+ ```
15
+
16
+ For Windows PowerShell, with no Git Bash or preinstalled Node.js required:
17
+
18
+ ```powershell
19
+ irm https://relmio.vercel.app/install.ps1 | iex
20
+ ```
9
21
 
10
22
  1. Start the local wizard again.
11
23
  2. Select **Refresh ChatGPT sign-in**.
package/docs/security.md CHANGED
@@ -92,8 +92,14 @@ The current release pins:
92
92
  - `ssh2` `1.17.0`
93
93
  - `openai-oauth` `2.0.0`
94
94
 
95
- Install scripts are disabled for local dependencies. The generated sidecar
96
- also installs `openai-oauth` with `--ignore-scripts`.
95
+ The POSIX and native Windows PowerShell bootstraps reuse a compatible local
96
+ Node.js runtime or download the matching current official Node.js 22 archive
97
+ to a private temporary directory. Each validates the archive against Node.js's
98
+ SHA-256 manifest before execution and removes it when the wizard closes. The
99
+ PowerShell bootstrap accepts only strict Windows x64 or ARM64 archive names,
100
+ uses HTTPS without redirects, and enables TLS 1.2 for Windows PowerShell 5.1.
101
+ npm lifecycle scripts are disabled when either bootstrap starts Relmio. The
102
+ generated sidecar also installs `openai-oauth` with `--ignore-scripts`.
97
103
 
98
104
  Do not replace pinned versions with `latest` in production. Follow the upgrade
99
105
  checklist in [maintenance.md](maintenance.md).
@@ -30,17 +30,39 @@ it after the wizard saves the credential.
30
30
 
31
31
  ## Confirm the local package first
32
32
 
33
- Run these commands on your own computer, not on the VPS:
33
+ Close every old wizard terminal and browser tab, then run the newest published
34
+ build on your own computer, not on the VPS. Choose the command for the terminal
35
+ you already have.
36
+
37
+ macOS, Linux, WSL, or Git Bash:
34
38
 
35
39
  ```bash
36
- node --version
37
- npm view relmio version
40
+ curl -fsSL https://relmio.vercel.app/install.sh | sh
41
+ ```
42
+
43
+ Windows PowerShell:
44
+
45
+ ```powershell
46
+ irm https://relmio.vercel.app/install.ps1 | iex
38
47
  ```
39
48
 
40
- Node must be version 22 or newer. Then close every old wizard terminal and
41
- browser tab and start the newest published build:
49
+ Windows Command Prompt:
50
+
51
+ ```bat
52
+ powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://relmio.vercel.app/install.ps1 | iex"
53
+ ```
54
+
55
+ These commands do not require Node.js to be installed. The Windows options do
56
+ not require Git Bash. Each bootstrap reuses Node.js 22 or newer when available,
57
+ or downloads an official temporary runtime and verifies its SHA-256 checksum
58
+ before execution.
59
+
60
+ If you choose the existing-Node fallback, confirm Node is version 22 or newer
61
+ and check the published package version first:
42
62
 
43
63
  ```bash
64
+ node --version
65
+ npm view relmio version
44
66
  npx --yes --ignore-scripts relmio@latest
45
67
  ```
46
68
 
@@ -49,7 +71,7 @@ newest printed `http://127.0.0.1:...` URL into the browser. That URL contains a
49
71
  temporary setup token: do not post it in an issue or screenshot.
50
72
 
51
73
  You do not need to sign in to npm, configure npm 2FA, or own this package to
52
- run its public `npx` command. npm authentication is required only for the
74
+ run any public command. npm authentication is required only for the
53
75
  maintainer who publishes a release.
54
76
 
55
77
  ## Quick VPS checks
@@ -88,7 +110,9 @@ bypassed.
88
110
 
89
111
  | Symptom | Meaning | Fix |
90
112
  |---|---|---|
91
- | `node: command not found`, `node is not recognized`, or Node is older than 22 | The local runtime is missing or unsupported. | Install Node.js 22 or newer on the local computer, open a new terminal, and rerun the `@latest` command. Do not install it on the VPS for the wizard. |
113
+ | `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. |
114
+ | `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 longer `powershell -NoProfile ...` command in Command Prompt. Git Bash is not required. |
115
+ | A bootstrap reports a checksum mismatch | The Node.js download did not match the official SHA-256 manifest, 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. |
92
116
  | The browser did not open | The automatic browser launch failed, but the local server may still be running. | Keep the newest terminal open and copy its newest `127.0.0.1` setup URL into the browser. Do not reuse a URL from a closed terminal. |
93
117
  | An old wizard page reports an invalid or expired setup session | The local server was closed or a newer wizard run created a different one-time session token. | Close the old page and use only the URL printed by the currently running terminal. |
94
118
  | `npx` appears to run an older wizard | An old terminal or tab is still active, or the package was run without an explicit tag. | Close old runs, check `npm view relmio version`, then run `npx --yes --ignore-scripts relmio@latest`. |
@@ -41,17 +41,26 @@ Use this simple explanation:
41
41
 
42
42
  On screen: the Mermaid flowchart in the README.
43
43
 
44
- ### 2:20 — Start the npm package
44
+ ### 2:20 — Start the wizard
45
45
 
46
- Run locally:
46
+ Open the hosted install page and choose the terminal already on the local
47
+ computer. Show both the macOS/Linux and native Windows choices:
47
48
 
48
49
  ```bash
49
- npx --yes --ignore-scripts relmio@latest
50
+ curl -fsSL https://relmio.vercel.app/install.sh | sh
51
+ ```
52
+
53
+ ```powershell
54
+ irm https://relmio.vercel.app/install.ps1 | iex
50
55
  ```
51
56
 
52
57
  Explain that:
53
58
 
54
- - `npx` downloads and runs the published version for this session;
59
+ - no preinstalled Node.js runtime is required;
60
+ - native Windows does not require Git Bash and also has a Command Prompt option;
61
+ - the bootstrap reuses Node.js 22+ or downloads and checksum-verifies a
62
+ temporary official Node.js 22 runtime;
63
+ - npm lifecycle scripts stay disabled when it starts the published package;
55
64
  - the wizard binds to `127.0.0.1`;
56
65
  - the printed setup URL is private and temporary;
57
66
  - the terminal must remain open until the wizard finishes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "relmio",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
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",
package/src/ui/app.js CHANGED
@@ -9,6 +9,7 @@ const state = {
9
9
  discovery: null,
10
10
  networks: null,
11
11
  installAttempted: false,
12
+ previewMode: false,
12
13
  };
13
14
 
14
15
  const element = (id) => document.getElementById(id);
@@ -125,10 +126,12 @@ async function waitForOAuthCompletion() {
125
126
 
126
127
  function showStep(step) {
127
128
  state.step = step;
129
+ let activePanel = null;
128
130
  for (const panel of document.querySelectorAll("[data-step]")) {
129
131
  const active = Number(panel.dataset.step) === step;
130
132
  panel.hidden = !active;
131
133
  if (active) {
134
+ activePanel = panel;
132
135
  panel.querySelector("h2")?.focus({ preventScroll: true });
133
136
  }
134
137
  }
@@ -141,7 +144,12 @@ function showStep(step) {
141
144
  marker.removeAttribute("aria-current");
142
145
  }
143
146
  }
144
- window.scrollTo({ top: 0, behavior: "smooth" });
147
+ activePanel?.closest(".work-column")?.scrollIntoView({
148
+ block: "start",
149
+ behavior: window.matchMedia("(prefers-reduced-motion: reduce)").matches
150
+ ? "auto"
151
+ : "smooth",
152
+ });
145
153
  }
146
154
 
147
155
  async function api(path, { method = "GET", body } = {}) {
@@ -209,8 +217,10 @@ async function refreshAuthStatus({ fresh = false } = {}) {
209
217
  const loginButton = element("login-button");
210
218
  const next = element("signin-next");
211
219
  const formattedUpdatedAt = renderAuthUpdatedAt(status.authUpdatedAt);
220
+ state.previewMode = status.previewMode === true;
221
+ element("preview-badge").hidden = !state.previewMode;
212
222
 
213
- if (status.previewMode) {
223
+ if (state.previewMode) {
214
224
  indicator.classList.add("ready");
215
225
  element("auth-title").textContent = "Sanitized preview credential";
216
226
  element("auth-detail").textContent =
@@ -294,7 +304,7 @@ async function discover() {
294
304
  element("container-select"),
295
305
  result.containers.map((container) => ({
296
306
  value: container.name,
297
- label: `${container.name} ${container.image}`,
307
+ label: `${container.name} · ${container.image}`,
298
308
  })),
299
309
  result.containers[0].name,
300
310
  );
@@ -483,11 +493,16 @@ element("install-button").addEventListener("click", async (event) => {
483
493
  element("result-models").textContent = result.models.join(", ");
484
494
  element("result-http-url").textContent =
485
495
  `${result.baseUrl.replace(/\/$/u, "")}/responses`;
496
+ if (state.previewMode) {
497
+ element("done-title").textContent = "The sanitized preview route is complete";
498
+ }
486
499
  showStep(5);
487
500
  setMessage(
488
- result.deploymentMode === "updated"
489
- ? "OAuth refreshed on the existing wizard-managed sidecar. n8n was not restarted."
490
- : "Installation verified. Your existing n8n was not restarted.",
501
+ state.previewMode
502
+ ? "Sanitized preview complete. The endpoint and models below are sample data."
503
+ : result.deploymentMode === "updated"
504
+ ? "OAuth refreshed on the existing wizard-managed sidecar. n8n was not restarted."
505
+ : "Installation verified. Your existing n8n was not restarted.",
491
506
  );
492
507
  } catch (error) {
493
508
  showError(error);
Binary file