nothumanallowed 12.5.6 → 12.6.0

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": "12.5.6",
3
+ "version": "12.6.0",
4
4
  "description": "NotHumanAllowed — 38 AI agents, 80 tools. 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": {
@@ -1236,9 +1236,7 @@ export async function cmdUI(args) {
1236
1236
  }
1237
1237
 
1238
1238
  if (!config.llm.apiKey && config.llm.provider !== 'nha') {
1239
- sendJSON(res, 200, { response: 'No API key configured. Run: nha config set key YOUR_KEY\nOr use NHA Free (no key needed): nha config set provider nha', error: 'no_api_key' });
1240
- logRequest(method, pathname, 200, Date.now() - start);
1241
- return;
1239
+ config.llm.provider = 'nha'; // Auto-fallback to free tier
1242
1240
  }
1243
1241
 
1244
1242
  // Build message with rolling context (same strategy as streaming path)
@@ -1695,7 +1693,7 @@ export async function cmdUI(args) {
1695
1693
  if (method === 'POST' && pathname === '/api/chat/stream') {
1696
1694
  const body = await parseBody(req);
1697
1695
  if (!body.message) { sendJSON(res, 400, { error: 'message required' }); logRequest(method, pathname, 400, Date.now() - start); return; }
1698
- if (!config.llm.apiKey && config.llm.provider !== 'nha') { sendJSON(res, 200, { error: 'no_api_key' }); logRequest(method, pathname, 200, Date.now() - start); return; }
1696
+ if (!config.llm.apiKey && config.llm.provider !== 'nha') { config.llm.provider = 'nha'; }
1699
1697
 
1700
1698
  const msg = body.message.trim();
1701
1699
  const convId = body.conversationId;
@@ -2193,9 +2191,8 @@ export async function cmdUI(args) {
2193
2191
  }
2194
2192
 
2195
2193
  if (!config.llm.apiKey && config.llm.provider !== 'nha') {
2196
- sendJSON(res, 200, { response: null, error: 'No API key configured.' });
2197
- logRequest(method, pathname, 200, Date.now() - start);
2198
- return;
2194
+ // Auto-fallback to NHA free tier if no API key is configured
2195
+ config.llm.provider = 'nha';
2199
2196
  }
2200
2197
 
2201
2198
  // Allow both built-in and custom agents
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 = '12.5.6';
8
+ export const VERSION = '12.5.7';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -65,10 +65,18 @@ input:focus,textarea:focus{border-color:var(--green3)}
65
65
 
66
66
  .content{flex:1;overflow-y:auto;padding:16px;-webkit-overflow-scrolling:touch}
67
67
 
68
+ /* Mobile burger button */
69
+ #mobileBurger{display:block}
70
+ .sidebar__close{position:absolute;top:12px;right:12px;background:none;border:none;color:var(--dim);font-size:20px;cursor:pointer;padding:4px 8px;z-index:10;line-height:1}
71
+ .sidebar__close:hover{color:var(--bright)}
72
+ .sidebar__brand{position:relative}
73
+
68
74
  /* ---- DESKTOP: sidebar always visible ---- */
69
75
  @media(min-width:901px){
70
76
  .app{flex-direction:row}
71
77
  .header__burger{display:none}
78
+ #mobileBurger{display:none!important}
79
+ .sidebar__close{display:none}
72
80
  .sidebar{display:flex!important;position:static;width:220px;min-width:220px;height:auto;box-shadow:none}
73
81
  .sidebar__overlay{display:none!important}
74
82
  .content{padding:20px}
@@ -439,7 +447,7 @@ function renderChat(el){
439
447
  '</div>'+
440
448
  '<div style="flex:1;display:flex;flex-direction:column;min-width:0">'+
441
449
  '<div style="padding:6px 12px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px">'+
442
- '<button onclick="toggleConvSidebar()" style="background:none;border:none;cursor:pointer;font-size:14px;color:var(--dim);padding:2px 6px" title="Toggle conversations">&#128172;</button>'+
450
+ '<button onclick="toggleConvSidebar()" style="background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;font-size:11px;color:var(--green);padding:4px 10px;display:flex;align-items:center;gap:4px;font-family:var(--font)" title="Toggle conversations">&#128172; <span>Chats</span></button>'+
443
451
  '<span id="convTitle" style="flex:1;font-size:12px;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap">New Chat</span>'+
444
452
  '<button onclick="createNewConv()" style="background:none;border:1px solid var(--green);color:var(--green);padding:4px 10px;border-radius:var(--r);cursor:pointer;font-size:10px">+ New</button>'+
445
453
  '<button onclick="exportConvMd()" style="background:none;border:1px solid var(--border);color:var(--dim);padding:4px 8px;border-radius:var(--r);cursor:pointer;font-size:10px" title="Export Markdown">Export</button>'+
@@ -2704,6 +2712,7 @@ init();
2704
2712
  <div class="app">
2705
2713
  <nav class="sidebar" id="sidebar">
2706
2714
  <div class="sidebar__brand">
2715
+ <button class="sidebar__close" onclick="closeSidebar()" title="Close menu">&times;</button>
2707
2716
  <div style="display:flex;align-items:center;gap:8px">
2708
2717
  <div class="sidebar__brand-name">NHA</div>
2709
2718
  <span id="wsIndicator" style="color:var(--dim);font-size:8px" title="Daemon WebSocket">&#9679;</span>
@@ -2757,7 +2766,7 @@ init();
2757
2766
  <div style="padding:12px 16px;margin-top:auto;border-top:1px solid var(--border);font-size:10px;color:var(--dim)">nothumanallowed.com</div>
2758
2767
  </nav>
2759
2768
 
2760
- <button onclick="openSidebar()" style="position:fixed;top:8px;left:8px;z-index:100;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);color:var(--green);font-size:20px;padding:4px 10px;cursor:pointer;line-height:1" id="mobileBurger">&#9776;</button>
2769
+ <button onclick="openSidebar()" style="position:fixed;top:6px;left:6px;z-index:100;background:var(--bg2);border:1px solid var(--border);border-radius:var(--r);color:var(--green);font-size:16px;padding:4px 8px;cursor:pointer;line-height:1;opacity:0.85" id="mobileBurger">&#9776;</button>
2761
2770
 
2762
2771
  <div class="content" id="content"></div>
2763
2772