open-codex-ui 0.1.4__tar.gz
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.
- open_codex_ui-0.1.4/MANIFEST.in +1 -0
- open_codex_ui-0.1.4/PKG-INFO +249 -0
- open_codex_ui-0.1.4/README.md +236 -0
- open_codex_ui-0.1.4/open_codex_ui.egg-info/PKG-INFO +249 -0
- open_codex_ui-0.1.4/open_codex_ui.egg-info/SOURCES.txt +49 -0
- open_codex_ui-0.1.4/open_codex_ui.egg-info/dependency_links.txt +1 -0
- open_codex_ui-0.1.4/open_codex_ui.egg-info/entry_points.txt +7 -0
- open_codex_ui-0.1.4/open_codex_ui.egg-info/requires.txt +6 -0
- open_codex_ui-0.1.4/open_codex_ui.egg-info/top_level.txt +1 -0
- open_codex_ui-0.1.4/pyproject.toml +41 -0
- open_codex_ui-0.1.4/setup.cfg +4 -0
- open_codex_ui-0.1.4/tests/test_app.py +172 -0
- open_codex_ui-0.1.4/tests/test_codex_ipc_manager.py +2273 -0
- open_codex_ui-0.1.4/tests/test_main.py +24 -0
- open_codex_ui-0.1.4/tests/test_shutdown_signals.py +86 -0
- open_codex_ui-0.1.4/tests/test_yier_cli.py +38 -0
- open_codex_ui-0.1.4/yier_web/__init__.py +6 -0
- open_codex_ui-0.1.4/yier_web/app.py +223 -0
- open_codex_ui-0.1.4/yier_web/auth.py +269 -0
- open_codex_ui-0.1.4/yier_web/cli.py +172 -0
- open_codex_ui-0.1.4/yier_web/codex/__init__.py +3 -0
- open_codex_ui-0.1.4/yier_web/codex/ipc_manager.py +1761 -0
- open_codex_ui-0.1.4/yier_web/codex/session_events.py +110 -0
- open_codex_ui-0.1.4/yier_web/codex/ws_commands.py +299 -0
- open_codex_ui-0.1.4/yier_web/config.py +651 -0
- open_codex_ui-0.1.4/yier_web/directory_picker.py +93 -0
- open_codex_ui-0.1.4/yier_web/event_stream.py +29 -0
- open_codex_ui-0.1.4/yier_web/frontend.py +204 -0
- open_codex_ui-0.1.4/yier_web/routes/__init__.py +17 -0
- open_codex_ui-0.1.4/yier_web/routes/codex.py +573 -0
- open_codex_ui-0.1.4/yier_web/routes/core.py +281 -0
- open_codex_ui-0.1.4/yier_web/schemas.py +534 -0
- open_codex_ui-0.1.4/yier_web/static/assets/CodexEmbedView-CN_-Mhe2.js +1 -0
- open_codex_ui-0.1.4/yier_web/static/assets/CodexView-wpI61iXa.js +606 -0
- open_codex_ui-0.1.4/yier_web/static/assets/LoginView-CELCom2O.js +101 -0
- open_codex_ui-0.1.4/yier_web/static/assets/api-CeihACIV.js +1099 -0
- open_codex_ui-0.1.4/yier_web/static/assets/index-BdFqJ-Kl.css +1 -0
- open_codex_ui-0.1.4/yier_web/static/assets/index-CjVNk6ja.js +183 -0
- open_codex_ui-0.1.4/yier_web/static/assets/index-mSBvq1p8.js +79 -0
- open_codex_ui-0.1.4/yier_web/static/assets/open-codex-ui-icon-DKJ1ZKj4.svg +99 -0
- open_codex_ui-0.1.4/yier_web/static/assets/primeicons-C6QP2o4f.woff2 +0 -0
- open_codex_ui-0.1.4/yier_web/static/assets/primeicons-DMOk5skT.eot +0 -0
- open_codex_ui-0.1.4/yier_web/static/assets/primeicons-Dr5RGzOO.svg +345 -0
- open_codex_ui-0.1.4/yier_web/static/assets/primeicons-MpK4pl85.ttf +0 -0
- open_codex_ui-0.1.4/yier_web/static/assets/primeicons-WjwUDZjB.woff +0 -0
- open_codex_ui-0.1.4/yier_web/static/assets/useCodexWorkspace-6QenDzvb.css +1 -0
- open_codex_ui-0.1.4/yier_web/static/assets/useCodexWorkspace-D1rCOO1x.js +1128 -0
- open_codex_ui-0.1.4/yier_web/static/brand/open-codex-ui-logo.svg +85 -0
- open_codex_ui-0.1.4/yier_web/static/favicon.ico +0 -0
- open_codex_ui-0.1.4/yier_web/static/favicon.svg +99 -0
- open_codex_ui-0.1.4/yier_web/static/index.html +24 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
recursive-include yier_web/static *
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: open-codex-ui
|
|
3
|
+
Version: 0.1.4
|
|
4
|
+
Summary: Remote-friendly web workspace for Codex sessions
|
|
5
|
+
Requires-Python: >=3.12
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: open-codex-bridge>=0.1.9
|
|
8
|
+
Requires-Dist: granian[reload]>=2.7.2
|
|
9
|
+
Requires-Dist: httpx>=0.28.1
|
|
10
|
+
Requires-Dist: litestar>=2.21.1
|
|
11
|
+
Requires-Dist: pydantic>=2.12.5
|
|
12
|
+
Requires-Dist: yier-agents>=0.1.3
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<img src="web/public/brand/open-codex-ui-logo.svg" alt="Open Codex UI" width="520">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
# open-codex-ui
|
|
19
|
+
|
|
20
|
+
Remote-friendly Codex web workspace for continuing sessions from desktop and mobile browsers.
|
|
21
|
+
|
|
22
|
+
## Resume
|
|
23
|
+
[一二Resume](https://baike.baidu.com/item/%E4%B8%80%E4%BA%8C/23434669)
|
|
24
|
+
|
|
25
|
+
## Requirements
|
|
26
|
+
|
|
27
|
+
- [`uv`](https://docs.astral.sh/uv/) for running the published application
|
|
28
|
+
- Python 3.12+, Node.js 20+, and `pnpm` only for source development
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
Run the published application without a permanent installation:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uvx open-codex-ui
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The wheel includes the compiled frontend and starts in production mode. For a
|
|
39
|
+
persistent command, install it as a uv tool:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
uv tool install open-codex-ui
|
|
43
|
+
open-codex-ui
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
For source development, install the backend dependencies:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
uv sync
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Codex workspace support uses the published `open-codex-bridge` package from PyPI.
|
|
53
|
+
|
|
54
|
+
Then install the frontend dependencies:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
cd web
|
|
58
|
+
pnpm install
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Authentication
|
|
62
|
+
|
|
63
|
+
This app now supports password protection for deployed environments.
|
|
64
|
+
|
|
65
|
+
Enable auth with either:
|
|
66
|
+
|
|
67
|
+
- `YIER_AUTH_PASSWORD`
|
|
68
|
+
- `YIER_AUTH_PASSWORD_HASH`
|
|
69
|
+
|
|
70
|
+
Plain password example:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Hashed password example:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
uv run python -c "from yier_web.auth import hash_password; print(hash_password('change-this-password'))"
|
|
80
|
+
export YIER_AUTH_PASSWORD_HASH='paste-generated-hash-here'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Optional auth settings:
|
|
84
|
+
|
|
85
|
+
- `YIER_AUTH_SECRET`: optional extra signing secret for session cookies
|
|
86
|
+
- `YIER_AUTH_SESSION_TTL_HOURS`: cookie lifetime in hours, default is `168`
|
|
87
|
+
- `YIER_CODEX_EMBED_TOKEN`: token for unauthenticated Codex iframe access
|
|
88
|
+
|
|
89
|
+
If neither password variable is set, authentication is disabled.
|
|
90
|
+
|
|
91
|
+
## Codex Iframe Embed
|
|
92
|
+
|
|
93
|
+
See [IFRAME.md](./IFRAME.md) for iframe setup, authentication, and the
|
|
94
|
+
`postMessage` API.
|
|
95
|
+
|
|
96
|
+
## Development Startup
|
|
97
|
+
|
|
98
|
+
Development mode is different from production:
|
|
99
|
+
|
|
100
|
+
- The backend should run with `--debug`
|
|
101
|
+
- The frontend should run with Vite dev server
|
|
102
|
+
- In this mode, the backend proxies frontend requests to `http://127.0.0.1:5173`
|
|
103
|
+
|
|
104
|
+
Recommended one-command startup:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
uv run open-codex-ui-dev
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This starts:
|
|
111
|
+
|
|
112
|
+
- frontend: `pnpm dev`
|
|
113
|
+
- backend: debug mode with reload
|
|
114
|
+
|
|
115
|
+
If you prefer split terminals:
|
|
116
|
+
|
|
117
|
+
Frontend only:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
uv run open-codex-ui-dev-web
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Backend only:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
uv run open-codex-ui-dev-backend
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
You can also override backend bind settings:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
uv run open-codex-ui-dev --host 127.0.0.1 --port 9999
|
|
133
|
+
uv run open-codex-ui-dev-backend --host 127.0.0.1 --port 9999
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Default address:
|
|
137
|
+
|
|
138
|
+
- App: `http://127.0.0.1:9999`
|
|
139
|
+
- Vite dev server: `http://127.0.0.1:5173`
|
|
140
|
+
|
|
141
|
+
Notes:
|
|
142
|
+
|
|
143
|
+
- Keep `pnpm dev` running, otherwise the backend cannot proxy the frontend in debug mode.
|
|
144
|
+
- API requests still go through the Python server at port `9999`.
|
|
145
|
+
|
|
146
|
+
## Production Startup
|
|
147
|
+
|
|
148
|
+
The published wheel includes the compiled frontend and does not use the Vite
|
|
149
|
+
dev server:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
uvx open-codex-ui
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The server listens on `127.0.0.1:9999` by default. Bind to the local network
|
|
156
|
+
explicitly when needed:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
When running from a source checkout, build the frontend before starting:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
uv run open-codex-ui-build-web
|
|
166
|
+
uv run open-codex-ui-prod
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
In production mode:
|
|
170
|
+
|
|
171
|
+
- The backend serves the compiled assets packaged under `yier_web/static`
|
|
172
|
+
- No Vite proxy is used
|
|
173
|
+
- Authentication should usually be enabled with `YIER_AUTH_PASSWORD` or `YIER_AUTH_PASSWORD_HASH`
|
|
174
|
+
|
|
175
|
+
Production example:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
179
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Common Commands
|
|
183
|
+
|
|
184
|
+
Backend tests:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
uv run --all-packages pytest
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Targeted backend tests:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
uv run --all-packages pytest tests/test_codex_backend.py tests/test_codex_workspace.py tests/test_app.py
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Backend compile check:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
uv run python -m compileall yier_web
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Frontend unit tests:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
cd web
|
|
206
|
+
pnpm test:unit
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Frontend type check:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
cd web
|
|
213
|
+
pnpm type-check
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Frontend production build:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
uv run open-codex-ui-build-web
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Startup Summary
|
|
223
|
+
|
|
224
|
+
Development:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
uv run open-codex-ui-dev
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Production:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
234
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Available uv Scripts
|
|
238
|
+
|
|
239
|
+
Development:
|
|
240
|
+
|
|
241
|
+
- `uv run open-codex-ui-dev`: start frontend and backend together
|
|
242
|
+
- `uv run open-codex-ui-dev-web`: start Vite only
|
|
243
|
+
- `uv run open-codex-ui-dev-backend`: start backend only in debug mode
|
|
244
|
+
|
|
245
|
+
Production:
|
|
246
|
+
|
|
247
|
+
- `uvx open-codex-ui`: run the published wheel in production mode
|
|
248
|
+
- `uv run open-codex-ui-build-web`: build frontend assets
|
|
249
|
+
- `uv run open-codex-ui-prod`: start backend in production mode
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="web/public/brand/open-codex-ui-logo.svg" alt="Open Codex UI" width="520">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# open-codex-ui
|
|
6
|
+
|
|
7
|
+
Remote-friendly Codex web workspace for continuing sessions from desktop and mobile browsers.
|
|
8
|
+
|
|
9
|
+
## Resume
|
|
10
|
+
[一二Resume](https://baike.baidu.com/item/%E4%B8%80%E4%BA%8C/23434669)
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
|
|
14
|
+
- [`uv`](https://docs.astral.sh/uv/) for running the published application
|
|
15
|
+
- Python 3.12+, Node.js 20+, and `pnpm` only for source development
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
Run the published application without a permanent installation:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
uvx open-codex-ui
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The wheel includes the compiled frontend and starts in production mode. For a
|
|
26
|
+
persistent command, install it as a uv tool:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
uv tool install open-codex-ui
|
|
30
|
+
open-codex-ui
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
For source development, install the backend dependencies:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
uv sync
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Codex workspace support uses the published `open-codex-bridge` package from PyPI.
|
|
40
|
+
|
|
41
|
+
Then install the frontend dependencies:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cd web
|
|
45
|
+
pnpm install
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Authentication
|
|
49
|
+
|
|
50
|
+
This app now supports password protection for deployed environments.
|
|
51
|
+
|
|
52
|
+
Enable auth with either:
|
|
53
|
+
|
|
54
|
+
- `YIER_AUTH_PASSWORD`
|
|
55
|
+
- `YIER_AUTH_PASSWORD_HASH`
|
|
56
|
+
|
|
57
|
+
Plain password example:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Hashed password example:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
uv run python -c "from yier_web.auth import hash_password; print(hash_password('change-this-password'))"
|
|
67
|
+
export YIER_AUTH_PASSWORD_HASH='paste-generated-hash-here'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Optional auth settings:
|
|
71
|
+
|
|
72
|
+
- `YIER_AUTH_SECRET`: optional extra signing secret for session cookies
|
|
73
|
+
- `YIER_AUTH_SESSION_TTL_HOURS`: cookie lifetime in hours, default is `168`
|
|
74
|
+
- `YIER_CODEX_EMBED_TOKEN`: token for unauthenticated Codex iframe access
|
|
75
|
+
|
|
76
|
+
If neither password variable is set, authentication is disabled.
|
|
77
|
+
|
|
78
|
+
## Codex Iframe Embed
|
|
79
|
+
|
|
80
|
+
See [IFRAME.md](./IFRAME.md) for iframe setup, authentication, and the
|
|
81
|
+
`postMessage` API.
|
|
82
|
+
|
|
83
|
+
## Development Startup
|
|
84
|
+
|
|
85
|
+
Development mode is different from production:
|
|
86
|
+
|
|
87
|
+
- The backend should run with `--debug`
|
|
88
|
+
- The frontend should run with Vite dev server
|
|
89
|
+
- In this mode, the backend proxies frontend requests to `http://127.0.0.1:5173`
|
|
90
|
+
|
|
91
|
+
Recommended one-command startup:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
uv run open-codex-ui-dev
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
This starts:
|
|
98
|
+
|
|
99
|
+
- frontend: `pnpm dev`
|
|
100
|
+
- backend: debug mode with reload
|
|
101
|
+
|
|
102
|
+
If you prefer split terminals:
|
|
103
|
+
|
|
104
|
+
Frontend only:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
uv run open-codex-ui-dev-web
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Backend only:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
uv run open-codex-ui-dev-backend
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
You can also override backend bind settings:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
uv run open-codex-ui-dev --host 127.0.0.1 --port 9999
|
|
120
|
+
uv run open-codex-ui-dev-backend --host 127.0.0.1 --port 9999
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Default address:
|
|
124
|
+
|
|
125
|
+
- App: `http://127.0.0.1:9999`
|
|
126
|
+
- Vite dev server: `http://127.0.0.1:5173`
|
|
127
|
+
|
|
128
|
+
Notes:
|
|
129
|
+
|
|
130
|
+
- Keep `pnpm dev` running, otherwise the backend cannot proxy the frontend in debug mode.
|
|
131
|
+
- API requests still go through the Python server at port `9999`.
|
|
132
|
+
|
|
133
|
+
## Production Startup
|
|
134
|
+
|
|
135
|
+
The published wheel includes the compiled frontend and does not use the Vite
|
|
136
|
+
dev server:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
uvx open-codex-ui
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
The server listens on `127.0.0.1:9999` by default. Bind to the local network
|
|
143
|
+
explicitly when needed:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
When running from a source checkout, build the frontend before starting:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
uv run open-codex-ui-build-web
|
|
153
|
+
uv run open-codex-ui-prod
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
In production mode:
|
|
157
|
+
|
|
158
|
+
- The backend serves the compiled assets packaged under `yier_web/static`
|
|
159
|
+
- No Vite proxy is used
|
|
160
|
+
- Authentication should usually be enabled with `YIER_AUTH_PASSWORD` or `YIER_AUTH_PASSWORD_HASH`
|
|
161
|
+
|
|
162
|
+
Production example:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
166
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Common Commands
|
|
170
|
+
|
|
171
|
+
Backend tests:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
uv run --all-packages pytest
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Targeted backend tests:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
uv run --all-packages pytest tests/test_codex_backend.py tests/test_codex_workspace.py tests/test_app.py
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Backend compile check:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
uv run python -m compileall yier_web
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Frontend unit tests:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
cd web
|
|
193
|
+
pnpm test:unit
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Frontend type check:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
cd web
|
|
200
|
+
pnpm type-check
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Frontend production build:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
uv run open-codex-ui-build-web
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Startup Summary
|
|
210
|
+
|
|
211
|
+
Development:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
uv run open-codex-ui-dev
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Production:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
221
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Available uv Scripts
|
|
225
|
+
|
|
226
|
+
Development:
|
|
227
|
+
|
|
228
|
+
- `uv run open-codex-ui-dev`: start frontend and backend together
|
|
229
|
+
- `uv run open-codex-ui-dev-web`: start Vite only
|
|
230
|
+
- `uv run open-codex-ui-dev-backend`: start backend only in debug mode
|
|
231
|
+
|
|
232
|
+
Production:
|
|
233
|
+
|
|
234
|
+
- `uvx open-codex-ui`: run the published wheel in production mode
|
|
235
|
+
- `uv run open-codex-ui-build-web`: build frontend assets
|
|
236
|
+
- `uv run open-codex-ui-prod`: start backend in production mode
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: open-codex-ui
|
|
3
|
+
Version: 0.1.4
|
|
4
|
+
Summary: Remote-friendly web workspace for Codex sessions
|
|
5
|
+
Requires-Python: >=3.12
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: open-codex-bridge>=0.1.9
|
|
8
|
+
Requires-Dist: granian[reload]>=2.7.2
|
|
9
|
+
Requires-Dist: httpx>=0.28.1
|
|
10
|
+
Requires-Dist: litestar>=2.21.1
|
|
11
|
+
Requires-Dist: pydantic>=2.12.5
|
|
12
|
+
Requires-Dist: yier-agents>=0.1.3
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<img src="web/public/brand/open-codex-ui-logo.svg" alt="Open Codex UI" width="520">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
# open-codex-ui
|
|
19
|
+
|
|
20
|
+
Remote-friendly Codex web workspace for continuing sessions from desktop and mobile browsers.
|
|
21
|
+
|
|
22
|
+
## Resume
|
|
23
|
+
[一二Resume](https://baike.baidu.com/item/%E4%B8%80%E4%BA%8C/23434669)
|
|
24
|
+
|
|
25
|
+
## Requirements
|
|
26
|
+
|
|
27
|
+
- [`uv`](https://docs.astral.sh/uv/) for running the published application
|
|
28
|
+
- Python 3.12+, Node.js 20+, and `pnpm` only for source development
|
|
29
|
+
|
|
30
|
+
## Install
|
|
31
|
+
|
|
32
|
+
Run the published application without a permanent installation:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
uvx open-codex-ui
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The wheel includes the compiled frontend and starts in production mode. For a
|
|
39
|
+
persistent command, install it as a uv tool:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
uv tool install open-codex-ui
|
|
43
|
+
open-codex-ui
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
For source development, install the backend dependencies:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
uv sync
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Codex workspace support uses the published `open-codex-bridge` package from PyPI.
|
|
53
|
+
|
|
54
|
+
Then install the frontend dependencies:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
cd web
|
|
58
|
+
pnpm install
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Authentication
|
|
62
|
+
|
|
63
|
+
This app now supports password protection for deployed environments.
|
|
64
|
+
|
|
65
|
+
Enable auth with either:
|
|
66
|
+
|
|
67
|
+
- `YIER_AUTH_PASSWORD`
|
|
68
|
+
- `YIER_AUTH_PASSWORD_HASH`
|
|
69
|
+
|
|
70
|
+
Plain password example:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Hashed password example:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
uv run python -c "from yier_web.auth import hash_password; print(hash_password('change-this-password'))"
|
|
80
|
+
export YIER_AUTH_PASSWORD_HASH='paste-generated-hash-here'
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Optional auth settings:
|
|
84
|
+
|
|
85
|
+
- `YIER_AUTH_SECRET`: optional extra signing secret for session cookies
|
|
86
|
+
- `YIER_AUTH_SESSION_TTL_HOURS`: cookie lifetime in hours, default is `168`
|
|
87
|
+
- `YIER_CODEX_EMBED_TOKEN`: token for unauthenticated Codex iframe access
|
|
88
|
+
|
|
89
|
+
If neither password variable is set, authentication is disabled.
|
|
90
|
+
|
|
91
|
+
## Codex Iframe Embed
|
|
92
|
+
|
|
93
|
+
See [IFRAME.md](./IFRAME.md) for iframe setup, authentication, and the
|
|
94
|
+
`postMessage` API.
|
|
95
|
+
|
|
96
|
+
## Development Startup
|
|
97
|
+
|
|
98
|
+
Development mode is different from production:
|
|
99
|
+
|
|
100
|
+
- The backend should run with `--debug`
|
|
101
|
+
- The frontend should run with Vite dev server
|
|
102
|
+
- In this mode, the backend proxies frontend requests to `http://127.0.0.1:5173`
|
|
103
|
+
|
|
104
|
+
Recommended one-command startup:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
uv run open-codex-ui-dev
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
This starts:
|
|
111
|
+
|
|
112
|
+
- frontend: `pnpm dev`
|
|
113
|
+
- backend: debug mode with reload
|
|
114
|
+
|
|
115
|
+
If you prefer split terminals:
|
|
116
|
+
|
|
117
|
+
Frontend only:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
uv run open-codex-ui-dev-web
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Backend only:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
uv run open-codex-ui-dev-backend
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
You can also override backend bind settings:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
uv run open-codex-ui-dev --host 127.0.0.1 --port 9999
|
|
133
|
+
uv run open-codex-ui-dev-backend --host 127.0.0.1 --port 9999
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Default address:
|
|
137
|
+
|
|
138
|
+
- App: `http://127.0.0.1:9999`
|
|
139
|
+
- Vite dev server: `http://127.0.0.1:5173`
|
|
140
|
+
|
|
141
|
+
Notes:
|
|
142
|
+
|
|
143
|
+
- Keep `pnpm dev` running, otherwise the backend cannot proxy the frontend in debug mode.
|
|
144
|
+
- API requests still go through the Python server at port `9999`.
|
|
145
|
+
|
|
146
|
+
## Production Startup
|
|
147
|
+
|
|
148
|
+
The published wheel includes the compiled frontend and does not use the Vite
|
|
149
|
+
dev server:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
uvx open-codex-ui
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The server listens on `127.0.0.1:9999` by default. Bind to the local network
|
|
156
|
+
explicitly when needed:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
When running from a source checkout, build the frontend before starting:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
uv run open-codex-ui-build-web
|
|
166
|
+
uv run open-codex-ui-prod
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
In production mode:
|
|
170
|
+
|
|
171
|
+
- The backend serves the compiled assets packaged under `yier_web/static`
|
|
172
|
+
- No Vite proxy is used
|
|
173
|
+
- Authentication should usually be enabled with `YIER_AUTH_PASSWORD` or `YIER_AUTH_PASSWORD_HASH`
|
|
174
|
+
|
|
175
|
+
Production example:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
179
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Common Commands
|
|
183
|
+
|
|
184
|
+
Backend tests:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
uv run --all-packages pytest
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Targeted backend tests:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
uv run --all-packages pytest tests/test_codex_backend.py tests/test_codex_workspace.py tests/test_app.py
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Backend compile check:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
uv run python -m compileall yier_web
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Frontend unit tests:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
cd web
|
|
206
|
+
pnpm test:unit
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Frontend type check:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
cd web
|
|
213
|
+
pnpm type-check
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Frontend production build:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
uv run open-codex-ui-build-web
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Startup Summary
|
|
223
|
+
|
|
224
|
+
Development:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
uv run open-codex-ui-dev
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Production:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
export YIER_AUTH_PASSWORD='change-this-password'
|
|
234
|
+
uvx open-codex-ui --host 0.0.0.0 --port 9999
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Available uv Scripts
|
|
238
|
+
|
|
239
|
+
Development:
|
|
240
|
+
|
|
241
|
+
- `uv run open-codex-ui-dev`: start frontend and backend together
|
|
242
|
+
- `uv run open-codex-ui-dev-web`: start Vite only
|
|
243
|
+
- `uv run open-codex-ui-dev-backend`: start backend only in debug mode
|
|
244
|
+
|
|
245
|
+
Production:
|
|
246
|
+
|
|
247
|
+
- `uvx open-codex-ui`: run the published wheel in production mode
|
|
248
|
+
- `uv run open-codex-ui-build-web`: build frontend assets
|
|
249
|
+
- `uv run open-codex-ui-prod`: start backend in production mode
|