nothumanallowed 13.2.97 → 13.2.99

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.97",
3
+ "version": "13.2.99",
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.97';
8
+ export const VERSION = '13.2.99';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -3949,10 +3949,19 @@ async function runStudio() {
3949
3949
  studioSetNodeStatus(i, 'error');
3950
3950
  break;
3951
3951
  }
3952
+ var NL = String.fromCharCode(10);
3952
3953
  if (stepResult.error) {
3953
3954
  studioSetNodeStatus(i, 'error');
3954
3955
  studioLog(node.label, node.icon, 'Error: ' + stepResult.error, 'error');
3955
- break;
3956
+ // For live-data/tool agents (first steps), a failure is critical — stop
3957
+ // For specialist/synthesis agents, log the error in context and continue
3958
+ var isEarlyToolStep = (node.agent === 'EmailAgent' || node.agent === 'CalendarAgent' || node.agent === 'GitHubAgent' || node.agent === 'WebSearchAgent' || node.agent === 'BrowserAgent');
3959
+ if (isEarlyToolStep && i === 0) { break; }
3960
+ // Non-critical: inject error note into context so CanvasAgent can note the gap
3961
+ var errNote = '## ' + node.label + ':' + NL + '[Agent unavailable: ' + stepResult.error.slice(0, 120) + ']';
3962
+ context = context ? context + NL + NL + '---' + NL + errNote : errNote;
3963
+ studioState.nodes[i].output = errNote;
3964
+ continue; // proceed to next agent
3956
3965
  }
3957
3966
  studioSetNodeStatus(i, 'done');
3958
3967
  var realOutput = (stepResult.output && stepResult.output !== '(no output)') ? stepResult.output : null;
@@ -3970,7 +3979,6 @@ async function runStudio() {
3970
3979
  }
3971
3980
  }
3972
3981
  // Accumulate context: append each step's output so specialist agents see ALL previous data
3973
- var NL = String.fromCharCode(10);
3974
3982
  if (realOutput) {
3975
3983
  context = context
3976
3984
  ? context + NL + NL + '---' + NL + '## ' + node.label + ':' + NL + realOutput
@@ -4167,12 +4175,16 @@ async function runStudio() {
4167
4175
  function saveStudioSession(task, nodes, log, result) {
4168
4176
  try {
4169
4177
  var sessions = JSON.parse(localStorage.getItem('nha_studio_sessions') || '[]');
4178
+ // Save parliament block HTML if present (static snapshot — animations not needed on restore)
4179
+ var parlEl = document.getElementById('studioParliamentBlock');
4180
+ var parlHtml = (parlEl && parlEl.style.display !== 'none') ? parlEl.innerHTML : null;
4170
4181
  sessions.unshift({
4171
4182
  id: Date.now(),
4172
4183
  task: task,
4173
4184
  nodes: nodes.map(function(n){return {label:n.label,icon:n.icon,agent:n.agent};}),
4174
4185
  result: result,
4175
4186
  canvas: studioState.canvas || null,
4187
+ parlHtml: parlHtml,
4176
4188
  log: log.map(function(e){return {agent:e.agent,icon:e.icon,text:e.text,type:e.type,time:e.time};}),
4177
4189
  ts: new Date().toLocaleString()
4178
4190
  });
@@ -4221,6 +4233,16 @@ function restoreStudioSession(idx) {
4221
4233
  var ta = document.getElementById('studioTaskInput');
4222
4234
  if (ta) ta.value = s.task;
4223
4235
  renderStudioNodes(); renderStudioLog(); renderStudioResult();
4236
+ // Restore parliament block if present
4237
+ var parlEl = document.getElementById('studioParliamentBlock');
4238
+ if (parlEl) {
4239
+ if (s.parlHtml) {
4240
+ parlEl.innerHTML = s.parlHtml;
4241
+ parlEl.style.display = 'block';
4242
+ } else {
4243
+ parlEl.style.display = 'none';
4244
+ }
4245
+ }
4224
4246
  // Restore canvas if present
4225
4247
  if (s.canvas) {
4226
4248
  var cf = document.getElementById('canvasFrame');