nothumanallowed 13.5.84 → 13.5.85
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/services/web-ui.mjs +45 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.5.
|
|
3
|
+
"version": "13.5.85",
|
|
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/services/web-ui.mjs
CHANGED
|
@@ -6570,9 +6570,11 @@ function renderWebCraft(el) {
|
|
|
6570
6570
|
wcState.generatedFiles.map(function(f,i){
|
|
6571
6571
|
var active = i === wcState.activeFile;
|
|
6572
6572
|
var hasErr = !!f._error || !!f._syntaxError;
|
|
6573
|
-
var
|
|
6573
|
+
var isPending = !!f._pending;
|
|
6574
|
+
var tabColor = hasErr ? (active ? '#f87171' : '#7f4040') : isPending ? (active ? '#9ca3af' : '#4b5563') : (active ? 'var(--green)' : 'var(--dim)');
|
|
6574
6575
|
var tabBorder = hasErr ? (active ? '#f87171' : 'transparent') : (active ? 'var(--green3)' : 'transparent');
|
|
6575
|
-
|
|
6576
|
+
var tabPrefix = hasErr ? '⚠ ' : isPending ? '⌛ ' : '';
|
|
6577
|
+
return '<button id="wcTab'+i+'" onclick="wcSetFile('+i+')" style="padding:6px 14px;font-size:11px;font-family:var(--mono);font-weight:'+(active?'700':'400')+';background:'+(active?'var(--bg3)':'transparent')+';border:none;border-bottom:2px solid '+tabBorder+';color:'+tabColor+';cursor:pointer;white-space:nowrap;flex-shrink:0">'+tabPrefix+wcEsc(f.name)+'</button>';
|
|
6576
6578
|
}).join('') +
|
|
6577
6579
|
'</div>'
|
|
6578
6580
|
: '';
|
|
@@ -7932,21 +7934,47 @@ async function wcGenerate() {
|
|
|
7932
7934
|
|
|
7933
7935
|
wcStartGenTimer();
|
|
7934
7936
|
|
|
7935
|
-
|
|
7936
|
-
|
|
7937
|
-
|
|
7937
|
+
// Pre-populate generatedFiles in order so tabs appear immediately
|
|
7938
|
+
filePlan.forEach(function(fp) {
|
|
7939
|
+
wcState.generatedFiles.push({ name: fp.name, content: '', lang: fp.lang, _pending: true });
|
|
7940
|
+
});
|
|
7941
|
+
wcState.activeFile = 0;
|
|
7942
|
+
renderWebCraft(document.getElementById('content'));
|
|
7943
|
+
|
|
7944
|
+
// Generate in parallel batches of 4 — each call is independent/fresh to Liara
|
|
7945
|
+
var BATCH = 4;
|
|
7946
|
+
var doneCount = 0;
|
|
7947
|
+
for (var bi = 0; bi < filePlan.length; bi += BATCH) {
|
|
7938
7948
|
if (_wcGenAbortCtrl && _wcGenAbortCtrl.signal.aborted) break;
|
|
7939
|
-
|
|
7940
|
-
|
|
7941
|
-
|
|
7942
|
-
|
|
7943
|
-
|
|
7944
|
-
|
|
7945
|
-
if (
|
|
7946
|
-
|
|
7947
|
-
|
|
7948
|
-
|
|
7949
|
-
|
|
7949
|
+
var batch = filePlan.slice(bi, bi + BATCH);
|
|
7950
|
+
wcUpdateGenOverlay(doneCount, filePlan.length, batch.map(function(f){ return f.name; }).join(', '));
|
|
7951
|
+
var results = await Promise.allSettled(batch.map(function(fp) {
|
|
7952
|
+
return wcGenOneFile(fp, _wcGenAbortCtrl ? _wcGenAbortCtrl.signal : null).then(function(c){ return { fp: fp, content: c }; });
|
|
7953
|
+
}));
|
|
7954
|
+
results.forEach(function(r) {
|
|
7955
|
+
if (r.status === 'fulfilled') {
|
|
7956
|
+
var fp = r.value.fp;
|
|
7957
|
+
for (var gi = 0; gi < wcState.generatedFiles.length; gi++) {
|
|
7958
|
+
if (wcState.generatedFiles[gi].name === fp.name) {
|
|
7959
|
+
wcState.generatedFiles[gi] = { name: fp.name, content: r.value.content, lang: fp.lang };
|
|
7960
|
+
break;
|
|
7961
|
+
}
|
|
7962
|
+
}
|
|
7963
|
+
} else if (r.reason && r.reason.name !== 'AbortError') {
|
|
7964
|
+
var fpName = batch[results.indexOf(r)] ? batch[results.indexOf(r)].name : '?';
|
|
7965
|
+
// find by matching position
|
|
7966
|
+
var batchIdx = results.indexOf(r);
|
|
7967
|
+
if (batch[batchIdx]) fpName = batch[batchIdx].name;
|
|
7968
|
+
for (var gi2 = 0; gi2 < wcState.generatedFiles.length; gi2++) {
|
|
7969
|
+
if (wcState.generatedFiles[gi2].name === fpName) {
|
|
7970
|
+
wcState.generatedFiles[gi2] = { name: fpName, content: '// Error generating this file: ' + (r.reason.message || 'unknown error'), lang: (batch[batchIdx] || {}).lang || '', _error: true };
|
|
7971
|
+
break;
|
|
7972
|
+
}
|
|
7973
|
+
}
|
|
7974
|
+
}
|
|
7975
|
+
doneCount++;
|
|
7976
|
+
});
|
|
7977
|
+
renderWebCraft(document.getElementById('content'));
|
|
7950
7978
|
}
|
|
7951
7979
|
|
|
7952
7980
|
// ── Retry pass: regenerate files that failed ──────────────────────────────
|
|
@@ -8315,7 +8343,7 @@ async function wcStartSandbox() {
|
|
|
8315
8343
|
headers: {'Content-Type':'application/json'},
|
|
8316
8344
|
body: JSON.stringify({
|
|
8317
8345
|
projectName: wcState.projectName || 'webcraft-sandbox',
|
|
8318
|
-
files: wcState.generatedFiles.filter(function(f){ return !f._error; })
|
|
8346
|
+
files: wcState.generatedFiles.filter(function(f){ return !f._error && !f._pending; })
|
|
8319
8347
|
})
|
|
8320
8348
|
});
|
|
8321
8349
|
if (!r.ok || !r.body) throw new Error('Sandbox error ' + r.status);
|