nothumanallowed 13.5.3 → 13.5.4

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.3",
3
+ "version": "13.5.4",
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.3';
8
+ export const VERSION = '13.5.4';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -3308,6 +3308,8 @@ var studioState = {
3308
3308
  };
3309
3309
 
3310
3310
  var studioAbortController = null;
3311
+ var parlActiveAgent = null; // active agent label during parliament streaming
3312
+ var parlDoneAgents = {}; // set of completed agent labels during parliament
3311
3313
 
3312
3314
  function stopStudio() {
3313
3315
  if (!studioState.running) return;
@@ -4193,6 +4195,8 @@ async function runStudio() {
4193
4195
  studioState.running = true;
4194
4196
  studioState.planned = false;
4195
4197
  // Keep attachmentContext — it was loaded before hitting Run
4198
+ parlActiveAgent = null;
4199
+ parlDoneAgents = {};
4196
4200
  var parlBlockEl = document.getElementById('studioParliamentBlock');
4197
4201
  if (parlBlockEl) parlBlockEl.style.display = 'none';
4198
4202
  renderStudioNodes();
@@ -4324,9 +4328,9 @@ async function runStudio() {
4324
4328
  renderStudioNodes();
4325
4329
 
4326
4330
  // ── Parliament visual block ──────────────────────────────────────
4327
- // Track active R2 agent for visual block
4328
- var parlActiveAgent = null;
4329
- var parlDoneAgents = {};
4331
+ // Track active R2 agent for visual block (module-level vars)
4332
+ parlActiveAgent = null;
4333
+ parlDoneAgents = {};
4330
4334
 
4331
4335
  // ── Parliament boardroom: first call builds DOM, subsequent calls only update state ──
4332
4336
  var parlBlockBuilt = false;
@@ -5361,10 +5365,33 @@ function runStudioStep(idx, node, task, context, stepDef, signal) {
5361
5365
  tb.textContent = st;
5362
5366
  }
5363
5367
  } else {
5364
- // Live token counter shows progress without raw content
5365
- var chars = output.length;
5366
- var toks = Math.ceil(chars / 4);
5367
- tb.innerHTML = \x27<span style="color:var(--green);font-family:var(--mono);font-size:10px">&#9679; Generating\u2026 \x27 + toks + \x27 token</span>\x27;
5368
+ // Word-by-word streaming text with blinking cursor
5369
+ var snippet = output.length > 400 ? output.slice(-400) : output;
5370
+ var safeSnip = snippet.replace(/&/g,\x27&amp;\x27).replace(/</g,\x27&lt;\x27).replace(/>/g,\x27&gt;\x27);
5371
+ tb.innerHTML = \x27<span style="font-size:11px;color:var(--text);line-height:1.5;white-space:pre-wrap;word-break:break-word;font-family:var(--font)">\x27 + safeSnip + \x27<span class="stream-cursor" style="display:inline-block;width:2px;height:13px;background:var(--green);margin-left:1px;vertical-align:text-bottom;animation:streamBlink .7s step-end infinite">&#8203;</span></span>\x27;
5372
+ // Update thought bubble of the currently active workflow desk
5373
+ var activeDeskEl = document.querySelector(\x27.prl-desk--active[data-agent-label]\x27);
5374
+ if (activeDeskEl) {
5375
+ var wfBubble = activeDeskEl.querySelector(\x27.prl-action-bubble--active\x27);
5376
+ if (wfBubble) {
5377
+ var wfRaw = output.length > 42 ? output.slice(-42) : output;
5378
+ var wfSafe = wfRaw.replace(/&/g,\x27&amp;\x27).replace(/</g,\x27&lt;\x27).replace(/>/g,\x27&gt;\x27);
5379
+ wfBubble.style.maxWidth = \x2796px\x27;
5380
+ wfBubble.style.fontSize = \x278px\x27;
5381
+ wfBubble.innerHTML = wfSafe + \x27<span style="display:inline-block;width:2px;height:9px;background:var(--green);margin-left:1px;vertical-align:text-bottom;animation:streamBlink .7s step-end infinite">&#8203;</span>\x27;
5382
+ }
5383
+ }
5384
+ // Update thought bubble of the active boardroom seat
5385
+ if (parlActiveAgent) {
5386
+ var brSafeLbl = parlActiveAgent.replace(new RegExp(\x27[^a-zA-Z0-9_-]\x27,\x27g\x27),\x27_\x27);
5387
+ var brBubbleEl = document.getElementById(\x27brbubble_\x27+brSafeLbl);
5388
+ if (brBubbleEl) {
5389
+ var brRaw = output.length > 42 ? output.slice(-42) : output;
5390
+ var brSafe = brRaw.replace(/&/g,\x27&amp;\x27).replace(/</g,\x27&lt;\x27).replace(/>/g,\x27&gt;\x27);
5391
+ brBubbleEl.style.display = \x27\x27;
5392
+ brBubbleEl.innerHTML = brSafe + \x27<span style="display:inline-block;width:2px;height:8px;background:var(--green);margin-left:1px;vertical-align:text-bottom;animation:streamBlink .7s step-end infinite">&#8203;</span>\x27;
5393
+ }
5394
+ }
5368
5395
  }
5369
5396
  }
5370
5397
  }
@@ -6239,6 +6266,7 @@ input:focus,textarea:focus{border-color:var(--green3)}
6239
6266
  .prl-action-bubble{font-size:9px;color:#6b7280;font-family:var(--mono);padding:2px 6px;border-radius:8px;background:#111;border:1px solid #2a2a38;min-height:16px;text-align:center;white-space:normal;word-break:break-word;max-width:88px;line-height:1.3;transition:all .3s}
6240
6267
  .prl-action-bubble--active{color:var(--dc,#6366f1);border-color:var(--dc,#6366f1);background:rgba(99,102,241,.08);animation:parlBubblePop .4s ease}
6241
6268
  @keyframes parlBubblePop{0%{transform:scale(.85);opacity:.5}100%{transform:scale(1);opacity:1}}
6269
+ @keyframes streamBlink{0%,100%{opacity:1}50%{opacity:0}}
6242
6270
  /* Character SVG animations */
6243
6271
  @keyframes parlArmType{0%,100%{transform:rotate(-8deg) translateY(0)}50%{transform:rotate(8deg) translateY(2px)}}
6244
6272
  @keyframes parlHeadNod{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(2px) rotate(4deg)}}