nothumanallowed 13.5.66 → 13.5.68
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/commands/ui.mjs +7 -0
- package/src/services/web-ui.mjs +16 -18
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nothumanallowed",
|
|
3
|
-
"version": "13.5.
|
|
3
|
+
"version": "13.5.68",
|
|
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/commands/ui.mjs
CHANGED
|
@@ -4313,6 +4313,13 @@ module.exports = { get, set, del, exists };
|
|
|
4313
4313
|
[/require\(['"]\.\.\/\.\.\/config['"]\)/g, "{env:process.env}"],
|
|
4314
4314
|
[/require\(['"]\.\.\/config['"]\)/g, "{env:process.env}"],
|
|
4315
4315
|
[/require\(['"]\.\/config['"]\)/g, "{env:process.env}"],
|
|
4316
|
+
// rateLimiter: LLM sometimes creates a separate file instead of importing from security.js
|
|
4317
|
+
[/require\(['"]\.\.\/middleware\/rateLimiter['"]\)/g, "require('../middleware/security')"],
|
|
4318
|
+
[/require\(['"]\.\/middleware\/rateLimiter['"]\)/g, "require('./middleware/security')"],
|
|
4319
|
+
[/require\(['"]\.\.\/middleware\/rateLimit['"]\)/g, "require('../middleware/security')"],
|
|
4320
|
+
[/require\(['"]\.\/middleware\/rateLimit['"]\)/g, "require('./middleware/security')"],
|
|
4321
|
+
[/require\(['"]\.\.\/middleware\/limiter['"]\)/g, "require('../middleware/security')"],
|
|
4322
|
+
[/require\(['"]\.\/middleware\/limiter['"]\)/g, "require('./middleware/security')"],
|
|
4316
4323
|
];
|
|
4317
4324
|
function patchJsFiles(dir) {
|
|
4318
4325
|
if (!fs.existsSync(dir)) return;
|
package/src/services/web-ui.mjs
CHANGED
|
@@ -7118,7 +7118,6 @@ function wcChatKeydown(e) {
|
|
|
7118
7118
|
}
|
|
7119
7119
|
|
|
7120
7120
|
function wcStopAll() {
|
|
7121
|
-
// Abort ongoing generation
|
|
7122
7121
|
if (_wcGenAbortCtrl) { _wcGenAbortCtrl.abort(); _wcGenAbortCtrl = null; }
|
|
7123
7122
|
wcState.running = false;
|
|
7124
7123
|
wcChatRunning = false;
|
|
@@ -7128,6 +7127,21 @@ function wcStopAll() {
|
|
|
7128
7127
|
renderWebCraft(document.getElementById('content'));
|
|
7129
7128
|
}
|
|
7130
7129
|
|
|
7130
|
+
function wcOverlayMinimize() {
|
|
7131
|
+
_wcOverlayMinimized = true;
|
|
7132
|
+
renderWebCraft(document.getElementById('content'));
|
|
7133
|
+
if (_wcOverlayTimer) clearTimeout(_wcOverlayTimer);
|
|
7134
|
+
_wcOverlayTimer = setTimeout(function() {
|
|
7135
|
+
if (wcState.running) { _wcOverlayMinimized = false; renderWebCraft(document.getElementById('content')); }
|
|
7136
|
+
}, 10000);
|
|
7137
|
+
}
|
|
7138
|
+
|
|
7139
|
+
function wcOverlayRestore() {
|
|
7140
|
+
if (_wcOverlayTimer) { clearTimeout(_wcOverlayTimer); _wcOverlayTimer = null; }
|
|
7141
|
+
_wcOverlayMinimized = false;
|
|
7142
|
+
renderWebCraft(document.getElementById('content'));
|
|
7143
|
+
}
|
|
7144
|
+
|
|
7131
7145
|
function wcRemoveAttachment(ai) {
|
|
7132
7146
|
wcChatAttachments.splice(ai, 1);
|
|
7133
7147
|
renderWebCraft(document.getElementById('content'));
|
|
@@ -7732,7 +7746,7 @@ async function wcGenerate() {
|
|
|
7732
7746
|
{ name: 'server/middleware/security.js', lang: 'javascript', prompt: 'Generate server/middleware/security.js: detect sandbox via isSandbox = !process.env.NODE_ENV || process.env.NODE_ENV === "development". Use helmet CSP: defaultSrc self, scriptSrc self unsafe-inline, styleSrc self unsafe-inline, imgSrc self data:, connectSrc self, objectSrc none. frameAncestors: if isSandbox use ["self", "http://127.0.0.1:*", "http://localhost:*"] else ["none"]. NO X-Frame-Options DENY (conflicts with frameAncestors). NO HSTS in sandbox (HTTP only). Referrer-Policy strict-origin-when-cross-origin. Add express-rate-limit for general routes (100/15min) and strict limiter for auth (5/15min). Export { applySecurityMiddleware, authLimiter }.' },
|
|
7733
7747
|
{ name: 'server/middleware/validate.js', lang: 'javascript', prompt: 'Generate server/middleware/validate.js using express-validator. Export handleValidationErrors middleware. Export auth field validators: registerValidator (fields: '+authFieldsDef+'), loginValidator (email + password).' },
|
|
7734
7748
|
{ name: 'server/services/email.js', lang: 'javascript', prompt: 'Generate server/services/email.js: Nodemailer transporter using SMTP from env. Function sendVerificationEmail(to, token, baseUrl): sends HTML email with verification link. Function sendPasswordResetEmail(to, token, baseUrl). Add SendGrid fallback (commented out, predisposed with transporter swap). Never expose credentials.' },
|
|
7735
|
-
{ name: 'server/routes/auth.js', lang: 'javascript', prompt: 'Generate server/routes/auth.js: POST /register (validate fields: '+authFieldsDef+', check duplicate email, bcrypt hash password cost 12, insert user, send verification email, return 201), POST /login (validate, check email verified, compare bcrypt, issue JWT access 15min + refresh 7d httpOnly cookie), POST /logout (clear refresh cookie), POST /refresh-token (validate refresh from httpOnly cookie, rotate token), GET /verify-email/:token (mark email verified). Use parameterized queries only. Apply authLimiter to register and login.' },
|
|
7749
|
+
{ name: 'server/routes/auth.js', lang: 'javascript', prompt: 'Generate server/routes/auth.js: POST /register (validate fields: '+authFieldsDef+', check duplicate email, bcrypt hash password cost 12, insert user, send verification email, return 201), POST /login (validate, check email verified, compare bcrypt, issue JWT access 15min + refresh 7d httpOnly cookie), POST /logout (clear refresh cookie), POST /refresh-token (validate refresh from httpOnly cookie, rotate token), GET /verify-email/:token (mark email verified). Use parameterized queries only. Import authLimiter EXACTLY like this: const { authLimiter } = require("../middleware/security"); — do NOT create or import from ../middleware/rateLimiter (that file does not exist). Apply authLimiter to register and login.' },
|
|
7736
7750
|
{ name: 'server/routes/api.js', lang: 'javascript', prompt: 'Generate server/routes/api.js: Express router with a verifyToken middleware (validates JWT Bearer). GET /api/me returns authenticated user profile (no password hash). GET /api/health returns {status: ok, timestamp}. Structure ready for adding more routes.' },
|
|
7737
7751
|
{ name: 'server/index.js', lang: 'javascript', prompt: 'Generate server/index.js: Express app entry point. Apply applySecurityMiddleware first. Then apply sentinelMiddleware (import from ./middleware/sentinel.js). Use CORS with env CORS_ORIGIN. Parse JSON body (limit 10kb). Mount /api/auth → auth.js, /api → api.js. Serve public/ as static. 404 handler and global error handler (never leak stack traces in production). Start on PORT from env.' },
|
|
7738
7752
|
{ name: 'db/migrations/001_init.sql', lang: 'sql', prompt: 'Generate PostgreSQL migration 001_init.sql: CREATE TABLE users with id UUID default gen_random_uuid(), fields for '+authFieldsDef+', email_verified BOOLEAN default false, verification_token VARCHAR, reset_token VARCHAR, reset_token_expires TIMESTAMPTZ, refresh_token_hash VARCHAR, created_at TIMESTAMPTZ default now(), updated_at TIMESTAMPTZ default now(). CREATE INDEX on email. CREATE TABLE refresh_tokens (id, user_id FK, token_hash, expires_at, created_at). Add updated_at trigger function.' },
|
|
@@ -7781,22 +7795,6 @@ async function wcGenerate() {
|
|
|
7781
7795
|
'<div style="display:flex;gap:4px;margin-top:10px">'+[0,1,2,3,4].map(function(_,idx){ return '<div style="width:6px;height:6px;border-radius:50%;background:var(--green);animation:wcDot 1.1s ease-in-out infinite '+(idx*0.14)+'s"></div>'; }).join('')+'</div>';
|
|
7782
7796
|
}
|
|
7783
7797
|
|
|
7784
|
-
function wcOverlayMinimize() {
|
|
7785
|
-
_wcOverlayMinimized = true;
|
|
7786
|
-
renderWebCraft(document.getElementById('content'));
|
|
7787
|
-
// Restore after 10s of inactivity
|
|
7788
|
-
if (_wcOverlayTimer) clearTimeout(_wcOverlayTimer);
|
|
7789
|
-
_wcOverlayTimer = setTimeout(function() {
|
|
7790
|
-
if (wcState.running) { _wcOverlayMinimized = false; renderWebCraft(document.getElementById('content')); }
|
|
7791
|
-
}, 10000);
|
|
7792
|
-
}
|
|
7793
|
-
|
|
7794
|
-
function wcOverlayRestore() {
|
|
7795
|
-
if (_wcOverlayTimer) { clearTimeout(_wcOverlayTimer); _wcOverlayTimer = null; }
|
|
7796
|
-
_wcOverlayMinimized = false;
|
|
7797
|
-
renderWebCraft(document.getElementById('content'));
|
|
7798
|
-
}
|
|
7799
|
-
|
|
7800
7798
|
for (var fi = 0; fi < filePlan.length; fi++) {
|
|
7801
7799
|
var fp = filePlan[fi];
|
|
7802
7800
|
wcUpdateGenOverlay(fi, filePlan.length, fp.name);
|