nothumanallowed 13.5.5 → 13.5.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nothumanallowed",
3
- "version": "13.5.5",
3
+ "version": "13.5.6",
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": {
@@ -3529,6 +3529,7 @@ ${context ? `## OUTPUT FROM PREVIOUS AGENTS (use only what is RELEVANT to the wo
3529
3529
  } else if (useStructuredGen) {
3530
3530
  // ── Structured Generation ─────────────────────────────────
3531
3531
  // Phase 1: ask for ONLY the section outline (headings list), fast and cheap
3532
+ sendToken('[Pianificazione struttura report...] ');
3532
3533
  const structConfig = Object.assign({}, config, { thinking: 'off' });
3533
3534
  const outlineSys = `You are ${agent}, a specialist AI agent. Today is ${today}. Respond in ${language}.
3534
3535
  Your task: plan the sections of a complete structured report for this goal: ${task}
@@ -3591,6 +3592,7 @@ ${dataBlock}
3591
3592
  ${writtenSoFar ? `## REPORT WRITTEN SO FAR (for consistency):\n${writtenSoFar.slice(-3000)}` : ''}`;
3592
3593
  const secUser = `Write the complete body content for this section (do NOT repeat the heading):\n${heading}`;
3593
3594
  sendToken('\n\n' + heading + '\n');
3595
+ sendToken('[Sezione ' + (si + 1) + ' di ' + headingLines.length + '...] ');
3594
3596
  let secContent = '';
3595
3597
  try {
3596
3598
  secContent = await streamCall(secSys, secUser, { max_tokens: 2000, thinking: 'off' }, 60000, sendToken);
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.5';
8
+ export const VERSION = '13.5.6';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -3405,7 +3405,20 @@ function studioLog(agent, icon, text, type, update) {
3405
3405
  var time = new Date().toLocaleTimeString('en', {hour:'2-digit', minute:'2-digit', second:'2-digit', hour12:false});
3406
3406
  if (update && studioState.log.length) {
3407
3407
  var last = studioState.log[studioState.log.length - 1];
3408
- if (last.agent === agent) { last.text = text; last.type = type || last.type; renderStudioLog(); return; }
3408
+ if (last.agent === agent) {
3409
+ last.text = text; last.type = type || last.type;
3410
+ // Streaming finished: remove data-rlen from the DOM entry so renderStudioLog re-renders it as markdown
3411
+ var logEl = document.getElementById('studioLog');
3412
+ if (logEl) {
3413
+ var entries = logEl.querySelectorAll('.studio-log-entry');
3414
+ var lastEntry = entries[entries.length - 1];
3415
+ if (lastEntry) {
3416
+ var tb2 = lastEntry.querySelector('.studio-log-entry__text');
3417
+ if (tb2) tb2.removeAttribute(String.fromCharCode(100,97,116,97,45,114,108,101,110));
3418
+ }
3419
+ }
3420
+ renderStudioLog(); return;
3421
+ }
3409
3422
  }
3410
3423
  studioState.log.push({agent: agent, icon: icon, text: text, time: time, type: type||'agent'});
3411
3424
  renderStudioLog();
@@ -3946,9 +3959,18 @@ function renderStudioLog() {
3946
3959
  if (!el) return;
3947
3960
  if (!studioState.log.length) { el.style.display = 'none'; return; }
3948
3961
  el.style.display = 'block';
3949
- el.innerHTML = studioState.log.map(function(e) {
3962
+ var existingEntries = el.querySelectorAll('.studio-log-entry');
3963
+ studioState.log.forEach(function(e, i) {
3964
+ var isStreaming = false;
3965
+ if (existingEntries[i]) {
3966
+ var tb = existingEntries[i].querySelector('.studio-log-entry__text');
3967
+ if (tb && tb.getAttribute(String.fromCharCode(100,97,116,97,45,114,108,101,110)) !== null) {
3968
+ isStreaming = true;
3969
+ }
3970
+ }
3971
+ if (isStreaming) return; // leave streaming entry DOM untouched
3950
3972
  var cls = 'studio-log-entry' + (e.type === 'system' ? ' studio-log-entry--system' : e.type === 'error' ? ' studio-log-entry--error' : '');
3951
- return '<div class="' + cls + '">' +
3973
+ var html = '<div class="' + cls + '">' +
3952
3974
  '<div class="studio-log-entry__header">' +
3953
3975
  '<span class="studio-log-entry__icon">' + e.icon + '</span>' +
3954
3976
  '<span class="studio-log-entry__agent">' + esc(e.agent) + '</span>' +
@@ -3956,7 +3978,20 @@ function renderStudioLog() {
3956
3978
  '</div>' +
3957
3979
  '<div class="studio-log-entry__text md-body">' + renderMd(e.text) + '</div>' +
3958
3980
  '</div>';
3959
- }).join('');
3981
+ if (existingEntries[i]) {
3982
+ existingEntries[i].outerHTML = html;
3983
+ } else {
3984
+ var div = document.createElement('div');
3985
+ div.innerHTML = html;
3986
+ el.appendChild(div.firstChild);
3987
+ }
3988
+ // refresh reference after replacement
3989
+ existingEntries = el.querySelectorAll('.studio-log-entry');
3990
+ });
3991
+ // remove extra entries (shouldn't happen but be safe)
3992
+ while (el.querySelectorAll('.studio-log-entry').length > studioState.log.length) {
3993
+ el.removeChild(el.lastChild);
3994
+ }
3960
3995
  el.scrollTop = el.scrollHeight;
3961
3996
  }
3962
3997
 
@@ -5541,6 +5576,9 @@ function runStudioStep(idx, node, task, context, stepDef, signal) {
5541
5576
  var stEl = document.getElementById(\x27streamText_\x27 + idx);
5542
5577
  if (stEl) { stEl.appendChild(document.createTextNode(newChars)); }
5543
5578
  tb.setAttribute(String.fromCharCode(100,97,116,97,45,114,108,101,110), String(output.length));
5579
+ // Keep studioState.log in sync so renderStudioLog() final call has current text
5580
+ var logLen = studioState.log.length;
5581
+ if (logLen > 0) { studioState.log[logLen - 1].text = output; }
5544
5582
  }
5545
5583
  // Update iso thought bubble of the active agent
5546
5584
  var isoB = document.getElementById(\x27isobubble_\x27+idx);