relmio 0.3.0 → 0.4.0

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,57 @@ checks the registry separately after publication.
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## [0.4.0] - 2026-08-13
11
+
12
+ ### Added
13
+
14
+ - Add a local Docker wizard for private compatible clients through a
15
+ Platform-key-backed OpenAI-compatible `/v1` endpoint, plus a separate
16
+ official experimental Codex App Server target for trusted ChatGPT-sign-in
17
+ clients.
18
+ - Add compact Ko-fi support links to the hosted navigation and public package
19
+ guides.
20
+
21
+ ### Changed
22
+
23
+ - Make the local credential boundary explicit across the product: a Platform
24
+ API key powers compatible `/v1` requests, while ChatGPT sign-in powers only
25
+ the experimental Codex App Server protocol.
26
+
27
+ ### Fixed
28
+
29
+ - Keep the controlling terminal attached when the macOS/Linux installer is
30
+ piped through `sh`, so the Relmio wizard can open its interactive browser
31
+ setup flow.
32
+ - Install Homebrew dependencies in their required order during release-candidate
33
+ validation.
34
+
35
+ ### Security
36
+
37
+ - Bind local endpoints exclusively to loopback, require one-time Relmio
38
+ capabilities, pin every managed operation to an attested local Docker
39
+ socket, and isolate provider credentials in target-specific containers.
40
+ - Restrict the managed Codex endpoint to the ChatGPT login method.
41
+
42
+ ## [0.3.1] - 2026-08-10
43
+
44
+ ### Changed
45
+
46
+ - Make the browser wizard beginner-friendly with a modern fixed-viewport
47
+ layout: all five active steps fit without document scrolling on common
48
+ 1280x720 laptops, while progress and safety context stay persistent beside
49
+ the active task.
50
+ - Keep narrow-phone documents fixed to the viewport and contain unavoidable
51
+ long-form overflow within the active task panel instead of the page.
52
+ - Expand the GitHub and npm walkthroughs with a hosted-install selector and
53
+ packaged, sanitized screenshots that document the current n8n workflow.
54
+
55
+ ### Security
56
+
57
+ - Restore a clean hosted-web dependency audit by pinning patched `js-yaml`
58
+ and `nanoid` releases and using the compatible `vinext` release that does
59
+ not include the currently vulnerable `image-size` parser.
60
+
10
61
  ## [0.3.0] - 2026-08-05
11
62
 
12
63
  ### Added
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/brand/relmio-mark.svg" alt="Relmio logo" width="88">
3
3
  <h1>Relmio</h1>
4
- <p>Relay a supported ChatGPT/Codex sign-in to OpenAI-compatible clients, starting with self-hosted n8n.</p>
4
+ <p>Set up private n8n relays, Platform-key OpenAI-compatible local endpoints, and experimental Codex App Server sessions.</p>
5
5
  <p>
6
6
  <a href="https://github.com/Demonbane18/relmio">Full guide</a>
7
7
  &nbsp;·&nbsp;
@@ -11,32 +11,44 @@
11
11
  &nbsp;·&nbsp;
12
12
  <a href="https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md">Roadmap</a>
13
13
  </p>
14
+ <p>
15
+ <a href="https://ko-fi.com/paldogies"><img src="https://img.shields.io/badge/Ko--fi-support-ff5e5b.svg?logo=ko-fi&logoColor=white" alt="Support Relmio on Ko-fi"></a>
16
+ </p>
14
17
  </div>
15
18
 
16
19
  ## See it working first
17
20
 
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.
21
+ This documented example follows a tested n8n OpenAI credential through a
22
+ published Telegram-triggered workflow. It is a product-operation record, not
23
+ an endorsement, sponsorship, or affiliation by OpenAI, n8n, Hostinger,
24
+ Telegram, or AppBuildersPH.
25
+
26
+ <figure>
27
+ <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">
28
+ <figcaption>The n8n OpenAI credential connection test succeeded; the credential value itself is obscured.</figcaption>
29
+ </figure>
21
30
 
22
31
  <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>
32
+ <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">
33
+ <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>
25
34
  </figure>
26
35
 
27
- After Relmio completes the installation, Docker shows the existing n8n stack
28
- and the new private OAuth sidecar running together.
36
+ <figure>
37
+ <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">
38
+ <figcaption>The published Telegram-triggered n8n workflow completed successfully across its HTTP Request, Basic LLM Chain, and AI Agent branches.</figcaption>
39
+ </figure>
29
40
 
30
41
  <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>
42
+ <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">
43
+ <figcaption>Telegram received the HTTP Request, Basic LLM Chain, and AI Agent outputs sent by that workflow.</figcaption>
33
44
  </figure>
34
45
 
