nothumanallowed 13.2.36 → 13.2.37
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 +1 -1
- package/src/constants.mjs +1 -1
- package/src/services/llm.mjs +6 -2
- package/src/services/web-ui.mjs +7 -13
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.2.
|
|
3
|
+
"version": "13.2.37",
|
|
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": {
|
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.2.
|
|
8
|
+
export const VERSION = '13.2.37';
|
|
9
9
|
export const BASE_URL = 'https://nothumanallowed.com/cli';
|
|
10
10
|
export const API_BASE = 'https://nothumanallowed.com/api/v1';
|
|
11
11
|
|
package/src/services/llm.mjs
CHANGED
|
@@ -662,7 +662,9 @@ function parseSSEText(text, format, onToken) {
|
|
|
662
662
|
}
|
|
663
663
|
if (out) {
|
|
664
664
|
// Qwen3 emits tokens without spaces between words — insert space when needed
|
|
665
|
-
|
|
665
|
+
// But NOT inside HTML tags (e.g. < div class = "foo" > would get broken)
|
|
666
|
+
const insideTag = fullText.lastIndexOf('<') > fullText.lastIndexOf('>');
|
|
667
|
+
if (fullText && out && !insideTag && !/[\s\n]$/.test(fullText) && !/^[\s\n.,;:!?)\]}'">]/.test(out)) {
|
|
666
668
|
out = ' ' + out;
|
|
667
669
|
}
|
|
668
670
|
fullText += out;
|
|
@@ -729,7 +731,9 @@ async function streamSSEWithCallback(res, format, onToken) {
|
|
|
729
731
|
}
|
|
730
732
|
if (out) {
|
|
731
733
|
// Qwen3 emits tokens without spaces between words — insert space when needed
|
|
732
|
-
|
|
734
|
+
// But NOT inside HTML tags
|
|
735
|
+
const insideTag2 = fullText.lastIndexOf('<') > fullText.lastIndexOf('>');
|
|
736
|
+
if (fullText && out && !insideTag2 && !/[\s\n]$/.test(fullText) && !/^[\s\n.,;:!?)\]}'">]/.test(out)) {
|
|
733
737
|
out = ' ' + out;
|
|
734
738
|
}
|
|
735
739
|
fullText += out;
|
package/src/services/web-ui.mjs
CHANGED
|
@@ -3216,24 +3216,18 @@ function runStudioStep(idx, node, task, context, stepDef, signal) {
|
|
|
3216
3216
|
try {
|
|
3217
3217
|
var ev = JSON.parse(d);
|
|
3218
3218
|
if (ev.token) {
|
|
3219
|
-
|
|
3220
|
-
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
}
|
|
3224
|
-
// Update live log entry
|
|
3225
|
-
var entries = document.querySelectorAll('.studio-log-entry');
|
|
3219
|
+
var isStatus = ev.token.charAt(0) === \x27[\x27 && ev.token.indexOf(\x27]\x27) > 0 && ev.token.length < 80;
|
|
3220
|
+
if (!isStatus) { output += ev.token; }
|
|
3221
|
+
// Update live log: show status tokens as text, LLM output as animated dots
|
|
3222
|
+
var entries = document.querySelectorAll(\x27.studio-log-entry\x27);
|
|
3226
3223
|
var last = entries[entries.length - 1];
|
|
3227
3224
|
if (last) {
|
|
3228
|
-
var tb = last.querySelector(
|
|
3225
|
+
var tb = last.querySelector(\x27.studio-log-entry__text\x27);
|
|
3229
3226
|
if (tb) {
|
|
3230
3227
|
if (isStatus) {
|
|
3231
|
-
tb.textContent = ev.token.split(
|
|
3232
|
-
} else {
|
|
3233
|
-
// Show last 300 chars of output, strip markdown symbols for clean log display
|
|
3234
|
-
var preview = output.slice(-300).replace(/#{1,6}[\\s]*/g,\x27\x27).replace(/\\*\\*/g,\x27\x27).replace(/\\*/g,\x27\x27).replace(/---+/g,\x27\x27).replace(/[\\n]{2,}/g,\x27 \x27).trim();
|
|
3235
|
-
tb.textContent = preview;
|
|
3228
|
+
tb.textContent = ev.token.split(\x27\r\x27).join(\x27\x27).split(\x27\n\x27).join(\x27 \x27);
|
|
3236
3229
|
}
|
|
3230
|
+
// LLM output: don\x27t show raw tokens — just keep the animated dots from CSS
|
|
3237
3231
|
}
|
|
3238
3232
|
}
|
|
3239
3233
|
}
|