nomadexapp 0.1.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/LICENSE +21 -0
- package/README.md +224 -0
- package/bin/nomadex.mjs +1026 -0
- package/dist/assets/apl-Dgw9L7wA.js +1 -0
- package/dist/assets/asciiarmor-B3T-Ib7X.js +1 -0
- package/dist/assets/asn1-C0KgO0Wt.js +1 -0
- package/dist/assets/asterisk-D7tOY-Ef.js +1 -0
- package/dist/assets/brainfuck-Dr6WXxS2.js +1 -0
- package/dist/assets/clike-DQfG49Bz.js +1 -0
- package/dist/assets/clojure-DsDsbt3V.js +1 -0
- package/dist/assets/cmake-CaoY67QC.js +1 -0
- package/dist/assets/cobol-ng5WMKOY.js +1 -0
- package/dist/assets/coffeescript-L66efR1O.js +1 -0
- package/dist/assets/commonlisp-rk__8_Ow.js +1 -0
- package/dist/assets/crystal-C1BeQSjD.js +1 -0
- package/dist/assets/css-zrdFFahf.js +1 -0
- package/dist/assets/cypher-DTKBhe_T.js +1 -0
- package/dist/assets/d-CDf89RKe.js +1 -0
- package/dist/assets/diff-BY4_GICG.js +1 -0
- package/dist/assets/dist--QplBylv.js +6 -0
- package/dist/assets/dist-BOz4jprC.js +1 -0
- package/dist/assets/dist-BSpuB3dZ.js +1 -0
- package/dist/assets/dist-BVTS1puf.js +1 -0
- package/dist/assets/dist-BvjF9csH.js +1 -0
- package/dist/assets/dist-ByyB_57-.js +11 -0
- package/dist/assets/dist-C5sjJwrm.js +1 -0
- package/dist/assets/dist-C6S96i9v.js +1 -0
- package/dist/assets/dist-CUQQ4au1.js +1 -0
- package/dist/assets/dist-C_ZftsU-.js +1 -0
- package/dist/assets/dist-Cc03jTPl.js +1 -0
- package/dist/assets/dist-CftiQ_Tf.js +1 -0
- package/dist/assets/dist-ChuUwcd4.js +2 -0
- package/dist/assets/dist-Cuva2wRW.js +1 -0
- package/dist/assets/dist-CyFWfPpu.js +9 -0
- package/dist/assets/dist-D6kXrcQY.js +1 -0
- package/dist/assets/dist-DH3Q_V27.js +23 -0
- package/dist/assets/dist-DIQDx3Dq.js +1 -0
- package/dist/assets/dist-DO7LTg3a.js +1 -0
- package/dist/assets/dist-DYBvJnrG.js +1 -0
- package/dist/assets/dist-DhhFPaYP.js +13 -0
- package/dist/assets/dist-elfU6IUT.js +1 -0
- package/dist/assets/dist-mCTXNkQ9.js +1 -0
- package/dist/assets/dockerfile-BBRxgo6-.js +1 -0
- package/dist/assets/dtd-BOpcurKR.js +1 -0
- package/dist/assets/dylan-DrmRAfMX.js +1 -0
- package/dist/assets/ebnf-DgECi_W8.js +1 -0
- package/dist/assets/ecl-CWDhUBvl.js +1 -0
- package/dist/assets/eiffel-DBpGy7gs.js +1 -0
- package/dist/assets/elm-Dj_ZNWRH.js +1 -0
- package/dist/assets/erlang-Br4TQPB7.js +1 -0
- package/dist/assets/factor-bi5FmZTz.js +1 -0
- package/dist/assets/fcl-Dh6ibuJG.js +1 -0
- package/dist/assets/forth-fmpuPpMA.js +1 -0
- package/dist/assets/fortran-CZwiXuJZ.js +1 -0
- package/dist/assets/gas-DotCoURX.js +1 -0
- package/dist/assets/gherkin-Bw4mmeRF.js +1 -0
- package/dist/assets/groovy-D7xek06K.js +1 -0
- package/dist/assets/haskell-D5bv2Ijt.js +1 -0
- package/dist/assets/haxe-UA0z6FgT.js +1 -0
- package/dist/assets/http-DAkDDIPY.js +1 -0
- package/dist/assets/idl-DYj57TA2.js +1 -0
- package/dist/assets/index-BpFNmvYv.js +214 -0
- package/dist/assets/index-De1iEP2f.css +1 -0
- package/dist/assets/javascript-B9Zm1tmO.js +1 -0
- package/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
- package/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/dist/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff +0 -0
- package/dist/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2 +0 -0
- package/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
- package/dist/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2 +0 -0
- package/dist/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff +0 -0
- package/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
- package/dist/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
- package/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
- package/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/dist/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2 +0 -0
- package/dist/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff +0 -0
- package/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/dist/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff +0 -0
- package/dist/assets/julia-CpHdnx_N.js +1 -0
- package/dist/assets/livescript-DcEJKRZ4.js +1 -0
- package/dist/assets/lua-s-LPZohT.js +1 -0
- package/dist/assets/mathematica-c8TKcpav.js +1 -0
- package/dist/assets/mbox-CUr7-CiI.js +1 -0
- package/dist/assets/mirc-pTdL1Ym3.js +1 -0
- package/dist/assets/mllike-DsgO-njf.js +1 -0
- package/dist/assets/modelica-PhVkZonB.js +1 -0
- package/dist/assets/mscgen-ByD0zE8S.js +1 -0
- package/dist/assets/mumps-DhD4kjw9.js +1 -0
- package/dist/assets/nginx-CJc6p_yt.js +1 -0
- package/dist/assets/nsis-BHchP6IS.js +1 -0
- package/dist/assets/ntriples-D1v3iWDa.js +1 -0
- package/dist/assets/octave-D_WvWxqk.js +1 -0
- package/dist/assets/oz-CmdX4m3g.js +1 -0
- package/dist/assets/pascal-hNOkBp6J.js +1 -0
- package/dist/assets/perl-NQdG1b_r.js +1 -0
- package/dist/assets/pig-CXzedlZV.js +1 -0
- package/dist/assets/powershell-RXDVpFWf.js +1 -0
- package/dist/assets/properties-BTvtucqR.js +1 -0
- package/dist/assets/protobuf-zHRYyuba.js +1 -0
- package/dist/assets/pug-C39WZDG2.js +1 -0
- package/dist/assets/puppet-CMNLsBcD.js +1 -0
- package/dist/assets/python-_LoDBjEZ.js +1 -0
- package/dist/assets/q-SLmsw_60.js +1 -0
- package/dist/assets/r-CocOMjw8.js +1 -0
- package/dist/assets/rpm-WgkTpiCm.js +1 -0
- package/dist/assets/ruby-DquNeiGE.js +1 -0
- package/dist/assets/sas-sJxciv6G.js +1 -0
- package/dist/assets/scheme-DEjJDX5Z.js +1 -0
- package/dist/assets/shell-DhAwSAum.js +1 -0
- package/dist/assets/sieve-CcW8-k2R.js +1 -0
- package/dist/assets/simple-mode-BwNcRC8_.js +1 -0
- package/dist/assets/smalltalk-nXkQ5zwM.js +1 -0
- package/dist/assets/solr-DO54nYOg.js +1 -0
- package/dist/assets/sora-latin-400-normal-CRt88UEn.woff2 +0 -0
- package/dist/assets/sora-latin-400-normal-OW7qkl5a.woff +0 -0
- package/dist/assets/sora-latin-600-normal-1_7fyUAY.woff +0 -0
- package/dist/assets/sora-latin-600-normal-Cdg4DaK0.woff2 +0 -0
- package/dist/assets/sora-latin-700-normal-9waGdLWo.woff2 +0 -0
- package/dist/assets/sora-latin-700-normal-BKPfQAnC.woff +0 -0
- package/dist/assets/sora-latin-ext-400-normal-BmhJC382.woff +0 -0
- package/dist/assets/sora-latin-ext-400-normal-Twk1CgKs.woff2 +0 -0
- package/dist/assets/sora-latin-ext-600-normal-Cue1zdhl.woff2 +0 -0
- package/dist/assets/sora-latin-ext-600-normal-DLOJK0Ta.woff +0 -0
- package/dist/assets/sora-latin-ext-700-normal-DM0oy5s8.woff2 +0 -0
- package/dist/assets/sora-latin-ext-700-normal-Oc7uZIYt.woff +0 -0
- package/dist/assets/sparql-CxAS_pwk.js +1 -0
- package/dist/assets/spreadsheet-DWzAMKF2.js +1 -0
- package/dist/assets/sql-C_mHN2XB.js +1 -0
- package/dist/assets/stex-BmuQ0Xsx.js +1 -0
- package/dist/assets/stylus-CQ8h_EBd.js +1 -0
- package/dist/assets/swift-D0Eq5raO.js +1 -0
- package/dist/assets/tcl-D7utka2n.js +1 -0
- package/dist/assets/textile-XEeoev-k.js +1 -0
- package/dist/assets/tiddlywiki-CecErCuV.js +1 -0
- package/dist/assets/tiki-BlL-kki4.js +1 -0
- package/dist/assets/toml-mmtg9INI.js +1 -0
- package/dist/assets/troff-Crc1ZuaH.js +1 -0
- package/dist/assets/ttcn-Cri02b1f.js +1 -0
- package/dist/assets/ttcn-cfg--4YiJN4x.js +1 -0
- package/dist/assets/turtle-CUuoUr2N.js +1 -0
- package/dist/assets/vb-BrHulZxe.js +1 -0
- package/dist/assets/vbscript-vyHcteNE.js +1 -0
- package/dist/assets/velocity-DN4o8rq-.js +1 -0
- package/dist/assets/verilog-B0DGHLZN.js +1 -0
- package/dist/assets/vhdl-WeAF-qEm.js +1 -0
- package/dist/assets/webidl-C_bKeJT2.js +1 -0
- package/dist/assets/xquery-CLyH3kVm.js +1 -0
- package/dist/assets/yacas-Dq3LuV9B.js +1 -0
- package/dist/assets/z80-Br7weo_y.js +1 -0
- package/dist/favicon.svg +54 -0
- package/dist/icons.svg +24 -0
- package/dist/index.html +59 -0
- package/docs/ARCHITECTURE.md +194 -0
- package/docs/SETUP.md +242 -0
- package/docs/ui-desktop.png +0 -0
- package/docs/ui-desktop.svg +190 -0
- package/docs/ui-mobile.png +0 -0
- package/docs/ui-mobile.svg +113 -0
- package/package.json +79 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 xaenic
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Nomadex
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="public/favicon.svg" alt="Nomadex logo" width="72" />
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
Remote web UI for local coding agents.
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://nodejs.org/">
|
|
13
|
+
<img src="https://img.shields.io/badge/Node-20%2B-339933?style=flat-square&logo=node.js&logoColor=white" alt="Node 20+" />
|
|
14
|
+
</a>
|
|
15
|
+
<a href="./LICENSE">
|
|
16
|
+
<img src="https://img.shields.io/badge/License-MIT-f2c94c?style=flat-square" alt="MIT License" />
|
|
17
|
+
</a>
|
|
18
|
+
<img src="https://img.shields.io/badge/UI-Web%20%2B%20Mobile-1f7aec?style=flat-square" alt="Web and mobile UI" />
|
|
19
|
+
<img src="https://img.shields.io/badge/Providers-Codex%20%7C%20OpenCode%20%7C%20Qwen%20Code-7b61ff?style=flat-square" alt="Providers" />
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
Nomadex is a browser workspace for running and supervising coding agents on your own machine.
|
|
23
|
+
|
|
24
|
+
The repo is built for the workflow where the real agent, repository, CLI tools, and credentials stay on your workstation, server, or home box, while the UI stays reachable from your laptop, tablet, or phone. You can open the session remotely, watch live output, inspect files and diffs, answer approvals, steer the current turn, and keep moving without living in one terminal window.
|
|
25
|
+
|
|
26
|
+
If you are looking for a Codex web UI, OpenCode web UI, or Qwen Code web UI that works well on mobile, that is the direction Nomadex is built for. The app layer is also being shaped to support future providers such as Claude Code and Antigravity without rebuilding the whole shell.
|
|
27
|
+
|
|
28
|
+
## 🖼️ Screenshots
|
|
29
|
+
|
|
30
|
+
### 🖥️ Desktop
|
|
31
|
+
|
|
32
|
+

