relmio 0.3.0 → 0.3.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
@@ -7,6 +7,25 @@ checks the registry separately after publication.
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## [0.3.1] - 2026-08-10
11
+
12
+ ### Changed
13
+
14
+ - Make the browser wizard beginner-friendly with a modern fixed-viewport
15
+ layout: all five active steps fit without document scrolling on common
16
+ 1280x720 laptops, while progress and safety context stay persistent beside
17
+ the active task.
18
+ - Keep narrow-phone documents fixed to the viewport and contain unavoidable
19
+ long-form overflow within the active task panel instead of the page.
20
+ - Expand the GitHub and npm walkthroughs with a hosted-install selector and
21
+ packaged, sanitized screenshots that document the current n8n workflow.
22
+
23
+ ### Security
24
+
25
+ - Restore a clean hosted-web dependency audit by pinning patched `js-yaml`
26
+ and `nanoid` releases and using the compatible `vinext` release that does
27
+ not include the currently vulnerable `image-size` parser.
28
+
10
29
  ## [0.3.0] - 2026-08-05
11
30
 
12
31
  ### Added
package/README.md CHANGED
@@ -15,21 +15,29 @@
15
15
 
16
16
  ## See it working first
17
17
 
18
- Before setup, this sample n8n configuration shows GPT-5.6 model aliases in the
19
- OpenAI Chat Model selector. The exact model list depends on the signed-in
20
- ChatGPT account and can change over time.
18
+ This documented example follows a tested n8n OpenAI credential through a
19
+ published Telegram-triggered workflow. It is a product-operation record, not
20
+ an endorsement, sponsorship, or affiliation by OpenAI, n8n, Hostinger,
21
+ Telegram, or AppBuildersPH.
21
22
 
22
23
  <figure>
23
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/gpt-56-model-selector.png" alt="Model selector listing GPT-5.6 Sol, Luna, and Terra model aliases" width="480">
24
- <figcaption>Compatibility preview: the model selector includes <code>gpt-5.6-sol</code>, <code>gpt-5.6-luna</code>, and <code>gpt-5.6-terra</code>.</figcaption>
24
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/n8n-openai-credential-connected.png" alt="n8n OpenAI credential dialog showing that the connection test succeeded" width="960">
25
+ <figcaption>The n8n OpenAI credential connection test succeeded; the credential value itself is obscured.</figcaption>
25
26
  </figure>
26
27
 
27
- After Relmio completes the installation, Docker shows the existing n8n stack
28
- and the new private OAuth sidecar running together.
28
+ <figure>
29
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/gpt-56-model-selector.png" alt="n8n model selector with gpt-5.6-terra selected and an account-specific model list" width="500">
30
+ <figcaption>This signed-in account's n8n model list includes <code>gpt-5.6-terra</code>; model availability is account-dependent and can change.</figcaption>
31
+ </figure>
32
+
33
+ <figure>
34
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/telegram-n8n-workflow-execution.png" alt="Successful n8n execution of a Telegram-triggered workflow with HTTP Request, Basic LLM Chain, and AI Agent branches" width="960">
35
+ <figcaption>The published Telegram-triggered n8n workflow completed successfully across its HTTP Request, Basic LLM Chain, and AI Agent branches.</figcaption>
36
+ </figure>
29
37
 
30
38
  <figure>
31
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/sidecar-docker-containers-running.png" alt="Docker Desktop showing the n8n and n8n-openai-oauth containers running" width="960">
32
- <figcaption>Completed setup: the existing <code>n8n</code> stack and the <code>n8n-openai-oauth</code> sidecar are both running.</figcaption>
39
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/telegram-model-results.png" alt="Telegram conversation receiving HTTP Request, Basic LLM Chain, and AI Agent outputs" width="682">
40
+ <figcaption>Telegram received the HTTP Request, Basic LLM Chain, and AI Agent outputs sent by that workflow.</figcaption>
33
41
  </figure>
34
42
 
35
43
  Relmio is a local browser wizard that installs a private
@@ -80,10 +88,11 @@ tailored to the current self-hosted n8n and Hostinger VPS setup path.
80
88
  The hosted site and local wizard keep the original Relmio relay layout while
81
89
  adding a compact **System / Light / Dark** appearance control. System follows
82
90
  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.
91
+ On desktop, the local wizard keeps progress and sidecar-only safety notes in a
92
+ persistent rail beside the active task; its compact fixed-screen shell avoids
93
+ document scrolling on common laptop screens. On narrow phones, it switches to
94
+ a horizontal progress strip and keeps task scrolling inside the active panel.
95
+ The hosted site keeps the live GitHub star/version control visible.
87
96
 
