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.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/bin/nomadex.mjs +1026 -0
  4. package/dist/assets/apl-Dgw9L7wA.js +1 -0
  5. package/dist/assets/asciiarmor-B3T-Ib7X.js +1 -0
  6. package/dist/assets/asn1-C0KgO0Wt.js +1 -0
  7. package/dist/assets/asterisk-D7tOY-Ef.js +1 -0
  8. package/dist/assets/brainfuck-Dr6WXxS2.js +1 -0
  9. package/dist/assets/clike-DQfG49Bz.js +1 -0
  10. package/dist/assets/clojure-DsDsbt3V.js +1 -0
  11. package/dist/assets/cmake-CaoY67QC.js +1 -0
  12. package/dist/assets/cobol-ng5WMKOY.js +1 -0
  13. package/dist/assets/coffeescript-L66efR1O.js +1 -0
  14. package/dist/assets/commonlisp-rk__8_Ow.js +1 -0
  15. package/dist/assets/crystal-C1BeQSjD.js +1 -0
  16. package/dist/assets/css-zrdFFahf.js +1 -0
  17. package/dist/assets/cypher-DTKBhe_T.js +1 -0
  18. package/dist/assets/d-CDf89RKe.js +1 -0
  19. package/dist/assets/diff-BY4_GICG.js +1 -0
  20. package/dist/assets/dist--QplBylv.js +6 -0
  21. package/dist/assets/dist-BOz4jprC.js +1 -0
  22. package/dist/assets/dist-BSpuB3dZ.js +1 -0
  23. package/dist/assets/dist-BVTS1puf.js +1 -0
  24. package/dist/assets/dist-BvjF9csH.js +1 -0
  25. package/dist/assets/dist-ByyB_57-.js +11 -0
  26. package/dist/assets/dist-C5sjJwrm.js +1 -0
  27. package/dist/assets/dist-C6S96i9v.js +1 -0
  28. package/dist/assets/dist-CUQQ4au1.js +1 -0
  29. package/dist/assets/dist-C_ZftsU-.js +1 -0
  30. package/dist/assets/dist-Cc03jTPl.js +1 -0
  31. package/dist/assets/dist-CftiQ_Tf.js +1 -0
  32. package/dist/assets/dist-ChuUwcd4.js +2 -0
  33. package/dist/assets/dist-Cuva2wRW.js +1 -0
  34. package/dist/assets/dist-CyFWfPpu.js +9 -0
  35. package/dist/assets/dist-D6kXrcQY.js +1 -0
  36. package/dist/assets/dist-DH3Q_V27.js +23 -0
  37. package/dist/assets/dist-DIQDx3Dq.js +1 -0
  38. package/dist/assets/dist-DO7LTg3a.js +1 -0
  39. package/dist/assets/dist-DYBvJnrG.js +1 -0
  40. package/dist/assets/dist-DhhFPaYP.js +13 -0
  41. package/dist/assets/dist-elfU6IUT.js +1 -0
  42. package/dist/assets/dist-mCTXNkQ9.js +1 -0
  43. package/dist/assets/dockerfile-BBRxgo6-.js +1 -0
  44. package/dist/assets/dtd-BOpcurKR.js +1 -0
  45. package/dist/assets/dylan-DrmRAfMX.js +1 -0
  46. package/dist/assets/ebnf-DgECi_W8.js +1 -0
  47. package/dist/assets/ecl-CWDhUBvl.js +1 -0
  48. package/dist/assets/eiffel-DBpGy7gs.js +1 -0
  49. package/dist/assets/elm-Dj_ZNWRH.js +1 -0
  50. package/dist/assets/erlang-Br4TQPB7.js +1 -0
  51. package/dist/assets/factor-bi5FmZTz.js +1 -0
  52. package/dist/assets/fcl-Dh6ibuJG.js +1 -0
  53. package/dist/assets/forth-fmpuPpMA.js +1 -0
  54. package/dist/assets/fortran-CZwiXuJZ.js +1 -0
  55. package/dist/assets/gas-DotCoURX.js +1 -0
  56. package/dist/assets/gherkin-Bw4mmeRF.js +1 -0
  57. package/dist/assets/groovy-D7xek06K.js +1 -0
  58. package/dist/assets/haskell-D5bv2Ijt.js +1 -0
  59. package/dist/assets/haxe-UA0z6FgT.js +1 -0
  60. package/dist/assets/http-DAkDDIPY.js +1 -0
  61. package/dist/assets/idl-DYj57TA2.js +1 -0
  62. package/dist/assets/index-BpFNmvYv.js +214 -0
  63. package/dist/assets/index-De1iEP2f.css +1 -0
  64. package/dist/assets/javascript-B9Zm1tmO.js +1 -0
  65. package/dist/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  66. package/dist/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  67. package/dist/assets/jetbrains-mono-cyrillic-600-normal-8K4wrrwR.woff +0 -0
  68. package/dist/assets/jetbrains-mono-cyrillic-600-normal-EVf6-Yzo.woff2 +0 -0
  69. package/dist/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  70. package/dist/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  71. package/dist/assets/jetbrains-mono-greek-600-normal-H7WoG9Et.woff2 +0 -0
  72. package/dist/assets/jetbrains-mono-greek-600-normal-mc2nkWzM.woff +0 -0
  73. package/dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  74. package/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  75. package/dist/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
  76. package/dist/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
  77. package/dist/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  78. package/dist/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  79. package/dist/assets/jetbrains-mono-latin-ext-600-normal-BfB_LPfz.woff2 +0 -0
  80. package/dist/assets/jetbrains-mono-latin-ext-600-normal-DObL3zCW.woff +0 -0
  81. package/dist/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  82. package/dist/assets/jetbrains-mono-vietnamese-600-normal-OWROknRo.woff +0 -0
  83. package/dist/assets/julia-CpHdnx_N.js +1 -0
  84. package/dist/assets/livescript-DcEJKRZ4.js +1 -0
  85. package/dist/assets/lua-s-LPZohT.js +1 -0
  86. package/dist/assets/mathematica-c8TKcpav.js +1 -0
  87. package/dist/assets/mbox-CUr7-CiI.js +1 -0
  88. package/dist/assets/mirc-pTdL1Ym3.js +1 -0
  89. package/dist/assets/mllike-DsgO-njf.js +1 -0
  90. package/dist/assets/modelica-PhVkZonB.js +1 -0
  91. package/dist/assets/mscgen-ByD0zE8S.js +1 -0
  92. package/dist/assets/mumps-DhD4kjw9.js +1 -0
  93. package/dist/assets/nginx-CJc6p_yt.js +1 -0
  94. package/dist/assets/nsis-BHchP6IS.js +1 -0
  95. package/dist/assets/ntriples-D1v3iWDa.js +1 -0
  96. package/dist/assets/octave-D_WvWxqk.js +1 -0
  97. package/dist/assets/oz-CmdX4m3g.js +1 -0
  98. package/dist/assets/pascal-hNOkBp6J.js +1 -0
  99. package/dist/assets/perl-NQdG1b_r.js +1 -0
  100. package/dist/assets/pig-CXzedlZV.js +1 -0
  101. package/dist/assets/powershell-RXDVpFWf.js +1 -0
  102. package/dist/assets/properties-BTvtucqR.js +1 -0
  103. package/dist/assets/protobuf-zHRYyuba.js +1 -0
  104. package/dist/assets/pug-C39WZDG2.js +1 -0
  105. package/dist/assets/puppet-CMNLsBcD.js +1 -0
  106. package/dist/assets/python-_LoDBjEZ.js +1 -0
  107. package/dist/assets/q-SLmsw_60.js +1 -0
  108. package/dist/assets/r-CocOMjw8.js +1 -0
  109. package/dist/assets/rpm-WgkTpiCm.js +1 -0
  110. package/dist/assets/ruby-DquNeiGE.js +1 -0
  111. package/dist/assets/sas-sJxciv6G.js +1 -0
  112. package/dist/assets/scheme-DEjJDX5Z.js +1 -0
  113. package/dist/assets/shell-DhAwSAum.js +1 -0
  114. package/dist/assets/sieve-CcW8-k2R.js +1 -0
  115. package/dist/assets/simple-mode-BwNcRC8_.js +1 -0
  116. package/dist/assets/smalltalk-nXkQ5zwM.js +1 -0
  117. package/dist/assets/solr-DO54nYOg.js +1 -0
  118. package/dist/assets/sora-latin-400-normal-CRt88UEn.woff2 +0 -0
  119. package/dist/assets/sora-latin-400-normal-OW7qkl5a.woff +0 -0
  120. package/dist/assets/sora-latin-600-normal-1_7fyUAY.woff +0 -0
  121. package/dist/assets/sora-latin-600-normal-Cdg4DaK0.woff2 +0 -0
  122. package/dist/assets/sora-latin-700-normal-9waGdLWo.woff2 +0 -0
  123. package/dist/assets/sora-latin-700-normal-BKPfQAnC.woff +0 -0
  124. package/dist/assets/sora-latin-ext-400-normal-BmhJC382.woff +0 -0
  125. package/dist/assets/sora-latin-ext-400-normal-Twk1CgKs.woff2 +0 -0
  126. package/dist/assets/sora-latin-ext-600-normal-Cue1zdhl.woff2 +0 -0
  127. package/dist/assets/sora-latin-ext-600-normal-DLOJK0Ta.woff +0 -0
  128. package/dist/assets/sora-latin-ext-700-normal-DM0oy5s8.woff2 +0 -0
  129. package/dist/assets/sora-latin-ext-700-normal-Oc7uZIYt.woff +0 -0
  130. package/dist/assets/sparql-CxAS_pwk.js +1 -0
  131. package/dist/assets/spreadsheet-DWzAMKF2.js +1 -0
  132. package/dist/assets/sql-C_mHN2XB.js +1 -0
  133. package/dist/assets/stex-BmuQ0Xsx.js +1 -0
  134. package/dist/assets/stylus-CQ8h_EBd.js +1 -0
  135. package/dist/assets/swift-D0Eq5raO.js +1 -0
  136. package/dist/assets/tcl-D7utka2n.js +1 -0
  137. package/dist/assets/textile-XEeoev-k.js +1 -0
  138. package/dist/assets/tiddlywiki-CecErCuV.js +1 -0
  139. package/dist/assets/tiki-BlL-kki4.js +1 -0
  140. package/dist/assets/toml-mmtg9INI.js +1 -0
  141. package/dist/assets/troff-Crc1ZuaH.js +1 -0
  142. package/dist/assets/ttcn-Cri02b1f.js +1 -0
  143. package/dist/assets/ttcn-cfg--4YiJN4x.js +1 -0
  144. package/dist/assets/turtle-CUuoUr2N.js +1 -0
  145. package/dist/assets/vb-BrHulZxe.js +1 -0
  146. package/dist/assets/vbscript-vyHcteNE.js +1 -0
  147. package/dist/assets/velocity-DN4o8rq-.js +1 -0
  148. package/dist/assets/verilog-B0DGHLZN.js +1 -0
  149. package/dist/assets/vhdl-WeAF-qEm.js +1 -0
  150. package/dist/assets/webidl-C_bKeJT2.js +1 -0
  151. package/dist/assets/xquery-CLyH3kVm.js +1 -0
  152. package/dist/assets/yacas-Dq3LuV9B.js +1 -0
  153. package/dist/assets/z80-Br7weo_y.js +1 -0
  154. package/dist/favicon.svg +54 -0
  155. package/dist/icons.svg +24 -0
  156. package/dist/index.html +59 -0
  157. package/docs/ARCHITECTURE.md +194 -0
  158. package/docs/SETUP.md +242 -0
  159. package/docs/ui-desktop.png +0 -0
  160. package/docs/ui-desktop.svg +190 -0
  161. package/docs/ui-mobile.png +0 -0
  162. package/docs/ui-mobile.svg +113 -0
  163. package/package.json +79 -0
