nothumanallowed 9.8.5 → 9.8.6
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 +109 -39
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "9.8.
|
|
3
|
+
"version": "9.8.6",
|
|
4
4
|
"description": "NotHumanAllowed — 38 AI agents, 53 tools. Email, calendar, browser automation, screen capture, canvas, cron/heartbeat, GitHub, Notion, Slack, voice chat, 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 = '9.8.
|
|
8
|
+
export const VERSION = '9.8.6';
|
|
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
|
@@ -257,11 +257,11 @@ function showBrowserViewer(title,status){
|
|
|
257
257
|
var t=document.getElementById('bvTitle');if(t)t.textContent=title||'Browser';
|
|
258
258
|
var s=document.getElementById('bvStatus');if(s)s.textContent=status||'Loading...';
|
|
259
259
|
}
|
|
260
|
-
function updateBrowserFrame(base64,format){
|
|
260
|
+
function updateBrowserFrame(base64,format,url){
|
|
261
261
|
var f=document.getElementById('bvFrame');if(!f)return;
|
|
262
262
|
f.innerHTML='<img src="data:image/'+(format||'jpeg')+';base64,'+base64+'" alt="Browser view">';
|
|
263
|
-
//
|
|
264
|
-
|
|
263
|
+
// Save to per-conversation browser history for canvas Browser tab
|
|
264
|
+
addBrowserPage(base64,url);
|
|
265
265
|
}
|
|
266
266
|
function updateBrowserStatus(status){
|
|
267
267
|
var s=document.getElementById('bvStatus');if(s)s.textContent=status;
|
|
@@ -271,7 +271,7 @@ function closeBrowserViewer(){
|
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
function loadConvList(){return apiGet('/api/conversations').then(function(r){convList=(r&&r.conversations)||[];renderConvSidebar();})}
|
|
274
|
-
function loadConv(id){return apiGet('/api/conversations/'+id).then(function(r){if(r&&r.conversation){activeConvId=r.conversation.id;chatHistory=r.conversation.messages||[];renderMessages();renderConvSidebar();}})}
|
|
274
|
+
function loadConv(id){return apiGet('/api/conversations/'+id).then(function(r){if(r&&r.conversation){activeConvId=r.conversation.id;chatHistory=r.conversation.messages||[];renderMessages();renderConvSidebar();onConversationSwitch();}})}
|
|
275
275
|
function createNewConv(){return apiPost('/api/conversations',{}).then(function(r){if(r&&r.conversation){activeConvId=r.conversation.id;chatHistory=[];renderMessages();loadConvList();}})}
|
|
276
276
|
function deleteConv(id){return fetch(API+'/api/conversations/'+id,{method:'DELETE'}).then(function(){loadConvList();if(id===activeConvId)createNewConv();})}
|
|
277
277
|
function clearChatHistory(){createNewConv()}
|
|
@@ -524,58 +524,121 @@ function clearChatAttach(){
|
|
|
524
524
|
document.getElementById('chatImageInput').value='';
|
|
525
525
|
}
|
|
526
526
|
|
|
527
|
-
// ---- CANVAS (
|
|
528
|
-
var
|
|
529
|
-
var canvasIdx=-1;
|
|
530
|
-
var
|
|
531
|
-
var
|
|
527
|
+
// ---- CANVAS + BROWSER (per-conversation history) ----
|
|
528
|
+
var allCanvasData={}; // {convId: {canvases:[{html,title,ts}], browsers:[{base64,url,ts}]}}
|
|
529
|
+
var canvasIdx=-1;
|
|
530
|
+
var browserIdx=-1;
|
|
531
|
+
var canvasMode='canvas';
|
|
532
|
+
|
|
533
|
+
function getConvCanvasData(){
|
|
534
|
+
var id=activeConvId||'_default';
|
|
535
|
+
if(!allCanvasData[id])allCanvasData[id]={canvases:[],browsers:[]};
|
|
536
|
+
return allCanvasData[id];
|
|
537
|
+
}
|
|
532
538
|
|
|
533
539
|
function showCanvas(html,title){
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
canvasIdx=
|
|
540
|
+
var d=getConvCanvasData();
|
|
541
|
+
d.canvases.push({html:html,title:title||'Canvas',ts:new Date().toLocaleTimeString()});
|
|
542
|
+
canvasIdx=d.canvases.length-1;
|
|
537
543
|
canvasMode='canvas';
|
|
538
544
|
renderCanvasPanel();
|
|
539
|
-
|
|
540
|
-
|
|
545
|
+
saveCanvasData();
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
function addBrowserPage(base64,url){
|
|
549
|
+
var d=getConvCanvasData();
|
|
550
|
+
// Avoid duplicates (same URL in a row)
|
|
551
|
+
if(d.browsers.length>0&&d.browsers[d.browsers.length-1].url===url)return;
|
|
552
|
+
d.browsers.push({base64:base64,url:url||'Browser',ts:new Date().toLocaleTimeString()});
|
|
553
|
+
browserIdx=d.browsers.length-1;
|
|
554
|
+
saveCanvasData();
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
function saveCanvasData(){
|
|
558
|
+
// Save only canvas HTML (not browser base64 — too large) per conversation
|
|
559
|
+
try{
|
|
560
|
+
var save={};
|
|
561
|
+
for(var id in allCanvasData){
|
|
562
|
+
if(allCanvasData[id].canvases.length>0){
|
|
563
|
+
save[id]={canvases:allCanvasData[id].canvases.slice(-20)};
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
localStorage.setItem('nha_canvas_data',JSON.stringify(save));
|
|
567
|
+
}catch(e){}
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
function loadCanvasData(){
|
|
571
|
+
try{
|
|
572
|
+
var saved=localStorage.getItem('nha_canvas_data');
|
|
573
|
+
if(saved){
|
|
574
|
+
var parsed=JSON.parse(saved);
|
|
575
|
+
for(var id in parsed){
|
|
576
|
+
if(!allCanvasData[id])allCanvasData[id]={canvases:[],browsers:[]};
|
|
577
|
+
allCanvasData[id].canvases=parsed[id].canvases||[];
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}catch(e){}
|
|
541
581
|
}
|
|
582
|
+
loadCanvasData();
|
|
542
583
|
|
|
543
584
|
function renderCanvasPanel(){
|
|
544
585
|
var p=document.getElementById('canvasPanel');
|
|
545
586
|
if(!p)return;
|
|
546
587
|
p.classList.add('open');
|
|
547
|
-
var
|
|
548
|
-
|
|
588
|
+
var d=getConvCanvasData();
|
|
589
|
+
var list=canvasMode==='browser'?d.browsers:d.canvases;
|
|
590
|
+
var idx=canvasMode==='browser'?browserIdx:canvasIdx;
|
|
591
|
+
var item=list[idx];
|
|
592
|
+
// Header title
|
|
549
593
|
var t=document.getElementById('canvasTitle');
|
|
550
594
|
if(t){
|
|
551
|
-
if(
|
|
552
|
-
else if(
|
|
553
|
-
else{t.textContent='Canvas';}
|
|
595
|
+
if(!item){t.textContent=canvasMode==='browser'?'No pages visited':'Empty canvas';}
|
|
596
|
+
else if(canvasMode==='browser'){t.textContent=(item.url||'Browser')+(list.length>1?' ('+(idx+1)+'/'+list.length+')':'');}
|
|
597
|
+
else{t.textContent=(item.title||'Canvas')+(list.length>1?' ('+(idx+1)+'/'+list.length+')':'');}
|
|
554
598
|
}
|
|
555
|
-
//
|
|
599
|
+
// Nav arrows
|
|
556
600
|
var navEl=document.getElementById('canvasNav');
|
|
557
|
-
if(navEl){navEl.style.display=
|
|
558
|
-
//
|
|
601
|
+
if(navEl){navEl.style.display=list.length>1?'flex':'none';}
|
|
602
|
+
// Tab highlight
|
|
559
603
|
var tabC=document.getElementById('canvasTabC');
|
|
560
604
|
var tabB=document.getElementById('canvasTabB');
|
|
561
605
|
if(tabC)tabC.style.borderBottom=canvasMode==='canvas'?'2px solid var(--green)':'none';
|
|
562
606
|
if(tabB)tabB.style.borderBottom=canvasMode==='browser'?'2px solid var(--green)':'none';
|
|
563
|
-
// Render
|
|
564
|
-
var f=document.getElementById('canvasFrame');
|
|
565
|
-
|
|
566
|
-
if(
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
607
|
+
// Render iframe
|
|
608
|
+
var f=document.getElementById('canvasFrame');if(!f)return;
|
|
609
|
+
var doc=f.contentDocument||f.contentWindow.document;
|
|
610
|
+
if(!item){
|
|
611
|
+
doc.open();doc.write('<html><body style="margin:0;background:#111;display:flex;align-items:center;justify-content:center;height:100vh;font-family:monospace;color:#555"><div style="text-align:center"><div style="font-size:48px;margin-bottom:12px">▣</div><div>No '+(canvasMode==='browser'?'pages visited':'canvas content')+'</div><div style="font-size:11px;margin-top:8px;color:#333">in this conversation</div></div></body></html>');doc.close();
|
|
612
|
+
} else if(canvasMode==='browser'){
|
|
613
|
+
doc.open();doc.write('<html><body style="margin:0;background:#1a1a1a;display:flex;align-items:center;justify-content:center;height:100vh"><img src="data:image/jpeg;base64,'+item.base64+'" style="max-width:100%;max-height:100%"/></body></html>');doc.close();
|
|
614
|
+
} else {
|
|
571
615
|
doc.open();doc.write(item.html);doc.close();
|
|
572
616
|
}
|
|
573
617
|
}
|
|
574
618
|
|
|
575
|
-
function canvasPrev(){
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
619
|
+
function canvasPrev(){
|
|
620
|
+
var d=getConvCanvasData();
|
|
621
|
+
if(canvasMode==='browser'){if(browserIdx>0){browserIdx--;renderCanvasPanel();}}
|
|
622
|
+
else{if(canvasIdx>0){canvasIdx--;renderCanvasPanel();}}
|
|
623
|
+
}
|
|
624
|
+
function canvasNext(){
|
|
625
|
+
var d=getConvCanvasData();
|
|
626
|
+
if(canvasMode==='browser'){if(browserIdx<d.browsers.length-1){browserIdx++;renderCanvasPanel();}}
|
|
627
|
+
else{if(canvasIdx<d.canvases.length-1){canvasIdx++;renderCanvasPanel();}}
|
|
628
|
+
}
|
|
629
|
+
function canvasShowBrowser(){var d=getConvCanvasData();browserIdx=d.browsers.length-1;canvasMode='browser';renderCanvasPanel();}
|
|
630
|
+
function canvasShowCanvas(){var d=getConvCanvasData();canvasIdx=d.canvases.length-1;canvasMode='canvas';renderCanvasPanel();}
|
|
631
|
+
|
|
632
|
+
function onConversationSwitch(){
|
|
633
|
+
// Called when user switches conversation — update canvas panel
|
|
634
|
+
var p=document.getElementById('canvasPanel');
|
|
635
|
+
if(p&&p.classList.contains('open')){
|
|
636
|
+
var d=getConvCanvasData();
|
|
637
|
+
canvasIdx=d.canvases.length-1;
|
|
638
|
+
browserIdx=d.browsers.length-1;
|
|
639
|
+
renderCanvasPanel();
|
|
640
|
+
}
|
|
641
|
+
}
|
|
579
642
|
|
|
580
643
|
function reopenCanvas(){
|
|
581
644
|
if(canvasHistory.length===0){
|
|
@@ -583,9 +646,18 @@ function reopenCanvas(){
|
|
|
583
646
|
try{var saved=localStorage.getItem('nha_canvas_history');if(saved){canvasHistory=JSON.parse(saved);canvasIdx=canvasHistory.length-1;}}catch(e){}
|
|
584
647
|
}
|
|
585
648
|
if(canvasHistory.length>0){canvasIdx=canvasHistory.length-1;canvasMode='canvas';renderCanvasPanel();}
|
|
586
|
-
else if(
|
|
649
|
+
else if(d.browsers.length>0){canvasMode='browser';renderCanvasPanel();}
|
|
587
650
|
}
|
|
588
651
|
|
|
652
|
+
function reopenCanvas(){
|
|
653
|
+
var d=getConvCanvasData();
|
|
654
|
+
canvasIdx=d.canvases.length-1;
|
|
655
|
+
browserIdx=d.browsers.length-1;
|
|
656
|
+
if(d.canvases.length>0){canvasMode='canvas';}
|
|
657
|
+
else if(d.browsers.length>0){canvasMode='browser';}
|
|
658
|
+
else{canvasMode='canvas';} // show empty state
|
|
659
|
+
renderCanvasPanel();
|
|
660
|
+
}
|
|
589
661
|
function closeCanvas(){var p=document.getElementById('canvasPanel');if(p)p.classList.remove('open');}
|
|
590
662
|
function toggleCanvasSize(){
|
|
591
663
|
var p=document.getElementById('canvasPanel');if(!p)return;
|
|
@@ -694,15 +766,13 @@ function sendChat(){
|
|
|
694
766
|
renderMessages();
|
|
695
767
|
}
|
|
696
768
|
if(currentEvent==='screenshot'&&data.base64){
|
|
697
|
-
// Only update the browser viewer — the actual image in chat is handled by the 'done' event via screenshotFiles
|
|
698
769
|
showBrowserViewer('Screenshot','Captured');
|
|
699
|
-
updateBrowserFrame(data.base64,data.format||'jpeg');
|
|
770
|
+
updateBrowserFrame(data.base64,data.format||'jpeg','Screenshot');
|
|
700
771
|
updateBrowserStatus('Screenshot captured');
|
|
701
772
|
}
|
|
702
773
|
if(currentEvent==='browser_frame'&&data.base64){
|
|
703
|
-
// Live frame update — also ensure viewer is open
|
|
704
774
|
showBrowserViewer(data.url||'Browser','Live');
|
|
705
|
-
updateBrowserFrame(data.base64,data.format||'jpeg');
|
|
775
|
+
updateBrowserFrame(data.base64,data.format||'jpeg',data.url||'Browser');
|
|
706
776
|
if(data.url)updateBrowserStatus(data.url);
|
|
707
777
|
}
|
|
708
778
|
if(currentEvent==='canvas'&&data.markers){
|