nothumanallowed 9.4.12 → 9.4.14

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nothumanallowed",
3
- "version": "9.4.12",
3
+ "version": "9.4.14",
4
4
  "description": "NotHumanAllowed — 38 AI agents + 58 tools + browser automation + web search. Streaming chat, headless Chrome CDP, multi-conversation, export. Gmail, Calendar, Drive, GitHub, Notion, Slack. 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.4.12';
8
+ export const VERSION = '9.4.14';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -435,9 +435,12 @@ function renderMessages(){
435
435
  }
436
436
  var h='';chatHistory.forEach(function(m){
437
437
  var raw=m.content||'';
438
+ // Strip any raw base64 data that leaked into content (from LLM hallucinations)
439
+ raw=raw.replace(/data:image\\/[a-z]+;base64,[A-Za-z0-9+\\/=]{200,}/g,'[image]');
440
+ raw=raw.replace(/[A-Za-z0-9+\\/=]{500,}/g,'');
438
441
  var imgs=[];var idx=0;
439
- // Match both base64 inline images and /api/screenshots/ URLs
440
- var safe=raw.replace(/!\\[([^\\]]*)\\]\\(((?:data:image\\/[a-z]+;base64,[A-Za-z0-9+\\/=]+|\\/api\\/screenshots\\/[a-zA-Z0-9._-]+))\\)/g,function(_,alt,src){var ph='__IMG'+idx+'__';imgs.push({ph:ph,alt:alt,src:src});idx++;return ph;});
442
+ // Match both /api/screenshots/ URLs and data:image (short ones only, for inline display)
443
+ var safe=raw.replace(/!\\[([^\\]]*)\\]\\((\\/api\\/screenshots\\/[a-zA-Z0-9._-]+)\\)/g,function(_,alt,src){var ph='__IMG'+idx+'__';imgs.push({ph:ph,alt:alt,src:src});idx++;return ph;});
441
444
  var content=esc(safe);
442
445
  for(var i=0;i<imgs.length;i++){content=content.replace(imgs[i].ph,'<img class="screenshot-preview" alt="'+esc(imgs[i].alt)+'" src="'+imgs[i].src+'">');}
443
446
  h+='<div class="msg msg--'+esc(m.role)+'"><div class="msg__label">'+esc(m.role==='user'?'You':'NHA')+'</div><div class="msg__bubble">'+content+'</div></div>';
@@ -576,12 +579,7 @@ function sendChat(){
576
579
  renderMessages();
577
580
  }
578
581
  if(currentEvent==='screenshot'&&data.base64){
579
- if(!chatHistory[streamIdx]._screenshots)chatHistory[streamIdx]._screenshots=[];
580
- var ssUrl=data.filename?'/api/screenshots/'+data.filename:'data:image/'+(data.format||'jpeg')+';base64,'+data.base64;
581
- chatHistory[streamIdx]._screenshots.push(ssUrl);
582
- chatHistory[streamIdx].content+='\\n![Screenshot]('+ssUrl+')\\n';
583
- renderMessages();
584
- // Show and update browser viewer with the screenshot
582
+ // Only update the browser viewer — the actual image in chat is handled by the 'done' event via screenshotFiles
585
583
  showBrowserViewer('Screenshot','Captured');
586
584
  updateBrowserFrame(data.base64,data.format||'jpeg');
587
585
  updateBrowserStatus('Screenshot captured');
@@ -593,7 +591,7 @@ function sendChat(){
593
591
  if(data.url)updateBrowserStatus(data.url);
594
592
  }
595
593
  if(currentEvent==='tool_synthesis'){chatHistory[streamIdx].content='';renderMessages();}
596
- if(currentEvent==='done'){endStreaming();if(data.content)chatHistory[streamIdx].content=data.content;var ssf=data.screenshotFiles||[];for(var fi=0;fi<ssf.length;fi++){chatHistory[streamIdx].content+='\\n![Screenshot](/api/screenshots/'+ssf[fi]+')\\n';}var ss=chatHistory[streamIdx]._screenshots||[];for(var si=0;si<ss.length;si++){if(ss[si].indexOf('/api/screenshots/')===0){var alreadyAdded=false;for(var fj=0;fj<ssf.length;fj++){if(ss[si].indexOf(ssf[fj])!==-1)alreadyAdded=true;}if(!alreadyAdded)chatHistory[streamIdx].content+='\\n![Screenshot]('+ss[si]+')\\n';}else if(ssf.length===0){chatHistory[streamIdx].content+='\\n![Screenshot]('+ss[si]+')\\n';}}renderMessages();loadConvList();setTimeout(closeBrowserViewer,5000);}
594
+ if(currentEvent==='done'){endStreaming();if(data.content)chatHistory[streamIdx].content=data.content;var ssf=data.screenshotFiles||[];for(var fi=0;fi<ssf.length;fi++){chatHistory[streamIdx].content+='\\n![Screenshot](/api/screenshots/'+ssf[fi]+')\\n';}renderMessages();loadConvList();if(ssf.length>0)setTimeout(closeBrowserViewer,5000);}
597
595
  if(currentEvent==='error'){endStreaming();chatHistory[streamIdx].content='Error: '+(data.message||'Unknown');renderMessages();}
598
596
  }catch(e){}
599
597
  }