88
97
  ## Quick start
89
98
 
@@ -184,28 +193,51 @@ it is not currently advertised as supported.
184
193
 
185
194
  ## Visual walkthrough
186
195
 
187
- All images below are sanitized previews with reserved addresses, fake server
188
- data, and no real credential or session information.
196
+ These current product screenshots use sanitized sample values wherever a setup
197
+ field might otherwise identify an environment. The VPS identity screen shows a
198
+ reserved sample address and sample SSH fingerprint; none of the images includes
199
+ an OAuth token, password, private key, or live wizard session URL.
200
+
201
+ ### 1. Choose a hosted installation method
202
+
203
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/00-install-methods.png" alt="Hosted Relmio installation page with macOS/Linux, Homebrew, PowerShell, Command Prompt, and NPX choices" width="720">
204
+
205
+ The hosted page starts with the installation-method selector. Run the selected
206
+ command locally, not on the VPS.
207
+
208
+ ### 2. Complete the local ChatGPT/Codex sign-in
209
+
210
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/01-local-sign-in-ready.png" alt="Sanitized preview-mode sample credential state, not a real saved-login confirmation" width="626">
211
+
212
+ This image shows a sanitized preview-mode sample credential state; it does not
213
+ confirm that a real local ChatGPT login was saved. During a real fresh login,
214
+ the browser confirmation states that the credentials were saved locally.
215
+
216
+ ### 3. Verify the VPS identity
189
217
 
190
- ### 1. Confirm the local ChatGPT/Codex sign-in
218
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/02-vps-identity-confirmed.png" alt="VPS identity confirmation with a sanitized sample address and SSH fingerprint" width="720">
191
219
 
192
- <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">
220
+ Confirm the SSH host fingerprint before authentication. The screenshot uses the
221
+ reserved sample host `vps.example.test`, a sample fingerprint, and a blank
222
+ password field.
193
223
 
194
- ### 2. Verify the VPS identity
224
+ ### 4. Choose the detected n8n container and network
195
225
 
196
- <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">
226
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Detected n8n container and shared Docker network" width="720">
197
227
 
198
- ### 3. Choose the detected n8n container and network
228
+ Discovery is read-only; choose the existing n8n container and shared Docker
229
+ network.
199
230
 
200
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Sanitized n8n discovery screen" width="720">
231
+ ### 5. Review the exact sidecar-only plan
201
232
 
202
- ### 4. Review the exact sidecar-only plan
233
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Exact sidecar-only installation plan, including forbidden actions" width="720">
203
234
 
204
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Sanitized installation plan screen" width="720">
235
+ The plan names the allowed sidecar work and explicitly excludes edits or
236
+ restarts of n8n, a published host port, and a Traefik route.
205
237
 
206
- ### 5. Copy the verified n8n settings
238
+ ### 6. Copy the verified n8n settings
207
239
 
208
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Sanitized verified bridge screen" width="720">
240
+ <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Private bridge ready screen with n8n OpenAI credential settings" width="720">
209
241
 
210
242
  Use these values in an n8n OpenAI credential:
211
243
 
@@ -265,7 +297,8 @@ has the importable cURL version.
265
297
  - Relmio never edits, rebuilds, recreates, stops, or restarts the existing n8n
266
298
  container.
267
299
  - This is an unofficial community project, not affiliated with or endorsed by
268
- OpenAI, xAI, or n8n. Provider access, models, limits, and policies can change.
300
+ OpenAI, xAI, n8n, Hostinger, Telegram, or AppBuildersPH. Provider access,
301
+ models, limits, and policies can change.
269
302
  - Use it only where your account, subscription, provider terms, and applicable
270
303
  policies allow.
271
304
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "relmio",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
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/index.html CHANGED
@@ -55,108 +55,108 @@
55
55
  </div>
56
56
  </header>
57
57
 
