nothumanallowed 13.2.85 → 13.2.87
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 +11 -3
- package/src/constants.mjs +1 -1
- package/src/services/web-ui.mjs +64 -18
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.2.
|
|
3
|
+
"version": "13.2.87",
|
|
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
|
@@ -3577,7 +3577,7 @@ ${context ? `## OUTPUT FROM PREVIOUS AGENTS (use only what is RELEVANT to the wo
|
|
|
3577
3577
|
const buildCrossReadCtx = (excludeAgent) =>
|
|
3578
3578
|
eligibleProposals
|
|
3579
3579
|
.filter(p => p.agent !== excludeAgent)
|
|
3580
|
-
.map(p => `## ${p.label || p.agent} (Round 1):\n${p.output.slice(0,
|
|
3580
|
+
.map(p => `## ${p.label || p.agent} (Round 1):\n${p.output.slice(0, 4000)}`)
|
|
3581
3581
|
.join('\n\n---\n\n');
|
|
3582
3582
|
|
|
3583
3583
|
// Round 2: cross-reading + refinement (sequential to save tokens)
|
|
@@ -3605,9 +3605,17 @@ DELIBERATION ROUND 2 — REFINEMENT:
|
|
|
3605
3605
|
5. Keep your analysis focused on: ${task}`;
|
|
3606
3606
|
|
|
3607
3607
|
let r2Out = '';
|
|
3608
|
+
let r2TokCount = 0;
|
|
3608
3609
|
try {
|
|
3609
3610
|
await callLLMStream(config, r2Sys, 'Produce your refined Round 2 response.',
|
|
3610
|
-
(tok) => {
|
|
3611
|
+
(tok) => {
|
|
3612
|
+
r2Out += tok;
|
|
3613
|
+
r2TokCount += Math.ceil(tok.length / 4);
|
|
3614
|
+
// Stream live token count to client every ~20 tokens
|
|
3615
|
+
if (r2TokCount % 20 < 3) {
|
|
3616
|
+
sendTok2(`[Round 2 ${proposal.label || proposal.agent}: ${r2TokCount} token] `);
|
|
3617
|
+
}
|
|
3618
|
+
}, { max_tokens: 6144 });
|
|
3611
3619
|
} catch (e) { r2Out = proposal.output; }
|
|
3612
3620
|
r2Results.push({ agent: proposal.agent, label: proposal.label, icon: proposal.icon, output: r2Out });
|
|
3613
3621
|
sendEv2({ deliberation_r2: { agent: proposal.agent, label: proposal.label, icon: proposal.icon, output: r2Out } });
|
|
@@ -3640,7 +3648,7 @@ MEDIATION TASK:
|
|
|
3640
3648
|
5. Output a complete executive summary with concrete action items for: ${task}`;
|
|
3641
3649
|
try {
|
|
3642
3650
|
await callLLMStream(config, medSys, 'Produce the mediated Parliament consensus.',
|
|
3643
|
-
(tok) => { mediationOutput += tok; }, { max_tokens:
|
|
3651
|
+
(tok) => { mediationOutput += tok; }, { max_tokens: 6144 });
|
|
3644
3652
|
} catch (e) { mediationOutput = ''; }
|
|
3645
3653
|
sendEv2({ deliberation_r3: { output: mediationOutput } });
|
|
3646
3654
|
}
|
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.87';
|
|
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
|
@@ -697,6 +697,18 @@ function reopenCanvas(){
|
|
|
697
697
|
renderCanvasPanel();
|
|
698
698
|
}
|
|
699
699
|
function closeCanvas(){var p=document.getElementById('canvasPanel');if(p)p.classList.remove('open');}
|
|
700
|
+
function canvasDownloadHTML(){
|
|
701
|
+
var d=getConvCanvasData();var item=d.canvases[canvasIdx];
|
|
702
|
+
var html=(item&&item.html)||studioState.canvas;
|
|
703
|
+
if(!html){alert('No dashboard to download');return;}
|
|
704
|
+
var t=document.getElementById('canvasTitle');
|
|
705
|
+
var name=((t&&t.textContent)||'NHA-Dashboard').slice(0,60).replace(/[^a-z0-9\s]/gi,'').trim().replace(/\s+/g,'-')||'NHA-Dashboard';
|
|
706
|
+
var blob=new Blob([html],{type:'text/html'});
|
|
707
|
+
var url=URL.createObjectURL(blob);
|
|
708
|
+
var a=document.createElement('a');a.href=url;a.download=name+'.html';
|
|
709
|
+
document.body.appendChild(a);a.click();document.body.removeChild(a);
|
|
710
|
+
setTimeout(function(){URL.revokeObjectURL(url);},5000);
|
|
711
|
+
}
|
|
700
712
|
function canvasCopyText(){
|
|
701
713
|
var d=getConvCanvasData();var item=d.canvases[canvasIdx];
|
|
702
714
|
if(!item){alert('No canvas content');return;}
|
|
@@ -3407,16 +3419,8 @@ function downloadStudioPDF() {
|
|
|
3407
3419
|
var nodes = studioState.nodes || [];
|
|
3408
3420
|
var fileName = (task).slice(0, 60).replace(/[^a-z0-9\s]/gi,'').trim().replace(/\s+/g,'-') || 'NHA-Studio';
|
|
3409
3421
|
|
|
3410
|
-
//
|
|
3411
|
-
|
|
3412
|
-
var blob = new Blob([studioState.canvas], {type: 'text/html'});
|
|
3413
|
-
var url = URL.createObjectURL(blob);
|
|
3414
|
-
var a = document.createElement('a');
|
|
3415
|
-
a.href = url; a.target = '_blank'; a.download = fileName + '.html';
|
|
3416
|
-
document.body.appendChild(a); a.click(); document.body.removeChild(a);
|
|
3417
|
-
setTimeout(function(){ URL.revokeObjectURL(url); }, 5000);
|
|
3418
|
-
return;
|
|
3419
|
-
}
|
|
3422
|
+
// Always generate the full Studio PDF with all agent outputs.
|
|
3423
|
+
// The canvas panel is already open for the HTML dashboard — PDF = complete structured report.
|
|
3420
3424
|
|
|
3421
3425
|
// ── Markdown → HTML for PDF (full support: tables, lists, headers, inline) ──
|
|
3422
3426
|
function mdToPdfHtml(raw) {
|
|
@@ -3849,18 +3853,60 @@ async function runStudio() {
|
|
|
3849
3853
|
try {
|
|
3850
3854
|
var dev = JSON.parse(dd);
|
|
3851
3855
|
if (dev.token) {
|
|
3852
|
-
// Status tokens
|
|
3853
|
-
var
|
|
3854
|
-
var
|
|
3855
|
-
if (
|
|
3856
|
+
// Status tokens — check for Round 2 start to add new animated log entry
|
|
3857
|
+
var r2StartM = dev.token.match(/^\\[Round 2: (.+?)\\]\\s*$/);
|
|
3858
|
+
var r2LiveM = dev.token.match(/^\\[Round 2 (.+?): (\\d+) token\\]\\s*$/);
|
|
3859
|
+
if (r2StartM) {
|
|
3860
|
+
// New R2 agent starting — add a new log entry with thinking animation
|
|
3861
|
+
var r2Label = r2StartM[1];
|
|
3862
|
+
studioLog(r2Label, \x27♖\x27, \x27\x27, \x27agent\x27, false);
|
|
3863
|
+
var delEnts2 = document.querySelectorAll(\x27.studio-log-entry\x27);
|
|
3864
|
+
var delL2 = delEnts2[delEnts2.length - 1];
|
|
3865
|
+
if (delL2) {
|
|
3866
|
+
delL2.setAttribute(\x27data-r2-agent\x27, r2Label);
|
|
3867
|
+
var delTb2 = delL2.querySelector(\x27.studio-log-entry__text\x27);
|
|
3868
|
+
if (delTb2) delTb2.innerHTML = \x27<span style="color:var(--green);font-family:var(--mono);font-size:10px">♖ Deliberando Round 2<span class="thinking-dots"><span></span><span></span><span></span></span></span>\x27;
|
|
3869
|
+
}
|
|
3870
|
+
} else if (r2LiveM) {
|
|
3871
|
+
// Live token count update for the current R2 agent
|
|
3872
|
+
var r2AgentName = r2LiveM[1];
|
|
3873
|
+
var r2Toks = parseInt(r2LiveM[2], 10);
|
|
3874
|
+
var delAllEnts = document.querySelectorAll(\x27[data-r2-agent]\x27);
|
|
3875
|
+
var r2Entry = null;
|
|
3876
|
+
for (var rei = delAllEnts.length - 1; rei >= 0; rei--) {
|
|
3877
|
+
if (delAllEnts[rei].getAttribute(\x27data-r2-agent\x27) === r2AgentName) { r2Entry = delAllEnts[rei]; break; }
|
|
3878
|
+
}
|
|
3879
|
+
if (!r2Entry) {
|
|
3880
|
+
var delAllE = document.querySelectorAll(\x27.studio-log-entry\x27);
|
|
3881
|
+
r2Entry = delAllE[delAllE.length - 1];
|
|
3882
|
+
}
|
|
3883
|
+
if (r2Entry) {
|
|
3884
|
+
var r2Tb = r2Entry.querySelector(\x27.studio-log-entry__text\x27);
|
|
3885
|
+
if (r2Tb) r2Tb.innerHTML = \x27<span style="color:var(--green);font-family:var(--mono);font-size:10px">♖ Deliberando Round 2 \u2014 \x27 + r2Toks + \x27 token<span class="thinking-dots"><span></span><span></span><span></span></span></span>\x27;
|
|
3886
|
+
}
|
|
3887
|
+
studioAddTokens(0, 20); // approx chunk size
|
|
3888
|
+
} else {
|
|
3889
|
+
// Other status tokens — update last log entry
|
|
3890
|
+
var delEntries = document.querySelectorAll(\x27.studio-log-entry\x27);
|
|
3891
|
+
var delLast = delEntries[delEntries.length - 1];
|
|
3892
|
+
if (delLast) { var delTb = delLast.querySelector(\x27.studio-log-entry__text\x27); if (delTb) delTb.textContent = dev.token.replace(new RegExp(\x27[\\r\\n]+\x27,\x27g\x27),\x27 \x27); }
|
|
3893
|
+
}
|
|
3856
3894
|
} else if (dev.deliberation_r2) {
|
|
3857
3895
|
var r2d = dev.deliberation_r2;
|
|
3858
|
-
|
|
3896
|
+
// Full output in log — no truncation
|
|
3897
|
+
studioLog(r2d.label || r2d.agent, \x27♖\x27, \x27[R2] \x27 + (r2d.output || \x27\x27), \x27agent\x27, true);
|
|
3859
3898
|
var ni2 = studioState.nodes.findIndex(function(x){return x.agent===r2d.agent;});
|
|
3860
|
-
if (ni2 >= 0) {
|
|
3899
|
+
if (ni2 >= 0) {
|
|
3900
|
+
studioState.nodes[ni2].output = r2d.output;
|
|
3901
|
+
studioState.nodes[ni2].status = \x27done\x27;
|
|
3902
|
+
}
|
|
3903
|
+
// Estimate tokens for R2 (approx 1 token ≈ 4 chars)
|
|
3904
|
+
studioAddTokens(0, Math.ceil((r2d.output||'').length / 4));
|
|
3905
|
+
renderStudioNodes();
|
|
3861
3906
|
context = r2d.output || context;
|
|
3862
3907
|
} else if (dev.deliberation_r3) {
|
|
3863
|
-
studioLog(\x27HERALD\x27, \x27🔧\x27, \x27[Mediazione] \x27 + (dev.deliberation_r3.output || \x27\x27)
|
|
3908
|
+
studioLog(\x27HERALD\x27, \x27🔧\x27, \x27[Mediazione] \x27 + (dev.deliberation_r3.output || \x27\x27), \x27system\x27, true);
|
|
3909
|
+
studioAddTokens(0, Math.ceil((dev.deliberation_r3.output||'').length / 4));
|
|
3864
3910
|
context = dev.deliberation_r3.output || context;
|
|
3865
3911
|
} else if (dev.deliberation_done) {
|
|
3866
3912
|
var r2Conv = Math.round((dev.r2_convergence || 0) * 100);
|
|
@@ -4925,7 +4971,7 @@ input:focus,textarea:focus{border-color:var(--green3)}
|
|
|
4925
4971
|
</div>
|
|
4926
4972
|
</div>
|
|
4927
4973
|
|
|
4928
|
-
<div id="canvasPanel"><div class="cvs-header"><div style="display:flex;align-items:center;gap:8px"><button id="canvasTabC" onclick="canvasShowCanvas()" style="background:none;border:none;border-bottom:2px solid var(--green);color:var(--green);cursor:pointer;font-family:var(--mono);font-size:11px;padding:2px 6px">Canvas</button><button id="canvasTabB" onclick="canvasShowBrowser()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-family:var(--mono);font-size:11px;padding:2px 6px">Browser</button><span id="canvasTitle" style="font-family:var(--mono);color:var(--green);font-size:11px;margin-left:8px">Canvas</span></div><div style="display:flex;align-items:center;gap:4px"><span id="canvasNav" style="display:none;gap:4px"><button onclick="canvasPrev()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Previous">◀</button><button onclick="canvasNext()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Next">▶</button></span><button onclick="
|
|
4974
|
+
<div id="canvasPanel"><div class="cvs-header"><div style="display:flex;align-items:center;gap:8px"><button id="canvasTabC" onclick="canvasShowCanvas()" style="background:none;border:none;border-bottom:2px solid var(--green);color:var(--green);cursor:pointer;font-family:var(--mono);font-size:11px;padding:2px 6px">Canvas</button><button id="canvasTabB" onclick="canvasShowBrowser()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-family:var(--mono);font-size:11px;padding:2px 6px">Browser</button><span id="canvasTitle" style="font-family:var(--mono);color:var(--green);font-size:11px;margin-left:8px">Canvas</span></div><div style="display:flex;align-items:center;gap:4px"><span id="canvasNav" style="display:none;gap:4px"><button onclick="canvasPrev()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Previous">◀</button><button onclick="canvasNext()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Next">▶</button></span><button onclick="canvasDownloadHTML()" style="background:none;border:none;color:var(--green3);cursor:pointer;font-size:11px;font-family:var(--mono)" title="Scarica Dashboard HTML">⤓ HTML</button><button onclick="canvasCopyText()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:11px;font-family:var(--mono)" title="Copy text content">Copy</button><button onclick="canvasCopyImage()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:11px;font-family:var(--mono)" title="Copy as image">IMG</button><button onclick="toggleCanvasSize()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Resize">⤢</button><button onclick="closeCanvas()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Close">×</button></div></div><iframe id="canvasFrame" sandbox="allow-scripts" srcdoc=""></iframe></div>
|
|
4929
4975
|
<div id="agentEditorOverlay" style="display:none;position:fixed;inset:0;background:rgba(0,0,0,0.75);z-index:400;align-items:center;justify-content:center;padding:16px"></div>
|
|
4930
4976
|
<div class="lightbox-overlay" id="lightboxOverlay" onclick="closeLightbox()">
|
|
4931
4977
|
<span class="lightbox-close" onclick="closeLightbox()">×</span>
|