|
|
33
|
+
|
|
34
|
+
### 📱 Mobile
|
|
35
|
+
|
|
36
|
+

|
|
37
|
+
|
|
38
|
+
## ✨ Why Nomadex
|
|
39
|
+
|
|
40
|
+
- Keep the actual execution environment local and under your control.
|
|
41
|
+
- Supervise long-running agent work from your phone or another machine.
|
|
42
|
+
- Stay in one threaded workspace for chat, plans, files, diffs, approvals, and terminal output.
|
|
43
|
+
- Avoid exposing a raw local CLI session directly just to monitor progress remotely.
|
|
44
|
+
- Use a UI that is shaped for remote, mobile, and browser-first workflows instead of a desktop-only shell.
|
|
45
|
+
|
|
46
|
+
## 🚀 Feature Highlights
|
|
47
|
+
|
|
48
|
+
| Area | What you get |
|
|
49
|
+
| --- | --- |
|
|
50
|
+
| Live sessions | Real-time threaded chat over the local app-server bridge |
|
|
51
|
+
| Mobile UX | Responsive workspace shell, tail-first transcript loading, and remote-friendly controls |
|
|
52
|
+
| Files and diffs | Explorer, editor, diff review, changed-file summaries, and local file browse routes |
|
|
53
|
+
| Composer | File attachments, image attachments, image paste, queueing, steer, and prompt tools |
|
|
54
|
+
| Runtime controls | Approvals, question prompts, rollback support, and in-progress visibility |
|
|
55
|
+
| Provider layer | Codex as the reference live path, plus OpenCode and Qwen Code integration work |
|
|
56
|
+
| Launch flow | Packaged `npx nomadexapp` launcher with app-server startup, password gate, and update check |
|
|
57
|
+
|
|
58
|
+
## 🤖 Providers
|
|
59
|
+
|
|
60
|
+
| Provider | Status | Notes |
|
|
61
|
+
| --- | --- | --- |
|
|
62
|
+
| Codex | Live | Main reference path through the local app-server bridge |
|
|
63
|
+
| OpenCode | Integrated | CLI-backed path with provider-aware model handling |
|
|
64
|
+
| Qwen Code | Integrated | CLI-backed path with local setup/auth flow support |
|
|
65
|
+
| Claude Code | Planned | Target provider for the shared shell architecture |
|
|
66
|
+
| Antigravity | Planned | Scaffolded direction, not yet a complete live runtime |
|
|
67
|
+
|
|
68
|
+
## ⚡ Quick Start
|
|
69
|
+
|
|
70
|
+
### 📦 Packaged launcher
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
npx nomadexapp
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The packaged launcher:
|
|
77
|
+
|
|
78
|
+
1. serves the built Nomadex UI
|
|
79
|
+
2. checks whether a Codex app-server is already healthy on `ws://127.0.0.1:3901`
|
|
80
|
+
3. starts one if needed
|
|
81
|
+
4. binds the UI on `0.0.0.0:3784`
|
|
82
|
+
5. proxies the browser websocket through `/codex-ws`
|
|
83
|
+
6. prints a UI password and requires it before the browser can open the workspace
|
|
84
|
+
7. checks whether a newer npm release is available and prompts before startup when appropriate
|
|
85
|
+
|
|
86
|
+
Open:
|
|
87
|
+
|
|
88
|
+
- 🏠 Local machine: `http://127.0.0.1:3784`
|
|
89
|
+
- 🌐 Another device on the same network: `http://<your-lan-ip>:3784`
|
|
90
|
+
|
|
91
|
+
### 🛠️ Repo development
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npm install
|
|
95
|
+
npm run dev:live
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Use `dev:live` when you are developing Nomadex itself and want the Vite development workflow.
|
|
99
|
+
|
|
100
|
+
## 🌍 Remote Access
|
|
101
|
+
|
|
102
|
+
Preferred setup: ZeroTier.
|
|
103
|
+
|
|
104
|
+
Why:
|
|
105
|
+
|
|
106
|
+
- it keeps Nomadex on a private overlay network
|
|
107
|
+
- it is safer than exposing the local UI directly to the internet
|
|
108
|
+
- it works well for phone access from anywhere
|
|
109
|
+
- it matches the core model of keeping the real agent local to your machine
|
|
110
|
+
|
|
111
|
+
Recommended flow:
|
|
112
|
+
|
|
113
|
+
1. Install ZeroTier on the host machine and on your phone.
|
|
114
|
+
2. Join both devices to the same ZeroTier network.
|
|
115
|
+
3. Run `npx nomadexapp` on the host machine.
|
|
116
|
+
4. Open `http://<host-zerotier-ip>:3784` on the remote device.
|
|
117
|
+
|
|
118
|
+
Tailscale or SSH tunneling also work well. Avoid exposing the raw Nomadex port directly to the public internet without real network and auth controls in front of it.
|
|
119
|
+
|
|
120
|
+
## 🧰 Common Commands
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npx nomadexapp
|
|
124
|
+
npm run dev:live
|
|
125
|
+
npm run app-server
|
|
126
|
+
npm run build
|
|
127
|
+
npm run preview
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 🏗️ Architecture
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
Browser or phone
|
|
134
|
+
-> Nomadex UI host
|
|
135
|
+
-> same-origin websocket proxy
|
|
136
|
+
-> local coding agent bridge
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Main layers:
|
|
140
|
+
|
|
141
|
+
- `src/app/WorkspaceShell.tsx`: routing, shell state, active thread, overlays, and composer orchestration
|
|
142
|
+
- `src/app/WorkspaceView.tsx`: reusable workspace UI sections
|
|
143
|
+
- `src/app/components/*`: transcript, settings, terminal, summaries, approvals, and supporting cards
|
|
144
|
+
- `src/app/services/runtime/*`: websocket lifecycle, uploads, turn mutations, auth/setup flows, and local runtime actions
|
|
145
|
+
- `src/app/services/presentation/*`: render shaping for transcript items, attachments, file links, and summaries
|
|
146
|
+
- `src/app/services/providers/*`: provider-specific transport and path conventions
|
|
147
|
+
|
|
148
|
+
More detail: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
|
149
|
+
|
|
150
|
+
## 🎯 Use Cases
|
|
151
|
+
|
|
152
|
+
- Remote coding companion for a workstation you access over SSH
|
|
153
|
+
- Phone-friendly control panel for long-running local agent sessions
|
|
154
|
+
- Reviewing changed files and diffs before asking the agent to continue
|
|
155
|
+
- Sending steer prompts while away from your desk
|
|
156
|
+
- Handling approvals and question prompts from mobile
|
|
157
|
+
- Watching shell output and file edits on a private remote box or home lab machine
|
|
158
|
+
|
|
159
|
+
## 📌 Status
|
|
160
|
+
|
|
161
|
+
### ✅ Done
|
|
162
|
+
|
|
163
|
+
- [x] Live threaded workspace over the local websocket bridge
|
|
164
|
+
- [x] Mobile-friendly shell and long-thread transcript handling
|
|
165
|
+
- [x] File explorer, editor, diff review, and terminal surfaces
|
|
166
|
+
- [x] File and image attachments, including pasted images
|
|
167
|
+
- [x] Queueing, steer, approvals, and in-progress turn visibility
|
|
168
|
+
- [x] Theme picker, settings, skills library, and account/provider surfaces
|
|
169
|
+
- [x] Local workspace browsing and uploaded asset handling
|
|
170
|
+
- [x] Provider-aware launcher and app layer
|
|
171
|
+
|
|
172
|
+
### 🧭 Next
|
|
173
|
+
|
|
174
|
+
- [ ] Publish the first public npm release
|
|
175
|
+
- [ ] Harden the packaged launcher for more providers and remote auth flows
|
|
176
|
+
- [ ] Extend provider parity beyond the current Codex-first runtime path
|
|
177
|
+
- [ ] Improve durable cross-provider thread memory and reload persistence
|
|
178
|
+
- [ ] Tighten remote access hardening for internet-facing setups
|
|
179
|
+
- [ ] Keep improving performance on very long mobile sessions
|
|
180
|
+
|
|
181
|
+
## 📚 Documentation
|
|
182
|
+
|
|
183
|
+
- Setup and launch: [docs/SETUP.md](docs/SETUP.md)
|
|
184
|
+
- Architecture and extension points: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
|
185
|
+
|
|
186
|
+
## 🚢 Publishing
|
|
187
|
+
|
|
188
|
+
- `main` now has GitHub Actions for lint, build, and npm publish.
|
|
189
|
+
- The publish workflow only releases when the version in `package.json` is not already on npm.
|
|
190
|
+
- Add a repo secret named `NPM_TOKEN` before relying on automatic publish.
|
|
191
|
+
- To ship an update, bump the package version, push to `main`, and GitHub Actions will publish `nomadexapp` automatically.
|
|
192
|
+
|
|
193
|
+
## 🤝 Contributing
|
|
194
|
+
|
|
195
|
+
Contributions are welcome.
|
|
196
|
+
|
|
197
|
+
Useful areas:
|
|
198
|
+
|
|
199
|
+
- provider integrations
|
|
200
|
+
- launcher and packaging improvements
|
|
201
|
+
- remote access hardening
|
|
202
|
+
- mobile performance and long-thread rendering
|
|
203
|
+
- auth and session UX
|
|
204
|
+
- editor, diff, and terminal polish
|
|
205
|
+
|
|
206
|
+
Open an issue or PR with a focused change. Small, well-scoped improvements are much easier to review and land than broad refactors.
|
|
207
|
+
|
|
208
|
+
## 📝 Notes
|
|
209
|
+
|
|
210
|
+
- Uploaded assets currently land under `.codex-web/uploads` and `.codex-web/uploads/files`.
|
|
211
|
+
- Codex is still the strongest live provider path today.
|
|
212
|
+
- Set `NOMADEX_PASSWORD` if you want a stable password instead of the generated per-launch password.
|
|
213
|
+
- `npm run preview` is useful for checking the built shell in the repo, while `npx nomadexapp` is the packaged launcher flow.
|
|
214
|
+
|
|
215
|
+
## 🐛 Troubleshooting
|
|
216
|
+
|
|
217
|
+
- `UI port 3784 is already in use`
|
|
218
|
+
Stop the old Nomadex process or choose a different port.
|
|
219
|
+
- `Port 3901 ... is already in use, but it is not responding like a Codex app-server`
|
|
220
|
+
Another process is already on the websocket port. Stop it or point Nomadex to a different bridge.
|
|
221
|
+
- Browser still shows an old favicon or theme color
|
|
222
|
+
Hard refresh, then fully close and reopen the tab once. Mobile browsers cache this aggressively.
|
|
223
|
+
|
|
224
|
+
For the full setup guide, see [docs/SETUP.md](docs/SETUP.md).
|