@nexus_js/cli 0.7.1 → 0.7.4

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/dist/studio.js CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Nexus Studio — Real-time developer dashboard.
3
3
  *
4
- * Launched via `nexus studio` or automatically as a panel within `nexus dev`.
5
- * Runs a lightweight WebSocket server alongside the main dev server.
4
+ * Launched via `nexus studio`. Pair with `nexus dev`: the CLI registers the DevRadar
5
+ * sink so Server Actions + pretext profiling stream here over WebSocket.
6
6
  * The browser UI connects to ws://localhost:${STUDIO_PORT}/_nexus/studio
7
7
  *
8
8
  * Panels:
@@ -12,14 +12,22 @@
12
12
  * 4. JS Cost — Bundle analysis for the current route (mirrors nexus analyze).
13
13
  * 5. Cache Inspector — Current cache entries, TTLs, hit/miss ratio.
14
14
  * 6. Store Viewer — Live snapshot of the Global State Store.
15
+ * 7. Security Report — Snapshot from `nexus dev` (serialize, compiler scans, hardened mode, roadmap rows).
16
+ * 8. Vault-lite — Proxy to the dev app `/_nexus/dev/vault` (Vault tab).
15
17
  */
16
18
  import { createServer as createHttpServer } from 'node:http';
17
19
  import { createServer as createNetServer } from 'node:net';
18
- export const STUDIO_PORT = 4000;
20
+ import { STUDIO_DEFAULT_PORT } from '@nexus_js/server/constants';
21
+ export const STUDIO_PORT = STUDIO_DEFAULT_PORT;
19
22
  export const STUDIO_WS_PATH = '/_nexus/studio';
20
23
  const OPEN = 1;
21
24
  const clients = new Set();
