nothumanallowed 13.5.30 → 13.5.32
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/constants.mjs +1 -1
- package/src/services/web-ui.mjs +35 -14
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.5.
|
|
3
|
+
"version": "13.5.32",
|
|
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.5.
|
|
8
|
+
export const VERSION = '13.5.32';
|
|
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
|
@@ -231,6 +231,9 @@ var agentChatHistory = []; // [{role:'user'|'agent', text:'...'}]
|
|
|
231
231
|
|
|
232
232
|
// ---- NAV ----
|
|
233
233
|
function switchView(v) {
|
|
234
|
+
// Close any open modal (e.g. calendar day detail) before switching view
|
|
235
|
+
var modal=document.getElementById('agentModal');
|
|
236
|
+
if(modal&&modal.classList.contains('modal-overlay--open')){closeModal();}
|
|
234
237
|
currentView = v;
|
|
235
238
|
// Invalidate cached data so pages always show fresh content
|
|
236
239
|
if(v==='contacts')contactsData=null;
|
|
@@ -1195,6 +1198,16 @@ function calKey(y,m,d){return y+'-'+String(m+1).padStart(2,'0')+'-'+String(d).pa
|
|
|
1195
1198
|
function isToday(y,m,d){var t=new Date();return t.getFullYear()===y&&t.getMonth()===m&&t.getDate()===d}
|
|
1196
1199
|
|
|
1197
1200
|
function renderCalendar(el){
|
|
1201
|
+
// Guard: if Google not connected, show setup message — don't block on API call
|
|
1202
|
+
if(!settingsData.hasGoogle){
|
|
1203
|
+
el.innerHTML='<div style="max-width:400px;margin:60px auto;text-align:center;padding:32px;border:1px solid var(--border);border-radius:12px;background:var(--bg2)">' +
|
|
1204
|
+
'<div style="font-size:40px;margin-bottom:16px">📅</div>' +
|
|
1205
|
+
'<div style="color:var(--bright);font-size:18px;font-weight:700;margin-bottom:8px">Calendar</div>' +
|
|
1206
|
+
'<div style="color:var(--dim);font-size:13px;margin-bottom:24px">Connect your Google account to view and manage calendar events.</div>' +
|
|
1207
|
+
'<button onclick="switchView(\\x27settings\\x27)" style="background:var(--green3);color:var(--bg);padding:10px 24px;border-radius:var(--r);font-weight:700;font-size:13px;cursor:pointer;border:none">Connect Google \u2192</button>' +
|
|
1208
|
+
'</div>';
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1198
1211
|
var firstDay=new Date(calYear,calMonth,1).getDay();
|
|
1199
1212
|
var daysInMonth=new Date(calYear,calMonth+1,0).getDate();
|
|
1200
1213
|
var monthName=new Date(calYear,calMonth,1).toLocaleDateString('en',{month:'long',year:'numeric'});
|
|
@@ -3325,7 +3338,7 @@ var studioAbortController = null;
|
|
|
3325
3338
|
var parlActiveAgent = null; // active agent label during parliament streaming
|
|
3326
3339
|
var parlDoneAgents = {}; // set of completed agent labels during parliament
|
|
3327
3340
|
var _parlPersistHtml = null; // persists parliament block HTML across tab navigations
|
|
3328
|
-
var _PARL_STAMP = '<!--nha-parl-v13.5.
|
|
3341
|
+
var _PARL_STAMP = '<!--nha-parl-v13.5.32-->';
|
|
3329
3342
|
|
|
3330
3343
|
function stopStudio() {
|
|
3331
3344
|
if (!studioState.running) return;
|
|
@@ -3949,7 +3962,9 @@ function renderStudioNodes() {
|
|
|
3949
3962
|
var bubbleText = isOrch
|
|
3950
3963
|
? (hasActive ? (\x27Assegno step \x27+(doneCount+1)+\x27/\x27+totalCount) : (doneCount===totalCount&&totalCount>0 ? \x27\u2714 Fatto!\x27 : \x27In attesa\x27))
|
|
3951
3964
|
: (isDone ? \x27\u2714 fatto\x27 : (isErr ? \x27\u2715 errore\x27 : (isActive ? \x27\x27 : \x27\x27)));
|
|
3952
|
-
var bubbleBg = isOrch ? \x27rgba(
|
|
3965
|
+
var bubbleBg = isOrch ? \x27rgba(255,255,255,.95)\x27 : (isActive ? \x27#ffffff\x27 : (isDone ? \x27rgba(0,0,0,.08)\x27 : \x27rgba(239,68,68,.12)\x27));
|
|
3966
|
+
var bubbleColor = isActive ? \x27#000000\x27 : (isOrch ? \x27#111827\x27 : (isDone ? \x27#374151\x27 : \x27#6b7280\x27));
|
|
3967
|
+
var bubbleFontWeight = isActive ? \x27700\x27 : \x27500\x27;
|
|
3953
3968
|
var glowBox = isActive ? (\x270 0 0 3px \x27+accentColor+\x2744,0 8px 24px \x27+accentColor+\x2733\x27) : (isDone ? (\x270 0 0 2px rgba(0,0,0,.25)\x27) : \x27none\x27);
|
|
3954
3969
|
// Orchestrator char: no CSS walk animation — JS moves it via inline transform toward the active agent column
|
|
3955
3970
|
var charIdAttr = isOrch ? \x27 id="wfOrchChar"\x27 : \x27\x27;
|
|
@@ -3963,7 +3978,7 @@ function renderStudioNodes() {
|
|
|
3963
3978
|
var bubbleVisible = (bubbleText || isOrch || isActive) ? \x27visible\x27 : \x27hidden\x27;
|
|
3964
3979
|
return \x27<div class="iso-station" \x27+clickAttr+\x27 data-station-idx="\x27+(isOrch?-1:nodeIdx)+\x27" style="box-shadow:\x27+glowBox+\x27;border-color:\x27+accentColor+\x27;transition:box-shadow .4s">\x27+
|
|
3965
3980
|
flyDoc+
|
|
3966
|
-
\x27<div class="iso-bubble\x27+(isActive?\x27 iso-bubble--active\x27:\x27\x27)+\x27" id="\x27+bubbleId+\x27" style="border-color:\x27+accentColor+\x27;color:\x27+
|
|
3981
|
+
\x27<div class="iso-bubble\x27+(isActive?\x27 iso-bubble--active\x27:\x27\x27)+\x27" id="\x27+bubbleId+\x27" style="border-color:\x27+accentColor+\x27;color:\x27+bubbleColor+\x27;font-weight:\x27+bubbleFontWeight+\x27;background:\x27+bubbleBg+\x27;visibility:\x27+bubbleVisible+\x27">\x27+esc(bubbleText)+\x27</div>\x27+
|
|
3967
3982
|
\x27<div class="iso-tool-badge">\x27+toolEmoji+\x27</div>\x27+
|
|
3968
3983
|
charHtml+
|
|
3969
3984
|
\x27<div class="iso-desk" style="width:85%;border-top-color:\x27+accentColor+\x2733"></div>\x27+
|
|
@@ -5347,18 +5362,21 @@ function renderStudioSessionsBar() {
|
|
|
5347
5362
|
var sessions = loadStudioSessions();
|
|
5348
5363
|
if (!sessions.length) { el.style.display = 'none'; return; }
|
|
5349
5364
|
el.style.display = 'block';
|
|
5350
|
-
el.innerHTML = '<div style="
|
|
5351
|
-
|
|
5365
|
+
el.innerHTML = '<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:10px">' +
|
|
5366
|
+
'<span style="font-size:11px;font-weight:700;color:#f8fafc;text-transform:uppercase;letter-spacing:.8px">' + t('recent_sessions') + '</span>' +
|
|
5367
|
+
'<span style="font-size:10px;color:#94a3b8">' + sessions.length + ' saved</span>' +
|
|
5368
|
+
'</div>' +
|
|
5369
|
+
'<div style="max-height:240px;overflow-y:auto;padding-right:2px;display:flex;flex-direction:column;gap:6px">' +
|
|
5352
5370
|
sessions.map(function(s,i) {
|
|
5353
|
-
return '<div
|
|
5354
|
-
'<div style="display:flex;align-items:
|
|
5355
|
-
'<span
|
|
5356
|
-
'<
|
|
5371
|
+
return '<div style="background:#1e293b;border:1px solid #334155;border-radius:8px;padding:10px 12px">' +
|
|
5372
|
+
'<div style="display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:7px">' +
|
|
5373
|
+
'<span style="font-size:11px;color:#f1f5f9;font-weight:600;line-height:1.4;flex:1">' + esc(s.task.slice(0,65)) + (s.task.length>65?'...':'') + '</span>' +
|
|
5374
|
+
'<button onclick="deleteStudioSession('+i+')" style="flex-shrink:0;font-size:14px;line-height:1;background:none;border:none;color:#64748b;cursor:pointer;padding:0 2px" title="Delete">×</button>' +
|
|
5357
5375
|
'</div>' +
|
|
5358
|
-
'<div style="
|
|
5359
|
-
|
|
5360
|
-
'<button onclick="
|
|
5361
|
-
'<button onclick="
|
|
5376
|
+
'<div style="font-size:10px;color:#64748b;margin-bottom:8px">' + esc(s.ts) + '</div>' +
|
|
5377
|
+
'<div style="display:flex;gap:6px">' +
|
|
5378
|
+
'<button onclick="restoreStudioSession('+i+')" style="font-size:10px;font-weight:600;padding:4px 10px;background:#0ea5e9;border:none;border-radius:5px;color:#fff;cursor:pointer">Restore</button>' +
|
|
5379
|
+
'<button onclick="importStudioToChat('+i+')" style="font-size:10px;font-weight:600;padding:4px 10px;background:#334155;border:1px solid #475569;border-radius:5px;color:#cbd5e1;cursor:pointer">Send to Chat</button>' +
|
|
5362
5380
|
'</div>' +
|
|
5363
5381
|
'</div>';
|
|
5364
5382
|
}).join('') + '</div>';
|
|
@@ -5650,6 +5668,9 @@ function runStudioStep(idx, node, task, context, stepDef, signal) {
|
|
|
5650
5668
|
var wfSafe = wfSnippet.replace(/&/g,\x27&\x27).replace(/</g,\x27<\x27).replace(/>/g,\x27>\x27);
|
|
5651
5669
|
isoB.className = \x27iso-bubble iso-bubble--active\x27;
|
|
5652
5670
|
isoB.style.visibility = \x27visible\x27;
|
|
5671
|
+
isoB.style.color = \x27#000000\x27;
|
|
5672
|
+
isoB.style.fontWeight = \x27700\x27;
|
|
5673
|
+
isoB.style.background = \x27#ffffff\x27;
|
|
5653
5674
|
isoB.innerHTML = wfSafe + \x27<span style="display:inline-block;width:2px;height:8px;background:#1d4ed8;margin-left:1px;vertical-align:text-bottom;animation:streamBlink .7s step-end infinite">​</span>\x27;
|
|
5654
5675
|
}
|
|
5655
5676
|
// Update orchestrator bubble: show which agent it assigned and move the char
|
|
@@ -5910,7 +5931,7 @@ function renderStudio(el) {
|
|
|
5910
5931
|
'<div id="sideToolsList">'+toolsHtml+'</div>' +
|
|
5911
5932
|
'<div id="sideAgentsList" style="display:none">'+specialistHtml+'</div>' +
|
|
5912
5933
|
'</div>' +
|
|
5913
|
-
'<div id="studioSessionsBar" style="display:none;border:1px solid
|
|
5934
|
+
'<div id="studioSessionsBar" style="display:none;border:1px solid #334155;border-radius:10px;padding:12px 14px;background:#0f172a"></div>' +
|
|
5914
5935
|
'</div>' +
|
|
5915
5936
|
'</div>';
|
|
5916
5937
|
|