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 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
- <div align="center">
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
- &nbsp;·&nbsp;
8
- <a href="https://relmio.vercel.app/">Hosted ChatGPT site</a>
9
- &nbsp;·&nbsp;
10
- <a href="https://github.com/Demonbane18/relmio/issues/new">Report an issue</a>
11
- &nbsp;·&nbsp;
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
- ## See it working first
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
- 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>
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
- Keep the active setup terminal open while using the wizard. If the page says
215
- the wizard link is incomplete, close that tab and open the full `Local wizard:`
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
- If the browser does not open automatically, press Enter in an interactive
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
- ### Requirements
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
- These requirements are for the VPS/n8n path. For a local Docker endpoint, see
226
- the [local endpoint
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
- ### 5. Review the exact sidecar-only plan
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
- Relmio and `openai-oauth` are unofficial, community-maintained projects and
406
- are not affiliated with, endorsed by, or sponsored by OpenAI.
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
- ChatGPT OAuth credentials should be treated like passwords. Use your own
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
- You are responsible for complying with OpenAI's [Terms of
413
- Use](https://openai.com/policies/terms-of-use/), [Usage
414
- Policies](https://openai.com/policies/usage-policies/), and any agreement that
415
- applies to your account. This project is provided as-is without warranties;
416
- OpenAI may change or disable the underlying services at any time.
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
- ## Documentation
50
+ Full guides use absolute HTTPS links:
419
51
 
420
- - [Complete GitHub README and manual fallback](https://github.com/Demonbane18/relmio#readme)
421
- - [Local Docker endpoints](https://github.com/Demonbane18/relmio/blob/main/docs/local-endpoints.md)
422
- - [Configure n8n AI and HTTP nodes](https://github.com/Demonbane18/relmio/blob/main/docs/n8n-configuration.md)
423
- - [Troubleshooting](https://github.com/Demonbane18/relmio/blob/main/docs/troubleshooting.md)
424
- - [Security and limitations](https://github.com/Demonbane18/relmio/blob/main/docs/security.md)
425
- - [Refresh, upgrade, rollback, and uninstall](https://github.com/Demonbane18/relmio/blob/main/docs/maintenance.md)
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
- ## License
59
+ Source and issues: https://github.com/Demonbane18/relmio
429
60
 
430
- [Apache License 2.0](https://github.com/Demonbane18/relmio/blob/main/LICENSE).
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
@@ -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 two services are intentionally not interchangeable:
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 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
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` 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.
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.