nothumanallowed 9.8.6 → 9.8.7
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 +36 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "9.8.
|
|
3
|
+
"version": "9.8.7",
|
|
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.7';
|
|
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
|
@@ -409,7 +409,7 @@ function renderChat(el){
|
|
|
409
409
|
'</div>'+
|
|
410
410
|
'<div class="chat"><div class="chat__messages" id="chatMessages"></div>'+
|
|
411
411
|
'<div id="chatAttachInfo" style="display:none;padding:4px 12px;font-size:11px;color:var(--cyan);background:var(--bg2);border-top:1px solid var(--border)"><span id="chatAttachName"></span> <button onclick="clearChatAttach()" style="background:none;border:none;color:#f44;cursor:pointer;font-size:14px;font-weight:700">×</button></div>'+
|
|
412
|
-
'<div class="chat__bar"><button class="chat__mic" id="chatMic" onclick="toggleVoiceInput()" title="Voice input">🎤</button><button onclick="document.getElementById(\\x27chatFileInput\\x27).click()" style="background:none;border:none;cursor:pointer;font-size:16px;padding:4px" title="Attach file">📎</button><button onclick="document.getElementById(\\x27chatImageInput\\x27).click()" style="background:none;border:none;cursor:pointer;font-size:16px;padding:4px" title="Attach image">📷</button><input type="file" id="chatFileInput" style="display:none" onchange="handleChatFile(this)"><input type="file" id="chatImageInput" accept="image/*" style="display:none" onchange="handleChatImage(this)"><textarea class="chat__input" id="chatInput" placeholder="Ask anything... (or attach file/image first)" rows="1"></textarea><button class="chat__send" id="chatSend">Send</button><button class="chat__stop" id="chatStop" onclick="stopChat()">Stop</button><button onclick="reopenCanvas()" style="background:none;border:
|
|
412
|
+
'<div class="chat__bar"><button class="chat__mic" id="chatMic" onclick="toggleVoiceInput()" title="Voice input">🎤</button><button onclick="document.getElementById(\\x27chatFileInput\\x27).click()" style="background:none;border:none;cursor:pointer;font-size:16px;padding:4px" title="Attach file">📎</button><button onclick="document.getElementById(\\x27chatImageInput\\x27).click()" style="background:none;border:none;cursor:pointer;font-size:16px;padding:4px" title="Attach image">📷</button><input type="file" id="chatFileInput" style="display:none" onchange="handleChatFile(this)"><input type="file" id="chatImageInput" accept="image/*" style="display:none" onchange="handleChatImage(this)"><textarea class="chat__input" id="chatInput" placeholder="Ask anything... (or attach file/image first)" rows="1"></textarea><button class="chat__send" id="chatSend">Send</button><button class="chat__stop" id="chatStop" onclick="stopChat()">Stop</button><button onclick="reopenCanvas()" style="background:none;border:1px solid var(--border2);border-radius:6px;cursor:pointer;font-size:11px;padding:4px 8px;color:var(--dim);font-family:var(--mono);display:flex;align-items:center;gap:4px" title="Open Canvas / Browser panel"><span style="font-size:14px">▣</span>Canvas</button></div>'+
|
|
413
413
|
'</div>'+
|
|
414
414
|
'</div>'+
|
|
415
415
|
'</div>';
|
|
@@ -547,11 +547,18 @@ function showCanvas(html,title){
|
|
|
547
547
|
|
|
548
548
|
function addBrowserPage(base64,url){
|
|
549
549
|
var d=getConvCanvasData();
|
|
550
|
-
|
|
551
|
-
if(
|
|
552
|
-
d.browsers.
|
|
550
|
+
var cleanUrl=(url||'Browser').replace(/^https?:\\/\\//, '').slice(0,60);
|
|
551
|
+
// Only add if URL is different from the last entry (avoid frame duplicates)
|
|
552
|
+
if(d.browsers.length>0&&d.browsers[d.browsers.length-1].url===cleanUrl){
|
|
553
|
+
// Update the thumbnail with the latest frame
|
|
554
|
+
d.browsers[d.browsers.length-1].base64=base64;
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
d.browsers.push({base64:base64,url:cleanUrl,ts:new Date().toLocaleTimeString()});
|
|
553
558
|
browserIdx=d.browsers.length-1;
|
|
554
|
-
|
|
559
|
+
// Auto-update canvas panel if browser tab is open
|
|
560
|
+
var p=document.getElementById('canvasPanel');
|
|
561
|
+
if(p&&p.classList.contains('open')&&canvasMode==='browser'){renderCanvasPanel();}
|
|
555
562
|
}
|
|
556
563
|
|
|
557
564
|
function saveCanvasData(){
|
|
@@ -592,25 +599,38 @@ function renderCanvasPanel(){
|
|
|
592
599
|
// Header title
|
|
593
600
|
var t=document.getElementById('canvasTitle');
|
|
594
601
|
if(t){
|
|
595
|
-
if(
|
|
596
|
-
else if(
|
|
597
|
-
else{t.textContent=(item.title||'Canvas')+(
|
|
602
|
+
if(canvasMode==='browser'){t.textContent=d.browsers.length>0?d.browsers.length+' pages visited':'No pages visited';}
|
|
603
|
+
else if(!item){t.textContent='Empty canvas';}
|
|
604
|
+
else{t.textContent=(item.title||'Canvas')+(d.canvases.length>1?' ('+(canvasIdx+1)+'/'+d.canvases.length+')':'');}
|
|
598
605
|
}
|
|
599
|
-
// Nav arrows
|
|
606
|
+
// Nav arrows — only for canvas mode (browser uses gallery grid)
|
|
600
607
|
var navEl=document.getElementById('canvasNav');
|
|
601
|
-
if(navEl){navEl.style.display=
|
|
608
|
+
if(navEl){navEl.style.display=d.canvases.length>1&&canvasMode==='canvas'?'flex':'none';}
|
|
602
609
|
// Tab highlight
|
|
603
610
|
var tabC=document.getElementById('canvasTabC');
|
|
604
611
|
var tabB=document.getElementById('canvasTabB');
|
|
605
612
|
if(tabC)tabC.style.borderBottom=canvasMode==='canvas'?'2px solid var(--green)':'none';
|
|
606
613
|
if(tabB)tabB.style.borderBottom=canvasMode==='browser'?'2px solid var(--green)':'none';
|
|
607
|
-
// Render iframe
|
|
614
|
+
// Render iframe content
|
|
608
615
|
var f=document.getElementById('canvasFrame');if(!f)return;
|
|
609
616
|
var doc=f.contentDocument||f.contentWindow.document;
|
|
610
|
-
if(
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
617
|
+
if(canvasMode==='browser'){
|
|
618
|
+
// Browser tab: gallery of visited page thumbnails
|
|
619
|
+
var d=getConvCanvasData();
|
|
620
|
+
if(d.browsers.length===0){
|
|
621
|
+
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 pages visited</div><div style="font-size:11px;margin-top:8px;color:#333">in this conversation</div></div></body></html>');doc.close();
|
|
622
|
+
} else {
|
|
623
|
+
var gallery='<html><head><style>*{margin:0;padding:0;box-sizing:border-box}body{background:#111;padding:12px;font-family:monospace}h3{color:#00ff41;font-size:12px;margin-bottom:12px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}.card{background:#1a1a1a;border:1px solid #333;border-radius:8px;overflow:hidden;cursor:pointer;transition:border-color .2s}.card:hover{border-color:#00ff41}.card img{width:100%;height:120px;object-fit:cover;display:block}.card .info{padding:6px 8px}.card .url{color:#8ab4f8;font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card .time{color:#555;font-size:9px;margin-top:2px}.selected{border-color:#00ff41;box-shadow:0 0 10px rgba(0,255,65,0.2)}</style></head><body><h3>Pages visited ('+d.browsers.length+')</h3><div class="grid">';
|
|
624
|
+
for(var bi=0;bi<d.browsers.length;bi++){
|
|
625
|
+
var b=d.browsers[bi];
|
|
626
|
+
var sel=bi===browserIdx?' selected':'';
|
|
627
|
+
gallery+='<div class="card'+sel+'" onclick="parent.selectBrowserPage('+bi+')"><img src="data:image/jpeg;base64,'+b.base64+'" alt="'+b.url+'"/><div class="info"><div class="url">'+b.url+'</div><div class="time">'+b.ts+'</div></div></div>';
|
|
628
|
+
}
|
|
629
|
+
gallery+='</div></body></html>';
|
|
630
|
+
doc.open();doc.write(gallery);doc.close();
|
|
631
|
+
}
|
|
632
|
+
} else if(!item){
|
|
633
|
+
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 canvas content</div><div style="font-size:11px;margin-top:8px;color:#333">in this conversation</div></div></body></html>');doc.close();
|
|
614
634
|
} else {
|
|
615
635
|
doc.open();doc.write(item.html);doc.close();
|
|
616
636
|
}
|
|
@@ -626,6 +646,7 @@ function canvasNext(){
|
|
|
626
646
|
if(canvasMode==='browser'){if(browserIdx<d.browsers.length-1){browserIdx++;renderCanvasPanel();}}
|
|
627
647
|
else{if(canvasIdx<d.canvases.length-1){canvasIdx++;renderCanvasPanel();}}
|
|
628
648
|
}
|
|
649
|
+
function selectBrowserPage(i){browserIdx=i;canvasMode='browser';renderCanvasPanel();}
|
|
629
650
|
function canvasShowBrowser(){var d=getConvCanvasData();browserIdx=d.browsers.length-1;canvasMode='browser';renderCanvasPanel();}
|
|
630
651
|
function canvasShowCanvas(){var d=getConvCanvasData();canvasIdx=d.canvases.length-1;canvasMode='canvas';renderCanvasPanel();}
|
|
631
652
|
|
|
@@ -640,15 +661,6 @@ function onConversationSwitch(){
|
|
|
640
661
|
}
|
|
641
662
|
}
|
|
642
663
|
|
|
643
|
-
function reopenCanvas(){
|
|
644
|
-
if(canvasHistory.length===0){
|
|
645
|
-
// Try restore from localStorage
|
|
646
|
-
try{var saved=localStorage.getItem('nha_canvas_history');if(saved){canvasHistory=JSON.parse(saved);canvasIdx=canvasHistory.length-1;}}catch(e){}
|
|
647
|
-
}
|
|
648
|
-
if(canvasHistory.length>0){canvasIdx=canvasHistory.length-1;canvasMode='canvas';renderCanvasPanel();}
|
|
649
|
-
else if(d.browsers.length>0){canvasMode='browser';renderCanvasPanel();}
|
|
650
|
-
}
|
|
651
|
-
|
|
652
664
|
function reopenCanvas(){
|
|
653
665
|
var d=getConvCanvasData();
|
|
654
666
|
canvasIdx=d.canvases.length-1;
|