nothumanallowed 8.3.0 → 8.3.1

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": "8.3.0",
3
+ "version": "8.3.1",
4
4
  "description": "NotHumanAllowed — 38 AI agents + unified productivity suite. Gmail, Calendar, Drive, Contacts, Tasks, GitHub, Notion, Slack, voice chat, smart scheduler. 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 = '8.3.0';
8
+ export const VERSION = '8.3.1';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -384,16 +384,24 @@ function addTaskUI(){
384
384
  });
385
385
  }
386
386
  function toggleTask(id){
387
- apiPatch('/api/tasks/'+id+'/done').then(function(){loadDash().then(function(){if(currentView==='tasks'||currentView==='dashboard')render()})});
387
+ // Optimistic UI — update instantly, sync in background
388
+ var t=dash.tasks.find(function(x){return x.id===id});
389
+ if(t){t.status=t.status==='done'?'pending':'done';t.completedAt=t.status==='done'?new Date().toISOString():null}
390
+ render();
391
+ apiPatch('/api/tasks/'+id+'/done').then(function(){loadDash()});
388
392
  }
389
393
  function deleteTaskUI(id){
390
394
  if(!confirm('Delete task #'+id+'?'))return;
391
- apiPost('/api/tasks/'+id+'/delete',{}).then(function(){loadDash().then(function(){render()})});
395
+ dash.tasks=dash.tasks.filter(function(x){return x.id!==id});
396
+ render();
397
+ apiPost('/api/tasks/'+id+'/delete',{}).then(function(){loadDash()});
392
398
  }
393
399
  function clearTasksUI(mode){
394
400
  var msg=mode==='all'?'Delete ALL tasks? This cannot be undone.':'Remove all completed tasks?';
395
401
  if(!confirm(msg))return;
396
- apiPost('/api/tasks/clear',{mode:mode}).then(function(){loadDash().then(function(){render()})});
402
+ if(mode==='all'){dash.tasks=[]}else{dash.tasks=dash.tasks.filter(function(x){return x.status!=='done'})}
403
+ render();
404
+ apiPost('/api/tasks/clear',{mode:mode}).then(function(){loadDash()});
397
405
  }
398
406
 
399
407
  // ---- PLAN ----