relmio 0.2.6 → 0.2.8
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 +31 -0
- package/README.md +19 -18
- package/docs/images/setup/01-local-sign-in-ready.png +0 -0
- package/docs/images/setup/02-vps-identity-confirmed.png +0 -0
- package/docs/images/setup/03-n8n-detected.png +0 -0
- package/docs/images/setup/04-install-plan.png +0 -0
- package/docs/images/setup/05-bridge-ready.png +0 -0
- package/package.json +1 -1
- package/src/ui/app.js +6 -21
- package/src/ui/icons/monitor.svg +6 -0
- package/src/ui/icons/moon.svg +4 -0
- package/src/ui/icons/sun.svg +12 -0
- package/src/ui/index.html +407 -452
- package/src/ui/styles.css +599 -669
- package/src/ui/theme.js +50 -0
- package/src/web/server.js +16 -10
- package/src/ui/geist-latin.woff2 +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,37 @@ 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
|
|
9
|
+
|
|
10
|
+
## [0.2.8] - 2026-08-02
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Replace the local browser wizard's text appearance selector with compact,
|
|
15
|
+
accessible System/Light/Dark icons, while keeping the original horizontal
|
|
16
|
+
Signal Spine flow and touch-friendly behavior.
|
|
17
|
+
- Serve the bundled Lucide SVG assets from the wizard and include them in the
|
|
18
|
+
npm package so offline and Node-free browser launches render consistently.
|
|
19
|
+
|
|
20
|
+
## [0.2.7] - 2026-08-02
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- Restore the original Relmio hosted layout and local browser wizard flow, with
|
|
25
|
+
the horizontal five-step Signal Spine and GitHub star/version control kept
|
|
26
|
+
visible.
|
|
27
|
+
- Add Astryx's built theme and accessible segmented appearance control to the
|
|
28
|
+
hosted app, plus lightweight System/Light/Dark preference support to the
|
|
29
|
+
local wizard.
|
|
30
|
+
- Add responsive dark-mode logo treatment, phone-sized controls, and matching
|
|
31
|
+
browser-wizard guidance to the GitHub and npm README variants.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- Keep the checksum-verified temporary Node.js 22 runtime on the child process
|
|
36
|
+
path so Git Bash and other Node-free systems can launch the Relmio package
|
|
37
|
+
shim without falling back to a missing or outdated system `node` command.
|
|
38
|
+
|
|
8
39
|
## [0.2.6] - 2026-08-02
|
|
9
40
|
|
|
10
41
|
### Added
|
package/README.md
CHANGED
|
@@ -72,9 +72,18 @@ 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
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
clickable macOS/Linux, PowerShell, Command Prompt, and NPX command switcher
|
|
76
|
+
tailored to the current self-hosted n8n and Hostinger VPS setup path.
|
|
77
|
+
|
|
78
|
+
### Browser interface and theme modes
|
|
79
|
+
|
|
80
|
+
The hosted site and local wizard keep the original Relmio relay layout while
|
|
81
|
+
adding a compact **System / Light / Dark** appearance control. System follows
|
|
82
|
+
the computer's preference; Light and Dark are remembered on that browser only.
|
|
83
|
+
The local wizard keeps its horizontal five-step Signal Spine at the top of the
|
|
84
|
+
flow, and the hosted site keeps the live GitHub star/version control visible.
|
|
85
|
+
Both surfaces collapse their controls for narrow phone screens without
|
|
86
|
+
turning the setup flow into a side rail or requiring a separate mobile app.
|
|
78
87
|
|
|
79
88
|
## Quick start
|
|
80
89
|
|
|
@@ -115,12 +124,6 @@ Users who already have Node.js 22 or newer can run the npm package directly:
|
|
|
115
124
|
npx --yes --ignore-scripts relmio@latest
|
|
116
125
|
```
|
|
117
126
|
|
|
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
127
|
### Requirements
|
|
125
128
|
|
|
126
129
|
- On macOS/Linux/WSL/Git Bash: `curl`, `awk`, `tar`, and either `sha256sum` or
|
|
@@ -155,30 +158,28 @@ product name to n8n. SuperGrok/xAI OAuth is a gated feasibility item on the
|
|
|
155
158
|
[provider roadmap](https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md);
|
|
156
159
|
it is not currently advertised as supported.
|
|
157
160
|
|
|
158
|
-
##
|
|
161
|
+
## Visual walkthrough
|
|
159
162
|
|
|
160
163
|
All images below are sanitized previews with reserved addresses, fake server
|
|
161
|
-
data, and no real credential or session information.
|
|
162
|
-
actionable, and remote writes remain locked until the review checkbox is
|
|
163
|
-
selected.
|
|
164
|
+
data, and no real credential or session information.
|
|
164
165
|
|
|
165
|
-
###
|
|
166
|
+
### 1. Confirm the local ChatGPT/Codex sign-in
|
|
166
167
|
|
|
167
168
|
<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">
|
|
168
169
|
|
|
169
|
-
###
|
|
170
|
+
### 2. Verify the VPS identity
|
|
170
171
|
|
|
171
172
|
<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">
|
|
172
173
|
|
|
173
|
-
###
|
|
174
|
+
### 3. Choose the detected n8n container and network
|
|
174
175
|
|
|
175
176
|
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Sanitized n8n discovery screen" width="720">
|
|
176
177
|
|
|
177
|
-
###
|
|
178
|
+
### 4. Review the exact sidecar-only plan
|
|
178
179
|
|
|
179
180
|
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Sanitized installation plan screen" width="720">
|
|
180
181
|
|
|
181
|
-
###
|
|
182
|
+
### 5. Copy the verified n8n settings
|
|
182
183
|
|
|
183
184
|
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Sanitized verified bridge screen" width="720">
|
|
184
185
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
package/src/ui/app.js
CHANGED
|
@@ -9,7 +9,6 @@ const state = {
|
|
|
9
9
|
discovery: null,
|
|
10
10
|
networks: null,
|
|
11
11
|
installAttempted: false,
|
|
12
|
-
previewMode: false,
|
|
13
12
|
};
|
|
14
13
|
|
|
15
14
|
const element = (id) => document.getElementById(id);
|
|
@@ -126,12 +125,10 @@ async function waitForOAuthCompletion() {
|
|
|
126
125
|
|
|
127
126
|
function showStep(step) {
|
|
128
127
|
state.step = step;
|
|
129
|
-
let activePanel = null;
|
|
130
128
|
for (const panel of document.querySelectorAll("[data-step]")) {
|
|
131
129
|
const active = Number(panel.dataset.step) === step;
|
|
132
130
|
panel.hidden = !active;
|
|
133
131
|
if (active) {
|
|
134
|
-
activePanel = panel;
|
|
135
132
|
panel.querySelector("h2")?.focus({ preventScroll: true });
|
|
136
133
|
}
|
|
137
134
|
}
|
|
@@ -144,12 +141,7 @@ function showStep(step) {
|
|
|
144
141
|
marker.removeAttribute("aria-current");
|
|
145
142
|
}
|
|
146
143
|
}
|
|
147
|
-
|
|
148
|
-
block: "start",
|
|
149
|
-
behavior: window.matchMedia("(prefers-reduced-motion: reduce)").matches
|
|
150
|
-
? "auto"
|
|
151
|
-
: "smooth",
|
|
152
|
-
});
|
|
144
|
+
window.scrollTo({ top: 0, behavior: "smooth" });
|
|
153
145
|
}
|
|
154
146
|
|
|
155
147
|
async function api(path, { method = "GET", body } = {}) {
|
|
@@ -217,10 +209,8 @@ async function refreshAuthStatus({ fresh = false } = {}) {
|
|
|
217
209
|
const loginButton = element("login-button");
|
|
218
210
|
const next = element("signin-next");
|
|
219
211
|
const formattedUpdatedAt = renderAuthUpdatedAt(status.authUpdatedAt);
|
|
220
|
-
state.previewMode = status.previewMode === true;
|
|
221
|
-
element("preview-badge").hidden = !state.previewMode;
|
|
222
212
|
|
|
223
|
-
if (
|
|
213
|
+
if (status.previewMode) {
|
|
224
214
|
indicator.classList.add("ready");
|
|
225
215
|
element("auth-title").textContent = "Sanitized preview credential";
|
|
226
216
|
element("auth-detail").textContent =
|
|
@@ -304,7 +294,7 @@ async function discover() {
|
|
|
304
294
|
element("container-select"),
|
|
305
295
|
result.containers.map((container) => ({
|
|
306
296
|
value: container.name,
|
|
307
|
-
label: `${container.name}
|
|
297
|
+
label: `${container.name} - ${container.image}`,
|
|
308
298
|
})),
|
|
309
299
|
result.containers[0].name,
|
|
310
300
|
);
|
|
@@ -493,16 +483,11 @@ element("install-button").addEventListener("click", async (event) => {
|
|
|
493
483
|
element("result-models").textContent = result.models.join(", ");
|
|
494
484
|
element("result-http-url").textContent =
|
|
495
485
|
`${result.baseUrl.replace(/\/$/u, "")}/responses`;
|
|
496
|
-
if (state.previewMode) {
|
|
497
|
-
element("done-title").textContent = "The sanitized preview route is complete";
|
|
498
|
-
}
|
|
499
486
|
showStep(5);
|
|
500
487
|
setMessage(
|
|
501
|
-
|
|
502
|
-
? "
|
|
503
|
-
:
|
|
504
|
-
? "OAuth refreshed on the existing wizard-managed sidecar. n8n was not restarted."
|
|
505
|
-
: "Installation verified. Your existing n8n was not restarted.",
|
|
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.",
|
|
506
491
|
);
|
|
507
492
|
} catch (error) {
|
|
508
493
|
showError(error);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- Lucide monitor icon, ISC licensed: https://lucide.dev/license -->
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<rect width="20" height="14" x="2" y="3" rx="2" />
|
|
4
|
+
<line x1="8" x2="16" y1="21" y2="21" />
|
|
5
|
+
<line x1="12" x2="12" y1="17" y2="21" />
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<!-- Lucide moon icon, ISC licensed: https://lucide.dev/license -->
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" />
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Lucide sun icon, ISC licensed: https://lucide.dev/license -->
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<circle cx="12" cy="12" r="4" />
|
|
4
|
+
<path d="M12 2v2" />
|
|
5
|
+
<path d="M12 20v2" />
|
|
6
|
+
<path d="m4.93 4.93 1.41 1.41" />
|
|
7
|
+
<path d="m17.66 17.66 1.41 1.41" />
|
|
8
|
+
<path d="M2 12h2" />
|
|
9
|
+
<path d="M20 12h2" />
|
|
10
|
+
<path d="m6.34 17.66-1.41 1.41" />
|
|
11
|
+
<path d="m19.07 4.93-1.41 1.41" />
|
|
12
|
+
</svg>
|