openvibers/openvibe.bench Commits

openvibe-shared v4.108.0 (was v4.107.4) (#118)

OP OpenVibers committed 10 days ago · f55bf04f65 · 6 files, +22 −8

* openvibe-shared v4.108.0 (was v4.107.4)

Opened by scripts/pin-bump.js in OpenVibers/OpenVibe.Shared after the v4.108.0 release.

* llms.txt links each page at its Markdown twin, with an ## Optional section (AGT-5)

Changes

ddiff --git a/README.md b/README.md
iindex 9bbb101..2b5f2e2 100644
---- a/README.md
++++ b/README.md
@@@ -34,5 +34,5 @@ JSON under `/api/v1`; errors are `application/problem+json`. See `/docs` for the
<!-- versions:start -->
- openvibe-contracts: v0.247.0
- openvibe-sdk: v0.82.0
--- openvibe-shared: v4.107.4
++- openvibe-shared: v4.108.0
<!-- versions:end -->
ddiff --git a/STATUS.json b/STATUS.json
iindex c9fe13e..91ba782 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -6,6 +6,6 @@
"summary": "The shared AI benchmark and comparison engine for every room: kinds, pinned rounds, blind judgements, elo/pareto/cost boards, an open dataset per kind, private evals and an MCP endpoint.",
"contracts": "openvibe-contracts v0.247.0",
"sdk": "openvibe-sdk v0.82.0",
-- "shared": "openvibe-shared v4.107.4",
++ "shared": "openvibe-shared v4.108.0",
"updated": "2026-11-03"
}
ddiff --git a/package-lock.json b/package-lock.json
iindex e0195ac..f55d05d 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -17,7 +17,7 @@
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.247.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
"pg": "^8.23.0",
"three": "0.170.0"
},
@@@ -1195,9 +1195,9 @@
}
},
"node_modules/openvibe-shared": {
-- "version": "4.107.4",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
-- "integrity": "sha512-tThN0m3KMncEHVcBOvE+ysHjsZTlVIDLG1P+/i2Mulmxfc/AUpebAXhpWWrut50OChZ8o+HeePxsSrPI8mUQOQ==",
++ "version": "4.108.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
++ "integrity": "sha512-NPzwjxpzGIpFpIm4uw3+VwHfsxbJ2+cD9yuhRzSwolSwqv2kCmwaVtHJ0DA9gKO3K8PCBfIP3UpKzpuSbYEJ+g==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0",
ddiff --git a/package.json b/package.json
iindex 07ce946..c5486ef 100644
---- a/package.json
++++ b/package.json
@@@ -24,7 +24,7 @@
"iovalkey": "^0.4.0",
"openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.247.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.82.0",
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.107.4",
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.108.0",
"pg": "^8.23.0",
"three": "0.170.0"
},
ddiff --git a/server/http/discovery.js b/server/http/discovery.js
iindex d65ee95..8a8d182 100644
---- a/server/http/discovery.js
++++ b/server/http/discovery.js
@@@ -48,14 +48,18 @@ function createDiscoveryRoutes(ctx) {
});
r.get('/llms.txt', (_req, res) => {
++ // AGT-5: own pages link their Markdown twins (openvibe-shared 4.108.0); ## Optional is what an agent may skip.
res.type('text/plain').set('Cache-Control', TEXT).send(seo.llmsTxt({
name: SITE_NAME,
summary: DESCRIPTION,
++ markdown: true,
++ base: site,
details: 'GET /api/v1/kinds lists the benchmark kinds. GET /api/v1/boards/:kind?type=elo|pareto|cost renders a board as JSON. GET /api/v1/datasets/:kind.jsonl is the open dataset without voter ids. GET /api/v1/datasets/benchmarks.jsonl is every public benchmark and its runs. POST /mcp is the Model Context Protocol endpoint.',
sections: [
{ title: 'Start here', links: [{ title: SITE_NAME, url: abs('/') }, { title: 'The API', url: abs('/docs') }] },
-- { title: 'Machine-readable', links: [{ title: 'Kinds (JSON)', url: abs('/api/v1/kinds') }, { title: 'Sitemap', url: abs('/sitemap.xml') }, { title: 'Release metadata (JSON)', url: abs('/release.json') }] },
++ { title: 'Machine-readable', links: [{ title: 'Kinds (JSON)', url: abs('/api/v1/kinds') }] },
],
++ optional: [{ title: 'Sitemap', url: abs('/sitemap.xml') }, { title: 'Full text for language models', url: abs('/llms-full.txt') }, { title: 'Release metadata (JSON)', url: abs('/release.json') }],
}));
});
ddiff --git a/test/llms-full.test.js b/test/llms-full.test.js
iindex fe3914e..d35bd79 100644
---- a/test/llms-full.test.js
++++ b/test/llms-full.test.js
@@@ -15,6 +15,16 @@ const { boot, check, done } = require('./helpers/boot');
assert.ok(r.text.length > 2000, `${r.text.length} characters`);
assert.ok(!/<\/?(div|p|span|a|code|pre|section|h[1-6]|li|ul|ol|table|tr|td|th|button|nav)\b[^>]*>/i.test(r.text.split('### The Bench API')[1] || ''), 'the page as text, no markup');
});
++ await check('llms.txt (AGT-5): own pages at their Markdown twins, the API and files as they are, Optional last', async () => {
++ const r = await t.get('/llms.txt');
++ assert.strictEqual(r.status, 200);
++ assert.match(r.text, /\(https?:\/\/[^)]*\/index\.md\)/, 'the home links its twin');
++ assert.match(r.text, /\(https?:\/\/[^)]*\/docs\.md\)/);
++ assert.match(r.text, /\(https?:\/\/[^)]*\/api\/v1\/kinds\)/);
++ assert.ok(r.text.includes('\n## Optional\n') && r.text.lastIndexOf('\n## ') === r.text.indexOf('\n## Optional\n'));
++ const twin = await t.get('/docs.md');
++ assert.strictEqual(twin.status, 200, 'the twin it links answers');
++ });
await check('stop', async () => { await t.close(); });
done();
})();