openvibers/openvibe.live Commits
openvibe-shared v4.13.0 (was v4.12.0) (#367)
Changes
@@@ -177,5 +177,5 @@ Minimum `.env`: `BASE_URL`, `JWT_SECRET`, `OV_NETWORK_URL`, `OV_NETWORK_INTERNAL<!-- versions:start -->- openvibe-contracts: v0.213.0- openvibe-sdk: v0.64.0--- openvibe-shared: v4.12.0++- openvibe-shared: v4.13.0<!-- versions:end -->@@@ -7,7 +7,7 @@"domain": "openvibe.live (www, ingest, whip)","contracts": "openvibe-contracts v0.213.0","sdk": "openvibe-sdk v0.64.0",-- "shared": "openvibe-shared v4.12.0",++ "shared": "openvibe-shared v4.13.0","capabilities": ["live.chat_context.read","live.chat_effects.write",@@@ -32,5 +32,5 @@"per-actor limits on API writes; account export and deletion contributions; follows on OpenVibe.Network","channel ↔ OpenVibe.Bot robot binding, its dashboard field and the Bot panel iframe on the channel page behind LIVE_BOT_EMBED (off by default; on in production)"],-- "updated": "2026-10-25"++ "updated": "2026-10-26"}@@@ -25,7 +25,7 @@"onnxruntime-node": "^1.20.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.13.0","pg": "^8.23.1","sanitize-html": "^2.17.7","sdp-transform": "^3.0.0",@@@ -2688,9 +2688,9 @@}},"node_modules/openvibe-shared": {-- "version": "4.12.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",-- "integrity": "sha512-k0i63sCPfHtz1KF5MJSI+CGv5VwBf4ISRzxJRQdorkeMKOTtABlAQfiH1uf9kJsd5/Wn7VUTTHlhhOLSX6ZTzw==",++ "version": "4.13.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.13.0",++ "integrity": "sha512-wvoTn4M1N/cQyO0LSQsuFkj8dIAO0o/wAaRaHsUICWtVQ5WsLXr2n4cwh0367yZBEtpa5yIWyF2Tg0fiOU50mw==","license": "MIT","dependencies": {"jsonwebtoken": "^9.0.0"@@@ -44,7 +44,7 @@"onnxruntime-node": "^1.20.0","openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.13.0","pg": "^8.23.1","sanitize-html": "^2.17.7","sdp-transform": "^3.0.0",@@@ -30,7 +30,9 @@ async function check(name, fn) {const r = await get('/robots.txt');assert.strictEqual(r.status, 200);assert.match(r.headers['content-type'], /^text\/plain/);-- assert.ok(r.text.startsWith('User-agent: *\nAllow: /\n'), r.text.slice(0, 80));++ // Shared 4.13 opens robots.txt with its content-signals note (a comment and Content-Signal); the rules follow.++ assert.ok(r.text.replace(/^(?:#[^\n]*\n|Content-Signal:[^\n]*\n|\n)*/, '').startsWith('User-agent: *\nAllow: /\n'), r.text.slice(0, 160));++ assert.ok(/^Content-Signal: search=yes, ai-input=yes, ai-train=yes$/m.test(r.text), 'search, AI answers and AI training allowed in words');assert.ok(/^User-agent: GPTBot$/m.test(r.text) && /^User-agent: ClaudeBot$/m.test(r.text));assert.ok(r.text.includes('Sitemap: https://openvibe.live/sitemap.xml'));assert.strictEqual(r.headers['cache-control'], 'public, max-age=3600, stale-while-revalidate=3600');
@@ -177,5 +177,5 @@ Minimum `.env`: `BASE_URL`, `JWT_SECRET`, `OV_NETWORK_URL`, `OV_NETWORK_INTERNAL
@@ -177,5 +177,5 @@ Minimum `.env`: `BASE_URL`, `JWT_SECRET`, `OV_NETWORK_URL`, `OV_NETWORK_INTERNAL
<!-- versions:start -->
<!-- versions:start -->
- openvibe-contracts: v0.213.0
- openvibe-contracts: v0.213.0
- openvibe-sdk: v0.64.0
- openvibe-sdk: v0.64.0
-- openvibe-shared: v4.12.0
+- openvibe-shared: v4.13.0
<!-- versions:end -->
<!-- versions:end -->
@@ -7,7 +7,7 @@
@@ -7,7 +7,7 @@
"domain": "openvibe.live (www, ingest, whip)",
"domain": "openvibe.live (www, ingest, whip)",
"contracts": "openvibe-contracts v0.213.0",
"contracts": "openvibe-contracts v0.213.0",
"sdk": "openvibe-sdk v0.64.0",
"sdk": "openvibe-sdk v0.64.0",
- "shared": "openvibe-shared v4.12.0",
+ "shared": "openvibe-shared v4.13.0",
"capabilities": [
"capabilities": [
"live.chat_context.read",
"live.chat_context.read",
"live.chat_effects.write",
"live.chat_effects.write",
@@ -32,5 +32,5 @@
@@ -32,5 +32,5 @@
"per-actor limits on API writes; account export and deletion contributions; follows on OpenVibe.Network",
"per-actor limits on API writes; account export and deletion contributions; follows on OpenVibe.Network",
"channel ↔ OpenVibe.Bot robot binding, its dashboard field and the Bot panel iframe on the channel page behind LIVE_BOT_EMBED (off by default; on in production)"
"channel ↔ OpenVibe.Bot robot binding, its dashboard field and the Bot panel iframe on the channel page behind LIVE_BOT_EMBED (off by default; on in production)"
],
],
- "updated": "2026-10-25"
+ "updated": "2026-10-26"
}
}
@@ -25,7 +25,7 @@
@@ -25,7 +25,7 @@
"onnxruntime-node": "^1.20.0",
"onnxruntime-node": "^1.20.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.13.0",
"pg": "^8.23.1",
"pg": "^8.23.1",
"sanitize-html": "^2.17.7",
"sanitize-html": "^2.17.7",
"sdp-transform": "^3.0.0",
"sdp-transform": "^3.0.0",
@@ -2688,9 +2688,9 @@
@@ -2688,9 +2688,9 @@
}
}
},
},
"node_modules/openvibe-shared": {
"node_modules/openvibe-shared": {
- "version": "4.12.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",
- "integrity": "sha512-k0i63sCPfHtz1KF5MJSI+CGv5VwBf4ISRzxJRQdorkeMKOTtABlAQfiH1uf9kJsd5/Wn7VUTTHlhhOLSX6ZTzw==",
+ "version": "4.13.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.13.0",
+ "integrity": "sha512-wvoTn4M1N/cQyO0LSQsuFkj8dIAO0o/wAaRaHsUICWtVQ5WsLXr2n4cwh0367yZBEtpa5yIWyF2Tg0fiOU50mw==",
"license": "MIT",
"license": "MIT",
"dependencies": {
"dependencies": {
"jsonwebtoken": "^9.0.0"
"jsonwebtoken": "^9.0.0"
@@ -44,7 +44,7 @@
@@ -44,7 +44,7 @@
"onnxruntime-node": "^1.20.0",
"onnxruntime-node": "^1.20.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.213.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.64.0",
- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.12.0",
+ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.13.0",
"pg": "^8.23.1",
"pg": "^8.23.1",
"sanitize-html": "^2.17.7",
"sanitize-html": "^2.17.7",
"sdp-transform": "^3.0.0",
"sdp-transform": "^3.0.0",
@@ -30,7 +30,9 @@ async function check(name, fn) {
@@ -30,7 +30,9 @@ async function check(name, fn) {
const r = await get('/robots.txt');
const r = await get('/robots.txt');
assert.strictEqual(r.status, 200);
assert.strictEqual(r.status, 200);
assert.match(r.headers['content-type'], /^text\/plain/);
assert.match(r.headers['content-type'], /^text\/plain/);
- assert.ok(r.text.startsWith('User-agent: *\nAllow: /\n'), r.text.slice(0, 80));
+ // Shared 4.13 opens robots.txt with its content-signals note (a comment and Content-Signal); the rules follow.
+ assert.ok(r.text.replace(/^(?:#[^\n]*\n|Content-Signal:[^\n]*\n|\n)*/, '').startsWith('User-agent: *\nAllow: /\n'), r.text.slice(0, 160));
+ assert.ok(/^Content-Signal: search=yes, ai-input=yes, ai-train=yes$/m.test(r.text), 'search, AI answers and AI training allowed in words');
assert.ok(/^User-agent: GPTBot$/m.test(r.text) && /^User-agent: ClaudeBot$/m.test(r.text));
assert.ok(/^User-agent: GPTBot$/m.test(r.text) && /^User-agent: ClaudeBot$/m.test(r.text));
assert.ok(r.text.includes('Sitemap: https://openvibe.live/sitemap.xml'));
assert.ok(r.text.includes('Sitemap: https://openvibe.live/sitemap.xml'));
assert.strictEqual(r.headers['cache-control'], 'public, max-age=3600, stale-while-revalidate=3600');
assert.strictEqual(r.headers['cache-control'], 'public, max-age=3600, stale-while-revalidate=3600');