nothumanallowed 13.2.42 → 13.2.43

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nothumanallowed",
3
- "version": "13.2.42",
3
+ "version": "13.2.43",
4
4
  "description": "NotHumanAllowed — 38 AI agents, 80 tools, Studio (visual agentic workflows). Email, calendar, browser automation, screen capture, canvas, cron/heartbeat, Alexandria E2E messaging, GitHub, Notion, Slack, voice chat, free AI (Liara), 28 languages. Zero-dependency CLI.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/constants.mjs CHANGED
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'url';
5
5
  const __filename = fileURLToPath(import.meta.url);
6
6
  const __dirname = path.dirname(__filename);
7
7
 
8
- export const VERSION = '13.2.42';
8
+ export const VERSION = '13.2.43';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -204,9 +204,8 @@ function switchView(v) {
204
204
  document.querySelectorAll('.nav-item').forEach(function(el){
205
205
  if(el.dataset.view===v){el.classList.add('nav-item--active')}else{el.classList.remove('nav-item--active')}
206
206
  });
207
- var titles = {dashboard:'Dashboard',chat:'Chat',plan:'Daily Plan',tasks:'Tasks',emails:'Emails',calendar:'Calendar',drive:'Drive',contacts:'Contacts',notes:'Notes',onedrive:'OneDrive',mstodo:'Microsoft To Do',agents:'Agents',studio:'Studio',settings:'Settings'};
208
207
  var spt=document.getElementById('sidebarPageTitle');
209
- if(spt)spt.textContent=titles[v]||v;
208
+ if(spt)spt.textContent=t('nav_'+v)||v;
210
209
  // Toggle content--chat class for proper chat layout (no overflow, flex column)
211
210
  var ct=document.getElementById('content');
212
211
  if(ct){if(v==='chat'){ct.classList.add('content--chat')}else{ct.classList.remove('content--chat')}}
@@ -2438,8 +2437,11 @@ function saveSettingsSection(sectionId) {
2438
2437
  try {
2439
2438
  var cfg2 = JSON.parse(localStorage.getItem('nha_config_cache') || '{}');
2440
2439
  var ln = langNames[cfg2.lang] || cfg2.lang || 'Italian';
2441
- statusEl.textContent = ' Language set to ' + ln + '. All agents and Studio will now respond in ' + ln + '.';
2442
- } catch(e) { statusEl.textContent = '✓ Saved!'; }
2440
+ statusEl.textContent = t('lang_set') + ' ' + ln + '. ' + t('agents_respond') + ' ' + ln + '.';
2441
+ // Re-render sidebar and current view in new language
2442
+ renderSidebar();
2443
+ render();
2444
+ } catch(e) { statusEl.textContent = t('saved'); }
2443
2445
  } else {
2444
2446
  statusEl.textContent = 'Saved!';
2445
2447
  }
@@ -2767,6 +2769,16 @@ var I18N = {
2767
2769
  settings_save:'Save',
2768
2770
  no_output:'(no output)', done:'(done)',
2769
2771
  token_label:'Tokens',
2772
+ // Sidebar
2773
+ nav_overview:'Overview', nav_google:'Google', nav_microsoft:'Microsoft',
2774
+ nav_integrations:'Integrations', nav_ai:'AI', nav_config:'Config', nav_help:'Help',
2775
+ nav_dashboard:'Dashboard', nav_chat:'Chat', nav_plan:'Plan', nav_tasks:'Tasks',
2776
+ nav_emails:'Emails', nav_calendar:'Calendar', nav_drive:'Drive',
2777
+ nav_contacts:'Contacts', nav_notes:'Notes', nav_onedrive:'OneDrive',
2778
+ nav_mstodo:'To Do', nav_github:'GitHub', nav_notion:'Notion',
2779
+ nav_slack:'Slack', nav_birthdays:'Birthdays', nav_agents:'Agents',
2780
+ nav_studio:'Studio', nav_collab:'AgentMessenger', nav_settings:'Settings',
2781
+ nav_docs:'Documentation', nav_agents_guide:'Agents Guide', nav_mobile:'Mobile App',
2770
2782
  },