25
+ /** Last snapshot from `nexus dev` — replayed to new Studio tabs. */
26
+ let lastSecurityReport = null;
22
27
  export function broadcast(event) {
28
+ if (event.type === 'security:report') {
29
+ lastSecurityReport = event.payload;
30
+ }
23
31
  const payload = JSON.stringify(event);
24
32
  for (const client of clients) {
25
33
  if (client.readyState === OPEN) {
@@ -74,6 +82,9 @@ function wsHandshake(req, socket) {
74
82
  });
75
83
  // Send a welcome snapshot so the client panel shows current state immediately
76
84
  ws.send(JSON.stringify({ type: 'studio:connected', timestamp: Date.now() }));
85
+ if (lastSecurityReport) {
86
+ ws.send(JSON.stringify({ type: 'security:report', payload: lastSecurityReport }));
87
+ }
77
88
  }
78
89
  // ── HTML Dashboard (single-file, no bundler needed) ───────────────────────────
79
90
  function studioHtml(port) {
@@ -360,6 +371,7 @@ function studioHtml(port) {
360
371
  <body>
361
372
  <header>
362
373
  <span class="logo">Nexus Studio</span>
374
+ <span style="font-size:10px;color:var(--muted);margin-left:8px">DevRadar</span>
363
375
  <div class="status-dot" id="statusDot"></div>
364
376
  <span class="status-label" id="statusLabel">Connecting...</span>
365
377
  <nav>
@@ -368,6 +380,8 @@ function studioHtml(port) {
368
380
  <button data-panel="actions">Actions</button>
369
381
  <button data-panel="cache">Cache</button>
370
382
  <button data-panel="store">Store</button>
383
+ <button data-panel="vault">Vault</button>
384
+ <button data-panel="security">Security</button>
371
385
  </nav>
372
386
  </header>
373
387
 
@@ -402,6 +416,12 @@ function studioHtml(port) {
402
416
  <div class="panel-content" id="actionLog">
403
417
  <div class="empty-state">No actions fired yet.</div>
404
418
  </div>
419
+ <div class="panel-header" style="border-top:1px solid var(--border)">
420
+ <span>DevRadar</span>
421
+ </div>
422
+ <div class="panel-content" id="devradarStrip" style="font-size:10px">
423
+ <div class="empty-state">Run <code>nexus dev</code> and open Studio — pretext + security stream here.</div>
424
+ </div>
405
425
  </div>
406
426
  </div>
407
427
 
@@ -414,6 +434,9 @@ function studioHtml(port) {
414
434
  actions: [],
415
435
  cache: new Map(),
416
436
  store: new Map(),
437
+ pretextLast: null,
438
+ securityTail: [],
439
+ securityReport: null,
417
440
  };
418
441
 
419
442
  // ── WebSocket ────────────────────────────────────────────────────────────
@@ -483,11 +506,39 @@ function studioHtml(port) {
483
506
  if (a) { Object.assign(a, event.payload, { status: 'success' }); renderActionLog(); }
484
507
  break;
485
508
 
509
+ case 'action:redirect':
510
+ const ar = state.actions.find(x => x.id === event.payload.id);
511
+ if (ar) { Object.assign(ar, event.payload, { status: 'redirect' }); renderActionLog(); }
512
+ break;
513
+
486
514
  case 'action:error':
487
515
  const ae = state.actions.find(x => x.id === event.payload.id);
488
516
  if (ae) { Object.assign(ae, event.payload, { status: 'error' }); renderActionLog(); }
489
517
  break;
490
518
 
519
+ case 'devtools:pretext':
520
+ state.pretextLast = event.payload;
521
+ renderOverview();
522
+ renderDevRadarStrip();
523
+ break;
524
+
525
+ case 'security:audit':
526
+ state.securityTail.unshift({ ...event.payload, t: Date.now() });
527
+ if (state.securityTail.length > 24) state.securityTail.pop();
528
+ renderDevRadarStrip();
529
+ break;
530
+
531
+ case 'security:report':
532
+ state.securityReport = event.payload;
533
+ if (document.querySelector('nav button.active')?.dataset.panel === 'security') {
534
+ renderSecurityPanel();
535
+ }
536
+ break;
537
+
538
+ case 'rune:telemetry':
539
+ renderDevRadarStrip();
540
+ break;
541
+
491
542
  case 'cache:set':
492
543
  state.cache.set(event.payload.key, event.payload);
493
544
  renderCachePanel();
@@ -557,9 +608,37 @@ function studioHtml(port) {
557
608
  <span class="metric-label">Params</span>
558
609
  <span class="metric-value">\${Object.entries(r.params || {}).map(([k,v]) => k + '=' + v).join(', ') || '—'}</span>
559
610
  </div>
611
+ \${state.pretextLast ? \`
612
+ <div class="metric-row" style="margin-top:10px;border-top:1px solid var(--border);padding-top:8px">
613
+ <span class="metric-label">Pretext (nxPretext)</span>
614
+ <span class="metric-value good">\${state.pretextLast.durationMs}ms · \${state.pretextLast.parallelCount} parallel</span>
615
+ </div>
616
+ <div class="metric-row">
617
+ <span class="metric-label">Route pattern</span>
618
+ <span class="metric-value" style="font-size:10px;word-break:break-all">\${state.pretextLast.pattern}</span>
619
+ </div>\` : ''}
560
620
  \`;
561
621
  }
562
622
 
623
+ function renderDevRadarStrip() {
624
+ const el = document.getElementById('devradarStrip');
625
+ if (!el) return;
626
+ const sec = state.securityTail.slice(0, 8);
627
+ el.innerHTML =
628
+ (state.pretextLast
629
+ ? '<div style="font-size:10px;color:var(--muted);margin-bottom:6px">Last pretext: <span style="color:var(--green)">' +
630
+ state.pretextLast.durationMs + 'ms</span> · ' + state.pretextLast.pattern + '</div>'
631
+ : '') +
632
+ (sec.length
633
+ ? '<div style="font-size:10px;color:var(--amber)">Security</div>' +
634
+ sec.map(s =>
635
+ '<div style="font-size:10px;margin:4px 0;padding:4px;background:var(--bg);border-radius:4px">' +
636
+ '<span style="color:var(--red)">' + (s.kind || '') + '</span> · ' +
637
+ (s.action ? s.action + ' — ' : '') + (s.message || '') + '</div>'
638
+ ).join('')
639
+ : '<div style="font-size:10px;color:var(--muted)">No security events yet.</div>');
640
+ }
641
+
563
642
  function renderIslandPanel() {
564
643
  const el = document.getElementById('centerContent');
565
644
  const title = document.getElementById('centerPanelTitle');
@@ -640,6 +719,133 @@ function studioHtml(port) {
640
719
  \`).join('');
641
720
  }
642
721
 
722
+ function statusIcon(st) {
723
+ if (st === 'pass') return '<span style="color:var(--green)">✓</span>';
724
+ if (st === 'warn') return '<span style="color:var(--amber)">⚠</span>';
725
+ return '<span style="color:var(--muted)">○</span>';
726
+ }
727
+
728
+ function renderSecurityPanel() {
729
+ const el = document.getElementById('centerContent');
730
+ const title = document.getElementById('centerPanelTitle');
731
+ if (document.querySelector('nav button.active')?.dataset.panel !== 'security') return;
732
+ title.textContent = 'Security report';
733
+
734
+ if (!state.securityReport) {
735
+ el.innerHTML =
736
+ '<div class="empty-state">No snapshot yet. Start <code>nexus dev</code> with Studio + DevRadar enabled.</div>';
737
+ return;
738
+ }
739
+
740
+ const r = state.securityReport;
741
+ const hardenedRow =
742
+ '<div class="metric-row"><span class="metric-label">Hardened Mode</span>' +
743
+ '<span class="metric-value ' + (r.hardened ? 'good' : 'warn') + '">' +
744
+ (r.hardened ? 'enabled' : 'off — enable security.hardened in nexus.config') +
745
+ '</span></div>';
746
+
747
+ const rows = (r.checks || []).map(function (c) {
748
+ return (
749
+ '<div class="metric-row" style="align-items:flex-start;gap:8px">' +
750
+ '<span style="min-width:1.2rem">' + statusIcon(c.status) + '</span>' +
751
+ '<span class="metric-value" style="font-size:11px;line-height:1.4">' + c.label + '</span>' +
752
+ '</div>'
753
+ );
754
+ }).join('');
755
+
756
+ el.innerHTML =
757
+ '<div class="route-path" style="margin-bottom:8px">Defense in depth</div>' +
758
+ '<p style="font-size:10px;color:var(--muted);margin:0 0 12px;line-height:1.45">' +
759
+ 'Not a guarantee of total immunity — review compiler warnings on save and keep dependencies updated.' +
760
+ '</p>' +
761
+ hardenedRow +
762
+ '<div style="margin-top:12px;border-top:1px solid var(--border);padding-top:10px;font-size:10px;color:var(--muted)">Active checks</div>' +
763
+ rows;
764
+ }
765
+
766
+ function renderVaultPanel() {
767
+ const el = document.getElementById('centerContent');
768
+ const title = document.getElementById('centerPanelTitle');
769
+ if (document.querySelector('nav button.active')?.dataset.panel !== 'vault') return;
770
+ title.textContent = 'Vault-lite';
771
+ const origin = localStorage.getItem('nexusStudioVaultAppOrigin') || 'http://127.0.0.1:3000';
772
+ const tok = localStorage.getItem('nexusStudioVaultToken') || '';
773
+ el.innerHTML =
774
+ '<p style="font-size:10px;color:var(--muted);margin:0 0 12px;line-height:1.45">' +
775
+ 'Hot-reload secrets into the running dev server (<code>POST /_nexus/dev/vault</code>). ' +
776
+ '<strong>Save (merge)</strong> overlays keys; <strong>Reset from env + apply</strong> reloads <code>process.env</code> then applies the textarea (empty value removes a key). ' +
777
+ 'Optional: set ' +
778
+ '<code>NEXUS_DEV_VAULT_TOKEN</code> on the app and paste the same token below.</p>' +
779
+ '<label style="display:block;font-size:10px;color:var(--muted);margin-bottom:4px">App origin</label>' +
780
+ '<input id="vaultAppOrigin" type="text" value="" style="width:100%;padding:8px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-family:var(--mono);font-size:11px;margin-bottom:10px" />' +
781
+ '<label style="display:block;font-size:10px;color:var(--muted);margin-bottom:4px">Dev token (optional)</label>' +
782
+ '<input id="vaultToken" type="password" autocomplete="off" value="" placeholder="NEXUS_DEV_VAULT_TOKEN" style="width:100%;padding:8px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-family:var(--mono);font-size:11px;margin-bottom:10px" />' +
783
+ '<label style="display:block;font-size:10px;color:var(--muted);margin-bottom:4px">KEY=value lines (empty value removes key)</label>' +
784
+ '<textarea id="vaultLines" rows="12" style="width:100%;padding:8px;border-radius:6px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-family:var(--mono);font-size:11px;resize:vertical" placeholder="STRIPE_SECRET_KEY=sk_live_...\\nAPI_URL=https://api.example.com"></textarea>' +
785
+ '<div style="display:flex;gap:8px;margin-top:10px;align-items:center">' +
786
+ '<button type="button" id="vaultSavePatch" style="padding:8px 14px;border-radius:6px;border:none;background:var(--accent);color:#fff;font-family:var(--mono);font-size:11px;cursor:pointer">Save (merge)</button>' +
787
+ '<button type="button" id="vaultSaveReplace" style="padding:8px 14px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--text);font-family:var(--mono);font-size:11px;cursor:pointer">Reset from env + apply</button>' +
788
+ '</div>' +
789
+ '<div id="vaultStatus" style="margin-top:12px;font-size:11px;color:var(--muted)"></div>';
790
+ document.getElementById('vaultAppOrigin').value = origin;
791
+ document.getElementById('vaultToken').value = tok;
792
+
793
+ function parseLines(text) {
794
+ const patch = {};
795
+ for (const line of text.split(/\\r?\\n/)) {
796
+ const t = line.trim();
797
+ if (!t || t.startsWith('#')) continue;
798
+ const eq = t.indexOf('=');
799
+ if (eq < 1) continue;
800
+ const k = t.slice(0, eq).trim();
801
+ patch[k] = t.slice(eq + 1);
802
+ }
803
+ return patch;
804
+ }
805
+
806
+ async function send(replace) {
807
+ const status = document.getElementById('vaultStatus');
808
+ status.textContent = '';
809
+ const appOrigin = document.getElementById('vaultAppOrigin').value.trim().replace(/\\/$/, '');
810
+ const token = document.getElementById('vaultToken').value;
811
+ const patch = parseLines(document.getElementById('vaultLines').value);
812
+ if (!appOrigin) {
813
+ status.style.color = 'var(--red)';
814
+ status.textContent = 'App origin is required.';
815
+ return;
816
+ }
817
+ localStorage.setItem('nexusStudioVaultAppOrigin', appOrigin);
818
+ localStorage.setItem('nexusStudioVaultToken', token);
819
+ try {
820
+ const r = await fetch('/_nexus/studio/vault', {
821
+ method: 'POST',
822
+ headers: { 'content-type': 'application/json' },
823
+ body: JSON.stringify({ appOrigin, token: token || undefined, patch, replace }),
824
+ });
825
+ const text = await r.text();
826
+ let j;
827
+ try {
828
+ j = JSON.parse(text);
829
+ } catch {
830
+ j = { error: text || 'Invalid response' };
831
+ }
832
+ if (!r.ok) {
833
+ status.style.color = 'var(--red)';
834
+ status.textContent = (j && j.error) ? j.error : 'Request failed (' + r.status + ')';
835
+ return;
836
+ }
837
+ status.style.color = 'var(--green)';
838
+ status.textContent = (j.ok ? 'OK — ' : '') + (j.keys != null ? j.keys + ' keys' : 'saved');
839
+ } catch (e) {
840
+ status.style.color = 'var(--red)';
841
+ status.textContent = (e && e.message) ? e.message : String(e);
842
+ }
843
+ }
844
+
845
+ document.getElementById('vaultSavePatch').onclick = function () { send(false); };
846
+ document.getElementById('vaultSaveReplace').onclick = function () { send(true); };
847
+ }
848
+
643
849
  // ── Nav ───────────────────────────────────────────────────────────────────
644
850
  const panelRenderers = {
645
851
  overview: renderOverview,
@@ -647,6 +853,8 @@ function studioHtml(port) {
647
853
  actions: () => {},
648
854
  cache: renderCachePanel,
649
855
  store: renderStorePanel,
856
+ vault: renderVaultPanel,
857
+ security: renderSecurityPanel,
650
858
  };
651
859
 
652
860
  document.querySelectorAll('nav button').forEach(btn => {
@@ -676,6 +884,65 @@ function studioHtml(port) {
676
884
  export async function startStudio(preferredPort = STUDIO_PORT) {
677
885
  const port = await findFreePort(preferredPort);
678
886
  const server = createHttpServer((req, res) => {
887
+ const pathOnly = (req.url ?? '/').split('?')[0] ?? '/';
888
+ if (req.method === 'POST' && pathOnly === '/_nexus/studio/vault') {
889
+ void (async () => {
890
+ const chunks = [];
891
+ try {
892
+ for await (const chunk of req)
893
+ chunks.push(Buffer.from(chunk));
894
+ }
895
+ catch {
896
+ res.writeHead(400).end();
897
+ return;
898
+ }
899
+ let parsed;
900
+ try {
901
+ parsed = JSON.parse(Buffer.concat(chunks).toString('utf-8') || '{}');
902
+ }
903
+ catch {
904
+ res.writeHead(400, { 'content-type': 'application/json' });
905
+ res.end(JSON.stringify({ error: 'Invalid JSON' }));
906
+ return;
907
+ }
908
+ const o = parsed;
909
+ const appOrigin = typeof o.appOrigin === 'string' ? o.appOrigin.replace(/\/$/, '') : '';
910
+ if (!appOrigin) {
911
+ res.writeHead(400, { 'content-type': 'application/json' });
912
+ res.end(JSON.stringify({ error: 'appOrigin required' }));
913
+ return;
914
+ }
915
+ if (typeof o.patch !== 'object' || o.patch === null) {
916
+ res.writeHead(400, { 'content-type': 'application/json' });
917
+ res.end(JSON.stringify({ error: 'patch object required' }));
918
+ return;
919
+ }
920
+ const headers = { 'content-type': 'application/json' };
921
+ if (typeof o.token === 'string' && o.token !== '') {
922
+ headers['authorization'] = `Bearer ${o.token}`;
923
+ headers['x-nexus-dev-vault-token'] = o.token;
924
+ }
925
+ try {
926
+ const r = await fetch(`${appOrigin}/_nexus/dev/vault`, {
927
+ method: 'POST',
928
+ headers,
929
+ body: JSON.stringify({ patch: o.patch, replace: o.replace === true }),
930
+ });
931
+ const body = await r.text();
932
+ res.writeHead(r.status, { 'content-type': 'application/json' });
933
+ res.end(body);
934
+ }
935
+ catch (e) {
936
+ const msg = e instanceof Error ? e.message : String(e);
937
+ res.writeHead(502, { 'content-type': 'application/json' });
938
+ res.end(JSON.stringify({
939
+ error: msg,
940
+ hint: 'Ensure nexus dev is running and the app origin matches (e.g. http://127.0.0.1:3000).',
941
+ }));
942
+ }
943
+ })();
944
+ return;
945
+ }
679
946
  if (req.url === '/_nexus/studio' && req.headers.upgrade?.toLowerCase() === 'websocket') {
680
947
  return; // Handled by upgrade event
681
948
  }
@@ -1 +1 @@
1
- {"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"studio.js","sourceRoot":"","sources":["../src/studio.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nexus_js/cli",
3
- "version": "0.7.1",
3
+ "version": "0.7.4",
4
4
  "description": "Nexus CLI — create, develop and build Nexus applications",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,10 +16,12 @@
16
16
  }
17
17
  },
18
18
  "dependencies": {
19
- "@nexus_js/router": "0.7.1",
20
- "@nexus_js/compiler": "0.7.1",
21
- "@nexus_js/audit": "0.7.1",
22
- "@nexus_js/server": "0.7.1"
19
+ "jiti": "^2.6.1",
20
+ "@nexus_js/audit": "0.7.4",
21
+ "@nexus_js/server": "0.7.4",
22
+ "@nexus_js/security": "0.7.4",
23
+ "@nexus_js/router": "0.7.4",
24
+ "@nexus_js/compiler": "0.7.4"
23
25
  },
24
26
  "devDependencies": {
25
27
  "@types/node": "^22.0.0",