nothumanallowed 9.2.2 → 9.2.3

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": "9.2.2",
3
+ "version": "9.2.3",
4
4
  "description": "NotHumanAllowed — 38 AI agents + 50 tools + web search. Streaming chat, multi-conversation, export. Gmail, Calendar, Drive, GitHub, Notion, Slack. 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 = '9.2.2';
8
+ export const VERSION = '9.2.3';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -199,6 +199,7 @@ var chatHistory = [];
199
199
  var activeConvId = null;
200
200
  var convList = [];
201
201
  var dash = {emails:[],events:[],tasks:[],plan:null,status:null};
202
+ var dashLoaded = {emails:false,events:false,tasks:false,contacts:false,notes:false,drive:false,github:false,notion:false,slack:false};
202
203
  var chatStreaming = false;
203
204
 
204
205
  function loadConvList(){return apiGet('/api/conversations').then(function(r){convList=(r&&r.conversations)||[];renderConvSidebar();})}
@@ -257,6 +258,7 @@ function apiPatch(p){return fetch(API+p,{method:'PATCH'}).then(function(r){retur
257
258
  function loadDash(){
258
259
  return Promise.all([apiGet('/api/status'),apiGet('/api/emails'),apiGet('/api/calendar'),apiGet('/api/tasks')]).then(function(r){
259
260
  dash.status=r[0];dash.emails=(r[1]&&r[1].emails)||[];dash.events=(r[2]&&r[2].events)||[];dash.tasks=(r[3]&&r[3].tasks)||[];
261
+ dashLoaded.emails=true;dashLoaded.events=true;dashLoaded.tasks=true;
260
262
  updateBadges();
261
263
  });
262
264
  }
@@ -272,6 +274,7 @@ function updateBadges(){
272
274
  // ---- HELPERS ----
273
275
  function esc(s){return s?String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'):''}
274
276
  function fmtTime(iso){if(!iso)return '';try{return new Date(iso).toLocaleTimeString('en',{hour:'2-digit',minute:'2-digit',hour12:true})}catch(e){return iso}}
277
+ function loadingHTML(label){return '<div style="text-align:center;padding:40px"><div class="spinner"></div><div style="color:var(--dim);margin-top:8px;font-size:12px">Loading '+esc(label)+'...</div></div>'}
275
278
 
276
279
  // ---- RENDER ----
277
280
  function render(){
@@ -300,6 +303,7 @@ function render(){
300
303
 
301
304
  // ---- DASHBOARD ----
302
305
  function renderDash(el){
306
+ if(!dashLoaded.emails){el.innerHTML=loadingHTML('dashboard');return}
303
307
  var t=dash.tasks,e=dash.emails,ev=dash.events;
304
308
  var done=t.filter(function(x){return x.status==='done'}).length;
305
309
  var pend=t.length-done;
@@ -571,8 +575,9 @@ function refreshPlan(){
571
575
 
572
576
  // ---- EMAILS ----
573
577
  function renderEmails(el){
578
+ if(!dashLoaded.emails){el.innerHTML=loadingHTML('emails');return}
574
579
  var e=dash.emails;
575
- if(e.length===0){el.innerHTML='<div class="card" style="text-align:center;color:var(--dim);padding:30px">No emails</div>';return}
580
+ if(e.length===0){el.innerHTML='<div class="card" style="text-align:center;color:var(--dim);padding:30px">Inbox zero — no emails</div>';return}
576
581
  var unreadCount=e.filter(function(x){return x.isUnread}).length;
577
582
  var h='<div style="display:flex;gap:8px;margin-bottom:10px;align-items:center">';
578
583
  h+='<span style="font-size:12px;color:var(--dim)">'+e.length+' emails'+( unreadCount>0?' ('+unreadCount+' unread)':'')+'</span>';