nothumanallowed 13.5.199 → 13.5.200
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 +31 -38
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.5.
|
|
3
|
+
"version": "13.5.200",
|
|
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.5.
|
|
8
|
+
export const VERSION = '13.5.200';
|
|
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
|
@@ -5202,30 +5202,22 @@ function downloadStudioPDF() {
|
|
|
5202
5202
|
// When a canvas HTML report exists, print IT directly — it's already pixel-perfect with
|
|
5203
5203
|
// charts, tables and @media print CSS. No need to rebuild from markdown.
|
|
5204
5204
|
if (studioState.canvas) {
|
|
5205
|
-
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5205
|
+
// Open canvas HTML in a new window and print it there.
|
|
5206
|
+
// window.open() allows CDN scripts (Chart.js) to fully execute before print —
|
|
5207
|
+
// unlike a hidden off-screen iframe which browsers block for printing.
|
|
5208
|
+
var printWin = window.open('', '_blank', 'width=1100,height=800');
|
|
5209
|
+
if (printWin) {
|
|
5210
|
+
printWin.document.open();
|
|
5211
|
+
printWin.document.write(studioState.canvas);
|
|
5212
|
+
printWin.document.close();
|
|
5213
|
+
// Wait for Chart.js to render all charts, then trigger print dialog
|
|
5214
|
+
printWin.addEventListener('load', function() {
|
|
5215
|
+
setTimeout(function() {
|
|
5216
|
+
printWin.focus();
|
|
5217
|
+
printWin.print();
|
|
5218
|
+
}, 2000);
|
|
5219
|
+
});
|
|
5211
5220
|
}
|
|
5212
|
-
setBusyC(true);
|
|
5213
|
-
var oldIfrC = document.getElementById('nhaPrintFrame');
|
|
5214
|
-
if (oldIfrC) oldIfrC.remove();
|
|
5215
|
-
var ifrC = document.createElement('iframe');
|
|
5216
|
-
ifrC.id = 'nhaPrintFrame';
|
|
5217
|
-
ifrC.style.cssText = 'position:fixed;top:-9999px;left:-9999px;width:1100px;height:800px;border:none;opacity:0;pointer-events:none';
|
|
5218
|
-
ifrC.onload = function() {
|
|
5219
|
-
setTimeout(function() {
|
|
5220
|
-
try { ifrC.contentWindow.focus(); ifrC.contentWindow.print(); } catch(e) {}
|
|
5221
|
-
setBusyC(false);
|
|
5222
|
-
setTimeout(function(){ try { ifrC.remove(); } catch(e){} }, 8000);
|
|
5223
|
-
}, 2500); // wait for Chart.js charts to render
|
|
5224
|
-
};
|
|
5225
|
-
document.body.appendChild(ifrC);
|
|
5226
|
-
try { ifrC.contentDocument.open(); ifrC.contentDocument.write(canvasHtmlForPrint); ifrC.contentDocument.close(); }
|
|
5227
|
-
catch(e) { ifrC.srcdoc = canvasHtmlForPrint; }
|
|
5228
|
-
setTimeout(function(){ setBusyC(false); }, 8000);
|
|
5229
5221
|
return;
|
|
5230
5222
|
}
|
|
5231
5223
|
|
|
@@ -6857,13 +6849,24 @@ function restoreStudioSession(idx) {
|
|
|
6857
6849
|
// Restore canvas if present
|
|
6858
6850
|
if (s.canvas) {
|
|
6859
6851
|
studioState.canvas = s.canvas;
|
|
6860
|
-
//
|
|
6861
|
-
|
|
6862
|
-
|
|
6863
|
-
var
|
|
6864
|
-
|
|
6852
|
+
// Store in allCanvasData under the active conv key (same key getConvCanvasData() uses)
|
|
6853
|
+
var _restoreKey = activeConvId || '_default';
|
|
6854
|
+
if (!allCanvasData[_restoreKey]) allCanvasData[_restoreKey] = {canvases:[], browsers:[]};
|
|
6855
|
+
var _restoreData = allCanvasData[_restoreKey];
|
|
6856
|
+
var _existRestoreIdx = _restoreData.canvases.findIndex(function(c){ return c.title === 'Studio Report'; });
|
|
6857
|
+
var _restoreItem = {html: s.canvas, title: 'Studio Report', ts: s.ts || ''};
|
|
6858
|
+
if (_existRestoreIdx >= 0) { _restoreData.canvases[_existRestoreIdx] = _restoreItem; canvasIdx = _existRestoreIdx; }
|
|
6859
|
+
else { _restoreData.canvases.push(_restoreItem); canvasIdx = _restoreData.canvases.length - 1; }
|
|
6860
|
+
canvasMode = 'canvas';
|
|
6861
|
+
_canvasFrameLoadedHtml = null; // force iframe reload
|
|
6862
|
+
var cf = document.getElementById('canvasFrame');
|
|
6863
|
+
var cp = document.getElementById('canvasPanel');
|
|
6864
|
+
if (cf) cf.srcdoc = s.canvas;
|
|
6865
|
+
if (cp) cp.classList.add('open');
|
|
6865
6866
|
var ct = document.getElementById('canvasTitle');
|
|
6866
6867
|
if (ct) ct.textContent = 'Studio Report';
|
|
6868
|
+
var scb = document.getElementById('studioCanvasBtn');
|
|
6869
|
+
if (scb) { scb.style.display = ''; scb.style.background = 'var(--greendim)'; scb.style.borderColor = 'var(--green3)'; scb.style.color = 'var(--green)'; }
|
|
6867
6870
|
}
|
|
6868
6871
|
showToast('success', 'Session restored', s.task.slice(0, 60), 3000);
|
|
6869
6872
|
}
|
|
@@ -6989,16 +6992,6 @@ function runStudioStep(idx, node, task, context, stepDef, signal) {
|
|
|
6989
6992
|
var st = ev.token.replace(new RegExp(\x27[\\\\r\\\\n]+\x27,\x27g\x27), \x27 \x27);
|
|
6990
6993
|
// Strip surrounding brackets for display
|
|
6991
6994
|
var stLabel = st.replace(new RegExp(\x27^\\\\[\x27), \x27\x27).replace(new RegExp(\x27\\\\]\\\\s*$\x27), \x27\x27).trim();
|
|
6992
|
-
// If there is accumulated text before this status token, render it as markdown first
|
|
6993
|
-
var accText = output.trim();
|
|
6994
|
-
if (accText && tb.getAttribute(String.fromCharCode(100,97,116,97,45,114,108,101,110)) !== null) {
|
|
6995
|
-
// Render markdown of accumulated text so far, then append the new status chip below
|
|
6996
|
-
var mdRendered = renderMd(accText);
|
|
6997
|
-
tb.className = \x27studio-log-entry__text md-body\x27;
|
|
6998
|
-
tb.removeAttribute(String.fromCharCode(100,97,116,97,45,114,108,101,110));
|
|
6999
|
-
// Reset output accumulator for new section (keep full output for final render)
|
|
7000
|
-
tb.innerHTML = \x27<div class="md-body" style="margin-bottom:8px">\x27 + mdRendered + \x27</div>\x27;
|
|
7001
|
-
}
|
|
7002
6995
|
// Special chip for Searching
|
|
7003
6996
|
var srchM = st.match(new RegExp(\x27^\\\\[Searching:\\\\s*"([^"]+)"\\\\]\\\\s*$\x27));
|
|
7004
6997
|
if (srchM) {
|