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.
Files changed (51) hide show
  1. open_codex_ui-0.1.4/MANIFEST.in +1 -0
  2. open_codex_ui-0.1.4/PKG-INFO +249 -0
  3. open_codex_ui-0.1.4/README.md +236 -0
  4. open_codex_ui-0.1.4/open_codex_ui.egg-info/PKG-INFO +249 -0
  5. open_codex_ui-0.1.4/open_codex_ui.egg-info/SOURCES.txt +49 -0
  6. open_codex_ui-0.1.4/open_codex_ui.egg-info/dependency_links.txt +1 -0
  7. open_codex_ui-0.1.4/open_codex_ui.egg-info/entry_points.txt +7 -0
  8. open_codex_ui-0.1.4/open_codex_ui.egg-info/requires.txt +6 -0
  9. open_codex_ui-0.1.4/open_codex_ui.egg-info/top_level.txt +1 -0
  10. open_codex_ui-0.1.4/pyproject.toml +41 -0
  11. open_codex_ui-0.1.4/setup.cfg +4 -0
  12. open_codex_ui-0.1.4/tests/test_app.py +172 -0
  13. open_codex_ui-0.1.4/tests/test_codex_ipc_manager.py +2273 -0
  14. open_codex_ui-0.1.4/tests/test_main.py +24 -0
  15. open_codex_ui-0.1.4/tests/test_shutdown_signals.py +86 -0
  16. open_codex_ui-0.1.4/tests/test_yier_cli.py +38 -0
  17. open_codex_ui-0.1.4/yier_web/__init__.py +6 -0
  18. open_codex_ui-0.1.4/yier_web/app.py +223 -0
  19. open_codex_ui-0.1.4/yier_web/auth.py +269 -0
  20. open_codex_ui-0.1.4/yier_web/cli.py +172 -0
  21. open_codex_ui-0.1.4/yier_web/codex/__init__.py +3 -0
  22. open_codex_ui-0.1.4/yier_web/codex/ipc_manager.py +1761 -0
  23. open_codex_ui-0.1.4/yier_web/codex/session_events.py +110 -0
  24. open_codex_ui-0.1.4/yier_web/codex/ws_commands.py +299 -0
  25. open_codex_ui-0.1.4/yier_web/config.py +651 -0
  26. open_codex_ui-0.1.4/yier_web/directory_picker.py +93 -0
  27. open_codex_ui-0.1.4/yier_web/event_stream.py +29 -0
  28. open_codex_ui-0.1.4/yier_web/frontend.py +204 -0
  29. open_codex_ui-0.1.4/yier_web/routes/__init__.py +17 -0
  30. open_codex_ui-0.1.4/yier_web/routes/codex.py +573 -0
  31. open_codex_ui-0.1.4/yier_web/routes/core.py +281 -0
  32. open_codex_ui-0.1.4/yier_web/schemas.py +534 -0
  33. open_codex_ui-0.1.4/yier_web/static/assets/CodexEmbedView-CN_-Mhe2.js +1 -0
  34. open_codex_ui-0.1.4/yier_web/static/assets/CodexView-wpI61iXa.js +606 -0
  35. open_codex_ui-0.1.4/yier_web/static/assets/LoginView-CELCom2O.js +101 -0
  36. open_codex_ui-0.1.4/yier_web/static/assets/api-CeihACIV.js +1099 -0
  37. open_codex_ui-0.1.4/yier_web/static/assets/index-BdFqJ-Kl.css +1 -0
  38. open_codex_ui-0.1.4/yier_web/static/assets/index-CjVNk6ja.js +183 -0
  39. open_codex_ui-0.1.4/yier_web/static/assets/index-mSBvq1p8.js +79 -0
  40. open_codex_ui-0.1.4/yier_web/static/assets/open-codex-ui-icon-DKJ1ZKj4.svg +99 -0
  41. open_codex_ui-0.1.4/yier_web/static/assets/primeicons-C6QP2o4f.woff2 +0 -0
  42. open_codex_ui-0.1.4/yier_web/static/assets/primeicons-DMOk5skT.eot +0 -0
  43. open_codex_ui-0.1.4/yier_web/static/assets/primeicons-Dr5RGzOO.svg +345 -0
  44. open_codex_ui-0.1.4/yier_web/static/assets/primeicons-MpK4pl85.ttf +0 -0
  45. open_codex_ui-0.1.4/yier_web/static/assets/primeicons-WjwUDZjB.woff +0 -0
  46. open_codex_ui-0.1.4/yier_web/static/assets/useCodexWorkspace-6QenDzvb.css +1 -0
  47. open_codex_ui-0.1.4/yier_web/static/assets/useCodexWorkspace-D1rCOO1x.js +1128 -0
  48. open_codex_ui-0.1.4/yier_web/static/brand/open-codex-ui-logo.svg +85 -0
  49. open_codex_ui-0.1.4/yier_web/static/favicon.ico +0 -0
  50. open_codex_ui-0.1.4/yier_web/static/favicon.svg +99 -0
  51. 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