nothumanallowed 13.4.7 → 13.4.8
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/tool-executor.mjs +4 -1
- package/src/services/web-ui.mjs +106 -52
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.4.
|
|
3
|
+
"version": "13.4.8",
|
|
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.4.
|
|
8
|
+
export const VERSION = '13.4.8';
|
|
9
9
|
export const BASE_URL = 'https://nothumanallowed.com/cli';
|
|
10
10
|
export const API_BASE = 'https://nothumanallowed.com/api/v1';
|
|
11
11
|
|
|
@@ -2043,7 +2043,10 @@ export async function executeTool(action, params, config) {
|
|
|
2043
2043
|
let installCmd, installArgs;
|
|
2044
2044
|
if (language === 'python') {
|
|
2045
2045
|
installCmd = 'pip3';
|
|
2046
|
-
|
|
2046
|
+
// --only-binary=:all: forces pre-built wheels — no setup.py/build hook execution,
|
|
2047
|
+
// eliminating arbitrary code execution during install.
|
|
2048
|
+
// Network access is still live (accepted risk for local CLI; use --no-index for server).
|
|
2049
|
+
installArgs = ['install', '--quiet', '--only-binary=:all:', '--target', path.default.join(sandboxDir, 'site-packages'), ...safePkgs];
|
|
2047
2050
|
} else {
|
|
2048
2051
|
// javascript / typescript
|
|
2049
2052
|
fs.default.writeFileSync(path.default.join(sandboxDir, 'package.json'), JSON.stringify({ type: 'module' }));
|
package/src/services/web-ui.mjs
CHANGED
|
@@ -3527,12 +3527,14 @@ function buildWorkflowChar(n) {
|
|
|
3527
3527
|
\x27<circle cx="67" cy="9" r="5.5" fill="#22c55e"/>\x27+
|
|
3528
3528
|
\x27<path d="M63 9 L66 12 L71 5" stroke="#fff" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>\x27
|
|
3529
3529
|
: \x27\x27)+
|
|
3530
|
-
//
|
|
3530
|
+
// Floating document icon when running (bobbing above desk)
|
|
3531
3531
|
(isActive ?
|
|
3532
|
-
\x27<g class="prl-
|
|
3533
|
-
\x27<path d="
|
|
3534
|
-
\x27<
|
|
3535
|
-
\x27<line x1="
|
|
3532
|
+
\x27<g class="prl-doc-hold" style="transform-origin:58px 10px">\x27+
|
|
3533
|
+
\x27<path d="M52 4 L66 4 L69 7 L69 22 L52 22 Z" fill="#0d0d20" stroke="#6366f1" stroke-width="1.5"/>\x27+
|
|
3534
|
+
\x27<path d="M66 4 L66 7 L69 7" fill="none" stroke="#6366f1" stroke-width="1"/>\x27+
|
|
3535
|
+
\x27<line x1="55" y1="10" x2="66" y2="10" stroke="#6366f1ee" stroke-width=".9" stroke-linecap="round"/>\x27+
|
|
3536
|
+
\x27<line x1="55" y1="13" x2="64" y2="13" stroke="#6366f1aa" stroke-width=".9" stroke-linecap="round"/>\x27+
|
|
3537
|
+
\x27<line x1="55" y1="16" x2="65" y2="16" stroke="#6366f188" stroke-width=".9" stroke-linecap="round"/>\x27+
|
|
3536
3538
|
\x27</g>\x27
|
|
3537
3539
|
: \x27\x27)+
|
|
3538
3540
|
\x27</svg>\x27;
|
|
@@ -3546,49 +3548,96 @@ function renderStudioNodes() {
|
|
|
3546
3548
|
el.innerHTML = '<div class="studio-canvas__empty"><div class="studio-canvas__empty-icon">⚙</div><div>Describe a task and click Run</div></div>';
|
|
3547
3549
|
return;
|
|
3548
3550
|
}
|
|
3549
|
-
|
|
3551
|
+
// ── Full-scene office layout ──────────────────────────────────────────────
|
|
3552
|
+
// Renders all pipeline nodes as agents at desks in a continuous office floor scene.
|
|
3553
|
+
// Active agent types at keyboard. Done agents smile. Waiting agents idle.
|
|
3554
|
+
// Orchestrator walks between desks scolding agents.
|
|
3555
|
+
var hasActive = studioState.nodes.some(function(n){ return n.status === \x27running\x27; });
|
|
3556
|
+
var hasDone = studioState.nodes.some(function(n){ return n.status === \x27done\x27; });
|
|
3557
|
+
var showMaster = hasActive || hasDone;
|
|
3558
|
+
|
|
3559
|
+
// Build desks for each node
|
|
3560
|
+
var desksHtml2 = \x27\x27;
|
|
3550
3561
|
studioState.nodes.forEach(function(n, i) {
|
|
3551
|
-
var isActive = n.status ===
|
|
3552
|
-
var isDone = n.status ===
|
|
3553
|
-
var isErr = n.status ===
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
if (
|
|
3557
|
-
else if (
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
html += '<div class="' + cls + '" data-agent-label="' + esc(n.label || n.agent) + '" style="' + style + ';cursor:pointer" onclick="studioScrollToAgent(this.getAttribute(String.fromCharCode(100,97,116,97,45,97,103,101,110,116,45,108,97,98,101,108)))" title="' + esc(n.label || n.agent) + '">';
|
|
3562
|
-
if (isActive || isDone) {
|
|
3563
|
-
// Show animated office character
|
|
3564
|
-
html += '<div class="studio-node__char">' + buildWorkflowChar(n) + '</div>';
|
|
3565
|
-
if (isActive) {
|
|
3566
|
-
var desc = n.label || n.agent;
|
|
3567
|
-
html += '<div class="studio-node__bubble prl-action-bubble prl-action-bubble--active">...analizza</div>';
|
|
3568
|
-
} else {
|
|
3569
|
-
html += '<div class="studio-node__bubble prl-action-bubble" style="background:#0a2010;border-color:#22c55e;color:#4ade80">\u2714 completato</div>';
|
|
3570
|
-
}
|
|
3571
|
-
html += '<div class="studio-node__label studio-node__label--char">' + esc(n.label) + '</div>';
|
|
3572
|
-
} else {
|
|
3573
|
-
// Waiting / error: keep original compact pill
|
|
3574
|
-
html += '<div class="studio-node__circle">' + n.icon + '</div>';
|
|
3575
|
-
html += '<div class="studio-node__label">' + esc(n.label) + '</div>';
|
|
3576
|
-
}
|
|
3577
|
-
if (n.reason) {
|
|
3578
|
-
html += '<div class="studio-node__reason" onclick="event.stopPropagation();this.classList.toggle(String.fromCharCode(111,112,101,110))" title="' + esc(n.reason) + '">ℹ<span class="studio-node__reason-tip">' + esc(n.reason) + '</span></div>';
|
|
3579
|
-
}
|
|
3580
|
-
html += '</div>';
|
|
3581
|
-
if (i < studioState.nodes.length - 1) {
|
|
3582
|
-
var next = studioState.nodes[i + 1];
|
|
3583
|
-
var arrowCls = 'studio-arrow';
|
|
3584
|
-
if (isDone && next.status === 'running') arrowCls += ' studio-arrow--active';
|
|
3585
|
-
else if (isDone) arrowCls += ' studio-arrow--done';
|
|
3586
|
-
var arrowStyle = n._rendered ? '' : 'opacity:0;animation:stNodeIn .3s ease ' + (i * 110 + 55) + 'ms forwards';
|
|
3587
|
-
html += '<div class="' + arrowCls + '" style="' + arrowStyle + '">→</div>';
|
|
3588
|
-
}
|
|
3562
|
+
var isActive = n.status === \x27running\x27;
|
|
3563
|
+
var isDone = n.status === \x27done\x27;
|
|
3564
|
+
var isErr = n.status === \x27error\x27;
|
|
3565
|
+
desksHtml2 += \x27<div class="wf-desk\x27+(isActive?\x27 wf-desk--active\x27:\x27\x27)+(isDone?\x27 wf-desk--done\x27:\x27\x27)+(isErr?\x27 wf-desk--err\x27:\x27\x27)+\x27" data-agent-label="\x27+esc(n.label||n.agent)+\x27" onclick="studioScrollToAgent(this.getAttribute(String.fromCharCode(100,97,116,97,45,97,103,101,110,116,45,108,97,98,101,108)))" title="Vai al log di \x27+esc(n.label||n.agent)+\x27">\x27;
|
|
3566
|
+
if (isActive) desksHtml2 += \x27<div class="prl-action-bubble prl-action-bubble--active" style="font-size:8px;padding:2px 6px">\u2026lavora</div>\x27;
|
|
3567
|
+
else if (isDone) desksHtml2 += \x27<div class="prl-action-bubble" style="background:#0a2010;border-color:#22c55e;color:#4ade80;font-size:8px;padding:2px 6px">\u2714 fatto</div>\x27;
|
|
3568
|
+
else if (isErr) desksHtml2 += \x27<div class="prl-action-bubble" style="background:#200a0a;border-color:#ef4444;color:#f87171;font-size:8px;padding:2px 6px">\u2715 errore</div>\x27;
|
|
3569
|
+
desksHtml2 += buildWorkflowChar(n);
|
|
3570
|
+
desksHtml2 += \x27<div class="wf-desk-name" style="color:\x27+(isDone?\x27#4ade80\x27:(isActive?\x27#a5b4fc\x27:(isErr?\x27#f87171\x27:\x27#6b7280\x27)))+\x27" title="\x27+esc(n.label)+\x27">\x27+esc(n.label)+\x27</div>\x27;
|
|
3571
|
+
desksHtml2 += \x27</div>\x27;
|
|
3589
3572
|
n._rendered = true;
|
|
3590
3573
|
});
|
|
3591
|
-
|
|
3574
|
+
|
|
3575
|
+
// ── Master orchestrator SVG (same as parliament) ───────────────────────────
|
|
3576
|
+
var masterColor3 = \x27#818cf8\x27;
|
|
3577
|
+
var masterSvg2 = \x27<svg viewBox="0 0 60 90" width="52" height="78" xmlns="http://www.w3.org/2000/svg" style="filter:drop-shadow(0 0 10px \x27+masterColor3+\x27aa)">\x27+
|
|
3578
|
+
\x27<path d="M22 55 C21 63 19 72 18 77 C17 80 18 82 21 82 C23 82 24 80 24 77 C25 71 25 62 26 55 Z" fill="#1e1c4a" class="prl-master-leg-l"/>\x27+
|
|
3579
|
+
\x27<path d="M28 55 C29 63 31 72 32 77 C33 80 32 82 29 82 C27 82 26 80 26 77 C25 71 25 62 24 55 Z" fill="#1e1c4a" class="prl-master-leg-r"/>\x27+
|
|
3580
|
+
\x27<path d="M16 79 C14 79 13 81 14 83 C15 85 18 85 21 84 C23 83 24 82 23 80 C22 79 19 79 16 79" fill="#0a0a14"/>\x27+
|
|
3581
|
+
\x27<path d="M34 79 C36 79 37 81 36 83 C35 85 32 85 29 84 C27 83 26 82 27 80 C28 79 31 79 34 79" fill="#0a0a14"/>\x27+
|
|
3582
|
+
\x27<path d="M13 32 C12 30 15 27 25 25 C35 27 38 30 37 32 L38 55 L12 55 Z" fill="#252450"/>\x27+
|
|
3583
|
+
\x27<path d="M13 32 C12 30 15 27 25 25 L25 55 L12 55 Z" fill="#1e1d44"/>\x27+
|
|
3584
|
+
\x27<path d="M25 25 C35 27 38 30 37 32 L38 55 L25 55 Z" fill="#272660"/>\x27+
|
|
3585
|
+
\x27<path d="M25 25 L19 33 L22 36 L25 29 Z" fill="#1a1940"/>\x27+
|
|
3586
|
+
\x27<path d="M25 25 L31 33 L28 36 L25 29 Z" fill="#1a1940"/>\x27+
|
|
3587
|
+
\x27<path d="M25 29 L22 36 L25 34 L28 36 Z" fill="#f0f0fa"/>\x27+
|
|
3588
|
+
\x27<path d="M25 33 L24 44 L25 48 L26 44 Z" fill="\x27+masterColor3+\x27"/>\x27+
|
|
3589
|
+
\x27<path d="M23.5 32 L26.5 32 L25 34 Z" fill="\x27+masterColor3+\x27"/>\x27+
|
|
3590
|
+
\x27<path d="M33 35 L36 33 L37 36 L34 37 Z" fill="\x27+masterColor3+\x2799"/>\x27+
|
|
3591
|
+
\x27<circle cx="25" cy="42" r="1.2" fill="\x27+masterColor3+\x27aa"/>\x27+
|
|
3592
|
+
\x27<circle cx="20" cy="36" r="2.5" fill="#0d0d1e" stroke="\x27+masterColor3+\x2799" stroke-width="1"/>\x27+
|
|
3593
|
+
\x27<text x="20" y="39" text-anchor="middle" font-size="4" fill="\x27+masterColor3+\x27">N</text>\x27+
|
|
3594
|
+
\x27<g class="prl-master-arm-l">\x27+
|
|
3595
|
+
\x27<path d="M13 34 C8 37 6 42 6 46 C6 49 9 50 11 49 C13 48 13 45 14 41 C15 38 14 35 13 34" fill="#252450"/>\x27+
|
|
3596
|
+
\x27<path d="M6 46 C4 48 4 51 5 53 C6 55 9 55 10 53 C11 51 10 48 10 46 Z" fill="#d4a97a"/>\x27+
|
|
3597
|
+
\x27<ellipse cx="7" cy="54" rx="4.5" ry="3.5" fill="#d4a97a" transform="rotate(-15 7 54)"/>\x27+
|
|
3598
|
+
\x27</g>\x27+
|
|
3599
|
+
\x27<g class="prl-master-arm-r">\x27+
|
|
3600
|
+
\x27<path d="M37 34 C42 37 44 41 44 45 C44 48 41 49 39 48 C37 47 37 44 37 40 C37 37 37 35 37 34" fill="#252450"/>\x27+
|
|
3601
|
+
\x27<path d="M44 44 C46 46 47 49 46 52 C45 54 42 54 41 52 C40 50 41 47 41 45 Z" fill="#d4a97a"/>\x27+
|
|
3602
|
+
\x27<ellipse cx="45" cy="52" rx="4" ry="3" fill="#d4a97a" transform="rotate(15 45 52)"/>\x27+
|
|
3603
|
+
\x27<rect x="43" y="32" width="14" height="19" rx="2.5" fill="#1a1a2e" stroke="\x27+masterColor3+\x2799" stroke-width="1.5"/>\x27+
|
|
3604
|
+
\x27<rect x="47" y="30" width="6" height="5" rx="1.5" fill="\x27+masterColor3+\x27"/>\x27+
|
|
3605
|
+
\x27<rect x="48" y="31" width="4" height="3" rx="1" fill="#0f0f1e"/>\x27+
|
|
3606
|
+
\x27<line x1="46" y1="36" x2="54" y2="36" stroke="\x27+masterColor3+\x27cc" stroke-width="1"/>\x27+
|
|
3607
|
+
\x27<line x1="46" y1="39" x2="54" y2="39" stroke="\x27+masterColor3+\x27aa" stroke-width="1"/>\x27+
|
|
3608
|
+
\x27<line x1="46" y1="42" x2="54" y2="42" stroke="\x27+masterColor3+\x2788" stroke-width="1"/>\x27+
|
|
3609
|
+
\x27</g>\x27+
|
|
3610
|
+
\x27<path d="M22 25 L28 25 L28 29 Q28 31 25 31 Q22 31 22 29 Z" fill="#d4a97a"/>\x27+
|
|
3611
|
+
\x27<ellipse cx="25" cy="15" rx="12" ry="13" fill="#d4a97a"/>\x27+
|
|
3612
|
+
\x27<path d="M14 15 C14 22 18 26 25 27 C32 26 36 22 36 15" fill="#d4a97a"/>\x27+
|
|
3613
|
+
\x27<path d="M13 13 C11 13 10 15 10 17 C10 19 11 20 13 20 C14 20 14.5 19 14 17 C14.5 15 14 13 13 13" fill="#d4a97a"/>\x27+
|
|
3614
|
+
\x27<path d="M37 13 C39 13 40 15 40 17 C40 19 39 20 37 20 C36 20 35.5 19 36 17 C35.5 15 36 13 37 13" fill="#d4a97a"/>\x27+
|
|
3615
|
+
\x27<path d="M13 14 C12 7 16 2 25 1 C34 2 38 7 37 14 C36 7 32 4 25 3 C18 4 14 7 13 14" fill="#1a0e08"/>\x27+
|
|
3616
|
+
\x27<path d="M22 3 C21 4 21 6 22 8" stroke="rgba(255,255,255,.15)" stroke-width="1.5" fill="none"/>\x27+
|
|
3617
|
+
\x27<path d="M16.5 11 Q19 9.5 21.5 11" stroke="#1a0e08" stroke-width="1.8" fill="none" stroke-linecap="round"/>\x27+
|
|
3618
|
+
\x27<path d="M28.5 11 Q31 9.5 33.5 11" stroke="#1a0e08" stroke-width="1.8" fill="none" stroke-linecap="round"/>\x27+
|
|
3619
|
+
\x27<ellipse cx="19.5" cy="14.5" rx="3.2" ry="3.5" fill="#fff"/>\x27+
|
|
3620
|
+
\x27<ellipse cx="30.5" cy="14.5" rx="3.2" ry="3.5" fill="#fff"/>\x27+
|
|
3621
|
+
\x27<circle cx="19.5" cy="15" r="2.3" fill="#1e3a6e"/>\x27+
|
|
3622
|
+
\x27<circle cx="30.5" cy="15" r="2.3" fill="#1e3a6e"/>\x27+
|
|
3623
|
+
\x27<circle cx="19.5" cy="15" r="1.3" fill="#0a0a18"/>\x27+
|
|
3624
|
+
\x27<circle cx="30.5" cy="15" r="1.3" fill="#0a0a18"/>\x27+
|
|
3625
|
+
\x27<circle cx="20.5" cy="13.7" r=".9" fill="rgba(255,255,255,.95)"/>\x27+
|
|
3626
|
+
\x27<circle cx="31.5" cy="13.7" r=".9" fill="rgba(255,255,255,.95)"/>\x27+
|
|
3627
|
+
\x27<path d="M19.5 24 Q25 27.5 30.5 24" stroke="#8b4513" stroke-width="1.8" fill="none" stroke-linecap="round"/>\x27+
|
|
3628
|
+
\x27<path d="M20 24.5 Q25 27 30 24.5 Q25 26.5 20 24.5" fill="#fff" opacity=".7"/>\x27+
|
|
3629
|
+
\x27<text x="25" y="-1" text-anchor="middle" font-size="12" style="filter:drop-shadow(0 0 4px \x27+masterColor3+\x27)">♦</text>\x27+
|
|
3630
|
+
\x27<circle cx="25" cy="-2" r="8" fill="none" stroke="\x27+masterColor3+\x2730" stroke-width="1.5"/>\x27+
|
|
3631
|
+
\x27</svg>\x27;
|
|
3632
|
+
|
|
3633
|
+
var masterWfHtml = showMaster ? (\x27<div class="prl-master prl-master-walk wf-master">\x27+masterSvg2+\x27<div class="prl-master-label" style="color:\x27+masterColor3+\x27;font-size:8px">Orchestratore</div></div>\x27) : \x27\x27;
|
|
3634
|
+
|
|
3635
|
+
var html = \x27<div class="prl-office wf-office">\x27+
|
|
3636
|
+
\x27<div class="prl-office-floor"></div>\x27+
|
|
3637
|
+
\x27<div class="wf-desks-row">\x27+desksHtml2+\x27</div>\x27+
|
|
3638
|
+
masterWfHtml+
|
|
3639
|
+
\x27</div>\x27;
|
|
3640
|
+
|
|
3592
3641
|
el.innerHTML = html;
|
|
3593
3642
|
}
|
|
3594
3643
|
|
|
@@ -5873,13 +5922,18 @@ input:focus,textarea:focus{border-color:var(--green3)}
|
|
|
5873
5922
|
.studio-arrow{display:flex;align-items:center;color:var(--border2);font-size:18px;padding:0 8px;flex-shrink:0;margin-bottom:30px;transition:color .4s}
|
|
5874
5923
|
.studio-arrow--active{color:var(--green3);animation:stFlow .5s ease-in-out infinite alternate}
|
|
5875
5924
|
.studio-arrow--done{color:#22c55e}
|
|
5876
|
-
/* ── Workflow
|
|
5877
|
-
.studio-
|
|
5878
|
-
.
|
|
5879
|
-
.
|
|
5880
|
-
.
|
|
5881
|
-
.
|
|
5882
|
-
.
|
|
5925
|
+
/* ── Workflow scene (office layout, replaces cramped pill nodes) ── */
|
|
5926
|
+
.studio-canvas{background:none!important;border:none!important;padding:0!important;margin-bottom:0!important}
|
|
5927
|
+
#studioNodes .prl-office{border-radius:10px;border:1px solid var(--border);background:var(--bg2);margin-bottom:16px;min-height:200px;padding:16px 12px 8px;position:relative;overflow:visible}
|
|
5928
|
+
.wf-office{display:block}
|
|
5929
|
+
.wf-desks-row{display:flex;align-items:flex-end;justify-content:center;gap:6px;flex-wrap:wrap;padding-bottom:10px}
|
|
5930
|
+
.wf-desk{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;transition:opacity .2s}
|
|
5931
|
+
.wf-desk:hover{opacity:.85}
|
|
5932
|
+
.wf-desk--active{filter:drop-shadow(0 0 8px #6366f188)}
|
|
5933
|
+
.wf-desk--done{filter:drop-shadow(0 0 6px #22c55e55)}
|
|
5934
|
+
.wf-desk--err{filter:drop-shadow(0 0 6px #ef444455)}
|
|
5935
|
+
.wf-desk-name{font-size:9px;font-weight:600;text-align:center;max-width:88px;word-break:break-word;line-height:1.3;padding:0 2px;margin-top:2px}
|
|
5936
|
+
.wf-master{position:absolute;bottom:28px;right:16px}
|
|
5883
5937
|
/* ── Parliament Office Cartoon ── */
|
|
5884
5938
|
.prl-wrap{background:#07070f;border:1.5px solid #6366f1;border-radius:14px;padding:14px 16px 12px;margin-bottom:16px;animation:stNodeIn .35s ease forwards;overflow:hidden}
|
|
5885
5939
|
#studioParliamentBlock[style*="sticky"] .prl-wrap{animation:stNodeIn .35s ease forwards,parlPulse 2.2s ease-in-out infinite}
|