nothumanallowed 8.1.0 → 8.1.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.1.0",
3
+ "version": "8.1.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.1.0';
8
+ export const VERSION = '8.1.1';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -140,13 +140,16 @@ export async function runPlanningPipeline(config, opts = {}) {
140
140
  // ── Phase 6: CONDUCTOR — Synthesize daily plan ─────────────────────────
141
141
  info('Phase 6: CONDUCTOR synthesizing daily plan...');
142
142
 
143
- const conductorPrompt = `You are the NHA Daily Planner. Synthesize intelligence from 4 specialist agents into a structured, practical daily plan.
143
+ const conductorPrompt = `You are the NHA Daily Planner. Synthesize intelligence from specialist agents into a structured daily plan.
144
144
 
145
- IMPORTANT GUIDELINES:
146
- - Be PRACTICAL, not alarmist. Routine notifications (Google login alerts from your own devices, npm publish confirmations, GitHub security notices) are NOT security incidents.
147
- - Only escalate to "security_alerts" if there is a GENUINE, actionable threat (unknown logins from strange locations, actual phishing, credential leaks).
148
- - Focus on making the user's day productive, not on creating false urgency.
149
- - Suggest realistic time blocks based on the actual task complexity.
145
+ CRITICAL RULES — READ CAREFULLY:
146
+ 1. ONLY include events that appear in the CALENDAR section below. NEVER invent, hallucinate, or assume meetings/appointments that are not listed.
147
+ 2. If there are 0 events in the calendar, the schedule section must ONLY contain suggested focus blocks and task time — NO invented meetings.
148
+ 3. Be PRACTICAL, not alarmist. Routine notifications (Google login alerts from your own devices, npm publish confirmations, GitHub 2FA, password change emails) are NOT security threats. Mark them as SAFE.
149
+ 4. Only put items in "security_alerts" for GENUINE threats: phishing, unknown device access from unexpected locations, credential leaks, social engineering.
150
+ 5. Security alerts must be simple strings, NOT JSON objects. Example: "Verify Google login from unknown Mac device in Italy"
151
+ 6. The "schedule" section should reflect REAL calendar events + suggested blocks for tasks. Do not fabricate appointments.
152
+ 7. Do not create new_tasks that duplicate existing tasks.
150
153
 
151
154
  AGENT REPORTS:
152
155
  ${agentResults.saber ? `\n[SABER — Security Scan]\n${agentResults.saber}` : ''}
@@ -160,22 +163,22 @@ Events: ${events.length}
160
163
  Unread emails: ${emails.length}
161
164
  Tasks: ${tasks.length}
162
165
 
163
- CALENDAR:
164
- ${calendarContext || 'No events.'}
166
+ CALENDAR (these are the ONLY real events — do NOT add any others):
167
+ ${calendarContext || 'No events scheduled.'}
165
168
 
166
- EXISTING TASKS:
169
+ EXISTING TASKS (do NOT duplicate these):
167
170
  ${taskContext || 'No tasks.'}
168
171
 
169
- Create a comprehensive daily plan. Output strict JSON:
172
+ Output strict JSON:
170
173
  {
171
174
  "date": "${dateStr}",
172
- "executive_summary": "2-3 sentence overview",
175
+ "executive_summary": "2-3 sentence overview of the ACTUAL day based on real data",
173
176
  "priority_actions": [{ "time": "HH:MM", "action": "...", "source": "email|calendar|task", "priority": "critical|high|medium|low" }],
174
177
  "schedule": [{ "time_start": "HH:MM", "time_end": "HH:MM", "type": "meeting|focus|break|task", "title": "...", "notes": "...", "preparation": "..." }],
175
178
  "email_actions": [{ "from": "...", "subject": "...", "action": "reply|archive|flag|defer", "suggested_reply": "..." }],
176
- "security_alerts": [],
177
- "new_tasks": [{ "description": "...", "priority": "high|medium|low", "estimated_minutes": N, "suggested_slot": "HH:MM" }],
178
- "insights": []
179
+ "security_alerts": ["simple string descriptions only"],
180
+ "new_tasks": [{ "description": "...", "priority": "high|medium|low", "estimated_minutes": 30, "suggested_slot": "HH:MM" }],
181
+ "insights": ["simple string insights only"]
179
182
  }`;
180
183
 
181
184
  let plan;
@@ -266,7 +269,8 @@ function displayPlan(plan) {
266
269
  if (plan.security_alerts?.length > 0) {
267
270
  console.log(` ${BOLD}\x1b[0;31mSecurity Alerts${NC}`);
268
271
  for (const a of plan.security_alerts) {
269
- console.log(` \x1b[0;31m!\x1b[0m ${typeof a === 'string' ? a : a.message || JSON.stringify(a)}`);
272
+ const text = typeof a === 'string' ? a : a.description || a.message || a.action_required || `[${a.type || 'alert'}] ${a.severity || ''} — ${JSON.stringify(a)}`;
273
+ console.log(` \x1b[0;31m!\x1b[0m ${text}`);
270
274
  }
271
275
  console.log('');
272
276
  }
@@ -274,7 +278,8 @@ function displayPlan(plan) {
274
278
  if (plan.insights?.length > 0) {
275
279
  console.log(` ${BOLD}${D}Insights${NC}`);
276
280
  for (const i of plan.insights) {
277
- console.log(` ${D}→ ${typeof i === 'string' ? i : i.message || JSON.stringify(i)}${NC}`);
281
+ const text = typeof i === 'string' ? i : i.message || i.insight || JSON.stringify(i);
282
+ console.log(` ${D}→ ${text}${NC}`);
278
283
  }
279
284
  console.log('');
280
285
  }
@@ -401,8 +401,8 @@ function renderPlan(el){
401
401
  var h='<div class="plan-summary">'+esc(p.executive_summary||'No summary')+'</div>';
402
402
  if(p.priority_actions&&p.priority_actions.length>0){h+='<div class="section-title">Priority Actions</div>';p.priority_actions.forEach(function(a){h+='<div class="card plan-action"><span class="plan-action__time">'+esc(a.time||'')+'</span><span class="plan-action__text">'+esc(a.action)+'</span></div>'})}
403
403
  if(p.schedule&&p.schedule.length>0){h+='<div class="section-title">Schedule</div>';p.schedule.forEach(function(s){h+='<div class="card event"><span class="event__time">'+esc(s.time_start)+'-'+esc(s.time_end)+'</span><span class="event__title">'+esc(s.title)+'</span></div>'})}
404
- if(p.security_alerts&&p.security_alerts.length>0){h+='<div class="section-title" style="color:var(--red)">Security Alerts</div>';p.security_alerts.forEach(function(a){h+='<div class="card" style="border-color:var(--red)"><span style="color:var(--red)">'+esc(typeof a==='string'?a:a.message||JSON.stringify(a))+'</span></div>'})}
405
- if(p.insights&&p.insights.length>0){h+='<div class="section-title">Insights</div>';p.insights.forEach(function(i){h+='<div style="color:var(--dim);padding:4px 0;font-size:12px">\\u2192 '+esc(typeof i==='string'?i:i.message||'')+'</div>'})}
404
+ if(p.security_alerts&&p.security_alerts.length>0){h+='<div class="section-title" style="color:var(--red)">Security Alerts</div>';p.security_alerts.forEach(function(a){var txt=typeof a==='string'?a:(a.description||a.message||a.action_required||'Alert');var sev=typeof a==='object'&&a.severity?' ['+a.severity.toUpperCase()+']':'';h+='<div class="card" style="border-color:var(--red);padding:14px"><span style="color:var(--red);font-weight:700">!'+esc(sev)+'</span> '+esc(txt)+(typeof a==='object'&&a.action_required&&a.action_required!==txt?'<div style="color:var(--amber);font-size:11px;margin-top:6px">Action: '+esc(a.action_required)+'</div>':'')+'</div>'})}
405
+ if(p.insights&&p.insights.length>0){h+='<div class="section-title">Insights</div>';p.insights.forEach(function(i){var txt=typeof i==='string'?i:(i.message||i.insight||'');h+='<div style="color:var(--dim);padding:4px 0;font-size:12px">\\u2192 '+esc(txt)+'</div>'})}
406
406
  h+='<div style="margin-top:16px;text-align:center"><button class="btn btn--secondary" onclick="refreshPlan()">Regenerate</button></div>';
407
407
  el.innerHTML=h;
408
408
  });