2771
2783
  it: {
2772
2784
  chat:'Chat', studio:'Studio', settings:'Impostazioni', agents:'Agenti',
@@ -2784,6 +2796,16 @@ var I18N = {
2784
2796
  settings_save:'Salva',
2785
2797
  no_output:'(nessun output)', done:'(completato)',
2786
2798
  token_label:'Token',
2799
+ // Sidebar
2800
+ nav_overview:'Panoramica', nav_google:'Google', nav_microsoft:'Microsoft',
2801
+ nav_integrations:'Integrazioni', nav_ai:'AI', nav_config:'Config', nav_help:'Aiuto',
2802
+ nav_dashboard:'Dashboard', nav_chat:'Chat', nav_plan:'Piano', nav_tasks:'Attivit\u00e0',
2803
+ nav_emails:'Email', nav_calendar:'Calendario', nav_drive:'Drive',
2804
+ nav_contacts:'Contatti', nav_notes:'Note', nav_onedrive:'OneDrive',
2805
+ nav_mstodo:'To Do', nav_github:'GitHub', nav_notion:'Notion',
2806
+ nav_slack:'Slack', nav_birthdays:'Compleanni', nav_agents:'Agenti',
2807
+ nav_studio:'Studio', nav_collab:'AgentMessenger', nav_settings:'Impostazioni',
2808
+ nav_docs:'Documentazione', nav_agents_guide:'Guida Agenti', nav_mobile:'App Mobile',
2787
2809
  },
2788
2810
  es: {
2789
2811
  chat:'Chat', studio:'Studio', settings:'Configuración', agents:'Agentes',
@@ -2801,6 +2823,15 @@ var I18N = {
2801
2823
  settings_save:'Guardar',
2802
2824
  no_output:'(sin salida)', done:'(hecho)',
2803
2825
  token_label:'Tokens',
2826
+ nav_overview:'Resumen', nav_google:'Google', nav_microsoft:'Microsoft',
2827
+ nav_integrations:'Integraciones', nav_ai:'IA', nav_config:'Config', nav_help:'Ayuda',
2828
+ nav_dashboard:'Panel', nav_chat:'Chat', nav_plan:'Plan', nav_tasks:'Tareas',
2829
+ nav_emails:'Correos', nav_calendar:'Calendario', nav_drive:'Drive',
2830
+ nav_contacts:'Contactos', nav_notes:'Notas', nav_onedrive:'OneDrive',
2831
+ nav_mstodo:'Tareas MS', nav_github:'GitHub', nav_notion:'Notion',
2832
+ nav_slack:'Slack', nav_birthdays:'Cumplea\u00f1os', nav_agents:'Agentes',
2833
+ nav_studio:'Studio', nav_collab:'AgentMessenger', nav_settings:'Configuraci\u00f3n',
2834
+ nav_docs:'Documentaci\u00f3n', nav_agents_guide:'Gu\u00eda Agentes', nav_mobile:'App M\u00f3vil',
2804
2835
  },
2805
2836
  fr: {
2806
2837
  chat:'Chat', studio:'Studio', settings:'Paramètres', agents:'Agents',
@@ -2818,6 +2849,15 @@ var I18N = {
2818
2849
  settings_save:'Sauvegarder',
2819
2850
  no_output:'(aucune sortie)', done:'(terminé)',
2820
2851
  token_label:'Tokens',
2852
+ nav_overview:'Aperçu', nav_google:'Google', nav_microsoft:'Microsoft',
2853
+ nav_integrations:'Intégrations', nav_ai:'IA', nav_config:'Config', nav_help:'Aide',
2854
+ nav_dashboard:'Tableau de bord', nav_chat:'Chat', nav_plan:'Plan', nav_tasks:'T\u00e2ches',
2855
+ nav_emails:'Courriels', nav_calendar:'Calendrier', nav_drive:'Drive',
2856
+ nav_contacts:'Contacts', nav_notes:'Notes', nav_onedrive:'OneDrive',
2857
+ nav_mstodo:'To Do', nav_github:'GitHub', nav_notion:'Notion',
2858
+ nav_slack:'Slack', nav_birthdays:'Anniversaires', nav_agents:'Agents',
2859
+ nav_studio:'Studio', nav_collab:'AgentMessenger', nav_settings:'Param\u00e8tres',
2860
+ nav_docs:'Documentation', nav_agents_guide:'Guide Agents', nav_mobile:'App Mobile',
2821
2861
  },
2822
2862
  de: {
2823
2863
  chat:'Chat', studio:'Studio', settings:'Einstellungen', agents:'Agenten',
@@ -2835,6 +2875,15 @@ var I18N = {
2835
2875
  settings_save:'Speichern',
2836
2876
  no_output:'(keine Ausgabe)', done:'(erledigt)',
2837
2877
  token_label:'Token',
2878
+ nav_overview:'Übersicht', nav_google:'Google', nav_microsoft:'Microsoft',
2879
+ nav_integrations:'Integrationen', nav_ai:'KI', nav_config:'Konfig', nav_help:'Hilfe',
2880
+ nav_dashboard:'Dashboard', nav_chat:'Chat', nav_plan:'Plan', nav_tasks:'Aufgaben',
2881
+ nav_emails:'E-Mails', nav_calendar:'Kalender', nav_drive:'Drive',
2882
+ nav_contacts:'Kontakte', nav_notes:'Notizen', nav_onedrive:'OneDrive',
2883
+ nav_mstodo:'To Do', nav_github:'GitHub', nav_notion:'Notion',
2884
+ nav_slack:'Slack', nav_birthdays:'Geburtstage', nav_agents:'Agenten',
2885
+ nav_studio:'Studio', nav_collab:'AgentMessenger', nav_settings:'Einstellungen',
2886
+ nav_docs:'Dokumentation', nav_agents_guide:'Agenten-Leitfaden', nav_mobile:'Mobile App',
2838
2887
  },
2839
2888
  };
2840
2889
  // Fallback to 'en' for unmapped languages
@@ -2847,6 +2896,79 @@ function t(key) {
2847
2896
  } catch(e) { return I18N.en[key] || key; }
2848
2897
  }
2849
2898
 
2899
+ function renderSidebar() {
2900
+ var sb = document.getElementById('sidebar');
2901
+ if (!sb) return;
2902
+ var activeView = typeof currentView !== \x27undefined\x27 ? currentView : \x27dashboard\x27;
2903
+ function ni(view, icon, labelKey, badgeId, badgeStyle, extra) {
2904
+ var active = view === activeView ? \x27 nav-item--active\x27 : \x27\x27;
2905
+ var badge = badgeId ? \x27<span class="nav-item__badge" id="\x27+badgeId+\x27" style="display:none\x27+(badgeStyle?(\x27;\x27+badgeStyle):\x27\x27)+\x27">0</span>\x27 : \x27\x27;
2906
+ var ext = extra || \x27\x27;
2907
+ return \x27<div class="nav-item\x27+active+\x27" data-view="\x27+view+\x27" onclick="switchView(\\\x27\x27+view+\x27\\\x27)">\x27+
2908
+ \x27<span class="nav-item__icon">\x27+icon+\x27</span> \x27+t(\x27nav_\x27+labelKey)+badge+ext+\x27</div>\x27;
2909
+ }
2910
+ sb.innerHTML =
2911
+ \x27<div class="sidebar__brand">\x27+
2912
+ \x27<button class="sidebar__close" onclick="closeSidebar()" title="Close menu">&times;</button>\x27+
2913
+ \x27<div style="display:flex;align-items:center;gap:8px">\x27+
2914
+ \x27<div class="sidebar__brand-name">NHA</div>\x27+
2915
+ \x27<span id="wsIndicator" style="color:var(--dim);font-size:8px" title="Daemon WebSocket">&#9679;</span>\x27+
2916
+ \x27</div>\x27+
2917
+ \x27<div id="sidebarPageTitle" style="font-size:11px;color:var(--bright);margin-top:4px;font-weight:600">\x27+t(\x27nav_dashboard\x27)+\x27</div>\x27+
2918
+ \x27<div class="sidebar__brand-sub" id="clock"></div>\x27+
2919
+ \x27</div>\x27+
2920
+ \x27<div class="sidebar__section">\x27+
2921
+ \x27<div class="sidebar__label">\x27+t(\x27nav_overview\x27)+\x27</div>\x27+
2922
+ ni(\x27dashboard\x27,\x27&#9632;\x27,\x27dashboard\x27)+
2923
+ ni(\x27chat\x27,\x27&#128172;\x27,\x27chat\x27)+
2924
+ ni(\x27plan\x27,\x27&#9733;\x27,\x27plan\x27)+
2925
+ ni(\x27tasks\x27,\x27&#9745;\x27,\x27tasks\x27,\x27taskBadge\x27)+
2926
+ \x27</div>\x27+
2927
+ \x27<div class="sidebar__section">\x27+
2928
+ \x27<div class="sidebar__label">\x27+t(\x27nav_google\x27)+\x27</div>\x27+
2929
+ ni(\x27emails\x27,\x27&#128231;\x27,\x27emails\x27,\x27emailBadge\x27)+
2930
+ ni(\x27calendar\x27,\x27&#128197;\x27,\x27calendar\x27,\x27calBadge\x27,\x27background:var(--amber)\x27)+
2931
+ ni(\x27drive\x27,\x27&#128193;\x27,\x27drive\x27)+
2932
+ ni(\x27contacts\x27,\x27&#128101;\x27,\x27contacts\x27)+
2933
+ ni(\x27notes\x27,\x27&#128221;\x27,\x27notes\x27)+
2934
+ \x27</div>\x27+
2935
+ \x27<div class="sidebar__section">\x27+
2936
+ \x27<div class="sidebar__label">\x27+t(\x27nav_microsoft\x27)+\x27</div>\x27+
2937
+ ni(\x27onedrive\x27,\x27&#9729;\x27,\x27onedrive\x27)+
2938
+ ni(\x27mstodo\x27,\x27&#128203;\x27,\x27mstodo\x27)+
2939
+ \x27</div>\x27+
2940
+ \x27<div class="sidebar__section">\x27+
2941
+ \x27<div class="sidebar__label">\x27+t(\x27nav_integrations\x27)+\x27</div>\x27+
2942
+ ni(\x27github\x27,\x27&#128736;\x27,\x27github\x27)+
2943
+ ni(\x27notion\x27,\x27&#128214;\x27,\x27notion\x27)+
2944
+ ni(\x27slack\x27,\x27&#128488;\x27,\x27slack\x27)+
2945
+ ni(\x27birthdays\x27,\x27&#127874;\x27,\x27birthdays\x27)+
2946
+ \x27</div>\x27+
2947
+ \x27<div class="sidebar__section">\x27+
2948
+ \x27<div class="sidebar__label">\x27+t(\x27nav_ai\x27)+\x27</div>\x27+
2949
+ ni(\x27agents\x27,\x27&#129302;\x27,\x27agents\x27)+
2950
+ \x27<div class="nav-item\x27+(activeView===\x27studio\x27?\x27 nav-item--active\x27:\x27\x27)+\x27" data-view="studio" onclick="switchView(\\\x27studio\\\x27)">\x27+
2951
+ \x27<span class="nav-item__icon">&#9881;</span> \x27+t(\x27nav_studio\x27)+
2952
+ \x27<span style="font-size:8px;padding:1px 5px;border-radius:4px;background:rgba(99,102,241,.25);color:var(--green);margin-left:4px;font-weight:700">NEW</span>\x27+
2953
+ \x27</div>\x27+
2954
+ \x27<div class="nav-item\x27+(activeView===\x27collab\x27?\x27 nav-item--active\x27:\x27\x27)+\x27" data-view="collab" onclick="switchView(\\\x27collab\\\x27)">\x27+
2955
+ \x27<span class="nav-item__icon">&#128274;</span> \x27+t(\x27nav_collab\x27)+
2956
+ \x27<span id="collabBadge" style="display:none;background:var(--red);color:#fff;font-size:9px;padding:1px 5px;border-radius:8px;margin-left:4px;font-family:var(--mono)">0</span>\x27+
2957
+ \x27</div>\x27+
2958
+ \x27</div>\x27+
2959
+ \x27<div class="sidebar__section">\x27+
2960
+ \x27<div class="sidebar__label">\x27+t(\x27nav_config\x27)+\x27</div>\x27+
2961
+ ni(\x27settings\x27,\x27&#9881;\x27,\x27settings\x27)+
2962
+ \x27</div>\x27+
2963
+ \x27<div class="sidebar__section">\x27+
2964
+ \x27<div class="sidebar__label">\x27+t(\x27nav_help\x27)+\x27</div>\x27+
2965
+ \x27<a href="https://nothumanallowed.com/docs" target="_blank" class="nav-item" style="text-decoration:none"><span class="nav-item__icon">&#128214;</span> \x27+t(\x27nav_docs\x27)+\x27</a>\x27+
2966
+ \x27<a href="https://nothumanallowed.com/docs/agents" target="_blank" class="nav-item" style="text-decoration:none"><span class="nav-item__icon">&#129302;</span> \x27+t(\x27nav_agents_guide\x27)+\x27</a>\x27+
2967
+ \x27<a href="https://nothumanallowed.com/docs/mobile" target="_blank" class="nav-item" style="text-decoration:none"><span class="nav-item__icon">&#128241;</span> \x27+t(\x27nav_mobile\x27)+\x27</a>\x27+
2968
+ \x27</div>\x27+
2969
+ \x27<div style="padding:12px 16px;margin-top:auto;border-top:1px solid var(--border);font-size:10px;color:var(--dim)">nothumanallowed.com</div>\x27;
2970
+ }
2971
+
2850
2972
  var studioState = {
2851
2973
  task: '',
2852
2974
  nodes: [], // [{icon,agent,label,status:'waiting'|'running'|'done'|'error'}]
@@ -3597,18 +3719,17 @@ async function runManualWorkflow() {
3597
3719
 
3598
3720
  // ---- INIT ----
3599
3721
  function init(){
3722
+ renderSidebar();
3600
3723
  var el=document.getElementById('content');
3601
- if(el)el.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:50vh;flex-direction:column"><div class="spinner"></div><div style="color:var(--dim)">Loading...</div></div>';
3724
+ if(el)el.innerHTML=\x27<div style="display:flex;align-items:center;justify-content:center;height:50vh;flex-direction:column"><div class="spinner"></div><div style="color:var(--dim)">Loading...</div></div>\x27;
3602
3725
  loadDash().then(function(){render()}).catch(function(){render()});
3603
3726
  loadAgents().catch(function(){});
3604
- setInterval(function(){loadDash().then(function(){if(currentView==='dashboard')render()}).catch(function(){})},120000);
3605
- // Connect to daemon WebSocket for real-time notifications
3727
+ setInterval(function(){loadDash().then(function(){if(currentView===\x27dashboard\x27)render()}).catch(function(){})},120000);
3606
3728
  connectWebSocket();
3607
- // Make floating panels draggable
3608
3729
  var bv=document.getElementById('browserViewer');
3609
- if(bv)makeDraggable(bv,'.browser-viewer__header');
3730
+ if(bv)makeDraggable(bv,\x27.browser-viewer__header\x27);
3610
3731
  var cp=document.getElementById('canvasPanel');
3611
- if(cp)makeDraggable(cp,'.cvs-header');
3732
+ if(cp)makeDraggable(cp,\x27.cvs-header\x27);
3612
3733
  }
3613
3734
  init();
3614
3735
  `;
@@ -4002,62 +4123,7 @@ input:focus,textarea:focus{border-color:var(--green3)}
4002
4123
  <div class="sidebar__overlay" id="overlay" onclick="closeSidebar()"></div>
4003
4124
 
4004
4125
  <div class="app">
4005
- <nav class="sidebar" id="sidebar">
4006
- <div class="sidebar__brand">
4007
- <button class="sidebar__close" onclick="closeSidebar()" title="Close menu">&times;</button>
4008
- <div style="display:flex;align-items:center;gap:8px">
4009
- <div class="sidebar__brand-name">NHA</div>
4010
- <span id="wsIndicator" style="color:var(--dim);font-size:8px" title="Daemon WebSocket">&#9679;</span>
4011
- <span style="font-size:9px;color:var(--dim)">v${VERSION}</span>
4012
- </div>
4013
- <div id="sidebarPageTitle" style="font-size:11px;color:var(--bright);margin-top:4px;font-weight:600">Dashboard</div>
4014
- <div class="sidebar__brand-sub" id="clock"></div>
4015
- </div>
4016
- <div class="sidebar__section">
4017
- <div class="sidebar__label">Overview</div>
4018
- <div class="nav-item nav-item--active" data-view="dashboard" onclick="switchView('dashboard')"><span class="nav-item__icon">&#9632;</span> Dashboard</div>
4019
- <div class="nav-item" data-view="chat" onclick="switchView('chat')"><span class="nav-item__icon">&#128172;</span> Chat</div>
4020
- <div class="nav-item" data-view="plan" onclick="switchView('plan')"><span class="nav-item__icon">&#9733;</span> Plan</div>
4021
- <div class="nav-item" data-view="tasks" onclick="switchView('tasks')"><span class="nav-item__icon">&#9745;</span> Tasks <span class="nav-item__badge" id="taskBadge" style="display:none">0</span></div>
4022
- </div>
4023
- <div class="sidebar__section">
4024
- <div class="sidebar__label">Google</div>
4025
- <div class="nav-item" data-view="emails" onclick="switchView('emails')"><span class="nav-item__icon">&#128231;</span> Emails <span class="nav-item__badge" id="emailBadge" style="display:none">0</span></div>
4026
- <div class="nav-item" data-view="calendar" onclick="switchView('calendar')"><span class="nav-item__icon">&#128197;</span> Calendar <span class="nav-item__badge" id="calBadge" style="display:none;background:var(--amber)">0</span></div>
4027
- <div class="nav-item" data-view="drive" onclick="switchView('drive')"><span class="nav-item__icon">&#128193;</span> Drive</div>
4028
- <div class="nav-item" data-view="contacts" onclick="switchView('contacts')"><span class="nav-item__icon">&#128101;</span> Contacts</div>
4029
- <div class="nav-item" data-view="notes" onclick="switchView('notes')"><span class="nav-item__icon">&#128221;</span> Notes</div>
4030
- </div>
4031
- <div class="sidebar__section">
4032
- <div class="sidebar__label">Microsoft</div>
4033
- <div class="nav-item" data-view="onedrive" onclick="switchView('onedrive')"><span class="nav-item__icon">&#9729;</span> OneDrive</div>
4034
- <div class="nav-item" data-view="mstodo" onclick="switchView('mstodo')"><span class="nav-item__icon">&#128203;</span> To Do</div>
4035
- </div>
4036
- <div class="sidebar__section">
4037
- <div class="sidebar__label">Integrations</div>
4038
- <div class="nav-item" data-view="github" onclick="switchView('github')"><span class="nav-item__icon">&#128736;</span> GitHub</div>
4039
- <div class="nav-item" data-view="notion" onclick="switchView('notion')"><span class="nav-item__icon">&#128214;</span> Notion</div>
4040
- <div class="nav-item" data-view="slack" onclick="switchView('slack')"><span class="nav-item__icon">&#128488;</span> Slack</div>
4041
- <div class="nav-item" data-view="birthdays" onclick="switchView('birthdays')"><span class="nav-item__icon">&#127874;</span> Birthdays</div>
4042
- </div>
4043
- <div class="sidebar__section">
4044
- <div class="sidebar__label">AI</div>
4045
- <div class="nav-item" data-view="agents" onclick="switchView('agents')"><span class="nav-item__icon">&#129302;</span> Agents</div>
4046
- <div class="nav-item" data-view="studio" onclick="switchView('studio')"><span class="nav-item__icon">&#9881;</span> Studio <span style="font-size:8px;padding:1px 5px;border-radius:4px;background:rgba(99,102,241,.25);color:var(--green);margin-left:4px;font-weight:700">NEW</span></div>
4047
- <div class="nav-item" data-view="collab" onclick="switchView('collab')"><span class="nav-item__icon">&#128274;</span> AgentMessenger <span id="collabBadge" style="display:none;background:var(--red);color:#fff;font-size:9px;padding:1px 5px;border-radius:8px;margin-left:4px;font-family:var(--mono)">0</span></div>
4048
- </div>
4049
- <div class="sidebar__section">
4050
- <div class="sidebar__label">Config</div>
4051
- <div class="nav-item" data-view="settings" onclick="switchView('settings')"><span class="nav-item__icon">&#9881;</span> Settings</div>
4052
- </div>
4053
- <div class="sidebar__section">
4054
- <div class="sidebar__label">Help</div>
4055
- <a href="https://nothumanallowed.com/docs" target="_blank" class="nav-item" style="text-decoration:none"><span class="nav-item__icon">&#128214;</span> Documentation</a>
4056
- <a href="https://nothumanallowed.com/docs/agents" target="_blank" class="nav-item" style="text-decoration:none"><span class="nav-item__icon">&#129302;</span> Agents Guide</a>
4057
- <a href="https://nothumanallowed.com/docs/mobile" target="_blank" class="nav-item" style="text-decoration:none"><span class="nav-item__icon">&#128241;</span> Mobile App</a>
4058
- </div>
4059
- <div style="padding:12px 16px;margin-top:auto;border-top:1px solid var(--border);font-size:10px;color:var(--dim)">nothumanallowed.com</div>
4060
- </nav>
4126
+ <nav class="sidebar" id="sidebar"></nav>
4061
4127
 
4062
4128
  <button onclick="openSidebar()" style="position:fixed;top:6px;left:6px;z-index:100;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);color:var(--green);font-size:16px;padding:4px 8px;cursor:pointer;line-height:1;opacity:0.85" id="mobileBurger">&#9776;</button>
4063
4129