nothumanallowed 13.2.42 → 13.2.44
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 +1 -1
- package/src/commands/ui.mjs +15 -4
- package/src/constants.mjs +1 -1
- package/src/services/web-ui.mjs +132 -66
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.2.
|
|
3
|
+
"version": "13.2.44",
|
|
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/commands/ui.mjs
CHANGED
|
@@ -2600,7 +2600,11 @@ export async function cmdUI(args) {
|
|
|
2600
2600
|
if (!hasSpecialist && (hasBriefing || steps.length > 0)) {
|
|
2601
2601
|
steps.push({icon:'\u{1F4F0}',agent:'HERALD',label:it?'HERALD \u2014 Briefing esecutivo':'HERALD \u2014 Executive briefing',prompt:'Based on ALL the data collected by the previous steps, write a complete executive briefing with priorities, findings, and strategic recommendations. Do NOT invent data — only use what was provided.'});
|
|
2602
2602
|
}
|
|
2603
|
-
|
|
2603
|
+
// Add CanvasAgent: always when explicitly requested OR when 2+ specialist agents ran (complex analysis deserves a visual report)
|
|
2604
|
+
const specialistCount = [hasSecurity,hasFinance,hasStrategy,hasReputation,hasCode,hasWriting,hasData].filter(Boolean).length;
|
|
2605
|
+
if (hasCanvas || specialistCount >= 2 || (hasSpecialist && hasBriefing)) {
|
|
2606
|
+
steps.push({icon:'\u{1F4CA}',agent:'CanvasAgent',label:it?'Dashboard HTML':'HTML Dashboard',prompt:'Create a professional HTML dashboard report summarizing all findings from the previous agents'});
|
|
2607
|
+
}
|
|
2604
2608
|
return steps;
|
|
2605
2609
|
};
|
|
2606
2610
|
|
|
@@ -2822,8 +2826,12 @@ RULES:
|
|
|
2822
2826
|
// These agents fetched real data — use a focused prompt (no tool definitions to avoid JSON output)
|
|
2823
2827
|
const agentInstruction = `You are ${agent}, a specialist AI agent inside NHA Studio. Today is ${today}. Respond entirely in ${language}.
|
|
2824
2828
|
|
|
2829
|
+
## OVERALL WORKFLOW GOAL:
|
|
2830
|
+
${task}
|
|
2831
|
+
|
|
2825
2832
|
CRITICAL: Do NOT invent, hallucinate, or add any data not present in the DATA sections below. ONLY use the exact data provided.
|
|
2826
2833
|
Do NOT output JSON, tool calls, or code blocks. Write in plain text with markdown headers.
|
|
2834
|
+
Always apply your analysis specifically to the subject mentioned in the WORKFLOW GOAL.
|
|
2827
2835
|
|
|
2828
2836
|
${toolData ? `## DATA FROM TOOLS:\n${toolData.slice(0, 6000)}\n` : '## DATA: No data was retrieved by this agent.\n'}
|
|
2829
2837
|
${context ? `## OUTPUT FROM PREVIOUS AGENTS:\n${context.slice(0, 4000)}\n` : ''}
|
|
@@ -2837,10 +2845,12 @@ Your task: ${stepPrompt}`;
|
|
|
2837
2845
|
: stepPrompt;
|
|
2838
2846
|
} else {
|
|
2839
2847
|
// All other agents (WriterAgent, DataAnalystAgent, specialist agents, etc.)
|
|
2840
|
-
// Use a focused prompt with NO TOOL_DEFINITIONS to prevent JSON/tool-call output
|
|
2841
2848
|
const hasRealData = !!(toolData || context);
|
|
2842
2849
|
sysPrompt = `You are ${agent}, a specialist AI agent inside NHA Studio. Today is ${today}. You MUST respond entirely in ${language}.
|
|
2843
2850
|
|
|
2851
|
+
## OVERALL WORKFLOW GOAL:
|
|
2852
|
+
${task}
|
|
2853
|
+
|
|
2844
2854
|
CRITICAL RULES:
|
|
2845
2855
|
- Do NOT output JSON, tool calls, function calls, or code blocks
|
|
2846
2856
|
- NEVER invent, fabricate, or hallucinate data, events, emails, meetings, or news
|
|
@@ -2848,12 +2858,13 @@ CRITICAL RULES:
|
|
|
2848
2858
|
- Do NOT add fictional examples, placeholder content, or generic suggestions not grounded in the data
|
|
2849
2859
|
- Write in plain prose, structured with markdown headers (##) and bullet points (-)
|
|
2850
2860
|
- Be thorough and specific — this is for an executive briefing based on REAL data only
|
|
2861
|
+
- Always keep the OVERALL WORKFLOW GOAL in mind — apply your analysis specifically to the subject mentioned
|
|
2851
2862
|
|
|
2852
2863
|
${toolData ? `## LIVE DATA FROM TOOLS:\n${toolData.slice(0, 6000)}\n` : '## LIVE DATA: No tool data was fetched for this step.\n'}
|
|
2853
2864
|
${context ? `## OUTPUT FROM PREVIOUS AGENTS:\n${context.slice(0, 6000)}\n` : ''}`;
|
|
2854
2865
|
userMsg = hasRealData
|
|
2855
|
-
? `Based ONLY on the real data above, complete this task: ${stepPrompt}`
|
|
2856
|
-
: `No real data is available. State clearly
|
|
2866
|
+
? `Based ONLY on the real data above, complete this task specifically for the subject in the WORKFLOW GOAL: ${stepPrompt}`
|
|
2867
|
+
: `No real data is available for "${task}". State this clearly and explain what data would be needed to complete: ${stepPrompt}`;
|
|
2857
2868
|
}
|
|
2858
2869
|
|
|
2859
2870
|
// ── Stream LLM response ───────────────────────────────────────
|
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.
|
|
8
|
+
export const VERSION = '13.2.44';
|
|
9
9
|
export const BASE_URL = 'https://nothumanallowed.com/cli';
|
|
10
10
|
export const API_BASE = 'https://nothumanallowed.com/api/v1';
|
|
11
11
|
|
package/src/services/web-ui.mjs
CHANGED
|
@@ -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=
|
|
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 = '
|
|
2442
|
-
|
|
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">×</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">●</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■\x27,\x27dashboard\x27)+
|
|
2923
|
+
ni(\x27chat\x27,\x27💬\x27,\x27chat\x27)+
|
|
2924
|
+
ni(\x27plan\x27,\x27★\x27,\x27plan\x27)+
|
|
2925
|
+
ni(\x27tasks\x27,\x27☑\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📧\x27,\x27emails\x27,\x27emailBadge\x27)+
|
|
2930
|
+
ni(\x27calendar\x27,\x27📅\x27,\x27calendar\x27,\x27calBadge\x27,\x27background:var(--amber)\x27)+
|
|
2931
|
+
ni(\x27drive\x27,\x27📁\x27,\x27drive\x27)+
|
|
2932
|
+
ni(\x27contacts\x27,\x27👥\x27,\x27contacts\x27)+
|
|
2933
|
+
ni(\x27notes\x27,\x27📝\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☁\x27,\x27onedrive\x27)+
|
|
2938
|
+
ni(\x27mstodo\x27,\x27📋\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🛠\x27,\x27github\x27)+
|
|
2943
|
+
ni(\x27notion\x27,\x27📖\x27,\x27notion\x27)+
|
|
2944
|
+
ni(\x27slack\x27,\x27🗨\x27,\x27slack\x27)+
|
|
2945
|
+
ni(\x27birthdays\x27,\x27🎂\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🤖\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">⚙</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">🔒</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⚙\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">📖</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">🤖</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">📱</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
|
|
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
|
|
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
|
|
3730
|
+
if(bv)makeDraggable(bv,\x27.browser-viewer__header\x27);
|
|
3610
3731
|
var cp=document.getElementById('canvasPanel');
|
|
3611
|
-
if(cp)makeDraggable(cp
|
|
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">×</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">●</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">■</span> Dashboard</div>
|
|
4019
|
-
<div class="nav-item" data-view="chat" onclick="switchView('chat')"><span class="nav-item__icon">💬</span> Chat</div>
|
|
4020
|
-
<div class="nav-item" data-view="plan" onclick="switchView('plan')"><span class="nav-item__icon">★</span> Plan</div>
|
|
4021
|
-
<div class="nav-item" data-view="tasks" onclick="switchView('tasks')"><span class="nav-item__icon">☑</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">📧</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">📅</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">📁</span> Drive</div>
|
|
4028
|
-
<div class="nav-item" data-view="contacts" onclick="switchView('contacts')"><span class="nav-item__icon">👥</span> Contacts</div>
|
|
4029
|
-
<div class="nav-item" data-view="notes" onclick="switchView('notes')"><span class="nav-item__icon">📝</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">☁</span> OneDrive</div>
|
|
4034
|
-
<div class="nav-item" data-view="mstodo" onclick="switchView('mstodo')"><span class="nav-item__icon">📋</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">🛠</span> GitHub</div>
|
|
4039
|
-
<div class="nav-item" data-view="notion" onclick="switchView('notion')"><span class="nav-item__icon">📖</span> Notion</div>
|
|
4040
|
-
<div class="nav-item" data-view="slack" onclick="switchView('slack')"><span class="nav-item__icon">🗨</span> Slack</div>
|
|
4041
|
-
<div class="nav-item" data-view="birthdays" onclick="switchView('birthdays')"><span class="nav-item__icon">🎂</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">🤖</span> Agents</div>
|
|
4046
|
-
<div class="nav-item" data-view="studio" onclick="switchView('studio')"><span class="nav-item__icon">⚙</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">🔒</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">⚙</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">📖</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">🤖</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">📱</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">☰</button>
|
|
4063
4129
|
|