58
- <div class="toast-stack" aria-label="Wizard notifications">
59
- <aside
60
- id="global-safety"
61
- class="toast safety-note"
62
- aria-label="Safety guarantee"
63
- >
64
- <strong>Sidecar-only guarantee</strong>
65
- <span>
66
- No n8n restart. No n8n rebuild. No public port. You approve the exact
67
- plan before anything is written.
68
- </span>
69
- <button
70
- class="toast-close"
71
- type="button"
72
- data-dismiss-toast="global-safety"
73
- aria-label="Dismiss safety guarantee"
74
- >
75
- <span aria-hidden="true">×</span>
76
- </button>
77
- </aside>
78
-
79
- <aside
80
- id="global-backup"
81
- class="toast safety-note backup-note"
82
- aria-label="Backup reminder"
83
- >
84
- <strong>Back up first</strong>
85
- <span>
86
- Export your n8n workflows before connecting. This wizard uses
87
- sidecar-only commands, but it still writes to your VPS.
88
- </span>
89
- <button
90
- class="toast-close"
91
- type="button"
92
- data-dismiss-toast="global-backup"
93
- aria-label="Dismiss backup reminder"
94
- >
95
- <span aria-hidden="true">×</span>
96
- </button>
97
- </aside>
58
+ <main id="main-content" class="shell" tabindex="-1">
59
+ <aside class="rail" aria-label="Setup progress and safety">
60
+ <section class="intro" aria-labelledby="page-title">
61
+ <h1 id="page-title">Connect n8n without changing n8n</h1>
62
+ <p class="lede">
63
+ This wizard installs one separate Docker sidecar. Your existing n8n
64
+ image, Compose file, container, and workflows stay untouched.
65
+ </p>
66
+ </section>
67
+
68
+ <nav class="steps" aria-label="Setup progress">
69
+ <ol>
70
+ <li data-step-marker="1" aria-current="step">
71
+ <span>1</span><em>Sign in</em>
72
+ </li>
73
+ <li data-step-marker="2"><span>2</span><em>VPS</em></li>
74
+ <li data-step-marker="3"><span>3</span><em>n8n</em></li>
75
+ <li data-step-marker="4"><span>4</span><em>Review</em></li>
76
+ <li data-step-marker="5"><span>5</span><em>Done</em></li>
77
+ </ol>
78
+ </nav>
79
+
80
+ <div class="toast-stack" aria-label="Wizard notifications">
81
+ <aside
82
+ id="global-safety"
83
+ class="toast safety-note"
84
+ aria-label="Safety guarantee"
85
+ >
86
+ <strong>Sidecar-only guarantee</strong>
87
+ <span>
88
+ No n8n restart. No n8n rebuild. No public port. You approve the
89
+ exact plan before anything is written.
90
+ </span>
91
+ <button
92
+ class="toast-close"
93
+ type="button"
94
+ data-dismiss-toast="global-safety"
95
+ aria-label="Dismiss safety guarantee"
96
+ >
97
+ <span aria-hidden="true">×</span>
98
+ </button>
99
+ </aside>
98
100
 
99
- <div
100
- id="global-message"
101
- class="toast message"
102
- role="status"
103
- aria-live="polite"
104
- >
105
- <span id="global-message-text">Checking your local sign-in…</span>
106
- <button
107
- class="toast-close"
108
- type="button"
109
- data-dismiss-toast="global-message"
110
- aria-label="Dismiss status message"
111
- >
112
- <span aria-hidden="true">×</span>
113
- </button>
114
- </div>
101
+ <aside
102
+ id="global-backup"
103
+ class="toast safety-note backup-note"
104
+ aria-label="Backup reminder"
105
+ >
106
+ <strong>Back up first</strong>
107
+ <span>
108
+ Export your n8n workflows before connecting. This wizard uses
109
+ sidecar-only commands, but it still writes to your VPS.
110
+ </span>
111
+ <button
112
+ class="toast-close"
113
+ type="button"
114
+ data-dismiss-toast="global-backup"
115
+ aria-label="Dismiss backup reminder"
116
+ >
117
+ <span aria-hidden="true">×</span>
118
+ </button>
119
+ </aside>
115
120
 
116
- <div
117
- id="global-error"
118
- class="toast error"
119
- role="alert"
120
- tabindex="-1"
121
- hidden
122
- >
123
- <span id="global-error-text"></span>
124
- <button
125
- class="toast-close"
126
- type="button"
127
- data-dismiss-toast="global-error"
128
- aria-label="Dismiss error"
129
- >
130
- <span aria-hidden="true">×</span>
131
- </button>
132
- </div>
133
- </div>
134
-
135
- <main id="main-content" class="shell">
136
- <section class="intro" aria-labelledby="page-title">
137
- <p class="eyebrow">Guided VPS setup</p>
138
- <h1 id="page-title">Connect n8n without changing n8n</h1>
139
- <p class="lede">
140
- This wizard installs one separate Docker sidecar. Your existing n8n
141
- image, Compose file, container, and workflows stay untouched.
142
- </p>
143
- </section>
121
+ <div
122
+ id="global-message"
123
+ class="toast message"
124
+ role="status"
125
+ aria-live="polite"
126
+ >
127
+ <span id="global-message-text">Checking your local sign-in…</span>
128
+ <button
129
+ class="toast-close"
130
+ type="button"
131
+ data-dismiss-toast="global-message"
132
+ aria-label="Dismiss status message"
133
+ >
134
+ <span aria-hidden="true">×</span>
135
+ </button>
136
+ </div>
144
137
 
