relmio 0.4.0 → 0.5.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 +46 -0
- package/README.md +16 -2
- package/docs/local-endpoints.md +22 -13
- package/docs/troubleshooting.md +1 -1
- package/package.json +1 -1
- package/src/domain/local-endpoints.js +4 -1
- package/src/services/local-installer.js +772 -13
- package/src/services/oauth.js +323 -28
- package/src/ui/app.js +133 -6
- package/src/ui/index.html +3 -0
- package/src/ui/local.css +140 -2
- package/src/ui/local.html +69 -1
- package/src/ui/local.js +58 -0
- package/src/web/server.js +461 -50
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,52 @@ checks the registry separately after publication.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## [0.5.0] - 2026-08-15
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add a **Rotate client credential** action for installed local endpoints that
|
|
15
|
+
shows the replacement capability before activation and preserves the upstream
|
|
16
|
+
Platform key or Codex credential/workspace volumes.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Keep System, Light, and Dark appearance controls plus Ko-fi, GitHub stars, and
|
|
21
|
+
the current package version available throughout the local install wizard.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Install operating-system CA certificates in the isolated Codex image so the
|
|
26
|
+
official ChatGPT device-code sign-in can establish its trusted TLS connection.
|
|
27
|
+
- Wrap local safety and error notifications instead of clipping longer text.
|
|
28
|
+
|
|
29
|
+
### Security
|
|
30
|
+
|
|
31
|
+
- Verify the generated Codex capability with a strict authenticated WebSocket
|
|
32
|
+
upgrade before reporting installation or rotation success.
|
|
33
|
+
- Serialize installation, sign-in, restart, and credential rotation across
|
|
34
|
+
Relmio processes, with attested stale-lock recovery and fail-closed rollback
|
|
35
|
+
that restores the prior verifier and re-attests endpoint readiness.
|
|
36
|
+
|
|
37
|
+
## [0.4.1] - 2026-08-14
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- Add a manual **Stop sign-in** action while a fresh ChatGPT login is pending,
|
|
42
|
+
then detect and reject results from superseded wizard attempts.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- Terminate the OAuth helper process tree when sign-in is stopped or Relmio
|
|
47
|
+
exits, preventing a rejected or abandoned attempt from continuing to hold
|
|
48
|
+
the `localhost:1455` callback port.
|
|
49
|
+
|
|
50
|
+
### Security
|
|
51
|
+
|
|
52
|
+
- Fail closed when OAuth process cleanup or credential promotion cannot be
|
|
53
|
+
confirmed, blocking another login until Relmio restarts instead of risking
|
|
54
|
+
an ambiguous helper or credential state.
|
|
55
|
+
|
|
10
56
|
## [0.4.0] - 2026-08-13
|
|
11
57
|
|
|
12
58
|
### Added
|
package/README.md
CHANGED
|
@@ -78,6 +78,11 @@ the private VPS/n8n sidecar and the separate local Docker endpoint paths.
|
|
|
78
78
|
> OAuth extension captures that callback, temporarily disable it during local sign-in,
|
|
79
79
|
> complete the wizard sign-in, and then re-enable it.
|
|
80
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
|
+
|
|
81
86
|
<figure>
|
|
82
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">
|
|
83
88
|
<figcaption>Successful hosted-chat state: the browser extension completed the OAuth handoff and Relmio shows the ChatGPT session as connected.</figcaption>
|
|
@@ -96,7 +101,8 @@ On desktop, the local wizard keeps progress and sidecar-only safety notes in a
|
|
|
96
101
|
persistent rail beside the active task; its compact fixed-screen shell avoids
|
|
97
102
|
document scrolling on common laptop screens. On narrow phones, it switches to
|
|
98
103
|
a horizontal progress strip and keeps task scrolling inside the active panel.
|
|
99
|
-
|
|
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.
|
|
100
106
|
|
|
101
107
|
## Local Docker endpoints
|
|
102
108
|
|
|
@@ -117,7 +123,15 @@ The OpenAI-compatible `/v1` endpoint is powered only by a Platform API key,
|
|
|
117
123
|
which the wizard seeds over stdin into a private, labeled Docker volume; it
|
|
118
124
|
does not create a host key file. Your app uses a
|
|
119
125
|
separate Relmio capability that the wizard displays once.
|
|
120
|
-
The bearer remains valid until it is rotated.
|
|
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
|
|
121
135
|
must come from an exact origin entered during setup; wildcards are not allowed,
|
|
122
136
|
and the capability must never be embedded in a public frontend bundle. Platform
|
|
123
137
|
requests use that API project's billing, credits, limits, and permissions, not
|
package/docs/local-endpoints.md
CHANGED
|
@@ -77,19 +77,28 @@ Engine.
|
|
|
77
77
|
|
|
78
78
|
## Safe updates and credential rotation
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
80
|
+
To replace only the credential used by your local client, select **Rotate client
|
|
81
|
+
credential** on the installed endpoint's Ready screen. Relmio first stages and
|
|
82
|
+
shows the new one-time capability while the previous capability remains active.
|
|
83
|
+
It then updates and validates the managed Compose configuration, recreates only
|
|
84
|
+
the attested service, and verifies the new bearer against `/v1/models` or the
|
|
85
|
+
authenticated Codex WebSocket handshake before reporting success.
|
|
86
|
+
|
|
87
|
+
This client-only rotation preserves the upstream Platform API key in its private
|
|
88
|
+
named volume and preserves the Codex home and workspace volumes. If activation
|
|
89
|
+
or verification fails, Relmio restores the previous verifier and re-attests its
|
|
90
|
+
health and loopback publication. Relmio does not retain the previous raw client
|
|
91
|
+
credential, so rollback does not replay an authenticated request with it. If
|
|
92
|
+
that rollback cannot be confirmed, Relmio attempts to stop only the exact
|
|
93
|
+
managed service and reports whether the stopped state could be verified.
|
|
94
|
+
|
|
95
|
+
Rerun the browser wizard with the same target and port when you need a complete
|
|
96
|
+
managed update. Relmio verifies the marker and Docker resource ownership and
|
|
97
|
+
reuses the installation's unique Compose identity. For `openai-api`, provide the
|
|
98
|
+
current or replacement Platform API key during that full update; Relmio reseeds
|
|
99
|
+
its private named volume independently from the local client capability. A full
|
|
100
|
+
`codex-chatgpt` update retains the private Codex home and workspace volumes unless
|
|
101
|
+
you explicitly delete them.
|
|
93
102
|
|
|
94
103
|
Do not hand-edit the marker, Compose file, credential volume, or verifier. If
|
|
95
104
|
the marker or resource labels do not attest as one Relmio installation, the
|
package/docs/troubleshooting.md
CHANGED
|
@@ -146,7 +146,7 @@ bypassed.
|
|
|
146
146
|
| `ChatGPT sign-in did not finish` appears immediately when refreshing an existing credential | Wizard versions through `0.1.3` attempted to reuse `~/.codex/auth.json`, but the bridge CLI requires an interactive terminal before replacing that file. | Update to `0.1.4` or newer. The wizard signs in through its own new credential file and leaves the Codex app credential untouched. |
|
|
147
147
|
| The wizard keeps showing `Waiting for browser sign-in` after approval | Older versions waited for the OAuth helper process to close even after its credential file was ready. | Update to `0.1.5` or newer. Confirm the new **Credential updated** time appears before continuing. |
|
|
148
148
|
| **Credential updated** still shows the old time | The callback reached an old/expired tab, was intercepted, or a different wizard session is open. | Close every old OAuth and wizard tab. Keep one current wizard open, select **Refresh ChatGPT sign-in**, and complete only the newly opened page. |
|
|
149
|
-
| The fresh login cannot bind `localhost:1455` or reports the address is in use | Another OAuth helper or extension process already owns the local callback port. |
|
|
149
|
+
| The fresh login cannot bind `localhost:1455` or reports the address is in use | Another OAuth helper or extension process already owns the local callback port. | In the active wizard, use **Stop sign-in** before starting another attempt. If retry remains disabled because cleanup could not be confirmed, close the wizard and OAuth helper, confirm the port is free, and restart Relmio. On macOS/Linux, inspect without killing anything using `lsof -nP -iTCP:1455 -sTCP:LISTEN`. |
|
|
150
150
|
| `SSH connection failed. Check the address, password, firewall, and confirmed fingerprint.` | The TCP connection, password authentication, or confirmed host identity did not succeed. | Copy the full address and port from the provider, confirm root password login is enabled, check the provider firewall, rescan and compare the fingerprint, then test `ssh -p 22 root@YOUR_VPS_IP` from the same computer. |
|
|
151
151
|
| The VPS accepts only an SSH key or passkey | The current wizard supports live password authentication, not SSH keys. | Use the manual installation path or a provider-approved password-authenticated administrator account. Do not weaken SSH security or upload a private key into the wizard. |
|
|
152
152
|
| The SSH fingerprint changed | The server was rebuilt, its host keys changed, or the connection may be reaching a different host. | Stop. Verify the address and the new fingerprint through the VPS provider console before confirming it. Never bypass the comparison. |
|
package/package.json
CHANGED
|
@@ -359,7 +359,10 @@ tool_suggest = false
|
|
|
359
359
|
export function createCodexDockerfile() {
|
|
360
360
|
return `FROM node:22-bookworm-slim
|
|
361
361
|
|
|
362
|
-
RUN
|
|
362
|
+
RUN apt-get update \\
|
|
363
|
+
&& apt-get install --no-install-recommends -y ca-certificates \\
|
|
364
|
+
&& rm -rf /var/lib/apt/lists/* \\
|
|
365
|
+
&& npm install --global --ignore-scripts @openai/codex@${CODEX_CLI_VERSION} \\
|
|
363
366
|
&& npm cache clean --force \\
|
|
364
367
|
&& mkdir -p /etc/codex /home/node/.codex /workspace \\
|
|
365
368
|
&& chown -R node:node /home/node/.codex /workspace
|