openvibers/openvibe.chat Commits
AI text may describe people; only sex acts and porn stay gated (#274)
Changes
@@@ -969,6 +969,6 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [<!-- versions:start -->- openvibe-contracts: v0.222.0--- openvibe-sdk: v0.74.0++- openvibe-sdk: v0.77.0- openvibe-shared: v4.67.0<!-- versions:end -->@@@ -8,7 +8,7 @@"port": 4400,"domain": "openvibe.chat (Chat's own site: global chat, messages, rooms, settings; the service manifest records it live since 2026-09-24) and openvibe.live (/ws/chat, /api/chat/, /api/dm/, /api/tts/, /api/sounds via an nginx include in openvibe.live's vhost)","contracts": "openvibe-contracts v0.222.0",-- "sdk": "openvibe-sdk v0.74.0",++ "sdk": "openvibe-sdk v0.77.0","shared": "openvibe-shared v4.67.0","capabilities": ["chat.message.send",@@@ -17,7 +17,7 @@"iovalkey": "^0.4.0","multer": "^2.0.2","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",-- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",++ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.77.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.67.0","pg": "^8.23.0","ws": "^8.18.0"@@@ -1311,9 +1311,9 @@}},"node_modules/openvibe-sdk": {-- "version": "0.74.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",-- "integrity": "sha512-DO9KVPnUriY/I4lX6ZEJtXaUvRDbJyqnqJxvlpl+zkNGFILpmuBXVJogNOCfK071Qci1gg7C4Iw1Xrseklcajg==",++ "version": "0.77.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.77.0",++ "integrity": "sha512-bFjW3E4LGh1XAtZjC0x01skHXWwT6iaT/31uTIt2TmSMua1YmH/P23uTuI8Tqkm7o0mGvmOglUpietPo4JHRzQ==","license": "MIT","bin": {"openvibe-download": "bin/openvibe-download.js"@@@ -29,7 +29,7 @@"iovalkey": "^0.4.0","multer": "^2.0.2","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",-- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",++ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.77.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.67.0","pg": "^8.23.0","ws": "^8.18.0"@@@ -244,7 +244,7 @@ function vibePrompt(member, askedBy, memory = null, { now = Date.now(), timezone'- OpenVibe first: for jobs call search_openvibe with owner "work", deals "deals", recipes and food "food", rentals "rent", help "help", quests "quest", videos and streams "live", OpenVibe tools "tools". Add freshness when it is about today, this week or the latest. Go to web_search only when that returns nothing useful, or when they ask for the wider web.','- When OpenVibe is weak: if search_openvibe returns fewer than 3 results, or a result that misses a constraint they stated (remote, a price limit, a city, the kind of thing they asked for: a keyboard, not a game), also call web_search for the same request before you answer. Tell them which results came from OpenVibe and which came from the web, and never present a result marked matches_constraints "no" as meeting what they asked.','- News: OpenVibe.News has no stories yet, so for news go to web_search with freshness "day" (or "week" for a roundup) and say which web source and date each story came from; never present a recorded stream or video as today\'s news.',-- '- When they send a picture you see it: describe what matters for their question (text in it, objects, a screenshot\'s error). Never guess who a person in it is, and never describe anyone\'s looks, body or age.',++ '- When they send a picture you see it: describe what matters for their question (text in it, objects, a screenshot\'s error). Never guess who a person in it is.','- Recurring work ("every morning, find me new remote jobs"): set_up_agent makes it one of their OpenVibe Agents, run daily or weekly on their own allowance with every result on its page. First say what it would do and when, and set it up only once they agree. my_agents lists the agents they have.','- You cannot yet make pictures, use their computer or set reminders. Say so plainly when asked, and offer what you can do instead.','- The earlier messages are this conversation: build on them. Never invent facts about the person or their plans; when you do not know, say so and ask.',nnew file mode 100644@@@ -0,0 +1,18 @@++'use strict';++// Owner, 2026-10-31: AI may describe people; only sex acts and porn stay gated. No server file may call the old++// looks filter again.++const assert = require('assert');++const fs = require('fs');++const path = require('path');++++const root = path.join(__dirname, '..');++const offenders = [];++(function walk(dir) {++ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {++ const p = path.join(dir, e.name);++ if (e.isDirectory()) walk(p);++ else if (e.name.endsWith('.js') && /\b(noLooks|noLooksTags|hasLooks)\s*\(|openvibe-sdk\/no-looks/.test(fs.readFileSync(p, 'utf8'))) offenders.push(path.relative(root, p));++ }++})(path.join(root, 'server'));++assert.deepStrictEqual(offenders, [], 'no looks filter in server/');++console.log('No looks filter: AI text describes people as written.');
@@ -969,6 +969,6 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
@@ -969,6 +969,6 @@ Part of the [OpenVibe network](https://openvibe.network). Built in the open by [
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.222.0
- openvibe-contracts: v0.222.0
-- openvibe-sdk: v0.74.0
+- openvibe-sdk: v0.77.0
- openvibe-shared: v4.67.0
- openvibe-shared: v4.67.0
<!-- versions:end -->
<!-- versions:end -->
@@ -8,7 +8,7 @@
@@ -8,7 +8,7 @@
"port": 4400,
"port": 4400,
"domain": "openvibe.chat (Chat's own site: global chat, messages, rooms, settings; the service manifest records it live since 2026-09-24) and openvibe.live (/ws/chat, /api/chat/, /api/dm/, /api/tts/, /api/sounds via an nginx include in openvibe.live's vhost)",
"domain": "openvibe.chat (Chat's own site: global chat, messages, rooms, settings; the service manifest records it live since 2026-09-24) and openvibe.live (/ws/chat, /api/chat/, /api/dm/, /api/tts/, /api/sounds via an nginx include in openvibe.live's vhost)",
"contracts": "openvibe-contracts v0.222.0",
"contracts": "openvibe-contracts v0.222.0",
- "sdk": "openvibe-sdk v0.74.0",
+ "sdk": "openvibe-sdk v0.77.0",
"shared": "openvibe-shared v4.67.0",
"shared": "openvibe-shared v4.67.0",
"capabilities": [
"capabilities": [
"chat.message.send",
"chat.message.send",
@@ -17,7 +17,7 @@
@@ -17,7 +17,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"multer": "^2.0.2",
"multer": "^2.0.2",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",
+ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.77.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.67.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.67.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
"ws": "^8.18.0"
"ws": "^8.18.0"
@@ -1311,9 +1311,9 @@
@@ -1311,9 +1311,9 @@
}
}
},
},
"node_modules/openvibe-sdk": {
"node_modules/openvibe-sdk": {
- "version": "0.74.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",
- "integrity": "sha512-DO9KVPnUriY/I4lX6ZEJtXaUvRDbJyqnqJxvlpl+zkNGFILpmuBXVJogNOCfK071Qci1gg7C4Iw1Xrseklcajg==",
+ "version": "0.77.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.77.0",
+ "integrity": "sha512-bFjW3E4LGh1XAtZjC0x01skHXWwT6iaT/31uTIt2TmSMua1YmH/P23uTuI8Tqkm7o0mGvmOglUpietPo4JHRzQ==",
"license": "MIT",
"license": "MIT",
"bin": {
"bin": {
"openvibe-download": "bin/openvibe-download.js"
"openvibe-download": "bin/openvibe-download.js"
@@ -29,7 +29,7 @@
@@ -29,7 +29,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"multer": "^2.0.2",
"multer": "^2.0.2",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.222.0",
- "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",
+ "openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.77.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.67.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.67.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
"ws": "^8.18.0"
"ws": "^8.18.0"
@@ -244,7 +244,7 @@ function vibePrompt(member, askedBy, memory = null, { now = Date.now(), timezone
@@ -244,7 +244,7 @@ function vibePrompt(member, askedBy, memory = null, { now = Date.now(), timezone
'- OpenVibe first: for jobs call search_openvibe with owner "work", deals "deals", recipes and food "food", rentals "rent", help "help", quests "quest", videos and streams "live", OpenVibe tools "tools". Add freshness when it is about today, this week or the latest. Go to web_search only when that returns nothing useful, or when they ask for the wider web.',
'- OpenVibe first: for jobs call search_openvibe with owner "work", deals "deals", recipes and food "food", rentals "rent", help "help", quests "quest", videos and streams "live", OpenVibe tools "tools". Add freshness when it is about today, this week or the latest. Go to web_search only when that returns nothing useful, or when they ask for the wider web.',
'- When OpenVibe is weak: if search_openvibe returns fewer than 3 results, or a result that misses a constraint they stated (remote, a price limit, a city, the kind of thing they asked for: a keyboard, not a game), also call web_search for the same request before you answer. Tell them which results came from OpenVibe and which came from the web, and never present a result marked matches_constraints "no" as meeting what they asked.',
'- When OpenVibe is weak: if search_openvibe returns fewer than 3 results, or a result that misses a constraint they stated (remote, a price limit, a city, the kind of thing they asked for: a keyboard, not a game), also call web_search for the same request before you answer. Tell them which results came from OpenVibe and which came from the web, and never present a result marked matches_constraints "no" as meeting what they asked.',
'- News: OpenVibe.News has no stories yet, so for news go to web_search with freshness "day" (or "week" for a roundup) and say which web source and date each story came from; never present a recorded stream or video as today\'s news.',
'- News: OpenVibe.News has no stories yet, so for news go to web_search with freshness "day" (or "week" for a roundup) and say which web source and date each story came from; never present a recorded stream or video as today\'s news.',
- '- When they send a picture you see it: describe what matters for their question (text in it, objects, a screenshot\'s error). Never guess who a person in it is, and never describe anyone\'s looks, body or age.',
+ '- When they send a picture you see it: describe what matters for their question (text in it, objects, a screenshot\'s error). Never guess who a person in it is.',
'- Recurring work ("every morning, find me new remote jobs"): set_up_agent makes it one of their OpenVibe Agents, run daily or weekly on their own allowance with every result on its page. First say what it would do and when, and set it up only once they agree. my_agents lists the agents they have.',
'- Recurring work ("every morning, find me new remote jobs"): set_up_agent makes it one of their OpenVibe Agents, run daily or weekly on their own allowance with every result on its page. First say what it would do and when, and set it up only once they agree. my_agents lists the agents they have.',
'- You cannot yet make pictures, use their computer or set reminders. Say so plainly when asked, and offer what you can do instead.',
'- You cannot yet make pictures, use their computer or set reminders. Say so plainly when asked, and offer what you can do instead.',
'- The earlier messages are this conversation: build on them. Never invent facts about the person or their plans; when you do not know, say so and ask.',
'- The earlier messages are this conversation: build on them. Never invent facts about the person or their plans; when you do not know, say so and ask.',
new file mode 100644
new file mode 100644
@@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
+'use strict';
+// Owner, 2026-10-31: AI may describe people; only sex acts and porn stay gated. No server file may call the old
+// looks filter again.
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+
+const root = path.join(__dirname, '..');
+const offenders = [];
+(function walk(dir) {
+ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
+ const p = path.join(dir, e.name);
+ if (e.isDirectory()) walk(p);
+ else if (e.name.endsWith('.js') && /\b(noLooks|noLooksTags|hasLooks)\s*\(|openvibe-sdk\/no-looks/.test(fs.readFileSync(p, 'utf8'))) offenders.push(path.relative(root, p));
+ }
+})(path.join(root, 'server'));
+assert.deepStrictEqual(offenders, [], 'no looks filter in server/');
+console.log('No looks filter: AI text describes people as written.');