relmio 0.6.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 +26 -0
- package/README.md +42 -429
- package/docs/faq.md +45 -0
- package/docs/getting-started.md +38 -0
- package/docs/local-endpoints-spec.md +27 -0
- package/docs/local-endpoints.md +52 -11
- package/docs/reference.md +77 -0
- package/docs/security.md +34 -0
- package/docs/troubleshooting.md +33 -0
- package/docs/vps-and-n8n.md +30 -0
- package/package.json +1 -1
- package/src/services/local-chat-test.js +361 -0
- package/src/ui/local.css +115 -1
- package/src/ui/local.html +99 -0
- package/src/ui/local.js +263 -1
- package/src/web/server.js +123 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,32 @@ 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
|
+
|
|
10
36
|
## [0.6.0] - 2026-08-15
|
|
11
37
|
|
|
12
38
|
### Added
|
package/README.md
CHANGED
|
@@ -1,448 +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
|
-
an OpenAI-compatible gateway backed by a Platform API key, the official Codex
|
|
51
|
-
App Server, or a small server-side Codex chat adapter backed by ChatGPT
|
|
52
|
-
sign-in.
|
|
53
|
-
|
|
54
|
-
The existing n8n image, Compose file, container, and workflows stay untouched.
|
|
55
|
-
|
|
56
|
-
A sidecar is a small helper program that runs beside a larger program. Relmio's
|
|
57
|
-
private sidecar adds ChatGPT/Codex sign-in and request translation while your
|
|
58
|
-
existing n8n stays unchanged. This follows the sidecar pattern described in
|
|
59
|
-
[Justin Rice's beginner-friendly overview](https://medium.com/@justinricedev/what-is-a-software-sidecar-8f89feff09f9).
|
|
60
|
-
|
|
61
|
-
Think of it like a motorcycle gaining a sidecar: together they become a
|
|
62
|
-
tricycle with extra seats. n8n is the motorcycle; Relmio is the sidecar that
|
|
63
|
-
adds the missing capability without changing n8n.
|
|
64
|
-
|
|
65
|
-
Try the hosted browser demo at
|
|
66
|
-
[relmio.vercel.app](https://relmio.vercel.app/). It is a separate
|
|
67
|
-
request-bound ChatGPT experience; the npm package remains the local wizard for
|
|
68
|
-
the private VPS/n8n sidecar and the separate local Docker endpoint paths.
|
|
69
|
-
|
|
70
|
-
> **Warning — Hosted chat requires the browser extension.** Install the
|
|
71
|
-
> open-source [Sign in with ChatGPT extension for
|
|
72
|
-
> Chrome](https://chromewebstore.google.com/detail/sign-in-with-chatgpt/odbgboachaefbbbdiffcefhpkekhfcna)
|
|
73
|
-
> or [Firefox](https://addons.mozilla.org/firefox/addon/sign-in-with-chatgpt/)
|
|
74
|
-
> before connecting. If the hosted chat stays disconnected, confirm the
|
|
75
|
-
> extension is installed and enabled, reload the page, and select **Connect
|
|
76
|
-
> ChatGPT** again.
|
|
77
|
-
|
|
78
|
-
> The local npm wizard uses its own `localhost:1455` callback instead. If an
|
|
79
|
-
> OAuth extension captures that callback, temporarily disable it during local sign-in,
|
|
80
|
-
> complete the wizard sign-in, and then re-enable it.
|
|
81
|
-
|
|
82
|
-
While a fresh local login is pending, **Stop sign-in** terminates the helper
|
|
83
|
-
Relmio started before allowing another attempt. Results from older tabs are
|
|
84
|
-
rejected after a replacement starts. If cleanup cannot be confirmed, retry
|
|
85
|
-
remains disabled; close the wizard and OAuth helper, then restart Relmio.
|
|
86
|
-
|
|
87
|
-
<figure>
|
|
88
|
-
<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">
|
|
89
|
-
<figcaption>Successful hosted-chat state: the browser extension completed the OAuth handoff and Relmio shows the ChatGPT session as connected.</figcaption>
|
|
90
|
-
</figure>
|
|
91
|
-
|
|
92
|
-
Use the site's [Install wizard](https://relmio.vercel.app/install) page for a
|
|
93
|
-
clickable macOS/Linux, Homebrew, PowerShell, Command Prompt, and NPX command switcher
|
|
94
|
-
tailored to the current self-hosted n8n and Hostinger VPS setup path.
|
|
95
|
-
|
|
96
|
-
### Browser interface and theme modes
|
|
97
|
-
|
|
98
|
-
The hosted site and local wizard keep the original Relmio relay layout while
|
|
99
|
-
adding a compact **System / Light / Dark** appearance control. System follows
|
|
100
|
-
the computer's preference; Light and Dark are remembered on that browser only.
|
|
101
|
-
On desktop, the local wizard keeps progress and sidecar-only safety notes in a
|
|
102
|
-
persistent rail beside the active task; its compact fixed-screen shell avoids
|
|
103
|
-
document scrolling on common laptop screens. On narrow phones, it switches to
|
|
104
|
-
a horizontal progress strip and keeps task scrolling inside the active panel.
|
|
105
|
-
Both the hosted site and local wizard keep Ko-fi support, GitHub stars, and the
|
|
106
|
-
current Relmio version visible beside the appearance control.
|
|
107
|
-
|
|
108
|
-
## Local Docker endpoints
|
|
109
|
-
|
|
110
|
-
Choose **Local endpoints** in the browser wizard to install one of these
|
|
111
|
-
Docker services on the same computer as your app:
|
|
112
|
-
|
|
113
|
-
This local Docker path supports macOS, Linux, and Linux under WSL2. Native
|
|
114
|
-
Windows is not supported in this release because its filesystem permissions do
|
|
115
|
-
not provide the owner-only POSIX mode guarantees used for local credentials.
|
|
116
|
-
The existing VPS/n8n wizard remains available from native Windows.
|
|
117
|
-
|
|
118
|
-
| Option | Local endpoint | Provider credential | Client type |
|
|
119
|
-
|---|---|---|---|
|
|
120
|
-
| **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 |
|
|
121
|
-
| **Codex with ChatGPT: agent clients** | `ws://127.0.0.1:14500` by default | ChatGPT sign-in through Codex | Trusted native Codex/App Server client |
|
|
122
|
-
| **Codex Chat Adapter: development backends** | `http://127.0.0.1:14501/chat` by default | ChatGPT sign-in through Codex | Trusted local backend or development server |
|
|
123
|
-
|
|
124
|
-
The Chat Adapter starts each model turn with network access disabled and an
|
|
125
|
-
explicit filesystem policy that permits only Codex's minimal runtime files and
|
|
126
|
-
the empty private workspace. The model-accessible sandbox denies
|
|
127
|
-
`/home/node/.codex`, where the official Codex client keeps its ChatGPT session.
|
|
128
|
-
The adapter bearer must stay in your server-side development environment,
|
|
129
|
-
never browser code.
|
|
130
|
-
|
|
131
|
-
The OpenAI-compatible `/v1` endpoint is powered only by a Platform API key,
|
|
132
|
-
which the wizard seeds over stdin into a private, labeled Docker volume; it
|
|
133
|
-
does not create a host key file. Your app uses a
|
|
134
|
-
separate Relmio capability that the wizard displays once.
|
|
135
|
-
The bearer remains valid until it is rotated. After installation, use
|
|
136
|
-
**Rotate client credential** on the Ready screen to replace only that local
|
|
137
|
-
capability. Relmio shows the new one-time credential before activation, verifies
|
|
138
|
-
the replacement endpoint, and preserves the upstream Platform API key or Codex
|
|
139
|
-
credential/workspace volumes. If replacement cannot be verified, Relmio attempts
|
|
140
|
-
to restore the previous verifier and re-attest service readiness. It does not
|
|
141
|
-
retain the previous raw client credential to replay it during rollback. If
|
|
142
|
-
rollback cannot be confirmed, it targets only the exact managed service for
|
|
143
|
-
shutdown and reports whether that stopped state could be verified. Browser requests
|
|
144
|
-
must come from an exact origin entered during setup; wildcards are not allowed,
|
|
145
|
-
and the capability must never be embedded in a public frontend bundle. Platform
|
|
146
|
-
requests use that API project's billing, credits, limits, and permissions, not
|
|
147
|
-
a ChatGPT subscription.
|
|
148
|
-
|
|
149
|
-
ChatGPT sign-in powers Codex, not the OpenAI Platform API. The native target
|
|
150
|
-
keeps the official experimental App Server JSON-RPC protocol. The separate
|
|
151
|
-
adapter offers only Relmio's `POST /chat` request and returns a conversation ID
|
|
152
|
-
plus final text; it is not `/v1/chat/completions`, `/v1/responses`, or an
|
|
153
|
-
OpenAI SDK replacement. A local backend can keep its Relmio bearer secret while
|
|
154
|
-
a browser calls that backend. Direct browser-origin requests to both Codex
|
|
155
|
-
targets are rejected.
|
|
156
|
-
|
|
157
|
-
OpenAI documents the underlying App Server WebSocket transport as experimental
|
|
158
|
-
and unsupported for production. The raw App Server capability is especially
|
|
159
|
-
high-trust because it can operate the signed-in Codex session and files inside
|
|
160
|
-
the isolated container workspace. Keep either target loopback-only, same-owner,
|
|
161
|
-
and limited to local development.
|
|
162
|
-
|
|
163
|
-
All three services bind exactly to `127.0.0.1`, require the generated capability,
|
|
164
|
-
and mount no host directory or Docker socket. Each Codex target gets its own
|
|
165
|
-
private named credential and workspace volumes. This local path does not
|
|
166
|
-
connect to a VPS or modify n8n.
|
|
167
|
-
|
|
168
|
-
Read the complete [Local Docker endpoints
|
|
169
|
-
guide](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md)
|
|
170
|
-
before installing. It includes the wizard steps, client settings, exact-origin
|
|
171
|
-
rules, billing boundary, container isolation, and official OpenAI documentation
|
|
172
|
-
links. The design is documentation-backed engineering guidance, not legal
|
|
173
|
-
advice or an OpenAI approval. Codex for Open Source membership is not treated
|
|
174
|
-
as permission to broaden credential scope or bypass another agreement.
|
|
175
|
-
|
|
176
|
-
## Quick start
|
|
177
|
-
|
|
178
|
-
Choose the terminal already on your own computer. Do not run these commands on
|
|
179
|
-
the VPS.
|
|
180
|
-
|
|
181
|
-
### macOS, Linux, WSL, or Git Bash
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
curl -fsSL https://relmio.vercel.app/install.sh | sh
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### Homebrew (macOS or Linux)
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
brew tap Demonbane18/relmio && brew install relmio
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### Windows PowerShell
|
|
194
|
-
|
|
195
|
-
```powershell
|
|
196
|
-
irm https://relmio.vercel.app/install.ps1 | iex
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### Windows Command Prompt
|
|
200
|
-
|
|
201
|
-
```bat
|
|
202
|
-
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"
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
No Node.js or Git Bash installation is required first. The
|
|
206
|
-
[POSIX](https://github.com/Demonbane18/relmio/blob/main/web/public/install.sh)
|
|
207
|
-
and [Windows PowerShell](https://github.com/Demonbane18/relmio/blob/main/web/public/install.ps1)
|
|
208
|
-
bootstraps, plus the PowerShell-free [Command Prompt](https://github.com/Demonbane18/relmio/blob/main/web/public/install.cmd)
|
|
209
|
-
bootstrap, reuse Node.js 22 or newer when available. Otherwise they show
|
|
210
|
-
staged **Please wait** messages while they download the matching current
|
|
211
|
-
official Node.js 22 runtime to a private temporary directory, verify its
|
|
212
|
-
SHA-256 checksum, run Relmio with npm lifecycle scripts disabled, and remove
|
|
213
|
-
the temporary runtime when the wizard closes. The Command Prompt path runs as
|
|
214
|
-
the current user and does not request administrator access or change Windows
|
|
215
|
-
security policy.
|
|
216
|
-
|
|
217
|
-
Homebrew is available from the public `Demonbane18/relmio` tap. The WinGet
|
|
218
|
-
command stays hidden until Microsoft accepts its catalog pull request and the
|
|
219
|
-
catalog updates. Until then, use Homebrew or a direct installer above.
|
|
220
|
-
|
|
221
|
-
Users who already have Node.js 22 or newer can run the npm package directly:
|
|
222
|
-
|
|
223
|
-
### NPX (requires Node.js 22+)
|
|
6
|
+
## Quick install
|
|
224
7
|
|
|
225
8
|
```bash
|
|
226
9
|
npx --yes --ignore-scripts relmio@latest
|
|
227
10
|
```
|
|
228
11
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
URL printed by the current terminal instead of refreshing the stripped page.
|
|
232
|
-
|
|
233
|
-
If the browser does not open automatically, press Enter in an interactive
|
|
234
|
-
terminal to open it again. The printed `Local wizard:` URL remains the fallback
|
|
235
|
-
for a terminal that cannot accept input or when the launcher still cannot open
|
|
236
|
-
a browser.
|
|
237
|
-
|
|
238
|
-
### Requirements
|
|
239
|
-
|
|
240
|
-
These requirements are for the VPS/n8n path. For a local Docker endpoint, see
|
|
241
|
-
the [local endpoint
|
|
242
|
-
requirements](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md#requirements).
|
|
243
|
-
|
|
244
|
-
- On macOS/Linux/WSL/Git Bash: `curl`, `awk`, `tar`, and either `sha256sum` or
|
|
245
|
-
`shasum`; Git Bash also needs `unzip`
|
|
246
|
-
- On native Windows: Command Prompt uses its built-in `curl`, `certutil`, and
|
|
247
|
-
`tar` tools; Windows PowerShell 5.1 or PowerShell 7 remains an alternative
|
|
248
|
-
bootstrap
|
|
249
|
-
- A browser and an eligible ChatGPT/Codex account
|
|
250
|
-
- A self-hosted n8n Docker deployment on a VPS
|
|
251
|
-
- Docker Compose v2, SSH access, and a Docker network shared with n8n
|
|
252
|
-
|
|
253
|
-
Back up your n8n workflows before granting any tool VPS access.
|
|
254
|
-
|
|
255
|
-
## What you get
|
|
256
|
-
|
|
257
|
-
```text
|
|
258
|
-
n8n AI node or HTTP Request
|
|
259
|
-
-> private Docker endpoint: http://n8n-openai-oauth:10531/v1
|
|
260
|
-
-> protected ChatGPT/Codex OAuth session
|
|
261
|
-
-> upstream OpenAI service
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
Relmio's existing VPS/n8n path provides tested setup instructions for:
|
|
265
|
-
|
|
266
|
-
- OpenAI Chat Model
|
|
267
|
-
- AI Agent
|
|
268
|
-
- Basic LLM Chain
|
|
269
|
-
- HTTP Request
|
|
270
|
-
|
|
271
|
-
The local endpoint path described above now supports compatible private apps
|
|
272
|
-
through a Platform-backed gateway and trusted native clients through Codex App
|
|
273
|
-
Server. The broader direction is to add providers and client adapters without
|
|
274
|
-
weakening their authentication boundaries or tying the public product name to
|
|
275
|
-
n8n. SuperGrok/xAI OAuth is a gated feasibility item on the
|
|
276
|
-
[provider roadmap](https://github.com/Demonbane18/relmio/blob/main/docs/roadmap.md);
|
|
277
|
-
it is not currently advertised as supported.
|
|
278
|
-
|
|
279
|
-
## Visual walkthrough
|
|
280
|
-
|
|
281
|
-
These current product screenshots use sanitized sample values wherever a setup
|
|
282
|
-
field might otherwise identify an environment. The VPS identity screen shows a
|
|
283
|
-
reserved sample address and sample SSH fingerprint; none of the images includes
|
|
284
|
-
an OAuth token, password, private key, or live wizard session URL.
|
|
285
|
-
|
|
286
|
-
### 1. Choose a hosted installation method
|
|
287
|
-
|
|
288
|
-
<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">
|
|
289
|
-
|
|
290
|
-
The hosted page starts with the installation-method selector. Run the selected
|
|
291
|
-
command locally, not on the VPS.
|
|
292
|
-
|
|
293
|
-
### 2. Complete the local ChatGPT/Codex sign-in
|
|
294
|
-
|
|
295
|
-
<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">
|
|
296
|
-
|
|
297
|
-
This image shows a sanitized preview-mode sample credential state; it does not
|
|
298
|
-
confirm that a real local ChatGPT login was saved. During a real fresh login,
|
|
299
|
-
the browser confirmation states that the credentials were saved locally.
|
|
300
|
-
|
|
301
|
-
### 3. Verify the VPS identity
|
|
302
|
-
|
|
303
|
-
<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">
|
|
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.
|
|
304
14
|
|
|
305
|
-
|
|
306
|
-
reserved sample host `vps.example.test`, a sample fingerprint, and a blank
|
|
307
|
-
password field.
|
|
15
|
+
## What it can install
|
|
308
16
|
|
|
309
|
-
|
|
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 |
|
|
310
23
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
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
|
|
314
26
|
network.
|
|
315
27
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
<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">
|
|
319
|
-
|
|
320
|
-
The plan names the allowed sidecar work and explicitly excludes edits or
|
|
321
|
-
restarts of n8n, a published host port, and a Traefik route.
|
|
322
|
-
|
|
323
|
-
### 6. Copy the verified n8n settings
|
|
324
|
-
|
|
325
|
-
<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">
|
|
326
|
-
|
|
327
|
-
Use these values in an n8n OpenAI credential:
|
|
328
|
-
|
|
329
|
-
```text
|
|
330
|
-
API Key: local-only
|
|
331
|
-
Base URL: http://n8n-openai-oauth:10531/v1
|
|
332
|
-
Organization ID: leave empty
|
|
333
|
-
Add Custom Header: Off
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
The `local-only` value is a placeholder required by n8n. It is not an OpenAI
|
|
337
|
-
Platform API key.
|
|
338
|
-
|
|
339
|
-
For an n8n **HTTP Request** node, use **Generic Credential Type** → **Bearer
|
|
340
|
-
Auth**, name the credential `openai-oauth`, and enter `local-only` as the
|
|
341
|
-
bearer token. Enable **Send Headers** with `Content-Type: application/json`,
|
|
342
|
-
then enable **Send Body** → **JSON** → **Using JSON** and paste:
|
|
343
|
-
|
|
344
|
-
```json
|
|
345
|
-
{
|
|
346
|
-
"model": "gpt-5.6-sol",
|
|
347
|
-
"messages": [
|
|
348
|
-
{
|
|
349
|
-
"role": "user",
|
|
350
|
-
"content": "What is a robot?"
|
|
351
|
-
}
|
|
352
|
-
],
|
|
353
|
-
"response_format": {
|
|
354
|
-
"type": "json_schema",
|
|
355
|
-
"json_schema": {
|
|
356
|
-
"name": "answer",
|
|
357
|
-
"schema": {
|
|
358
|
-
"type": "object",
|
|
359
|
-
"properties": {
|
|
360
|
-
"content": { "type": "string" }
|
|
361
|
-
},
|
|
362
|
-
"required": ["content"],
|
|
363
|
-
"additionalProperties": false
|
|
364
|
-
},
|
|
365
|
-
"strict": true
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
Use `POST http://n8n-openai-oauth:10531/v1/chat/completions` as the URL. The
|
|
372
|
-
local wizard's **Copy HTTP request recipe** action supplies the same fields.
|
|
373
|
-
Replace the model only if the wizard reports a different ID. The full guide
|
|
374
|
-
has the importable cURL version.
|
|
375
|
-
|
|
376
|
-
## Important boundaries
|
|
377
|
-
|
|
378
|
-
- Relmio does not create an OpenAI Platform API key.
|
|
379
|
-
- The OAuth file is a password-equivalent secret; never commit or share it.
|
|
380
|
-
- The sidecar endpoint stays inside the Docker network. Port `10531` must not
|
|
381
|
-
be published on the VPS host.
|
|
382
|
-
- Relmio never edits, rebuilds, recreates, stops, or restarts the existing n8n
|
|
383
|
-
container.
|
|
384
|
-
- This is an unofficial community project, not affiliated with or endorsed by
|
|
385
|
-
OpenAI, xAI, n8n, Hostinger, Telegram, or AppBuildersPH. Provider access,
|
|
386
|
-
models, limits, and policies can change.
|
|
387
|
-
- Use it only where your account, subscription, provider terms, and applicable
|
|
388
|
-
policies allow.
|
|
389
|
-
|
|
390
|
-
## How it works
|
|
391
|
-
|
|
392
|
-
OpenAI's Codex CLI uses authenticated endpoints at
|
|
393
|
-
`chatgpt.com/backend-api/codex` to run models with a ChatGPT account. Relmio
|
|
394
|
-
uses the same OAuth credential shape through the upstream
|
|
395
|
-
[`openai-oauth`](https://github.com/EvanZhouDev/openai-oauth) helper to expose
|
|
396
|
-
an OpenAI-compatible path without creating an OpenAI Platform API key or
|
|
397
|
-
requiring separate API credits. The upstream service and its access rules may
|
|
398
|
-
change.
|
|
399
|
-
|
|
400
|
-
### Foundation and attribution
|
|
401
|
-
|
|
402
|
-
Relmio is built on [`openai-oauth`](https://github.com/EvanZhouDev/openai-oauth)
|
|
403
|
-
by Evan Zhou Dev. That upstream SDK/helper provides the foundation for ChatGPT
|
|
404
|
-
login in local apps and Sign in with ChatGPT flows; Relmio wraps it with n8n
|
|
405
|
-
discovery, verified SSH/SFTP deployment, Docker networking, and
|
|
406
|
-
OpenAI-compatible configuration. Review the upstream project for its own
|
|
407
|
-
license, notices, and supported behavior.
|
|
408
|
-
|
|
409
|
-
## Known limitations
|
|
410
|
-
|
|
411
|
-
- Only models supported by Codex are available. The list changes over time and
|
|
412
|
-
depends on your ChatGPT plan.
|
|
413
|
-
- The CLI `/v1/responses` endpoint is stateless. Callers must send the full
|
|
414
|
-
conversation history; stateful replay is not provided.
|
|
415
|
-
- Hosted browser sign-in currently supports Chrome and Firefox. Safari is not
|
|
416
|
-
yet supported by the upstream Sign in with ChatGPT flow.
|
|
417
|
-
|
|
418
|
-
## Legal
|
|
28
|
+
## ChatGPT sign-in lifetime
|
|
419
29
|
|
|
420
|
-
|
|
421
|
-
|
|
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.
|
|
422
37
|
|
|
423
|
-
|
|
424
|
-
account, keep credentials private, and never pool, share, or redistribute
|
|
425
|
-
access tokens. Do not bypass rate limits, restrictions, or safeguards.
|
|
38
|
+
## Common problems
|
|
426
39
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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.
|
|
432
49
|
|
|
433
|
-
|
|
50
|
+
Full guides use absolute HTTPS links:
|
|
434
51
|
|
|
435
|
-
-
|
|
436
|
-
-
|
|
437
|
-
-
|
|
438
|
-
-
|
|
439
|
-
-
|
|
440
|
-
-
|
|
441
|
-
- [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
|
|
442
58
|
|
|
443
|
-
|
|
59
|
+
Source and issues: https://github.com/Demonbane18/relmio
|
|
444
60
|
|
|
445
|
-
|
|
446
|
-
See the package
|
|
447
|
-
[NOTICE](https://github.com/Demonbane18/relmio/blob/main/NOTICE) for the
|
|
448
|
-
upstream `openai-oauth` attribution.
|
|
61
|
+
License: Apache-2.0
|
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.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Getting started
|
|
2
|
+
|
|
3
|
+
Relmio gives you two intentionally separate paths:
|
|
4
|
+
|
|
5
|
+
| Need | Use | Credential |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| An OpenAI-compatible local endpoint | Local OpenAI API gateway (`/v1`) | Your OpenAI Platform API key |
|
|
8
|
+
| A trusted native Codex integration | Codex App Server (JSON-RPC over WebSocket) | ChatGPT sign-in and a local capability |
|
|
9
|
+
| A small local chat backend | Codex Chat Adapter (`POST /chat`) | ChatGPT sign-in and a local bearer credential |
|
|
10
|
+
| An n8n bridge on a VPS | The separate n8n sidecar | Your locally created ChatGPT sign-in file |
|
|
11
|
+
|
|
12
|
+
ChatGPT sign-in is never converted into an OpenAI Platform API key. The Codex
|
|
13
|
+
options are experimental and are not generic `/v1` services.
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
On macOS, Linux, WSL, or Git Bash, start the local wizard with:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx --yes --ignore-scripts relmio@latest
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The wizard prints a private loopback URL, verifies Docker before it changes
|
|
24
|
+
anything, and asks for final confirmation before remote VPS writes. It binds
|
|
25
|
+
local endpoints to `127.0.0.1`, never to a LAN interface.
|
|
26
|
+
|
|
27
|
+
For installation options and prerequisites, see the [package
|
|
28
|
+
README](https://www.npmjs.com/package/relmio). For a VPS/n8n walkthrough, see
|
|
29
|
+
[VPS and n8n](./vps-and-n8n.md).
|
|
30
|
+
|
|
31
|
+
## Choose the next guide
|
|
32
|
+
|
|
33
|
+
- [Local endpoints](./local-endpoints.md) for the local gateway, Codex App
|
|
34
|
+
Server, or Chat Adapter.
|
|
35
|
+
- [Troubleshooting](./troubleshooting.md) when Docker, authentication, or a
|
|
36
|
+
local image build stops the flow.
|
|
37
|
+
- [Security](./security.md) for credential and trust boundaries.
|
|
38
|
+
- [Reference](./reference.md) for test commands and protocol notes.
|
|
@@ -112,6 +112,33 @@ say so, and the installer must reject native Windows before any write.
|
|
|
112
112
|
Every wizard API route continues to require the existing `X-Setup-Token` and
|
|
113
113
|
same-origin protections.
|
|
114
114
|
|
|
115
|
+
### Chat Adapter tester APIs
|
|
116
|
+
|
|
117
|
+
The tester is available only after a live `codex-chat` installation reaches the
|
|
118
|
+
Ready screen. Sanitized preview mode rejects all three routes. Each route uses
|
|
119
|
+
the same `POST` exact-Origin and `X-Setup-Token` protections as the rest of
|
|
120
|
+
the local wizard.
|
|
121
|
+
|
|
122
|
+
- `POST /api/local/chat-test/key` returns only `keyId`, an RSA public JWK,
|
|
123
|
+
`RSA-OAEP-256`, and an expiry. Its private key remains only in the local
|
|
124
|
+
server's bounded, in-memory tester-session map.
|
|
125
|
+
- `POST /api/local/chat-test/message` accepts a literal loopback adapter base
|
|
126
|
+
URL, `keyId`, RSA-OAEP SHA-256 ciphertext, a bounded input, and an optional
|
|
127
|
+
bounded conversation ID. It returns only validated `conversationId` and
|
|
128
|
+
`output`.
|
|
129
|
+
- `POST /api/local/chat-test/reset` invalidates the specified in-memory key.
|
|
130
|
+
|
|
131
|
+
The browser sends no adapter request and stores no tester data in browser
|
|
132
|
+
storage. It clears the plaintext credential input before it awaits key issuance
|
|
133
|
+
or encryption, then retains ciphertext and key ID only in page memory. The
|
|
134
|
+
server does not retain prompts or transcript beyond a single request.
|
|
135
|
+
|
|
136
|
+
The local proxy accepts only `http://127.0.0.1:<1-65535>` with an optional
|
|
137
|
+
trailing slash. It rejects DNS names, IPv6, credentials, query strings,
|
|
138
|
+
fragments, paths, redirects, malformed JSON, oversized request/response data,
|
|
139
|
+
expiry, and concurrent use. It appends `/chat`, uses a bounded timeout, sends
|
|
140
|
+
no `Origin` header, and returns generic redacted failures.
|
|
141
|
+
|
|
115
142
|
### `GET /api/local/docker/status`
|
|
116
143
|
|
|
117
144
|
Returns local Docker and Compose availability. It never returns filesystem
|