package/docs/SETUP.md ADDED
@@ -0,0 +1,242 @@
1
+ # Setup
2
+
3
+ This guide covers the practical Nomadex setup for the workflow it was built for:
4
+
5
+ - the coding agent runs on your own machine
6
+ - the repo and credentials stay on that machine
7
+ - you open Nomadex from your phone, tablet, or another computer to monitor and steer the run remotely
8
+
9
+ ## 1. Prerequisites
10
+
11
+ - Node.js 20 or newer recommended
12
+ - `npm`
13
+ - `codex` CLI available on `PATH`
14
+
15
+ Quick check:
16
+
17
+ ```bash
18
+ codex --version
19
+ ```
20
+
21
+ ## 2. Recommended Launch
22
+
23
+ Normal use:
24
+
25
+ ```bash
26
+ npx nomadexapp
27
+ ```
28
+
29
+ Expected result:
30
+
31
+ - Codex app-server on `ws://127.0.0.1:3901`
32
+ - Nomadex UI on `http://127.0.0.1:3784`
33
+ - Browser websocket proxy on `/codex-ws`
34
+
35
+ `npx nomadexapp` is the packaged launcher path. It:
36
+
37
+ - it reuses an existing app-server only if `/readyz` succeeds
38
+ - it starts the app-server if needed
39
+ - it fails if the UI port is already busy
40
+ - it binds the UI to `0.0.0.0`, which is useful for LAN and phone access
41
+ - it serves the built UI directly instead of running Vite dev mode
42
+ - it prints a UI password in the terminal and blocks browser access until that password is entered
43
+ - it can prompt for a newer npm package version before startup
44
+
45
+ Repo development:
46
+
47
+ ```bash
48
+ npm install
49
+ npm run dev:live
50
+ ```
51
+
52
+ Use `dev:live` when you are editing Nomadex itself and want the Vite development workflow.
53
+
54
+ ## 3. Preferred Remote Access
55
+
56
+ Preferred setup: ZeroTier.
57
+
58
+ Why ZeroTier is the preferred path for Nomadex:
59
+
60
+ - it keeps the UI on a private overlay network
61
+ - it is safer than exposing the raw dev server directly
62
+ - it works well for phone access from anywhere
63
+ - it preserves the model where the real agent stays local to your machine
64
+
65
+ Recommended flow:
66
+
67
+ 1. Install ZeroTier on the host machine.
68
+ 2. Install ZeroTier on your phone or remote laptop.
69
+ 3. Join both devices to the same ZeroTier network.
70
+ 4. Run `npx nomadexapp` on the host machine.
71
+ 5. Open `http://<host-zerotier-ip>:3784` from the remote device.
72
+
73
+ Alternative options:
74
+
75
+ - Tailscale
76
+ - SSH tunnel
77
+ - reverse proxy with real auth in front of Nomadex
78
+
79
+ Do not expose the raw Nomadex dev server directly to the public internet.
80
+
81
+ ## 4. LAN And Mobile Access
82
+
83
+ On the same local network:
84
+
85
+ 1. Run `npx nomadexapp` on the host machine.
86
+ 2. Or run `npm run dev:live` if you are using the repo development flow.
87
+ 3. Find the machine’s LAN IP.
88
+ 4. Open `http://<lan-ip>:3784` from your phone or tablet.
89
+
90
+ Because the websocket is proxied through the same origin, the browser should connect through the Nomadex host without needing a separate websocket URL.
91
+
92
+ ## 5. Repo Development And Manual Launch
93
+
94
+ For normal installed usage, prefer `npx nomadexapp`.
95
+
96
+ If you are working from the repo and want to manage the bridge yourself:
97
+
98
+ ```bash
99
+ npm run app-server
100
+ VITE_CODEX_WS_URL=ws://127.0.0.1:3901 npm run dev -- --host 0.0.0.0 --port 3784 --strictPort
101
+ ```
102
+
103
+ This is useful if:
104
+
105
+ - you want a different websocket target
106
+ - you are debugging the app-server directly
107
+ - you want to run the bridge separately from Vite
108
+
109
+ ## 6. Environment Variables
110
+
111
+ Main variables:
112
+
113
+ - `NOMADEX_WS_URL`
114
+ Websocket URL for the packaged launcher. Default: `ws://127.0.0.1:3901`
115
+ - `NOMADEX_UI_PORT`
116
+ UI port used by `npx nomadexapp`. Default: `3784`
117
+ - `NOMADEX_AUTH_RELAY_TARGET`
118
+ HTTP target used by the packaged auth relay. Default: `http://127.0.0.1:1455`
119
+ - `NOMADEX_PASSWORD`
120
+ Stable UI password for the packaged launcher. If unset, Nomadex generates one on each launch and prints it in the terminal.
121
+ - `VITE_CODEX_WS_URL`
122
+ Websocket URL for the Codex app-server. Default: `ws://127.0.0.1:3901`
123
+ - `VITE_CODEX_UI_PORT`
124
+ UI port used by `dev:live`. Default: `3784`
125
+ - `VITE_CODEX_AUTH_RELAY_TARGET`
126
+ HTTP target used for login callback relay. Default: `http://127.0.0.1:1455`
127
+
128
+ Examples:
129
+
130
+ ```bash
131
+ npx nomadexapp --port 4173
132
+ npx nomadexapp --ws-url ws://127.0.0.1:3902
133
+ NOMADEX_PASSWORD=my-secret npx nomadexapp
134
+ VITE_CODEX_UI_PORT=4173 npm run dev:live
135
+ VITE_CODEX_WS_URL=ws://127.0.0.1:3902 npm run dev:live
136
+ ```
137
+
138
+ ## 7. Build And Preview
139
+
140
+ Build:
141
+
142
+ ```bash
143
+ npm run build
144
+ ```
145
+
146
+ Preview:
147
+
148
+ ```bash
149
+ npm run preview
150
+ ```
151
+
152
+ Use `preview` to inspect the built shell inside the repo. The normal packaged launch is `npx nomadexapp`.
153
+
154
+ ## 8. GitHub Actions And npm Publish
155
+
156
+ This repo now includes:
157
+
158
+ - `.github/workflows/ci.yml`
159
+ - `.github/workflows/publish.yml`
160
+
161
+ Behavior:
162
+
163
+ - pushes and pull requests run `npm ci`, `npm run lint`, and `npm run build`
164
+ - pushes to `main` also check npm
165
+ - if the current `package.json` version is not published yet, GitHub Actions runs `npm publish --access public --provenance`
166
+
167
+ Required setup:
168
+
169
+ 1. Add a repository secret named `NPM_TOKEN`.
170
+ 2. Make sure that token has permission to publish the package.
171
+ 3. Bump `package.json` version before pushing a release to `main`.
172
+
173
+ Without a new version, the publish workflow skips instead of failing on a duplicate publish.
174
+
175
+ ## 9. Files, Images, And Uploads
176
+
177
+ Current behavior:
178
+
179
+ - images can be pasted into the composer
180
+ - non-image files go through `Attach`
181
+ - uploaded assets are written into the workspace under:
182
+ - `.codex-web/uploads`
183
+ - `.codex-web/uploads/files`
184
+
185
+ The runtime injects file mentions into the prompt manifest so the live agent can see attached file paths consistently.
186
+
187
+ ## 10. Troubleshooting
188
+
189
+ ### UI port is busy
190
+
191
+ Error:
192
+
193
+ ```text
194
+ UI port 3784 is already in use
195
+ ```
196
+
197
+ Fix:
198
+
199
+ - stop the old process using `3784`
200
+ - open the already-running UI
201
+ - or change `NOMADEX_UI_PORT` for the packaged launcher
202
+ - or change `VITE_CODEX_UI_PORT` for the repo dev launcher
203
+
204
+ ### Websocket bridge port is occupied
205
+
206
+ Error:
207
+
208
+ ```text
209
+ Port 3901 on 127.0.0.1 is already in use, but it is not responding like a Codex app-server
210
+ ```
211
+
212
+ Fix:
213
+
214
+ - stop the conflicting process
215
+ - or run the app-server on another port and set `NOMADEX_WS_URL`
216
+ - or set `VITE_CODEX_WS_URL` if you are using `dev:live`
217
+
218
+ ### Browser shows websocket connection failures
219
+
220
+ Check:
221
+
222
+ 1. `npx nomadexapp` is still running, or `npm run dev:live` if you are in the repo
223
+ 2. the UI URL is really the strict port you launched
224
+ 3. the app-server is reachable on the configured websocket target
225
+ 4. you hard refreshed after recent websocket changes
226
+
227
+ ### Old favicon or theme color still shows
228
+
229
+ Mobile browsers cache icon and `theme-color` metadata aggressively.
230
+
231
+ Fix:
232
+
233
+ 1. hard refresh
234
+ 2. close the tab
235
+ 3. reopen the page
236
+
237
+ ## 11. Current Boundaries
238
+
239
+ - Codex is still the strongest live provider path.
240
+ - The provider abstraction is ahead of full provider-runtime parity.
241
+ - Internet-safe deployment is not built in. Add your own network boundary and auth if you expose Nomadex remotely.
242
+ - The packaged launcher currently assumes the Codex app-server contract as the reference bridge path.
Binary file
@@ -0,0 +1,190 @@
1
+ <svg width="1600" height="960" viewBox="0 0 1600 960" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="1600" height="960" rx="24" fill="#120B16"/>
3
+ <rect x="20" y="20" width="1560" height="920" rx="18" fill="#130F19" stroke="#2B2232"/>
4
+
5
+ <rect x="20" y="20" width="1560" height="52" rx="18" fill="#17111D"/>
6
+ <rect x="32" y="30" width="26" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
7
+ <text x="41" y="47" fill="#B6BFD6" font-family="JetBrains Mono, monospace" font-size="13">+</text>
8
+ <rect x="68" y="30" width="36" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
9
+ <rect x="80" y="37" width="13" height="10" rx="2" fill="#F0B34A"/>
10
+ <rect x="110" y="30" width="36" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
11
+ <rect x="123" y="35" width="10" height="16" rx="2" fill="#E6D0B6"/>
12
+ <rect x="152" y="30" width="36" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
13
+ <circle cx="170" cy="43" r="7" stroke="#6C7387" stroke-width="1.5"/>
14
+ <circle cx="224" cy="43" r="8" fill="#33D6BA"/>
15
+ <text x="240" y="48" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="18" font-weight="700">Nomadex</text>
16
+
17
+ <rect x="360" y="29" width="126" height="28" rx="14" fill="#14311F" stroke="#2D6A4D"/>
18
+ <text x="386" y="47" fill="#8DE2A7" font-family="JetBrains Mono, monospace" font-size="14">Full Access</text>
19
+
20
+ <rect x="501" y="30" width="28" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
21
+ <text x="510" y="47" fill="#A9A0C3" font-family="JetBrains Mono, monospace" font-size="13">96</text>
22
+ <rect x="540" y="30" width="28" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
23
+ <text x="549" y="47" fill="#A9A0C3" font-family="JetBrains Mono, monospace" font-size="13">v</text>
24
+ <rect x="579" y="30" width="28" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
25
+ <rect x="588" y="36" width="11" height="12" rx="2" fill="#F1C456"/>
26
+ <rect x="618" y="30" width="28" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
27
+ <rect x="627" y="35" width="10" height="16" rx="2" fill="#F1E6D7"/>
28
+ <rect x="657" y="30" width="28" height="26" rx="8" fill="#171C27" stroke="#2D3342"/>
29
+ <circle cx="671" cy="43" r="6" stroke="#667088" stroke-width="1.5"/>
30
+ <rect x="697" y="29" width="90" height="28" rx="14" fill="#23172B" stroke="#3A2947"/>
31
+ <circle cx="713" cy="43" r="5" fill="#8B60E6"/>
32
+ <text x="727" y="47" fill="#D7C7F5" font-family="JetBrains Mono, monospace" font-size="13">Plasma</text>
33
+
34
+ <rect x="1420" y="28" width="140" height="30" rx="12" fill="#171C27" stroke="#2D3342"/>
35
+ <circle cx="1437" cy="43" r="5" fill="#39D39A"/>
36
+ <text x="1450" y="47" fill="#B4B8CD" font-family="JetBrains Mono, monospace" font-size="14">gpt-5.4</text>
37
+
38
+ <rect x="20" y="72" width="250" height="868" fill="#141018"/>
39
+ <rect x="34" y="88" width="220" height="44" rx="8" fill="#18141C" stroke="#2E2432"/>
40
+ <text x="50" y="115" fill="#F2EDF6" font-family="JetBrains Mono, monospace" font-size="14">+ New Session</text>
41
+
42
+ <text x="34" y="160" fill="#6E697C" font-family="JetBrains Mono, monospace" font-size="11">TODAY</text>
43
+ <circle cx="46" cy="186" r="5" fill="#E7DFF1"/>
44
+ <text x="60" y="191" fill="#F2EDF6" font-family="JetBrains Mono, monospace" font-size="13">it was slow because the first...</text>
45
+ <rect x="40" y="198" width="180" height="2" rx="1" fill="#3FE0D0"/>
46
+
47
+ <circle cx="46" cy="224" r="5" fill="#E7DFF1"/>
48
+ <text x="60" y="229" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">fix this please</text>
49
+ <circle cx="46" cy="262" r="5" fill="#E7DFF1"/>
50
+ <text x="60" y="267" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">hi,i want you to make me a ui...</text>
51
+ <circle cx="46" cy="300" r="5" fill="#E7DFF1"/>
52
+ <text x="60" y="305" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">give me current project loca...</text>
53
+
54
+ <text x="34" y="352" fill="#6E697C" font-family="JetBrains Mono, monospace" font-size="11">YESTERDAY</text>
55
+ <circle cx="46" cy="378" r="5" fill="#E7DFF1"/>
56
+ <text x="60" y="383" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">this is a test</text>
57
+ <circle cx="46" cy="416" r="5" fill="#E7DFF1"/>
58
+ <text x="60" y="421" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">test</text>
59
+ <circle cx="46" cy="454" r="5" fill="#E7DFF1"/>
60
+ <text x="60" y="459" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">any latch briefly</text>
61
+ <circle cx="46" cy="492" r="5" fill="#E7DFF1"/>
62
+ <text x="60" y="497" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">hello</text>
63
+
64
+ <text x="34" y="548" fill="#6E697C" font-family="JetBrains Mono, monospace" font-size="11">EARLIER</text>
65
+ <circle cx="46" cy="574" r="5" fill="#E7DFF1"/>
66
+ <text x="60" y="579" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">hi</text>
67
+ <circle cx="46" cy="612" r="5" fill="#E7DFF1"/>
68
+ <text x="60" y="617" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">run the shell command "slmp"</text>
69
+ <circle cx="46" cy="650" r="5" fill="#E7DFF1"/>
70
+ <text x="60" y="655" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">can you create me a new ui st...</text>
71
+ <circle cx="46" cy="688" r="5" fill="#E7DFF1"/>
72
+ <text x="60" y="693" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">this is my staging repo://ta...</text>
73
+ <circle cx="46" cy="726" r="5" fill="#E7DFF1"/>
74
+ <text x="60" y="731" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">Add Discord bot and reset row</text>
75
+ <circle cx="46" cy="764" r="5" fill="#E7DFF1"/>
76
+ <text x="60" y="769" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">implement this please</text>
77
+ <circle cx="46" cy="802" r="5" fill="#E7DFF1"/>
78
+ <text x="60" y="807" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">https://github.com/fbuls2/com...</text>
79
+
80
+ <text x="34" y="860" fill="#7B738A" font-family="JetBrains Mono, monospace" font-size="12">Command palette</text>
81
+ <rect x="182" y="846" width="38" height="20" rx="6" fill="#211A29" stroke="#342B3D"/>
82
+ <text x="194" y="860" fill="#A79FBD" font-family="JetBrains Mono, monospace" font-size="11">K</text>
83
+ <text x="34" y="892" fill="#B9B0C9" font-family="JetBrains Mono, monospace" font-size="12">/review working tree</text>
84
+ <text x="34" y="922" fill="#B9B0C9" font-family="JetBrains Mono, monospace" font-size="12">/fork session</text>
85
+
86
+ <rect x="270" y="72" width="960" height="868" fill="#11161C"/>
87
+ <rect x="270" y="72" width="960" height="34" fill="#121820"/>
88
+ <text x="292" y="94" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="13">it was slow because...</text>
89
+ <text x="523" y="94" fill="#7D728F" font-family="JetBrains Mono, monospace" font-size="13">fix this please</text>
90
+ <text x="678" y="94" fill="#7D728F" font-family="JetBrains Mono, monospace" font-size="13">+</text>
91
+ <rect x="294" y="104" width="230" height="3" rx="1.5" fill="#3FE0D0"/>
92
+
93
+ <rect x="312" y="132" width="560" height="22" rx="6" fill="#16131A" stroke="#302633"/>
94
+ <rect x="326" y="137" width="118" height="12" rx="6" fill="#5F5D17"/>
95
+ <text x="337" y="146" fill="#E7E0AB" font-family="JetBrains Mono, monospace" font-size="10">index.css L17706</text>
96
+ <rect x="456" y="137" width="44" height="12" rx="6" fill="#231A2B"/>
97
+ <text x="470" y="146" fill="#B2A3C8" font-family="JetBrains Mono, monospace" font-size="10">DB</text>
98
+
99
+ <rect x="336" y="198" width="824" height="70" rx="10" fill="#6A5B7C" stroke="#8D7AA4"/>
100
+ <circle cx="362" cy="222" r="7" fill="#FF6659"/>
101
+ <circle cx="382" cy="222" r="7" fill="#F3BF4E"/>
102
+ <circle cx="402" cy="222" r="7" fill="#36D074"/>
103
+ <text x="735" y="226" fill="#EFEAF5" font-family="JetBrains Mono, monospace" font-size="13">index.css</text>
104
+ <rect x="1072" y="210" width="72" height="16" rx="6" fill="#30493E"/>
105
+ <text x="1083" y="221" fill="#A9E0B8" font-family="JetBrains Mono, monospace" font-size="10">COMPLETED</text>
106
+ <text x="354" y="252" fill="#E9E1F4" font-family="JetBrains Mono, monospace" font-size="13">rg -n "terminalDockReady|startBottomShell|workspace terminal dock loading|Opening terminal" src/app/WorkspaceShell.tsx src/index.css</text>
107
+ <rect x="354" y="258" width="126" height="14" rx="6" fill="#201924"/>
108
+ <text x="366" y="268" fill="#A79BB8" font-family="JetBrains Mono, monospace" font-size="10">~/trade-console</text>
109
+ <rect x="488" y="258" width="40" height="14" rx="6" fill="#201924"/>
110
+ <text x="499" y="268" fill="#A79BB8" font-family="JetBrains Mono, monospace" font-size="10">17706</text>
111
+ <rect x="535" y="258" width="30" height="14" rx="6" fill="#201924"/>
112
+ <text x="545" y="268" fill="#A79BB8" font-family="JetBrains Mono, monospace" font-size="10">0ms</text>
113
+
114
+ <circle cx="332" cy="318" r="10" fill="#7E61D6"/>
115
+ <text x="356" y="323" fill="#B9B1C8" font-family="JetBrains Mono, monospace" font-size="14">Agent</text>
116
+ <text x="1122" y="323" fill="#6F6A77" font-family="JetBrains Mono, monospace" font-size="12">completed</text>
117
+ <text x="330" y="366" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="16">It was slow because the first shell open was doing too much in one interaction:</text>
118
+ <text x="330" y="394" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="16">showing the dock, mounting the terminal UI, and starting the pty shell at the same time.</text>
119
+ <text x="330" y="422" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="16">I changed that in WorkspaceShell.tsx so the bottom dock paints first, the</text>
120
+ <text x="330" y="450" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="16">heavier terminal content mounts on the next frame, and the shell starts after that.</text>
121
+ <text x="330" y="478" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="16">I also added a lightweight Opening terminal placeholder in WorkspaceShell.tsx.</text>
122
+ <text x="330" y="532" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="16">npm run build passes. Hard refresh Nomadex and try the Shell button again.</text>
123
+
124
+ <rect x="330" y="566" width="102" height="20" rx="6" fill="#17141A" stroke="#2E2432"/>
125
+ <text x="342" y="580" fill="#A89FBC" font-family="JetBrains Mono, monospace" font-size="11">/fork</text>
126
+ <rect x="440" y="566" width="68" height="20" rx="6" fill="#17141A" stroke="#2E2432"/>
127
+ <text x="451" y="580" fill="#A89FBC" font-family="JetBrains Mono, monospace" font-size="11">/plan</text>
128
+ <rect x="516" y="566" width="22" height="20" rx="6" fill="#17141A" stroke="#2E2432"/>
129
+ <text x="523" y="580" fill="#A89FBC" font-family="JetBrains Mono, monospace" font-size="11">[]</text>
130
+
131
+ <rect x="330" y="636" width="620" height="54" rx="10" fill="#161A20" stroke="#2C313A"/>
132
+ <text x="346" y="667" fill="#B4ACC4" font-family="JetBrains Mono, monospace" font-size="13">this video</text>
133
+
134
+ <rect x="296" y="724" width="874" height="34" fill="#12171D"/>
135
+ <text x="306" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Auto</text>
136
+ <text x="372" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Plan</text>
137
+ <text x="440" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Mention</text>
138
+ <text x="526" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Files</text>
139
+ <text x="592" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Image</text>
140
+ <text x="660" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Shell</text>
141
+ <text x="730" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Web</text>
142
+ <text x="794" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Review</text>
143
+ <text x="876" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Agents</text>
144
+ <text x="958" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Trim</text>
145
+ <text x="1024" y="746" fill="#7B7486" font-family="JetBrains Mono, monospace" font-size="12">Editor</text>
146
+
147
+ <rect x="296" y="758" width="874" height="144" rx="10" fill="#12171D" stroke="#2A303A"/>
148
+ <rect x="330" y="796" width="732" height="80" rx="10" fill="#151A21" stroke="#343A45"/>
149
+ <text x="350" y="844" fill="#697487" font-family="JetBrains Mono, monospace" font-size="16">Ask Nomadex... / for slash commands - @ mention - $ skills - ! shell - Ctrl+G editor</text>
150
+ <rect x="1108" y="812" width="34" height="50" rx="10" fill="#1A1F28" stroke="#323845"/>
151
+ <text x="1120" y="844" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="20">^</text>
152
+
153
+ <text x="328" y="898" fill="#776F81" font-family="JetBrains Mono, monospace" font-size="12">Shift+Enter</text>
154
+ <text x="936" y="898" fill="#776F81" font-family="JetBrains Mono, monospace" font-size="12">Context 65.7k / 200k</text>
155
+ <rect x="1086" y="882" width="52" height="20" rx="10" fill="#1E232B" stroke="#343A45"/>
156
+ <text x="1098" y="896" fill="#938CA1" font-family="JetBrains Mono, monospace" font-size="11">5h 79%</text>
157
+ <rect x="1146" y="882" width="58" height="20" rx="10" fill="#1E232B" stroke="#343A45"/>
158
+ <text x="1158" y="896" fill="#938CA1" font-family="JetBrains Mono, monospace" font-size="11">Week 82%</text>
159
+
160
+ <rect x="1230" y="72" width="350" height="868" fill="#12161E"/>
161
+ <text x="1248" y="110" fill="#EEE7F7" font-family="JetBrains Mono, monospace" font-size="20" font-weight="700">Files</text>
162
+ <text x="1248" y="144" fill="#B2ACBD" font-family="JetBrains Mono, monospace" font-size="13">Files</text>
163
+ <text x="1314" y="144" fill="#6F6A77" font-family="JetBrains Mono, monospace" font-size="13">Branches</text>
164
+ <text x="1410" y="144" fill="#6F6A77" font-family="JetBrains Mono, monospace" font-size="13">Diff</text>
165
+ <text x="1462" y="144" fill="#6F6A77" font-family="JetBrains Mono, monospace" font-size="13">Agents</text>
166
+ <text x="1536" y="144" fill="#6F6A77" font-family="JetBrains Mono, monospace" font-size="13">Config</text>
167
+ <rect x="1248" y="154" width="54" height="2" rx="1" fill="#3FE0D0"/>
168
+
169
+ <rect x="1248" y="182" width="110" height="24" rx="12" fill="#182332" stroke="#2C3C52"/>
170
+ <text x="1266" y="198" fill="#A5C8FF" font-family="JetBrains Mono, monospace" font-size="12">~/xaenic/nomadex</text>
171
+ <text x="1248" y="224" fill="#7D778A" font-family="JetBrains Mono, monospace" font-size="12">codex-console - 10 modified</text>
172
+
173
+ <rect x="1258" y="252" width="116" height="24" rx="12" fill="#18263A" stroke="#30527B"/>
174
+ <text x="1276" y="268" fill="#9FC7FF" font-family="JetBrains Mono, monospace" font-size="12">codex-console</text>
175
+ <text x="1258" y="312" fill="#F0B34A" font-family="JetBrains Mono, monospace" font-size="16">dist</text>
176
+ <text x="1258" y="350" fill="#F0B34A" font-family="JetBrains Mono, monospace" font-size="16">docs</text>
177
+ <text x="1258" y="388" fill="#F0B34A" font-family="JetBrains Mono, monospace" font-size="16">public</text>
178
+ <text x="1258" y="426" fill="#F0B34A" font-family="JetBrains Mono, monospace" font-size="16">scripts</text>
179
+ <text x="1258" y="464" fill="#F0B34A" font-family="JetBrains Mono, monospace" font-size="16">src</text>
180
+ <text x="1258" y="502" fill="#F0B34A" font-family="JetBrains Mono, monospace" font-size="16">test-results</text>
181
+ <text x="1258" y="540" fill="#D6D0E1" font-family="JetBrains Mono, monospace" font-size="16">.gitignore</text>
182
+ <text x="1258" y="578" fill="#D6D0E1" font-family="JetBrains Mono, monospace" font-size="16">eslint.config.js</text>
183
+ <text x="1258" y="616" fill="#D6D0E1" font-family="JetBrains Mono, monospace" font-size="16">index.html</text>
184
+ <text x="1258" y="654" fill="#D6D0E1" font-family="JetBrains Mono, monospace" font-size="16">package-lock.json</text>
185
+ <text x="1258" y="692" fill="#D6D0E1" font-family="JetBrains Mono, monospace" font-size="16">package.json</text>
186
+ <text x="1258" y="730" fill="#D6D0E1" font-family="JetBrains Mono, monospace" font-size="16">README.md</text>
187
+
188
+ <rect x="1560" y="162" width="6" height="742" rx="3" fill="#2D2B2F"/>
189
+ <rect x="1560" y="172" width="6" height="168" rx="3" fill="#AAA6B0"/>
190
+ </svg>
Binary file
@@ -0,0 +1,113 @@
1
+ <svg width="430" height="932" viewBox="0 0 430 932" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="430" height="932" rx="28" fill="#180D12"/>
3
+ <rect x="14" y="14" width="402" height="904" rx="22" fill="#1B0F14" stroke="#38242D"/>
4
+
5
+ <rect x="14" y="14" width="402" height="54" rx="22" fill="#19101A"/>
6
+ <rect x="24" y="24" width="24" height="24" rx="7" fill="#191E28" stroke="#2E3341"/>
7
+ <text x="32" y="40" fill="#AFB7CA" font-family="JetBrains Mono, monospace" font-size="12">=</text>
8
+ <rect x="58" y="24" width="26" height="24" rx="7" fill="#191E28" stroke="#2E3341"/>
9
+ <rect x="67" y="31" width="9" height="10" rx="2" fill="#557BFF"/>
10
+ <text x="95" y="40" fill="#F1EAF6" font-family="JetBrains Mono, monospace" font-size="15" font-weight="700">Nomadex</text>
11
+ <rect x="170" y="23" width="110" height="26" rx="13" fill="#163422" stroke="#2B6D4B"/>
12
+ <text x="193" y="40" fill="#9AE0A9" font-family="JetBrains Mono, monospace" font-size="13">Full Access</text>
13
+ <rect x="289" y="24" width="24" height="24" rx="7" fill="#191E28" stroke="#2E3341"/>
14
+ <text x="297" y="40" fill="#B8AFC5" font-family="JetBrains Mono, monospace" font-size="12">96</text>
15
+ <rect x="321" y="24" width="24" height="24" rx="7" fill="#191E28" stroke="#2E3341"/>
16
+ <text x="330" y="40" fill="#B8AFC5" font-family="JetBrains Mono, monospace" font-size="12">v</text>
17
+ <rect x="353" y="24" width="24" height="24" rx="7" fill="#191E28" stroke="#2E3341"/>
18
+ <circle cx="365" cy="36" r="5" stroke="#6E7484" stroke-width="1.5"/>
19
+ <rect x="385" y="24" width="24" height="24" rx="7" fill="#2A141B" stroke="#653242"/>
20
+ <circle cx="397" cy="36" r="5" fill="#FF5877"/>
21
+
22
+ <rect x="28" y="84" width="290" height="26" rx="8" fill="#18131A" stroke="#34212A"/>
23
+ <circle cx="38" cy="97" r="4" fill="#E6DFF0"/>
24
+ <text x="52" y="101" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="13">I'm making the ...</text>
25
+ <text x="292" y="101" fill="#8A8098" font-family="JetBrains Mono, monospace" font-size="13">+</text>
26
+ <rect x="30" y="112" width="198" height="2" rx="1" fill="#F0548D"/>
27
+
28
+ <circle cx="30" cy="150" r="10" fill="#B23A55"/>
29
+ <text x="52" y="154" fill="#BDB4C9" font-family="JetBrains Mono, monospace" font-size="13">Agent</text>
30
+ <text x="370" y="154" fill="#6E6879" font-family="JetBrains Mono, monospace" font-size="11">live</text>
31
+
32
+ <text x="42" y="190" fill="#F1EAF6" font-family="JetBrains Mono, monospace" font-size="16">I'm making the open path cancellable too, so a</text>
33
+ <text x="42" y="216" fill="#F1EAF6" font-family="JetBrains Mono, monospace" font-size="16">quick open-close tap on mobile doesn't leave a</text>
34
+ <text x="42" y="242" fill="#F1EAF6" font-family="JetBrains Mono, monospace" font-size="16">queued shell startup running after the panel is</text>
35
+ <text x="42" y="268" fill="#F1EAF6" font-family="JetBrains Mono, monospace" font-size="16">already gone.</text>
36
+
37
+ <rect x="40" y="298" width="10" height="20" rx="5" fill="#D4C7E8"/>
38
+ <rect x="42" y="336" width="84" height="20" rx="6" fill="#17141A" stroke="#32242D"/>
39
+ <text x="53" y="350" fill="#A59AB7" font-family="JetBrains Mono, monospace" font-size="11">/fork</text>
40
+ <rect x="134" y="336" width="68" height="20" rx="6" fill="#17141A" stroke="#32242D"/>
41
+ <text x="145" y="350" fill="#A59AB7" font-family="JetBrains Mono, monospace" font-size="11">/plan</text>
42
+ <rect x="210" y="336" width="22" height="20" rx="6" fill="#17141A" stroke="#32242D"/>
43
+ <text x="217" y="350" fill="#A59AB7" font-family="JetBrains Mono, monospace" font-size="11">[]</text>
44
+
45
+ <rect x="28" y="388" width="374" height="90" rx="12" fill="#31191E" stroke="#5B2D38"/>
46
+ <circle cx="44" cy="406" r="6" fill="#FF6659"/>
47
+ <circle cx="62" cy="406" r="6" fill="#F3BF4E"/>
48
+ <circle cx="80" cy="406" r="6" fill="#36D074"/>
49
+ <text x="166" y="410" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="12">WorkspaceShell.tsx</text>
50
+ <rect x="324" y="396" width="62" height="16" rx="6" fill="#32483E"/>
51
+ <text x="334" y="407" fill="#A5DEB5" font-family="JetBrains Mono, monospace" font-size="10">COMPLETED</text>
52
+ <text x="42" y="444" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="13">sed -n '1,80p' src/app/WorkspaceShell.tsx</text>
53
+ <rect x="42" y="452" width="110" height="14" rx="6" fill="#20161B"/>
54
+ <text x="52" y="462" fill="#A89CB5" font-family="JetBrains Mono, monospace" font-size="10">~/code-console</text>
55
+ <rect x="160" y="452" width="38" height="14" rx="6" fill="#20161B"/>
56
+ <text x="170" y="462" fill="#A89CB5" font-family="JetBrains Mono, monospace" font-size="10">4132</text>
57
+ <rect x="204" y="452" width="26" height="14" rx="6" fill="#20161B"/>
58
+ <text x="212" y="462" fill="#A89CB5" font-family="JetBrains Mono, monospace" font-size="10">0ms</text>
59
+
60
+ <rect x="28" y="494" width="374" height="90" rx="12" fill="#31191E" stroke="#5B2D38"/>
61
+ <circle cx="44" cy="512" r="6" fill="#FF6659"/>
62
+ <circle cx="62" cy="512" r="6" fill="#F3BF4E"/>
63
+ <circle cx="80" cy="512" r="6" fill="#36D074"/>
64
+ <text x="180" y="516" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="12">index.css</text>
65
+ <rect x="324" y="502" width="62" height="16" rx="6" fill="#32483E"/>
66
+ <text x="334" y="513" fill="#A5DEB5" font-family="JetBrains Mono, monospace" font-size="10">COMPLETED</text>
67
+ <text x="42" y="550" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="13">sed -n '4560,4625p' src/index.css</text>
68
+ <rect x="42" y="558" width="110" height="14" rx="6" fill="#20161B"/>
69
+ <text x="52" y="568" fill="#A89CB5" font-family="JetBrains Mono, monospace" font-size="10">~/code-console</text>
70
+ <rect x="160" y="558" width="38" height="14" rx="6" fill="#20161B"/>
71
+ <text x="170" y="568" fill="#A89CB5" font-family="JetBrains Mono, monospace" font-size="10">86510</text>
72
+ <rect x="204" y="558" width="26" height="14" rx="6" fill="#20161B"/>
73
+ <text x="212" y="568" fill="#A89CB5" font-family="JetBrains Mono, monospace" font-size="10">0ms</text>
74
+
75
+ <rect x="28" y="594" width="374" height="32" rx="8" fill="#17141A" stroke="#342731"/>
76
+ <text x="46" y="614" fill="#B3A9C4" font-family="JetBrains Mono, monospace" font-size="13">this video</text>
77
+
78
+ <text x="42" y="656" fill="#9487A5" font-family="JetBrains Mono, monospace" font-size="13">Writing response</text>
79
+ <rect x="32" y="646" width="12" height="12" rx="6" stroke="#6D5A86" stroke-width="1.5"/>
80
+
81
+ <rect x="28" y="688" width="374" height="86" rx="12" fill="#3A1A25" stroke="#6A3546"/>
82
+ <text x="40" y="710" fill="#D9CEDF" font-family="JetBrains Mono, monospace" font-size="14">Changing</text>
83
+ <text x="384" y="710" fill="#8E7D95" font-family="JetBrains Mono, monospace" font-size="13">2</text>
84
+ <rect x="42" y="728" width="104" height="28" rx="14" fill="#231923" stroke="#3B293A"/>
85
+ <text x="55" y="746" fill="#E7B642" font-family="JetBrains Mono, monospace" font-size="12">MOD</text>
86
+ <text x="94" y="746" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="12">index.css</text>
87
+ <rect x="156" y="728" width="164" height="28" rx="14" fill="#231923" stroke="#3B293A"/>
88
+ <text x="169" y="746" fill="#E7B642" font-family="JetBrains Mono, monospace" font-size="12">MOD</text>
89
+ <text x="208" y="746" fill="#EDE7F7" font-family="JetBrains Mono, monospace" font-size="12">WorkspaceShell.tsx</text>
90
+
91
+ <rect x="20" y="784" width="390" height="28" fill="#17141A"/>
92
+ <text x="30" y="802" fill="#7E748E" font-family="JetBrains Mono, monospace" font-size="11">Auto</text>
93
+ <text x="84" y="802" fill="#7E748E" font-family="JetBrains Mono, monospace" font-size="11">Plan</text>
94
+ <text x="140" y="802" fill="#7E748E" font-family="JetBrains Mono, monospace" font-size="11">Mention</text>
95
+ <text x="222" y="802" fill="#7E748E" font-family="JetBrains Mono, monospace" font-size="11">Files</text>
96
+ <text x="272" y="802" fill="#7E748E" font-family="JetBrains Mono, monospace" font-size="11">Image</text>
97
+ <text x="326" y="802" fill="#D3A2C3" font-family="JetBrains Mono, monospace" font-size="11">Shell</text>
98
+
99
+ <rect x="20" y="812" width="390" height="104" rx="10" fill="#17141A" stroke="#372B33"/>
100
+ <rect x="30" y="830" width="318" height="70" rx="8" fill="#1C171D" stroke="#473541"/>
101
+ <text x="42" y="870" fill="#6A6175" font-family="JetBrains Mono, monospace" font-size="14">Ask Nomadex... / for slash commands - @ mention...</text>
102
+ <rect x="362" y="838" width="30" height="54" rx="10" fill="#1F1419" stroke="#7B3348"/>
103
+ <text x="372" y="871" fill="#F6EAF3" font-family="JetBrains Mono, monospace" font-size="16">^</text>
104
+ <rect x="398" y="838" width="20" height="54" rx="10" fill="#2A141B" stroke="#A33A59"/>
105
+ <text x="404" y="871" fill="#FF6B89" font-family="JetBrains Mono, monospace" font-size="16">[]</text>
106
+
107
+ <text x="24" y="914" fill="#867A8C" font-family="JetBrains Mono, monospace" font-size="11">Shift+Enter</text>
108
+ <text x="132" y="914" fill="#867A8C" font-family="JetBrains Mono, monospace" font-size="11">Context 65.2k / 200k</text>
109
+ <rect x="316" y="902" width="44" height="18" rx="9" fill="#1F1B22" stroke="#393541"/>
110
+ <text x="324" y="914" fill="#A093A8" font-family="JetBrains Mono, monospace" font-size="10">5h 75%</text>
111
+ <rect x="364" y="902" width="50" height="18" rx="9" fill="#1F1B22" stroke="#393541"/>
112
+ <text x="371" y="914" fill="#A093A8" font-family="JetBrains Mono, monospace" font-size="10">Week 82%</text>
113
+ </svg>