nothumanallowed 13.5.103 → 13.5.104

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.5.103",
3
+ "version": "13.5.104",
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": {
@@ -3145,6 +3145,29 @@ ${rawText.slice(0, 18000)}`;
3145
3145
  }
3146
3146
  } catch (e) { toolData += (toolData ? '\n\n' : '') + `## Search "${q}" failed: ${e.message}`; }
3147
3147
  }
3148
+
3149
+ // After all searches: extract URLs from results and fetch booking/info portals directly
3150
+ // This is critical for travel/restaurant/accommodation tasks where portals have internal search
3151
+ const isBookingTask = /(ristorante|restaurant|b&b|hotel|albergo|prenotaz|booking|vacanz|romantico|sushi|menu|disponib|soggiorno|weekend|cena|dinner|accommodation)/i.test(task + ' ' + stepPrompt);
3152
+ if (isBookingTask && toolData.length > 100) {
3153
+ // Extract URLs found in search results
3154
+ const foundUrls = [...new Set((toolData.match(/https?:\/\/[^\s"'\n<>)]+/g) || []))];
3155
+ // Prioritize booking/info portals
3156
+ const portalDomains = ['thefork', 'theforkmanger', 'booking.com', 'tripadvisor', 'yelp', 'zomato', 'airbnb', 'agriturismo', 'expedia', 'hotel', 'b-b.it', 'bed-and-breakfast', 'locanda', 'osteria', 'ristorante', 'viaggi'];
3157
+ const portalUrls = foundUrls.filter(u => portalDomains.some(d => u.toLowerCase().includes(d))).slice(0, 3);
3158
+ if (portalUrls.length > 0) {
3159
+ sendToken(`[Reading ${portalUrls.length} portal page(s)...] `);
3160
+ for (const pu of portalUrls) {
3161
+ try {
3162
+ const pfetch = await withTimeout(executeTool('fetch_url', { url: pu }, config), 20000);
3163
+ const pfetchStr = typeof pfetch === 'string' ? pfetch : JSON.stringify(pfetch);
3164
+ if (pfetchStr && pfetchStr.length > 200) {
3165
+ toolData += '\n\n## Portal page: ' + pu + '\n' + pfetchStr.slice(0, 5000);
3166
+ }
3167
+ } catch {}
3168
+ }
3169
+ }
3170
+ }
3148
3171
  } catch (e) { toolData = toolData || `Web search failed: ${e.message}`; }
3149
3172
 
3150
3173
  } else if (agent === 'BrowserAgent') {
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.5.102';
8
+ export const VERSION = '13.5.104';
9
9
  export const BASE_URL = 'https://nothumanallowed.com/cli';
10
10
  export const API_BASE = 'https://nothumanallowed.com/api/v1';
11
11
 
@@ -1469,7 +1469,7 @@ export async function executeTool(action, params, config) {
1469
1469
  for (const dr of result.deepResults) {
1470
1470
  lines.push(`--- ${dr.title} ---`);
1471
1471
  lines.push(`URL: ${dr.url}`);
1472
- lines.push(dr.content.slice(0, 2000));
1472
+ lines.push(dr.content.slice(0, 4000));
1473
1473
  lines.push('');
1474
1474
  }
1475
1475