nothumanallowed 13.5.26 → 13.5.28

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.26",
3
+ "version": "13.5.28",
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": {
@@ -3910,7 +3910,7 @@ DELIBERATION ROUND 2 — REFINEMENT:
3910
3910
  let r2Out = '';
3911
3911
  let r2TokCount = 0;
3912
3912
  try {
3913
- await callLLMStream(config, r2Sys, 'Produce your refined Round 2 response.',
3913
+ await callLLMStream(config, r2Sys, 'Produce your refined Round 2 response. Write complete content under every heading — never leave a section title without body text.',
3914
3914
  (tok) => {
3915
3915
  r2Out += tok;
3916
3916
  r2TokCount += Math.ceil(tok.length / 4);
@@ -3918,7 +3918,7 @@ DELIBERATION ROUND 2 — REFINEMENT:
3918
3918
  if (r2TokCount % 20 < 3) {
3919
3919
  sendTok2(`[Round 2 ${proposal.label || proposal.agent}: ${r2TokCount} token] `);
3920
3920
  }
3921
- }, { max_tokens: 6144 });
3921
+ }, { max_tokens: 8192 });
3922
3922
  } catch (e) { r2Out = proposal.output; }
3923
3923
  r2Results.push({ agent: proposal.agent, label: proposal.label, icon: proposal.icon, output: r2Out });
3924
3924
  sendEv2({ deliberation_r2: { agent: proposal.agent, label: proposal.label, icon: proposal.icon, output: r2Out } });
@@ -3976,10 +3976,15 @@ ${allR2Ctx}${contradictionBlock}
3976
3976
 
3977
3977
  ${medTask}
3978
3978
 