35
- Relmio is a local browser wizard that installs a private
46
+ Relmio is a local browser wizard with separate setup paths. Its existing
47
+ VPS/n8n path installs a private
36
48
  [openai-oauth](https://github.com/EvanZhouDev/openai-oauth) Docker sidecar
37
- beside an existing self-hosted n8n instance. It guides you through local
38
- ChatGPT/Codex sign-in, SSH host verification, read-only n8n discovery, an
39
- exact change plan, and the final n8n credential settings.
49
+ beside an existing self-hosted n8n instance. Its local Docker path can install
50
+ either an OpenAI-compatible gateway backed by a Platform API key or the
51
+ official Codex App Server backed by ChatGPT sign-in.
40
52
 
41
53
  The existing n8n image, Compose file, container, and workflows stay untouched.
42
54
 
@@ -52,7 +64,7 @@ adds the missing capability without changing n8n.
52
64
  Try the hosted browser demo at
53
65
  [relmio.vercel.app](https://relmio.vercel.app/). It is a separate
54
66
  request-bound ChatGPT experience; the npm package remains the local wizard for
55
- installing the private n8n sidecar.
67
+ the private VPS/n8n sidecar and the separate local Docker endpoint paths.
56
68
 
57
69
  > **Warning — Hosted chat requires the browser extension.** Install the
58
70
  > open-source [Sign in with ChatGPT extension for
@@ -80,10 +92,57 @@ tailored to the current self-hosted n8n and Hostinger VPS setup path.
80
92
  The hosted site and local wizard keep the original Relmio relay layout while
81
93
  adding a compact **System / Light / Dark** appearance control. System follows
82
94
  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.
95
+ On desktop, the local wizard keeps progress and sidecar-only safety notes in a
96
+ persistent rail beside the active task; its compact fixed-screen shell avoids
97
+ document scrolling on common laptop screens. On narrow phones, it switches to
98
+ a horizontal progress strip and keeps task scrolling inside the active panel.
99
+ The hosted site keeps the live GitHub star/version control visible.
100
+
101
+ ## Local Docker endpoints
102
+
103
+ Choose **Local endpoints** in the browser wizard to install one of these
104
+ Docker services on the same computer as your app:
105
+
106
+ This local Docker path supports macOS, Linux, and Linux under WSL2. Native
107
+ Windows is not supported in this release because its filesystem permissions do
108
+ not provide the owner-only POSIX mode guarantees used for local credentials.
109
+ The existing VPS/n8n wizard remains available from native Windows.
110
+
111
+ | Option | Local endpoint | Provider credential | Client type |
112
+ |---|---|---|---|
113
+ | **OpenAI API: compatible clients** | `http://127.0.0.1:12435/v1` by default | Server-side OpenAI Platform API key only | Private local app, SDK, or same-owner development web app |
114
+ | **Codex with ChatGPT: agent clients** | `ws://127.0.0.1:14500` by default | ChatGPT sign-in through Codex | Trusted native Codex/App Server client |
115
+
116
+ The OpenAI-compatible `/v1` endpoint is powered only by a Platform API key,
117
+ which the wizard seeds over stdin into a private, labeled Docker volume; it
118
+ does not create a host key file. Your app uses a
119
+ separate Relmio capability that the wizard displays once.
120
+ The bearer remains valid until it is rotated. Browser requests
121
+ must come from an exact origin entered during setup; wildcards are not allowed,
122
+ and the capability must never be embedded in a public frontend bundle. Platform
123
+ requests use that API project's billing, credits, limits, and permissions, not
124
+ a ChatGPT subscription.
125
+
126
+ ChatGPT sign-in powers only the official experimental Codex App Server JSON-RPC
127
+ protocol. It does not expose `/v1`, and Relmio never translates a ChatGPT
128
+ OAuth/session token into a general API credential. OpenAI documents the WebSocket transport as
129
+ experimental and unsupported for production, and it rejects browser-origin
130
+ connections. Use it only with a trusted native client owned by the same person.
131
+ Its capability is high-trust because it can operate the signed-in
132
+ Codex session and files inside the isolated container workspace.
133
+
134
+ Both services bind exactly to `127.0.0.1`, require the generated capability,
135
+ and mount no host directory or Docker socket. The Codex service gets private
136
+ named credential and workspace volumes. This local path does not connect to a
137
+ VPS or modify n8n.
138
+
139
+ Read the complete [Local Docker endpoints
140
+ guide](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md)
141
+ before installing. It includes the wizard steps, client settings, exact-origin
142
+ rules, billing boundary, container isolation, and official OpenAI documentation
143
+ links. The design is documentation-backed engineering guidance, not legal
144
+ advice or an OpenAI approval. Codex for Open Source membership is not treated
145
+ as permission to broaden credential scope or bypass another agreement.
87
146
 
88
147
  ## Quick start
89
148
 
@@ -149,6 +208,10 @@ a browser.
149
208
 
150
209
  ### Requirements
151
210
 
211
+ These requirements are for the VPS/n8n path. For a local Docker endpoint, see
212
+ the [local endpoint
213
+ requirements](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md#requirements).
214
+
152
215
  - On macOS/Linux/WSL/Git Bash: `curl`, `awk`, `tar`, and either `sha256sum` or
153
216
  `shasum`; Git Bash also needs `unzip`
154
217
  - On native Windows: Command Prompt uses its built-in `curl`, `certutil`, and
@@ -169,43 +232,68 @@ n8n AI node or HTTP Request
169
232
  -> upstream OpenAI service
170
233
  ```
171
234
 
172
- Relmio currently provides tested setup instructions for:
235
+ Relmio's existing VPS/n8n path provides tested setup instructions for:
173
236
 
174
237
  - OpenAI Chat Model
175
238
  - AI Agent
176
239
  - Basic LLM Chain
177
240
  - HTTP Request
178
241
 
179
- The broader direction is to support local chatbots, custom applications,
180
- OpenAI-compatible clients, and provider adapters without tying the public
181
- product name to n8n. SuperGrok/xAI OAuth is a gated feasibility item on the
242
+ The local endpoint path described above now supports compatible private apps
243
+ through a Platform-backed gateway and trusted native clients through Codex App
244
+ Server. The broader direction is to add providers and client adapters without
245
+ weakening their authentication boundaries or tying the public product name to
246
+ n8n. SuperGrok/xAI OAuth is a gated feasibility item on the
182
247
  [provider roadmap](https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md);
183
248
  it is not currently advertised as supported.
184
249
 
185
250
  ## Visual walkthrough
186
251
 
187
- All images below are sanitized previews with reserved addresses, fake server
188
- data, and no real credential or session information.
252
+ These current product screenshots use sanitized sample values wherever a setup
253
+ field might otherwise identify an environment. The VPS identity screen shows a
254
+ reserved sample address and sample SSH fingerprint; none of the images includes
255
+ an OAuth token, password, private key, or live wizard session URL.
256
+
257
+ ### 1. Choose a hosted installation method
258
+
259
+ <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">
260
+
261
+ The hosted page starts with the installation-method selector. Run the selected
262
+ command locally, not on the VPS.
263
+
264
+ ### 2. Complete the local ChatGPT/Codex sign-in
265
+
266
+ <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">
267
+
268
+ This image shows a sanitized preview-mode sample credential state; it does not
269
+ confirm that a real local ChatGPT login was saved. During a real fresh login,
270
+ the browser confirmation states that the credentials were saved locally.
271
+
272
+ ### 3. Verify the VPS identity
189
273
 
190
- ### 1. Confirm the local ChatGPT/Codex sign-in
274
+ <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
275
 
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">
276
+ Confirm the SSH host fingerprint before authentication. The screenshot uses the
277
+ reserved sample host `vps.example.test`, a sample fingerprint, and a blank
278
+ password field.
193
279
 
194
- ### 2. Verify the VPS identity
280
+ ### 4. Choose the detected n8n container and network
195
281
 
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">
282
+ <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
283
 
198
- ### 3. Choose the detected n8n container and network
284
+ Discovery is read-only; choose the existing n8n container and shared Docker
285
+ network.
199
286
 
200
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Sanitized n8n discovery screen" width="720">
287
+ ### 5. Review the exact sidecar-only plan
201
288
 
202
- ### 4. Review the exact sidecar-only plan
289
+ <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
290
 
204
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Sanitized installation plan screen" width="720">
291
+ The plan names the allowed sidecar work and explicitly excludes edits or
292
+ restarts of n8n, a published host port, and a Traefik route.
205
293
 
206
- ### 5. Copy the verified n8n settings
294
+ ### 6. Copy the verified n8n settings
207
295
 
208
- <img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Sanitized verified bridge screen" width="720">
296
+ <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
297
 
210
298
  Use these values in an n8n OpenAI credential:
211
299
 
@@ -265,7 +353,8 @@ has the importable cURL version.
265
353
  - Relmio never edits, rebuilds, recreates, stops, or restarts the existing n8n
266
354
  container.
267
355
  - 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.
356
+ OpenAI, xAI, n8n, Hostinger, Telegram, or AppBuildersPH. Provider access,
357
+ models, limits, and policies can change.
269
358
  - Use it only where your account, subscription, provider terms, and applicable
270
359
  policies allow.
271
360
 
@@ -315,6 +404,7 @@ OpenAI may change or disable the underlying services at any time.
315
404
  ## Documentation
316
405
 
317
406
  - [Complete GitHub README and manual fallback](https://github.com/Demonbane18/relmio#readme)
407
+ - [Local Docker endpoints](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md)
318
408
  - [Configure n8n AI and HTTP nodes](https://github.com/Demonbane18/relmio/blob/main/docs/n8n-configuration.md)
319
409
  - [Troubleshooting](https://github.com/Demonbane18/relmio/blob/main/docs/troubleshooting.md)
320
410
  - [Security and limitations](https://github.com/Demonbane18/relmio/blob/main/docs/security.md)
@@ -17,6 +17,52 @@ flowchart LR
17
17
  S --> C["OpenAI service used by<br>the upstream helper"]
18
18
  ```
19
19
 
20
+ ## Local endpoint architecture
21
+
22
+ The local installer is a separate path in the same browser wizard. It uses the
23
+ local Docker Engine and never opens SSH, writes to a VPS, or changes the
24
+ existing n8n sidecar project.
25
+
26
+ ```mermaid
27
+ flowchart LR
28
+ B["Local browser<br>127.0.0.1"] --> W["Local Node wizard"]
29
+ W --> D["Local Docker Engine"]
30
+ D --> G["OpenAI-compatible gateway<br>127.0.0.1:12435/v1"]
31
+ D --> A["Codex App Server<br>127.0.0.1:14500"]
32
+ G -->|"Platform API key"| P["OpenAI Platform API"]
33
+ A -->|"Official Codex sign-in"| C["ChatGPT/Codex service"]
34
+ ```
35
+
36
+ The two services are intentionally not interchangeable:
37
+
38
+ | Target | Wire protocol | Upstream credential |
39
+ |---|---|---|
40
+ | `openai-api` | OpenAI-compatible HTTP `/v1` | OpenAI Platform API key |
41
+ | `codex-chatgpt` | Official Codex App Server JSON-RPC | ChatGPT sign-in managed by Codex |
42
+
43
+ Relmio never adapts a ChatGPT/Codex credential into the local `/v1` gateway.
44
+ The OpenAI gateway replaces the caller's Relmio capability with the
45
+ protected Platform key only at the upstream boundary. The Codex service keeps
46
+ the native initialization, thread, turn, approval, and event protocol.
47
+
48
+ Both projects publish exactly one literal `127.0.0.1` binding and require a
49
+ generated bearer capability. Their managed roots are
50
+ `~/.relmio/local/openai-api` and `~/.relmio/local/codex-chatgpt`. The Codex
51
+ credential and workspace use private named Docker volumes; no host directory
52
+ or Docker socket is mounted. See [Local Docker endpoints](local-endpoints.md)
53
+ for setup and trust limitations.
54
+
55
+ Before installation, Relmio resolves the selected Docker context to a local
56
+ Unix socket and pins that exact socket on every later Docker command. Remote
57
+ Docker contexts and Docker environment overrides are rejected. Each endpoint
58
+ gets a random installation ID, a unique Compose project name, and matching
59
+ ownership labels; existing resources must attest to that identity before an
60
+ update or recovery action can run.
61
+
62
+ The local endpoint installer supports macOS, Linux, and Linux under WSL2.
63
+ Native Windows is rejected before filesystem or Docker mutation because this
64
+ release relies on owner-only POSIX modes for managed credentials.
65
+
20
66
  ## Why this integration is possible
21
67
 
22
68
  The design combines four existing interfaces rather than changing n8n:
@@ -114,6 +160,9 @@ sidecar authenticates upstream with the mounted OAuth file.
114
160
  - [Docker Compose networking](https://docs.docker.com/compose/how-tos/networking/)
115
161
  - [Docker Compose `expose`](https://docs.docker.com/reference/compose-file/services/#expose)
116
162
  - [Docker port publishing](https://docs.docker.com/engine/network/port-publishing/)
163
+ - [OpenAI API authentication](https://developers.openai.com/api/reference/overview#authentication)
164
+ - [Codex authentication](https://learn.chatgpt.com/docs/auth)
165
+ - [Codex App Server](https://learn.chatgpt.com/docs/app-server)
117
166
 
118
167
  ## Failure behavior
119
168
 
@@ -125,3 +174,11 @@ sidecar authenticates upstream with the mounted OAuth file.
125
174
  - A failed build or start does not trigger an n8n action.
126
175
  - An unexpected host-port mapping causes verification to fail.
127
176
  - The SSH connection closes after installation or when the wizard stops.
177
+ - A local port collision blocks a new local install or port change.
178
+ - An existing unmanaged or symlinked local path is never overwritten.
179
+ - A local service fails verification unless Docker reports the exact planned
180
+ `127.0.0.1` publication.
181
+ - A remote Docker context, inherited Docker selector, foreign Compose resource,
182
+ or mismatched managed identity blocks local mutation.
183
+ - A Codex login failure returns a sanitized status without returning App
184
+ Server output or ChatGPT tokens.