relmio 0.5.0 → 0.7.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 +50 -0
- package/README.md +42 -414
- package/docs/architecture.md +21 -9
- package/docs/faq.md +45 -0
- package/docs/getting-started.md +38 -0
- package/docs/local-endpoints-spec.md +128 -13
- package/docs/local-endpoints.md +129 -26
- package/docs/reference.md +77 -0
- package/docs/security.md +74 -15
- package/docs/troubleshooting.md +33 -0
- package/docs/vps-and-n8n.md +30 -0
- package/package.json +1 -1
- package/src/domain/local-endpoints.js +183 -13
- package/src/gateway/codex-chat.js +754 -0
- package/src/services/codex-login.js +11 -3
- package/src/services/local-chat-test.js +361 -0
- package/src/services/local-installer.js +94 -14
- package/src/ui/local.css +115 -1
- package/src/ui/local.html +119 -8
- package/src/ui/local.js +362 -38
- package/src/web/server.js +134 -4
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,56 @@ checks the registry separately after publication.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## [0.7.0] - 2026-08-16
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add an encrypted in-wizard tester for the experimental Chat Adapter, plus
|
|
15
|
+
safe sample Chat Adapter and Codex App Server commands for local testing.
|
|
16
|
+
- Add generated hosted guides for getting started, local endpoints, VPS and
|
|
17
|
+
n8n, troubleshooting, FAQ, security, and reference information.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Synchronize concise root and npm READMEs around product, installation,
|
|
22
|
+
security, and common-problem overviews that link to hosted guides.
|
|
23
|
+
- Fact-check ChatGPT/Codex token-refresh guidance across documentation: tokens
|
|
24
|
+
refresh during active use, the official documentation specifies no fixed
|
|
25
|
+
10-day lifetime, and the provider credential remains distinct from Relmio's
|
|
26
|
+
rotatable client capability.
|
|
27
|
+
|
|
28
|
+
### Security
|
|
29
|
+
|
|
30
|
+
- Limit tester destinations to literal loopback HTTP addresses, retain private
|
|
31
|
+
keys only in memory for a bounded lifetime, encrypt entered credentials
|
|
32
|
+
before they cross the browser boundary, require POST after a completed Chat
|
|
33
|
+
Adapter install, keep sample bearer values out of process arguments, and
|
|
34
|
+
erase or abort sessions when forgotten, rotated, or shut down.
|
|
35
|
+
|
|
36
|
+
## [0.6.0] - 2026-08-15
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- Add an experimental loopback-only Codex Chat Adapter for trusted local
|
|
41
|
+
backends and development servers, with bearer authentication, multi-turn
|
|
42
|
+
conversation IDs, strict resource bounds, and a small Relmio-specific
|
|
43
|
+
`POST /chat` contract.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- Make Codex device sign-in target-aware so the experimental Relmio `/chat`
|
|
48
|
+
adapter and native App Server retain isolated, persistent ChatGPT credentials;
|
|
49
|
+
a Platform API key powers neither target and remains reserved for the generic
|
|
50
|
+
OpenAI-compatible `/v1` endpoint.
|
|
51
|
+
|
|
52
|
+
### Security
|
|
53
|
+
|
|
54
|
+
- Reject browser-origin adapter requests, keep the adapter separate from
|
|
55
|
+
Platform-key-backed generic OpenAI-compatible `/v1` semantics, explicitly deny
|
|
56
|
+
model turns access to the private Codex credential store, run chat turns
|
|
57
|
+
read-only without network access, and preserve loopback-only publication plus
|
|
58
|
+
credential rotation.
|
|
59
|
+
|
|
10
60
|
## [0.5.0] - 2026-08-15
|
|
11
61
|
|
|
12
62
|
### Added
|
package/README.md
CHANGED
|
@@ -1,433 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/brand/relmio-mark.svg" alt="Relmio logo" width="88">
|
|
3
|
-
<h1>Relmio</h1>
|
|
4
|
-
<p>Set up private n8n relays, Platform-key OpenAI-compatible local endpoints, and experimental Codex App Server sessions.</p>
|
|
5
|
-
<p>
|
|
6
|
-
<a href="https://github.com/Demonbane18/relmio">Full guide</a>
|
|
7
|
-
·
|
|
8
|
-
<a href="https://relmio.vercel.app/">Hosted ChatGPT site</a>
|
|
9
|
-
·
|
|
10
|
-
<a href="https://github.com/Demonbane18/relmio/issues/new">Report an issue</a>
|
|
11
|
-
·
|
|
12
|
-
<a href="https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md">Roadmap</a>
|
|
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>
|
|
17
|
-
</div>
|
|
1
|
+
# Relmio
|
|
18
2
|
|
|
19
|
-
|
|
3
|
+
This package starts Relmio's local setup wizard for a private n8n sidecar or a
|
|
4
|
+
loopback-only local endpoint. It supports Node.js 22 or newer.
|
|
20
5
|
|
|
21
|
-
|
|
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>
|
|
30
|
-
|
|
31
|
-
<figure>
|
|
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>
|
|
34
|
-
</figure>
|
|
35
|
-
|
|
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>
|
|
40
|
-
|
|
41
|
-
<figure>
|
|
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>
|
|
44
|
-
</figure>
|
|
45
|
-
|
|
46
|
-
Relmio is a local browser wizard with separate setup paths. Its existing
|
|
47
|
-
VPS/n8n path installs a private
|
|
48
|
-
[openai-oauth](https://github.com/EvanZhouDev/openai-oauth) Docker sidecar
|
|
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.
|
|
52
|
-
|
|
53
|
-
The existing n8n image, Compose file, container, and workflows stay untouched.
|
|
54
|
-
|
|
55
|
-
A sidecar is a small helper program that runs beside a larger program. Relmio's
|
|
56
|
-
private sidecar adds ChatGPT/Codex sign-in and request translation while your
|
|
57
|
-
existing n8n stays unchanged. This follows the sidecar pattern described in
|
|
58
|
-
[Justin Rice's beginner-friendly overview](https://medium.com/@justinricedev/what-is-a-software-sidecar-8f89feff09f9).
|
|
59
|
-
|
|
60
|
-
Think of it like a motorcycle gaining a sidecar: together they become a
|
|
61
|
-
tricycle with extra seats. n8n is the motorcycle; Relmio is the sidecar that
|
|
62
|
-
adds the missing capability without changing n8n.
|
|
63
|
-
|
|
64
|
-
Try the hosted browser demo at
|
|
65
|
-
[relmio.vercel.app](https://relmio.vercel.app/). It is a separate
|
|
66
|
-
request-bound ChatGPT experience; the npm package remains the local wizard for
|
|
67
|
-
the private VPS/n8n sidecar and the separate local Docker endpoint paths.
|
|
68
|
-
|
|
69
|
-
> **Warning — Hosted chat requires the browser extension.** Install the
|
|
70
|
-
> open-source [Sign in with ChatGPT extension for
|
|
71
|
-
> Chrome](https://chromewebstore.google.com/detail/sign-in-with-chatgpt/odbgboachaefbbbdiffcefhpkekhfcna)
|
|
72
|
-
> or [Firefox](https://addons.mozilla.org/firefox/addon/sign-in-with-chatgpt/)
|
|
73
|
-
> before connecting. If the hosted chat stays disconnected, confirm the
|
|
74
|
-
> extension is installed and enabled, reload the page, and select **Connect
|
|
75
|
-
> ChatGPT** again.
|
|
76
|
-
|
|
77
|
-
> The local npm wizard uses its own `localhost:1455` callback instead. If an
|
|
78
|
-
> OAuth extension captures that callback, temporarily disable it during local sign-in,
|
|
79
|
-
> complete the wizard sign-in, and then re-enable it.
|
|
80
|
-
|
|
81
|
-
While a fresh local login is pending, **Stop sign-in** terminates the helper
|
|
82
|
-
Relmio started before allowing another attempt. Results from older tabs are
|
|
83
|
-
rejected after a replacement starts. If cleanup cannot be confirmed, retry
|
|
84
|
-
remains disabled; close the wizard and OAuth helper, then restart Relmio.
|
|
85
|
-
|
|
86
|
-
<figure>
|
|
87
|
-
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/hosted-chat-connected.png" alt="Relmio hosted chat showing a connected ChatGPT session and a ready prompt field" width="720">
|
|
88
|
-
<figcaption>Successful hosted-chat state: the browser extension completed the OAuth handoff and Relmio shows the ChatGPT session as connected.</figcaption>
|
|
89
|
-
</figure>
|
|
90
|
-
|
|
91
|
-
Use the site's [Install wizard](https://relmio.vercel.app/install) page for a
|
|
92
|
-
clickable macOS/Linux, Homebrew, PowerShell, Command Prompt, and NPX command switcher
|
|
93
|
-
tailored to the current self-hosted n8n and Hostinger VPS setup path.
|
|
94
|
-
|
|
95
|
-
### Browser interface and theme modes
|
|
96
|
-
|
|
97
|
-
The hosted site and local wizard keep the original Relmio relay layout while
|
|
98
|
-
adding a compact **System / Light / Dark** appearance control. System follows
|
|
99
|
-
the computer's preference; Light and Dark are remembered on that browser only.
|
|
100
|
-
On desktop, the local wizard keeps progress and sidecar-only safety notes in a
|
|
101
|
-
persistent rail beside the active task; its compact fixed-screen shell avoids
|
|
102
|
-
document scrolling on common laptop screens. On narrow phones, it switches to
|
|
103
|
-
a horizontal progress strip and keeps task scrolling inside the active panel.
|
|
104
|
-
Both the hosted site and local wizard keep Ko-fi support, GitHub stars, and the
|
|
105
|
-
current Relmio version visible beside the appearance control.
|
|
106
|
-
|
|
107
|
-
## Local Docker endpoints
|
|
108
|
-
|
|
109
|
-
Choose **Local endpoints** in the browser wizard to install one of these
|
|
110
|
-
Docker services on the same computer as your app:
|
|
111
|
-
|
|
112
|
-
This local Docker path supports macOS, Linux, and Linux under WSL2. Native
|
|
113
|
-
Windows is not supported in this release because its filesystem permissions do
|
|
114
|
-
not provide the owner-only POSIX mode guarantees used for local credentials.
|
|
115
|
-
The existing VPS/n8n wizard remains available from native Windows.
|
|
116
|
-
|
|
117
|
-
| Option | Local endpoint | Provider credential | Client type |
|
|
118
|
-
|---|---|---|---|
|
|
119
|
-
| **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 |
|
|
120
|
-
| **Codex with ChatGPT: agent clients** | `ws://127.0.0.1:14500` by default | ChatGPT sign-in through Codex | Trusted native Codex/App Server client |
|
|
121
|
-
|
|
122
|
-
The OpenAI-compatible `/v1` endpoint is powered only by a Platform API key,
|
|
123
|
-
which the wizard seeds over stdin into a private, labeled Docker volume; it
|
|
124
|
-
does not create a host key file. Your app uses a
|
|
125
|
-
separate Relmio capability that the wizard displays once.
|
|
126
|
-
The bearer remains valid until it is rotated. After installation, use
|
|
127
|
-
**Rotate client credential** on the Ready screen to replace only that local
|
|
128
|
-
capability. Relmio shows the new one-time credential before activation, verifies
|
|
129
|
-
the replacement endpoint, and preserves the upstream Platform API key or Codex
|
|
130
|
-
credential/workspace volumes. If replacement cannot be verified, Relmio attempts
|
|
131
|
-
to restore the previous verifier and re-attest service readiness. It does not
|
|
132
|
-
retain the previous raw client credential to replay it during rollback. If
|
|
133
|
-
rollback cannot be confirmed, it targets only the exact managed service for
|
|
134
|
-
shutdown and reports whether that stopped state could be verified. Browser requests
|
|
135
|
-
must come from an exact origin entered during setup; wildcards are not allowed,
|
|
136
|
-
and the capability must never be embedded in a public frontend bundle. Platform
|
|
137
|
-
requests use that API project's billing, credits, limits, and permissions, not
|
|
138
|
-
a ChatGPT subscription.
|
|
139
|
-
|
|
140
|
-
ChatGPT sign-in powers only the official experimental Codex App Server JSON-RPC
|
|
141
|
-
protocol. It does not expose `/v1`, and Relmio never translates a ChatGPT
|
|
142
|
-
OAuth/session token into a general API credential. OpenAI documents the WebSocket transport as
|
|
143
|
-
experimental and unsupported for production, and it rejects browser-origin
|
|
144
|
-
connections. Use it only with a trusted native client owned by the same person.
|
|
145
|
-
Its capability is high-trust because it can operate the signed-in
|
|
146
|
-
Codex session and files inside the isolated container workspace.
|
|
147
|
-
|
|
148
|
-
Both services bind exactly to `127.0.0.1`, require the generated capability,
|
|
149
|
-
and mount no host directory or Docker socket. The Codex service gets private
|
|
150
|
-
named credential and workspace volumes. This local path does not connect to a
|
|
151
|
-
VPS or modify n8n.
|
|
152
|
-
|
|
153
|
-
Read the complete [Local Docker endpoints
|
|
154
|
-
guide](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md)
|
|
155
|
-
before installing. It includes the wizard steps, client settings, exact-origin
|
|
156
|
-
rules, billing boundary, container isolation, and official OpenAI documentation
|
|
157
|
-
links. The design is documentation-backed engineering guidance, not legal
|
|
158
|
-
advice or an OpenAI approval. Codex for Open Source membership is not treated
|
|
159
|
-
as permission to broaden credential scope or bypass another agreement.
|
|
160
|
-
|
|
161
|
-
## Quick start
|
|
162
|
-
|
|
163
|
-
Choose the terminal already on your own computer. Do not run these commands on
|
|
164
|
-
the VPS.
|
|
165
|
-
|
|
166
|
-
### macOS, Linux, WSL, or Git Bash
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
curl -fsSL https://relmio.vercel.app/install.sh | sh
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Homebrew (macOS or Linux)
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
brew tap Demonbane18/relmio && brew install relmio
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
### Windows PowerShell
|
|
179
|
-
|
|
180
|
-
```powershell
|
|
181
|
-
irm https://relmio.vercel.app/install.ps1 | iex
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Windows Command Prompt
|
|
185
|
-
|
|
186
|
-
```bat
|
|
187
|
-
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"
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
No Node.js or Git Bash installation is required first. The
|
|
191
|
-
[POSIX](https://github.com/Demonbane18/relmio/blob/main/web/public/install.sh)
|
|
192
|
-
and [Windows PowerShell](https://github.com/Demonbane18/relmio/blob/main/web/public/install.ps1)
|
|
193
|
-
bootstraps, plus the PowerShell-free [Command Prompt](https://github.com/Demonbane18/relmio/blob/main/web/public/install.cmd)
|
|
194
|
-
bootstrap, reuse Node.js 22 or newer when available. Otherwise they show
|
|
195
|
-
staged **Please wait** messages while they download the matching current
|
|
196
|
-
official Node.js 22 runtime to a private temporary directory, verify its
|
|
197
|
-
SHA-256 checksum, run Relmio with npm lifecycle scripts disabled, and remove
|
|
198
|
-
the temporary runtime when the wizard closes. The Command Prompt path runs as
|
|
199
|
-
the current user and does not request administrator access or change Windows
|
|
200
|
-
security policy.
|
|
201
|
-
|
|
202
|
-
Homebrew is available from the public `Demonbane18/relmio` tap. The WinGet
|
|
203
|
-
command stays hidden until Microsoft accepts its catalog pull request and the
|
|
204
|
-
catalog updates. Until then, use Homebrew or a direct installer above.
|
|
205
|
-
|
|
206
|
-
Users who already have Node.js 22 or newer can run the npm package directly:
|
|
207
|
-
|
|
208
|
-
### NPX (requires Node.js 22+)
|
|
6
|
+
## Quick install
|
|
209
7
|
|
|
210
8
|
```bash
|
|
211
9
|
npx --yes --ignore-scripts relmio@latest
|
|
212
10
|
```
|
|
213
11
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
URL printed by the current terminal instead of refreshing the stripped page.
|
|
12
|
+
The wizard opens a private `127.0.0.1` page, verifies Docker, and requires a
|
|
13
|
+
final confirmation before it writes files or deploys a VPS sidecar.
|
|
217
14
|
|
|
218
|
-
|
|
219
|
-
terminal to open it again. The printed `Local wizard:` URL remains the fallback
|
|
220
|
-
for a terminal that cannot accept input or when the launcher still cannot open
|
|
221
|
-
a browser.
|
|
15
|
+
## What it can install
|
|
222
16
|
|
|
223
|
-
|
|
17
|
+
| Option | Contract | Credential boundary |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Local OpenAI gateway | OpenAI-compatible `/v1` | Your OpenAI Platform API key |
|
|
20
|
+
| Codex App Server | Experimental JSON-RPC/WebSocket | ChatGPT sign-in and a high-trust local capability |
|
|
21
|
+
| Codex Chat Adapter | Experimental `POST /chat` | ChatGPT sign-in and a bearer for trusted local backends |
|
|
22
|
+
| n8n sidecar | Private Docker-network `/v1` bridge | A local ChatGPT sign-in file, never a host port |
|
|
224
23
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
requirements](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md#requirements).
|
|
228
|
-
|
|
229
|
-
- On macOS/Linux/WSL/Git Bash: `curl`, `awk`, `tar`, and either `sha256sum` or
|
|
230
|
-
`shasum`; Git Bash also needs `unzip`
|
|
231
|
-
- On native Windows: Command Prompt uses its built-in `curl`, `certutil`, and
|
|
232
|
-
`tar` tools; Windows PowerShell 5.1 or PowerShell 7 remains an alternative
|
|
233
|
-
bootstrap
|
|
234
|
-
- A browser and an eligible ChatGPT/Codex account
|
|
235
|
-
- A self-hosted n8n Docker deployment on a VPS
|
|
236
|
-
- Docker Compose v2, SSH access, and a Docker network shared with n8n
|
|
237
|
-
|
|
238
|
-
Back up your n8n workflows before granting any tool VPS access.
|
|
239
|
-
|
|
240
|
-
## What you get
|
|
241
|
-
|
|
242
|
-
```text
|
|
243
|
-
n8n AI node or HTTP Request
|
|
244
|
-
-> private Docker endpoint: http://n8n-openai-oauth:10531/v1
|
|
245
|
-
-> protected ChatGPT/Codex OAuth session
|
|
246
|
-
-> upstream OpenAI service
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
Relmio's existing VPS/n8n path provides tested setup instructions for:
|
|
250
|
-
|
|
251
|
-
- OpenAI Chat Model
|
|
252
|
-
- AI Agent
|
|
253
|
-
- Basic LLM Chain
|
|
254
|
-
- HTTP Request
|
|
255
|
-
|
|
256
|
-
The local endpoint path described above now supports compatible private apps
|
|
257
|
-
through a Platform-backed gateway and trusted native clients through Codex App
|
|
258
|
-
Server. The broader direction is to add providers and client adapters without
|
|
259
|
-
weakening their authentication boundaries or tying the public product name to
|
|
260
|
-
n8n. SuperGrok/xAI OAuth is a gated feasibility item on the
|
|
261
|
-
[provider roadmap](https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md);
|
|
262
|
-
it is not currently advertised as supported.
|
|
263
|
-
|
|
264
|
-
## Visual walkthrough
|
|
265
|
-
|
|
266
|
-
These current product screenshots use sanitized sample values wherever a setup
|
|
267
|
-
field might otherwise identify an environment. The VPS identity screen shows a
|
|
268
|
-
reserved sample address and sample SSH fingerprint; none of the images includes
|
|
269
|
-
an OAuth token, password, private key, or live wizard session URL.
|
|
270
|
-
|
|
271
|
-
### 1. Choose a hosted installation method
|
|
272
|
-
|
|
273
|
-
<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">
|
|
274
|
-
|
|
275
|
-
The hosted page starts with the installation-method selector. Run the selected
|
|
276
|
-
command locally, not on the VPS.
|
|
277
|
-
|
|
278
|
-
### 2. Complete the local ChatGPT/Codex sign-in
|
|
279
|
-
|
|
280
|
-
<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">
|
|
281
|
-
|
|
282
|
-
This image shows a sanitized preview-mode sample credential state; it does not
|
|
283
|
-
confirm that a real local ChatGPT login was saved. During a real fresh login,
|
|
284
|
-
the browser confirmation states that the credentials were saved locally.
|
|
285
|
-
|
|
286
|
-
### 3. Verify the VPS identity
|
|
287
|
-
|
|
288
|
-
<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">
|
|
289
|
-
|
|
290
|
-
Confirm the SSH host fingerprint before authentication. The screenshot uses the
|
|
291
|
-
reserved sample host `vps.example.test`, a sample fingerprint, and a blank
|
|
292
|
-
password field.
|
|
293
|
-
|
|
294
|
-
### 4. Choose the detected n8n container and network
|
|
295
|
-
|
|
296
|
-
<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">
|
|
297
|
-
|
|
298
|
-
Discovery is read-only; choose the existing n8n container and shared Docker
|
|
24
|
+
ChatGPT sign-in does not become an OpenAI Platform API key. Codex transports
|
|
25
|
+
are not generic `/v1` services and should never be exposed on a LAN or public
|
|
299
26
|
network.
|
|
300
27
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
<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">
|
|
304
|
-
|
|
305
|
-
The plan names the allowed sidecar work and explicitly excludes edits or
|
|
306
|
-
restarts of n8n, a published host port, and a Traefik route.
|
|
307
|
-
|
|
308
|
-
### 6. Copy the verified n8n settings
|
|
309
|
-
|
|
310
|
-
<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">
|
|
311
|
-
|
|
312
|
-
Use these values in an n8n OpenAI credential:
|
|
313
|
-
|
|
314
|
-
```text
|
|
315
|
-
API Key: local-only
|
|
316
|
-
Base URL: http://n8n-openai-oauth:10531/v1
|
|
317
|
-
Organization ID: leave empty
|
|
318
|
-
Add Custom Header: Off
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
The `local-only` value is a placeholder required by n8n. It is not an OpenAI
|
|
322
|
-
Platform API key.
|
|
323
|
-
|
|
324
|
-
For an n8n **HTTP Request** node, use **Generic Credential Type** → **Bearer
|
|
325
|
-
Auth**, name the credential `openai-oauth`, and enter `local-only` as the
|
|
326
|
-
bearer token. Enable **Send Headers** with `Content-Type: application/json`,
|
|
327
|
-
then enable **Send Body** → **JSON** → **Using JSON** and paste:
|
|
328
|
-
|
|
329
|
-
```json
|
|
330
|
-
{
|
|
331
|
-
"model": "gpt-5.6-sol",
|
|
332
|
-
"messages": [
|
|
333
|
-
{
|
|
334
|
-
"role": "user",
|
|
335
|
-
"content": "What is a robot?"
|
|
336
|
-
}
|
|
337
|
-
],
|
|
338
|
-
"response_format": {
|
|
339
|
-
"type": "json_schema",
|
|
340
|
-
"json_schema": {
|
|
341
|
-
"name": "answer",
|
|
342
|
-
"schema": {
|
|
343
|
-
"type": "object",
|
|
344
|
-
"properties": {
|
|
345
|
-
"content": { "type": "string" }
|
|
346
|
-
},
|
|
347
|
-
"required": ["content"],
|
|
348
|
-
"additionalProperties": false
|
|
349
|
-
},
|
|
350
|
-
"strict": true
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
Use `POST http://n8n-openai-oauth:10531/v1/chat/completions` as the URL. The
|
|
357
|
-
local wizard's **Copy HTTP request recipe** action supplies the same fields.
|
|
358
|
-
Replace the model only if the wizard reports a different ID. The full guide
|
|
359
|
-
has the importable cURL version.
|
|
360
|
-
|
|
361
|
-
## Important boundaries
|
|
362
|
-
|
|
363
|
-
- Relmio does not create an OpenAI Platform API key.
|
|
364
|
-
- The OAuth file is a password-equivalent secret; never commit or share it.
|
|
365
|
-
- The sidecar endpoint stays inside the Docker network. Port `10531` must not
|
|
366
|
-
be published on the VPS host.
|
|
367
|
-
- Relmio never edits, rebuilds, recreates, stops, or restarts the existing n8n
|
|
368
|
-
container.
|
|
369
|
-
- This is an unofficial community project, not affiliated with or endorsed by
|
|
370
|
-
OpenAI, xAI, n8n, Hostinger, Telegram, or AppBuildersPH. Provider access,
|
|
371
|
-
models, limits, and policies can change.
|
|
372
|
-
- Use it only where your account, subscription, provider terms, and applicable
|
|
373
|
-
policies allow.
|
|
374
|
-
|
|
375
|
-
## How it works
|
|
376
|
-
|
|
377
|
-
OpenAI's Codex CLI uses authenticated endpoints at
|
|
378
|
-
`chatgpt.com/backend-api/codex` to run models with a ChatGPT account. Relmio
|
|
379
|
-
uses the same OAuth credential shape through the upstream
|
|
380
|
-
[`openai-oauth`](https://github.com/EvanZhouDev/openai-oauth) helper to expose
|
|
381
|
-
an OpenAI-compatible path without creating an OpenAI Platform API key or
|
|
382
|
-
requiring separate API credits. The upstream service and its access rules may
|
|
383
|
-
change.
|
|
384
|
-
|
|
385
|
-
### Foundation and attribution
|
|
386
|
-
|
|
387
|
-
Relmio is built on [`openai-oauth`](https://github.com/EvanZhouDev/openai-oauth)
|
|
388
|
-
by Evan Zhou Dev. That upstream SDK/helper provides the foundation for ChatGPT
|
|
389
|
-
login in local apps and Sign in with ChatGPT flows; Relmio wraps it with n8n
|
|
390
|
-
discovery, verified SSH/SFTP deployment, Docker networking, and
|
|
391
|
-
OpenAI-compatible configuration. Review the upstream project for its own
|
|
392
|
-
license, notices, and supported behavior.
|
|
393
|
-
|
|
394
|
-
## Known limitations
|
|
395
|
-
|
|
396
|
-
- Only models supported by Codex are available. The list changes over time and
|
|
397
|
-
depends on your ChatGPT plan.
|
|
398
|
-
- The CLI `/v1/responses` endpoint is stateless. Callers must send the full
|
|
399
|
-
conversation history; stateful replay is not provided.
|
|
400
|
-
- Hosted browser sign-in currently supports Chrome and Firefox. Safari is not
|
|
401
|
-
yet supported by the upstream Sign in with ChatGPT flow.
|
|
402
|
-
|
|
403
|
-
## Legal
|
|
28
|
+
## ChatGPT sign-in lifetime
|
|
404
29
|
|
|
405
|
-
|
|
406
|
-
|
|
30
|
+
ChatGPT/Codex sign-in tokens expire, but the official Codex client refreshes
|
|
31
|
+
them automatically during active use before they expire, so active sessions
|
|
32
|
+
usually continue without another browser login. The official [OpenAI
|
|
33
|
+
authentication documentation](https://learn.chatgpt.com/docs/auth) does not
|
|
34
|
+
publish a fixed 10-day lifetime; do not plan around one. This provider
|
|
35
|
+
credential is separate from Relmio's local capability, which remains valid
|
|
36
|
+
until you rotate it.
|
|
407
37
|
|
|
408
|
-
|
|
409
|
-
account, keep credentials private, and never pool, share, or redistribute
|
|
410
|
-
access tokens. Do not bypass rate limits, restrictions, or safeguards.
|
|
38
|
+
## Common problems
|
|
411
39
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
40
|
+
1. **Docker is not running:** start Docker Desktop or Docker Engine with
|
|
41
|
+
Compose, then open a fresh wizard. See
|
|
42
|
+
https://relmio.vercel.app/docs/troubleshooting#docker-is-not-running.
|
|
43
|
+
2. **Authentication fails:** close stale sign-in tabs and use only the newest
|
|
44
|
+
local wizard URL printed by the active terminal. See
|
|
45
|
+
https://relmio.vercel.app/docs/troubleshooting#authentication-fails.
|
|
46
|
+
3. **Local image build failed:** check Docker, disk space, and registry
|
|
47
|
+
connectivity; the browser intentionally does not reveal Docker stderr or
|
|
48
|
+
local paths.
|
|
417
49
|
|
|
418
|
-
|
|
50
|
+
Full guides use absolute HTTPS links:
|
|
419
51
|
|
|
420
|
-
-
|
|
421
|
-
-
|
|
422
|
-
-
|
|
423
|
-
-
|
|
424
|
-
-
|
|
425
|
-
-
|
|
426
|
-
- [Changelog](https://github.com/Demonbane18/relmio/blob/main/CHANGELOG.md)
|
|
52
|
+
- https://relmio.vercel.app/docs/getting-started
|
|
53
|
+
- https://relmio.vercel.app/docs/local-endpoints
|
|
54
|
+
- https://relmio.vercel.app/docs/vps-and-n8n
|
|
55
|
+
- https://relmio.vercel.app/docs/troubleshooting#local-image-build-failed
|
|
56
|
+
- https://relmio.vercel.app/docs/security
|
|
57
|
+
- https://relmio.vercel.app/docs/reference
|
|
427
58
|
|
|
428
|
-
|
|
59
|
+
Source and issues: https://github.com/Demonbane18/relmio
|
|
429
60
|
|
|
430
|
-
|
|
431
|
-
See the package
|
|
432
|
-
[NOTICE](https://github.com/Demonbane18/relmio/blob/main/NOTICE) for the
|
|
433
|
-
upstream `openai-oauth` attribution.
|
|
61
|
+
License: Apache-2.0
|
package/docs/architecture.md
CHANGED
|
@@ -29,28 +29,37 @@ flowchart LR
|
|
|
29
29
|
W --> D["Local Docker Engine"]
|
|
30
30
|
D --> G["OpenAI-compatible gateway<br>127.0.0.1:12435/v1"]
|
|
31
31
|
D --> A["Codex App Server<br>127.0.0.1:14500"]
|
|
32
|
+
D --> H["Codex Chat Adapter<br>127.0.0.1:14501/chat"]
|
|
32
33
|
G -->|"Platform API key"| P["OpenAI Platform API"]
|
|
33
34
|
A -->|"Official Codex sign-in"| C["ChatGPT/Codex service"]
|
|
35
|
+
H -->|"Official App Server lifecycle"| C
|
|
34
36
|
```
|
|
35
37
|
|
|
36
|
-
The
|
|
38
|
+
The three services are intentionally not interchangeable:
|
|
37
39
|
|
|
38
40
|
| Target | Wire protocol | Upstream credential |
|
|
39
41
|
|---|---|---|
|
|
40
42
|
| `openai-api` | OpenAI-compatible HTTP `/v1` | OpenAI Platform API key |
|
|
41
43
|
| `codex-chatgpt` | Official Codex App Server JSON-RPC | ChatGPT sign-in managed by Codex |
|
|
44
|
+
| `codex-chat` | Relmio-specific HTTP `POST /chat` | ChatGPT sign-in managed by Codex |
|
|
42
45
|
|
|
43
46
|
Relmio never adapts a ChatGPT/Codex credential into the local `/v1` gateway.
|
|
44
47
|
The OpenAI gateway replaces the caller's Relmio capability with the
|
|
45
|
-
protected Platform key only at the upstream boundary. The Codex service
|
|
46
|
-
the
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
protected Platform key only at the upstream boundary. The native Codex service
|
|
49
|
+
keeps the initialization, thread, turn, approval, and event protocol. The
|
|
50
|
+
adapter invokes that same official lifecycle behind a bounded, read-only
|
|
51
|
+
conversational contract without claiming OpenAI API compatibility. Its model
|
|
52
|
+
sandbox denies network access and uses a root-deny filesystem policy with only
|
|
53
|
+
minimal runtime paths plus `/workspace` readable; `/home/node/.codex` is
|
|
54
|
+
explicitly denied so a model turn cannot read the persisted ChatGPT session.
|
|
55
|
+
|
|
56
|
+
Each project publishes exactly one literal `127.0.0.1` binding and requires a
|
|
49
57
|
generated bearer capability. Their managed roots are
|
|
50
|
-
`~/.relmio/local/openai-api
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
`~/.relmio/local/openai-api`, `~/.relmio/local/codex-chatgpt`, and
|
|
59
|
+
`~/.relmio/local/codex-chat`. The Codex credentials and workspaces use
|
|
60
|
+
target-specific private named Docker volumes; no host directory or Docker
|
|
61
|
+
socket is mounted. See [Local Docker endpoints](local-endpoints.md) for setup
|
|
62
|
+
and trust limitations.
|
|
54
63
|
|
|
55
64
|
Before installation, Relmio resolves the selected Docker context to a local
|
|
56
65
|
Unix socket and pins that exact socket on every later Docker command. Remote
|
|
@@ -182,3 +191,6 @@ sidecar authenticates upstream with the mounted OAuth file.
|
|
|
182
191
|
or mismatched managed identity blocks local mutation.
|
|
183
192
|
- A Codex login failure returns a sanitized status without returning App
|
|
184
193
|
Server output or ChatGPT tokens.
|
|
194
|
+
- A chat adapter request with a browser Origin, invalid bearer, malformed body,
|
|
195
|
+
protocol overflow, timeout, or failed turn is rejected with a sanitized
|
|
196
|
+
response and its App Server helper is terminated.
|
package/docs/faq.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Frequently asked questions
|
|
2
|
+
|
|
3
|
+
## Does a ChatGPT plan include a Platform API key?
|
|
4
|
+
|
|
5
|
+
No. The OpenAI-compatible `/v1` local endpoint uses a user-supplied OpenAI
|
|
6
|
+
Platform API key, with Platform billing. ChatGPT sign-in is only for the
|
|
7
|
+
experimental Codex paths and is never represented as generic `/v1`
|
|
8
|
+
authorization.
|
|
9
|
+
|
|
10
|
+
## How long does a ChatGPT/Codex sign-in token last?
|
|
11
|
+
|
|
12
|
+
ChatGPT/Codex sign-in tokens expire, but the official Codex client refreshes
|
|
13
|
+
them automatically during active use before they expire, so active sessions
|
|
14
|
+
usually continue without another browser login. The official [OpenAI
|
|
15
|
+
authentication documentation](https://learn.chatgpt.com/docs/auth) does not
|
|
16
|
+
publish a fixed 10-day lifetime; do not plan around one. This provider
|
|
17
|
+
credential is separate from Relmio's local capability, which remains valid
|
|
18
|
+
until you rotate it.
|
|
19
|
+
|
|
20
|
+
## Can I expose the local endpoints to my network?
|
|
21
|
+
|
|
22
|
+
No. Relmio's local endpoint plans bind only to `127.0.0.1`. Do not reverse
|
|
23
|
+
proxy or port-forward the Codex targets. They are intended only for the local
|
|
24
|
+
machine and their stated trusted-client boundary.
|
|
25
|
+
|
|
26
|
+
## Why does the Chat Adapter reject browser requests?
|
|
27
|
+
|
|
28
|
+
The adapter deliberately has no CORS support and rejects requests with an
|
|
29
|
+
`Origin` header. It is for a trusted local backend or development server, not
|
|
30
|
+
browser bundles. The in-wizard tester is the one narrow exception: the browser
|
|
31
|
+
talks only to the setup-token-protected wizard, which makes the server-side
|
|
32
|
+
adapter request without an `Origin` header.
|
|
33
|
+
|
|
34
|
+
## Is the in-wizard tester end-to-end encrypted?
|
|
35
|
+
|
|
36
|
+
No. It uses an expiring in-memory RSA-OAEP key to reduce accidental credential
|
|
37
|
+
transit and storage exposure between the wizard page and local server. It does
|
|
38
|
+
not protect against a compromised browser, extension, or local machine, and it
|
|
39
|
+
does not provide encryption at rest or end-to-end encryption.
|
|
40
|
+
|
|
41
|
+
## Can Relmio modify my n8n deployment?
|
|
42
|
+
|
|
43
|
+
No. It deploys a distinct sidecar only after you approve the displayed plan.
|
|
44
|
+
It does not edit existing n8n Compose files or images and never publishes port
|
|
45
|
+
`10531` on the VPS host.
|