nothumanallowed 13.2.86 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nothumanallowed",
3
- "version": "13.2.86",
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/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.86';
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
 
@@ -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
- // If canvas exists, download the canvas HTML directly (preserves colors and layout)
3411
- if (studioState.canvas) {
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) {
@@ -4967,7 +4971,7 @@ input:focus,textarea:focus{border-color:var(--green3)}
4967
4971
  </div>
4968
4972
  </div>
4969
4973
 
4970
- <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">&#x25C0;</button><button onclick="canvasNext()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Next">&#x25B6;</button></span><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="canvasCopyHTML()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:11px;font-family:var(--mono)" title="Copy HTML source">HTML</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">&#x2922;</button><button onclick="closeCanvas()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Close">&times;</button></div></div><iframe id="canvasFrame" sandbox="allow-scripts" srcdoc=""></iframe></div>
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">&#x25C0;</button><button onclick="canvasNext()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Next">&#x25B6;</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">&#x2913; 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">&#x2922;</button><button onclick="closeCanvas()" style="background:none;border:none;color:var(--dim);cursor:pointer;font-size:14px" title="Close">&times;</button></div></div><iframe id="canvasFrame" sandbox="allow-scripts" srcdoc=""></iframe></div>
4971
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>
4972
4976
  <div class="lightbox-overlay" id="lightboxOverlay" onclick="closeLightbox()">
4973
4977
  <span class="lightbox-close" onclick="closeLightbox()">&times;</span>