3979
- CRITICAL: Every agent's contribution must be traceable in the final synthesis. If an agent raised a point that was NOT incorporated, explicitly state why. The reader must understand WHO said WHAT and WHETHER it was listened to.`;
3979
+ CRITICAL WRITING RULES ENFORCE STRICTLY:
3980
+ - NEVER write a heading or numbered title without immediately writing its full content below it. A heading with no body text beneath it is FORBIDDEN.
3981
+ - Every section (e.g. "3.1. Sito Web") MUST be followed by at least 3-5 concrete bullet points or sentences explaining WHAT to do and HOW. Never just list the title and move on.
3982
+ - Every agent's contribution must be traceable. If an agent raised a point not incorporated, explicitly state why.
3983
+ - Do NOT summarize sections at the end without first writing their full content.
3984
+ - Write the complete content of each section before moving to the next.`;
3980
3985
  try {
3981
3986
  await callLLMStream(config, medSys, 'Produce the Parliament final synthesis.',
3982
- (tok) => { mediationOutput += tok; }, { max_tokens: 6144 });
3987
+ (tok) => { mediationOutput += tok; }, { max_tokens: 8192 });
3983
3988
  } catch (e) { mediationOutput = ''; }
3984
3989
  sendEv2({ deliberation_r3: { output: mediationOutput, converged } });
3985
3990
  }
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.26';
8
+ export const VERSION = '13.5.28';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -3325,7 +3325,7 @@ var studioAbortController = null;
3325
3325
  var parlActiveAgent = null; // active agent label during parliament streaming
3326
3326
  var parlDoneAgents = {}; // set of completed agent labels during parliament
3327
3327
  var _parlPersistHtml = null; // persists parliament block HTML across tab navigations
3328
- var _PARL_STAMP = '<!--nha-parl-v13.5.26-->';
3328
+ var _PARL_STAMP = '<!--nha-parl-v13.5.28-->';
3329
3329
 
3330
3330
  function stopStudio() {
3331
3331
  if (!studioState.running) return;
@@ -3956,7 +3956,8 @@ function renderStudioNodes() {
3956
3956
  var charHtml = \x27<div class="iso-char-mover"\x27+charIdAttr+\x27>\x27+isoCharSvg({emojiIdx: isOrch ? 99 : emojiIdx, isActive: isActive, isDone: isDone, scale: 1.1, accentColor: accentColor})+\x27</div>\x27;
3957
3957
  var clickAttr = isOrch ? \x27\x27 : (\x27data-agent-label="\x27+esc(label)+\x27" onclick="studioScrollToAgent(this.getAttribute(String.fromCharCode(100,97,116,97,45,97,103,101,110,116,45,108,97,98,101,108)))"\x27);
3958
3958
  // Flying doc emoji when active
3959
- var flyDoc = isActive ? \x27<div class="iso-fly-doc" style="color:\x27+accentColor+\x27">\x27+String.fromCodePoint(0x1F4C4)+\x27</div>\x27 : \x27\x27;
3959
+ // 3 paper sheets flying up from above the monitor — staggered animation via nth-child
3960
+ var flyDoc = isActive ? \x27<div class="iso-fly-doc"><span>\x27+String.fromCodePoint(0x1F4C4)+\x27</span><span>\x27+String.fromCodePoint(0x1F4C3)+\x27</span><span>\x27+String.fromCodePoint(0x1F4C4)+\x27</span></div>\x27 : \x27\x27;
3960
3961
  // Bubble id: orchestrator gets wfOrchBubble, agents get isobubble_IDX
3961
3962
  var bubbleId = isOrch ? \x27wfOrchBubble\x27 : (\x27isobubble_\x27+nodeIdx);
3962
3963
  var bubbleVisible = (bubbleText || isOrch || isActive) ? \x27visible\x27 : \x27hidden\x27;
@@ -4053,16 +4054,16 @@ function renderStudioNodes() {
4053
4054
  if (activeNodeIdx >= 0) {
4054
4055
  requestAnimationFrame(function() {
4055
4056
  var orchChar = document.getElementById(\x27wfOrchChar\x27);
4056
- var orchStation = el.querySelector(\x27[data-station-idx="-1"]\x27);
4057
- var activeStation = el.querySelector(\x27[data-station-idx="\x27+activeNodeIdx+\x27"]\x27);
4057
+ var orchStation = document.querySelector(\x27[data-station-idx="-1"]\x27);
4058
+ var activeStation = document.querySelector(\x27[data-station-idx="\x27+activeNodeIdx+\x27"]\x27);
4058
4059
  if (orchChar && orchStation && activeStation) {
4059
4060
  var orchRect = orchStation.getBoundingClientRect();
4060
4061
  var activeRect = activeStation.getBoundingClientRect();
4061
- // Shift the char 60% of the way toward the active column center
4062
4062
  var delta = (activeRect.left + activeRect.width/2) - (orchRect.left + orchRect.width/2);
4063
- var shift = Math.round(delta * 0.6);
4064
- orchChar.style.transition = \x27transform 0.8s cubic-bezier(.4,0,.2,1)\x27;
4063
+ var shift = Math.round(delta * 0.62);
4064
+ orchChar.style.transition = \x27transform 1.2s cubic-bezier(.4,0,.2,1)\x27;
4065
4065
  orchChar.style.transform = \x27translateX(\x27+shift+\x27px)\x27;
4066
+ orchChar.setAttribute(\x27data-last-shift\x27, String(shift));
4066
4067
  // Also update orch bubble to show what it is assigning
4067
4068
  var orchBubble = document.getElementById(\x27wfOrchBubble\x27);
4068
4069
  if (orchBubble) {
@@ -5077,22 +5078,22 @@ async function runStudio() {
5077
5078
  if (ib2 <= ia) return;
5078
5079
  var ea = document.getElementById(\x27brseat_\x27+pa.label.replace(/[^a-zA-Z0-9_-]/g,\x27_\x27));
5079
5080
  var eb = document.getElementById(\x27brseat_\x27+pb2.label.replace(/[^a-zA-Z0-9_-]/g,\x27_\x27));
5080
- addCommLine(ea, eb, \x27#16a34a\x27, \x273 3\x27, 2, 0.85, \x27\x27);
5081
+ addCommLine(ea, eb, \x27#111827\x27, \x274 3\x27, 2, 0.9, \x27\x27);
5081
5082
  });
5082
5083
  });
5083
5084
  } else if (activeLabel) {
5084
5085
  var aLblSafe2 = activeLabel.replace(/[^a-zA-Z0-9_-]/g,\x27_\x27);
5085
5086
  var activeSeatEl2 = document.getElementById(\x27brseat_\x27+aLblSafe2);
5086
- // Orch → active agent (always) thick, bright, animated
5087
- addCommLine(orchEl2, activeSeatEl2, \x27#818cf8\x27, \x275 4\x27, 3, 0.95, \x27brDashFlow 1.2s linear infinite\x27);
5088
- // R2/R3: done agents → active agent (cross-reading) amber, solid
5087
+ // Orch → active agent: thick black dashed animated line
5088
+ addCommLine(orchEl2, activeSeatEl2, \x27#111827\x27, \x276 4\x27, 3, 1, \x27brDashFlow 1s linear infinite\x27);
5089
+ // R2/R3: done agents → active agent: dark grey dashed
5089
5090
  if (phase === \x27r2\x27 || phase === \x27r3\x27) {
5090
5091
  proposals.forEach(function(pp2) {
5091
5092
  var doneL = pp2.label || pp2.agent;
5092
5093
  if (doneL === activeLabel) return;
5093
5094
  if (!parlDoneAgents[doneL]) return;
5094
5095
  var doneSeat = document.getElementById(\x27brseat_\x27+doneL.replace(/[^a-zA-Z0-9_-]/g,\x27_\x27));
5095
- addCommLine(doneSeat, activeSeatEl2, \x27#d97706\x27, \x274 3\x27, 2, 0.9, \x27brDashFlow 1.8s linear infinite\x27);
5096
+ addCommLine(doneSeat, activeSeatEl2, \x27#374151\x27, \x275 3\x27, 2.5, 1, \x27brDashFlow 1.4s linear infinite\x27);
5096
5097
  });
5097
5098
  }
5098
5099
  }
@@ -5649,7 +5650,7 @@ function runStudioStep(idx, node, task, context, stepDef, signal) {
5649
5650
  var wfSafe = wfSnippet.replace(/&/g,\x27&amp;\x27).replace(/</g,\x27&lt;\x27).replace(/>/g,\x27&gt;\x27);
5650
5651
  isoB.className = \x27iso-bubble iso-bubble--active\x27;
5651
5652
  isoB.style.visibility = \x27visible\x27;
5652
- isoB.innerHTML = wfSafe + \x27<span style="display:inline-block;width:2px;height:8px;background:#6366f1;margin-left:1px;vertical-align:text-bottom;animation:streamBlink .7s step-end infinite">&#8203;</span>\x27;
5653
+ isoB.innerHTML = wfSafe + \x27<span style="display:inline-block;width:2px;height:8px;background:#1d4ed8;margin-left:1px;vertical-align:text-bottom;animation:streamBlink .7s step-end infinite">&#8203;</span>\x27;
5653
5654
  }
5654
5655
  // Update orchestrator bubble: show which agent it assigned and move the char
5655
5656
  var orchB = document.getElementById(\x27wfOrchBubble\x27);
@@ -5660,15 +5661,17 @@ function runStudioStep(idx, node, task, context, stepDef, signal) {
5660
5661
  }
5661
5662
  // Move orchestrator char toward active agent column (live, every token)
5662
5663
  var orchCharEl = document.getElementById(\x27wfOrchChar\x27);
5663
- var orchStEl = el.querySelector(\x27[data-station-idx="-1"]\x27);
5664
- var actStEl = el.querySelector(\x27[data-station-idx="\x27+idx+\x27"]\x27);
5664
+ var orchStEl = document.querySelector(\x27[data-station-idx="-1"]\x27);
5665
+ var actStEl = document.querySelector(\x27[data-station-idx="\x27+idx+\x27"]\x27);
5665
5666
  if (orchCharEl && orchStEl && actStEl) {
5666
5667
  var orchR = orchStEl.getBoundingClientRect();
5667
5668
  var actR = actStEl.getBoundingClientRect();
5668
5669
  var dlt = (actR.left + actR.width/2) - (orchR.left + orchR.width/2);
5669
- var shft = Math.round(dlt * 0.6);
5670
- if (orchCharEl.getAttribute(\x27data-last-shift\x27) !== String(shft)) {
5671
- orchCharEl.style.transition = \x27transform 0.9s cubic-bezier(.4,0,.2,1)\x27;
5670
+ var shft = Math.round(dlt * 0.62);
5671
+ // Only update if shift changed by more than 4px (avoid jitter)
5672
+ var lastShft = parseFloat(orchCharEl.getAttribute(\x27data-last-shift\x27) || \x270\x27);
5673
+ if (Math.abs(shft - lastShft) > 4) {
5674
+ orchCharEl.style.transition = \x27transform 1.2s cubic-bezier(.4,0,.2,1)\x27;
5672
5675
  orchCharEl.style.transform = \x27translateX(\x27+shft+\x27px)\x27;
5673
5676
  orchCharEl.setAttribute(\x27data-last-shift\x27, String(shft));
5674
5677
  }
@@ -6558,19 +6561,22 @@ input:focus,textarea:focus{border-color:var(--green3)}
6558
6561
  .iso-scene{background:#f0ede6;cursor:default;max-width:100%;overflow-x:auto;box-shadow:0 4px 24px rgba(0,0,0,.18);border-radius:12px;overflow:hidden}
6559
6562
  .iso-station{display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;transition:filter .2s,transform .2s;padding:8px 4px;border-radius:12px;border:1.5px solid transparent;position:relative}
6560
6563
  .iso-station:hover{filter:brightness(1.06);transform:translateY(-2px)}
6561
- .iso-char-mover{position:relative;transition:transform .3s}
6562
- .iso-char-mover.iso-orch-walking{animation:orchWalkGrid 1.8s ease-in-out infinite alternate}
6563
- @keyframes orchWalkGrid{0%{transform:translateX(0) scale(1)}100%{transform:translateX(18px) scale(1.05)}}
6564
+ .iso-char-mover{position:relative;transition:transform 0.9s cubic-bezier(.4,0,.2,1)}
6564
6565
  .iso-char-mover.iso-orch-done{animation:orchBounce .7s ease forwards}
6565
6566
  @keyframes orchBounce{0%{transform:scale(1)}40%{transform:scale(1.18) translateY(-6px)}100%{transform:scale(1)}}
6566
- .iso-fly-doc{position:absolute;top:-8px;right:-4px;font-size:16px;animation:flyDocSpin 1.2s ease-in-out infinite;z-index:20;pointer-events:none}
6567
- @keyframes flyDocSpin{0%{transform:rotate(-15deg) translateY(0);opacity:.7}50%{transform:rotate(10deg) translateY(-8px);opacity:1}100%{transform:rotate(-15deg) translateY(0);opacity:.7}}
6567
+ /* Fly-doc: multiple sheets flying from monitor upward */
6568
+ .iso-fly-doc{position:absolute;top:2px;left:50%;font-size:14px;pointer-events:none;z-index:25}
6569
+ .iso-fly-doc span{position:absolute;display:block;animation:flySheet 1.4s ease-in-out infinite}
6570
+ .iso-fly-doc span:nth-child(1){animation-delay:0s;left:-10px}
6571
+ .iso-fly-doc span:nth-child(2){animation-delay:.45s;left:2px}
6572
+ .iso-fly-doc span:nth-child(3){animation-delay:.9s;left:12px}
6573
+ @keyframes flySheet{0%{transform:translateY(0) rotate(-8deg);opacity:0}15%{opacity:1}60%{transform:translateY(-38px) rotate(14deg);opacity:.9}100%{transform:translateY(-58px) rotate(-5deg);opacity:0}}
6568
6574
  .iso-desk{width:90%;height:16px;background:linear-gradient(180deg,#d4a448 0%,#b8832a 100%);border-radius:4px 4px 2px 2px;box-shadow:0 4px 0 #8a5e18,0 6px 10px rgba(0,0,0,.3);border-top:2px solid #e8c060;position:relative;margin-top:4px}
6569
6575
  .iso-desk::after{content:'';position:absolute;bottom:-4px;left:8px;right:8px;height:4px;background:#7a5010;border-radius:0 0 3px 3px}
6570
6576
  .iso-monitor{width:56px;height:40px;background:#12101e;border:2px solid #3a3070;border-radius:5px;display:flex;align-items:center;justify-content:center;position:relative;margin-bottom:-2px}
6571
6577
  .iso-monitor::after{content:'';position:absolute;bottom:-5px;left:50%;transform:translateX(-50%);width:10px;height:5px;background:#252436;border-radius:0 0 3px 3px}
6572
6578
  .iso-monitor-screen{width:44px;height:28px;background:rgba(60,40,160,.35);border-radius:2px;display:flex;align-items:center;justify-content:center}
6573
- .iso-monitor-blink{width:7px;height:7px;border-radius:50%;background:#6366f1;animation:monBlink .9s ease-in-out infinite}
6579
+ .iso-monitor-blink{width:7px;height:7px;border-radius:50%;background:#6366f1;animation:monBlink .9s ease-in-out infinite;margin-right:6px}
6574
6580
  @keyframes monBlink{0%,100%{opacity:1;box-shadow:0 0 8px #6366f1}50%{opacity:.25;box-shadow:none}}
6575
6581
  .iso-tool-badge{font-size:22px;line-height:1;filter:drop-shadow(0 2px 5px rgba(0,0,0,.35));user-select:none;margin-bottom:1px}
6576
6582
  /* Animated status chip for [bracket tokens] */
@@ -6586,7 +6592,7 @@ input:focus,textarea:focus{border-color:var(--green3)}
6586
6592
  .iso-orch-wrap.prl-head{animation:isoCharBob 1.4s ease-in-out infinite}
6587
6593
  /* Thought bubble / speech bubble above character */
6588
6594
  .iso-bubble{font-size:9px;font-family:var(--mono);padding:3px 9px;border-radius:12px;border:1px solid #ccc;background:rgba(255,255,255,.9);color:#6b7280;white-space:normal;word-break:break-word;max-width:160px;line-height:1.4;transition:all .25s;pointer-events:none;backdrop-filter:blur(6px);text-align:center}
6589
- .iso-bubble--active{background:rgba(30,20,60,.9);border-color:#6366f1;color:#a5b4fc;animation:isoBubblePop .35s ease;white-space:normal;max-width:160px;word-break:break-word;line-height:1.35}
6595
+ .iso-bubble--active{background:#0f172a;border-color:#1d4ed8;color:#dbeafe;animation:isoBubblePop .35s ease;white-space:normal;max-width:160px;word-break:break-word;line-height:1.35}
6590
6596
  .iso-bubble--orch{font-size:9px;padding:3px 9px;border-radius:12px;border-color:#818cf8;color:#a5b4fc;background:rgba(20,15,50,.9)}
6591
6597
  @keyframes isoBubblePop{0%{transform:scale(.8) translateY(4px);opacity:.4}100%{transform:scale(1) translateY(0);opacity:1}}
6592
6598
  .iso-name{font-size:10px;font-family:var(--mono);font-weight:700;letter-spacing:.3px;text-align:center;max-width:160px;white-space:normal;word-break:break-word;line-height:1.3;background:rgba(255,255,255,.85);border-radius:6px;padding:2px 6px;pointer-events:none;backdrop-filter:blur(4px)}