145
- <nav class="steps" aria-label="Setup progress">
146
- <ol>
147
- <li data-step-marker="1" aria-current="step">
148
- <span>1</span><em>Sign in</em>
149
- </li>
150
- <li data-step-marker="2"><span>2</span><em>VPS</em></li>
151
- <li data-step-marker="3"><span>3</span><em>n8n</em></li>
152
- <li data-step-marker="4"><span>4</span><em>Review</em></li>
153
- <li data-step-marker="5"><span>5</span><em>Done</em></li>
154
- </ol>
155
- </nav>
138
+ <div
139
+ id="global-error"
140
+ class="toast error"
141
+ role="alert"
142
+ tabindex="-1"
143
+ hidden
144
+ >
145
+ <span id="global-error-text"></span>
146
+ <button
147
+ class="toast-close"
148
+ type="button"
149
+ data-dismiss-toast="global-error"
150
+ aria-label="Dismiss error"
151
+ >
152
+ <span aria-hidden="true">×</span>
153
+ </button>
154
+ </div>
155
+ </div>
156
+ </aside>
156
157
 
157
158
  <section class="panel" data-step="1" aria-labelledby="signin-title">
158
159
  <div class="panel-heading">
159
- <span class="step-kicker">Step 1 of 5</span>
160
160
  <h2 id="signin-title" tabindex="-1">Use your local ChatGPT sign-in</h2>
161
161
  <p>
162
162
  The OAuth credential stays on this computer until you approve its
@@ -198,7 +198,6 @@
198
198
 
199
199
  <section class="panel" data-step="2" aria-labelledby="vps-title" hidden>
200
200
  <div class="panel-heading">
201
- <span class="step-kicker">Step 2 of 5</span>
202
201
  <h2 id="vps-title" tabindex="-1">Connect to your VPS</h2>
203
202
  <p>
204
203
  Copy the address exactly from Hostinger. Your password is used only
@@ -294,7 +293,6 @@
294
293
 
295
294
  <section class="panel" data-step="3" aria-labelledby="n8n-title" hidden>
296
295
  <div class="panel-heading">
297
- <span class="step-kicker">Step 3 of 5</span>
298
296
  <h2 id="n8n-title" tabindex="-1">Choose the detected n8n</h2>
299
297
  <p>
300
298
  Discovery uses read-only Docker commands. It does not execute
@@ -332,7 +330,6 @@
332
330
 
333
331
  <section class="panel" data-step="4" aria-labelledby="review-title" hidden>
334
332
  <div class="panel-heading">
335
- <span class="step-kicker">Step 4 of 5</span>
336
333
  <h2 id="review-title" tabindex="-1">Review before installing</h2>
337
334
  <p>No existing n8n files or containers will be changed.</p>
338
335
  </div>
@@ -381,14 +378,15 @@
381
378
  </section>
382
379
 
383
380
  <section class="panel success-panel" data-step="5" aria-labelledby="done-title" hidden>
384
- <div class="success-mark" aria-hidden="true">✓</div>
385
- <div class="panel-heading">
386
- <span class="step-kicker">Step 5 of 5</span>
387
- <h2 id="done-title" tabindex="-1">The private bridge is ready</h2>
388
- <p>
389
- Copy the OpenAI credential values first, then use one of the node
390
- recipes below.
391
- </p>
381
+ <div class="success-heading">
382
+ <div class="success-mark" aria-hidden="true">✓</div>
383
+ <div class="panel-heading">
384
+ <h2 id="done-title" tabindex="-1">The private bridge is ready</h2>
385
+ <p>
386
+ Copy the OpenAI credential values first, then use one of the node
387
+ recipes below.
388
+ </p>
389
+ </div>
392
390
  </div>
393
391
 
394
392
  <h3>1. OpenAI credential</h3>
@@ -435,7 +433,7 @@
435
433
 
436
434
  <button
437
435
  id="copy-settings"
438
- class="button secondary"
436
+ class="button primary"
439
437
  type="button"
440
438
  data-copy-group="credential"
441
439
  data-copy-label="OpenAI credential settings"